Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a9b4a906 authored by Dave Mankoff's avatar Dave Mankoff Committed by Automerger Merge Worker
Browse files

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

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

Change-Id: Ia8fa44bf9089919528d91ad5cc1074f72b48e543
parents 6154be7b d2455e0c
Loading
Loading
Loading
Loading
+85 −43
Original line number Diff line number Diff line
@@ -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);
    }

    /**
+39 −23
Original line number Diff line number Diff line
@@ -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();
+9 −5
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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 =
+5 −0
Original line number Diff line number Diff line
@@ -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();
Loading