Merge "Calling sendStateEventToTest() from a place guaranteed to be called" into ub-launcher3-qt-dev
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java
index f1d6450..1c66968 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java
@@ -64,10 +64,12 @@
public ScaleAndTranslation getOverviewScaleAndTranslation(Launcher launcher) {
// Initialize the recents view scale to what it would be when starting swipe up
RecentsView recentsView = launcher.getOverviewPanel();
- if (recentsView.getTaskViewCount() == 0) {
+ int taskCount = recentsView.getTaskViewCount();
+ if (taskCount == 0) {
return super.getOverviewScaleAndTranslation(launcher);
}
- TaskView dummyTask = recentsView.getTaskViewAt(recentsView.getCurrentPage());
+ TaskView dummyTask = recentsView.getTaskViewAt(Math.max(taskCount - 1,
+ recentsView.getCurrentPage()));
return recentsView.getTempClipAnimationHelper().updateForFullscreenOverview(dummyTask)
.getScaleAndTranslation();
}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityControllerHelper.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityControllerHelper.java
index fd4cdfe..e52a420 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityControllerHelper.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityControllerHelper.java
@@ -30,9 +30,6 @@
import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.quickstep.WindowTransformSwipeHandler.RECENTS_ATTACH_DURATION;
-import static androidx.dynamicanimation.animation.SpringForce.DAMPING_RATIO_LOW_BOUNCY;
-import static androidx.dynamicanimation.animation.SpringForce.STIFFNESS_LOW;
-
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
@@ -318,8 +315,8 @@
if (mAttachToWindowTranslationXAnim == null) {
mAttachToWindowTranslationXAnim = new SpringAnimation(recentsView,
SpringAnimation.TRANSLATION_X).setSpring(new SpringForce()
- .setDampingRatio(DAMPING_RATIO_LOW_BOUNCY)
- .setStiffness(STIFFNESS_LOW));
+ .setDampingRatio(0.8f)
+ .setStiffness(250));
}
if (!recentsView.isShown() && animate) {
recentsView.setTranslationX(fromTranslationX);
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java
index dc35440..30178a6 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java
@@ -17,7 +17,12 @@
import static android.view.MotionEvent.ACTION_DOWN;
+import static com.android.launcher3.config.FeatureFlags.ADAPTIVE_ICON_WINDOW_ANIM;
+import static com.android.launcher3.config.FeatureFlags.APPLY_CONFIG_AT_RUNTIME;
+import static com.android.launcher3.config.FeatureFlags.ENABLE_HINTS_IN_OVERVIEW;
import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE;
+import static com.android.launcher3.config.FeatureFlags.FAKE_LANDSCAPE_UI;
+import static com.android.launcher3.config.FeatureFlags.QUICKSTEP_SPRINGS;
import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_INPUT_MONITOR;
import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_SYSUI_PROXY;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_CLICKABLE;
@@ -27,7 +32,6 @@
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING;
-import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED;
import android.annotation.TargetApi;
@@ -61,6 +65,7 @@
import android.view.WindowManager;
import androidx.annotation.BinderThread;
+import androidx.annotation.UiThread;
import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.MainThreadExecutor;
@@ -94,7 +99,6 @@
import java.io.FileDescriptor;
import java.io.PrintWriter;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
@@ -146,10 +150,7 @@
mISystemUiProxy = ISystemUiProxy.Stub
.asInterface(bundle.getBinder(KEY_EXTRA_SYSUI_PROXY));
MAIN_THREAD_EXECUTOR.execute(TouchInteractionService.this::initInputMonitor);
- runWhenUserUnlocked(() -> {
- mRecentsModel.setSystemUiProxy(mISystemUiProxy);
- mOverviewInteractionState.setSystemUiProxy(mISystemUiProxy);
- });
+ MAIN_THREAD_EXECUTOR.execute(TouchInteractionService.this::onSystemUiProxySet);
}
@Override
@@ -182,16 +183,9 @@
@Override
public void onAssistantVisibilityChanged(float visibility) {
- if (mOverviewComponentObserver == null) {
- // Save the visibility to be applied when the user is unlocked
- mPendingAssistantVisibility = visibility;
- return;
- }
-
- MAIN_THREAD_EXECUTOR.execute(() -> {
- mOverviewComponentObserver.getActivityControlHelper()
- .onAssistantVisibilityChanged(visibility);
- });
+ mLastAssistantVisibility = visibility;
+ MAIN_THREAD_EXECUTOR.execute(
+ TouchInteractionService.this::onAssistantVisibilityChanged);
}
public void onBackAction(boolean completed, int downX, int downY, boolean isButton,
@@ -208,8 +202,7 @@
public void onSystemUiStateChanged(int stateFlags) {
mSystemUiStateFlags = stateFlags;
- mOverviewInteractionState.setSystemUiStateFlags(stateFlags);
- mOverviewComponentObserver.onSystemUiStateChanged(stateFlags);
+ MAIN_THREAD_EXECUTOR.execute(TouchInteractionService.this::onSystemUiFlagsChanged);
}
/** Deprecated methods **/
@@ -248,11 +241,10 @@
private InputConsumerController mInputConsumer;
private SwipeSharedState mSwipeSharedState;
private boolean mAssistantAvailable;
- private float mPendingAssistantVisibility = 0;
+ private float mLastAssistantVisibility = 0;
private @SystemUiStateFlags int mSystemUiStateFlags;
private boolean mIsUserUnlocked;
- private List<Runnable> mOnUserUnlockedCallbacks;
private BroadcastReceiver mUserUnlockedReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -286,7 +278,6 @@
// Everything else should be initialized in initWhenUserUnlocked() below.
mKM = getSystemService(KeyguardManager.class);
mMainChoreographer = Choreographer.getInstance();
- mOnUserUnlockedCallbacks = new ArrayList<>();
if (UserManagerCompat.getInstance(this).isUserUnlocked(Process.myUserHandle())) {
initWhenUserUnlocked();
@@ -413,13 +404,9 @@
}
private void initWhenUserUnlocked() {
- mIsUserUnlocked = true;
-
mAM = ActivityManagerWrapper.getInstance();
mRecentsModel = RecentsModel.INSTANCE.get(this);
mOverviewComponentObserver = new OverviewComponentObserver(this);
- mOverviewComponentObserver.getActivityControlHelper().onAssistantVisibilityChanged(
- mPendingAssistantVisibility);
mOverviewCommandHelper = new OverviewCommandHelper(this, mOverviewComponentObserver);
mOverviewInteractionState = OverviewInteractionState.INSTANCE.get(this);
@@ -427,12 +414,12 @@
mTaskOverlayFactory = TaskOverlayFactory.INSTANCE.get(this);
mSwipeSharedState = new SwipeSharedState(mOverviewComponentObserver);
mInputConsumer = InputConsumerController.getRecentsAnimationInputConsumer();
- mInputConsumer.registerInputConsumer();
+ mIsUserUnlocked = true;
- for (Runnable callback : mOnUserUnlockedCallbacks) {
- callback.run();
- }
- mOnUserUnlockedCallbacks.clear();
+ mInputConsumer.registerInputConsumer();
+ onSystemUiProxySet();
+ onSystemUiFlagsChanged();
+ onAssistantVisibilityChanged();
// Temporarily disable model preload
// new ModelPreload().start(this);
@@ -440,11 +427,27 @@
Utilities.unregisterReceiverSafely(this, mUserUnlockedReceiver);
}
- private void runWhenUserUnlocked(Runnable callback) {
+ @UiThread
+ private void onSystemUiProxySet() {
if (mIsUserUnlocked) {
- callback.run();
- } else {
- mOnUserUnlockedCallbacks.add(callback);
+ mRecentsModel.setSystemUiProxy(mISystemUiProxy);
+ mOverviewInteractionState.setSystemUiProxy(mISystemUiProxy);
+ }
+ }
+
+ @UiThread
+ private void onSystemUiFlagsChanged() {
+ if (mIsUserUnlocked) {
+ mOverviewInteractionState.setSystemUiStateFlags(mSystemUiStateFlags);
+ mOverviewComponentObserver.onSystemUiStateChanged(mSystemUiStateFlags);
+ }
+ }
+
+ @UiThread
+ private void onAssistantVisibilityChanged() {
+ if (mIsUserUnlocked) {
+ mOverviewComponentObserver.getActivityControlHelper().onAssistantVisibilityChanged(
+ mLastAssistantVisibility);
}
}
@@ -666,6 +669,13 @@
mSwipeSharedState.dump(" ", pw);
}
pw.println(" mConsumer=" + mConsumer.getName());
+ pw.println("FeatureFlags:");
+ pw.println(" APPLY_CONFIG_AT_RUNTIME=" + APPLY_CONFIG_AT_RUNTIME.get());
+ pw.println(" QUICKSTEP_SPRINGS=" + QUICKSTEP_SPRINGS.get());
+ pw.println(" ADAPTIVE_ICON_WINDOW_ANIM=" + ADAPTIVE_ICON_WINDOW_ANIM.get());
+ pw.println(" ENABLE_QUICKSTEP_LIVE_TILE=" + ENABLE_QUICKSTEP_LIVE_TILE.get());
+ pw.println(" ENABLE_HINTS_IN_OVERVIEW=" + ENABLE_HINTS_IN_OVERVIEW.get());
+ pw.println(" FAKE_LANDSCAPE_UI=" + FAKE_LANDSCAPE_UI.get());
TOUCH_INTERACTION_LOG.dump("", pw);
}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java
index bf3e91f..e0a4bca 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java
@@ -353,14 +353,15 @@
mIconLoadRequest = iconCache.updateIconInBackground(mTask,
(task) -> {
setIcon(task.icon);
- if (isRunningTask()) {
+ if (ENABLE_QUICKSTEP_LIVE_TILE.get() && isRunningTask()) {
getRecentsView().updateLiveTileIcon(task.icon);
}
mDigitalWellBeingToast.initialize(
mTask,
contentDescription -> {
setContentDescription(contentDescription);
- if (mDigitalWellBeingToast.getVisibility() == VISIBLE) {
+ if (mDigitalWellBeingToast.getVisibility() == VISIBLE
+ && getRecentsView() != null) {
getRecentsView().onDigitalWellbeingToastShown();
}
});
@@ -716,6 +717,9 @@
}
public boolean isRunningTask() {
+ if (getRecentsView() == null) {
+ return false;
+ }
return this == getRecentsView().getRunningTaskView();
}
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 57a9b16..ca410aa 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -888,7 +888,6 @@
mLauncherCallbacks.onStart();
}
mAppWidgetHost.setListenIfResumed(true);
- NotificationListener.setNotificationsChangedListener(mPopupDataProvider);
RaceConditionTracker.onEvent(ON_START_EVT, EXIT);
}
@@ -908,6 +907,9 @@
// Refresh shortcuts if the permission changed.
mModel.refreshShortcutsIfRequired();
+ // Set the notification listener and fetch updated notifications when we resume
+ NotificationListener.setNotificationsChangedListener(mPopupDataProvider);
+
DiscoveryBounce.showForHomeIfNeeded(this);
if (mPendingActivityRequestCode != -1 && isInState(NORMAL)) {