summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Govinda Wasserman <gwasserman@google.com> 2021-03-31 15:49:18 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-03-31 15:49:18 +0000
commitbae77dcdbb7df7e25e8cfc07cf2a53fad6000e21 (patch)
treef6f7afe0ed3ef64fbf8e7642cf7a74914bde786f
parente221106bf4426a862306101cd7aa5813985fdca9 (diff)
parent5924fd74acc22d39f6cb92be5ec66847a42f4d72 (diff)
Merge "Remove Assistant corner handles" into sc-dev
-rw-r--r--packages/SystemUI/res/layout/navigation_bar.xml16
-rw-r--r--packages/SystemUI/src/com/android/systemui/CornerHandleView.java191
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehavior.java25
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehaviorController.java336
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/AssistHandleCallbacks.java41
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/AssistHandleLikeHomeBehavior.java172
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/AssistHandleOffBehavior.java38
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/AssistHandleReminderExpBehavior.java662
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/AssistHandleViewController.java191
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/AssistLogger.kt5
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/AssistManager.java25
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/AssistModule.java27
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/ui/DefaultUiController.java15
-rw-r--r--packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java21
-rw-r--r--packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/navigationbar/buttons/ButtonDispatcher.java2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleBehaviorControllerTest.java392
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleLikeHomeBehaviorTest.java364
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleOffBehaviorTest.java101
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleViewControllerTest.java104
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerTest.java7
22 files changed, 4 insertions, 2748 deletions
diff --git a/packages/SystemUI/res/layout/navigation_bar.xml b/packages/SystemUI/res/layout/navigation_bar.xml
index 23f36a98ed3e..a2a14c754e98 100644
--- a/packages/SystemUI/res/layout/navigation_bar.xml
+++ b/packages/SystemUI/res/layout/navigation_bar.xml
@@ -19,27 +19,11 @@
<com.android.systemui.navigationbar.NavigationBarView
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:systemui="http://schemas.android.com/apk/res-auto"
android:id="@+id/navigation_bar_view"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:background="@drawable/system_bar_background">
- <com.android.systemui.CornerHandleView
- android:id="@+id/assist_hint_left"
- android:layout_width="36dp"
- android:layout_height="36dp"
- android:layout_gravity="left|bottom"
- android:rotation="270"
- android:visibility="gone"/>
- <com.android.systemui.CornerHandleView
- android:id="@+id/assist_hint_right"
- android:layout_width="36dp"
- android:layout_height="36dp"
- android:layout_gravity="right|bottom"
- android:rotation="180"
- android:visibility="gone"/>
-
<com.android.systemui.navigationbar.NavigationBarInflaterView
android:id="@+id/navigation_inflater"
android:layout_width="match_parent"
diff --git a/packages/SystemUI/src/com/android/systemui/CornerHandleView.java b/packages/SystemUI/src/com/android/systemui/CornerHandleView.java
deleted file mode 100644
index cf7ee3a5753f..000000000000
--- a/packages/SystemUI/src/com/android/systemui/CornerHandleView.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * 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.systemui;
-
-import android.animation.ArgbEvaluator;
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.Path;
-import android.graphics.RectF;
-import android.util.AttributeSet;
-import android.util.DisplayMetrics;
-import android.view.ContextThemeWrapper;
-import android.view.View;
-
-import com.android.settingslib.Utils;
-
-/**
- * CornerHandleView draws an inset arc intended to be displayed within the screen decoration
- * corners.
- */
-public class CornerHandleView extends View {
- private static final float STROKE_DP_LARGE = 2f;
- private static final float STROKE_DP_SMALL = 1.95f;
- // Radius to use if none is available.
- private static final int FALLBACK_RADIUS_DP = 15;
- private static final float MARGIN_DP = 8;
- private static final int MAX_ARC_DEGREES = 90;
- // Arc length along the phone's perimeter used to measure the desired angle.
- private static final float ARC_LENGTH_DP = 31f;
-
- private Paint mPaint;
- private int mLightColor;
- private int mDarkColor;
- private Path mPath;
- private boolean mRequiresInvalidate;
-
- public CornerHandleView(Context context, AttributeSet attrs) {
- super(context, attrs);
-
- mPaint = new Paint();
- mPaint.setAntiAlias(true);
- mPaint.setStyle(Paint.Style.STROKE);
- mPaint.setStrokeCap(Paint.Cap.ROUND);
- mPaint.setStrokeWidth(getStrokePx());
-
- final int dualToneDarkTheme = Utils.getThemeAttr(mContext, R.attr.darkIconTheme);
- final int dualToneLightTheme = Utils.getThemeAttr(mContext, R.attr.lightIconTheme);
- Context lightContext = new ContextThemeWrapper(mContext, dualToneLightTheme);
- Context darkContext = new ContextThemeWrapper(mContext, dualToneDarkTheme);
- mLightColor = Utils.getColorAttrDefaultColor(lightContext, R.attr.singleToneColor);
- mDarkColor = Utils.getColorAttrDefaultColor(darkContext, R.attr.singleToneColor);
-
- updatePath();
- }
-
- @Override
- public void setAlpha(float alpha) {
- super.setAlpha(alpha);
- if (alpha > 0f && mRequiresInvalidate) {
- mRequiresInvalidate = false;
- invalidate();
- }
- }
-
- private void updatePath() {
- mPath = new Path();
-
- float marginPx = getMarginPx();
- float radiusPx = getInnerRadiusPx();
- float halfStrokePx = getStrokePx() / 2f;
- float angle = getAngle();
- float startAngle = 180 + ((90 - angle) / 2);
- RectF circle = new RectF(marginPx + halfStrokePx,
- marginPx + halfStrokePx,
- marginPx + 2 * radiusPx - halfStrokePx,
- marginPx + 2 * radiusPx - halfStrokePx);
-
- if (angle >= 90f) {
- float innerCircumferenceDp = convertPixelToDp(radiusPx * 2 * (float) Math.PI,
- mContext);
- float arcDp = innerCircumferenceDp * getAngle() / 360f;
- // Add additional "arms" to the two ends of the arc. The length computation is
- // hand-tuned.
- float lineLengthPx = convertDpToPixel((ARC_LENGTH_DP - arcDp - MARGIN_DP) / 2,
- mContext);
-
- mPath.moveTo(marginPx + halfStrokePx, marginPx + radiusPx + lineLengthPx);
- mPath.lineTo(marginPx + halfStrokePx, marginPx + radiusPx);
- mPath.arcTo(circle, startAngle, angle);
- mPath.moveTo(marginPx + radiusPx, marginPx + halfStrokePx);
- mPath.lineTo(marginPx + radiusPx + lineLengthPx, marginPx + halfStrokePx);
- } else {
- mPath.arcTo(circle, startAngle, angle);
- }
- }
-
- /**
- * Receives an intensity from 0 (lightest) to 1 (darkest) and sets the handle color
- * appropriately. Intention is to match the home handle color.
- */
- public void updateDarkness(float darkIntensity) {
- // Handle color is same as home handle color.
- int color = (int) ArgbEvaluator.getInstance().evaluate(darkIntensity,
- mLightColor, mDarkColor);
- if (mPaint.getColor() != color) {
- mPaint.setColor(color);
- if (getVisibility() == VISIBLE && getAlpha() > 0) {
- invalidate();
- } else {
- // If we are currently invisible, then invalidate when we are next made visible
- mRequiresInvalidate = true;
- }
- }
- }
-
- @Override
- public void onDraw(Canvas canvas) {
- super.onDraw(canvas);
- canvas.drawPath(mPath, mPaint);
- }
-
- private static float convertDpToPixel(float dp, Context context) {
- return dp * ((float) context.getResources().getDisplayMetrics().densityDpi
- / DisplayMetrics.DENSITY_DEFAULT);
- }
-
- private static float convertPixelToDp(float px, Context context) {
- return px * DisplayMetrics.DENSITY_DEFAULT
- / ((float) context.getResources().getDisplayMetrics().densityDpi);
- }
-
- private float getAngle() {
- // Measure a length of ARC_LENGTH_DP along the *screen's* perimeter, get the angle and cap
- // it at 90.
- float circumferenceDp = convertPixelToDp((
- getOuterRadiusPx()) * 2 * (float) Math.PI, mContext);
- float angleDeg = (ARC_LENGTH_DP / circumferenceDp) * 360;
- if (angleDeg > MAX_ARC_DEGREES) {
- angleDeg = MAX_ARC_DEGREES;
- }
- return angleDeg;
- }
-
- private float getMarginPx() {
- return convertDpToPixel(MARGIN_DP, mContext);
- }
-
- private float getInnerRadiusPx() {
- return getOuterRadiusPx() - getMarginPx();
- }
-
- private float getOuterRadiusPx() {
- // Attempt to get the bottom corner radius, otherwise fall back on the generic or top
- // values. If none are available, use the FALLBACK_RADIUS_DP.
- int radius = getResources().getDimensionPixelSize(
- com.android.systemui.R.dimen.config_rounded_mask_size_bottom);
- if (radius == 0) {
- radius = getResources().getDimensionPixelSize(
- com.android.systemui.R.dimen.config_rounded_mask_size);
- }
- if (radius == 0) {
- radius = getResources().getDimensionPixelSize(
- com.android.systemui.R.dimen.config_rounded_mask_size_top);
- }
- if (radius == 0) {
- radius = (int) convertDpToPixel(FALLBACK_RADIUS_DP, mContext);
- }
- return radius;
- }
-
- private float getStrokePx() {
- // Use a slightly smaller stroke if we need to cover the full corner angle.
- return convertDpToPixel((getAngle() < 90) ? STROKE_DP_LARGE : STROKE_DP_SMALL,
- getContext());
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehavior.java b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehavior.java
deleted file mode 100644
index 2eda3d784382..000000000000
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehavior.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * 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.systemui.assist;
-
-public enum AssistHandleBehavior {
-
- TEST,
- OFF,
- LIKE_HOME,
- REMINDER_EXP;
-}
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehaviorController.java b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehaviorController.java
deleted file mode 100644
index 4390d513a9fb..000000000000
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehaviorController.java
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
- * 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.systemui.assist;
-
-import static com.android.systemui.assist.AssistModule.ASSIST_HANDLE_THREAD_NAME;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.os.Handler;
-import android.os.SystemClock;
-import android.provider.Settings;
-import android.util.Log;
-import android.view.accessibility.AccessibilityManager;
-
-import androidx.annotation.Nullable;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.app.AssistUtils;
-import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
-import com.android.keyguard.KeyguardUpdateMonitor;
-import com.android.systemui.Dumpable;
-import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.dump.DumpManager;
-import com.android.systemui.navigationbar.NavigationModeController;
-import com.android.systemui.shared.system.QuickStepContract;
-
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Provider;
-
-import dagger.Lazy;
-
-/**
- * A class for managing Assistant handle logic.
- *
- * Controls when visual handles for Assistant gesture affordance should be shown or hidden using an
- * {@link AssistHandleBehavior}.
- */
-@SysUISingleton
-public final class AssistHandleBehaviorController implements AssistHandleCallbacks, Dumpable {
-
- private static final String TAG = "AssistHandleBehavior";
-
- private static final long DEFAULT_SHOWN_FREQUENCY_THRESHOLD_MS = 0;
- private static final long DEFAULT_SHOW_AND_GO_DURATION_MS = TimeUnit.SECONDS.toMillis(3);
- private static final String SETTINGS_SECURE_USER_SETUP_COMPLETE = "user_setup_complete";
-
- /**
- * This is the default behavior that will be used once the system is up. It will be set once the
- * behavior dependencies are available. This ensures proper behavior lifecycle.
- */
- private static final AssistHandleBehavior DEFAULT_BEHAVIOR = AssistHandleBehavior.REMINDER_EXP;
-
- private final Context mContext;
- private final AssistUtils mAssistUtils;
- private final Handler mHandler;
- private final Runnable mHideHandles = this::hideHandles;
- private final Runnable mShowAndGo = this::showAndGoInternal;
- private final Provider<AssistHandleViewController> mAssistHandleViewController;
- private final DeviceConfigHelper mDeviceConfigHelper;
- private final Map<AssistHandleBehavior, BehaviorController> mBehaviorMap;
- private final Lazy<AccessibilityManager> mA11yManager;
-
- private boolean mHandlesShowing = false;
- private long mHandlesLastHiddenAt;
- private long mShowAndGoEndsAt;
- /**
- * This should always be initialized as {@link AssistHandleBehavior#OFF} to ensure proper
- * behavior lifecycle.
- */
- private AssistHandleBehavior mCurrentBehavior = AssistHandleBehavior.OFF;
- private boolean mInGesturalMode;
-
- @Inject
- AssistHandleBehaviorController(
- Context context,
- AssistUtils assistUtils,
- @Named(ASSIST_HANDLE_THREAD_NAME) Handler handler,
- Provider<AssistHandleViewController> assistHandleViewController,
- DeviceConfigHelper deviceConfigHelper,
- Map<AssistHandleBehavior, BehaviorController> behaviorMap,
- NavigationModeController navigationModeController,
- Lazy<AccessibilityManager> a11yManager,
- DumpManager dumpManager) {
- mContext = context;
- mAssistUtils = assistUtils;
- mHandler = handler;
- mAssistHandleViewController = assistHandleViewController;
- mDeviceConfigHelper = deviceConfigHelper;
- mBehaviorMap = behaviorMap;
- mA11yManager = a11yManager;
-
- mInGesturalMode = QuickStepContract.isGesturalMode(
- navigationModeController.addListener(this::handleNavigationModeChange));
-
- setBehavior(getBehaviorMode());
- mDeviceConfigHelper.addOnPropertiesChangedListener(
- mHandler::post,
- (properties) -> {
- if (properties.getKeyset().contains(
- SystemUiDeviceConfigFlags.ASSIST_HANDLES_BEHAVIOR_MODE)) {
- setBehavior(properties.getString(
- SystemUiDeviceConfigFlags.ASSIST_HANDLES_BEHAVIOR_MODE, null));
- }
- });
-
- dumpManager.registerDumpable(TAG, this);
- }
-
- @Override // AssistHandleCallbacks
- public void hide() {
- clearPendingCommands();
- mHandler.post(mHideHandles);
- }
-
- @Override // AssistHandleCallbacks
- public void showAndGo() {
- clearPendingCommands();
- mHandler.post(mShowAndGo);
- }
-
- private void showAndGoInternal() {
- maybeShowHandles(/* ignoreThreshold = */ false);
- long showAndGoDuration = getShowAndGoDuration();
- mShowAndGoEndsAt = SystemClock.elapsedRealtime() + showAndGoDuration;
- mHandler.postDelayed(mHideHandles, showAndGoDuration);
- }
-
- @Override // AssistHandleCallbacks
- public void showAndGoDelayed(long delayMs, boolean hideIfShowing) {
- clearPendingCommands();
- if (hideIfShowing) {
- mHandler.post(mHideHandles);
- }
- mHandler.postDelayed(mShowAndGo, delayMs);
- }
-
- @Override // AssistHandleCallbacks
- public void showAndStay() {
- clearPendingCommands();
- mHandler.post(() -> maybeShowHandles(/* ignoreThreshold = */ true));
- }
-
- public long getShowAndGoRemainingTimeMs() {
- return Long.max(mShowAndGoEndsAt - SystemClock.elapsedRealtime(), 0);
- }
-
- public boolean areHandlesShowing() {
- return mHandlesShowing;
- }
-
- void onAssistantGesturePerformed() {
- mBehaviorMap.get(mCurrentBehavior).onAssistantGesturePerformed();
- }
-
- void onAssistHandlesRequested() {
- if (mInGesturalMode) {
- mBehaviorMap.get(mCurrentBehavior).onAssistHandlesRequested();
- }
- }
-
- void setBehavior(AssistHandleBehavior behavior) {
- if (mCurrentBehavior == behavior) {
- return;
- }
-
- if (!mBehaviorMap.containsKey(behavior)) {
- Log.e(TAG, "Unsupported behavior requested: " + behavior.toString());
- return;
- }
-
- if (mInGesturalMode) {
- mBehaviorMap.get(mCurrentBehavior).onModeDeactivated();
- mBehaviorMap.get(behavior).onModeActivated(mContext, /* callbacks = */ this);
- }
-
- mCurrentBehavior = behavior;
- }
-
- private void setBehavior(@Nullable String behavior) {
- try {
- setBehavior(AssistHandleBehavior.valueOf(behavior));
- } catch (IllegalArgumentException | NullPointerException e) {
- Log.e(TAG, "Invalid behavior: " + behavior);
- }
- }
-
- private boolean handlesUnblocked(boolean ignoreThreshold) {
- if (!isUserSetupComplete()) {
- return false;
- }
-
- long timeSinceHidden = SystemClock.elapsedRealtime() - mHandlesLastHiddenAt;
- boolean notThrottled = ignoreThreshold || timeSinceHidden >= getShownFrequencyThreshold();
- ComponentName assistantComponent =
- mAssistUtils.getAssistComponentForUser(KeyguardUpdateMonitor.getCurrentUser());
- return notThrottled && assistantComponent != null;
- }
-
- private long getShownFrequencyThreshold() {
- return mDeviceConfigHelper.getLong(
- SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOWN_FREQUENCY_THRESHOLD_MS,
- DEFAULT_SHOWN_FREQUENCY_THRESHOLD_MS);
- }
-
- private long getShowAndGoDuration() {
- long configuredTime = mDeviceConfigHelper.getLong(
- SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DURATION_MS,
- DEFAULT_SHOW_AND_GO_DURATION_MS);
- return mA11yManager.get().getRecommendedTimeoutMillis(
- (int) configuredTime, AccessibilityManager.FLAG_CONTENT_ICONS);
- }
-
- private String getBehaviorMode() {
- return mDeviceConfigHelper.getString(
- SystemUiDeviceConfigFlags.ASSIST_HANDLES_BEHAVIOR_MODE,
- DEFAULT_BEHAVIOR.toString());
- }
-
- private void maybeShowHandles(boolean ignoreThreshold) {
- if (mHandlesShowing) {
- return;
- }
-
- if (handlesUnblocked(ignoreThreshold)) {
- mHandlesShowing = true;
- AssistHandleViewController assistHandleViewController =
- mAssistHandleViewController.get();
- if (assistHandleViewController == null) {
- Log.w(TAG, "Couldn't show handles, AssistHandleViewController unavailable");
- } else {
- assistHandleViewController.setAssistHintVisible(true);
- }
- }
- }
-
- private void hideHandles() {
- if (!mHandlesShowing) {
- return;
- }
-
- mHandlesShowing = false;
- mHandlesLastHiddenAt = SystemClock.elapsedRealtime();
- AssistHandleViewController assistHandleViewController =
- mAssistHandleViewController.get();
- if (assistHandleViewController == null) {
- Log.w(TAG, "Couldn't show handles, AssistHandleViewController unavailable");
- } else {
- assistHandleViewController.setAssistHintVisible(false);
- }
- }
-
- private void handleNavigationModeChange(int navigationMode) {
- boolean inGesturalMode = QuickStepContract.isGesturalMode(navigationMode);
- if (mInGesturalMode == inGesturalMode) {
- return;
- }
-
- mInGesturalMode = inGesturalMode;
- if (mInGesturalMode) {
- mBehaviorMap.get(mCurrentBehavior).onModeActivated(mContext, /* callbacks = */ this);
- } else {
- mBehaviorMap.get(mCurrentBehavior).onModeDeactivated();
- hide();
- }
- }
-
- private void clearPendingCommands() {
- mHandler.removeCallbacks(mHideHandles);
- mHandler.removeCallbacks(mShowAndGo);
- mShowAndGoEndsAt = 0;
- }
-
- private boolean isUserSetupComplete() {
- return Settings.Secure.getInt(
- mContext.getContentResolver(), SETTINGS_SECURE_USER_SETUP_COMPLETE, 0) == 1;
- }
-
- @VisibleForTesting
- void setInGesturalModeForTest(boolean inGesturalMode) {
- mInGesturalMode = inGesturalMode;
- }
-
- @Override // Dumpable
- public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- pw.println("Current AssistHandleBehaviorController State:");
-
- pw.println(" mHandlesShowing=" + mHandlesShowing);
- pw.println(" mHandlesLastHiddenAt=" + mHandlesLastHiddenAt);
- pw.println(" mInGesturalMode=" + mInGesturalMode);
-
- pw.println(" Phenotype Flags:");
- pw.println(" "
- + SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DURATION_MS + "(a11y modded)"
- + "="
- + getShowAndGoDuration());
- pw.println(" "
- + SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOWN_FREQUENCY_THRESHOLD_MS
- + "="
- + getShownFrequencyThreshold());
- pw.println(" "
- + SystemUiDeviceConfigFlags.ASSIST_HANDLES_BEHAVIOR_MODE
- + "="
- + getBehaviorMode());
-
- pw.println(" mCurrentBehavior=" + mCurrentBehavior.toString());
- mBehaviorMap.get(mCurrentBehavior).dump(pw, " ");
- }
-
- interface BehaviorController {
- void onModeActivated(Context context, AssistHandleCallbacks callbacks);
- default void onModeDeactivated() {}
- default void onAssistantGesturePerformed() {}
- default void onAssistHandlesRequested() {}
- default void dump(PrintWriter pw, String prefix) {}
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleCallbacks.java b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleCallbacks.java
deleted file mode 100644
index 3db861d57268..000000000000
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleCallbacks.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.systemui.assist;
-
-/** Callback for controlling Assistant handle behavior. */
-public interface AssistHandleCallbacks {
-
- /** Hide the Assistant handles. */
- void hide();
-
- /**
- * Show the Assistant handles for the configured duration and then hide them.
- *
- * Won't show if the handles have been shown within the configured timeout.
- */
- void showAndGo();
-
- /**
- * Same as show and go, but will not do anything until a delay has elapsed.
- *
- * Will be cancelled if another command is given during the delay.
- */
- void showAndGoDelayed(long delayMs, boolean hideIfShowing);
-
- /** Show the Assistant handles. */
- void showAndStay();
-}
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleLikeHomeBehavior.java b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleLikeHomeBehavior.java
deleted file mode 100644
index 5d8ec4bb330b..000000000000
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleLikeHomeBehavior.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * 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.systemui.assist;
-
-import android.content.Context;
-
-import androidx.annotation.Nullable;
-
-import com.android.systemui.assist.AssistHandleBehaviorController.BehaviorController;
-import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.keyguard.WakefulnessLifecycle;
-import com.android.systemui.model.SysUiState;
-import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.shared.system.QuickStepContract;
-
-import java.io.PrintWriter;
-
-import javax.inject.Inject;
-
-import dagger.Lazy;
-
-/**
- * Assistant Handle behavior that makes Assistant handles show/hide when the home handle is
- * shown/hidden, respectively.
- */
-@SysUISingleton
-final class AssistHandleLikeHomeBehavior implements BehaviorController {
-
- private final StatusBarStateController.StateListener mStatusBarStateListener =
- new StatusBarStateController.StateListener() {
- @Override
- public void onDozingChanged(boolean isDozing) {
- handleDozingChanged(isDozing);
- }
- };
- private final WakefulnessLifecycle.Observer mWakefulnessLifecycleObserver =
- new WakefulnessLifecycle.Observer() {
- @Override
- public void onStartedWakingUp() {
- handleWakefullnessChanged(/* isAwake = */ false);
- }
-
- @Override
- public void onFinishedWakingUp() {
- handleWakefullnessChanged(/* isAwake = */ true);
- }
-
- @Override
- public void onStartedGoingToSleep() {
- handleWakefullnessChanged(/* isAwake = */ false);
- }
-
- @Override
- public void onFinishedGoingToSleep() {
- handleWakefullnessChanged(/* isAwake = */ false);
- }
- };
-
- private final SysUiState.SysUiStateCallback mSysUiStateCallback =
- this::handleSystemUiStateChange;
-
- private final Lazy<StatusBarStateController> mStatusBarStateController;
- private final Lazy<WakefulnessLifecycle> mWakefulnessLifecycle;
- private final Lazy<SysUiState> mSysUiFlagContainer;
-
- private boolean mIsDozing;
- private boolean mIsAwake;
- private boolean mIsHomeHandleHiding;
-
- @Nullable private AssistHandleCallbacks mAssistHandleCallbacks;
-
- @Inject
- AssistHandleLikeHomeBehavior(
- Lazy<StatusBarStateController> statusBarStateController,
- Lazy<WakefulnessLifecycle> wakefulnessLifecycle,
- Lazy<SysUiState> sysUiFlagContainer) {
- mStatusBarStateController = statusBarStateController;
- mWakefulnessLifecycle = wakefulnessLifecycle;
- mSysUiFlagContainer = sysUiFlagContainer;
- }
-
- @Override
- public void onModeActivated(Context context, AssistHandleCallbacks callbacks) {
- mAssistHandleCallbacks = callbacks;
- mIsDozing = mStatusBarStateController.get().isDozing();
- mStatusBarStateController.get().addCallback(mStatusBarStateListener);
- mIsAwake = mWakefulnessLifecycle.get().getWakefulness()
- == WakefulnessLifecycle.WAKEFULNESS_AWAKE;
- mWakefulnessLifecycle.get().addObserver(mWakefulnessLifecycleObserver);
- mSysUiFlagContainer.get().addCallback(mSysUiStateCallback);
- callbackForCurrentState();
- }
-
- @Override
- public void onModeDeactivated() {
- mAssistHandleCallbacks = null;
- mStatusBarStateController.get().removeCallback(mStatusBarStateListener);
- mWakefulnessLifecycle.get().removeObserver(mWakefulnessLifecycleObserver);
- mSysUiFlagContainer.get().removeCallback(mSysUiStateCallback);
- }
-
- private static boolean isHomeHandleHiding(int sysuiStateFlags) {
- return (sysuiStateFlags & QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN) != 0;
- }
-
- private void handleDozingChanged(boolean isDozing) {
- if (mIsDozing == isDozing) {
- return;
- }
-
- mIsDozing = isDozing;
- callbackForCurrentState();
- }
-
- private void handleWakefullnessChanged(boolean isAwake) {
- if (mIsAwake == isAwake) {
- return;
- }
-
- mIsAwake = isAwake;
- callbackForCurrentState();
- }
-
- private void handleSystemUiStateChange(int sysuiStateFlags) {
- boolean isHomeHandleHiding = isHomeHandleHiding(sysuiStateFlags);
- if (mIsHomeHandleHiding == isHomeHandleHiding) {
- return;
- }
-
- mIsHomeHandleHiding = isHomeHandleHiding;
- callbackForCurrentState();
- }
-
- private void callbackForCurrentState() {
- if (mAssistHandleCallbacks == null) {
- return;
- }
-
- if (mIsHomeHandleHiding || !isFullyAwake()) {
- mAssistHandleCallbacks.hide();
- } else {
- mAssistHandleCallbacks.showAndStay();
- }
- }
-
- private boolean isFullyAwake() {
- return mIsAwake && !mIsDozing;
- }
-
- @Override
- public void dump(PrintWriter pw, String prefix) {
- pw.println(prefix + "Current AssistHandleLikeHomeBehavior State:");
-
- pw.println(prefix + " mIsDozing=" + mIsDozing);
- pw.println(prefix + " mIsAwake=" + mIsAwake);
- pw.println(prefix + " mIsHomeHandleHiding=" + mIsHomeHandleHiding);
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleOffBehavior.java b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleOffBehavior.java
deleted file mode 100644
index 86d3254dc7f9..000000000000
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleOffBehavior.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.systemui.assist;
-
-import android.content.Context;
-
-import com.android.systemui.assist.AssistHandleBehaviorController.BehaviorController;
-import com.android.systemui.dagger.SysUISingleton;
-
-import javax.inject.Inject;
-
-/** Assistant handle behavior that hides the Assistant handles. */
-@SysUISingleton
-final class AssistHandleOffBehavior implements BehaviorController {
-
- @Inject
- AssistHandleOffBehavior() {
- }
-
- @Override
- public void onModeActivated(Context context, AssistHandleCallbacks callbacks) {
- callbacks.hide();
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleReminderExpBehavior.java b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleReminderExpBehavior.java
deleted file mode 100644
index c1c2de166627..000000000000
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleReminderExpBehavior.java
+++ /dev/null
@@ -1,662 +0,0 @@
-/*
- * 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.systemui.assist;
-
-import static com.android.systemui.assist.AssistModule.ASSIST_HANDLE_THREAD_NAME;
-import static com.android.systemui.assist.AssistModule.UPTIME_NAME;
-
-import android.app.ActivityManager;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.ResolveInfo;
-import android.database.ContentObserver;
-import android.net.Uri;
-import android.os.Handler;
-import android.provider.Settings;
-
-import androidx.annotation.Nullable;
-import androidx.slice.Clock;
-
-import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
-import com.android.systemui.BootCompleteCache;
-import com.android.systemui.assist.AssistHandleBehaviorController.BehaviorController;
-import com.android.systemui.broadcast.BroadcastDispatcher;
-import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.keyguard.WakefulnessLifecycle;
-import com.android.systemui.model.SysUiState;
-import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.recents.OverviewProxyService;
-import com.android.systemui.shared.system.ActivityManagerWrapper;
-import com.android.systemui.shared.system.PackageManagerWrapper;
-import com.android.systemui.shared.system.QuickStepContract;
-import com.android.systemui.shared.system.TaskStackChangeListener;
-import com.android.systemui.shared.system.TaskStackChangeListeners;
-import com.android.systemui.statusbar.StatusBarState;
-
-import java.io.PrintWriter;
-import java.time.LocalDate;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import dagger.Lazy;
-
-/**
- * Assistant handle behavior that hides the handles when the phone is dozing or in immersive mode,
- * shows the handles when on lockscreen, and shows the handles temporarily when changing tasks or
- * entering overview.
- */
-@SysUISingleton
-final class AssistHandleReminderExpBehavior implements BehaviorController {
-
- private static final Uri LEARNING_TIME_ELAPSED_URI =
- Settings.Secure.getUriFor(Settings.Secure.ASSIST_HANDLES_LEARNING_TIME_ELAPSED_MILLIS);
- private static final Uri LEARNING_EVENT_COUNT_URI =
- Settings.Secure.getUriFor(Settings.Secure.ASSIST_HANDLES_LEARNING_EVENT_COUNT);
- private static final String LEARNED_HINT_LAST_SHOWN_KEY =
- "reminder_exp_learned_hint_last_shown";
- private static final long DEFAULT_LEARNING_TIME_MS = TimeUnit.DAYS.toMillis(10);
- private static final int DEFAULT_LEARNING_COUNT = 10;
- private static final long DEFAULT_SHOW_AND_GO_DELAYED_SHORT_DELAY_MS = 150;
- private static final long DEFAULT_SHOW_AND_GO_DELAYED_LONG_DELAY_MS =
- TimeUnit.SECONDS.toMillis(1);
- private static final long DEFAULT_SHOW_AND_GO_DELAY_RESET_TIMEOUT_MS =
- TimeUnit.SECONDS.toMillis(3);
- private static final boolean DEFAULT_SUPPRESS_ON_LOCKSCREEN = false;
- private static final boolean DEFAULT_SUPPRESS_ON_LAUNCHER = false;
- private static final boolean DEFAULT_SUPPRESS_ON_APPS = true;
- private static final boolean DEFAULT_SHOW_WHEN_TAUGHT = false;
-
- private static final String[] DEFAULT_HOME_CHANGE_ACTIONS = new String[] {
- PackageManagerWrapper.ACTION_PREFERRED_ACTIVITY_CHANGED,
- Intent.ACTION_PACKAGE_ADDED,
- Intent.ACTION_PACKAGE_CHANGED,
- Intent.ACTION_PACKAGE_REMOVED
- };
-
- private final StatusBarStateController.StateListener mStatusBarStateListener =
- new StatusBarStateController.StateListener() {
- @Override
- public void onStateChanged(int newState) {
- handleStatusBarStateChanged(newState);
- }
-
- @Override
- public void onDozingChanged(boolean isDozing) {
- handleDozingChanged(isDozing);
- }
- };
- private final TaskStackChangeListener mTaskStackChangeListener =
- new TaskStackChangeListener() {
- @Override
- public void onTaskMovedToFront(ActivityManager.RunningTaskInfo taskInfo) {
- handleTaskStackTopChanged(taskInfo.taskId, taskInfo.topActivity);
- }
-
- @Override
- public void onTaskCreated(int taskId, ComponentName componentName) {
- handleTaskStackTopChanged(taskId, componentName);
- }
- };
- private final OverviewProxyService.OverviewProxyListener mOverviewProxyListener =
- new OverviewProxyService.OverviewProxyListener() {
- @Override
- public void onOverviewShown(boolean fromHome) {
- handleOverviewShown();
- }
- };
- private final SysUiState.SysUiStateCallback mSysUiStateCallback =
- this::handleSystemUiStateChanged;
- private final WakefulnessLifecycle.Observer mWakefulnessLifecycleObserver =
- new WakefulnessLifecycle.Observer() {
- @Override
- public void onStartedWakingUp() {
- handleWakefullnessChanged(/* isAwake = */ false);
- }
-
- @Override
- public void onFinishedWakingUp() {
- handleWakefullnessChanged(/* isAwake = */ true);
- }
-
- @Override
- public void onStartedGoingToSleep() {
- handleWakefullnessChanged(/* isAwake = */ false);
- }
-
- @Override
- public void onFinishedGoingToSleep() {
- handleWakefullnessChanged(/* isAwake = */ false);
- }
- };
- private final BroadcastReceiver mDefaultHomeBroadcastReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- mDefaultHome = getCurrentDefaultHome();
- }
- };
-
- private final BootCompleteCache.BootCompleteListener mBootCompleteListener =
- new BootCompleteCache.BootCompleteListener() {
- @Override
- public void onBootComplete() {
- mDefaultHome = getCurrentDefaultHome();
- }
- };
-
- private final IntentFilter mDefaultHomeIntentFilter;
- private final Runnable mResetConsecutiveTaskSwitches = this::resetConsecutiveTaskSwitches;
-
- private final Clock mClock;
- private final Handler mHandler;
- private final DeviceConfigHelper mDeviceConfigHelper;
- private final Lazy<StatusBarStateController> mStatusBarStateController;
- private final Lazy<ActivityManagerWrapper> mActivityManagerWrapper;
- private final Lazy<TaskStackChangeListeners> mTaskStackChangeListeners;
- private final Lazy<OverviewProxyService> mOverviewProxyService;
- private final Lazy<SysUiState> mSysUiFlagContainer;
- private final Lazy<WakefulnessLifecycle> mWakefulnessLifecycle;
- private final Lazy<PackageManagerWrapper> mPackageManagerWrapper;
- private final Lazy<BroadcastDispatcher> mBroadcastDispatcher;
- private final Lazy<BootCompleteCache> mBootCompleteCache;
-
- private boolean mOnLockscreen;
- private boolean mIsDozing;
- private boolean mIsAwake;
- private int mRunningTaskId;
- private boolean mIsNavBarHidden;
- private boolean mIsLauncherShowing;
- private int mConsecutiveTaskSwitches;
- @Nullable private ContentObserver mSettingObserver;
-
- /** Whether user has learned the gesture. */
- private boolean mIsLearned;
- private long mLastLearningTimestamp;
- /** Uptime while in this behavior. */
- private long mLearningTimeElapsed;
- /** Number of successful Assistant invocations while in this behavior. */
- private int mLearningCount;
- private long mLearnedHintLastShownEpochDay;
-
- @Nullable private Context mContext;
- @Nullable private AssistHandleCallbacks mAssistHandleCallbacks;
- @Nullable private ComponentName mDefaultHome;
-
- @Inject
- AssistHandleReminderExpBehavior(
- @Named(UPTIME_NAME) Clock clock,
- @Named(ASSIST_HANDLE_THREAD_NAME) Handler handler,
- DeviceConfigHelper deviceConfigHelper,
- Lazy<StatusBarStateController> statusBarStateController,
- Lazy<ActivityManagerWrapper> activityManagerWrapper,
- Lazy<TaskStackChangeListeners> taskStackChangeListeners,
- Lazy<OverviewProxyService> overviewProxyService,
- Lazy<SysUiState> sysUiFlagContainer,
- Lazy<WakefulnessLifecycle> wakefulnessLifecycle,
- Lazy<PackageManagerWrapper> packageManagerWrapper,
- Lazy<BroadcastDispatcher> broadcastDispatcher,
- Lazy<BootCompleteCache> bootCompleteCache) {
- mClock = clock;
- mHandler = handler;
- mDeviceConfigHelper = deviceConfigHelper;
- mStatusBarStateController = statusBarStateController;
- mActivityManagerWrapper = activityManagerWrapper;
- mTaskStackChangeListeners = taskStackChangeListeners;
- mOverviewProxyService = overviewProxyService;
- mSysUiFlagContainer = sysUiFlagContainer;
- mWakefulnessLifecycle = wakefulnessLifecycle;
- mPackageManagerWrapper = packageManagerWrapper;
- mDefaultHomeIntentFilter = new IntentFilter();
- for (String action : DEFAULT_HOME_CHANGE_ACTIONS) {
- mDefaultHomeIntentFilter.addAction(action);
- }
- mBroadcastDispatcher = broadcastDispatcher;
- mBootCompleteCache = bootCompleteCache;
- }
-
- @Override
- public void onModeActivated(Context context, AssistHandleCallbacks callbacks) {
- mContext = context;
- mAssistHandleCallbacks = callbacks;
- mConsecutiveTaskSwitches = 0;
- mBootCompleteCache.get().addListener(mBootCompleteListener);
- mDefaultHome = getCurrentDefaultHome();
- mBroadcastDispatcher.get()
- .registerReceiver(mDefaultHomeBroadcastReceiver, mDefaultHomeIntentFilter);
- mOnLockscreen = onLockscreen(mStatusBarStateController.get().getState());
- mIsDozing = mStatusBarStateController.get().isDozing();
- mStatusBarStateController.get().addCallback(mStatusBarStateListener);
- ActivityManager.RunningTaskInfo runningTaskInfo =
- mActivityManagerWrapper.get().getRunningTask();
- mRunningTaskId = runningTaskInfo == null ? 0 : runningTaskInfo.taskId;
- mTaskStackChangeListeners.get().registerTaskStackListener(mTaskStackChangeListener);
- mOverviewProxyService.get().addCallback(mOverviewProxyListener);
- mSysUiFlagContainer.get().addCallback(mSysUiStateCallback);
- mIsAwake = mWakefulnessLifecycle.get().getWakefulness()
- == WakefulnessLifecycle.WAKEFULNESS_AWAKE;
- mWakefulnessLifecycle.get().addObserver(mWakefulnessLifecycleObserver);
-
- mLearningTimeElapsed = Settings.Secure.getLong(
- context.getContentResolver(),
- Settings.Secure.ASSIST_HANDLES_LEARNING_TIME_ELAPSED_MILLIS,
- /* default = */ 0);
- mLearningCount = Settings.Secure.getInt(
- context.getContentResolver(),
- Settings.Secure.ASSIST_HANDLES_LEARNING_EVENT_COUNT,
- /* default = */ 0);
- mSettingObserver = new SettingsObserver(context, mHandler);
- context.getContentResolver().registerContentObserver(
- LEARNING_TIME_ELAPSED_URI,
- /* notifyForDescendants = */ true,
- mSettingObserver);
- context.getContentResolver().registerContentObserver(
- LEARNING_EVENT_COUNT_URI,
- /* notifyForDescendants = */ true,
- mSettingObserver);
- mLearnedHintLastShownEpochDay = Settings.Secure.getLong(
- context.getContentResolver(), LEARNED_HINT_LAST_SHOWN_KEY, /* default = */ 0);
- mLastLearningTimestamp = mClock.currentTimeMillis();
-
- callbackForCurrentState(/* justUnlocked = */ false);
- }
-
- @Override
- public void onModeDeactivated() {
- mAssistHandleCallbacks = null;
- if (mContext != null) {
- mBroadcastDispatcher.get().unregisterReceiver(mDefaultHomeBroadcastReceiver);
- mBootCompleteCache.get().removeListener(mBootCompleteListener);
- mContext.getContentResolver().unregisterContentObserver(mSettingObserver);
- mSettingObserver = null;
- // putString in order to use overrideableByRestore
- Settings.Secure.putString(
- mContext.getContentResolver(),
- Settings.Secure.ASSIST_HANDLES_LEARNING_TIME_ELAPSED_MILLIS,
- Long.toString(0L),
- /* overrideableByRestore = */ true);
- // putString in order to use overrideableByRestore
- Settings.Secure.putString(
- mContext.getContentResolver(),
- Settings.Secure.ASSIST_HANDLES_LEARNING_EVENT_COUNT,
- Integer.toString(0),
- /* overrideableByRestore = */ true);
- Settings.Secure.putLong(mContext.getContentResolver(), LEARNED_HINT_LAST_SHOWN_KEY, 0);
- mContext = null;
- }
- mStatusBarStateController.get().removeCallback(mStatusBarStateListener);
- mTaskStackChangeListeners.get().unregisterTaskStackListener(mTaskStackChangeListener);
- mOverviewProxyService.get().removeCallback(mOverviewProxyListener);
- mSysUiFlagContainer.get().removeCallback(mSysUiStateCallback);
- mWakefulnessLifecycle.get().removeObserver(mWakefulnessLifecycleObserver);
- }
-
- @Override
- public void onAssistantGesturePerformed() {
- if (mContext == null) {
- return;
- }
-
- // putString in order to use overrideableByRestore
- Settings.Secure.putString(
- mContext.getContentResolver(),
- Settings.Secure.ASSIST_HANDLES_LEARNING_EVENT_COUNT,
- Integer.toString(++mLearningCount),
- /* overrideableByRestore = */ true);
- }
-
- @Override
- public void onAssistHandlesRequested() {
- if (mAssistHandleCallbacks != null
- && isFullyAwake()
- && !mIsNavBarHidden
- && !mOnLockscreen) {
- mAssistHandleCallbacks.showAndGo();
- }
- }
-
- @Nullable
- private ComponentName getCurrentDefaultHome() {
- List<ResolveInfo> homeActivities = new ArrayList<>();
- ComponentName defaultHome = mPackageManagerWrapper.get().getHomeActivities(homeActivities);
- if (defaultHome != null) {
- return defaultHome;
- }
-
- int topPriority = Integer.MIN_VALUE;
- ComponentName topComponent = null;
- for (ResolveInfo resolveInfo : homeActivities) {
- if (resolveInfo.priority > topPriority) {
- topComponent = resolveInfo.activityInfo.getComponentName();
- topPriority = resolveInfo.priority;
- } else if (resolveInfo.priority == topPriority) {
- topComponent = null;
- }
- }
- return topComponent;
- }
-
- private void handleStatusBarStateChanged(int newState) {
- boolean onLockscreen = onLockscreen(newState);
- if (mOnLockscreen == onLockscreen) {
- return;
- }
-
- resetConsecutiveTaskSwitches();
- mOnLockscreen = onLockscreen;
- callbackForCurrentState(!onLockscreen);
- }
-
- private void handleDozingChanged(boolean isDozing) {
- if (mIsDozing == isDozing) {
- return;
- }
-
- resetConsecutiveTaskSwitches();
- mIsDozing = isDozing;
- callbackForCurrentState(/* justUnlocked = */ false);
- }
-
- private void handleWakefullnessChanged(boolean isAwake) {
- if (mIsAwake == isAwake) {
- return;
- }
-
- resetConsecutiveTaskSwitches();
- mIsAwake = isAwake;
- callbackForCurrentState(/* justUnlocked = */ false);
- }
-
- private void handleTaskStackTopChanged(int taskId, @Nullable ComponentName taskComponentName) {
- if (mRunningTaskId == taskId || taskComponentName == null) {
- return;
- }
-
- mRunningTaskId = taskId;
- mIsLauncherShowing = taskComponentName.equals(mDefaultHome);
- if (mIsLauncherShowing) {
- resetConsecutiveTaskSwitches();
- } else {
- rescheduleConsecutiveTaskSwitchesReset();
- mConsecutiveTaskSwitches++;
- }
- callbackForCurrentState(/* justUnlocked = */ false);
- }
-
- private void handleSystemUiStateChanged(int sysuiStateFlags) {
- boolean isNavBarHidden =
- (sysuiStateFlags & QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN) != 0;
- if (mIsNavBarHidden == isNavBarHidden) {
- return;
- }
-
- resetConsecutiveTaskSwitches();
- mIsNavBarHidden = isNavBarHidden;
- callbackForCurrentState(/* justUnlocked = */ false);
- }
-
- private void handleOverviewShown() {
- resetConsecutiveTaskSwitches();
- callbackForCurrentState(/* justUnlocked = */ false);
- }
-
- private boolean onLockscreen(int statusBarState) {
- return statusBarState == StatusBarState.KEYGUARD
- || statusBarState == StatusBarState.SHADE_LOCKED;
- }
-
- private void callbackForCurrentState(boolean justUnlocked) {
- updateLearningStatus();
-
- if (mIsLearned) {
- callbackForLearnedState(justUnlocked);
- } else {
- callbackForUnlearnedState();
- }
- }
-
- private void callbackForLearnedState(boolean justUnlocked) {
- if (mAssistHandleCallbacks == null) {
- return;
- }
-
- if (!isFullyAwake() || mIsNavBarHidden || mOnLockscreen || !getShowWhenTaught()) {
- mAssistHandleCallbacks.hide();
- } else if (justUnlocked) {
- long currentEpochDay = LocalDate.now().toEpochDay();
- if (mLearnedHintLastShownEpochDay < currentEpochDay) {
- if (mContext != null) {
- Settings.Secure.putLong(
- mContext.getContentResolver(),
- LEARNED_HINT_LAST_SHOWN_KEY,
- currentEpochDay);
- }
- mLearnedHintLastShownEpochDay = currentEpochDay;
- mAssistHandleCallbacks.showAndGo();
- }
- }
- }
-
- private void callbackForUnlearnedState() {
- if (mAssistHandleCallbacks == null) {
- return;
- }
-
- if (!isFullyAwake() || mIsNavBarHidden || isSuppressed()) {
- mAssistHandleCallbacks.hide();
- } else if (mOnLockscreen) {
- mAssistHandleCallbacks.showAndStay();
- } else if (mIsLauncherShowing) {
- mAssistHandleCallbacks.showAndGo();
- } else if (mConsecutiveTaskSwitches == 1) {
- mAssistHandleCallbacks.showAndGoDelayed(
- getShowAndGoDelayedShortDelayMs(), /* hideIfShowing = */ false);
- } else {
- mAssistHandleCallbacks.showAndGoDelayed(
- getShowAndGoDelayedLongDelayMs(), /* hideIfShowing = */ true);
- }
- }
-
- private boolean isSuppressed() {
- if (mOnLockscreen) {
- return getSuppressOnLockscreen();
- } else if (mIsLauncherShowing) {
- return getSuppressOnLauncher();
- } else {
- return getSuppressOnApps();
- }
- }
-
- private void updateLearningStatus() {
- if (mContext == null) {
- return;
- }
-
- long currentTimestamp = mClock.currentTimeMillis();
- mLearningTimeElapsed += currentTimestamp - mLastLearningTimestamp;
- mLastLearningTimestamp = currentTimestamp;
-
- mIsLearned =
- mLearningCount >= getLearningCount() || mLearningTimeElapsed >= getLearningTimeMs();
-
- // putString in order to use overrideableByRestore
- mHandler.post(() -> Settings.Secure.putString(
- mContext.getContentResolver(),
- Settings.Secure.ASSIST_HANDLES_LEARNING_TIME_ELAPSED_MILLIS,
- Long.toString(mLearningTimeElapsed),
- /* overrideableByRestore = */ true));
- }
-
- private void resetConsecutiveTaskSwitches() {
- mHandler.removeCallbacks(mResetConsecutiveTaskSwitches);
- mConsecutiveTaskSwitches = 0;
- }
-
- private void rescheduleConsecutiveTaskSwitchesReset() {
- mHandler.removeCallbacks(mResetConsecutiveTaskSwitches);
- mHandler.postDelayed(mResetConsecutiveTaskSwitches, getShowAndGoDelayResetTimeoutMs());
- }
-
- private boolean isFullyAwake() {
- return mIsAwake && !mIsDozing;
- }
-
- private long getLearningTimeMs() {
- return mDeviceConfigHelper.getLong(
- SystemUiDeviceConfigFlags.ASSIST_HANDLES_LEARN_TIME_MS,
- DEFAULT_LEARNING_TIME_MS);
- }
-
- private int getLearningCount() {
- return mDeviceConfigHelper.getInt(
- SystemUiDeviceConfigFlags.ASSIST_HANDLES_LEARN_COUNT,
- DEFAULT_LEARNING_COUNT);
- }
-
- private long getShowAndGoDelayedShortDelayMs() {
- return mDeviceConfigHelper.getLong(
- SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DELAYED_SHORT_DELAY_MS,
- DEFAULT_SHOW_AND_GO_DELAYED_SHORT_DELAY_MS);
- }
-
- private long getShowAndGoDelayedLongDelayMs() {
- return mDeviceConfigHelper.getLong(
- SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DELAYED_LONG_DELAY_MS,
- DEFAULT_SHOW_AND_GO_DELAYED_LONG_DELAY_MS);
- }
-
- private long getShowAndGoDelayResetTimeoutMs() {
- return mDeviceConfigHelper.getLong(
- SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DELAY_RESET_TIMEOUT_MS,
- DEFAULT_SHOW_AND_GO_DELAY_RESET_TIMEOUT_MS);
- }
-
- private boolean getSuppressOnLockscreen() {
- return mDeviceConfigHelper.getBoolean(
- SystemUiDeviceConfigFlags.ASSIST_HANDLES_SUPPRESS_ON_LOCKSCREEN,
- DEFAULT_SUPPRESS_ON_LOCKSCREEN);
- }
-
- private boolean getSuppressOnLauncher() {
- return mDeviceConfigHelper.getBoolean(
- SystemUiDeviceConfigFlags.ASSIST_HANDLES_SUPPRESS_ON_LAUNCHER,
- DEFAULT_SUPPRESS_ON_LAUNCHER);
- }
-
- private boolean getSuppressOnApps() {
- return mDeviceConfigHelper.getBoolean(
- SystemUiDeviceConfigFlags.ASSIST_HANDLES_SUPPRESS_ON_APPS,
- DEFAULT_SUPPRESS_ON_APPS);
- }
-
- private boolean getShowWhenTaught() {
- return mDeviceConfigHelper.getBoolean(
- SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_WHEN_TAUGHT,
- DEFAULT_SHOW_WHEN_TAUGHT);
- }
-
- @Override
- public void dump(PrintWriter pw, String prefix) {
- pw.println(prefix + "Current AssistHandleReminderExpBehavior State:");
- pw.println(prefix + " mOnLockscreen=" + mOnLockscreen);
- pw.println(prefix + " mIsDozing=" + mIsDozing);
- pw.println(prefix + " mIsAwake=" + mIsAwake);
- pw.println(prefix + " mRunningTaskId=" + mRunningTaskId);
- pw.println(prefix + " mDefaultHome=" + mDefaultHome);
- pw.println(prefix + " mIsNavBarHidden=" + mIsNavBarHidden);
- pw.println(prefix + " mIsLauncherShowing=" + mIsLauncherShowing);
- pw.println(prefix + " mConsecutiveTaskSwitches=" + mConsecutiveTaskSwitches);
- pw.println(prefix + " mIsLearned=" + mIsLearned);
- pw.println(prefix + " mLastLearningTimestamp=" + mLastLearningTimestamp);
- pw.println(prefix + " mLearningTimeElapsed=" + mLearningTimeElapsed);
- pw.println(prefix + " mLearningCount=" + mLearningCount);
- pw.println(prefix + " mLearnedHintLastShownEpochDay=" + mLearnedHintLastShownEpochDay);
- pw.println(
- prefix + " mAssistHandleCallbacks present: " + (mAssistHandleCallbacks != null));
-
- pw.println(prefix + " Phenotype Flags:");
- pw.println(prefix + " "
- + SystemUiDeviceConfigFlags.ASSIST_HANDLES_LEARN_TIME_MS
- + "="
- + getLearningTimeMs());
- pw.println(prefix + " "
- + SystemUiDeviceConfigFlags.ASSIST_HANDLES_LEARN_COUNT
- + "="
- + getLearningCount());
- pw.println(prefix + " "
- + SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DELAYED_SHORT_DELAY_MS
- + "="
- + getShowAndGoDelayedShortDelayMs());
- pw.println(prefix + " "
- + SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DELAYED_LONG_DELAY_MS
- + "="
- + getShowAndGoDelayedLongDelayMs());
- pw.println(prefix + " "
- + SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DELAY_RESET_TIMEOUT_MS
- + "="
- + getShowAndGoDelayResetTimeoutMs());
- pw.println(prefix + " "
- + SystemUiDeviceConfigFlags.ASSIST_HANDLES_SUPPRESS_ON_LOCKSCREEN
- + "="
- + getSuppressOnLockscreen());
- pw.println(prefix + " "
- + SystemUiDeviceConfigFlags.ASSIST_HANDLES_SUPPRESS_ON_LAUNCHER
- + "="
- + getSuppressOnLauncher());
- pw.println(prefix + " "
- + SystemUiDeviceConfigFlags.ASSIST_HANDLES_SUPPRESS_ON_APPS
- + "="
- + getSuppressOnApps());
- pw.println(prefix + " "
- + SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_WHEN_TAUGHT
- + "="
- + getShowWhenTaught());
- }
-
- private final class SettingsObserver extends ContentObserver {
-
- private final Context mContext;
-
- SettingsObserver(Context context, Handler handler) {
- super(handler);
- mContext = context;
- }
-
- @Override
- public void onChange(boolean selfChange, @Nullable Uri uri) {
- if (LEARNING_TIME_ELAPSED_URI.equals(uri)) {
- mLastLearningTimestamp = mClock.currentTimeMillis();
- mLearningTimeElapsed = Settings.Secure.getLong(
- mContext.getContentResolver(),
- Settings.Secure.ASSIST_HANDLES_LEARNING_TIME_ELAPSED_MILLIS,
- /* default = */ 0);
- } else if (LEARNING_EVENT_COUNT_URI.equals(uri)) {
- mLearningCount = Settings.Secure.getInt(
- mContext.getContentResolver(),
- Settings.Secure.ASSIST_HANDLES_LEARNING_EVENT_COUNT,
- /* default = */ 0);
- }
-
- super.onChange(selfChange, uri);
- }
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleViewController.java b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleViewController.java
deleted file mode 100644
index f19e53f03849..000000000000
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleViewController.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * 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.systemui.assist;
-
-import android.animation.Animator;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
-import android.os.Handler;
-import android.util.Log;
-import android.util.MathUtils;
-import android.view.View;
-import android.view.animation.AccelerateInterpolator;
-import android.view.animation.Interpolator;
-import android.view.animation.PathInterpolator;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.systemui.CornerHandleView;
-import com.android.systemui.R;
-import com.android.systemui.navigationbar.NavigationBarTransitions;
-
-/**
- * A class for managing Assistant handle show, hide and animation.
- */
-public class AssistHandleViewController implements NavigationBarTransitions.DarkIntensityListener {
-
- private static final boolean DEBUG = false;
- private static final String TAG = "AssistHandleViewController";
-
- private Handler mHandler;
- private CornerHandleView mAssistHintLeft;
- private CornerHandleView mAssistHintRight;
- private int mBottomOffset;
-
- @VisibleForTesting
- boolean mAssistHintVisible;
- @VisibleForTesting
- boolean mAssistHintBlocked = false;
-
- public AssistHandleViewController(Handler handler, View navBar) {
- mHandler = handler;
- mAssistHintLeft = navBar.findViewById(R.id.assist_hint_left);
- mAssistHintRight = navBar.findViewById(R.id.assist_hint_right);
- }
-
- @Override
- public void onDarkIntensity(float darkIntensity) {
- mAssistHintLeft.updateDarkness(darkIntensity);
- mAssistHintRight.updateDarkness(darkIntensity);
- }
-
- /**
- * Set the bottom offset.
- *
- * @param bottomOffset the bottom offset to translate.
- */
- public void setBottomOffset(int bottomOffset) {
- if (mBottomOffset != bottomOffset) {
- mBottomOffset = bottomOffset;
- if (mAssistHintVisible) {
- // If assist handles are visible, hide them without animation and then make them
- // show once again (with corrected bottom offset).
- hideAssistHandles();
- setAssistHintVisible(true);
- }
- }
- }
-
- /**
- * Controls the visibility of the assist gesture handles.
- *
- * @param visible whether the handles should be shown
- */
- public void setAssistHintVisible(boolean visible) {
- if (!mHandler.getLooper().isCurrentThread()) {
- mHandler.post(() -> setAssistHintVisible(visible));
- return;
- }
-
- if (mAssistHintBlocked && visible) {
- if (DEBUG) {
- Log.v(TAG, "Assist hint blocked, cannot make it visible");
- }
- return;
- }
-
- if (mAssistHintVisible != visible) {
- mAssistHintVisible = visible;
- fade(mAssistHintLeft, mAssistHintVisible, /* isLeft = */ true);
- fade(mAssistHintRight, mAssistHintVisible, /* isLeft = */ false);
- }
- }
-
- /**
- * Prevents the assist hint from becoming visible even if `mAssistHintVisible` is true.
- */
- public void setAssistHintBlocked(boolean blocked) {
- if (!mHandler.getLooper().isCurrentThread()) {
- mHandler.post(() -> setAssistHintBlocked(blocked));
- return;
- }
-
- mAssistHintBlocked = blocked;
- if (mAssistHintVisible && mAssistHintBlocked) {
- hideAssistHandles();
- }
- }
-
- private void hideAssistHandles() {
- mAssistHintLeft.setVisibility(View.GONE);
- mAssistHintRight.setVisibility(View.GONE);
- mAssistHintVisible = false;
- }
-
- /**
- * Returns an animator that animates the given view from start to end over durationMs. Start and
- * end represent total animation progress: 0 is the start, 1 is the end, 1.1 would be an
- * overshoot.
- */
- Animator getHandleAnimator(View view, float start, float end, boolean isLeft, long durationMs,
- Interpolator interpolator) {
- // Note that lerp does allow overshoot, in cases where start and end are outside of [0,1].
- float scaleStart = MathUtils.lerp(2f, 1f, start);
- float scaleEnd = MathUtils.lerp(2f, 1f, end);
- Animator scaleX = ObjectAnimator.ofFloat(view, View.SCALE_X, scaleStart, scaleEnd);
- Animator scaleY = ObjectAnimator.ofFloat(view, View.SCALE_Y, scaleStart, scaleEnd);
- float translationStart = MathUtils.lerp(0.2f, 0f, start);
- float translationEnd = MathUtils.lerp(0.2f, 0f, end);
- int xDirection = isLeft ? -1 : 1;
- Animator translateX = ObjectAnimator.ofFloat(view, View.TRANSLATION_X,
- xDirection * translationStart * view.getWidth(),
- xDirection * translationEnd * view.getWidth());
- Animator translateY = ObjectAnimator.ofFloat(view, View.TRANSLATION_Y,
- translationStart * view.getHeight() + mBottomOffset,
- translationEnd * view.getHeight() + mBottomOffset);
-
- AnimatorSet set = new AnimatorSet();
- set.play(scaleX).with(scaleY);
- set.play(scaleX).with(translateX);
- set.play(scaleX).with(translateY);
- set.setDuration(durationMs);
- set.setInterpolator(interpolator);
- return set;
- }
-
- private void fade(View view, boolean fadeIn, boolean isLeft) {
- if (fadeIn) {
- view.animate().cancel();
- view.setAlpha(1f);
- view.setVisibility(View.VISIBLE);
-
- // A piecewise spring-like interpolation.
- // End value in one animator call must match the start value in the next, otherwise
- // there will be a discontinuity.
- AnimatorSet anim = new AnimatorSet();
- Animator first = getHandleAnimator(view, 0, 1.1f, isLeft, 750,
- new PathInterpolator(0, 0.45f, .67f, 1f));
- Interpolator secondInterpolator = new PathInterpolator(0.33f, 0, 0.67f, 1f);
- Animator second = getHandleAnimator(view, 1.1f, 0.97f, isLeft, 400,
- secondInterpolator);
- Animator third = getHandleAnimator(view, 0.97f, 1.02f, isLeft, 400,
- secondInterpolator);
- Animator fourth = getHandleAnimator(view, 1.02f, 1f, isLeft, 400,
- secondInterpolator);
- anim.play(first).before(second);
- anim.play(second).before(third);
- anim.play(third).before(fourth);
- anim.start();
- } else {
- view.animate().cancel();
- view.animate()
- .setInterpolator(new AccelerateInterpolator(1.5f))
- .setDuration(250)
- .alpha(0f);
- }
-
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistLogger.kt b/packages/SystemUI/src/com/android/systemui/assist/AssistLogger.kt
index 4d0fd4313209..e30f2e440d7a 100644
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/assist/AssistLogger.kt
@@ -37,8 +37,7 @@ open class AssistLogger @Inject constructor(
protected val context: Context,
protected val uiEventLogger: UiEventLogger,
private val assistUtils: AssistUtils,
- private val phoneStateMonitor: PhoneStateMonitor,
- private val assistHandleBehaviorController: AssistHandleBehaviorController
+ private val phoneStateMonitor: PhoneStateMonitor
) {
private val instanceIdSequence = InstanceIdSequence(INSTANCE_ID_MAX)
@@ -82,7 +81,7 @@ open class AssistLogger @Inject constructor(
assistComponentFinal.flattenToString(),
getOrCreateInstanceId().id,
deviceStateFinal,
- assistHandleBehaviorController.areHandlesShowing())
+ false)
reportAssistantInvocationExtraData()
}
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
index b2c620d88de9..b1197e6aa6f5 100644
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
+++ b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
@@ -87,7 +87,6 @@ public class AssistManager {
private static final String INVOCATION_TIME_MS_KEY = "invocation_time_ms";
private static final String INVOCATION_PHONE_STATE_KEY = "invocation_phone_state";
protected static final String ACTION_KEY = "action";
- protected static final String SHOW_ASSIST_HANDLES_ACTION = "show_assist_handles";
protected static final String SET_ASSIST_GESTURE_CONSTRAINED_ACTION =
"set_assist_gesture_constrained";
protected static final String CONSTRAINED_KEY = "should_constrain";
@@ -119,7 +118,6 @@ public class AssistManager {
protected final Context mContext;
private final AssistDisclosure mAssistDisclosure;
private final PhoneStateMonitor mPhoneStateMonitor;
- private final AssistHandleBehaviorController mHandleController;
private final UiController mUiController;
protected final Lazy<SysUiState> mSysUiState;
protected final AssistLogger mAssistLogger;
@@ -148,7 +146,6 @@ public class AssistManager {
DeviceProvisionedController controller,
Context context,
AssistUtils assistUtils,
- AssistHandleBehaviorController handleController,
CommandQueue commandQueue,
PhoneStateMonitor phoneStateMonitor,
OverviewProxyService overviewProxyService,
@@ -162,7 +159,6 @@ public class AssistManager {
mAssistUtils = assistUtils;
mAssistDisclosure = new AssistDisclosure(context, new Handler());
mPhoneStateMonitor = phoneStateMonitor;
- mHandleController = handleController;
mAssistLogger = assistLogger;
mOrbController = new AssistOrbController(configurationController, context);
@@ -216,9 +212,7 @@ public class AssistManager {
}
String action = hints.getString(ACTION_KEY);
- if (SHOW_ASSIST_HANDLES_ACTION.equals(action)) {
- requestAssistHandles();
- } else if (SET_ASSIST_GESTURE_CONSTRAINED_ACTION.equals(action)) {
+ if (SET_ASSIST_GESTURE_CONSTRAINED_ACTION.equals(action)) {
mSysUiState.get()
.setFlag(
SYSUI_STATE_ASSIST_GESTURE_CONSTRAINED,
@@ -249,9 +243,6 @@ public class AssistManager {
args = new Bundle();
}
int legacyInvocationType = args.getInt(INVOCATION_TYPE_KEY, 0);
- if (legacyInvocationType == INVOCATION_TYPE_GESTURE) {
- mHandleController.onAssistantGesturePerformed();
- }
int legacyDeviceState = mPhoneStateMonitor.getPhoneState();
args.putInt(INVOCATION_PHONE_STATE_KEY, legacyDeviceState);
args.putLong(INVOCATION_TIME_MS_KEY, SystemClock.elapsedRealtime());
@@ -278,10 +269,6 @@ public class AssistManager {
mUiController.onGestureCompletion(velocity);
}
- protected void requestAssistHandles() {
- mHandleController.onAssistHandlesRequested();
- }
-
public void hideAssist() {
mAssistUtils.hideCurrentSession();
}
@@ -362,10 +349,6 @@ public class AssistManager {
return mAssistUtils.isSessionRunning();
}
- protected AssistHandleBehaviorController getHandleBehaviorController() {
- return mHandleController;
- }
-
@Nullable
public ComponentName getAssistInfoForUser(int userId) {
return mAssistUtils.getAssistComponentForUser(userId);
@@ -389,10 +372,6 @@ public class AssistManager {
});
}
- public long getAssistHandleShowAndGoRemainingDurationMs() {
- return mHandleController.getShowAndGoRemainingTimeMs();
- }
-
/** Returns the logging flags for the given Assistant invocation type. */
public int toLoggingSubType(int invocationType) {
return toLoggingSubType(invocationType, mPhoneStateMonitor.getPhoneState());
@@ -409,7 +388,7 @@ public class AssistManager {
// Note that this logic will break if the number of Assistant invocation types exceeds 7.
// There are currently 5 invocation types, but we will be migrating to the new logging
// framework in the next update.
- int subType = mHandleController.areHandlesShowing() ? 0 : 1;
+ int subType = 0;
subType |= invocationType << 1;
subType |= phoneState << 4;
return subType;
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistModule.java b/packages/SystemUI/src/com/android/systemui/assist/AssistModule.java
index ef43f87d20e8..f9138b6eac54 100644
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistModule.java
+++ b/packages/SystemUI/src/com/android/systemui/assist/AssistModule.java
@@ -21,15 +21,10 @@ import android.os.Handler;
import android.os.HandlerThread;
import android.os.SystemClock;
-import androidx.annotation.Nullable;
import androidx.slice.Clock;
import com.android.internal.app.AssistUtils;
import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.navigationbar.NavigationBarController;
-
-import java.util.EnumMap;
-import java.util.Map;
import javax.inject.Named;
@@ -55,28 +50,6 @@ public abstract class AssistModule {
@Provides
@SysUISingleton
- static Map<AssistHandleBehavior, AssistHandleBehaviorController.BehaviorController>
- provideAssistHandleBehaviorControllerMap(
- AssistHandleOffBehavior offBehavior,
- AssistHandleLikeHomeBehavior likeHomeBehavior,
- AssistHandleReminderExpBehavior reminderExpBehavior) {
- Map<AssistHandleBehavior, AssistHandleBehaviorController.BehaviorController> map =
- new EnumMap<>(AssistHandleBehavior.class);
- map.put(AssistHandleBehavior.OFF, offBehavior);
- map.put(AssistHandleBehavior.LIKE_HOME, likeHomeBehavior);
- map.put(AssistHandleBehavior.REMINDER_EXP, reminderExpBehavior);
- return map;
- }
-
- @Provides
- @Nullable
- static AssistHandleViewController provideAssistHandleViewController(
- NavigationBarController navigationBarController) {
- return navigationBarController.getAssistHandlerViewController();
- }
-
- @Provides
- @SysUISingleton
static AssistUtils provideAssistUtils(Context context) {
return new AssistUtils(context);
}
diff --git a/packages/SystemUI/src/com/android/systemui/assist/ui/DefaultUiController.java b/packages/SystemUI/src/com/android/systemui/assist/ui/DefaultUiController.java
index 1d9009668b47..57321454ce96 100644
--- a/packages/SystemUI/src/com/android/systemui/assist/ui/DefaultUiController.java
+++ b/packages/SystemUI/src/com/android/systemui/assist/ui/DefaultUiController.java
@@ -37,12 +37,10 @@ import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.Dependency;
import com.android.systemui.R;
-import com.android.systemui.assist.AssistHandleViewController;
import com.android.systemui.assist.AssistLogger;
import com.android.systemui.assist.AssistManager;
import com.android.systemui.assist.AssistantSessionEvent;
import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.navigationbar.NavigationBarController;
import java.util.Locale;
@@ -113,7 +111,6 @@ public class DefaultUiController implements AssistManager.UiController {
if (!mInvocationInProgress) {
attach();
mInvocationInProgress = true;
- updateAssistHandleVisibility();
}
setProgressInternal(type, progress);
}
@@ -136,7 +133,6 @@ public class DefaultUiController implements AssistManager.UiController {
}
mInvocationLightsView.hide();
mInvocationInProgress = false;
- updateAssistHandleVisibility();
}
protected void logInvocationProgressMetrics(
@@ -174,17 +170,6 @@ public class DefaultUiController implements AssistManager.UiController {
}
}
- private void updateAssistHandleVisibility() {
- NavigationBarController navigationBarController =
- Dependency.get(NavigationBarController.class);
- AssistHandleViewController controller =
- navigationBarController == null
- ? null : navigationBarController.getAssistHandlerViewController();
- if (controller != null) {
- controller.setAssistHintBlocked(mInvocationInProgress);
- }
- }
-
private void attach() {
if (!mAttached) {
mWindowManager.addView(mRoot, mLayoutParams);
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
index 594c0af4cb44..be9d6bd6edd2 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
@@ -116,7 +116,6 @@ import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.accessibility.AccessibilityButtonModeObserver;
import com.android.systemui.accessibility.SystemActions;
-import com.android.systemui.assist.AssistHandleViewController;
import com.android.systemui.assist.AssistManager;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.Main;
@@ -276,11 +275,6 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
}
}
- /** Only for default display */
- @Nullable
- AssistHandleViewController mAssistHandlerViewController;
-
-
private final AutoHideUiElement mAutoHideUiElement = new AutoHideUiElement() {
@Override
public void synchronizeState() {
@@ -630,11 +624,6 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
mDisabledFlags2 |= StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS;
}
setDisabled2Flags(mDisabledFlags2);
- if (mIsOnDefaultDisplay) {
- mAssistHandlerViewController =
- new AssistHandleViewController(mHandler, mNavigationBarView);
- getBarTransitions().addDarkIntensityListener(mAssistHandlerViewController);
- }
initSecondaryHomeHandleForRotation();
@@ -664,11 +653,6 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
@Override
public void onViewDetachedFromWindow(View v) {
if (mNavigationBarView != null) {
- if (mIsOnDefaultDisplay) {
- mNavigationBarView.getBarTransitions()
- .removeDarkIntensityListener(mAssistHandlerViewController);
- mAssistHandlerViewController = null;
- }
mNavigationBarView.getBarTransitions().destroy();
mNavigationBarView.getLightTransitionsController().destroy(mContext);
}
@@ -1596,11 +1580,6 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
delay + StackStateAnimator.ANIMATION_DURATION_GO_TO_FULL_SHADE);
}
- @Nullable
- public AssistHandleViewController getAssistHandlerViewController() {
- return mAssistHandlerViewController;
- }
-
/**
* Performs transitions on navigation bar.
*
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java
index 50efa8def5bf..6d1109ee5f51 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java
@@ -45,7 +45,6 @@ import com.android.settingslib.applications.InterestingConfigChanges;
import com.android.systemui.Dumpable;
import com.android.systemui.accessibility.AccessibilityButtonModeObserver;
import com.android.systemui.accessibility.SystemActions;
-import com.android.systemui.assist.AssistHandleViewController;
import com.android.systemui.assist.AssistManager;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.SysUISingleton;
@@ -399,13 +398,6 @@ public class NavigationBarController implements Callbacks,
return mNavigationBars.get(DEFAULT_DISPLAY);
}
- /** @return {@link AssistHandleViewController} (only on the default display). */
- @Nullable
- public AssistHandleViewController getAssistHandlerViewController() {
- NavigationBar navBar = getDefaultNavigationBar();
- return navBar == null ? null : navBar.getAssistHandlerViewController();
- }
-
@Override
public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) {
for (int i = 0; i < mNavigationBars.size(); i++) {
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
index 091b17dbb0c0..339331bdd827 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
@@ -69,7 +69,6 @@ import com.android.settingslib.Utils;
import com.android.systemui.Dependency;
import com.android.systemui.Interpolators;
import com.android.systemui.R;
-import com.android.systemui.assist.AssistHandleViewController;
import com.android.systemui.model.SysUiState;
import com.android.systemui.navigationbar.buttons.ButtonDispatcher;
import com.android.systemui.navigationbar.buttons.ContextualButton;
@@ -1357,14 +1356,6 @@ public class NavigationBarView extends FrameLayout implements
setClipChildren(shouldClip);
setClipToPadding(shouldClip);
- NavigationBarController navigationBarController =
- Dependency.get(NavigationBarController.class);
- AssistHandleViewController controller =
- navigationBarController == null
- ? null : navigationBarController.getAssistHandlerViewController();
- if (controller != null) {
- controller.setBottomOffset(insets.getSystemWindowInsetBottom());
- }
return super.onApplyWindowInsets(insets);
}
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/ButtonDispatcher.java b/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/ButtonDispatcher.java
index ade2923acdf6..a4f5548a659c 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/ButtonDispatcher.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/ButtonDispatcher.java
@@ -196,8 +196,6 @@ public class ButtonDispatcher {
if (animate) {
setVisibility(View.VISIBLE);
mFadeAnimator = ValueAnimator.ofFloat(getAlpha(), alpha);
- mFadeAnimator.setStartDelay(
- mAssistManager.getAssistHandleShowAndGoRemainingDurationMs());
mFadeAnimator.setDuration(duration);
mFadeAnimator.setInterpolator(LINEAR);
mFadeAnimator.addListener(mFadeListener);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleBehaviorControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleBehaviorControllerTest.java
deleted file mode 100644
index 7567f0cf04b6..000000000000
--- a/packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleBehaviorControllerTest.java
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
- * 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.systemui.assist;
-
-import static org.mockito.AdditionalAnswers.answerVoid;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.inOrder;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.reset;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.when;
-
-import android.content.ComponentName;
-import android.os.Handler;
-import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper.RunWithLooper;
-import android.view.accessibility.AccessibilityManager;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.internal.app.AssistUtils;
-import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.dump.DumpManager;
-import com.android.systemui.navigationbar.NavigationModeController;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.InOrder;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.util.EnumMap;
-import java.util.Map;
-
-@SmallTest
-@RunWith(AndroidTestingRunner.class)
-@RunWithLooper
-public class AssistHandleBehaviorControllerTest extends SysuiTestCase {
-
- private static final ComponentName COMPONENT_NAME = new ComponentName("", "");
-
- private AssistHandleBehaviorController mAssistHandleBehaviorController;
-
- @Mock private AssistUtils mMockAssistUtils;
- @Mock private Handler mMockHandler;
- @Mock private DeviceConfigHelper mMockDeviceConfigHelper;
- @Mock private AssistHandleOffBehavior mMockOffBehavior;
- @Mock private AssistHandleLikeHomeBehavior mMockLikeHomeBehavior;
- @Mock private AssistHandleReminderExpBehavior mMockReminderExpBehavior;
- @Mock private AssistHandleBehaviorController.BehaviorController mMockTestBehavior;
- @Mock private NavigationModeController mMockNavigationModeController;
- @Mock private AssistHandleViewController mMockAssistHandleViewController;
- @Mock private AccessibilityManager mMockA11yManager;
-
- @Before
- public void setup() {
- MockitoAnnotations.initMocks(this);
- doAnswer(answerVoid(Runnable::run)).when(mMockHandler).post(any(Runnable.class));
- doAnswer(answerVoid(Runnable::run)).when(mMockHandler)
- .postDelayed(any(Runnable.class), anyLong());
- doAnswer(invocation -> invocation.getArgument(0)).when(mMockA11yManager)
- .getRecommendedTimeoutMillis(anyInt(), anyInt());
-
- Map<AssistHandleBehavior, AssistHandleBehaviorController.BehaviorController> behaviorMap =
- new EnumMap<>(AssistHandleBehavior.class);
- behaviorMap.put(AssistHandleBehavior.OFF, mMockOffBehavior);
- behaviorMap.put(AssistHandleBehavior.LIKE_HOME, mMockLikeHomeBehavior);
- behaviorMap.put(AssistHandleBehavior.REMINDER_EXP, mMockReminderExpBehavior);
- behaviorMap.put(AssistHandleBehavior.TEST, mMockTestBehavior);
-
- mAssistHandleBehaviorController =
- new AssistHandleBehaviorController(
- mContext,
- mMockAssistUtils,
- mMockHandler,
- () -> mMockAssistHandleViewController,
- mMockDeviceConfigHelper,
- behaviorMap,
- mMockNavigationModeController,
- () -> mMockA11yManager,
- mock(DumpManager.class));
- }
-
- @After
- public void teardown() {
- mAssistHandleBehaviorController.setBehavior(AssistHandleBehavior.OFF);
- }
-
- @Test
- public void hide_hidesHandlesWhenShowing() {
- // Arrange
- when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
- mAssistHandleBehaviorController.showAndStay();
- reset(mMockAssistHandleViewController);
-
- // Act
- mAssistHandleBehaviorController.hide();
-
- // Assert
- verify(mMockAssistHandleViewController).setAssistHintVisible(false);
- verifyNoMoreInteractions(mMockAssistHandleViewController);
- }
-
- @Test
- public void hide_doesNothingWhenHiding() {
- // Arrange
- when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
- mAssistHandleBehaviorController.hide();
- reset(mMockAssistHandleViewController);
-
- // Act
- mAssistHandleBehaviorController.hide();
-
- // Assert
- verifyNoMoreInteractions(mMockAssistHandleViewController);
- }
-
- @Test
- public void showAndStay_showsHandlesWhenHiding() {
- // Arrange
- when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
- mAssistHandleBehaviorController.hide();
- reset(mMockAssistHandleViewController);
-
- // Act
- mAssistHandleBehaviorController.showAndStay();
-
- // Assert
- verify(mMockAssistHandleViewController).setAssistHintVisible(true);
- verifyNoMoreInteractions(mMockAssistHandleViewController);
- }
-
- @Test
- public void showAndStay_doesNothingWhenShowing() {
- // Arrange
- when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
- mAssistHandleBehaviorController.showAndStay();
- reset(mMockAssistHandleViewController);
-
- // Act
- mAssistHandleBehaviorController.showAndStay();
-
- // Assert
- verifyNoMoreInteractions(mMockAssistHandleViewController);
- }
-
- @Test
- public void showAndStay_doesNothingWhenThereIsNoAssistant() {
- // Arrange
- when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(null);
- mAssistHandleBehaviorController.hide();
- reset(mMockAssistHandleViewController);
-
- // Act
- mAssistHandleBehaviorController.showAndStay();
-
- // Assert
- verifyNoMoreInteractions(mMockAssistHandleViewController);
- }
-
- @Test
- public void showAndGo_showsThenHidesHandlesWhenHiding() {
- // Arrange
- when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
- mAssistHandleBehaviorController.hide();
- reset(mMockAssistHandleViewController);
-
- // Act
- mAssistHandleBehaviorController.showAndGo();
-
- // Assert
- InOrder inOrder = inOrder(mMockAssistHandleViewController);
- inOrder.verify(mMockAssistHandleViewController).setAssistHintVisible(true);
- inOrder.verify(mMockAssistHandleViewController).setAssistHintVisible(false);
- inOrder.verifyNoMoreInteractions();
- }
-
- @Test
- public void showAndGo_hidesHandlesAfterTimeoutWhenShowing() {
- // Arrange
- when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
- mAssistHandleBehaviorController.showAndStay();
- reset(mMockAssistHandleViewController);
-
- // Act
- mAssistHandleBehaviorController.showAndGo();
-
- // Assert
- verify(mMockAssistHandleViewController).setAssistHintVisible(false);
- verifyNoMoreInteractions(mMockAssistHandleViewController);
- }
-
- @Test
- public void showAndGo_doesNothingIfRecentlyHidden() {
- // Arrange
- when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
- when(mMockDeviceConfigHelper.getLong(
- eq(SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOWN_FREQUENCY_THRESHOLD_MS),
- anyLong())).thenReturn(10000L);
- mAssistHandleBehaviorController.showAndGo();
- reset(mMockAssistHandleViewController);
-
- // Act
- mAssistHandleBehaviorController.showAndGo();
-
- // Assert
- verifyNoMoreInteractions(mMockAssistHandleViewController);
- }
-
- @Test
- public void showAndGo_doesNothingWhenThereIsNoAssistant() {
- // Arrange
- when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(null);
- mAssistHandleBehaviorController.hide();
- reset(mMockAssistHandleViewController);
-
- // Act
- mAssistHandleBehaviorController.showAndGo();
-
- // Assert
- verifyNoMoreInteractions(mMockAssistHandleViewController);
- }
-
- @Test
- public void showAndGo_usesA11yTimeout() {
- // Arrange
- when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
- when(mMockDeviceConfigHelper.getLong(
- eq(SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOW_AND_GO_DURATION_MS), anyLong()))
- .thenReturn(12345L);
- mAssistHandleBehaviorController.hide();
- reset(mMockAssistHandleViewController, mMockA11yManager);
- when(mMockA11yManager.getRecommendedTimeoutMillis(anyInt(), anyInt())).thenReturn(54321);
- ArgumentCaptor<Long> delay = ArgumentCaptor.forClass(Long.class);
-
- // Act
- mAssistHandleBehaviorController.showAndGo();
-
- // Assert
- verify(mMockA11yManager).getRecommendedTimeoutMillis(
- eq(12345), eq(AccessibilityManager.FLAG_CONTENT_ICONS));
- verify(mMockHandler).postDelayed(any(Runnable.class), delay.capture());
- assert delay.getValue() == 54321L;
- }
-
- @Test
- public void showAndGoDelayed_showsThenHidesHandlesWhenHiding() {
- // Arrange
- when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
- mAssistHandleBehaviorController.hide();
- reset(mMockAssistHandleViewController);
-
- // Act
- mAssistHandleBehaviorController.showAndGoDelayed(1000, false);
-
- // Assert
- InOrder inOrder = inOrder(mMockAssistHandleViewController);
- inOrder.verify(mMockAssistHandleViewController).setAssistHintVisible(true);
- inOrder.verify(mMockAssistHandleViewController).setAssistHintVisible(false);
- inOrder.verifyNoMoreInteractions();
- }
-
- @Test
- public void showAndGoDelayed_hidesHandlesAfterTimeoutWhenShowing() {
- // Arrange
- when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
- mAssistHandleBehaviorController.showAndStay();
- reset(mMockAssistHandleViewController);
-
- // Act
- mAssistHandleBehaviorController.showAndGoDelayed(1000, false);
-
- // Assert
- verify(mMockAssistHandleViewController).setAssistHintVisible(false);
- verifyNoMoreInteractions(mMockAssistHandleViewController);
- }
-
- @Test
- public void showAndGoDelayed_hidesInitiallyThenShowsThenHidesAfterTimeoutWhenHideRequested() {
- // Arrange
- when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
- mAssistHandleBehaviorController.showAndStay();
- reset(mMockAssistHandleViewController);
-
- // Act
- mAssistHandleBehaviorController.showAndGoDelayed(1000, true);
-
- // Assert
- InOrder inOrder = inOrder(mMockAssistHandleViewController);
- inOrder.verify(mMockAssistHandleViewController).setAssistHintVisible(false);
- inOrder.verify(mMockAssistHandleViewController).setAssistHintVisible(true);
- inOrder.verify(mMockAssistHandleViewController).setAssistHintVisible(false);
- inOrder.verifyNoMoreInteractions();
- }
-
- @Test
- public void showAndGoDelayed_doesNothingIfRecentlyHidden() {
- // Arrange
- when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
- when(mMockDeviceConfigHelper.getLong(
- eq(SystemUiDeviceConfigFlags.ASSIST_HANDLES_SHOWN_FREQUENCY_THRESHOLD_MS),
- anyLong())).thenReturn(10000L);
- mAssistHandleBehaviorController.showAndGo();
- reset(mMockAssistHandleViewController);
-
- // Act
- mAssistHandleBehaviorController.showAndGoDelayed(1000, false);
-
- // Assert
- verifyNoMoreInteractions(mMockAssistHandleViewController);
- }
-
- @Test
- public void showAndGoDelayed_doesNothingWhenThereIsNoAssistant() {
- // Arrange
- when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(null);
- mAssistHandleBehaviorController.hide();
- reset(mMockAssistHandleViewController);
-
- // Act
- mAssistHandleBehaviorController.showAndGoDelayed(1000, false);
-
- // Assert
- verifyNoMoreInteractions(mMockAssistHandleViewController);
- }
-
- @Test
- public void setBehavior_activatesTheBehaviorWhenInGesturalMode() {
- // Arrange
- when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
- mAssistHandleBehaviorController.setInGesturalModeForTest(true);
-
- // Act
- mAssistHandleBehaviorController.setBehavior(AssistHandleBehavior.TEST);
-
- // Assert
- verify(mMockTestBehavior).onModeActivated(mContext, mAssistHandleBehaviorController);
- verifyNoMoreInteractions(mMockTestBehavior);
- }
-
- @Test
- public void setBehavior_deactivatesThePreviousBehaviorWhenInGesturalMode() {
- // Arrange
- when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
- mAssistHandleBehaviorController.setBehavior(AssistHandleBehavior.TEST);
- mAssistHandleBehaviorController.setInGesturalModeForTest(true);
- reset(mMockTestBehavior);
-
- // Act
- mAssistHandleBehaviorController.setBehavior(AssistHandleBehavior.OFF);
-
- // Assert
- verify(mMockTestBehavior).onModeDeactivated();
- verifyNoMoreInteractions(mMockTestBehavior);
- }
-
- @Test
- public void setBehavior_doesNothingWhenNotInGesturalMode() {
- // Arrange
- when(mMockAssistUtils.getAssistComponentForUser(anyInt())).thenReturn(COMPONENT_NAME);
- mAssistHandleBehaviorController.setInGesturalModeForTest(false);
-
- // Act
- mAssistHandleBehaviorController.setBehavior(AssistHandleBehavior.TEST);
-
- // Assert
- verifyNoMoreInteractions(mMockTestBehavior);
- }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleLikeHomeBehaviorTest.java b/packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleLikeHomeBehaviorTest.java
deleted file mode 100644
index fe131275afd8..000000000000
--- a/packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleLikeHomeBehaviorTest.java
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * 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.systemui.assist;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.reset;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.when;
-
-import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.keyguard.WakefulnessLifecycle;
-import com.android.systemui.model.SysUiState;
-import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.shared.system.QuickStepContract;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-@SmallTest
-@RunWith(AndroidTestingRunner.class)
-@TestableLooper.RunWithLooper
-public class AssistHandleLikeHomeBehaviorTest extends SysuiTestCase {
-
- private AssistHandleLikeHomeBehavior mAssistHandleLikeHomeBehavior;
-
- @Mock private StatusBarStateController mMockStatusBarStateController;
- @Mock private WakefulnessLifecycle mMockWakefulnessLifecycle;
- @Mock private SysUiState mMockSysUiState;
- @Mock private AssistHandleCallbacks mMockAssistHandleCallbacks;
-
- @Before
- public void setup() {
- MockitoAnnotations.initMocks(this);
- mAssistHandleLikeHomeBehavior = new AssistHandleLikeHomeBehavior(
- () -> mMockStatusBarStateController,
- () -> mMockWakefulnessLifecycle,
- () -> mMockSysUiState);
- }
-
- @Test
- public void onModeActivated_beginsObserving() {
- // Arrange
-
- // Act
- mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks);
-
- // Assert
- verify(mMockStatusBarStateController).isDozing();
- verify(mMockStatusBarStateController).addCallback(
- any(StatusBarStateController.StateListener.class));
- verify(mMockWakefulnessLifecycle).getWakefulness();
- verify(mMockWakefulnessLifecycle).addObserver(any(WakefulnessLifecycle.Observer.class));
- verify(mMockSysUiState).addCallback(any(SysUiState.SysUiStateCallback.class));
- verifyNoMoreInteractions(mMockWakefulnessLifecycle, mMockSysUiState);
- }
-
- @Test
- public void onModeActivated_showsHandlesWhenFullyAwake() {
- // Arrange
- when(mMockStatusBarStateController.isDozing()).thenReturn(false);
- when(mMockWakefulnessLifecycle.getWakefulness())
- .thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE);
-
- // Act
- mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks);
-
- // Assert
- verify(mMockAssistHandleCallbacks).showAndStay();
- verifyNoMoreInteractions(mMockAssistHandleCallbacks);
- }
-
- @Test
- public void onModeActivated_hidesHandlesWhenNotAwake() {
- // Arrange
- when(mMockStatusBarStateController.isDozing()).thenReturn(true);
- when(mMockWakefulnessLifecycle.getWakefulness())
- .thenReturn(WakefulnessLifecycle.WAKEFULNESS_ASLEEP);
-
- // Act
- mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks);
-
- // Assert
- verify(mMockAssistHandleCallbacks).hide();
- verifyNoMoreInteractions(mMockAssistHandleCallbacks);
- }
-
- @Test
- public void onModeActivated_hidesHandlesWhenDozing() {
- // Arrange
- when(mMockStatusBarStateController.isDozing()).thenReturn(true);
- when(mMockWakefulnessLifecycle.getWakefulness())
- .thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE);
-
- // Act
- mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks);
-
- // Assert
- verify(mMockAssistHandleCallbacks).hide();
- verifyNoMoreInteractions(mMockAssistHandleCallbacks);
- }
-
- @Test
- public void onModeDeactivated_stopsObserving() {
- // Arrange
- mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks);
- ArgumentCaptor<StatusBarStateController.StateListener> stateListener =
- ArgumentCaptor.forClass(StatusBarStateController.StateListener.class);
- ArgumentCaptor<WakefulnessLifecycle.Observer> observer =
- ArgumentCaptor.forClass(WakefulnessLifecycle.Observer.class);
- ArgumentCaptor<SysUiState.SysUiStateCallback> sysUiStateCallback =
- ArgumentCaptor.forClass(SysUiState.SysUiStateCallback.class);
- verify(mMockStatusBarStateController).addCallback(stateListener.capture());
- verify(mMockWakefulnessLifecycle).addObserver(observer.capture());
- verify(mMockSysUiState).addCallback(sysUiStateCallback.capture());
- reset(
- mMockStatusBarStateController,
- mMockWakefulnessLifecycle,
- mMockSysUiState,
- mMockAssistHandleCallbacks);
-
- // Act
- mAssistHandleLikeHomeBehavior.onModeDeactivated();
-
- // Assert
- verify(mMockStatusBarStateController).removeCallback(eq(stateListener.getValue()));
- verify(mMockWakefulnessLifecycle).removeObserver(eq(observer.getValue()));
- verify(mMockSysUiState).removeCallback(eq(sysUiStateCallback.getValue()));
- verifyNoMoreInteractions(
- mMockStatusBarStateController,
- mMockWakefulnessLifecycle,
- mMockSysUiState,
- mMockAssistHandleCallbacks);
- }
-
- @Test
- public void onAssistantGesturePerformed_doesNothing() {
- // Arrange
- mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks);
- reset(
- mMockStatusBarStateController,
- mMockWakefulnessLifecycle,
- mMockSysUiState,
- mMockAssistHandleCallbacks);
-
- // Act
- mAssistHandleLikeHomeBehavior.onAssistantGesturePerformed();
-
- // Assert
- verifyNoMoreInteractions(
- mMockStatusBarStateController,
- mMockWakefulnessLifecycle,
- mMockSysUiState,
- mMockAssistHandleCallbacks);
- }
-
- @Test
- public void onAssistHandlesRequested_doesNothing() {
- // Arrange
- mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks);
- reset(
- mMockStatusBarStateController,
- mMockWakefulnessLifecycle,
- mMockSysUiState,
- mMockAssistHandleCallbacks);
-
- // Act
- mAssistHandleLikeHomeBehavior.onAssistHandlesRequested();
-
- // Assert
- verifyNoMoreInteractions(
- mMockStatusBarStateController,
- mMockWakefulnessLifecycle,
- mMockSysUiState,
- mMockAssistHandleCallbacks);
- }
-
- @Test
- public void onBothAwakeAndUnDoze_handlesShow() {
- // Arrange
- when(mMockStatusBarStateController.isDozing()).thenReturn(true);
- when(mMockWakefulnessLifecycle.getWakefulness())
- .thenReturn(WakefulnessLifecycle.WAKEFULNESS_ASLEEP);
- ArgumentCaptor<StatusBarStateController.StateListener> stateListener =
- ArgumentCaptor.forClass(StatusBarStateController.StateListener.class);
- ArgumentCaptor<WakefulnessLifecycle.Observer> observer =
- ArgumentCaptor.forClass(WakefulnessLifecycle.Observer.class);
- mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks);
- verify(mMockStatusBarStateController).addCallback(stateListener.capture());
- verify(mMockWakefulnessLifecycle).addObserver(observer.capture());
- reset(
- mMockStatusBarStateController,
- mMockWakefulnessLifecycle,
- mMockSysUiState,
- mMockAssistHandleCallbacks);
-
- // Act
- observer.getValue().onFinishedWakingUp();
-
- // Assert
- verify(mMockAssistHandleCallbacks).hide();
- verifyNoMoreInteractions(
- mMockStatusBarStateController,
- mMockWakefulnessLifecycle,
- mMockSysUiState,
- mMockAssistHandleCallbacks);
-
- // Arrange
- observer.getValue().onFinishedGoingToSleep();
- reset(mMockAssistHandleCallbacks);
-
- // Act
- stateListener.getValue().onDozingChanged(false);
-
- // Assert
- verify(mMockAssistHandleCallbacks).hide();
- verifyNoMoreInteractions(
- mMockStatusBarStateController,
- mMockWakefulnessLifecycle,
- mMockSysUiState,
- mMockAssistHandleCallbacks);
-
- // Act
- observer.getValue().onFinishedWakingUp();
-
- // Assert
- verify(mMockAssistHandleCallbacks).showAndStay();
- verifyNoMoreInteractions(
- mMockStatusBarStateController,
- mMockWakefulnessLifecycle,
- mMockSysUiState,
- mMockAssistHandleCallbacks);
- }
-
- @Test
- public void onSleepOrDoze_handlesHide() {
- // Arrange
- when(mMockStatusBarStateController.isDozing()).thenReturn(false);
- when(mMockWakefulnessLifecycle.getWakefulness())
- .thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE);
- ArgumentCaptor<StatusBarStateController.StateListener> stateListener =
- ArgumentCaptor.forClass(StatusBarStateController.StateListener.class);
- ArgumentCaptor<WakefulnessLifecycle.Observer> observer =
- ArgumentCaptor.forClass(WakefulnessLifecycle.Observer.class);
- mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks);
- verify(mMockStatusBarStateController).addCallback(stateListener.capture());
- verify(mMockWakefulnessLifecycle).addObserver(observer.capture());
- reset(
- mMockStatusBarStateController,
- mMockWakefulnessLifecycle,
- mMockSysUiState,
- mMockAssistHandleCallbacks);
-
- // Act
- observer.getValue().onStartedGoingToSleep();
-
- // Assert
- verify(mMockAssistHandleCallbacks).hide();
- verifyNoMoreInteractions(
- mMockStatusBarStateController,
- mMockWakefulnessLifecycle,
- mMockSysUiState,
- mMockAssistHandleCallbacks);
-
- // Arrange
- observer.getValue().onFinishedWakingUp();
- reset(mMockAssistHandleCallbacks);
-
- // Act
- stateListener.getValue().onDozingChanged(true);
-
- // Assert
- verify(mMockAssistHandleCallbacks).hide();
- verifyNoMoreInteractions(
- mMockStatusBarStateController,
- mMockWakefulnessLifecycle,
- mMockSysUiState,
- mMockAssistHandleCallbacks);
- }
-
- @Test
- public void onHomeHandleHide_handlesHide() {
- // Arrange
- when(mMockStatusBarStateController.isDozing()).thenReturn(false);
- when(mMockWakefulnessLifecycle.getWakefulness())
- .thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE);
- ArgumentCaptor<SysUiState.SysUiStateCallback> sysUiStateCallback =
- ArgumentCaptor.forClass(SysUiState.SysUiStateCallback.class);
- mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks);
- verify(mMockSysUiState).addCallback(sysUiStateCallback.capture());
- reset(
- mMockStatusBarStateController,
- mMockWakefulnessLifecycle,
- mMockSysUiState,
- mMockAssistHandleCallbacks);
-
- // Act
- sysUiStateCallback.getValue().onSystemUiStateChanged(
- QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN);
-
- // Assert
- verify(mMockAssistHandleCallbacks).hide();
- verifyNoMoreInteractions(
- mMockStatusBarStateController,
- mMockWakefulnessLifecycle,
- mMockSysUiState,
- mMockAssistHandleCallbacks);
- }
-
- @Test
- public void onHomeHandleUnhide_handlesShow() {
- // Arrange
- when(mMockStatusBarStateController.isDozing()).thenReturn(false);
- when(mMockWakefulnessLifecycle.getWakefulness())
- .thenReturn(WakefulnessLifecycle.WAKEFULNESS_AWAKE);
- ArgumentCaptor<SysUiState.SysUiStateCallback> sysUiStateCallback =
- ArgumentCaptor.forClass(SysUiState.SysUiStateCallback.class);
- mAssistHandleLikeHomeBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks);
- verify(mMockSysUiState).addCallback(sysUiStateCallback.capture());
- sysUiStateCallback.getValue().onSystemUiStateChanged(
- QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN);
- reset(
- mMockStatusBarStateController,
- mMockWakefulnessLifecycle,
- mMockSysUiState,
- mMockAssistHandleCallbacks);
-
- // Act
- sysUiStateCallback.getValue().onSystemUiStateChanged(
- ~QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN);
-
- // Assert
- verify(mMockAssistHandleCallbacks).showAndStay();
- verifyNoMoreInteractions(
- mMockStatusBarStateController,
- mMockWakefulnessLifecycle,
- mMockSysUiState,
- mMockAssistHandleCallbacks);
- }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleOffBehaviorTest.java b/packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleOffBehaviorTest.java
deleted file mode 100644
index 15d4d5b4792f..000000000000
--- a/packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleOffBehaviorTest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * 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.systemui.assist;
-
-import static org.mockito.Mockito.reset;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-
-import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.systemui.SysuiTestCase;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-@SmallTest
-@RunWith(AndroidTestingRunner.class)
-@TestableLooper.RunWithLooper
-public class AssistHandleOffBehaviorTest extends SysuiTestCase {
-
- private AssistHandleOffBehavior mAssistHandleOffBehavior;
-
- @Mock private AssistHandleCallbacks mMockAssistHandleCallbacks;
-
- @Before
- public void setup() {
- MockitoAnnotations.initMocks(this);
- mAssistHandleOffBehavior = new AssistHandleOffBehavior();
- }
-
- @Test
- public void onModeActivated_hidesHandles() {
- // Arrange
-
- // Act
- mAssistHandleOffBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks);
-
- // Assert
- verify(mMockAssistHandleCallbacks).hide();
- verifyNoMoreInteractions(mMockAssistHandleCallbacks);
- }
-
- @Test
- public void onModeDeactivated_doesNothing() {
- // Arrange
- mAssistHandleOffBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks);
- reset(mMockAssistHandleCallbacks);
-
- // Act
- mAssistHandleOffBehavior.onModeDeactivated();
-
- // Assert
- verifyNoMoreInteractions(mMockAssistHandleCallbacks);
- }
-
- @Test
- public void onAssistantGesturePerformed_doesNothing() {
- // Arrange
- mAssistHandleOffBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks);
- reset(mMockAssistHandleCallbacks);
-
- // Act
- mAssistHandleOffBehavior.onAssistantGesturePerformed();
-
- // Assert
- verifyNoMoreInteractions(mMockAssistHandleCallbacks);
- }
-
- @Test
- public void onAssistHandlesRequested_doesNothing() {
- // Arrange
- mAssistHandleOffBehavior.onModeActivated(mContext, mMockAssistHandleCallbacks);
- reset(mMockAssistHandleCallbacks);
-
- // Act
- mAssistHandleOffBehavior.onAssistHandlesRequested();
-
- // Assert
- verifyNoMoreInteractions(mMockAssistHandleCallbacks);
- }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleViewControllerTest.java
deleted file mode 100644
index 6e21ae218621..000000000000
--- a/packages/SystemUI/tests/src/com/android/systemui/assist/AssistHandleViewControllerTest.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * 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.systemui.assist;
-
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertTrue;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.when;
-
-import android.os.Handler;
-import android.os.Looper;
-import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper.RunWithLooper;
-import android.view.View;
-import android.view.ViewPropertyAnimator;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.systemui.CornerHandleView;
-import com.android.systemui.SysuiTestCase;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-@SmallTest
-@RunWith(AndroidTestingRunner.class)
-@RunWithLooper
-public class AssistHandleViewControllerTest extends SysuiTestCase {
-
- private AssistHandleViewController mAssistHandleViewController;
-
- @Mock private Handler mMockHandler;
- @Mock private Looper mMockLooper;
- @Mock private View mMockBarView;
- @Mock private CornerHandleView mMockAssistHint;
- @Mock private ViewPropertyAnimator mMockAnimator;
-
- @Before
- public void setup() {
- MockitoAnnotations.initMocks(this);
- when(mMockBarView.findViewById(anyInt())).thenReturn(mMockAssistHint);
- when(mMockAssistHint.animate()).thenReturn(mMockAnimator);
- when(mMockAnimator.setInterpolator(any())).thenReturn(mMockAnimator);
- when(mMockAnimator.setDuration(anyLong())).thenReturn(mMockAnimator);
- doNothing().when(mMockAnimator).cancel();
- when(mMockHandler.getLooper()).thenReturn(mMockLooper);
- when(mMockLooper.isCurrentThread()).thenReturn(true);
-
- mAssistHandleViewController = new AssistHandleViewController(mMockHandler, mMockBarView);
- }
-
- @Test
- public void testSetVisibleWithoutBlocked() {
- // Act
- mAssistHandleViewController.setAssistHintVisible(true);
-
- // Assert
- assertTrue(mAssistHandleViewController.mAssistHintVisible);
- }
-
- @Test
- public void testSetInvisibleWithoutBlocked() {
- // Arrange
- mAssistHandleViewController.setAssistHintVisible(true);
-
- // Act
- mAssistHandleViewController.setAssistHintVisible(false);
-
- // Assert
- assertFalse(mAssistHandleViewController.mAssistHintVisible);
- }
-
- @Test
- public void testSetVisibleWithBlocked() {
- // Act
- mAssistHandleViewController.setAssistHintBlocked(true);
- mAssistHandleViewController.setAssistHintVisible(true);
-
- // Assert
- assertFalse(mAssistHandleViewController.mAssistHintVisible);
- assertTrue(mAssistHandleViewController.mAssistHintBlocked);
- }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerTest.java
index c29b812dde7a..da63b8a3ca4b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerTest.java
@@ -29,7 +29,6 @@ import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
@@ -272,10 +271,4 @@ public class NavigationBarControllerTest extends SysuiTestCase {
verify(mSecondaryNavBar).disableAnimationsDuringHide(eq(500L));
}
-
- @Test
- public void testGetAssistHandlerViewController_noCrash() {
- reset(mNavigationBarController.mNavigationBars);
- mNavigationBarController.getAssistHandlerViewController();
- }
}