summaryrefslogtreecommitdiffstats
path: root/quickstep
diff options
context:
space:
mode:
Diffstat (limited to 'quickstep')
-rw-r--r--quickstep/src/com/android/quickstep/NavBarModeOverlayResourceObserver.java84
-rw-r--r--quickstep/src/com/android/quickstep/OverviewInteractionState.java27
-rw-r--r--quickstep/src/com/android/quickstep/SwipeUpSetting.java25
-rw-r--r--quickstep/tests/src/com/android/quickstep/QuickStepOnOffRule.java82
4 files changed, 150 insertions, 68 deletions
diff --git a/quickstep/src/com/android/quickstep/NavBarModeOverlayResourceObserver.java b/quickstep/src/com/android/quickstep/NavBarModeOverlayResourceObserver.java
new file mode 100644
index 000000000..058b46ffc
--- /dev/null
+++ b/quickstep/src/com/android/quickstep/NavBarModeOverlayResourceObserver.java
@@ -0,0 +1,84 @@
+/*
+ * 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.quickstep;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.res.Resources;
+import android.util.Log;
+
+import com.android.systemui.shared.system.QuickStepContract;
+
+/**
+ * Observer for the resource config that specifies the navigation bar mode.
+ */
+public class NavBarModeOverlayResourceObserver extends BroadcastReceiver {
+
+ private static final String TAG = "NavBarModeOverlayResourceObserver";
+
+ private final String ACTION_OVERLAY_CHANGED = "android.intent.action.OVERLAY_CHANGED";
+ private static final String NAV_BAR_INTERACTION_MODE_RES_NAME =
+ "config_navBarInteractionMode";
+
+ private final Context mContext;
+ private final OnChangeListener mOnChangeListener;
+
+ public NavBarModeOverlayResourceObserver(Context context, OnChangeListener listener) {
+ mContext = context;
+ mOnChangeListener = listener;
+ }
+
+ public void register() {
+ IntentFilter filter = new IntentFilter(ACTION_OVERLAY_CHANGED);
+ filter.addDataScheme("package");
+ mContext.registerReceiver(this, filter);
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ mOnChangeListener.onNavBarModeChanged(getSystemIntegerRes(context,
+ NAV_BAR_INTERACTION_MODE_RES_NAME));
+ }
+
+ public interface OnChangeListener {
+ void onNavBarModeChanged(int mode);
+ }
+
+ public static boolean isSwipeUpModeEnabled(Context context) {
+ return QuickStepContract.isSwipeUpMode(getSystemIntegerRes(context,
+ NAV_BAR_INTERACTION_MODE_RES_NAME));
+ }
+
+ public static boolean isEdgeToEdgeModeEnabled(Context context) {
+ return QuickStepContract.isGesturalMode(getSystemIntegerRes(context,
+ NAV_BAR_INTERACTION_MODE_RES_NAME));
+ }
+
+ private static int getSystemIntegerRes(Context context, String resName) {
+ Resources res = context.getResources();
+ int resId = res.getIdentifier(resName, "integer", "android");
+
+ if (resId != 0) {
+ return res.getInteger(resId);
+ } else {
+ Log.e(TAG, "Failed to get system resource ID. Incompatible framework version?");
+ return -1;
+ }
+ }
+}
diff --git a/quickstep/src/com/android/quickstep/OverviewInteractionState.java b/quickstep/src/com/android/quickstep/OverviewInteractionState.java
index a0ab30141..903701de3 100644
--- a/quickstep/src/com/android/quickstep/OverviewInteractionState.java
+++ b/quickstep/src/com/android/quickstep/OverviewInteractionState.java
@@ -15,7 +15,6 @@
*/
package com.android.quickstep;
-import static com.android.quickstep.SwipeUpSetting.newSwipeUpSettingsObserver;
import static com.android.systemui.shared.system.NavigationBarCompat.FLAG_DISABLE_QUICK_SCRUB;
import static com.android.systemui.shared.system.NavigationBarCompat.FLAG_DISABLE_SWIPE_UP;
import static com.android.systemui.shared.system.NavigationBarCompat.FLAG_SHOW_OVERVIEW_BUTTON;
@@ -28,10 +27,11 @@ import android.util.Log;
import com.android.launcher3.Utilities;
import com.android.launcher3.allapps.DiscoveryBounce;
+import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.util.MainThreadInitializedObject;
-import com.android.launcher3.util.SecureSettingsObserver;
import com.android.launcher3.util.UiThreadHelper;
import com.android.systemui.shared.recents.ISystemUiProxy;
+import com.android.systemui.shared.system.QuickStepContract;
import androidx.annotation.WorkerThread;
@@ -58,7 +58,8 @@ public class OverviewInteractionState {
private static final int MSG_SET_BACK_BUTTON_ALPHA = 201;
private static final int MSG_SET_SWIPE_UP_ENABLED = 202;
- private final SecureSettingsObserver mSwipeUpSettingObserver;
+ // TODO: Discriminate between swipe up and edge to edge
+ private final NavBarModeOverlayResourceObserver mSwipeUpSettingObserver;
private final Context mContext;
private final Handler mUiHandler;
@@ -66,7 +67,7 @@ public class OverviewInteractionState {
// These are updated on the background thread
private ISystemUiProxy mISystemUiProxy;
- private boolean mSwipeUpEnabled = true;
+ private boolean mSwipeUpEnabled;
private float mBackButtonAlpha = 1;
private Runnable mOnSwipeUpSettingChangedListener;
@@ -80,15 +81,15 @@ public class OverviewInteractionState {
mUiHandler = new Handler(this::handleUiMessage);
mBgHandler = new Handler(UiThreadHelper.getBackgroundLooper(), this::handleBgMessage);
- if (SwipeUpSetting.isSwipeUpSettingAvailable()) {
- mSwipeUpSettingObserver =
- newSwipeUpSettingsObserver(context, this::notifySwipeUpSettingChanged);
+ mSwipeUpEnabled = NavBarModeOverlayResourceObserver.isSwipeUpModeEnabled(mContext)
+ || NavBarModeOverlayResourceObserver.isEdgeToEdgeModeEnabled(mContext);
+ if (SwipeUpSetting.isSystemNavigationSettingAvailable()) {
+ mSwipeUpSettingObserver = new NavBarModeOverlayResourceObserver(context,
+ this::notifySwipeUpSettingChanged);
mSwipeUpSettingObserver.register();
- mSwipeUpEnabled = mSwipeUpSettingObserver.getValue();
resetHomeBounceSeenOnQuickstepEnabledFirstTime();
} else {
mSwipeUpSettingObserver = null;
- mSwipeUpEnabled = SwipeUpSetting.isSwipeUpEnabledDefaultValue();
}
}
@@ -175,7 +176,13 @@ public class OverviewInteractionState {
}
}
- private void notifySwipeUpSettingChanged(boolean swipeUpEnabled) {
+ private void notifySwipeUpSettingChanged(int mode) {
+ boolean swipeUpEnabled = !QuickStepContract.isLegacyMode(mode);
+ boolean gesturalEnabled = QuickStepContract.isGesturalMode(mode);
+
+ FeatureFlags.SWIPE_HOME.updateStorage(mContext, gesturalEnabled);
+ FeatureFlags.ENABLE_ASSISTANT_GESTURE.updateStorage(mContext, gesturalEnabled);
+
mUiHandler.removeMessages(MSG_SET_SWIPE_UP_ENABLED);
mUiHandler.obtainMessage(MSG_SET_SWIPE_UP_ENABLED, swipeUpEnabled ? 1 : 0, 0).
sendToTarget();
diff --git a/quickstep/src/com/android/quickstep/SwipeUpSetting.java b/quickstep/src/com/android/quickstep/SwipeUpSetting.java
index 381ab9ffd..7f830f93e 100644
--- a/quickstep/src/com/android/quickstep/SwipeUpSetting.java
+++ b/quickstep/src/com/android/quickstep/SwipeUpSetting.java
@@ -16,23 +16,18 @@
package com.android.quickstep;
-import static com.android.systemui.shared.system.SettingsCompat.SWIPE_UP_SETTING_NAME;
-
-import android.content.Context;
import android.content.res.Resources;
import android.util.Log;
-import com.android.launcher3.util.SecureSettingsObserver;
-import com.android.launcher3.util.SecureSettingsObserver.OnChangeListener;
-
public final class SwipeUpSetting {
private static final String TAG = "SwipeUpSetting";
private static final String SWIPE_UP_SETTING_AVAILABLE_RES_NAME =
"config_swipe_up_gesture_setting_available";
- private static final String SWIPE_UP_ENABLED_DEFAULT_RES_NAME =
- "config_swipe_up_gesture_default";
+ public static boolean isSystemNavigationSettingAvailable() {
+ return getSystemBooleanRes(SWIPE_UP_SETTING_AVAILABLE_RES_NAME);
+ }
private static boolean getSystemBooleanRes(String resName) {
Resources res = Resources.getSystem();
@@ -45,18 +40,4 @@ public final class SwipeUpSetting {
return false;
}
}
-
- public static boolean isSwipeUpSettingAvailable() {
- return getSystemBooleanRes(SWIPE_UP_SETTING_AVAILABLE_RES_NAME);
- }
-
- public static boolean isSwipeUpEnabledDefaultValue() {
- return getSystemBooleanRes(SWIPE_UP_ENABLED_DEFAULT_RES_NAME);
- }
-
- public static SecureSettingsObserver newSwipeUpSettingsObserver(Context context,
- OnChangeListener listener) {
- return new SecureSettingsObserver(context.getContentResolver(), listener,
- SWIPE_UP_SETTING_NAME, isSwipeUpEnabledDefaultValue() ? 1 : 0);
- }
}
diff --git a/quickstep/tests/src/com/android/quickstep/QuickStepOnOffRule.java b/quickstep/tests/src/com/android/quickstep/QuickStepOnOffRule.java
index f89842a39..12bd0ca88 100644
--- a/quickstep/tests/src/com/android/quickstep/QuickStepOnOffRule.java
+++ b/quickstep/tests/src/com/android/quickstep/QuickStepOnOffRule.java
@@ -16,25 +16,29 @@
package com.android.quickstep;
+import static androidx.test.InstrumentationRegistry.getInstrumentation;
+
import static com.android.quickstep.QuickStepOnOffRule.Mode.BOTH;
import static com.android.quickstep.QuickStepOnOffRule.Mode.OFF;
import static com.android.quickstep.QuickStepOnOffRule.Mode.ON;
-import static com.android.systemui.shared.system.SettingsCompat.SWIPE_UP_SETTING_NAME;
-
-import static org.junit.Assert.assertTrue;
+import static com.android.systemui.shared.system.QuickStepContract.NAV_BAR_MODE_2BUTTON_OVERLAY;
+import static com.android.systemui.shared.system.QuickStepContract.NAV_BAR_MODE_3BUTTON_OVERLAY;
+import static com.android.systemui.shared.system.QuickStepContract.NAV_BAR_MODE_GESTURAL_OVERLAY;
-import android.provider.Settings;
+import android.content.Context;
import android.util.Log;
-import androidx.test.InstrumentationRegistry;
+import androidx.test.uiautomator.UiDevice;
import com.android.launcher3.tapl.LauncherInstrumentation;
import com.android.launcher3.tapl.TestHelpers;
+import com.android.systemui.shared.system.QuickStepContract;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
+import java.io.IOException;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -76,53 +80,59 @@ public class QuickStepOnOffRule implements TestRule {
return new Statement() {
@Override
public void evaluate() throws Throwable {
- if (SwipeUpSetting.isSwipeUpSettingAvailable()) {
- try {
- if (mode == ON || mode == BOTH) {
- evaluateWithQuickstepOn();
- }
- if (mode == OFF || mode == BOTH) {
- evaluateWithQuickstepOff();
- }
- } finally {
- setSwipeUpSetting(null);
+ final Context context = getInstrumentation().getContext();
+ final String prevOverlayPkg = QuickStepContract.isGesturalMode(context)
+ ? NAV_BAR_MODE_GESTURAL_OVERLAY
+ : QuickStepContract.isSwipeUpMode(context)
+ ? NAV_BAR_MODE_2BUTTON_OVERLAY
+ : NAV_BAR_MODE_3BUTTON_OVERLAY;
+ try {
+ if (mode == ON || mode == BOTH) {
+ evaluateWithQuickstepOn();
}
- } else {
- // Execute without changing the setting, if the requested mode is
- // compatible.
- final boolean swipeUpEnabledDefaultValue =
- SwipeUpSetting.isSwipeUpEnabledDefaultValue();
- if (mode == BOTH ||
- mode == ON && swipeUpEnabledDefaultValue ||
- mode == OFF && !swipeUpEnabledDefaultValue) {
- evaluateWithoutChangingSetting(base);
+ if (mode == OFF || mode == BOTH) {
+ evaluateWithQuickstepOff();
}
+ } finally {
+ setActiveOverlay(prevOverlayPkg);
}
}
- public void setSwipeUpSetting(String value) {
- Log.d(TAG, "setSwipeUpSetting: " + value);
- assertTrue("Couldn't change Quickstep mode",
- Settings.Secure.putString(
- InstrumentationRegistry.getInstrumentation().getTargetContext().
- getContentResolver(),
- SWIPE_UP_SETTING_NAME,
- value));
- }
-
public void evaluateWithoutChangingSetting(Statement base) throws Throwable {
base.evaluate();
}
private void evaluateWithQuickstepOff() throws Throwable {
- setSwipeUpSetting("0");
+ setActiveOverlay(NAV_BAR_MODE_3BUTTON_OVERLAY);
evaluateWithoutChangingSetting(base);
}
private void evaluateWithQuickstepOn() throws Throwable {
- setSwipeUpSetting("1");
+ setActiveOverlay(NAV_BAR_MODE_2BUTTON_OVERLAY);
base.evaluate();
}
+
+ private void setActiveOverlay(String overlayPackage) {
+ setOverlayPackageEnabled(NAV_BAR_MODE_3BUTTON_OVERLAY,
+ overlayPackage == NAV_BAR_MODE_3BUTTON_OVERLAY);
+ setOverlayPackageEnabled(NAV_BAR_MODE_2BUTTON_OVERLAY,
+ overlayPackage == NAV_BAR_MODE_2BUTTON_OVERLAY);
+ setOverlayPackageEnabled(NAV_BAR_MODE_GESTURAL_OVERLAY,
+ overlayPackage == NAV_BAR_MODE_GESTURAL_OVERLAY);
+
+ // TODO: Wait until nav bar mode has applied
+ }
+
+ private void setOverlayPackageEnabled(String overlayPackage, boolean enable) {
+ Log.d(TAG, "setOverlayPackageEnabled: " + overlayPackage + " " + enable);
+ final String action = enable ? "enable" : "disable";
+ try {
+ UiDevice.getInstance(getInstrumentation()).executeShellCommand(
+ "cmd overlay " + action + " " + overlayPackage);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
};
} else {
return base;