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" />