OmniControl: Add onPreferenceDisplayDialog to ChargingControlSettings

https://github.com/LineageOS/android_packages_apps_LineageParts/blob/27cfe7882da9988e9b722898dc99cf0026287927/src/org/cyanogenmod/cmparts/SettingsPreferenceFragment.java#L565-L582

commit
https://github.com/LineageOS/android_packages_apps_LineageParts/commit/27cfe7882da9988e9b722898dc99cf0026287927#diff-7117849bb896f63cda1ab5a6e650db8627b4119cc55faf558f3cff83e40d85bcR565-R583

Change-Id: I80e589d00459ceba211359af8aa5418f5f4728e1
diff --git a/app/src/main/java/org/omnirom/control/ChargingControlSettings.java b/app/src/main/java/org/omnirom/control/ChargingControlSettings.java
index 821503a..b00be47 100644
--- a/app/src/main/java/org/omnirom/control/ChargingControlSettings.java
+++ b/app/src/main/java/org/omnirom/control/ChargingControlSettings.java
@@ -28,6 +28,7 @@
 
 import java.lang.reflect.Array;
 import java.util.Arrays;
+import java.util.UUID;
 import java.util.stream.Stream;
 
 import org.omnirom.control.R;
@@ -36,11 +37,13 @@
 import org.omnirom.control.health.StartTimePreference;
 import org.omnirom.control.health.TargetTimePreference;
 import org.omnirom.control.health.ChargingLimitPreference;
+import org.omnirom.control.widget.CustomDialogPreference;
 
 import omnirom.health.HealthInterface;
 import androidx.annotation.DrawableRes;
 import androidx.annotation.XmlRes;
 import androidx.preference.ListPreference;
+import androidx.preference.Preference;
 import omnirom.preference.SystemSettingSwitchPreference;
 
 import static omnirom.health.HealthInterface.MODE_AUTO;
@@ -129,6 +132,29 @@
         });
     }
 
+    public void onDialogShowing() {
+        // override in subclass to attach a dismiss listener, for instance
+    }
+
+    @Override
+    public void onDisplayPreferenceDialog(Preference preference) {
+        if (preference.getKey() == null) {
+            // Auto-key preferences that don't have a key, so the dialog can find them.
+            preference.setKey(UUID.randomUUID().toString());
+        }
+        CustomDialogPreference.CustomPreferenceDialogFragment f = null;
+        if (preference instanceof CustomDialogPreference) {
+            f = CustomDialogPreference.CustomPreferenceDialogFragment
+                    .newInstance(preference.getKey());
+        } else {
+            super.onDisplayPreferenceDialog(preference);
+            return;
+        }
+        f.setTargetFragment(this, 0);
+        f.show(getParentFragmentManager(), "dialog_preference");
+        onDialogShowing();
+    }
+
     @Override
     public void onResume() {
         super.onResume();