Fix the description of one-handed mode doesn't change immediately in
Gestures page after users turn on/off in Quick Settings

Add ContentObserver URI for observing when settings key
"one_handed_mode_enabled" changes.

Bug: 230041450

Test: manually verified on System > Gestures >
One-handed mode item when turned  on/off in Quick Settings

Test: make RunSettingsRoboTests ROBOTEST_FILTER=
"com.android.settings.gestures.
OneHandedEnablePreferenceControllerTest"

Change-Id: Id6bb53692181dfc3c8a1006017b5a22462dc4ad9
diff --git a/src/com/android/settings/gestures/OneHandedEnablePreferenceController.java b/src/com/android/settings/gestures/OneHandedEnablePreferenceController.java
index 29004c8..6aac772 100644
--- a/src/com/android/settings/gestures/OneHandedEnablePreferenceController.java
+++ b/src/com/android/settings/gestures/OneHandedEnablePreferenceController.java
@@ -17,17 +17,29 @@
 package com.android.settings.gestures;
 
 import android.content.Context;
+import android.net.Uri;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnStart;
+import com.android.settingslib.core.lifecycle.events.OnStop;
 
 /**
  * Preference controller for One-handed mode shortcut settings
  */
-public class OneHandedEnablePreferenceController extends BasePreferenceController {
+public class OneHandedEnablePreferenceController extends BasePreferenceController
+        implements OneHandedSettingsUtils.TogglesCallback, LifecycleObserver, OnStart, OnStop {
+
+    private final OneHandedSettingsUtils mUtils;
+    private Preference mPreference;
 
     public OneHandedEnablePreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
+        mUtils = new OneHandedSettingsUtils(context);
     }
 
     @Override
@@ -41,4 +53,30 @@
                 OneHandedSettingsUtils.isOneHandedModeEnabled(mContext)
                         ? R.string.gesture_setting_on : R.string.gesture_setting_off);
     }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        mPreference = screen.findPreference(getPreferenceKey());
+    }
+
+    @Override
+    public void onStart() {
+        mUtils.registerToggleAwareObserver(this);
+    }
+
+    @Override
+    public void onStop() {
+        mUtils.unregisterToggleAwareObserver();
+    }
+
+    @Override
+    public void onChange(Uri uri) {
+        if (mPreference == null) {
+            return;
+        }
+        if (uri.equals(OneHandedSettingsUtils.ONE_HANDED_MODE_ENABLED_URI)) {
+            refreshSummary(mPreference);
+        }
+    }
 }