Merge "Fix refresh in Gestures, not reflecting the changes after toggling on/off one-handed mode" into sc-dev
diff --git a/res/layout/one_handed_header.xml b/res/layout/one_handed_header.xml
index 2104e40..3fa8183 100644
--- a/res/layout/one_handed_header.xml
+++ b/res/layout/one_handed_header.xml
@@ -21,7 +21,7 @@
     <ImageView
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:scaleType="centerCrop"
+        android:scaleType="centerInside"
         android:cropToPadding="true"
         android:src="@drawable/one_handed_guideline"
         android:contentDescription="@null" />
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 6778991..a858383 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -11280,8 +11280,8 @@
 
     <!-- Title text for swiping downwards on the bottom of the screen for notifications [CHAR LIMIT=60]-->
     <string name="swipe_bottom_to_notifications_title">Swipe for notifications</string>
-    <!-- Summary text for swiping downwards on the bottom of the screen for notifications [CHAR LIMIT=80]-->
-    <string name="swipe_bottom_to_notifications_summary">Swipe down on the bottom edge of the screen to show your notifications</string>
+    <!-- Summary text for swiping downwards on the bottom of the screen for notifications [CHAR LIMIT=NONE]-->
+    <string name="swipe_bottom_to_notifications_summary">Swipe down on the bottom edge of the screen to show your notifications.\nYou can\'t use one-handed mode when this feature is turned on.</string>
 
     <!-- Preference and settings suggestion title text for one handed [CHAR LIMIT=60] -->
     <string name="one_handed_title">One-Handed mode</string>
diff --git a/res/xml/swipe_bottom_to_notification_settings.xml b/res/xml/swipe_bottom_to_notification_settings.xml
index bec774b..2a75c14 100644
--- a/res/xml/swipe_bottom_to_notification_settings.xml
+++ b/res/xml/swipe_bottom_to_notification_settings.xml
@@ -20,11 +20,13 @@
     xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:title="@string/swipe_bottom_to_notifications_title">
 
-    <com.android.settings.widget.VideoPreference
-        android:title="@string/swipe_bottom_to_notifications_title"
-        settings:animation="@raw/gesture_fingerprint_swipe"
-        settings:preview="@drawable/gesture_fingerprint_swipe"
-        settings:controller="com.android.settings.widget.VideoPreferenceController"/>
+    <com.android.settingslib.widget.LayoutPreference
+        android:key="one_handed_header"
+        android:layout="@layout/one_handed_header"
+        android:persistent="false"
+        android:selectable="false"
+        settings:allowDividerBelow="false"
+        settings:searchable="false"/>
 
     <SwitchPreference
         android:key="gesture_swipe_bottom_to_notification"
diff --git a/src/com/android/settings/gestures/OneHandedEnablePreferenceController.java b/src/com/android/settings/gestures/OneHandedEnablePreferenceController.java
index c6db4ea..03bd195 100644
--- a/src/com/android/settings/gestures/OneHandedEnablePreferenceController.java
+++ b/src/com/android/settings/gestures/OneHandedEnablePreferenceController.java
@@ -17,7 +17,6 @@
 package com.android.settings.gestures;
 
 import android.content.Context;
-import android.os.SystemProperties;
 
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
@@ -28,15 +27,13 @@
  **/
 public class OneHandedEnablePreferenceController extends TogglePreferenceController {
 
-    static final String SUPPORT_ONE_HANDED_MODE = "ro.support_one_handed_mode";
-
     public OneHandedEnablePreferenceController(Context context, String key) {
         super(context, key);
     }
 
     @Override
     public int getAvailabilityStatus() {
-        return SystemProperties.getBoolean(SUPPORT_ONE_HANDED_MODE, false)
+        return OneHandedSettingsUtils.isSupportOneHandedMode()
                 ? BasePreferenceController.AVAILABLE
                 : BasePreferenceController.UNSUPPORTED_ON_DEVICE;
     }
@@ -45,6 +42,7 @@
     public boolean setChecked(boolean isChecked) {
         OneHandedSettingsUtils.setSettingsOneHandedModeEnabled(mContext,
                 isChecked);
+        OneHandedSettingsUtils.setSwipeDownNotificationEnabled(mContext, !isChecked);
         return true;
     }
 
diff --git a/src/com/android/settings/gestures/OneHandedSettings.java b/src/com/android/settings/gestures/OneHandedSettings.java
index 2449cf2..6a07c85 100644
--- a/src/com/android/settings/gestures/OneHandedSettings.java
+++ b/src/com/android/settings/gestures/OneHandedSettings.java
@@ -18,7 +18,6 @@
 
 import android.app.settings.SettingsEnums;
 import android.content.Context;
-import android.os.SystemProperties;
 
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
@@ -52,8 +51,7 @@
             new BaseSearchIndexProvider(R.xml.one_handed_settings) {
                 @Override
                 protected boolean isPageSearchEnabled(Context context) {
-                    return SystemProperties.getBoolean(
-                            OneHandedEnablePreferenceController.SUPPORT_ONE_HANDED_MODE, false);
+                    return OneHandedSettingsUtils.isSupportOneHandedMode();
                 }
             };
 }
