Merge "Add dismissImmediate to ListPopupWindow to prevent window leaks in GlobalActionsDialog." into rvc-dev am: 82e9872732 am: 1b6a93a2a3

Change-Id: Idd2e1627a311a5ecc1717b25d11d2cbab9e63437
This commit is contained in:
Aran Ink
2020-04-27 18:23:32 +00:00
committed by Automerger Merge Worker
3 changed files with 18 additions and 6 deletions

View File

@@ -745,6 +745,15 @@ public class ListPopupWindow implements ShowableListMenu {
mHandler.removeCallbacks(mResizePopupRunnable);
}
/**
* Remove existing exit transition from PopupWindow and force immediate dismissal.
* @hide
*/
public void dismissImmediate() {
mPopup.setExitTransition(null);
dismiss();
}
/**
* Set a listener to receive a callback when the popup is dismissed.
*

View File

@@ -536,7 +536,7 @@ class ControlsUiControllerImpl @Inject constructor (
override fun hide() {
Log.d(ControlsUiController.TAG, "hide()")
hidden = true
popup?.dismiss()
popup?.dismissImmediate()
activeDialog?.dismiss()
ControlActionCoordinator.closeDialog()

View File

@@ -484,8 +484,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
*/
@VisibleForTesting
protected int getMaxShownPowerItems() {
// TODO: Overflow disabled on keyguard while we solve for touch blocking issues.
if (shouldUseControlsLayout() && !mKeyguardShowing) {
if (shouldUseControlsLayout()) {
return mResources.getInteger(com.android.systemui.R.integer.power_menu_max_columns);
} else {
return Integer.MAX_VALUE;
@@ -2246,7 +2245,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
mShowing = false;
resetOrientation();
dismissPanel();
dismissOverflow();
dismissOverflow(true);
if (mControlsUiController != null) mControlsUiController.hide();
mNotificationShadeWindowController.setForceHasTopUi(mHadTopUi);
mDepthController.updateGlobalDialogVisibility(0, null /* view */);
@@ -2259,9 +2258,13 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
}
}
private void dismissOverflow() {
private void dismissOverflow(boolean immediate) {
if (mOverflowPopup != null) {
mOverflowPopup.dismiss();
if (immediate) {
mOverflowPopup.dismissImmediate();
} else {
mOverflowPopup.dismiss();
}
}
}