Adds Edge to Edge option in gesture settings page
Bug: 125489141
Test: Manual test on device
Test: make RunSettingsRoboTests ROBOTEST_FILTER=SystemNavigationLegacyPreferenceControllerTest
Test: make RunSettingsRoboTests ROBOTEST_FILTER=SystemNavigationSwipeUpPreferenceControllerTest
Test: make RunSettingsRoboTests ROBOTEST_FILTER=SystemNavigationEdgeToEdgePreferenceControllerTest
Change-Id: I1b274cc053de8235d0c664150cabe5dadc618419
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 0d6eaeb..f0a2ba3 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -9795,8 +9795,11 @@
<!-- Title for settings suggestion for double twist for camera [CHAR LIMIT=60] -->
<string name="double_twist_for_camera_suggestion_title">Take selfies faster</string>
- <!-- Title text for swipe up to switch apps [CHAR LIMIT=60] -->
- <string name="swipe_up_to_switch_apps_title">Swipe up on Home button</string>
+ <!-- Title text for system navigation [CHAR LIMIT=60] [DO NOT TRANSLATE] -->
+ <string name="system_navigation_title" translatable="false">System navigation</string>
+
+ <!-- Title text for swipe up to switch apps [CHAR LIMIT=60] [DO NOT TRANSLATE] -->
+ <string name="swipe_up_to_switch_apps_title" translatable="false">2-button navigation</string>
<!-- Summary text for swipe up to switch apps [CHAR LIMIT=250] -->
<string name="swipe_up_to_switch_apps_summary">To switch apps, swipe up on the Home button. Swipe up again to see all apps. Works from any screen. You’ll no longer have an Overview button on the bottom right of your screen.</string>
<!-- Title for settings suggestion for swipe up to switch apps [CHAR LIMIT=60] -->
@@ -9804,6 +9807,16 @@
<!-- Summary for settings suggestion for swipe up to switch apps [CHAR LIMIT=60] -->
<string name="swipe_up_to_switch_apps_suggestion_summary">Turn on the new gesture to switch apps</string>
+ <!-- Title text for edge to edge navigation [CHAR LIMIT=60] [DO NOT TRANSLATE] -->
+ <string name="edge_to_edge_navigation_title" translatable="false">Fully gestural navigation</string>
+ <!-- Summary text for edge to edge navigation [CHAR LIMIT=None] [DO NOT TRANSLATE] -->
+ <string name="edge_to_edge_navigation_summary" translatable="false">To go Home, swipe up from the bottom of the screen. To go Back, swipe from either the left or right edge of the screen. To switch apps, start swiping up from the bottom of the screen and hold before releasing.</string>
+
+ <!-- Title text for 3-button navigation [CHAR LIMIT=60] [DO NOT TRANSLATE] -->
+ <string name="legacy_navigation_title" translatable="false">3-button navigation</string>
+ <!-- Summary text for 3-button navigation [CHAR LIMIT=250] [DO NOT TRANSLATE] -->
+ <string name="legacy_navigation_summary" translatable="false">Classic Android navigation mode where going Home, switching apps, and going Back are accessible via buttons.</string>
+
<!-- Preference and settings suggestion title text for ambient display double tap (phone) [CHAR LIMIT=60]-->
<string name="ambient_display_title" product="default">Double-tap to check phone</string>
<!-- Preference and settings suggestion title text for ambient display double tap (tablet) [CHAR LIMIT=60]-->
diff --git a/res/xml/gestures.xml b/res/xml/gestures.xml
index b1250ec..f705630 100644
--- a/res/xml/gestures.xml
+++ b/res/xml/gestures.xml
@@ -52,10 +52,10 @@
settings:controller="com.android.settings.gestures.DoubleTwistPreferenceController" />
<Preference
- android:key="gesture_swipe_up_input_summary"
- android:title="@string/swipe_up_to_switch_apps_title"
- android:fragment="com.android.settings.gestures.SwipeUpGestureSettings"
- settings:controller="com.android.settings.gestures.SwipeUpPreferenceController" />
+ android:key="gesture_system_navigation_input_summary"
+ android:title="@string/system_navigation_title"
+ android:fragment="com.android.settings.gestures.SystemNavigationGestureSettings"
+ settings:controller="com.android.settings.gestures.SystemNavigationLegacyPreferenceController" />
<Preference
android:key="gesture_tap_screen_input_summary"
diff --git a/res/xml/swipe_up_gesture_settings.xml b/res/xml/swipe_up_gesture_settings.xml
deleted file mode 100644
index cc1db16..0000000
--- a/res/xml/swipe_up_gesture_settings.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2018 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<PreferenceScreen
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:key="gesture_swipe_up_screen"
- android:title="@string/swipe_up_to_switch_apps_title">
-
- <com.android.settings.widget.VideoPreference
- android:key="gesture_swipe_up_video"
- app:animation="@raw/gesture_swipe_up"
- app:preview="@drawable/gesture_swipe_up" />
-
- <SwitchPreference
- android:key="gesture_swipe_up"
- android:title="@string/swipe_up_to_switch_apps_title"
- android:summary="@string/swipe_up_to_switch_apps_summary"
- app:keywords="@string/keywords_gesture"
- app:controller="com.android.settings.gestures.SwipeUpPreferenceController"
- app:allowDividerAbove="true" />
-
-</PreferenceScreen>
\ No newline at end of file
diff --git a/res/xml/system_navigation_gesture_settings.xml b/res/xml/system_navigation_gesture_settings.xml
new file mode 100644
index 0000000..97aacb8
--- /dev/null
+++ b/res/xml/system_navigation_gesture_settings.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:key="gesture_system_navigation_screen"
+ android:title="@string/system_navigation_title">
+
+ <com.android.settings.widget.VideoPreference
+ android:key="gesture_swipe_up_video"
+ app:animation="@raw/gesture_swipe_up"
+ app:preview="@drawable/gesture_swipe_up" />
+
+ <com.android.settings.widget.RadioButtonPreference
+ android:key="gesture_edge_to_edge"
+ android:title="@string/edge_to_edge_navigation_title"
+ android:summary="@string/edge_to_edge_navigation_summary"
+ app:keywords="@string/keywords_gesture"
+ app:controller="com.android.settings.gestures.SystemNavigationEdgeToEdgePreferenceController"
+ app:allowDividerAbove="true" />
+
+ <com.android.settings.widget.RadioButtonPreference
+ android:key="gesture_swipe_up"
+ android:title="@string/swipe_up_to_switch_apps_title"
+ android:summary="@string/swipe_up_to_switch_apps_summary"
+ app:keywords="@string/keywords_gesture"
+ app:controller="com.android.settings.gestures.SystemNavigationSwipeUpPreferenceController" />
+
+ <com.android.settings.widget.RadioButtonPreference
+ android:key="gesture_legacy"
+ android:title="@string/legacy_navigation_title"
+ android:summary="@string/legacy_navigation_summary"
+ app:keywords="@string/keywords_gesture"
+ app:controller="com.android.settings.gestures.SystemNavigationLegacyPreferenceController" />
+
+</PreferenceScreen>
\ No newline at end of file
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 7abd98d..147d0be 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -82,7 +82,7 @@
import com.android.settings.gestures.DoubleTwistGestureSettings;
import com.android.settings.gestures.PickupGestureSettings;
import com.android.settings.gestures.SwipeToNotificationSettings;
-import com.android.settings.gestures.SwipeUpGestureSettings;
+import com.android.settings.gestures.SystemNavigationGestureSettings;
import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment;
import com.android.settings.inputmethod.KeyboardLayoutPickerFragment;
import com.android.settings.inputmethod.PhysicalKeyboardFragment;
@@ -201,7 +201,7 @@
DoubleTapScreenSettings.class.getName(),
PickupGestureSettings.class.getName(),
DoubleTwistGestureSettings.class.getName(),
- SwipeUpGestureSettings.class.getName(),
+ SystemNavigationGestureSettings.class.getName(),
CryptKeeperSettings.class.getName(),
DataUsageSummary.class.getName(),
DreamSettings.class.getName(),
diff --git a/src/com/android/settings/gestures/SwipeUpPreferenceController.java b/src/com/android/settings/gestures/SwipeUpPreferenceController.java
deleted file mode 100644
index 5e882c4..0000000
--- a/src/com/android/settings/gestures/SwipeUpPreferenceController.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.gestures;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.os.UserManager;
-import android.provider.Settings;
-import android.text.TextUtils;
-
-import com.android.internal.R;
-
-public class SwipeUpPreferenceController extends GesturePreferenceController {
-
- private final int ON = 1;
- private final int OFF = 0;
-
- private static final String ACTION_QUICKSTEP = "android.intent.action.QUICKSTEP_SERVICE";
- private static final String PREF_KEY_VIDEO = "gesture_swipe_up_video";
- private final UserManager mUserManager;
-
- public SwipeUpPreferenceController(Context context, String key) {
- super(context, key);
- mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
- }
-
- static boolean isGestureAvailable(Context context) {
- if (!context.getResources().getBoolean(R.bool.config_swipe_up_gesture_setting_available)) {
- return false;
- }
-
- final ComponentName recentsComponentName = ComponentName.unflattenFromString(
- context.getString(R.string.config_recentsComponentName));
- if (recentsComponentName == null) {
- return false;
- }
- final Intent quickStepIntent = new Intent(ACTION_QUICKSTEP)
- .setPackage(recentsComponentName.getPackageName());
- if (context.getPackageManager().resolveService(quickStepIntent,
- PackageManager.MATCH_SYSTEM_ONLY) == null) {
- return false;
- }
- return true;
- }
-
- @Override
- public int getAvailabilityStatus() {
- return isGestureAvailable(mContext) ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
- }
-
- @Override
- public boolean isSliceable() {
- return TextUtils.equals(getPreferenceKey(), "gesture_swipe_up");
- }
-
- @Override
- protected String getVideoPrefKey() {
- return PREF_KEY_VIDEO;
- }
-
- @Override
- public boolean setChecked(boolean isChecked) {
- setSwipeUpPreference(mContext, mUserManager, isChecked ? ON : OFF);
- return true;
- }
-
- public static void setSwipeUpPreference(Context context, UserManager userManager,
- int enabled) {
- Settings.Secure.putInt(context.getContentResolver(),
- Settings.Secure.SWIPE_UP_TO_SWITCH_APPS_ENABLED, enabled);
- }
-
- @Override
- public boolean isChecked() {
- final int defaultValue = mContext.getResources()
- .getBoolean(R.bool.config_swipe_up_gesture_default) ? ON : OFF;
- final int swipeUpEnabled = Settings.Secure.getInt(mContext.getContentResolver(),
- Settings.Secure.SWIPE_UP_TO_SWITCH_APPS_ENABLED, defaultValue);
- return swipeUpEnabled != OFF;
- }
-}
diff --git a/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceController.java b/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceController.java
new file mode 100644
index 0000000..129cf90
--- /dev/null
+++ b/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceController.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.gestures;
+
+import android.content.Context;
+import android.text.TextUtils;
+
+import com.android.settings.widget.RadioButtonPreference;
+
+public class SystemNavigationEdgeToEdgePreferenceController extends
+ SystemNavigationPreferenceController {
+ static final String PREF_KEY_EDGE_TO_EDGE = "gesture_edge_to_edge";
+
+ public SystemNavigationEdgeToEdgePreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ @Override
+ public boolean isSliceable() {
+ return TextUtils.equals(PREF_KEY_EDGE_TO_EDGE, getPreferenceKey());
+ }
+
+ @Override
+ public void onRadioButtonClicked(RadioButtonPreference preference) {
+ setSwipeUpEnabled(mContext, true);
+ setEdgeToEdgeGestureEnabled(mContext, true);
+ selectRadioButtonInGroup(PREF_KEY_EDGE_TO_EDGE, mPreferenceScreen);
+ }
+
+ @Override
+ public boolean isChecked() {
+ return isEdgeToEdgeEnabled(mContext);
+ }
+}
diff --git a/src/com/android/settings/gestures/SwipeUpGestureSettings.java b/src/com/android/settings/gestures/SystemNavigationGestureSettings.java
similarity index 85%
rename from src/com/android/settings/gestures/SwipeUpGestureSettings.java
rename to src/com/android/settings/gestures/SystemNavigationGestureSettings.java
index a125643..ea5454b 100644
--- a/src/com/android/settings/gestures/SwipeUpGestureSettings.java
+++ b/src/com/android/settings/gestures/SystemNavigationGestureSettings.java
@@ -32,12 +32,12 @@
import java.util.List;
@SearchIndexable
-public class SwipeUpGestureSettings extends DashboardFragment {
+public class SystemNavigationGestureSettings extends DashboardFragment {
- private static final String TAG = "SwipeUpGesture";
+ private static final String TAG = "SystemNavigationGesture";
public static final String PREF_KEY_SUGGESTION_COMPLETE =
- "pref_swipe_up_suggestion_complete";
+ "pref_system_navigation_suggestion_complete";
@Override
public void onAttach(Context context) {
@@ -60,7 +60,7 @@
@Override
protected int getPreferenceScreenResId() {
- return R.xml.swipe_up_gesture_settings;
+ return R.xml.system_navigation_gesture_settings;
}
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
@@ -69,13 +69,13 @@
public List<SearchIndexableResource> getXmlResourcesToIndex(
Context context, boolean enabled) {
final SearchIndexableResource sir = new SearchIndexableResource(context);
- sir.xmlResId = R.xml.swipe_up_gesture_settings;
+ sir.xmlResId = R.xml.system_navigation_gesture_settings;
return Arrays.asList(sir);
}
@Override
protected boolean isPageSearchEnabled(Context context) {
- return SwipeUpPreferenceController.isGestureAvailable(context);
+ return SystemNavigationPreferenceController.isGestureAvailable(context);
}
};
}
diff --git a/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceController.java b/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceController.java
new file mode 100644
index 0000000..f9c95a8
--- /dev/null
+++ b/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceController.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.gestures;
+
+import android.content.Context;
+import android.text.TextUtils;
+
+import com.android.settings.widget.RadioButtonPreference;
+
+public class SystemNavigationLegacyPreferenceController extends
+ SystemNavigationPreferenceController {
+ static final String PREF_KEY_LEGACY = "gesture_legacy";
+
+ public SystemNavigationLegacyPreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ @Override
+ public boolean isSliceable() {
+ return TextUtils.equals(PREF_KEY_LEGACY, getPreferenceKey());
+ }
+
+ @Override
+ public void onRadioButtonClicked(RadioButtonPreference preference) {
+ setEdgeToEdgeGestureEnabled(mContext, false);
+ setSwipeUpEnabled(mContext, false);
+ selectRadioButtonInGroup(PREF_KEY_LEGACY, mPreferenceScreen);
+ }
+
+ @Override
+ public boolean isChecked() {
+ return !isEdgeToEdgeEnabled(mContext) && !isSwipeUpEnabled(mContext);
+ }
+}
diff --git a/src/com/android/settings/gestures/SystemNavigationPreferenceController.java b/src/com/android/settings/gestures/SystemNavigationPreferenceController.java
new file mode 100644
index 0000000..a11754e
--- /dev/null
+++ b/src/com/android/settings/gestures/SystemNavigationPreferenceController.java
@@ -0,0 +1,207 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.gestures;
+
+import static android.os.UserHandle.USER_SYSTEM;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.om.IOverlayManager;
+import android.content.pm.PackageManager;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.provider.Settings;
+import android.text.TextUtils;
+import android.view.View;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.widget.RadioButtonPreference;
+
+public abstract class SystemNavigationPreferenceController extends GesturePreferenceController
+ implements RadioButtonPreference.OnClickListener {
+
+ private static final int OFF = 0;
+ private static final int ON = 1;
+
+ private static final String HIDE_BACK_BUTTON = "quickstepcontroller_hideback";
+ private static final String HIDE_HOME_BUTTON = "quickstepcontroller_hidehome";
+ private static final String HIDE_NAVBAR_DIVIDER = "hide_navigationbar_divider";
+ private static final String SHOW_HANDLE = "quickstepcontroller_showhandle";
+ private static final String ENABLE_CLICK_THROUGH = "quickstepcontroller_clickthrough";
+ private static final String ENABLE_LAUNCHER_SWIPE_TO_HOME = "SWIPE_HOME";
+ private static final String ENABLE_COLOR_ADAPT_FOR_HANDLE = "navbar_color_adapt_enable";
+ private static final String ENABLE_ASSISTANT_GESTURE = "ENABLE_ASSISTANT_GESTURE";
+ private static final String PROTOTYPE_ENABLED = "prototype_enabled";
+
+ private static final int EDGE_SENSITIVITY_WIDTH = 32;
+ private static final String EDGE_SENSITIVITY_KEY = "quickstepcontroller_edge_width_sensitivity";
+
+ private static final String GESTURES_MATCH_MAP_OFF = "000000";
+ private static final String GESTURES_MATCH_MAP_ON = "071133";
+ private static final String GESTURES_MATCH_MAP_KEY = "quickstepcontroller_gesture_match_map";
+
+ private static final String OVERLAY_NAVBAR_TYPE_INSET =
+ "com.android.internal.experiment.navbar.type.inset";
+ private static final String OVERLAY_NAVBAR_TYPE_FLOATING =
+ "com.android.internal.experiment.navbar.type.floating";
+
+ private static final String ACTION_QUICKSTEP = "android.intent.action.QUICKSTEP_SERVICE";
+ private static final String PREF_KEY_VIDEO = "gesture_swipe_up_video";
+
+ private static final String[] RADIO_BUTTONS_IN_GROUP = {
+ SystemNavigationLegacyPreferenceController.PREF_KEY_LEGACY,
+ SystemNavigationSwipeUpPreferenceController.PREF_KEY_SWIPE_UP,
+ SystemNavigationEdgeToEdgePreferenceController.PREF_KEY_EDGE_TO_EDGE,
+ };
+
+ protected PreferenceScreen mPreferenceScreen;
+
+ public SystemNavigationPreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return isGestureAvailable(mContext) ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mPreferenceScreen = screen;
+
+ Preference preference = screen.findPreference(getPreferenceKey());
+ if (preference != null && preference instanceof RadioButtonPreference) {
+ RadioButtonPreference radioPreference = (RadioButtonPreference) preference;
+ radioPreference.setOnClickListener(this);
+ radioPreference.setAppendixVisibility(View.GONE);
+ }
+ }
+
+ @Override
+ public boolean setChecked(boolean isChecked) {
+ if (!isChecked || mPreferenceScreen == null) {
+ return false;
+ }
+ Preference preference = mPreferenceScreen.findPreference(getPreferenceKey());
+ if (preference != null && preference instanceof RadioButtonPreference) {
+ onRadioButtonClicked((RadioButtonPreference) preference);
+ }
+ return true;
+ }
+
+ @Override
+ public CharSequence getSummary() {
+ if (isEdgeToEdgeEnabled(mContext)) {
+ return mContext.getText(R.string.edge_to_edge_navigation_title);
+ } else if (isSwipeUpEnabled(mContext)) {
+ return mContext.getText(R.string.swipe_up_to_switch_apps_title);
+ } else {
+ return mContext.getText(R.string.legacy_navigation_title);
+ }
+ }
+
+ @Override
+ protected String getVideoPrefKey() {
+ return PREF_KEY_VIDEO;
+ }
+
+ static boolean isGestureAvailable(Context context) {
+ if (!context.getResources().getBoolean(
+ com.android.internal.R.bool.config_swipe_up_gesture_setting_available)) {
+ return false;
+ }
+
+ final ComponentName recentsComponentName = ComponentName.unflattenFromString(
+ context.getString(com.android.internal.R.string.config_recentsComponentName));
+ if (recentsComponentName == null) {
+ return false;
+ }
+ final Intent quickStepIntent = new Intent(ACTION_QUICKSTEP)
+ .setPackage(recentsComponentName.getPackageName());
+ if (context.getPackageManager().resolveService(quickStepIntent,
+ PackageManager.MATCH_SYSTEM_ONLY) == null) {
+ return false;
+ }
+ return true;
+ }
+
+ static void selectRadioButtonInGroup(String preferenceKey, PreferenceScreen screen) {
+ if (screen == null) {
+ return;
+ }
+ for (String key : RADIO_BUTTONS_IN_GROUP) {
+ ((RadioButtonPreference) screen.findPreference(key)).setChecked(
+ TextUtils.equals(key, preferenceKey));
+ }
+ }
+
+ static void setEdgeToEdgeGestureEnabled(Context context, boolean enable) {
+ // TODO(b/127366543): replace all of this with a single switch
+ setBooleanGlobalSetting(context, HIDE_BACK_BUTTON, enable);
+ setBooleanGlobalSetting(context, HIDE_HOME_BUTTON, enable);
+ setBooleanGlobalSetting(context, HIDE_NAVBAR_DIVIDER, enable);
+ setBooleanGlobalSetting(context, SHOW_HANDLE, enable);
+ setBooleanGlobalSetting(context, ENABLE_CLICK_THROUGH, enable);
+ setBooleanGlobalSetting(context, ENABLE_LAUNCHER_SWIPE_TO_HOME, enable);
+ setBooleanGlobalSetting(context, ENABLE_COLOR_ADAPT_FOR_HANDLE, enable);
+ setBooleanGlobalSetting(context, ENABLE_ASSISTANT_GESTURE, enable);
+ setBooleanGlobalSetting(context, PROTOTYPE_ENABLED, enable);
+ Settings.Global.putInt(context.getContentResolver(), EDGE_SENSITIVITY_KEY,
+ EDGE_SENSITIVITY_WIDTH);
+ Settings.Global.putString(context.getContentResolver(), GESTURES_MATCH_MAP_KEY,
+ enable ? GESTURES_MATCH_MAP_ON : GESTURES_MATCH_MAP_OFF);
+
+ IOverlayManager overlayManager = IOverlayManager.Stub
+ .asInterface(ServiceManager.getService(Context.OVERLAY_SERVICE));
+ if (overlayManager != null) {
+ try {
+ overlayManager.setEnabled(OVERLAY_NAVBAR_TYPE_FLOATING, false, USER_SYSTEM);
+ overlayManager.setEnabled(OVERLAY_NAVBAR_TYPE_INSET, enable, USER_SYSTEM);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+ }
+
+ static void setBooleanGlobalSetting(Context context, String name, boolean flag) {
+ Settings.Global.putInt(context.getContentResolver(), name, flag ? ON : OFF);
+ }
+
+ static void setSwipeUpEnabled(Context context, boolean enabled) {
+ Settings.Secure.putInt(context.getContentResolver(),
+ Settings.Secure.SWIPE_UP_TO_SWITCH_APPS_ENABLED, enabled ? ON : OFF);
+ }
+
+ static boolean isSwipeUpEnabled(Context context) {
+ if (isEdgeToEdgeEnabled(context)) {
+ return false;
+ }
+ final int defaultSwipeUpValue = context.getResources()
+ .getBoolean(com.android.internal.R.bool.config_swipe_up_gesture_default) ? ON : OFF;
+ return Settings.Secure.getInt(context.getContentResolver(),
+ Settings.Secure.SWIPE_UP_TO_SWITCH_APPS_ENABLED, defaultSwipeUpValue) == ON;
+ }
+
+ static boolean isEdgeToEdgeEnabled(Context context) {
+ return Settings.Global.getInt(context.getContentResolver(), PROTOTYPE_ENABLED, OFF) == ON;
+ }
+}
diff --git a/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceController.java b/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceController.java
new file mode 100644
index 0000000..25fafdb
--- /dev/null
+++ b/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceController.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.gestures;
+
+import android.content.Context;
+import android.text.TextUtils;
+
+import com.android.settings.widget.RadioButtonPreference;
+
+public class SystemNavigationSwipeUpPreferenceController extends
+ SystemNavigationPreferenceController {
+ static final String PREF_KEY_SWIPE_UP = "gesture_swipe_up";
+
+ public SystemNavigationSwipeUpPreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ @Override
+ public boolean isSliceable() {
+ return TextUtils.equals(PREF_KEY_SWIPE_UP, getPreferenceKey());
+ }
+
+ @Override
+ public void onRadioButtonClicked(RadioButtonPreference preference) {
+ setEdgeToEdgeGestureEnabled(mContext, false);
+ setSwipeUpEnabled(mContext, true);
+ selectRadioButtonInGroup(PREF_KEY_SWIPE_UP, mPreferenceScreen);
+ }
+
+ @Override
+ public boolean isChecked() {
+ return isSwipeUpEnabled(mContext);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/gestures/SwipeUpPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceControllerTest.java
similarity index 61%
copy from tests/robotests/src/com/android/settings/gestures/SwipeUpPreferenceControllerTest.java
copy to tests/robotests/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceControllerTest.java
index e98bdc8..5e6cd55 100644
--- a/tests/robotests/src/com/android/settings/gestures/SwipeUpPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceControllerTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,17 +16,31 @@
package com.android.settings.gestures;
+import static com.android.settings.gestures.SystemNavigationEdgeToEdgePreferenceController.PREF_KEY_EDGE_TO_EDGE;
+import static com.android.settings.gestures.SystemNavigationLegacyPreferenceController.PREF_KEY_LEGACY;
+import static com.android.settings.gestures.SystemNavigationSwipeUpPreferenceController.PREF_KEY_SWIPE_UP;
+
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.verify;
+
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
+import android.provider.Settings;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
import com.android.internal.R;
import com.android.settings.testutils.shadow.SettingsShadowResources;
+import com.android.settings.widget.RadioButtonPreference;
import org.junit.After;
import org.junit.Before;
@@ -40,14 +54,14 @@
@RunWith(RobolectricTestRunner.class)
@Config(shadows = SettingsShadowResources.class)
-public class SwipeUpPreferenceControllerTest {
+public class SystemNavigationEdgeToEdgePreferenceControllerTest {
private Context mContext;
private ShadowPackageManager mPackageManager;
- private SwipeUpPreferenceController mController;
+
+ private SystemNavigationEdgeToEdgePreferenceController mController;
private static final String ACTION_QUICKSTEP = "android.intent.action.QUICKSTEP_SERVICE";
- private static final String KEY_SWIPE_UP = "gesture_swipe_up";
@Before
public void setUp() {
@@ -56,8 +70,12 @@
SettingsShadowResources.overrideResource(R.bool.config_swipe_up_gesture_default, true);
mContext = RuntimeEnvironment.application;
+ Settings.Global.putInt(mContext.getContentResolver(), "prototype_enabled", 1);
+
mPackageManager = Shadows.shadowOf(mContext.getPackageManager());
- mController = new SwipeUpPreferenceController(mContext, KEY_SWIPE_UP);
+
+ mController = new SystemNavigationEdgeToEdgePreferenceController(mContext,
+ PREF_KEY_EDGE_TO_EDGE);
}
@After
@@ -80,7 +98,8 @@
info.serviceInfo.applicationInfo.flags = ApplicationInfo.FLAG_SYSTEM;
mPackageManager.addResolveInfoForIntent(quickStepIntent, info);
- assertThat(SwipeUpPreferenceController.isGestureAvailable(mContext)).isTrue();
+ assertThat(SystemNavigationEdgeToEdgePreferenceController.isGestureAvailable(mContext))
+ .isTrue();
}
@Test
@@ -94,12 +113,14 @@
.setPackage(recentsComponentName.getPackageName());
mPackageManager.addResolveInfoForIntent(quickStepIntent, new ResolveInfo());
- assertThat(SwipeUpPreferenceController.isGestureAvailable(mContext)).isFalse();
+ assertThat(SystemNavigationEdgeToEdgePreferenceController.isGestureAvailable(mContext))
+ .isFalse();
}
@Test
public void testIsGestureAvailable_noMatchingServiceExists_shouldReturnFalse() {
- assertThat(SwipeUpPreferenceController.isGestureAvailable(mContext)).isFalse();
+ assertThat(SystemNavigationEdgeToEdgePreferenceController.isGestureAvailable(mContext))
+ .isFalse();
}
@Test
@@ -109,35 +130,45 @@
@Test
public void testIsChecked_defaultIsFalse_shouldReturnFalse() {
- SettingsShadowResources.overrideResource(R.bool.config_swipe_up_gesture_default, false);
+ Settings.Global.putInt(mContext.getContentResolver(), "prototype_enabled", 0);
assertThat(mController.isChecked()).isFalse();
}
@Test
- public void testIsChecked_setCheckedTrue_shouldReturnTrue() {
+ public void testIsChecked_radioButtonClicked_shouldReturnTrue() {
// Set the setting to be enabled.
- mController.setChecked(true);
+ mController.onRadioButtonClicked(null);
assertThat(mController.isChecked()).isTrue();
}
@Test
- public void testIsChecked_setCheckedFalse_shouldReturnFalse() {
- // Set the setting to be disabled.
- mController.setChecked(false);
- assertThat(mController.isChecked()).isFalse();
+ public void testOnRadioButtonClicked_setsCorrectRadioButtonChecked() {
+ RadioButtonPreference radioLegacy = mock(RadioButtonPreference.class);
+ RadioButtonPreference radioSwipeUp = mock(RadioButtonPreference.class);
+ RadioButtonPreference radioEdgeToEdge = mock(RadioButtonPreference.class);
+ PreferenceScreen screen = mock(PreferenceScreen.class);
+
+ when(screen.findPreference(PREF_KEY_LEGACY)).thenReturn(radioLegacy);
+ when(screen.findPreference(PREF_KEY_SWIPE_UP)).thenReturn(radioSwipeUp);
+ when(screen.findPreference(PREF_KEY_EDGE_TO_EDGE)).thenReturn(radioEdgeToEdge);
+
+ mController.displayPreference(screen);
+ mController.onRadioButtonClicked(radioEdgeToEdge);
+
+ verify(radioLegacy, times(1)).setChecked(false);
+ verify(radioSwipeUp, times(1)).setChecked(false);
+ verify(radioEdgeToEdge, times(1)).setChecked(true);
}
@Test
public void isSliceableCorrectKey_returnsTrue() {
- final SwipeUpPreferenceController controller =
- new SwipeUpPreferenceController(mContext, "gesture_swipe_up");
- assertThat(controller.isSliceable()).isTrue();
+ assertThat(mController.isSliceable()).isTrue();
}
@Test
public void isSliceableIncorrectKey_returnsFalse() {
- final SwipeUpPreferenceController controller =
- new SwipeUpPreferenceController(mContext, "bad_key");
+ final SystemNavigationEdgeToEdgePreferenceController controller =
+ new SystemNavigationEdgeToEdgePreferenceController(mContext, "bad_key");
assertThat(controller.isSliceable()).isFalse();
}
}
diff --git a/tests/robotests/src/com/android/settings/gestures/SwipeUpPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceControllerTest.java
similarity index 63%
copy from tests/robotests/src/com/android/settings/gestures/SwipeUpPreferenceControllerTest.java
copy to tests/robotests/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceControllerTest.java
index e98bdc8..fe0a061 100644
--- a/tests/robotests/src/com/android/settings/gestures/SwipeUpPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceControllerTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,8 +16,17 @@
package com.android.settings.gestures;
+import static com.android.settings.gestures.SystemNavigationEdgeToEdgePreferenceController.PREF_KEY_EDGE_TO_EDGE;
+import static com.android.settings.gestures.SystemNavigationLegacyPreferenceController.PREF_KEY_LEGACY;
+import static com.android.settings.gestures.SystemNavigationSwipeUpPreferenceController.PREF_KEY_SWIPE_UP;
+
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.verify;
+
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -25,8 +34,12 @@
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
import com.android.internal.R;
import com.android.settings.testutils.shadow.SettingsShadowResources;
+import com.android.settings.widget.RadioButtonPreference;
import org.junit.After;
import org.junit.Before;
@@ -40,24 +53,25 @@
@RunWith(RobolectricTestRunner.class)
@Config(shadows = SettingsShadowResources.class)
-public class SwipeUpPreferenceControllerTest {
+public class SystemNavigationLegacyPreferenceControllerTest {
private Context mContext;
private ShadowPackageManager mPackageManager;
- private SwipeUpPreferenceController mController;
+
+ private SystemNavigationLegacyPreferenceController mController;
private static final String ACTION_QUICKSTEP = "android.intent.action.QUICKSTEP_SERVICE";
- private static final String KEY_SWIPE_UP = "gesture_swipe_up";
@Before
public void setUp() {
SettingsShadowResources.overrideResource(R.bool.config_swipe_up_gesture_setting_available,
true);
- SettingsShadowResources.overrideResource(R.bool.config_swipe_up_gesture_default, true);
+ SettingsShadowResources.overrideResource(R.bool.config_swipe_up_gesture_default, false);
mContext = RuntimeEnvironment.application;
mPackageManager = Shadows.shadowOf(mContext.getPackageManager());
- mController = new SwipeUpPreferenceController(mContext, KEY_SWIPE_UP);
+
+ mController = new SystemNavigationLegacyPreferenceController(mContext, PREF_KEY_LEGACY);
}
@After
@@ -80,7 +94,8 @@
info.serviceInfo.applicationInfo.flags = ApplicationInfo.FLAG_SYSTEM;
mPackageManager.addResolveInfoForIntent(quickStepIntent, info);
- assertThat(SwipeUpPreferenceController.isGestureAvailable(mContext)).isTrue();
+ assertThat(SystemNavigationLegacyPreferenceController.isGestureAvailable(mContext))
+ .isTrue();
}
@Test
@@ -94,12 +109,14 @@
.setPackage(recentsComponentName.getPackageName());
mPackageManager.addResolveInfoForIntent(quickStepIntent, new ResolveInfo());
- assertThat(SwipeUpPreferenceController.isGestureAvailable(mContext)).isFalse();
+ assertThat(
+ SystemNavigationLegacyPreferenceController.isGestureAvailable(mContext)).isFalse();
}
@Test
public void testIsGestureAvailable_noMatchingServiceExists_shouldReturnFalse() {
- assertThat(SwipeUpPreferenceController.isGestureAvailable(mContext)).isFalse();
+ assertThat(
+ SystemNavigationLegacyPreferenceController.isGestureAvailable(mContext)).isFalse();
}
@Test
@@ -109,35 +126,46 @@
@Test
public void testIsChecked_defaultIsFalse_shouldReturnFalse() {
- SettingsShadowResources.overrideResource(R.bool.config_swipe_up_gesture_default, false);
+ // Turn on the Swipe Up mode (2-buttons)
+ SettingsShadowResources.overrideResource(R.bool.config_swipe_up_gesture_default, true);
assertThat(mController.isChecked()).isFalse();
}
@Test
- public void testIsChecked_setCheckedTrue_shouldReturnTrue() {
+ public void testIsChecked_radioButtonClicked_shouldReturnTrue() {
// Set the setting to be enabled.
- mController.setChecked(true);
+ mController.onRadioButtonClicked(null);
assertThat(mController.isChecked()).isTrue();
}
@Test
- public void testIsChecked_setCheckedFalse_shouldReturnFalse() {
- // Set the setting to be disabled.
- mController.setChecked(false);
- assertThat(mController.isChecked()).isFalse();
+ public void testOnRadioButtonClicked_setsCorrectRadioButtonChecked() {
+ RadioButtonPreference radioLegacy = mock(RadioButtonPreference.class);
+ RadioButtonPreference radioSwipeUp = mock(RadioButtonPreference.class);
+ RadioButtonPreference radioEdgeToEdge = mock(RadioButtonPreference.class);
+ PreferenceScreen screen = mock(PreferenceScreen.class);
+
+ when(screen.findPreference(PREF_KEY_LEGACY)).thenReturn(radioLegacy);
+ when(screen.findPreference(PREF_KEY_SWIPE_UP)).thenReturn(radioSwipeUp);
+ when(screen.findPreference(PREF_KEY_EDGE_TO_EDGE)).thenReturn(radioEdgeToEdge);
+
+ mController.displayPreference(screen);
+ mController.onRadioButtonClicked(radioLegacy);
+
+ verify(radioLegacy, times(1)).setChecked(true);
+ verify(radioSwipeUp, times(1)).setChecked(false);
+ verify(radioEdgeToEdge, times(1)).setChecked(false);
}
@Test
public void isSliceableCorrectKey_returnsTrue() {
- final SwipeUpPreferenceController controller =
- new SwipeUpPreferenceController(mContext, "gesture_swipe_up");
- assertThat(controller.isSliceable()).isTrue();
+ assertThat(mController.isSliceable()).isTrue();
}
@Test
public void isSliceableIncorrectKey_returnsFalse() {
- final SwipeUpPreferenceController controller =
- new SwipeUpPreferenceController(mContext, "bad_key");
+ final SystemNavigationLegacyPreferenceController controller =
+ new SystemNavigationLegacyPreferenceController(mContext, "bad_key");
assertThat(controller.isSliceable()).isFalse();
}
}
diff --git a/tests/robotests/src/com/android/settings/gestures/SwipeUpPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceControllerTest.java
similarity index 63%
rename from tests/robotests/src/com/android/settings/gestures/SwipeUpPreferenceControllerTest.java
rename to tests/robotests/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceControllerTest.java
index e98bdc8..97b4762 100644
--- a/tests/robotests/src/com/android/settings/gestures/SwipeUpPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceControllerTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,8 +16,17 @@
package com.android.settings.gestures;
+import static com.android.settings.gestures.SystemNavigationEdgeToEdgePreferenceController.PREF_KEY_EDGE_TO_EDGE;
+import static com.android.settings.gestures.SystemNavigationLegacyPreferenceController.PREF_KEY_LEGACY;
+import static com.android.settings.gestures.SystemNavigationSwipeUpPreferenceController.PREF_KEY_SWIPE_UP;
+
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.verify;
+
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -25,8 +34,12 @@
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
import com.android.internal.R;
import com.android.settings.testutils.shadow.SettingsShadowResources;
+import com.android.settings.widget.RadioButtonPreference;
import org.junit.After;
import org.junit.Before;
@@ -40,14 +53,14 @@
@RunWith(RobolectricTestRunner.class)
@Config(shadows = SettingsShadowResources.class)
-public class SwipeUpPreferenceControllerTest {
+public class SystemNavigationSwipeUpPreferenceControllerTest {
private Context mContext;
private ShadowPackageManager mPackageManager;
- private SwipeUpPreferenceController mController;
+
+ private SystemNavigationSwipeUpPreferenceController mController;
private static final String ACTION_QUICKSTEP = "android.intent.action.QUICKSTEP_SERVICE";
- private static final String KEY_SWIPE_UP = "gesture_swipe_up";
@Before
public void setUp() {
@@ -57,7 +70,8 @@
mContext = RuntimeEnvironment.application;
mPackageManager = Shadows.shadowOf(mContext.getPackageManager());
- mController = new SwipeUpPreferenceController(mContext, KEY_SWIPE_UP);
+
+ mController = new SystemNavigationSwipeUpPreferenceController(mContext, PREF_KEY_SWIPE_UP);
}
@After
@@ -80,7 +94,8 @@
info.serviceInfo.applicationInfo.flags = ApplicationInfo.FLAG_SYSTEM;
mPackageManager.addResolveInfoForIntent(quickStepIntent, info);
- assertThat(SwipeUpPreferenceController.isGestureAvailable(mContext)).isTrue();
+ assertThat(SystemNavigationSwipeUpPreferenceController.isGestureAvailable(mContext))
+ .isTrue();
}
@Test
@@ -94,12 +109,14 @@
.setPackage(recentsComponentName.getPackageName());
mPackageManager.addResolveInfoForIntent(quickStepIntent, new ResolveInfo());
- assertThat(SwipeUpPreferenceController.isGestureAvailable(mContext)).isFalse();
+ assertThat(SystemNavigationSwipeUpPreferenceController.isGestureAvailable(mContext))
+ .isFalse();
}
@Test
public void testIsGestureAvailable_noMatchingServiceExists_shouldReturnFalse() {
- assertThat(SwipeUpPreferenceController.isGestureAvailable(mContext)).isFalse();
+ assertThat(SystemNavigationSwipeUpPreferenceController.isGestureAvailable(mContext))
+ .isFalse();
}
@Test
@@ -114,30 +131,40 @@
}
@Test
- public void testIsChecked_setCheckedTrue_shouldReturnTrue() {
+ public void testIsChecked_radioButtonClicked_shouldReturnTrue() {
// Set the setting to be enabled.
- mController.setChecked(true);
+ mController.onRadioButtonClicked(null);
assertThat(mController.isChecked()).isTrue();
}
@Test
- public void testIsChecked_setCheckedFalse_shouldReturnFalse() {
- // Set the setting to be disabled.
- mController.setChecked(false);
- assertThat(mController.isChecked()).isFalse();
+ public void testOnRadioButtonClicked_setsCorrectRadioButtonChecked() {
+ RadioButtonPreference radioLegacy = mock(RadioButtonPreference.class);
+ RadioButtonPreference radioSwipeUp = mock(RadioButtonPreference.class);
+ RadioButtonPreference radioEdgeToEdge = mock(RadioButtonPreference.class);
+ PreferenceScreen screen = mock(PreferenceScreen.class);
+
+ when(screen.findPreference(PREF_KEY_LEGACY)).thenReturn(radioLegacy);
+ when(screen.findPreference(PREF_KEY_SWIPE_UP)).thenReturn(radioSwipeUp);
+ when(screen.findPreference(PREF_KEY_EDGE_TO_EDGE)).thenReturn(radioEdgeToEdge);
+
+ mController.displayPreference(screen);
+ mController.onRadioButtonClicked(radioSwipeUp);
+
+ verify(radioLegacy, times(1)).setChecked(false);
+ verify(radioSwipeUp, times(1)).setChecked(true);
+ verify(radioEdgeToEdge, times(1)).setChecked(false);
}
@Test
public void isSliceableCorrectKey_returnsTrue() {
- final SwipeUpPreferenceController controller =
- new SwipeUpPreferenceController(mContext, "gesture_swipe_up");
- assertThat(controller.isSliceable()).isTrue();
+ assertThat(mController.isSliceable()).isTrue();
}
@Test
public void isSliceableIncorrectKey_returnsFalse() {
- final SwipeUpPreferenceController controller =
- new SwipeUpPreferenceController(mContext, "bad_key");
+ final SystemNavigationSwipeUpPreferenceController controller =
+ new SystemNavigationSwipeUpPreferenceController(mContext, "bad_key");
assertThat(controller.isSliceable()).isFalse();
}
}