diff --git a/src/com/android/settings/gestures/OneHandedSettingsUtils.java b/src/com/android/settings/gestures/OneHandedSettingsUtils.java
index f3d7e33..ed0f62f 100644
--- a/src/com/android/settings/gestures/OneHandedSettingsUtils.java
+++ b/src/com/android/settings/gestures/OneHandedSettingsUtils.java
@@ -22,6 +22,7 @@
 import android.net.Uri;
 import android.os.Handler;
 import android.os.Looper;
+import android.os.SystemProperties;
 import android.provider.Settings;
 
 /**
@@ -29,6 +30,8 @@
  */
 public class OneHandedSettingsUtils {
 
+    static final String SUPPORT_ONE_HANDED_MODE = "ro.support_one_handed_mode";
+
     public enum OneHandedTimeout {
         NEVER(0), SHORT(4), MEDIUM(8), LONG(12);
 
@@ -52,6 +55,13 @@
     }
 
     /**
+     * Get One-Handed mode support flag.
+     */
+    public static boolean isSupportOneHandedMode() {
+        return SystemProperties.getBoolean(SUPPORT_ONE_HANDED_MODE, false);
+    }
+
+    /**
      * Get one-handed mode enable or disable flag from Settings provider.
      *
      * @param context App context
@@ -119,6 +129,28 @@
     }
 
     /**
+     * Get Swipe-down-notification enable or disable flag from Settings provider.
+     *
+     * @param context App context
+     * @return enable or disable Swipe-down-notification flag.
+     */
+    public static boolean isSwipeDownNotificationEnabled(Context context) {
+        return Settings.Secure.getInt(context.getContentResolver(),
+                Settings.Secure.SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED, 0) == 1;
+    }
+
+    /**
+     * Set Swipe-down-notification enable or disable flag to Settings provider.
+     *
+     * @param context App context
+     * @param enable enable or disable Swipe-down-notification.
+     */
+    public static void setSwipeDownNotificationEnabled(Context context, boolean enable) {
+        Settings.Secure.putInt(context.getContentResolver(),
+                Settings.Secure.SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED, enable ? 1 : 0);
+    }
+
+    /**
      * Register callback for observing Settings.Secure.ONE_HANDED_MODE_ENABLED state.
      * @param callback for state changes
      */
diff --git a/src/com/android/settings/gestures/SwipeBottomToNotificationPreferenceController.java b/src/com/android/settings/gestures/SwipeBottomToNotificationPreferenceController.java
index 5eba539..28441cd 100644
--- a/src/com/android/settings/gestures/SwipeBottomToNotificationPreferenceController.java
+++ b/src/com/android/settings/gestures/SwipeBottomToNotificationPreferenceController.java
@@ -16,14 +16,8 @@
 
 package com.android.settings.gestures;
 
-import static android.provider.Settings.Secure.SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED;
-
-import static com.android.settings.gestures.OneHandedEnablePreferenceController.SUPPORT_ONE_HANDED_MODE;
 
 import android.content.Context;
-import android.os.SystemProperties;
-import android.provider.Settings;
-import android.text.TextUtils;
 
 import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
@@ -33,32 +27,20 @@
  **/
 public class SwipeBottomToNotificationPreferenceController extends TogglePreferenceController {
 
-    private static final int ON = 1;
-    private static final int OFF = 0;
-
     private static final String PREF_KEY = "gesture_swipe_bottom_to_notification";
 
     public SwipeBottomToNotificationPreferenceController(Context context, String key) {
         super(context, key);
     }
 
-    /** Indicates whether the gesture is available or not. */
-    public static boolean isGestureAvailable(Context context) {
-        // Disable the gesture once One-Handed mode gesture enabled.
-        if (SystemProperties.getBoolean(SUPPORT_ONE_HANDED_MODE, false)) {
-            return !OneHandedSettingsUtils.isOneHandedModeEnabled(context);
-        }
-        return true;
-    }
-
     @Override
     public int getAvailabilityStatus() {
-        return isGestureAvailable(mContext) ? AVAILABLE : DISABLED_DEPENDENT_SETTING;
+        return OneHandedSettingsUtils.isSupportOneHandedMode() ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
     }
 
     @Override
     public boolean isSliceable() {
-        return TextUtils.equals(getPreferenceKey(), PREF_KEY);
+        return true;
     }
 
     @Override
@@ -68,15 +50,16 @@
 
     @Override
     public boolean setChecked(boolean isChecked) {
-        Settings.Secure.putInt(mContext.getContentResolver(),
-                SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED, isChecked ? ON : OFF);
+        if (isChecked) {
+            OneHandedSettingsUtils.setSettingsOneHandedModeEnabled(mContext, false);
+        }
+        OneHandedSettingsUtils.setSwipeDownNotificationEnabled(mContext, isChecked);
         return true;
     }
 
     @Override
     public boolean isChecked() {
-        return Settings.Secure.getInt(mContext.getContentResolver(),
-                SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED, OFF) == ON;
+        return OneHandedSettingsUtils.isSwipeDownNotificationEnabled(mContext);
     }
 
     @Override
diff --git a/src/com/android/settings/gestures/SwipeBottomToNotificationSettings.java b/src/com/android/settings/gestures/SwipeBottomToNotificationSettings.java
index d0441f3..9d85f11 100644
--- a/src/com/android/settings/gestures/SwipeBottomToNotificationSettings.java
+++ b/src/com/android/settings/gestures/SwipeBottomToNotificationSettings.java
@@ -50,8 +50,10 @@
 
                 @Override
                 protected boolean isPageSearchEnabled(Context context) {
-                    return SwipeBottomToNotificationPreferenceController
-                            .isGestureAvailable(context);
+                    if (!OneHandedSettingsUtils.isSupportOneHandedMode()) {
+                        return false;
+                    }
+                    return !OneHandedSettingsUtils.isOneHandedModeEnabled(context);
                 }
             };
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/OneHandedEnablePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/OneHandedEnablePreferenceControllerTest.java
index 11128f3..b53629e 100644
--- a/tests/robotests/src/com/android/settings/gestures/OneHandedEnablePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/OneHandedEnablePreferenceControllerTest.java
@@ -51,14 +51,16 @@
     public void setChecked_setBoolean_checkIsTrueOrFalse() {
         mController.setChecked(false);
         assertThat(OneHandedSettingsUtils.isOneHandedModeEnabled(mContext)).isFalse();
+        assertThat(OneHandedSettingsUtils.isSwipeDownNotificationEnabled(mContext)).isTrue();
 
         mController.setChecked(true);
         assertThat(OneHandedSettingsUtils.isOneHandedModeEnabled(mContext)).isTrue();
+        assertThat(OneHandedSettingsUtils.isSwipeDownNotificationEnabled(mContext)).isFalse();
     }
 
     @Test
     public void getAvailabilityStatus_setSupportOneHandedModeProperty_shouldAvailable() {
-        SystemProperties.set(OneHandedEnablePreferenceController.SUPPORT_ONE_HANDED_MODE, "true");
+        SystemProperties.set(OneHandedSettingsUtils.SUPPORT_ONE_HANDED_MODE, "true");
 
         assertThat(mController.getAvailabilityStatus())
                 .isEqualTo(BasePreferenceController.AVAILABLE);
@@ -66,7 +68,7 @@
 
     @Test
     public void getAvailabilityStatus_unsetSupportOneHandedModeProperty_shouldUnsupported() {
-        SystemProperties.set(OneHandedEnablePreferenceController.SUPPORT_ONE_HANDED_MODE, "false");
+        SystemProperties.set(OneHandedSettingsUtils.SUPPORT_ONE_HANDED_MODE, "false");
 
         assertThat(mController.getAvailabilityStatus())
                 .isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE);
diff --git a/tests/robotests/src/com/android/settings/gestures/OneHandedSettingsTest.java b/tests/robotests/src/com/android/settings/gestures/OneHandedSettingsTest.java
index fcea919..2651708 100644
--- a/tests/robotests/src/com/android/settings/gestures/OneHandedSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/OneHandedSettingsTest.java
@@ -55,7 +55,7 @@
 
     @Test
     public void isPageSearchEnabled_setSupportOneHandedModeProperty_shouldReturnTrue() {
-        SystemProperties.set(OneHandedEnablePreferenceController.SUPPORT_ONE_HANDED_MODE, "true");
+        SystemProperties.set(OneHandedSettingsUtils.SUPPORT_ONE_HANDED_MODE, "true");
 
         final Object obj = ReflectionHelpers.callInstanceMethod(
                 OneHandedSettings.SEARCH_INDEX_DATA_PROVIDER, "isPageSearchEnabled",
@@ -66,7 +66,7 @@
 
     @Test
     public void isPageSearchEnabled_unsetSupportOneHandedModeProperty_shouldReturnFalse() {
-        SystemProperties.set(OneHandedEnablePreferenceController.SUPPORT_ONE_HANDED_MODE, "false");
+        SystemProperties.set(OneHandedSettingsUtils.SUPPORT_ONE_HANDED_MODE, "false");
 
         final Object obj = ReflectionHelpers.callInstanceMethod(
                 OneHandedSettings.SEARCH_INDEX_DATA_PROVIDER, "isPageSearchEnabled",
diff --git a/tests/robotests/src/com/android/settings/gestures/SwipeBottomToNotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/SwipeBottomToNotificationPreferenceControllerTest.java
index c6d8233..9f76800 100644
--- a/tests/robotests/src/com/android/settings/gestures/SwipeBottomToNotificationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/SwipeBottomToNotificationPreferenceControllerTest.java
@@ -16,10 +16,7 @@
 
 package com.android.settings.gestures;
 
-import static android.provider.Settings.Secure.SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED;
-
 import static com.android.settings.core.BasePreferenceController.AVAILABLE;
-import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -28,6 +25,7 @@
 import android.provider.Settings;
 
 import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -57,44 +55,33 @@
     public void setChecked_toggledOn_enablesSwipeBottomToNotification() {
         mController.setChecked(true);
 
-        assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
-                SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED, 0)).isEqualTo(1);
+        assertThat(OneHandedSettingsUtils.isSwipeDownNotificationEnabled(mContext)).isTrue();
+        assertThat(OneHandedSettingsUtils.isOneHandedModeEnabled(mContext)).isFalse();
     }
 
     @Test
     public void setChecked_toggledOff_disablesSwipeBottomToNotification() {
         mController.setChecked(false);
 
-        assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
-                SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED, 0)).isEqualTo(0);
+        assertThat(OneHandedSettingsUtils.isSwipeDownNotificationEnabled(mContext)).isFalse();
     }
 
     @Test
-    public void getAvailabilityStatus_oneHandedUnsupported_returnsAvailable() {
-        SystemProperties.set(OneHandedEnablePreferenceController.SUPPORT_ONE_HANDED_MODE, "false");
+    public void getAvailabilityStatus_oneHandedUnsupported_returnsUnsupport() {
+        SystemProperties.set(OneHandedSettingsUtils.SUPPORT_ONE_HANDED_MODE, "false");
+
+        assertThat(mController.getAvailabilityStatus()).isEqualTo(
+                BasePreferenceController.UNSUPPORTED_ON_DEVICE);
+    }
+
+    @Test
+    public void getAvailabilityStatus_oneHandedSupported_returnsAvailable() {
+        SystemProperties.set(OneHandedSettingsUtils.SUPPORT_ONE_HANDED_MODE, "true");
 
         assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
     }
 
     @Test
-    public void getAvailabilityStatus_oneHandedDisabled_returnsAvailable() {
-        SystemProperties.set(OneHandedEnablePreferenceController.SUPPORT_ONE_HANDED_MODE, "true");
-        Settings.Secure.putInt(mContext.getContentResolver(),
-                Settings.Secure.ONE_HANDED_MODE_ENABLED, 0);
-
-        assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
-    }
-
-    @Test
-    public void getAvailabilityStatus_oneHandedEnabled_returnsDisabled() {
-        SystemProperties.set(OneHandedEnablePreferenceController.SUPPORT_ONE_HANDED_MODE, "true");
-        Settings.Secure.putInt(mContext.getContentResolver(),
-                Settings.Secure.ONE_HANDED_MODE_ENABLED, 1);
-
-        assertThat(mController.getAvailabilityStatus()).isEqualTo(DISABLED_DEPENDENT_SETTING);
-    }
-
-    @Test
     public void getSummary_gestureEnabled_returnsOnSummary() {
         mController.setChecked(true);
 
@@ -111,8 +98,8 @@
     }
 
     @Test
-    public void getDefaultConfig_returnsOffState() {
-        SystemProperties.set(OneHandedEnablePreferenceController.SUPPORT_ONE_HANDED_MODE, "false");
+    public void isChecked_getDefaultConfig_returnFalse() {
+        SystemProperties.set(OneHandedSettingsUtils.SUPPORT_ONE_HANDED_MODE, "false");
         Settings.Secure.resetToDefaults(mContext.getContentResolver(),
                 Settings.Secure.ONE_HANDED_MODE_ENABLED);
 
diff --git a/tests/robotests/src/com/android/settings/gestures/SwipeBottomToNotificationSettingsTest.java b/tests/robotests/src/com/android/settings/gestures/SwipeBottomToNotificationSettingsTest.java
index ad8104c..3a65b26 100644
--- a/tests/robotests/src/com/android/settings/gestures/SwipeBottomToNotificationSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/SwipeBottomToNotificationSettingsTest.java
@@ -21,7 +21,6 @@
 import android.content.Context;
 import android.os.SystemProperties;
 import android.provider.SearchIndexableResource;
-import android.provider.Settings;
 
 import com.android.settings.R;
 
@@ -64,22 +63,21 @@
     }
 
     @Test
-    public void isPageSearchEnabled_oneHandedUnsupported_shouldReturnTrue() {
-        SystemProperties.set(OneHandedEnablePreferenceController.SUPPORT_ONE_HANDED_MODE, "false");
+    public void isPageSearchEnabled_oneHandedUnsupported_shouldReturnFalse() {
+        SystemProperties.set(OneHandedSettingsUtils.SUPPORT_ONE_HANDED_MODE, "false");
 
         final Object obj = ReflectionHelpers.callInstanceMethod(
                 SwipeBottomToNotificationSettings.SEARCH_INDEX_DATA_PROVIDER, "isPageSearchEnabled",
                 ReflectionHelpers.ClassParameter.from(Context.class, mContext));
 
         final boolean isEnabled = (Boolean) obj;
-        assertThat(isEnabled).isTrue();
+        assertThat(isEnabled).isFalse();
     }
 
     @Test
     public void isPageSearchEnabled_oneHandedDisabled_shouldReturnTrue() {
-        SystemProperties.set(OneHandedEnablePreferenceController.SUPPORT_ONE_HANDED_MODE, "true");
-        Settings.Secure.putInt(mContext.getContentResolver(),
-                Settings.Secure.ONE_HANDED_MODE_ENABLED, 0);
+        SystemProperties.set(OneHandedSettingsUtils.SUPPORT_ONE_HANDED_MODE, "true");
+        OneHandedSettingsUtils.setSettingsOneHandedModeEnabled(mContext, false);
 
         final Object obj = ReflectionHelpers.callInstanceMethod(
                 SwipeBottomToNotificationSettings.SEARCH_INDEX_DATA_PROVIDER, "isPageSearchEnabled",
@@ -91,9 +89,8 @@
 
     @Test
     public void isPageSearchEnabled_oneHandedEnabled_shouldReturnFalse() {
-        SystemProperties.set(OneHandedEnablePreferenceController.SUPPORT_ONE_HANDED_MODE, "true");
-        Settings.Secure.putInt(mContext.getContentResolver(),
-                Settings.Secure.ONE_HANDED_MODE_ENABLED, 1);
+        SystemProperties.set(OneHandedSettingsUtils.SUPPORT_ONE_HANDED_MODE, "true");
+        OneHandedSettingsUtils.setSettingsOneHandedModeEnabled(mContext, true);
 
         final Object obj = ReflectionHelpers.callInstanceMethod(
                 SwipeBottomToNotificationSettings.SEARCH_INDEX_DATA_PROVIDER, "isPageSearchEnabled",