Restore proper nav buttons translation when taskbar is recreated
Since mTaskbarInAppDisplayProgressMultiProp is set by various states
that are hard to query in init() (e.g. state of all apps, -1, widgets,
etc.), we store the last mTaskbarInAppDisplayProgressMultiProp in the
TaskbarSharedState and restore those values in init().
Also updated some debug logs in the dump.
Test: manual: from home screen, swipe down to quick settings and toggle
Dark theme, ensure nav buttons don't translate; do the same but over
launcher all apps
Flag: none
Fixes: 267325761
Change-Id: Ib8e6778582ed39c674cd3c1e95312e673659f6a7
diff --git a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java
index 95fea3e..b22e7c3 100644
--- a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java
@@ -66,9 +66,10 @@
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<AnimatedFloat> mTaskbarInAppDisplayProgressMultiProp =
new MultiPropertyFactory<>(mTaskbarInAppDisplayProgress,
AnimatedFloat.VALUE, DISPLAY_PROGRESS_COUNT, Float::max);
@@ -105,6 +106,12 @@
onStashedInAppChanged(mLauncher.getDeviceProfile());
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 @@
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()
@@ -364,9 +383,10 @@
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 84bf02e..f5cecaa 100644
--- a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java
@@ -159,6 +159,7 @@
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 @@
}
}
- 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 @@
&& ((LauncherTaskbarUIController) uiController).shouldUseInAppLayout())
? mTaskbarNavButtonTranslationYForInAppDisplay.value : 0;
- mNavButtonsView.setTranslationY(normalTranslationY
+ mLastSetNavButtonTranslationY = normalTranslationY
+ imeAdjustmentTranslationY
- + inAppDisplayAdjustmentTranslationY);
+ + inAppDisplayAdjustmentTranslationY;
+ mNavButtonsView.setTranslationY(mLastSetNavButtonTranslationY);
}
private void updateNavButtonColor() {
@@ -925,6 +930,13 @@
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 026eff7..6092998 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 boolean setupUIVisible = false;
public boolean allAppsVisible = false;
+
+ // LauncherTaskbarUIController#mTaskbarInAppDisplayProgressMultiProp
+ public float[] inAppDisplayProgressMultiPropValues = new float[DISPLAY_PROGRESS_COUNT];
}