mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-22 12:15:00 +01:00
Move some chat and conversation info to ImageView
Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
parent
124c2951d9
commit
561f7bff69
@ -23,9 +23,9 @@ package com.nextcloud.talk.controllers
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.res.Resources
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.PorterDuff
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.os.Parcelable
|
||||
@ -45,7 +45,6 @@ import android.widget.ImageButton
|
||||
import android.widget.ProgressBar
|
||||
import android.widget.RelativeLayout
|
||||
import android.widget.TextView
|
||||
import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory
|
||||
import androidx.emoji.text.EmojiCompat
|
||||
import androidx.emoji.widget.EmojiEditText
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
@ -53,15 +52,12 @@ import androidx.recyclerview.widget.RecyclerView
|
||||
import autodagger.AutoInjector
|
||||
import butterknife.BindView
|
||||
import butterknife.OnClick
|
||||
import coil.target.Target
|
||||
import coil.transform.CircleCropTransformation
|
||||
import com.bluelinelabs.conductor.RouterTransaction
|
||||
import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler
|
||||
import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler
|
||||
import com.facebook.common.executors.UiThreadImmediateExecutorService
|
||||
import com.facebook.common.references.CloseableReference
|
||||
import com.facebook.datasource.DataSource
|
||||
import com.facebook.drawee.backends.pipeline.Fresco
|
||||
import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber
|
||||
import com.facebook.imagepipeline.image.CloseableImage
|
||||
import com.nextcloud.talk.R
|
||||
import com.nextcloud.talk.activities.MagicCallActivity
|
||||
import com.nextcloud.talk.adapters.messages.MagicIncomingTextMessageViewHolder
|
||||
@ -84,6 +80,7 @@ import com.nextcloud.talk.models.json.conversations.RoomOverall
|
||||
import com.nextcloud.talk.models.json.conversations.RoomsOverall
|
||||
import com.nextcloud.talk.models.json.generic.GenericOverall
|
||||
import com.nextcloud.talk.models.json.mention.Mention
|
||||
import com.nextcloud.talk.newarch.utils.Images
|
||||
import com.nextcloud.talk.presenters.MentionAutocompletePresenter
|
||||
import com.nextcloud.talk.utils.ApiUtils
|
||||
import com.nextcloud.talk.utils.ConductorRemapping
|
||||
@ -115,6 +112,7 @@ import io.reactivex.disposables.Disposable
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
import org.koin.android.ext.android.inject
|
||||
import org.parceler.Parcels
|
||||
import retrofit2.HttpException
|
||||
import retrofit2.Response
|
||||
@ -194,6 +192,8 @@ class ChatController(args: Bundle) : BaseController(), MessagesListAdapter
|
||||
var lobbyTimerHandler: Handler? = null
|
||||
val roomJoined: Boolean = false
|
||||
|
||||
val imageLoader: coil.ImageLoader by inject()
|
||||
|
||||
init {
|
||||
setHasOptionsMenu(true)
|
||||
NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this)
|
||||
@ -320,28 +320,25 @@ class ChatController(args: Bundle) : BaseController(), MessagesListAdapter
|
||||
)
|
||||
.toInt()
|
||||
|
||||
val imageRequest = DisplayUtils.getImageRequestForUrl(
|
||||
ApiUtils.getUrlForAvatarWithNameAndPixels(
|
||||
conversationUser?.baseUrl,
|
||||
currentConversation?.name, avatarSize / 2
|
||||
), null
|
||||
)
|
||||
|
||||
val imagePipeline = Fresco.getImagePipeline()
|
||||
val dataSource = imagePipeline.fetchDecodedImage(imageRequest, null)
|
||||
|
||||
dataSource.subscribe(object : BaseBitmapDataSubscriber() {
|
||||
override fun onNewResultImpl(bitmap: Bitmap?) {
|
||||
if (actionBar != null && bitmap != null && resources != null) {
|
||||
val roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(resources!!, bitmap)
|
||||
roundedBitmapDrawable.isCircular = true
|
||||
roundedBitmapDrawable.setAntiAlias(true)
|
||||
actionBar?.setIcon(roundedBitmapDrawable)
|
||||
avatarSize.let {
|
||||
val target = object : Target {
|
||||
override fun onSuccess(result: Drawable) {
|
||||
super.onSuccess(result)
|
||||
actionBar?.setIcon(result)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFailureImpl(dataSource: DataSource<CloseableReference<CloseableImage>>) {}
|
||||
}, UiThreadImmediateExecutorService.getInstance())
|
||||
// change lifecycle owner once we move to MVVM
|
||||
val avatarRequest = Images().getRequestForUrl(
|
||||
imageLoader, context, ApiUtils.getUrlForAvatarWithNameAndPixels(
|
||||
conversationUser?.baseUrl,
|
||||
currentConversation?.name, avatarSize / 2
|
||||
), conversationUser!!, target, null,
|
||||
CircleCropTransformation()
|
||||
);
|
||||
|
||||
imageLoader.load(avatarRequest)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -537,7 +534,8 @@ class ChatController(args: Bundle) : BaseController(), MessagesListAdapter
|
||||
|
||||
private fun checkReadOnlyState() {
|
||||
if (currentConversation != null && conversationUser != null) {
|
||||
if (currentConversation?.shouldShowLobby(conversationUser
|
||||
if (currentConversation?.shouldShowLobby(
|
||||
conversationUser
|
||||
) == true || currentConversation?.conversationReadOnlyState != null && currentConversation?.conversationReadOnlyState == Conversation.ConversationReadOnlyState.CONVERSATION_READ_ONLY
|
||||
) {
|
||||
|
||||
@ -566,7 +564,8 @@ class ChatController(args: Bundle) : BaseController(), MessagesListAdapter
|
||||
}
|
||||
|
||||
private fun checkLobbyState() {
|
||||
if (currentConversation != null && conversationUser != null && currentConversation?.isLobbyViewApplicable(conversationUser
|
||||
if (currentConversation != null && conversationUser != null && currentConversation?.isLobbyViewApplicable(
|
||||
conversationUser
|
||||
) == true
|
||||
) {
|
||||
|
||||
@ -1033,7 +1032,8 @@ class ChatController(args: Bundle) : BaseController(), MessagesListAdapter
|
||||
}
|
||||
|
||||
if (currentConversation != null && conversationUser != null && currentConversation!!
|
||||
.shouldShowLobby(conversationUser)) {
|
||||
.shouldShowLobby(conversationUser)
|
||||
) {
|
||||
return
|
||||
}
|
||||
|
||||
@ -1484,7 +1484,8 @@ class ChatController(args: Bundle) : BaseController(), MessagesListAdapter
|
||||
conversationIntent.putExtras(bundle)
|
||||
|
||||
if (roomOverall != null && roomOverall.ocs != null && roomOverall.ocs.data !=
|
||||
null && roomOverall.ocs.data.token != null) {
|
||||
null && roomOverall.ocs.data.token != null
|
||||
) {
|
||||
ConductorRemapping.remapChatController(
|
||||
router, conversationUser.id,
|
||||
roomOverall.ocs.data.token!!, bundle, false
|
||||
|
@ -29,6 +29,7 @@ import android.view.LayoutInflater
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import android.widget.ProgressBar
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.widget.SwitchCompat
|
||||
@ -40,14 +41,14 @@ import androidx.work.WorkManager
|
||||
import autodagger.AutoInjector
|
||||
import butterknife.BindView
|
||||
import butterknife.OnClick
|
||||
import coil.api.load
|
||||
import coil.transform.CircleCropTransformation
|
||||
import com.afollestad.materialdialogs.LayoutMode.WRAP_CONTENT
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.bottomsheets.BottomSheet
|
||||
import com.afollestad.materialdialogs.datetime.dateTimePicker
|
||||
import com.bluelinelabs.conductor.RouterTransaction
|
||||
import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler
|
||||
import com.facebook.drawee.backends.pipeline.Fresco
|
||||
import com.facebook.drawee.view.SimpleDraweeView
|
||||
import com.nextcloud.talk.R
|
||||
import com.nextcloud.talk.R.string
|
||||
import com.nextcloud.talk.adapters.items.UserItem
|
||||
@ -63,7 +64,10 @@ import com.nextcloud.talk.jobs.LeaveConversationWorker
|
||||
import com.nextcloud.talk.models.database.UserEntity
|
||||
import com.nextcloud.talk.models.json.conversations.Conversation
|
||||
import com.nextcloud.talk.models.json.conversations.Conversation.ConversationType
|
||||
import com.nextcloud.talk.models.json.conversations.Conversation.ConversationType.GROUP_CONVERSATION
|
||||
import com.nextcloud.talk.models.json.conversations.Conversation.ConversationType.ONE_TO_ONE_CONVERSATION
|
||||
import com.nextcloud.talk.models.json.conversations.Conversation.ConversationType.PUBLIC_CONVERSATION
|
||||
import com.nextcloud.talk.models.json.conversations.Conversation.ConversationType.SYSTEM_CONVERSATION
|
||||
import com.nextcloud.talk.models.json.conversations.RoomOverall
|
||||
import com.nextcloud.talk.models.json.converters.EnumNotificationLevelConverter
|
||||
import com.nextcloud.talk.models.json.generic.GenericOverall
|
||||
@ -134,7 +138,7 @@ class ConversationInfoController(args: Bundle) : BaseController(),
|
||||
@BindView(R.id.start_time_preferences)
|
||||
lateinit var startTimeView: MaterialStandardPreference
|
||||
@BindView(R.id.avatar_image)
|
||||
lateinit var conversationAvatarImageView: SimpleDraweeView
|
||||
lateinit var conversationAvatarImageView: ImageView
|
||||
@BindView(R.id.display_name_text)
|
||||
lateinit var conversationDisplayName: EmojiTextView
|
||||
@BindView(R.id.participants_list_category)
|
||||
@ -254,7 +258,7 @@ class ConversationInfoController(args: Bundle) : BaseController(),
|
||||
private fun setupWebinaryView() {
|
||||
if (conversationUser!!.hasSpreedFeatureCapability("webinary-lobby") && (conversation!!.type
|
||||
== Conversation.ConversationType.GROUP_CONVERSATION || conversation!!.type ==
|
||||
Conversation.ConversationType.PUBLIC_CONVERSATION) && conversation!!.canModerate(
|
||||
PUBLIC_CONVERSATION) && conversation!!.canModerate(
|
||||
conversationUser
|
||||
)
|
||||
) {
|
||||
@ -827,45 +831,35 @@ class ConversationInfoController(args: Bundle) : BaseController(),
|
||||
|
||||
private fun loadConversationAvatar() {
|
||||
when (conversation!!.type) {
|
||||
Conversation.ConversationType.ONE_TO_ONE_CONVERSATION -> if (!TextUtils.isEmpty
|
||||
ONE_TO_ONE_CONVERSATION -> if (!TextUtils.isEmpty
|
||||
(conversation!!.name)
|
||||
) {
|
||||
val draweeController = Fresco.newDraweeControllerBuilder()
|
||||
.setOldController(conversationAvatarImageView.controller)
|
||||
.setAutoPlayAnimations(true)
|
||||
.setImageRequest(
|
||||
DisplayUtils.getImageRequestForUrl(
|
||||
ApiUtils.getUrlForAvatarWithName(
|
||||
conversationUser!!.baseUrl,
|
||||
conversation!!.name, R.dimen.avatar_size_big
|
||||
), null
|
||||
)
|
||||
)
|
||||
.build()
|
||||
conversationAvatarImageView.controller = draweeController
|
||||
conversationAvatarImageView.load(ApiUtils.getUrlForAvatarWithName(
|
||||
conversationUser!!.baseUrl,
|
||||
conversation!!.name, R.dimen.avatar_size_big
|
||||
)) {
|
||||
transformations(CircleCropTransformation())
|
||||
}
|
||||
}
|
||||
Conversation.ConversationType.GROUP_CONVERSATION -> conversationAvatarImageView.hierarchy.setPlaceholderImage(
|
||||
DisplayUtils
|
||||
.getRoundedBitmapDrawableFromVectorDrawableResource(
|
||||
resources,
|
||||
R.drawable.ic_people_group_white_24px
|
||||
)
|
||||
)
|
||||
Conversation.ConversationType.PUBLIC_CONVERSATION -> conversationAvatarImageView.hierarchy.setPlaceholderImage(
|
||||
DisplayUtils
|
||||
.getRoundedBitmapDrawableFromVectorDrawableResource(
|
||||
resources,
|
||||
R.drawable.ic_link_white_24px
|
||||
)
|
||||
)
|
||||
Conversation.ConversationType.SYSTEM_CONVERSATION -> {
|
||||
GROUP_CONVERSATION -> {
|
||||
conversationAvatarImageView.load(R.drawable.ic_people_group_white_24px) {
|
||||
transformations(CircleCropTransformation())
|
||||
}
|
||||
}
|
||||
PUBLIC_CONVERSATION -> {
|
||||
conversationAvatarImageView.load(R.drawable.ic_link_white_24px) {
|
||||
transformations(CircleCropTransformation())
|
||||
}
|
||||
}
|
||||
|
||||
SYSTEM_CONVERSATION -> {
|
||||
val layers = arrayOfNulls<Drawable>(2)
|
||||
layers[0] = context.getDrawable(R.drawable.ic_launcher_background)
|
||||
layers[1] = context.getDrawable(R.drawable.ic_launcher_foreground)
|
||||
val layerDrawable = LayerDrawable(layers)
|
||||
conversationAvatarImageView.hierarchy.setPlaceholderImage(
|
||||
DisplayUtils.getRoundedDrawable(layerDrawable)
|
||||
)
|
||||
conversationAvatarImageView.load(layerDrawable) {
|
||||
transformations(CircleCropTransformation())
|
||||
}
|
||||
}
|
||||
|
||||
else -> {
|
||||
|
@ -72,7 +72,6 @@ import eu.davidea.flexibleadapter.FlexibleAdapter.OnItemClickListener
|
||||
import eu.davidea.flexibleadapter.FlexibleAdapter.OnItemLongClickListener
|
||||
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
|
||||
import eu.davidea.flexibleadapter.items.IFlexible
|
||||
import kotlinx.android.synthetic.main.controller_conversations_rv.view.*
|
||||
import kotlinx.android.synthetic.main.controller_conversations_rv.view.dataStateView
|
||||
import kotlinx.android.synthetic.main.controller_conversations_rv.view.floatingActionButton
|
||||
import kotlinx.android.synthetic.main.controller_conversations_rv.view.recyclerView
|
||||
|
@ -65,12 +65,12 @@
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_marginTop="@dimen/margin_between_elements" />
|
||||
|
||||
<com.facebook.drawee.view.SimpleDraweeView
|
||||
<ImageView
|
||||
android:id="@+id/avatar_image"
|
||||
android:layout_width="@dimen/avatar_size_big"
|
||||
android:layout_height="@dimen/avatar_size_big"
|
||||
android:layout_centerHorizontal="true"
|
||||
apc:roundAsCircle="true" />
|
||||
/>
|
||||
|
||||
</RelativeLayout>
|
||||
</com.yarolegovich.mp.MaterialPreferenceCategory>
|
||||
|
Loading…
Reference in New Issue
Block a user