diff --git a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java index 1e784c138c..fbf78ae1ee 100644 --- a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java +++ b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java @@ -66,9 +66,10 @@ public class LauncherTaskbarUIController extends TaskbarUIController { public static final int WIDGETS_PAGE_PROGRESS_INDEX = 2; public static final int SYSUI_SURFACE_PROGRESS_INDEX = 3; - private static final int DISPLAY_PROGRESS_COUNT = 4; + public static final int DISPLAY_PROGRESS_COUNT = 4; - private final AnimatedFloat mTaskbarInAppDisplayProgress = new AnimatedFloat(); + private final AnimatedFloat mTaskbarInAppDisplayProgress = new AnimatedFloat( + this::onInAppDisplayProgressChanged); private final MultiPropertyFactory mTaskbarInAppDisplayProgressMultiProp = new MultiPropertyFactory<>(mTaskbarInAppDisplayProgress, AnimatedFloat.VALUE, DISPLAY_PROGRESS_COUNT, Float::max); @@ -105,6 +106,12 @@ public class LauncherTaskbarUIController extends TaskbarUIController { mTaskbarLauncherStateController.updateStateForSysuiFlags( mControllers.getSharedState().sysuiStateFlags, true /* fromInit */); mLauncher.addOnDeviceProfileChangeListener(mOnDeviceProfileChangeListener); + + // Restore the in-app display progress from before Taskbar was recreated. + float[] prevProgresses = mControllers.getSharedState().inAppDisplayProgressMultiPropValues; + for (int i = 0; i < prevProgresses.length; i++) { + mTaskbarInAppDisplayProgressMultiProp.get(i).setValue(prevProgresses[i]); + } } @Override @@ -118,6 +125,18 @@ public class LauncherTaskbarUIController extends TaskbarUIController { updateTaskTransitionSpec(true); } + private void onInAppDisplayProgressChanged() { + if (mControllers != null) { + // Update our shared state so we can restore it if taskbar gets recreated. + for (int i = 0; i < DISPLAY_PROGRESS_COUNT; i++) { + mControllers.getSharedState().inAppDisplayProgressMultiPropValues[i] = + mTaskbarInAppDisplayProgressMultiProp.get(i).getValue(); + } + // Ensure nav buttons react to our latest state if necessary. + mControllers.navbarButtonsViewController.updateNavButtonTranslationY(); + } + } + @Override protected boolean isTaskbarTouchable() { return !(mTaskbarLauncherStateController.isAnimatingToLauncher() @@ -360,9 +379,10 @@ public class LauncherTaskbarUIController extends TaskbarUIController { public void dumpLogs(String prefix, PrintWriter pw) { super.dumpLogs(prefix, pw); - pw.println(String.format("%s\tTaskbar in-app display progress:", prefix)); + pw.println(String.format("%s\tTaskbar in-app display progress: %.2f", prefix, + mTaskbarInAppDisplayProgress.value)); mTaskbarInAppDisplayProgressMultiProp.dump( - prefix + "\t", + prefix + "\t\t", pw, "mTaskbarInAppDisplayProgressMultiProp", "MINUS_ONE_PAGE_PROGRESS_INDEX", diff --git a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java index fd19695311..352740fad3 100644 --- a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java +++ b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java @@ -159,6 +159,7 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT this::updateNavButtonTranslationY); private final AnimatedFloat mTaskbarNavButtonTranslationYForIme = new AnimatedFloat( this::updateNavButtonTranslationY); + private float mLastSetNavButtonTranslationY; // Used for System UI state updates that should translate the nav button for in-app display. private final AnimatedFloat mNavButtonInAppDisplayProgressForSysui = new AnimatedFloat( this::updateNavButtonInAppDisplayProgressForSysui); @@ -606,7 +607,10 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT } } - private void updateNavButtonTranslationY() { + /** + * Sets the translationY of the nav buttons based on the current device state. + */ + public void updateNavButtonTranslationY() { if (isPhoneButtonNavMode(mContext)) { return; } @@ -618,9 +622,10 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT && ((LauncherTaskbarUIController) uiController).shouldUseInAppLayout()) ? mTaskbarNavButtonTranslationYForInAppDisplay.value : 0; - mNavButtonsView.setTranslationY(normalTranslationY + mLastSetNavButtonTranslationY = normalTranslationY + imeAdjustmentTranslationY - + inAppDisplayAdjustmentTranslationY); + + inAppDisplayAdjustmentTranslationY; + mNavButtonsView.setTranslationY(mLastSetNavButtonTranslationY); } private void updateNavButtonColor() { @@ -924,6 +929,13 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT pw.println(prefix + "\tmFloatingRotationButtonBounds=" + mFloatingRotationButtonBounds); pw.println(prefix + "\tmSysuiStateFlags=" + QuickStepContract.getSystemUiStateString( mSysuiStateFlags)); + pw.println(prefix + "\tLast set nav button translationY=" + mLastSetNavButtonTranslationY); + pw.println(prefix + "\t\tmTaskbarNavButtonTranslationY=" + + mTaskbarNavButtonTranslationY.value); + pw.println(prefix + "\t\tmTaskbarNavButtonTranslationYForInAppDisplay=" + + mTaskbarNavButtonTranslationYForInAppDisplay.value); + pw.println(prefix + "\t\tmTaskbarNavButtonTranslationYForIme=" + + mTaskbarNavButtonTranslationYForIme.value); } private static String getStateString(int flags) { diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarSharedState.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarSharedState.java index 026eff7820..60929984e0 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarSharedState.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarSharedState.java @@ -15,6 +15,8 @@ */ package com.android.launcher3.taskbar; +import static com.android.launcher3.taskbar.LauncherTaskbarUIController.DISPLAY_PROGRESS_COUNT; + /** * State shared across different taskbar instance */ @@ -38,4 +40,7 @@ public class TaskbarSharedState { public boolean setupUIVisible = false; public boolean allAppsVisible = false; + + // LauncherTaskbarUIController#mTaskbarInAppDisplayProgressMultiProp + public float[] inAppDisplayProgressMultiPropValues = new float[DISPLAY_PROGRESS_COUNT]; }