Give SysUi top-app while playing charging anim
So that if the device is performing multiple tasks, the charging animation will be given priority and won't be janky. Test: manual Bug: 158678428 Change-Id: I02e31bdac3b46093a76e95e62f2abf4ee47cbb27
This commit is contained in:
@@ -207,12 +207,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
|
|||||||
/** Whether or not the BubbleStackView has been added to the WindowManager. */
|
/** Whether or not the BubbleStackView has been added to the WindowManager. */
|
||||||
private boolean mAddedToWindowManager = false;
|
private boolean mAddedToWindowManager = false;
|
||||||
|
|
||||||
/**
|
|
||||||
* Value from {@link NotificationShadeWindowController#getForceHasTopUi()} when we forced top UI
|
|
||||||
* due to expansion. We'll restore this value when the stack collapses.
|
|
||||||
*/
|
|
||||||
private boolean mHadTopUi = false;
|
|
||||||
|
|
||||||
// Listens to user switch so bubbles can be saved and restored.
|
// Listens to user switch so bubbles can be saved and restored.
|
||||||
private final NotificationLockscreenUserManager mNotifUserManager;
|
private final NotificationLockscreenUserManager mNotifUserManager;
|
||||||
|
|
||||||
@@ -1303,7 +1297,7 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
|
|||||||
// Collapsing? Do this first before remaining steps.
|
// Collapsing? Do this first before remaining steps.
|
||||||
if (update.expandedChanged && !update.expanded) {
|
if (update.expandedChanged && !update.expanded) {
|
||||||
mStackView.setExpanded(false);
|
mStackView.setExpanded(false);
|
||||||
mNotificationShadeWindowController.setForceHasTopUi(mHadTopUi);
|
mNotificationShadeWindowController.setRequestTopUi(false, TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do removals, if any.
|
// Do removals, if any.
|
||||||
@@ -1393,8 +1387,7 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
|
|||||||
if (update.expandedChanged && update.expanded) {
|
if (update.expandedChanged && update.expanded) {
|
||||||
if (mStackView != null) {
|
if (mStackView != null) {
|
||||||
mStackView.setExpanded(true);
|
mStackView.setExpanded(true);
|
||||||
mHadTopUi = mNotificationShadeWindowController.getForceHasTopUi();
|
mNotificationShadeWindowController.setRequestTopUi(true, TAG);
|
||||||
mNotificationShadeWindowController.setForceHasTopUi(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2129,7 +2129,6 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
|
|||||||
private boolean mShowing;
|
private boolean mShowing;
|
||||||
private float mScrimAlpha;
|
private float mScrimAlpha;
|
||||||
private ResetOrientationData mResetOrientationData;
|
private ResetOrientationData mResetOrientationData;
|
||||||
private boolean mHadTopUi;
|
|
||||||
private final NotificationShadeWindowController mNotificationShadeWindowController;
|
private final NotificationShadeWindowController mNotificationShadeWindowController;
|
||||||
private final NotificationShadeDepthController mDepthController;
|
private final NotificationShadeDepthController mDepthController;
|
||||||
private final SysUiState mSysUiState;
|
private final SysUiState mSysUiState;
|
||||||
@@ -2397,8 +2396,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
|
|||||||
public void show() {
|
public void show() {
|
||||||
super.show();
|
super.show();
|
||||||
mShowing = true;
|
mShowing = true;
|
||||||
mHadTopUi = mNotificationShadeWindowController.getForceHasTopUi();
|
mNotificationShadeWindowController.setRequestTopUi(true, TAG);
|
||||||
mNotificationShadeWindowController.setForceHasTopUi(true);
|
|
||||||
mSysUiState.setFlag(SYSUI_STATE_GLOBAL_ACTIONS_SHOWING, true)
|
mSysUiState.setFlag(SYSUI_STATE_GLOBAL_ACTIONS_SHOWING, true)
|
||||||
.commitUpdate(mContext.getDisplayId());
|
.commitUpdate(mContext.getDisplayId());
|
||||||
|
|
||||||
@@ -2499,7 +2497,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
|
|||||||
dismissOverflow(true);
|
dismissOverflow(true);
|
||||||
dismissPowerOptions(true);
|
dismissPowerOptions(true);
|
||||||
if (mControlsUiController != null) mControlsUiController.hide();
|
if (mControlsUiController != null) mControlsUiController.hide();
|
||||||
mNotificationShadeWindowController.setForceHasTopUi(mHadTopUi);
|
mNotificationShadeWindowController.setRequestTopUi(false, TAG);
|
||||||
mDepthController.updateGlobalDialogVisibility(0, null /* view */);
|
mDepthController.updateGlobalDialogVisibility(0, null /* view */);
|
||||||
mSysUiState.setFlag(SYSUI_STATE_GLOBAL_ACTIONS_SHOWING, false)
|
mSysUiState.setFlag(SYSUI_STATE_GLOBAL_ACTIONS_SHOWING, false)
|
||||||
.commitUpdate(mContext.getDisplayId());
|
.commitUpdate(mContext.getDisplayId());
|
||||||
|
|||||||
@@ -61,6 +61,8 @@ import java.lang.ref.WeakReference;
|
|||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -432,7 +434,7 @@ public class NotificationShadeWindowController implements Callback, Dumpable,
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void applyHasTopUi(State state) {
|
private void applyHasTopUi(State state) {
|
||||||
mHasTopUiChanged = state.mForceHasTopUi || isExpanded(state);
|
mHasTopUiChanged = !state.mComponentsForcingTopUi.isEmpty() || isExpanded(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applyNotTouchable(State state) {
|
private void applyNotTouchable(State state) {
|
||||||
@@ -635,12 +637,17 @@ public class NotificationShadeWindowController implements Callback, Dumpable,
|
|||||||
apply(mCurrentState);
|
apply(mCurrentState);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getForceHasTopUi() {
|
/**
|
||||||
return mCurrentState.mForceHasTopUi;
|
* SystemUI may need top-ui to avoid jank when performing animations. After the
|
||||||
}
|
* animation is performed, the component should remove itself from the list of features that
|
||||||
|
* are forcing SystemUI to be top-ui.
|
||||||
public void setForceHasTopUi(boolean forceHasTopUi) {
|
*/
|
||||||
mCurrentState.mForceHasTopUi = forceHasTopUi;
|
public void setRequestTopUi(boolean requestTopUi, String componentTag) {
|
||||||
|
if (requestTopUi) {
|
||||||
|
mCurrentState.mComponentsForcingTopUi.add(componentTag);
|
||||||
|
} else {
|
||||||
|
mCurrentState.mComponentsForcingTopUi.remove(componentTag);
|
||||||
|
}
|
||||||
apply(mCurrentState);
|
apply(mCurrentState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -663,7 +670,7 @@ public class NotificationShadeWindowController implements Callback, Dumpable,
|
|||||||
boolean mBackdropShowing;
|
boolean mBackdropShowing;
|
||||||
boolean mWallpaperSupportsAmbientMode;
|
boolean mWallpaperSupportsAmbientMode;
|
||||||
boolean mNotTouchable;
|
boolean mNotTouchable;
|
||||||
boolean mForceHasTopUi;
|
Set<String> mComponentsForcingTopUi = new HashSet<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The {@link StatusBar} state from the status bar.
|
* The {@link StatusBar} state from the status bar.
|
||||||
|
|||||||
@@ -213,7 +213,6 @@ import com.android.systemui.statusbar.notification.stack.NotificationListContain
|
|||||||
import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
|
import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
|
||||||
import com.android.systemui.statusbar.phone.dagger.StatusBarPhoneModule;
|
import com.android.systemui.statusbar.phone.dagger.StatusBarPhoneModule;
|
||||||
import com.android.systemui.statusbar.policy.BatteryController;
|
import com.android.systemui.statusbar.policy.BatteryController;
|
||||||
import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;
|
|
||||||
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
|
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
|
||||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||||
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
|
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
|
||||||
@@ -2397,18 +2396,31 @@ public class StatusBar extends SystemUI implements DemoMode,
|
|||||||
new WirelessChargingAnimation.Callback() {
|
new WirelessChargingAnimation.Callback() {
|
||||||
@Override
|
@Override
|
||||||
public void onAnimationStarting() {
|
public void onAnimationStarting() {
|
||||||
|
mNotificationShadeWindowController.setRequestTopUi(true, TAG);
|
||||||
CrossFadeHelper.fadeOut(mNotificationPanelViewController.getView(), 1);
|
CrossFadeHelper.fadeOut(mNotificationPanelViewController.getView(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAnimationEnded() {
|
public void onAnimationEnded() {
|
||||||
CrossFadeHelper.fadeIn(mNotificationPanelViewController.getView());
|
CrossFadeHelper.fadeIn(mNotificationPanelViewController.getView());
|
||||||
|
mNotificationShadeWindowController.setRequestTopUi(false, TAG);
|
||||||
}
|
}
|
||||||
}, mDozing).show(animationDelay);
|
}, mDozing).show(animationDelay);
|
||||||
} else {
|
} else {
|
||||||
// workspace
|
// workspace
|
||||||
WirelessChargingAnimation.makeWirelessChargingAnimation(mContext, null,
|
WirelessChargingAnimation.makeWirelessChargingAnimation(mContext, null,
|
||||||
transmittingBatteryLevel, batteryLevel, null, false).show(animationDelay);
|
transmittingBatteryLevel, batteryLevel,
|
||||||
|
new WirelessChargingAnimation.Callback() {
|
||||||
|
@Override
|
||||||
|
public void onAnimationStarting() {
|
||||||
|
mNotificationShadeWindowController.setRequestTopUi(true, TAG);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAnimationEnded() {
|
||||||
|
mNotificationShadeWindowController.setRequestTopUi(false, TAG);
|
||||||
|
}
|
||||||
|
}, false).show(animationDelay);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user