summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Mehdi Alizadeh <mett@google.com> 2019-05-23 01:19:37 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-05-23 01:19:37 +0000
commitc5d8ea15360299f1b02393376af9984269fc11ee (patch)
treec55a0c4c7be5e957c2cd6d509df81431854e6478
parent2c40205709af3a74ce1f48bcefd26ab91b5426d8 (diff)
parent4bbb4b1003cae457a9be0c541b4b81d1defbc97d (diff)
Merge "Switches from Gesture nav if 3P Launcher is set as default" into qt-dev
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationModeController.java60
1 files changed, 54 insertions, 6 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationModeController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationModeController.java
index 6e5685459d6a..36050ac36016 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationModeController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationModeController.java
@@ -17,12 +17,15 @@
package com.android.systemui.statusbar.phone;
import static android.content.Intent.ACTION_OVERLAY_CHANGED;
+import static android.content.Intent.ACTION_PREFERRED_ACTIVITY_CHANGED;
import static android.os.UserHandle.USER_CURRENT;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON_OVERLAY;
+import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY;
import android.content.BroadcastReceiver;
+import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
@@ -56,7 +59,7 @@ import javax.inject.Singleton;
public class NavigationModeController implements Dumpable {
private static final String TAG = NavigationModeController.class.getSimpleName();
- private static final boolean DEBUG = true;
+ private static final boolean DEBUG = false;
public interface ModeChangedListener {
void onNavigationModeChanged(int mode);
@@ -76,11 +79,19 @@ public class NavigationModeController implements Dumpable {
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
- if (intent.getAction().equals(ACTION_OVERLAY_CHANGED)) {
- if (DEBUG) {
- Log.d(TAG, "ACTION_OVERLAY_CHANGED");
- }
- updateCurrentInteractionMode(true /* notify */);
+ switch (intent.getAction()) {
+ case ACTION_OVERLAY_CHANGED:
+ if (DEBUG) {
+ Log.d(TAG, "ACTION_OVERLAY_CHANGED");
+ }
+ updateCurrentInteractionMode(true /* notify */);
+ break;
+ case ACTION_PREFERRED_ACTIVITY_CHANGED:
+ if (DEBUG) {
+ Log.d(TAG, "ACTION_PREFERRED_ACTIVITY_CHANGED");
+ }
+ switchFromGestureNavModeIfNotSupportedByDefaultLauncher();
+ break;
}
}
};
@@ -116,6 +127,7 @@ public class NavigationModeController implements Dumpable {
// Update the nav mode for the current user
updateCurrentInteractionMode(true /* notify */);
+ switchFromGestureNavModeIfNotSupportedByDefaultLauncher();
// When switching users, defer enabling the gestural nav overlay until the user
// is all set up
@@ -140,7 +152,12 @@ public class NavigationModeController implements Dumpable {
overlayFilter.addDataSchemeSpecificPart("android", PatternMatcher.PATTERN_LITERAL);
mContext.registerReceiverAsUser(mReceiver, UserHandle.ALL, overlayFilter, null, null);
+ IntentFilter preferredActivityFilter = new IntentFilter(ACTION_PREFERRED_ACTIVITY_CHANGED);
+ mContext.registerReceiverAsUser(mReceiver, UserHandle.ALL, preferredActivityFilter, null,
+ null);
+
updateCurrentInteractionMode(false /* notify */);
+ switchFromGestureNavModeIfNotSupportedByDefaultLauncher();
// Check if we need to defer enabling gestural nav
deferGesturalNavOverlayIfNecessary();
@@ -175,6 +192,10 @@ public class NavigationModeController implements Dumpable {
private int getCurrentInteractionMode(Context context) {
int mode = context.getResources().getInteger(
com.android.internal.R.integer.config_navBarInteractionMode);
+ if (DEBUG) {
+ Log.d(TAG, "getCurrentInteractionMode: mode=" + mMode
+ + " contextUser=" + context.getUserId());
+ }
return mode;
}
@@ -250,6 +271,10 @@ public class NavigationModeController implements Dumpable {
mUiOffloadThread.submit(() -> {
try {
mOverlayManager.setEnabledExclusiveInCategory(overlayPkg, userId);
+ if (DEBUG) {
+ Log.d(TAG, "setModeOverlay: overlayPackage=" + overlayPkg
+ + " userId=" + userId);
+ }
} catch (RemoteException e) {
Log.e(TAG, "Failed to enable overlay " + overlayPkg + " for user " + userId);
}
@@ -277,4 +302,27 @@ public class NavigationModeController implements Dumpable {
Log.d(TAG, " " + a.getAssetPath());
}
}
+
+ private void switchFromGestureNavModeIfNotSupportedByDefaultLauncher() {
+ if (getCurrentInteractionMode(mCurrentUserContext) == NAV_BAR_MODE_GESTURAL
+ && !isGestureNavSupportedByDefaultLauncher(mCurrentUserContext)) {
+ setModeOverlay(NAV_BAR_MODE_3BUTTON_OVERLAY, USER_CURRENT);
+ }
+ }
+
+ private boolean isGestureNavSupportedByDefaultLauncher(Context context) {
+ final ComponentName cn = context.getPackageManager().getHomeActivities(new ArrayList<>());
+ if (cn == null) {
+ // There is no default home app set for the current user, don't make any changes yet.
+ return true;
+ }
+ if (DEBUG) {
+ Log.d(TAG, "isGestureNavSupportedByDefaultLauncher: launcher=" + cn.getPackageName()
+ + " contextUser=" + context.getUserId());
+ }
+
+ ComponentName recentsComponentName = ComponentName.unflattenFromString(context.getString(
+ com.android.internal.R.string.config_recentsComponentName));
+ return recentsComponentName.getPackageName().equals(cn.getPackageName());
+ }
}