From 1f6a5f50e522cea404f414dbfe30940fce65532f Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Thu, 6 Jul 2023 04:34:54 +0000 Subject: [PATCH 1/3] Ignore recents transition if there are no closing tasks - In the case where Launcher calls startRecentsTransition while there are no other visible tasks, we should not be continuing with the transition as there are no tasks for Launcher to control. This was previously handled in RecentsAnimationController in legacy transitions, but the safer fix is to ignore it on the Launcher side for this release. Bug: 289175232 Test: Manually trigger empty targets and verify no issues (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:6f7e15ff644bac2f11ecb779030255efebc18885) Merged-In: I3657c000cbc8c14c9ac989c2a57715515c96edb6 Change-Id: I3657c000cbc8c14c9ac989c2a57715515c96edb6 --- .../quickstep/RecentsAnimationCallbacks.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/quickstep/src/com/android/quickstep/RecentsAnimationCallbacks.java b/quickstep/src/com/android/quickstep/RecentsAnimationCallbacks.java index 523a98ec4b..2256cbf14b 100644 --- a/quickstep/src/com/android/quickstep/RecentsAnimationCallbacks.java +++ b/quickstep/src/com/android/quickstep/RecentsAnimationCallbacks.java @@ -15,6 +15,7 @@ */ package com.android.quickstep; +import static android.view.RemoteAnimationTarget.MODE_CLOSING; import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER; import static com.android.launcher3.util.Executors.MAIN_EXECUTOR; @@ -37,6 +38,7 @@ import com.android.systemui.shared.recents.model.ThumbnailData; import com.android.systemui.shared.system.RecentsAnimationControllerCompat; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.Set; @@ -101,9 +103,22 @@ public class RecentsAnimationCallbacks implements RemoteAnimationTarget[] appTargets, RemoteAnimationTarget[] wallpaperTargets, Rect homeContentInsets, Rect minimizedHomeBounds) { + long appCount = Arrays.stream(appTargets) + .filter(app -> app.mode == MODE_CLOSING) + .count(); + if (appCount == 0) { + // Edge case, if there are no closing app targets, then Launcher has nothing to handle + ActiveGestureLog.INSTANCE.addLog( + /* event= */ "RecentsAnimationCallbacks.onAnimationStart (canceled)", + /* extras= */ 0, + /* gestureEvent= */ START_RECENTS_ANIMATION); + notifyAnimationCanceled(); + animationController.finish(false /* toHome */, false /* sendUserLeaveHint */); + return; + } + mController = new RecentsAnimationController(animationController, mAllowMinimizeSplitScreen, this::onAnimationFinished); - if (mCancelled) { Utilities.postAsyncCallback(MAIN_EXECUTOR.getHandler(), mController::finishAnimationToApp); From 1672e8a367bf56b5e654e0492385b34e3c02ab63 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Thu, 6 Jul 2023 22:01:49 +0000 Subject: [PATCH 2/3] Fix an issue with nav bar translations not being updated - There are flows where the shared taskbar state is updated prior to being destroyed, and not updated to the latest values when the taskbar is recreated. ie. unfolded -> lock screen -> LauncherTaskbarUiController's mTaskbarInAppDisplayProgress[SYSUI_SURFACE_PROGRESS_INDEX] is set to 1 due to the notif shade (lockscreen) showing. This is written into TaskbarSharedState's sysuiStateFlags and inAppDisplayProgressMultiPropValues. fold -> TaskbarActivityContext is destroyed unlock -> TaskbarManager and TaskbarSharedState's sysuiStateFlags are updated while the device is folded unfold -> TaskbarActivityContext is recreated and initialized which restores from the shared state's inAppDisplayProgressMultiPropValues. It also tries to reapply the shared state's sysuiStateFlags, but this doesn't update inAppDisplayProgressMultiPropValues because the state's "enabled" state is not updated (default is no flag set, and lockscreen sysui state is not set anymore). -> The restored inAppDisplayProgressMultiPropValues value results in the wrong translation. - Note that after the above, the NavbarButtonsViewController state is actually correct and reflects the SysUI state, but the LauncherTaskbarUiController state is wrong. This CL tries to manually update the ui controller to the correct state when it is recreated. - CL also fixes a separate issue where LauncherTaskbarUIController could potentially overwrite the saved state progresses while restoring them due to the state callback being called Bug: 283346744 Test: Unfold -> Lockscreen -> Fold -> Unlock -> Unfold and ensure the buttons are translated correctly Signed-off-by: Winson Chung (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:ccd359d76c7f42d4fc799f19d54a66c7c2fa462a) Merged-In: I43e473faf4fa2a493b9705506e3755df8f6264e7 Change-Id: I43e473faf4fa2a493b9705506e3755df8f6264e7 --- .../taskbar/LauncherTaskbarUIController.java | 5 +++++ .../taskbar/NavbarButtonsViewController.java | 9 +++++++++ .../launcher3/taskbar/TaskbarActivityContext.java | 4 +--- .../launcher3/taskbar/TaskbarControllers.java | 13 +++++++++++++ 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java index ba6f1651ed..abf49eb195 100644 --- a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java +++ b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java @@ -50,6 +50,7 @@ import com.android.quickstep.util.GroupTask; import com.android.quickstep.views.RecentsView; import java.io.PrintWriter; +import java.util.Arrays; /** * A data source which integrates with a Launcher instance @@ -105,6 +106,10 @@ public class LauncherTaskbarUIController extends TaskbarUIController { // Restore the in-app display progress from before Taskbar was recreated. float[] prevProgresses = mControllers.getSharedState().inAppDisplayProgressMultiPropValues; + // Make a copy of the previous progress to set since updating the multiprop will update + // the property which also calls onInAppDisplayProgressChanged() which writes the current + // values into the shared state + prevProgresses = Arrays.copyOf(prevProgresses, prevProgresses.length); for (int i = 0; i < prevProgresses.length; i++) { mTaskbarInAppDisplayProgressMultiProp.get(i).setValue(prevProgresses[i]); } diff --git a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java index 9a9e0ba70c..9c463cb68c 100644 --- a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java +++ b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java @@ -923,6 +923,15 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT insetsInfo.setTouchableInsets(TOUCHABLE_INSETS_REGION); } + /** + * Called whenever a new ui controller is set, and should update anything that depends on the + * ui controller. + */ + public void onUiControllerChanged() { + updateNavButtonInAppDisplayProgressForSysui(); + updateNavButtonTranslationY(); + } + @Override public void dumpLogs(String prefix, PrintWriter pw) { pw.println(prefix + "NavbarButtonsViewController:"); diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java index 43feec716d..a1390aeabb 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java @@ -591,9 +591,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext { * Sets a new data-source for this taskbar instance */ public void setUIController(@NonNull TaskbarUIController uiController) { - mControllers.uiController.onDestroy(); - mControllers.uiController = uiController; - mControllers.uiController.init(mControllers); + mControllers.setUiController(uiController); } /** diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java index 66c2eb3314..d3f80e31cd 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java @@ -196,6 +196,19 @@ public class TaskbarControllers { mPostInitCallbacks.clear(); } + /** + * Sets the ui controller. + */ + public void setUiController(@NonNull TaskbarUIController newUiController) { + uiController.onDestroy(); + uiController = newUiController; + uiController.init(this); + uiController.updateStateForSysuiFlags(mSharedState.sysuiStateFlags); + + // Notify that the ui controller has changed + navbarButtonsViewController.onUiControllerChanged(); + } + @Nullable public TaskbarSharedState getSharedState() { // This should only be null if called before init() and after destroy(). From fb8a789fc9d1d1877c04f173f64998c5898e6463 Mon Sep 17 00:00:00 2001 From: Andrew Cole Date: Thu, 6 Jul 2023 09:18:33 -0700 Subject: [PATCH 3/3] Updating materialColorSurfaceContainerHighest color access For any view files applying the WidgetConatinerTheme via widgetsTheme they were incorrectly inheriting themes and skipping the AppTheme provided but only in light mode. In dark mode the WidgetContainerTheme.Dark was correctly inheriting the theme. To avoid a risky theme update for all widgetsThemes we just modify the color accessor to use @color instead of ?attr as these colors should not be attributes AFAIKT Bug: b/289305591 Test: Follow repro steps on the bug for smartspace (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:a9af3bd03db3c19a07a4015471ee5c83d364fd36) Merged-In: I26cc3239763f8eac3dfe5f094c6757692f46d1bc Change-Id: I26cc3239763f8eac3dfe5f094c6757692f46d1bc --- res/color-v31/surface.xml | 24 ------------------- res/drawable/add_item_dialog_background.xml | 2 +- .../button_top_rounded_bordered_ripple.xml | 2 +- 3 files changed, 2 insertions(+), 26 deletions(-) delete mode 100644 res/color-v31/surface.xml diff --git a/res/color-v31/surface.xml b/res/color-v31/surface.xml deleted file mode 100644 index da4571a61c..0000000000 --- a/res/color-v31/surface.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - diff --git a/res/drawable/add_item_dialog_background.xml b/res/drawable/add_item_dialog_background.xml index c3a82695c2..e279fa051a 100644 --- a/res/drawable/add_item_dialog_background.xml +++ b/res/drawable/add_item_dialog_background.xml @@ -1,7 +1,7 @@ - + diff --git a/res/drawable/button_top_rounded_bordered_ripple.xml b/res/drawable/button_top_rounded_bordered_ripple.xml index f15a4a0c5f..f5b68866cb 100644 --- a/res/drawable/button_top_rounded_bordered_ripple.xml +++ b/res/drawable/button_top_rounded_bordered_ripple.xml @@ -25,7 +25,7 @@ android:topRightRadius="12dp" android:bottomLeftRadius="4dp" android:bottomRightRadius="4dp" /> - +