Prechádzať zdrojové kódy

Custom ARGB input invalidates the grid, part of #1665.

Aidan Follestad 6 rokov pred
rodič
commit
7877d0afcb

+ 15 - 12
color/src/main/java/com/afollestad/materialdialogs/color/ColorGridAdapter.kt

@@ -19,8 +19,8 @@ import com.afollestad.materialdialogs.actions.hasActionButtons
 import com.afollestad.materialdialogs.actions.setActionButtonEnabled
 import com.afollestad.materialdialogs.color.utils.setVisibleOrGone
 import com.afollestad.materialdialogs.utils.MDUtil.isColorDark
-import com.afollestad.materialdialogs.utils.MDUtil.resolveDrawable
 import com.afollestad.materialdialogs.utils.MDUtil.resolveColor
+import com.afollestad.materialdialogs.utils.MDUtil.resolveDrawable
 
 internal class ColorGridViewHolder(
   itemView: View,
@@ -115,20 +115,23 @@ internal class ColorGridAdapter(
   }
 
   init {
-    if (initialSelection != null) {
-      selectedTopIndex = colors.indexOfFirst { it == initialSelection }
-      if (selectedTopIndex == -1 && subColors != null) {
-        for (section in 0 until subColors.size) {
-          selectedSubIndex = subColors[section].indexOfFirst { it == initialSelection }
-          if (selectedSubIndex != -1) {
-            inSub = true
-            selectedSubIndex++ // compensate for the up arrow
-            selectedTopIndex = section
-            break
-          }
+    initialSelection?.let(this::updateSelection)
+  }
+
+  internal fun updateSelection(@ColorInt color: Int) {
+    selectedTopIndex = colors.indexOfFirst { it == color }
+    if (selectedTopIndex == -1 && subColors != null) {
+      for (section in 0 until subColors.size) {
+        selectedSubIndex = subColors[section].indexOfFirst { it == color }
+        if (selectedSubIndex != -1) {
+          inSub = true
+          selectedSubIndex++ // compensate for the up arrow
+          selectedTopIndex = section
+          break
         }
       }
     }
+    notifyDataSetChanged()
   }
 
   override fun getItemViewType(position: Int): Int {

+ 5 - 0
color/src/main/java/com/afollestad/materialdialogs/color/DialogColorChooserExt.kt

@@ -336,7 +336,12 @@ private fun MaterialDialog.onCustomValueChanged(
   if (!waitForPositiveButton && valueChanged) {
     selection?.invoke(this, color)
   }
+
   updateActionButtonsColor(color)
+  getCustomView()?.findViewById<DialogRecyclerView>(R.id.colorPresetGrid)
+      ?.let {
+        (it.adapter as ColorGridAdapter).updateSelection(color)
+      }
 }
 
 private fun MaterialDialog.selectedColor(allowCustomColor: Boolean): Int? {

+ 1 - 1
color/src/main/res/layout/md_color_chooser_preview_frame.xml

@@ -35,7 +35,7 @@
         android:id="@+id/hexValueView"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:digits="abcdefghijklmnopqrstuvwxyz1234567890"
+        android:digits="0123456789ABCDEFabcdef"
         android:fontFamily="sans-serif-medium"
         android:hint="000000"
         android:inputType="text"