Use Gesture nav settings activity instead of dialog

Bug: 146004827
Test: make RunSettingsRoboTests ROBOTEST_FILTER=SystemNavigationGestureSettingsTest

Change-Id: I2d77842b6a470000be818123d845de745ca0318f
This commit is contained in:
Mehdi Alizadeh
2019-12-13 15:37:38 -08:00
parent 6acde7c21f
commit 3857e6f936
4 changed files with 29 additions and 299 deletions

View File

@@ -65,11 +65,6 @@ public class SystemNavigationGestureSettings extends RadioButtonPickerFragment i
private static final String TAG = "SystemNavigationGesture";
@VisibleForTesting
static final String SHARED_PREFERENCES_NAME = "system_navigation_settings_preferences";
@VisibleForTesting
static final String PREFS_BACK_SENSITIVITY_KEY = "system_navigation_back_sensitivity";
@VisibleForTesting
static final String KEY_SYSTEM_NAV_3BUTTONS = "system_nav_3buttons";
@VisibleForTesting
@@ -80,25 +75,6 @@ public class SystemNavigationGestureSettings extends RadioButtonPickerFragment i
public static final String PREF_KEY_SUGGESTION_COMPLETE =
"pref_system_navigation_suggestion_complete";
@VisibleForTesting
static final String NAV_BAR_MODE_GESTURAL_OVERLAY_NARROW_BACK
= "com.android.internal.systemui.navbar.gestural_narrow_back";
@VisibleForTesting
static final String NAV_BAR_MODE_GESTURAL_OVERLAY_WIDE_BACK
= "com.android.internal.systemui.navbar.gestural_wide_back";
@VisibleForTesting
static final String NAV_BAR_MODE_GESTURAL_OVERLAY_EXTRA_WIDE_BACK
= "com.android.internal.systemui.navbar.gestural_extra_wide_back";
@VisibleForTesting
static final String[] BACK_GESTURE_INSET_OVERLAYS = {
NAV_BAR_MODE_GESTURAL_OVERLAY_NARROW_BACK,
NAV_BAR_MODE_GESTURAL_OVERLAY,
NAV_BAR_MODE_GESTURAL_OVERLAY_WIDE_BACK,
NAV_BAR_MODE_GESTURAL_OVERLAY_EXTRA_WIDE_BACK
};
@VisibleForTesting
static int BACK_GESTURE_INSET_DEFAULT_OVERLAY = 1;
private IOverlayManager mOverlayManager;
private VideoPreference mVideoPreference;
@@ -122,6 +98,8 @@ public class SystemNavigationGestureSettings extends RadioButtonPickerFragment i
mVideoPreference.setHeight( /* Illustration height in dp */
getResources().getDimension(R.dimen.system_navigation_illustration_height)
/ getResources().getDisplayMetrics().density);
migrateOverlaySensitivityToSettings(context, mOverlayManager);
}
@Override
@@ -164,8 +142,8 @@ public class SystemNavigationGestureSettings extends RadioButtonPickerFragment i
RadioButtonPreferenceWithExtraWidget p = (RadioButtonPreferenceWithExtraWidget) pref;
if (info.getKey() == KEY_SYSTEM_NAV_GESTURAL) {
p.setExtraWidgetVisibility(EXTRA_WIDGET_VISIBILITY_SETTING);
p.setExtraWidgetOnClickListener((v) -> GestureNavigationBackSensitivityDialog
.show(this, getBackSensitivity(getContext(), mOverlayManager)));
p.setExtraWidgetOnClickListener((v) -> startActivity(new Intent(
GestureNavigationSettingsFragment.GESTURE_NAVIGATION_SETTINGS)));
} else {
p.setExtraWidgetVisibility(EXTRA_WIDGET_VISIBILITY_GONE);
}
@@ -213,8 +191,7 @@ public class SystemNavigationGestureSettings extends RadioButtonPickerFragment i
@Override
protected boolean setDefaultKey(String key) {
final Context c = getContext();
setCurrentSystemNavigationMode(c, mOverlayManager, key);
setCurrentSystemNavigationMode(mOverlayManager, key);
setIllustrationVideo(mVideoPreference, key);
if (TextUtils.equals(KEY_SYSTEM_NAV_GESTURAL, key) && (
isAnyServiceSupportAccessibilityButton() || isNavBarMagnificationEnabled())) {
@@ -225,37 +202,27 @@ public class SystemNavigationGestureSettings extends RadioButtonPickerFragment i
return true;
}
@VisibleForTesting
static void setBackSensitivity(Context context, IOverlayManager overlayManager,
int sensitivity) {
if (sensitivity < 0 || sensitivity >= BACK_GESTURE_INSET_OVERLAYS.length) {
throw new IllegalArgumentException("Sensitivity out of range.");
static void migrateOverlaySensitivityToSettings(Context context,
IOverlayManager overlayManager) {
if (!SystemNavigationPreferenceController.isGestureNavigationEnabled(context)) {
return;
}
// Store the sensitivity level, to be able to restore when user returns to Gesture Nav mode
context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE).edit()
.putInt(PREFS_BACK_SENSITIVITY_KEY, sensitivity).apply();
if (getCurrentSystemNavigationMode(context) == KEY_SYSTEM_NAV_GESTURAL) {
setNavBarInteractionMode(overlayManager, BACK_GESTURE_INSET_OVERLAYS[sensitivity]);
OverlayInfo info = null;
try {
info = overlayManager.getOverlayInfo(NAV_BAR_MODE_GESTURAL_OVERLAY, USER_CURRENT);
} catch (RemoteException e) { /* Do nothing */ }
if (info != null && !info.isEnabled()) {
// Enable the default gesture nav overlay. Back sensitivity for left and right are
// stored as separate settings values, and other gesture nav overlays are deprecated.
setCurrentSystemNavigationMode(overlayManager, KEY_SYSTEM_NAV_GESTURAL);
Settings.Secure.putFloat(context.getContentResolver(),
Settings.Secure.BACK_GESTURE_INSET_SCALE_LEFT, 1.0f);
Settings.Secure.putFloat(context.getContentResolver(),
Settings.Secure.BACK_GESTURE_INSET_SCALE_RIGHT, 1.0f);
}
}
@VisibleForTesting
static int getBackSensitivity(Context context, IOverlayManager overlayManager) {
for (int i = 0; i < BACK_GESTURE_INSET_OVERLAYS.length; i++) {
OverlayInfo info = null;
try {
info = overlayManager.getOverlayInfo(BACK_GESTURE_INSET_OVERLAYS[i], USER_CURRENT);
} catch (RemoteException e) { /* Do nothing */ }
if (info != null && info.isEnabled()) {
return i;
}
}
// If Gesture nav is not selected, read the value from shared preferences.
return context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE)
.getInt(PREFS_BACK_SENSITIVITY_KEY, BACK_GESTURE_INSET_DEFAULT_OVERLAY);
}
@VisibleForTesting
static String getCurrentSystemNavigationMode(Context context) {
if (SystemNavigationPreferenceController.isGestureNavigationEnabled(context)) {
@@ -268,24 +235,20 @@ public class SystemNavigationGestureSettings extends RadioButtonPickerFragment i
}
@VisibleForTesting
static void setCurrentSystemNavigationMode(Context context, IOverlayManager overlayManager,
String key) {
static void setCurrentSystemNavigationMode(IOverlayManager overlayManager, String key) {
String overlayPackage = NAV_BAR_MODE_GESTURAL_OVERLAY;
switch (key) {
case KEY_SYSTEM_NAV_GESTURAL:
int sensitivity = getBackSensitivity(context, overlayManager);
setNavBarInteractionMode(overlayManager, BACK_GESTURE_INSET_OVERLAYS[sensitivity]);
overlayPackage = NAV_BAR_MODE_GESTURAL_OVERLAY;
break;
case KEY_SYSTEM_NAV_2BUTTONS:
setNavBarInteractionMode(overlayManager, NAV_BAR_MODE_2BUTTON_OVERLAY);
overlayPackage = NAV_BAR_MODE_2BUTTON_OVERLAY;
break;
case KEY_SYSTEM_NAV_3BUTTONS:
setNavBarInteractionMode(overlayManager, NAV_BAR_MODE_3BUTTON_OVERLAY);
overlayPackage = NAV_BAR_MODE_3BUTTON_OVERLAY;
break;
}
}
private static void setNavBarInteractionMode(IOverlayManager overlayManager,
String overlayPackage) {
try {
overlayManager.setEnabledExclusiveInCategory(overlayPackage, USER_CURRENT);
} catch (RemoteException e) {