ソースを参照

Fix MD3 theming for custom dialog fragments

Peter Cai 2 年 前
コミット
761718d0fe

+ 16 - 0
app-common/src/main/java/im/angry/openeuicc/ui/BaseMaterialDialogFragment.kt

@@ -0,0 +1,16 @@
+package im.angry.openeuicc.ui
+
+import android.app.Dialog
+import android.os.Bundle
+import android.view.Window
+import androidx.fragment.app.DialogFragment
+import im.angry.openeuicc.common.R
+
+abstract class BaseMaterialDialogFragment: DialogFragment() {
+    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+        return super.onCreateDialog(savedInstanceState).also {
+            it.window?.requestFeature(Window.FEATURE_NO_TITLE)
+            it.window?.setBackgroundDrawableResource(R.drawable.dialog_background)
+        }
+    }
+}

+ 1 - 4
app-common/src/main/java/im/angry/openeuicc/ui/ProfileDownloadFragment.kt

@@ -11,7 +11,6 @@ import android.widget.ProgressBar
 import android.widget.TextView
 import android.widget.Toast
 import androidx.appcompat.widget.Toolbar
-import androidx.fragment.app.DialogFragment
 import androidx.lifecycle.lifecycleScope
 import com.google.android.material.textfield.TextInputLayout
 import com.journeyapps.barcodescanner.ScanContract
@@ -24,11 +23,10 @@ import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.first
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
-import net.typeblog.lpac_jni.LocalProfileNotification
 import net.typeblog.lpac_jni.ProfileDownloadCallback
 import kotlin.Exception
 
-class ProfileDownloadFragment : DialogFragment(), EuiccFragmentMarker, Toolbar.OnMenuItemClickListener {
+class ProfileDownloadFragment : BaseMaterialDialogFragment(), EuiccFragmentMarker, Toolbar.OnMenuItemClickListener {
     companion object {
         const val TAG = "ProfileDownloadFragment"
 
@@ -136,7 +134,6 @@ class ProfileDownloadFragment : DialogFragment(), EuiccFragmentMarker, Toolbar.O
 
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         return super.onCreateDialog(savedInstanceState).also {
-            it.window?.requestFeature(Window.FEATURE_NO_TITLE)
             it.setCanceledOnTouchOutside(false)
         }
     }

+ 1 - 3
app-common/src/main/java/im/angry/openeuicc/ui/ProfileRenameFragment.kt

@@ -10,7 +10,6 @@ import android.view.Window
 import android.widget.ProgressBar
 import android.widget.Toast
 import androidx.appcompat.widget.Toolbar
-import androidx.fragment.app.DialogFragment
 import androidx.lifecycle.lifecycleScope
 import com.google.android.material.textfield.TextInputLayout
 import im.angry.openeuicc.common.R
@@ -21,7 +20,7 @@ import kotlinx.coroutines.withContext
 import java.lang.Exception
 import java.lang.RuntimeException
 
-class ProfileRenameFragment : DialogFragment(), EuiccFragmentMarker {
+class ProfileRenameFragment : BaseMaterialDialogFragment(), EuiccFragmentMarker {
     companion object {
         const val TAG = "ProfileRenameFragment"
 
@@ -83,7 +82,6 @@ class ProfileRenameFragment : DialogFragment(), EuiccFragmentMarker {
 
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         return super.onCreateDialog(savedInstanceState).also {
-            it.window?.requestFeature(Window.FEATURE_NO_TITLE)
             it.setCanceledOnTouchOutside(false)
         }
     }

+ 7 - 0
app-common/src/main/res/drawable/dialog_background.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid
+        android:color="?attr/colorSurface"/>
+    <corners
+        android:radius="?attr/dialogCornerRadius" />
+</shape>

+ 1 - 0
app-common/src/main/res/values/themes.xml

@@ -8,6 +8,7 @@
         <item name="toolbarStyle">@style/Widget.Material3.Toolbar</item>
         <item name="android:statusBarColor">?attr/colorSurface</item>
         <item name="android:colorBackground">?attr/colorSurface</item>
+        <item name="dialogCornerRadius">28dp</item>
     </style>
 
     <style name="AlertDialogTheme" parent="Theme.Material3.DayNight.Dialog.Alert">

+ 1 - 2
app/src/main/java/im/angry/openeuicc/ui/SlotMappingFragment.kt

@@ -16,7 +16,6 @@ import android.widget.TextView
 import android.widget.Toast
 import androidx.appcompat.widget.Toolbar
 import androidx.appcompat.widget.Toolbar.OnMenuItemClickListener
-import androidx.fragment.app.DialogFragment
 import androidx.lifecycle.lifecycleScope
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
@@ -27,7 +26,7 @@ import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
 
-class SlotMappingFragment: DialogFragment(), OnMenuItemClickListener {
+class SlotMappingFragment: BaseMaterialDialogFragment(), OnMenuItemClickListener {
     companion object {
         const val TAG = "SlotMappingFragment"
     }