Merge "Remove listeners when destroying GlobalActionsDialog." into sc-dev am: d2455e0c75

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15000573

Change-Id: Ia8fa44bf9089919528d91ad5cc1074f72b48e543
This commit is contained in:
Dave Mankoff
2021-06-17 14:08:57 +00:00
committed by Automerger Merge Worker
6 changed files with 144 additions and 72 deletions

View File

@@ -30,6 +30,7 @@ import android.app.admin.DevicePolicyManager;
import android.app.trust.TrustManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.database.ContentObserver;
import android.graphics.drawable.Drawable;
@@ -113,48 +114,101 @@ public class GlobalActionsDialog extends GlobalActionsDialogLite
@VisibleForTesting
boolean mShowLockScreenCards = false;
private final KeyguardStateController.Callback mKeyguardStateControllerListener =
new KeyguardStateController.Callback() {
@Override
public void onUnlockedChanged() {
if (mDialog != null) {
ActionsDialog dialog = (ActionsDialog) mDialog;
boolean unlocked = mKeyguardStateController.isUnlocked();
if (dialog.mWalletViewController != null) {
dialog.mWalletViewController.onDeviceLockStateChanged(!unlocked);
}
if (unlocked) {
dialog.hideLockMessage();
}
}
}
};
private final ContentObserver mSettingsObserver = new ContentObserver(mMainHandler) {
@Override
public void onChange(boolean selfChange) {
onPowerMenuLockScreenSettingsChanged();
}
};
/**
* @param context everything needs a context :(
*/
@Inject
public GlobalActionsDialog(Context context, GlobalActionsManager windowManagerFuncs,
AudioManager audioManager, IDreamManager iDreamManager,
DevicePolicyManager devicePolicyManager, LockPatternUtils lockPatternUtils,
public GlobalActionsDialog(
Context context,
GlobalActionsManager windowManagerFuncs,
AudioManager audioManager,
IDreamManager iDreamManager,
DevicePolicyManager devicePolicyManager,
LockPatternUtils lockPatternUtils,
BroadcastDispatcher broadcastDispatcher,
TelephonyListenerManager telephonyListenerManager,
GlobalSettings globalSettings, SecureSettings secureSettings,
@Nullable Vibrator vibrator, @Main Resources resources,
ConfigurationController configurationController, ActivityStarter activityStarter,
KeyguardStateController keyguardStateController, UserManager userManager,
TrustManager trustManager, IActivityManager iActivityManager,
@Nullable TelecomManager telecomManager, MetricsLogger metricsLogger,
NotificationShadeDepthController depthController, SysuiColorExtractor colorExtractor,
GlobalSettings globalSettings,
SecureSettings secureSettings,
@Nullable Vibrator vibrator,
@Main Resources resources,
ConfigurationController configurationController,
ActivityStarter activityStarter,
KeyguardStateController keyguardStateController,
UserManager userManager,
TrustManager trustManager,
IActivityManager iActivityManager,
@Nullable TelecomManager telecomManager,
MetricsLogger metricsLogger,
NotificationShadeDepthController depthController,
SysuiColorExtractor colorExtractor,
IStatusBarService statusBarService,
NotificationShadeWindowController notificationShadeWindowController,
IWindowManager iWindowManager,
@Background Executor backgroundExecutor,
UiEventLogger uiEventLogger,
RingerModeTracker ringerModeTracker, SysUiState sysUiState, @Main Handler handler,
RingerModeTracker ringerModeTracker,
SysUiState sysUiState,
@Main Handler handler,
PackageManager packageManager,
StatusBar statusBar) {
super(context, windowManagerFuncs,
audioManager, iDreamManager,
devicePolicyManager, lockPatternUtils,
broadcastDispatcher, telephonyListenerManager,
globalSettings, secureSettings,
vibrator, resources,
super(context,
windowManagerFuncs,
audioManager,
iDreamManager,
devicePolicyManager,
lockPatternUtils,
broadcastDispatcher,
telephonyListenerManager,
globalSettings,
secureSettings,
vibrator,
resources,
configurationController,
keyguardStateController, userManager,
trustManager, iActivityManager,
telecomManager, metricsLogger,
depthController, colorExtractor,
keyguardStateController,
userManager,
trustManager,
iActivityManager,
telecomManager,
metricsLogger,
depthController,
colorExtractor,
statusBarService,
notificationShadeWindowController,
iWindowManager,
backgroundExecutor,
uiEventLogger,
null,
ringerModeTracker, sysUiState, handler, statusBar);
ringerModeTracker,
sysUiState,
handler,
packageManager,
statusBar);
mLockPatternUtils = lockPatternUtils;
mKeyguardStateController = keyguardStateController;
@@ -164,34 +218,22 @@ public class GlobalActionsDialog extends GlobalActionsDialogLite
mNotificationShadeWindowController = notificationShadeWindowController;
mSysUiState = sysUiState;
mActivityStarter = activityStarter;
keyguardStateController.addCallback(new KeyguardStateController.Callback() {
@Override
public void onUnlockedChanged() {
if (mDialog != null) {
ActionsDialog dialog = (ActionsDialog) mDialog;
boolean unlocked = mKeyguardStateController.isUnlocked();
if (dialog.mWalletViewController != null) {
dialog.mWalletViewController.onDeviceLockStateChanged(!unlocked);
}
if (unlocked) {
dialog.hideLockMessage();
}
}
}
});
mKeyguardStateController.addCallback(mKeyguardStateControllerListener);
// Listen for changes to show pay on the power menu while locked
onPowerMenuLockScreenSettingsChanged();
mGlobalSettings.registerContentObserver(
Settings.Secure.getUriFor(Settings.Secure.POWER_MENU_LOCKED_SHOW_CONTENT),
false /* notifyForDescendants */,
new ContentObserver(handler) {
@Override
public void onChange(boolean selfChange) {
onPowerMenuLockScreenSettingsChanged();
}
});
mSettingsObserver);
}
@Override
public void destroy() {
super.destroy();
mKeyguardStateController.removeCallback(mKeyguardStateControllerListener);
mGlobalSettings.unregisterContentObserver(mSettingsObserver);
}
/**

View File

@@ -177,6 +177,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
private final IDreamManager mDreamManager;
private final DevicePolicyManager mDevicePolicyManager;
private final LockPatternUtils mLockPatternUtils;
private final TelephonyListenerManager mTelephonyListenerManager;
private final KeyguardStateController mKeyguardStateController;
private final BroadcastDispatcher mBroadcastDispatcher;
protected final GlobalSettings mGlobalSettings;
@@ -308,25 +309,38 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
* @param context everything needs a context :(
*/
@Inject
public GlobalActionsDialogLite(Context context, GlobalActionsManager windowManagerFuncs,
AudioManager audioManager, IDreamManager iDreamManager,
DevicePolicyManager devicePolicyManager, LockPatternUtils lockPatternUtils,
public GlobalActionsDialogLite(
Context context,
GlobalActionsManager windowManagerFuncs,
AudioManager audioManager,
IDreamManager iDreamManager,
DevicePolicyManager devicePolicyManager,
LockPatternUtils lockPatternUtils,
BroadcastDispatcher broadcastDispatcher,
TelephonyListenerManager telephonyListenerManager,
GlobalSettings globalSettings, SecureSettings secureSettings,
@Nullable Vibrator vibrator, @Main Resources resources,
GlobalSettings globalSettings,
SecureSettings secureSettings,
@Nullable Vibrator vibrator,
@Main Resources resources,
ConfigurationController configurationController,
KeyguardStateController keyguardStateController, UserManager userManager,
TrustManager trustManager, IActivityManager iActivityManager,
@Nullable TelecomManager telecomManager, MetricsLogger metricsLogger,
NotificationShadeDepthController depthController, SysuiColorExtractor colorExtractor,
KeyguardStateController keyguardStateController,
UserManager userManager,
TrustManager trustManager,
IActivityManager iActivityManager,
@Nullable TelecomManager telecomManager,
MetricsLogger metricsLogger,
NotificationShadeDepthController depthController,
SysuiColorExtractor colorExtractor,
IStatusBarService statusBarService,
NotificationShadeWindowController notificationShadeWindowController,
IWindowManager iWindowManager,
@Background Executor backgroundExecutor,
UiEventLogger uiEventLogger,
GlobalActionsInfoProvider infoProvider,
RingerModeTracker ringerModeTracker, SysUiState sysUiState, @Main Handler handler,
RingerModeTracker ringerModeTracker,
SysUiState sysUiState,
@Main Handler handler,
PackageManager packageManager,
StatusBar statusBar) {
mContext = context;
mWindowManagerFuncs = windowManagerFuncs;
@@ -334,6 +348,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
mDreamManager = iDreamManager;
mDevicePolicyManager = devicePolicyManager;
mLockPatternUtils = lockPatternUtils;
mTelephonyListenerManager = telephonyListenerManager;
mKeyguardStateController = keyguardStateController;
mBroadcastDispatcher = broadcastDispatcher;
mGlobalSettings = globalSettings;
@@ -356,7 +371,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
mRingerModeTracker = ringerModeTracker;
mSysUiState = sysUiState;
mMainHandler = handler;
mSmallestScreenWidthDp = mContext.getResources().getConfiguration().smallestScreenWidthDp;
mSmallestScreenWidthDp = resources.getConfiguration().smallestScreenWidthDp;
mStatusBar = statusBar;
// receive broadcasts
@@ -366,11 +381,10 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
filter.addAction(TelephonyManager.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED);
mBroadcastDispatcher.registerReceiver(mBroadcastReceiver, filter);
mHasTelephony =
context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
mHasTelephony = packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
// get notified of phone state changes
telephonyListenerManager.addServiceStateListener(mPhoneStateListener);
mTelephonyListenerManager.addServiceStateListener(mPhoneStateListener);
mGlobalSettings.registerContentObserver(
Settings.Global.getUriFor(Settings.Global.AIRPLANE_MODE_ON), true,
mAirplaneModeObserver);
@@ -390,6 +404,16 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
mConfigurationController.addCallback(this);
}
/**
* Clean up callbacks
*/
public void destroy() {
mBroadcastDispatcher.unregisterReceiver(mBroadcastReceiver);
mTelephonyListenerManager.removeServiceStateListener(mPhoneStateListener);
mGlobalSettings.unregisterContentObserver(mAirplaneModeObserver);
mConfigurationController.removeCallback(this);
}
protected Context getContext() {
return mContext;
}
@@ -689,14 +713,6 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
mDialog.refreshDialog();
}
}
/**
* Clean up callbacks
*/
public void destroy() {
mConfigurationController.removeCallback(this);
}
/**
* Implements {@link GlobalActionsPanelPlugin.Callbacks#dismissGlobalActionsMenu()}, which is
* called when the quick access wallet requests dismissal.
@@ -2018,7 +2034,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
}
};
private ContentObserver mAirplaneModeObserver = new ContentObserver(mMainHandler) {
private final ContentObserver mAirplaneModeObserver = new ContentObserver(mMainHandler) {
@Override
public void onChange(boolean selfChange) {
onAirplaneModeChanged();

View File

@@ -32,7 +32,6 @@ import android.widget.TextView;
import com.android.internal.R;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.settingslib.Utils;
import com.android.systemui.Dependency;
import com.android.systemui.plugins.GlobalActions;
import com.android.systemui.scrim.ScrimDrawable;
import com.android.systemui.statusbar.BlurUtils;
@@ -52,19 +51,24 @@ public class GlobalActionsImpl implements GlobalActions, CommandQueue.Callbacks
private final KeyguardStateController mKeyguardStateController;
private final DeviceProvisionedController mDeviceProvisionedController;
private final BlurUtils mBlurUtils;
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
private final CommandQueue mCommandQueue;
private GlobalActionsDialogLite mGlobalActionsDialog;
private boolean mDisabled;
@Inject
public GlobalActionsImpl(Context context, CommandQueue commandQueue,
Lazy<GlobalActionsDialogLite> globalActionsDialogLazy, BlurUtils blurUtils) {
Lazy<GlobalActionsDialogLite> globalActionsDialogLazy, BlurUtils blurUtils,
KeyguardStateController keyguardStateController,
DeviceProvisionedController deviceProvisionedController,
KeyguardUpdateMonitor keyguardUpdateMonitor) {
mContext = context;
mGlobalActionsDialogLazy = globalActionsDialogLazy;
mKeyguardStateController = Dependency.get(KeyguardStateController.class);
mDeviceProvisionedController = Dependency.get(DeviceProvisionedController.class);
mKeyguardStateController = keyguardStateController;
mDeviceProvisionedController = deviceProvisionedController;
mCommandQueue = commandQueue;
mBlurUtils = blurUtils;
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mCommandQueue.addCallback(this);
}
@@ -83,7 +87,7 @@ public class GlobalActionsImpl implements GlobalActions, CommandQueue.Callbacks
mGlobalActionsDialog = mGlobalActionsDialogLazy.get();
mGlobalActionsDialog.showOrHideDialog(mKeyguardStateController.isShowing(),
mDeviceProvisionedController.isDeviceProvisioned());
Dependency.get(KeyguardUpdateMonitor.class).requestFaceAuth();
mKeyguardUpdateMonitor.requestFaceAuth();
}
@Override

View File

@@ -74,7 +74,7 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme
private final PageIndicator mPageIndicator;
private final View mPowerMenuLite;
private final boolean mShowPMLiteButton;
private GlobalActionsDialogLite mGlobalActionsDialog;
private final GlobalActionsDialogLite mGlobalActionsDialog;
private final UiEventLogger mUiEventLogger;
private final UserInfoController.OnUserInfoChangedListener mOnUserInfoChangedListener =

View File

@@ -30,6 +30,7 @@ import static org.mockito.Mockito.when;
import android.app.IActivityManager;
import android.app.admin.DevicePolicyManager;
import android.app.trust.TrustManager;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.Color;
import android.media.AudioManager;
@@ -109,6 +110,7 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase {
@Mock private RingerModeTracker mRingerModeTracker;
@Mock private RingerModeLiveData mRingerModeLiveData;
@Mock private SysUiState mSysUiState;
@Mock private PackageManager mPackageManager;
@Mock private Handler mHandler;
@Mock private UserContextProvider mUserContextProvider;
@Mock private StatusBar mStatusBar;
@@ -123,6 +125,8 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase {
when(mRingerModeTracker.getRingerMode()).thenReturn(mRingerModeLiveData);
when(mUserContextProvider.getUserContext()).thenReturn(mContext);
when(mResources.getConfiguration()).thenReturn(
getContext().getResources().getConfiguration());
mGlobalActionsDialogLite = new GlobalActionsDialogLite(mContext,
mWindowManagerFuncs,
@@ -154,6 +158,7 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase {
mRingerModeTracker,
mSysUiState,
mHandler,
mPackageManager,
mStatusBar
);
mGlobalActionsDialogLite.setZeroDialogPressDelayForTesting();

View File

@@ -33,6 +33,7 @@ import static org.mockito.Mockito.when;
import android.app.IActivityManager;
import android.app.admin.DevicePolicyManager;
import android.app.trust.TrustManager;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.content.res.Resources;
import android.graphics.Color;
@@ -124,6 +125,7 @@ public class GlobalActionsDialogTest extends SysuiTestCase {
@Mock GlobalActionsPanelPlugin.PanelViewController mWalletController;
@Mock private Handler mHandler;
@Mock private UserTracker mUserTracker;
@Mock private PackageManager mPackageManager;
@Mock private SecureSettings mSecureSettings;
@Mock private StatusBar mStatusBar;
@@ -136,6 +138,8 @@ public class GlobalActionsDialogTest extends SysuiTestCase {
allowTestableLooperAsMainThread();
when(mRingerModeTracker.getRingerMode()).thenReturn(mRingerModeLiveData);
when(mResources.getConfiguration()).thenReturn(
getContext().getResources().getConfiguration());
mGlobalActionsDialog = new GlobalActionsDialog(mContext,
mWindowManagerFuncs,
@@ -167,6 +171,7 @@ public class GlobalActionsDialogTest extends SysuiTestCase {
mRingerModeTracker,
mSysUiState,
mHandler,
mPackageManager,
mStatusBar
);
mGlobalActionsDialog.setZeroDialogPressDelayForTesting();