From 385fa317c0066185494e3d389c3873a216ff2b2d Mon Sep 17 00:00:00 2001 From: Benoit Marty <benoitm@matrix.org> Date: Thu, 13 Feb 2020 20:45:03 +0100 Subject: [PATCH] Add a green frame around current small preview --- .../riotx/core/platform/CheckableImageView.kt | 60 +++++++++++++++++++ .../preview/AttachmentPreviewControllers.kt | 1 + .../preview/AttachmentPreviewItems.kt | 8 ++- .../color/checked_accent_color_selector.xml | 5 ++ .../background_checked_accent_color.xml | 6 ++ .../item_attachment_miniature_preview.xml | 4 +- 6 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 vector/src/main/java/im/vector/riotx/core/platform/CheckableImageView.kt create mode 100644 vector/src/main/res/color/checked_accent_color_selector.xml create mode 100644 vector/src/main/res/drawable/background_checked_accent_color.xml diff --git a/vector/src/main/java/im/vector/riotx/core/platform/CheckableImageView.kt b/vector/src/main/java/im/vector/riotx/core/platform/CheckableImageView.kt new file mode 100644 index 0000000000..3f8c3f1b45 --- /dev/null +++ b/vector/src/main/java/im/vector/riotx/core/platform/CheckableImageView.kt @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2020 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package im.vector.riotx.core.platform + +import android.content.Context +import android.util.AttributeSet +import android.widget.Checkable +import androidx.appcompat.widget.AppCompatImageView + +class CheckableImageView : AppCompatImageView, Checkable { + + private var mChecked = false + + constructor(context: Context) : super(context) + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) + + override fun isChecked(): Boolean { + return mChecked + } + + override fun setChecked(b: Boolean) { + if (b != mChecked) { + mChecked = b + refreshDrawableState() + } + } + + override fun toggle() { + isChecked = !mChecked + } + + override fun onCreateDrawableState(extraSpace: Int): IntArray { + val drawableState = super.onCreateDrawableState(extraSpace + 1) + if (isChecked) { + mergeDrawableStates(drawableState, CHECKED_STATE_SET) + } + return drawableState + } + + companion object { + private val CHECKED_STATE_SET = intArrayOf(android.R.attr.state_checked) + } +} diff --git a/vector/src/main/java/im/vector/riotx/features/attachments/preview/AttachmentPreviewControllers.kt b/vector/src/main/java/im/vector/riotx/features/attachments/preview/AttachmentPreviewControllers.kt index 966bfe26cd..34f018aaf9 100644 --- a/vector/src/main/java/im/vector/riotx/features/attachments/preview/AttachmentPreviewControllers.kt +++ b/vector/src/main/java/im/vector/riotx/features/attachments/preview/AttachmentPreviewControllers.kt @@ -45,6 +45,7 @@ class AttachmentMiniaturePreviewController @Inject constructor() : TypedEpoxyCon attachmentMiniaturePreviewItem { id(contentAttachmentData.path) attachment(contentAttachmentData) + checked(data.currentAttachmentIndex == index) clickListener { _ -> callback?.onAttachmentClicked(index, contentAttachmentData) } diff --git a/vector/src/main/java/im/vector/riotx/features/attachments/preview/AttachmentPreviewItems.kt b/vector/src/main/java/im/vector/riotx/features/attachments/preview/AttachmentPreviewItems.kt index 24d7b312ec..3b43fa6e20 100644 --- a/vector/src/main/java/im/vector/riotx/features/attachments/preview/AttachmentPreviewItems.kt +++ b/vector/src/main/java/im/vector/riotx/features/attachments/preview/AttachmentPreviewItems.kt @@ -26,6 +26,7 @@ import im.vector.matrix.android.api.session.content.ContentAttachmentData import im.vector.riotx.R import im.vector.riotx.core.epoxy.VectorEpoxyHolder import im.vector.riotx.core.epoxy.VectorEpoxyModel +import im.vector.riotx.core.platform.CheckableImageView abstract class AttachmentPreviewItem<H : AttachmentPreviewItem.Holder> : VectorEpoxyModel<H>() { @@ -56,16 +57,19 @@ abstract class AttachmentMiniaturePreviewItem : AttachmentPreviewItem<Attachment @EpoxyAttribute override lateinit var attachment: ContentAttachmentData @EpoxyAttribute var clickListener: View.OnClickListener? = null + @EpoxyAttribute + var checked: Boolean = false override fun bind(holder: Holder) { super.bind(holder) + holder.imageView.isChecked = checked holder.view.setOnClickListener(clickListener) } class Holder : AttachmentPreviewItem.Holder() { - override val imageView: ImageView + override val imageView: CheckableImageView get() = miniatureImageView - private val miniatureImageView by bind<ImageView>(R.id.attachmentMiniatureImageView) + private val miniatureImageView by bind<CheckableImageView>(R.id.attachmentMiniatureImageView) } } diff --git a/vector/src/main/res/color/checked_accent_color_selector.xml b/vector/src/main/res/color/checked_accent_color_selector.xml new file mode 100644 index 0000000000..dfd9cfcac6 --- /dev/null +++ b/vector/src/main/res/color/checked_accent_color_selector.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:color="@color/riotx_accent" android:state_checked="true" /> + <item android:color="@android:color/transparent" /> +</selector> diff --git a/vector/src/main/res/drawable/background_checked_accent_color.xml b/vector/src/main/res/drawable/background_checked_accent_color.xml new file mode 100644 index 0000000000..ee2cdeae23 --- /dev/null +++ b/vector/src/main/res/drawable/background_checked_accent_color.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + + <solid android:color="@color/checked_accent_color_selector"/> + +</shape> \ No newline at end of file diff --git a/vector/src/main/res/layout/item_attachment_miniature_preview.xml b/vector/src/main/res/layout/item_attachment_miniature_preview.xml index 23dfcf381b..a0fde7b778 100644 --- a/vector/src/main/res/layout/item_attachment_miniature_preview.xml +++ b/vector/src/main/res/layout/item_attachment_miniature_preview.xml @@ -8,10 +8,12 @@ card_view:cardBackgroundColor="@android:color/transparent" card_view:cardElevation="0dp"> - <ImageView + <im.vector.riotx.core.platform.CheckableImageView android:id="@+id/attachmentMiniatureImageView" android:layout_width="64dp" android:layout_height="64dp" + android:background="@drawable/background_checked_accent_color" + android:padding="2dp" android:scaleType="centerCrop" tools:src="@tools:sample/backgrounds/scenic" />