diff options
| author | 2020-06-17 22:56:44 +0000 | |
|---|---|---|
| committer | 2020-06-17 22:56:44 +0000 | |
| commit | a13ce9ce8e768df980cca11ca0e302d3c60604a4 (patch) | |
| tree | ee7da508ce2a01e602bf6590abc235365af26a69 | |
| parent | f2ba813a6206953a587d05020b6b1d0fd490c746 (diff) | |
| parent | 3b3b9db87ddcf25717f768446e3b12179b2ea058 (diff) | |
Merge "Disables Back gesture while Sandbox is running." into rvc-dev
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java | 51 |
1 files changed, 50 insertions, 1 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java index 978394ca05ab..cad1c91975bf 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java @@ -17,7 +17,11 @@ package com.android.systemui.statusbar.phone; import static android.view.Display.INVALID_DISPLAY; +import android.app.ActivityManager; +import android.content.ComponentName; import android.content.Context; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; import android.database.ContentObserver; import android.graphics.PixelFormat; @@ -75,6 +79,8 @@ import com.android.systemui.tracing.nano.EdgeBackGestureHandlerProto; import com.android.systemui.tracing.nano.SystemUiTraceProto; import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.Executor; /** @@ -121,9 +127,18 @@ public class EdgeBackGestureHandler extends CurrentUserTracker implements Displa } }; + private TaskStackChangeListener mTaskStackListener = new TaskStackChangeListener() { + @Override + public void onTaskStackChanged() { + mGestureBlockingActivityRunning = isGestureBlockingActivityRunning(); + } + }; + private final Context mContext; private final OverviewProxyService mOverviewProxyService; - private PluginManager mPluginManager; + private final PluginManager mPluginManager; + // Activities which should not trigger Back gesture. + private final List<ComponentName> mGestureBlockingActivities = new ArrayList<>(); private final Point mDisplaySize = new Point(); private final int mDisplayId; @@ -162,6 +177,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker implements Displa private boolean mIsEnabled; private boolean mIsNavBarShownTransiently; private boolean mIsBackGestureAllowed; + private boolean mGestureBlockingActivityRunning; private InputMonitor mInputMonitor; private InputEventReceiver mInputEventReceiver; @@ -203,6 +219,29 @@ public class EdgeBackGestureHandler extends CurrentUserTracker implements Displa mMainExecutor = context.getMainExecutor(); mOverviewProxyService = overviewProxyService; mPluginManager = pluginManager; + ComponentName recentsComponentName = ComponentName.unflattenFromString( + context.getString(com.android.internal.R.string.config_recentsComponentName)); + if (recentsComponentName != null) { + String recentsPackageName = recentsComponentName.getPackageName(); + PackageManager manager = context.getPackageManager(); + try { + Resources resources = manager.getResourcesForApplication(recentsPackageName); + int resId = resources.getIdentifier( + "gesture_blocking_activities", "array", recentsPackageName); + + if (resId == 0) { + Log.e(TAG, "No resource found for gesture-blocking activities"); + } else { + String[] gestureBlockingActivities = resources.getStringArray(resId); + for (String gestureBlockingActivity : gestureBlockingActivities) { + mGestureBlockingActivities.add( + ComponentName.unflattenFromString(gestureBlockingActivity)); + } + } + } catch (NameNotFoundException e) { + Log.e(TAG, "Failed to add gesture blocking activities", e); + } + } Dependency.get(ProtoTracer.class).add(this); mLongPressTimeout = Math.min(MAX_LONG_PRESS_TIMEOUT, @@ -324,6 +363,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker implements Displa mGestureNavigationSettingsObserver.unregister(); mContext.getSystemService(DisplayManager.class).unregisterDisplayListener(this); mPluginManager.removePluginListener(this); + ActivityManagerWrapper.getInstance().unregisterTaskStackListener(mTaskStackListener); try { WindowManagerGlobal.getWindowManagerService() @@ -338,6 +378,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker implements Displa updateDisplaySize(); mContext.getSystemService(DisplayManager.class).registerDisplayListener(this, mContext.getMainThreadHandler()); + ActivityManagerWrapper.getInstance().registerTaskStackListener(mTaskStackListener); try { WindowManagerGlobal.getWindowManagerService() @@ -491,6 +532,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker implements Displa mLogGesture = false; mInRejectedExclusion = false; mAllowGesture = !mDisabledForQuickstep && mIsBackGestureAllowed + && !mGestureBlockingActivityRunning && !QuickStepContract.isBackGestureDisabled(mSysUiFlags) && isWithinTouchRegion((int) ev.getX(), (int) ev.getY()); if (mAllowGesture) { @@ -633,6 +675,13 @@ public class EdgeBackGestureHandler extends CurrentUserTracker implements Displa pw.println(" mEdgeWidthRight=" + mEdgeWidthRight); } + private boolean isGestureBlockingActivityRunning() { + ActivityManager.RunningTaskInfo runningTask = + ActivityManagerWrapper.getInstance().getRunningTask(); + ComponentName topActivity = runningTask == null ? null : runningTask.topActivity; + return topActivity != null && mGestureBlockingActivities.contains(topActivity); + } + @Override public void writeToProto(SystemUiTraceProto proto) { if (proto.edgeBackGestureHandler == null) { |