Add setting to allow configuration of long press home gesture
This allows configuration of long press home gesture on 2-/3-button navigation configurations. It allows the user to enable and disable the invocation of assistant app using said gesture.
Bug: 191888710
Test: Unit tests and on a physical device.
Change-Id: I18cb290058ac5c2a748d40802b942404f548b868
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 231a149..4de795c 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -243,6 +243,8 @@
public static class AutomaticStorageManagerSettingsActivity extends SettingsActivity { /* empty */ }
public static class GamesStorageActivity extends SettingsActivity { /* empty */ }
public static class GestureNavigationSettingsActivity extends SettingsActivity { /* empty */ }
+ /** Activity to manage 2-/3-button navigation configuration. */
+ public static class ButtonNavigationSettingsActivity extends SettingsActivity { /* empty */ }
public static class InteractAcrossProfilesSettingsActivity extends SettingsActivity {
/* empty */
}
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 1adf199..3c594a7 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -94,6 +94,7 @@
import com.android.settings.fuelgauge.batterysaver.BatterySaverScheduleSettings;
import com.android.settings.fuelgauge.batterysaver.BatterySaverSettings;
import com.android.settings.gestures.AssistGestureSettings;
+import com.android.settings.gestures.ButtonNavigationSettingsFragment;
import com.android.settings.gestures.DoubleTapPowerSettings;
import com.android.settings.gestures.DoubleTapScreenSettings;
import com.android.settings.gestures.DoubleTwistGestureSettings;
@@ -312,6 +313,7 @@
DarkModeSettingsFragment.class.getName(),
BugReportHandlerPicker.class.getName(),
GestureNavigationSettingsFragment.class.getName(),
+ ButtonNavigationSettingsFragment.class.getName(),
InteractAcrossProfilesSettings.class.getName(),
InteractAcrossProfilesDetails.class.getName(),
MediaControlsSettings.class.getName(),
diff --git a/src/com/android/settings/gestures/ButtonNavigationSettingsAssistController.java b/src/com/android/settings/gestures/ButtonNavigationSettingsAssistController.java
new file mode 100644
index 0000000..6ecf7b1
--- /dev/null
+++ b/src/com/android/settings/gestures/ButtonNavigationSettingsAssistController.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2021 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.view.WindowManagerPolicyConstants.NAV_BAR_MODE_2BUTTON_OVERLAY;
+import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON_OVERLAY;
+
+import android.content.Context;
+import android.provider.Settings;
+
+import com.android.settings.core.TogglePreferenceController;
+
+/**
+ * Configures behaviour of long press home button to invoke assistant app gesture.
+ */
+public class ButtonNavigationSettingsAssistController extends TogglePreferenceController {
+
+ public ButtonNavigationSettingsAssistController(Context context, String key) {
+ super(context, key);
+ }
+
+ @Override
+ public boolean isChecked() {
+ boolean onByDefault = mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_assistLongPressHomeEnabledDefault);
+ return Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ASSIST_LONG_PRESS_HOME_ENABLED, onByDefault ? 1 : 0) == 1;
+ }
+
+ @Override
+ public boolean setChecked(boolean isChecked) {
+ return Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ASSIST_LONG_PRESS_HOME_ENABLED, isChecked ? 1 : 0);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ if (SystemNavigationPreferenceController.isOverlayPackageAvailable(mContext,
+ NAV_BAR_MODE_2BUTTON_OVERLAY)
+ || SystemNavigationPreferenceController.isOverlayPackageAvailable(mContext,
+ NAV_BAR_MODE_3BUTTON_OVERLAY)) {
+ return AVAILABLE;
+ }
+
+ return UNSUPPORTED_ON_DEVICE;
+ }
+}
diff --git a/src/com/android/settings/gestures/ButtonNavigationSettingsFragment.java b/src/com/android/settings/gestures/ButtonNavigationSettingsFragment.java
new file mode 100644
index 0000000..af75e78
--- /dev/null
+++ b/src/com/android/settings/gestures/ButtonNavigationSettingsFragment.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2021 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.view.WindowManagerPolicyConstants.NAV_BAR_MODE_2BUTTON_OVERLAY;
+import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON_OVERLAY;
+
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+
+import com.android.settings.R;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
+
+/**
+ * A fragment that includes settings for 2- and 3-button navigation modes.
+ */
+@SearchIndexable(forTarget = SearchIndexable.MOBILE)
+public class ButtonNavigationSettingsFragment extends DashboardFragment {
+
+ private static final String TAG = "ButtonNavigationSettingsFragment";
+
+ public static final String BUTTON_NAVIGATION_SETTINGS =
+ "com.android.settings.BUTTON_NAVIGATION_SETTINGS";
+
+
+ @Override
+ public int getMetricsCategory() {
+ return SettingsEnums.SETTINGS_BUTTON_NAV_DLG;
+ }
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.button_navigation_settings;
+ }
+
+ @Override
+ protected String getLogTag() {
+ return TAG;
+ }
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.button_navigation_settings) {
+
+ @Override
+ protected boolean isPageSearchEnabled(Context context) {
+ return SystemNavigationPreferenceController.isOverlayPackageAvailable(context,
+ NAV_BAR_MODE_2BUTTON_OVERLAY)
+ || SystemNavigationPreferenceController.isOverlayPackageAvailable(
+ context,
+ NAV_BAR_MODE_3BUTTON_OVERLAY);
+ }
+ };
+}
diff --git a/src/com/android/settings/gestures/SystemNavigationGestureSettings.java b/src/com/android/settings/gestures/SystemNavigationGestureSettings.java
index 1ef8dec..7f0d7c3 100644
--- a/src/com/android/settings/gestures/SystemNavigationGestureSettings.java
+++ b/src/com/android/settings/gestures/SystemNavigationGestureSettings.java
@@ -41,6 +41,7 @@
import com.android.settings.R;
import com.android.settings.accessibility.AccessibilityGestureNavigationTutorial;
+import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
@@ -150,10 +151,19 @@
pref.setSummary(((CandidateInfoExtra) info).loadSummary());
- if (info.getKey() == KEY_SYSTEM_NAV_GESTURAL) {
+ if (KEY_SYSTEM_NAV_GESTURAL.equals(info.getKey())) {
pref.setExtraWidgetOnClickListener((v) -> startActivity(new Intent(
GestureNavigationSettingsFragment.GESTURE_NAVIGATION_SETTINGS)));
}
+
+ if (KEY_SYSTEM_NAV_2BUTTONS.equals(info.getKey()) || KEY_SYSTEM_NAV_3BUTTONS.equals(
+ info.getKey())) {
+ pref.setExtraWidgetOnClickListener((v) ->
+ new SubSettingLauncher(getContext())
+ .setDestination(ButtonNavigationSettingsFragment.class.getName())
+ .setSourceMetricsCategory(SettingsEnums.SETTINGS_GESTURE_SWIPE_UP)
+ .launch());
+ }
}
@Override