From add4c3986d17efc1a3893a5668385612e489b89f Mon Sep 17 00:00:00 2001 From: Matthew Ng Date: Fri, 1 Mar 2019 16:02:31 -0800 Subject: [PATCH] Do not show assist affordance when no assistant is available This also tells launcher that there is no assistant so it will not consume input events. Bug: 112934365 Test: manual Change-Id: I5690cf2fffe45c955a9f165a0fdeac1db8641601 --- .../SystemUI/res/layout/assistant_handle.xml | 25 ++++++++++++++++ packages/SystemUI/res/layout/home_handle.xml | 2 +- packages/SystemUI/res/values/config.xml | 2 +- packages/SystemUI/res/values/dimens.xml | 4 ++- .../shared/recents/IOverviewProxy.aidl | 6 ++++ .../systemui/assist/AssistManager.java | 7 ++++- .../phone/NavigationBarFragment.java | 26 +++++++++++++++++ .../phone/NavigationBarInflaterView.java | 3 ++ .../statusbar/phone/NavigationBarView.java | 29 +++++++++++++++++++ .../phone/NavigationPrototypeController.java | 10 +++++++ 10 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 packages/SystemUI/res/layout/assistant_handle.xml diff --git a/packages/SystemUI/res/layout/assistant_handle.xml b/packages/SystemUI/res/layout/assistant_handle.xml new file mode 100644 index 0000000000000..a952ca5e596f6 --- /dev/null +++ b/packages/SystemUI/res/layout/assistant_handle.xml @@ -0,0 +1,25 @@ + + + + + diff --git a/packages/SystemUI/res/layout/home_handle.xml b/packages/SystemUI/res/layout/home_handle.xml index 48ea5c47bc7cb..d950f39abe819 100644 --- a/packages/SystemUI/res/layout/home_handle.xml +++ b/packages/SystemUI/res/layout/home_handle.xml @@ -18,7 +18,7 @@ diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index b4dc0eff0761d..fe337c6923c49 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -325,7 +325,7 @@ left[.5W],back[1WC];home;recent[1WC],right[.5W] back[1.7WC];home;contextual[1.7WC] - ";home_handle;" + ";home_handle;assistant_handle[.18WC]" false diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index a40a14a477447..75a66f2c20e47 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -34,9 +34,11 @@ 32dp - 180dp 2dp 8dp + 30dp + 180dp + 36dp @*android:dimen/status_bar_icon_size diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl index 37abab9f1ddb1..ce615b6dd3e41 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl @@ -113,4 +113,10 @@ oneway interface IOverviewProxy { * Sent when there was an action on one of the onboarding tips view. */ void onTip(int actionType, int viewType) = 10; + + /** + * Sent when device assistant changes its default assistant whether it is available or not. + */ + void onAssistantAvailable(boolean available) = 13; + } diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java index 83398cf6a88f4..ff68d2be087ef 100644 --- a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java +++ b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java @@ -314,9 +314,14 @@ public class AssistManager implements ConfigurationChangedReceiver { v.setImageDrawable(null); } + @Nullable + public ComponentName getAssistInfoForUser(int userId) { + return mAssistUtils.getAssistComponentForUser(userId); + } + @Nullable private ComponentName getAssistInfo() { - return mAssistUtils.getAssistComponentForUser(KeyguardUpdateMonitor.getCurrentUser()); + return getAssistInfoForUser(KeyguardUpdateMonitor.getCurrentUser()); } public void showDisclosure() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java index 3fc60cdcdc70b..b68c7c679d1cd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java @@ -51,10 +51,12 @@ import android.database.ContentObserver; import android.graphics.PixelFormat; import android.graphics.Rect; import android.inputmethodservice.InputMethodService; +import android.net.Uri; import android.os.Binder; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; +import android.os.Looper; import android.os.RemoteException; import android.os.UserHandle; import android.provider.Settings; @@ -137,6 +139,7 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback private AccessibilityManager mAccessibilityManager; private MagnificationContentObserver mMagnificationObserver; private ContentResolver mContentResolver; + private boolean mAssistantAvailable; private int mDisabledFlags1; private int mDisabledFlags2; @@ -167,6 +170,11 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback public void onConnectionChanged(boolean isConnected) { mNavigationBarView.updateStates(); updateScreenPinningGestures(); + + // Send the assistant availability upon connection + if (isConnected) { + mNavigationBarView.setAssistantAvailable(mAssistantAvailable); + } } @Override @@ -213,6 +221,19 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback private final Runnable mAutoDim = () -> getBarTransitions().setAutoDim(true); + private final ContentObserver mAssistContentObserver = new ContentObserver( + new Handler(Looper.getMainLooper())) { + @Override + public void onChange(boolean selfChange, Uri uri) { + boolean available = mAssistManager + .getAssistInfoForUser(UserHandle.USER_CURRENT) != null; + if (mAssistantAvailable != available) { + mNavigationBarView.setAssistantAvailable(available); + mAssistantAvailable = available; + } + } + }; + @Inject public NavigationBarFragment(AccessibilityManagerWrapper accessibilityManagerWrapper, DeviceProvisionedController deviceProvisionedController, MetricsLogger metricsLogger, @@ -221,6 +242,7 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback mDeviceProvisionedController = deviceProvisionedController; mMetricsLogger = metricsLogger; mAssistManager = assistManager; + mAssistantAvailable = mAssistManager.getAssistInfoForUser(UserHandle.USER_CURRENT) != null; mOverviewProxyService = overviewProxyService; } @@ -242,6 +264,9 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback mContentResolver.registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED), false, mMagnificationObserver, UserHandle.USER_ALL); + mContentResolver.registerContentObserver( + Settings.Secure.getUriFor(Settings.Secure.ASSISTANT), + false /* notifyForDescendants */, mAssistContentObserver, UserHandle.USER_ALL); if (savedInstanceState != null) { mDisabledFlags1 = savedInstanceState.getInt(EXTRA_DISABLE_STATE, 0); @@ -258,6 +283,7 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback super.onDestroy(); mAccessibilityManagerWrapper.removeCallback(mAccessibilityListener); mContentResolver.unregisterContentObserver(mMagnificationObserver); + mContentResolver.unregisterContentObserver(mAssistContentObserver); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java index faa2ab105816c..2a38f771e9218 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java @@ -63,6 +63,7 @@ public class NavigationBarInflaterView extends FrameLayout public static final String NAVSPACE = "space"; public static final String CLIPBOARD = "clipboard"; public static final String HOME_HANDLE = "home_handle"; + public static final String ASSISTANT_HANDLE = "assistant_handle"; public static final String KEY = "key"; public static final String LEFT = "left"; public static final String RIGHT = "right"; @@ -398,6 +399,8 @@ public class NavigationBarInflaterView extends FrameLayout v = inflater.inflate(R.layout.contextual, parent, false); } else if (HOME_HANDLE.equals(button)) { v = inflater.inflate(R.layout.home_handle, parent, false); + } else if (ASSISTANT_HANDLE.equals(button)) { + v = inflater.inflate(R.layout.assistant_handle, parent, false); } else if (button.startsWith(KEY)) { String uri = extractImage(button); int code = extractKeycode(button); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java index f82b05e78ff92..c38908280ed93 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java @@ -171,6 +171,7 @@ public class NavigationBarView extends FrameLayout implements PluginListener