Skip to content
Snippets Groups Projects
Verified Commit 5f0cefad authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Clicking on avatar in user info now opens the avatar in browser

parent 08e09c3d
No related branches found
No related tags found
No related merge requests found
......@@ -19,6 +19,8 @@
package de.kuschku.quasseldroid.ui.chat.info.user
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.text.SpannableString
import android.view.LayoutInflater
......@@ -31,6 +33,7 @@ import android.widget.Toast
import androidx.lifecycle.Observer
import butterknife.BindView
import butterknife.ButterKnife
import com.google.gson.GsonBuilder
import de.kuschku.libquassel.protocol.Buffer_Type
import de.kuschku.libquassel.quassel.BufferInfo
import de.kuschku.libquassel.quassel.syncables.IrcUser
......@@ -41,13 +44,18 @@ import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.settings.MessageSettings
import de.kuschku.quasseldroid.ui.chat.ChatActivity
import de.kuschku.quasseldroid.util.avatars.AvatarHelper
import de.kuschku.quasseldroid.util.avatars.MatrixApi
import de.kuschku.quasseldroid.util.avatars.MatrixAvatarInfo
import de.kuschku.quasseldroid.util.helper.*
import de.kuschku.quasseldroid.util.irc.format.ContentFormatter
import de.kuschku.quasseldroid.util.irc.format.spans.IrcItalicSpan
import de.kuschku.quasseldroid.util.service.ServiceBoundFragment
import de.kuschku.quasseldroid.util.ui.BetterLinkMovementMethod
import de.kuschku.quasseldroid.util.ui.LinkLongClickMenuHelper
import de.kuschku.quasseldroid.viewmodel.data.Avatar
import io.reactivex.Observable
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import javax.inject.Inject
class UserInfoFragment : ServiceBoundFragment() {
......@@ -108,11 +116,19 @@ class UserInfoFragment : ServiceBoundFragment() {
@Inject
lateinit var messageSettings: MessageSettings
private var actualUrl: String? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_info_user, container, false)
ButterKnife.bind(this, view)
val matrixApi = Retrofit.Builder()
.baseUrl("https://matrix.org/")
.addConverterFactory(GsonConverterFactory.create(GsonBuilder().setLenient().create()))
.build()
.create(MatrixApi::class.java)
val openBuffer = arguments?.getBoolean("openBuffer")
val networkId2 = arguments?.getInt("networkId")
......@@ -158,10 +174,31 @@ class UserInfoFragment : ServiceBoundFragment() {
}.toLiveData().observe(this, Observer {
val processUser = { user: IrcUserInfo ->
avatar.post {
actualUrl = null
avatar.loadAvatars(
AvatarHelper.avatar(messageSettings, user, maxOf(avatar.width, avatar.height)),
crop = false
)
) { model ->
when (model) {
is String -> {
actualUrl = model
}
is Avatar.MatrixAvatar -> {
runInBackground {
matrixApi.avatarUrl(model.userId).execute().body()?.let {
it.avatarUrl?.let {
val avatarInfo = MatrixAvatarInfo(it, model.size)
val url = Uri.parse(avatarInfo.avatarUrl)
val imageUrl = matrixApi.avatarImage(server = url.host,
id = url.pathSegments.first()).request().url()
actualUrl = imageUrl.toString()
}
}
}
}
}
}
}
nick.text = user.nick
......@@ -250,6 +287,12 @@ class UserInfoFragment : ServiceBoundFragment() {
it?.orNull()?.let(processUser)
})
avatar.setOnClickListener {
context?.startActivity(Intent(Intent.ACTION_VIEW).apply {
data = Uri.parse(actualUrl)
})
}
actionMention.visibleIf(arguments?.getBoolean("openBuffer") == false)
val movementMethod = BetterLinkMovementMethod.newInstance()
......
......@@ -22,7 +22,11 @@ package de.kuschku.quasseldroid.util.helper
import android.graphics.drawable.Drawable
import android.widget.ImageView
import com.bumptech.glide.RequestBuilder
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.Target
import de.kuschku.quasseldroid.GlideApp
import de.kuschku.quasseldroid.GlideRequest
import de.kuschku.quasseldroid.GlideRequests
......@@ -44,7 +48,8 @@ fun GlideRequests.loadWithFallbacks(urls: List<Avatar>): GlideRequest<Drawable>?
return urls.foldRight(null, ::fold)
}
fun ImageView.loadAvatars(urls: List<Avatar>, fallback: Drawable? = null, crop: Boolean = true) {
fun ImageView.loadAvatars(urls: List<Avatar>, fallback: Drawable? = null, crop: Boolean = true,
listener: ((Any?) -> Unit)? = null) {
if (urls.isNotEmpty()) {
GlideApp.with(this)
.loadWithFallbacks(urls)
......@@ -56,6 +61,19 @@ fun ImageView.loadAvatars(urls: List<Avatar>, fallback: Drawable? = null, crop:
}
}
?.placeholder(fallback)
?.letIf(listener != null) {
it.addListener(object : RequestListener<Drawable> {
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?,
isFirstResource: Boolean) = false
override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?,
dataSource: DataSource?, isFirstResource: Boolean): Boolean {
listener?.invoke(model)
return false
}
})
}
?.into(this)
} else {
GlideApp.with(this).clear(this)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment