Parcourir la source

Fix list scrolling on quad-state dialog (#5602)

Ivan Iskandar il y a 3 ans
Parent
commit
00ac632d8f

+ 1 - 1
app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsDownloadController.kt

@@ -243,8 +243,8 @@ class SettingsDownloadController : SettingsController() {
 
             return MaterialAlertDialogBuilder(activity!!)
                 .setTitle(R.string.categories)
-                .setMessage(R.string.pref_download_new_categories_details)
                 .setQuadStateMultiChoiceItems(
+                    message = R.string.pref_download_new_categories_details,
                     items = items,
                     initialSelected = selected
                 ) { selections ->

+ 5 - 2
app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsLibraryController.kt

@@ -355,8 +355,11 @@ class SettingsLibraryController : SettingsController() {
 
             return MaterialAlertDialogBuilder(activity!!)
                 .setTitle(R.string.categories)
-                .setMessage(R.string.pref_library_update_categories_details)
-                .setQuadStateMultiChoiceItems(items = items, initialSelected = selected) { selections ->
+                .setQuadStateMultiChoiceItems(
+                    message = R.string.pref_library_update_categories_details,
+                    items = items,
+                    initialSelected = selected
+                ) { selections ->
                     selected = selections
                 }
                 .setPositiveButton(android.R.string.ok) { _, _ ->

+ 19 - 2
app/src/main/java/eu/kanade/tachiyomi/widget/materialdialogs/MaterialAlertDialogBuilderExtensions.kt

@@ -3,7 +3,9 @@ package eu.kanade.tachiyomi.widget.materialdialogs
 import android.view.LayoutInflater
 import android.view.inputmethod.InputMethodManager
 import android.widget.TextView
+import androidx.annotation.StringRes
 import androidx.core.content.getSystemService
+import androidx.core.view.isVisible
 import androidx.core.widget.doAfterTextChanged
 import androidx.recyclerview.widget.LinearLayoutManager
 import com.google.android.material.dialog.MaterialAlertDialogBuilder
@@ -36,6 +38,7 @@ fun MaterialAlertDialogBuilder.setTextInput(
  * @see eu.kanade.tachiyomi.widget.materialdialogs.QuadStateTextView
  */
 fun MaterialAlertDialogBuilder.setQuadStateMultiChoiceItems(
+    @StringRes message: Int? = null,
     items: List<CharSequence>,
     initialSelected: IntArray,
     disabledIndices: IntArray? = null,
@@ -49,6 +52,20 @@ fun MaterialAlertDialogBuilder.setQuadStateMultiChoiceItems(
         initialSelected = initialSelected,
         listener = selection
     )
-    setView(binding.root)
-    return this
+    val updateScrollIndicators = {
+        binding.scrollIndicatorUp.isVisible = binding.list.canScrollVertically(-1)
+        binding.scrollIndicatorDown.isVisible = binding.list.canScrollVertically(1)
+    }
+    binding.list.setOnScrollChangeListener { _, _, _, _, _ ->
+        updateScrollIndicators()
+    }
+    binding.list.post {
+        updateScrollIndicators()
+    }
+
+    if (message != null) {
+        binding.message.setText(message)
+        binding.message.isVisible = true
+    }
+    return setView(binding.root)
 }

+ 45 - 5
app/src/main/res/layout/dialog_stub_quadstatemultichoice.xml

@@ -1,9 +1,49 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.recyclerview.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/list"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:paddingTop="8dp"
-    android:scrollIndicators="none"
-    tools:listitem="@layout/dialog_quadstatemultichoice_item" />
+    android:orientation="vertical"
+    android:minHeight="48dp">
+
+    <Space
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/abc_dialog_title_divider_material" />
+
+    <TextView
+        android:id="@+id/message"
+        style="?attr/materialAlertDialogBodyTextStyle"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingBottom="@dimen/abc_dialog_title_divider_material"
+        android:paddingHorizontal="?attr/dialogPreferredPadding"
+        android:visibility="gone"
+        tools:text="Dialog Message for quad-state dialog"
+        tools:visibility="visible" />
+
+    <FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <com.google.android.material.divider.MaterialDivider
+            android:id="@+id/scrollIndicatorUp"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="top" />
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/list"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:scrollIndicators="none"
+            tools:listitem="@layout/dialog_quadstatemultichoice_item" />
+
+        <com.google.android.material.divider.MaterialDivider
+            android:id="@+id/scrollIndicatorDown"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="bottom" />
+
+    </FrameLayout>
+
+</LinearLayout>