Fix taskbar icon flicker and jump when transforming to hotseat
- Apply additional translation on TaskbarView to account for difference between taskbar icon to bottom spacing compared to hotseat icon to bottom spacing - Call updateIconAlignment outside of synchronizeNextDraw's then block, which get run after the synchronization Bug: 204850744 Test: manual Change-Id: Id65842f506eb342105082649446eb694cd5c33a4
This commit is contained in:
@@ -30,7 +30,6 @@ import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.launcher3.AbstractFloatingView;
|
||||
import com.android.launcher3.BaseQuickstepLauncher;
|
||||
import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.LauncherState;
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.statemanager.StateManager;
|
||||
@@ -407,18 +406,13 @@ import java.util.function.Supplier;
|
||||
boolean firstFrameVisChanged = (taskbarWillBeVisible && Float.compare(currentValue, 1) != 0)
|
||||
|| (!taskbarWillBeVisible && Float.compare(currentValue, 0) != 0);
|
||||
|
||||
updateIconAlignment(alignment);
|
||||
|
||||
// Sync the first frame where we swap taskbar and hotseat.
|
||||
if (firstFrameVisChanged && mCanSyncViews && !Utilities.IS_RUNNING_IN_TEST_HARNESS) {
|
||||
DeviceProfile dp = mLauncher.getDeviceProfile();
|
||||
|
||||
// Do all the heavy work before the sync.
|
||||
mControllers.taskbarViewController.createIconAlignmentControllerIfNotExists(dp);
|
||||
|
||||
ViewRootSync.synchronizeNextDraw(mLauncher.getHotseat(),
|
||||
mControllers.taskbarActivityContext.getDragLayer(),
|
||||
() -> updateIconAlignment(alignment));
|
||||
} else {
|
||||
updateIconAlignment(alignment);
|
||||
() -> {});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -204,16 +204,6 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the icon alignment controller if it does not already exist.
|
||||
* @param launcherDp Launcher device profile.
|
||||
*/
|
||||
public void createIconAlignmentControllerIfNotExists(DeviceProfile launcherDp) {
|
||||
if (mIconAlignControllerLazy == null) {
|
||||
mIconAlignControllerLazy = createIconAlignmentController(launcherDp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the taskbar icon alignment relative to Launcher hotseat icons
|
||||
* @param alignmentRatio [0, 1]
|
||||
@@ -221,7 +211,9 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
|
||||
* 1 => fully aligned
|
||||
*/
|
||||
public void setLauncherIconAlignment(float alignmentRatio, DeviceProfile launcherDp) {
|
||||
createIconAlignmentControllerIfNotExists(launcherDp);
|
||||
if (mIconAlignControllerLazy == null) {
|
||||
mIconAlignControllerLazy = createIconAlignmentController(launcherDp);
|
||||
}
|
||||
mIconAlignControllerLazy.setPlayFraction(alignmentRatio);
|
||||
if (alignmentRatio <= 0 || alignmentRatio >= 1) {
|
||||
// Cleanup lazy controller so that it is created again in next animation
|
||||
|
||||
Reference in New Issue
Block a user