From e88b49b50624cae7c7219f6b09eb058685ee435d Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Fri, 24 Jan 2020 10:00:27 +0100 Subject: [PATCH] Fix up adapter & coloring of the X button Signed-off-by: Mario Danic --- .../features/contactsflow/ContactPresenter.kt | 2 +- .../features/contactsflow/ContactsView.kt | 43 ++++++++++++++++++- .../nextcloud/talk/newarch/utils/Images.kt | 4 +- app/src/main/res/values/colors.xml | 1 + 4 files changed, 46 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/contactsflow/ContactPresenter.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/contactsflow/ContactPresenter.kt index b39a37f84..1d3d0fea8 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/features/contactsflow/ContactPresenter.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/contactsflow/ContactPresenter.kt @@ -91,7 +91,7 @@ open class ContactPresenter(context: Context, onElementClick: ((Page, H holder.itemView.participantNameTextView.text = context.getString(R.string.nc_guest) } - holder.itemView.clearImageView?.load(Images().getImageWithBackground(context, R.drawable.ic_baseline_clear_24, R.color.white)) + holder.itemView.clearImageView?.load(Images().getImageWithBackground(context, R.drawable.ic_baseline_clear_24, R.color.bg_selected_participant_clear_icon, R.color.white)) when (participant?.source) { "users" -> { diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/contactsflow/ContactsView.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/contactsflow/ContactsView.kt index e408db75f..e80927644 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/features/contactsflow/ContactsView.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/contactsflow/ContactsView.kt @@ -96,6 +96,38 @@ class ContactsView(private val bundle: Bundle? = null) : BaseView() { selectedParticipantsRecyclerView.initRecyclerView(LinearLayoutManager(activity, RecyclerView.HORIZONTAL, false), selectedParticipantsAdapter, true) } + selectedParticipantsAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { + override fun onChanged() { + super.onChanged() + toggleSelectedParticipantsViewVisibility() + } + + override fun onItemRangeRemoved(positionStart: Int, itemCount: Int) { + super.onItemRangeRemoved(positionStart, itemCount) + toggleSelectedParticipantsViewVisibility() + } + + override fun onItemRangeMoved(fromPosition: Int, toPosition: Int, itemCount: Int) { + super.onItemRangeMoved(fromPosition, toPosition, itemCount) + toggleSelectedParticipantsViewVisibility() + } + + override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { + super.onItemRangeInserted(positionStart, itemCount) + toggleSelectedParticipantsViewVisibility() + } + + override fun onItemRangeChanged(positionStart: Int, itemCount: Int) { + super.onItemRangeChanged(positionStart, itemCount) + toggleSelectedParticipantsViewVisibility() + } + + override fun onItemRangeChanged(positionStart: Int, itemCount: Int, payload: Any?) { + super.onItemRangeChanged(positionStart, itemCount, payload) + toggleSelectedParticipantsViewVisibility() + } + }) + viewModel.apply { selectedParticipantsLiveData.observe(this@ContactsView) { participants -> view.selectedParticipantsRecyclerView.isVisible = participants.isNotEmpty() @@ -110,6 +142,11 @@ class ContactsView(private val bundle: Bundle? = null) : BaseView() { return view } + private fun toggleSelectedParticipantsViewVisibility() { + view?.selectedParticipantsRecyclerView?.isVisible = selectedParticipantsAdapter.itemCount > 0 + view?.divider?.isVisible = selectedParticipantsAdapter.itemCount > 0 + } + private fun onElementClick(page: Page, holder: Presenter.Holder, element: Element) { if (element.data is Participant?) { val participant = element.data as Participant? @@ -121,7 +158,11 @@ class ContactsView(private val bundle: Bundle? = null) : BaseView() { viewModel.selectParticipant(it) } it.selected = !isElementSelected - participantsAdapter.notifyItemChanged(holder.adapterPosition, ElementPayload.SELECTION_TOGGLE) + if (element.type == ParticipantElementType.PARTICIPANT_SELECTED.ordinal) { + participantsAdapter.notifyItemRangeChanged(0, participantsAdapter.itemCount, ElementPayload.SELECTION_TOGGLE) + } else { + participantsAdapter.notifyItemChanged(holder.adapterPosition, ElementPayload.SELECTION_TOGGLE) + } } } diff --git a/app/src/main/java/com/nextcloud/talk/newarch/utils/Images.kt b/app/src/main/java/com/nextcloud/talk/newarch/utils/Images.kt index ecf389742..b143371d6 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/utils/Images.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/utils/Images.kt @@ -70,9 +70,9 @@ class Images { } } - fun getImageWithBackground(context: Context, drawableId: Int, foregroundColorTint: Int? = null): Bitmap { + fun getImageWithBackground(context: Context, drawableId: Int, backgroundDrawableId: Int = R.color.bg_message_list_incoming_bubble, foregroundColorTint: Int? = null): Bitmap { val layers = arrayOfNulls(2) - layers[0] = context.getDrawable(R.color.bg_message_list_incoming_bubble) + layers[0] = context.getDrawable(backgroundDrawableId) var scale = 0.25f if (drawableId == R.drawable.ic_baseline_email_24 || drawableId == R.drawable.ic_link_white_24px) { scale = 0.5f diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index b0e44e100..f9526ac4f 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -64,6 +64,7 @@ #333333 + #484848 #EFEFEF @color/colorPrimary