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

Commit bff66dca authored by Alex Stetson's avatar Alex Stetson
Browse files

Replace ACTION_USER_SWITCHED with UserTracker

ACTION_USER_SWITCHED only applies to the foreground user and will not
trigger for concurrent secondary users. By replacing this with
UserTracker, the switching logic can be modify to track what is relevant
for a given display/user.

Bug: 249831072
Test: atest SystemUIUnitTests
Change-Id: I6f5d482072ae92d7dda5e1753901b3f5dc521312
parent f1aaea75
Loading
Loading
Loading
Loading
+47 −53
Original line number Original line Diff line number Diff line
@@ -17,24 +17,25 @@
package com.android.systemui;
package com.android.systemui;


import android.app.AlertDialog;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.UserInfo;
import android.content.pm.UserInfo;
import android.os.UserHandle;
import android.os.UserHandle;
import android.util.Log;

import androidx.annotation.NonNull;


import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.UiEventLogger;
import com.android.internal.logging.UiEventLogger;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.qs.QSUserSwitcherEvent;
import com.android.systemui.qs.QSUserSwitcherEvent;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.statusbar.policy.UserSwitcherController;
import com.android.systemui.util.settings.SecureSettings;
import com.android.systemui.util.settings.SecureSettings;


import java.util.concurrent.Executor;

import javax.inject.Inject;
import javax.inject.Inject;


import dagger.assisted.Assisted;
import dagger.assisted.Assisted;
@@ -44,82 +45,75 @@ import dagger.assisted.AssistedInject;
/**
/**
 * Manages notification when a guest session is resumed.
 * Manages notification when a guest session is resumed.
 */
 */
public class GuestResumeSessionReceiver extends BroadcastReceiver {
public class GuestResumeSessionReceiver {

    private static final String TAG = GuestResumeSessionReceiver.class.getSimpleName();


    @VisibleForTesting
    @VisibleForTesting
    public static final String SETTING_GUEST_HAS_LOGGED_IN = "systemui.guest_has_logged_in";
    public static final String SETTING_GUEST_HAS_LOGGED_IN = "systemui.guest_has_logged_in";


    @VisibleForTesting
    @VisibleForTesting
    public AlertDialog mNewSessionDialog;
    public AlertDialog mNewSessionDialog;
    private final Executor mMainExecutor;
    private final UserTracker mUserTracker;
    private final UserTracker mUserTracker;
    private final SecureSettings mSecureSettings;
    private final SecureSettings mSecureSettings;
    private final BroadcastDispatcher mBroadcastDispatcher;
    private final ResetSessionDialog.Factory mResetSessionDialogFactory;
    private final ResetSessionDialog.Factory mResetSessionDialogFactory;
    private final GuestSessionNotification mGuestSessionNotification;
    private final GuestSessionNotification mGuestSessionNotification;


    @Inject
    @VisibleForTesting
    public GuestResumeSessionReceiver(
    public final UserTracker.Callback mUserChangedCallback =
            UserTracker userTracker,
            new UserTracker.Callback() {
            SecureSettings secureSettings,
            BroadcastDispatcher broadcastDispatcher,
            GuestSessionNotification guestSessionNotification,
            ResetSessionDialog.Factory resetSessionDialogFactory) {
        mUserTracker = userTracker;
        mSecureSettings = secureSettings;
        mBroadcastDispatcher = broadcastDispatcher;
        mGuestSessionNotification = guestSessionNotification;
        mResetSessionDialogFactory = resetSessionDialogFactory;
    }

    /**
     * Register this receiver with the {@link BroadcastDispatcher}
     */
    public void register() {
        IntentFilter f = new IntentFilter(Intent.ACTION_USER_SWITCHED);
        mBroadcastDispatcher.registerReceiver(this, f, null /* handler */, UserHandle.SYSTEM);
    }

                @Override
                @Override
    public void onReceive(Context context, Intent intent) {
                public void onUserChanged(int newUser, @NonNull Context userContext) {
        String action = intent.getAction();

        if (Intent.ACTION_USER_SWITCHED.equals(action)) {
                    cancelDialog();
                    cancelDialog();


            int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL);
            if (userId == UserHandle.USER_NULL) {
                Log.e(TAG, intent + " sent to " + TAG + " without EXTRA_USER_HANDLE");
                return;
            }

                    UserInfo currentUser = mUserTracker.getUserInfo();
                    UserInfo currentUser = mUserTracker.getUserInfo();
                    if (!currentUser.isGuest()) {
                    if (!currentUser.isGuest()) {
                        return;
                        return;
                    }
                    }


                    int guestLoginState = mSecureSettings.getIntForUser(
                    int guestLoginState = mSecureSettings.getIntForUser(
                    SETTING_GUEST_HAS_LOGGED_IN, 0, userId);
                            SETTING_GUEST_HAS_LOGGED_IN, 0, newUser);


                    if (guestLoginState == 0) {
                    if (guestLoginState == 0) {
                        // set 1 to indicate, 1st login
                        // set 1 to indicate, 1st login
                        guestLoginState = 1;
                        guestLoginState = 1;
                mSecureSettings.putIntForUser(SETTING_GUEST_HAS_LOGGED_IN, guestLoginState, userId);
                        mSecureSettings.putIntForUser(SETTING_GUEST_HAS_LOGGED_IN, guestLoginState,
                                newUser);
                    } else if (guestLoginState == 1) {
                    } else if (guestLoginState == 1) {
                        // set 2 to indicate, 2nd or later login
                        // set 2 to indicate, 2nd or later login
                        guestLoginState = 2;
                        guestLoginState = 2;
                mSecureSettings.putIntForUser(SETTING_GUEST_HAS_LOGGED_IN, guestLoginState, userId);
                        mSecureSettings.putIntForUser(SETTING_GUEST_HAS_LOGGED_IN, guestLoginState,
                                newUser);
                    }
                    }


                    mGuestSessionNotification.createPersistentNotification(currentUser,
                    mGuestSessionNotification.createPersistentNotification(currentUser,
                            (guestLoginState <= 1));
                            (guestLoginState <= 1));


                    if (guestLoginState > 1) {
                    if (guestLoginState > 1) {
                mNewSessionDialog = mResetSessionDialogFactory.create(userId);
                        mNewSessionDialog = mResetSessionDialogFactory.create(newUser);
                        mNewSessionDialog.show();
                        mNewSessionDialog.show();
                    }
                    }
                }
                }
            };

    @Inject
    public GuestResumeSessionReceiver(
            @Main Executor mainExecutor,
            UserTracker userTracker,
            SecureSettings secureSettings,
            GuestSessionNotification guestSessionNotification,
            ResetSessionDialog.Factory resetSessionDialogFactory) {
        mMainExecutor = mainExecutor;
        mUserTracker = userTracker;
        mSecureSettings = secureSettings;
        mGuestSessionNotification = guestSessionNotification;
        mResetSessionDialogFactory = resetSessionDialogFactory;
    }

    /**
     * Register this receiver with the {@link BroadcastDispatcher}
     */
    public void register() {
        mUserTracker.addCallback(mUserChangedCallback, mMainExecutor);
    }
    }


    private void cancelDialog() {
    private void cancelDialog() {
+14 −25
Original line number Original line Diff line number Diff line
@@ -26,10 +26,7 @@ import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_M
import android.annotation.IdRes;
import android.annotation.IdRes;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.Resources;
@@ -45,7 +42,6 @@ import android.hardware.graphics.common.DisplayDecorationSupport;
import android.os.Handler;
import android.os.Handler;
import android.os.SystemProperties;
import android.os.SystemProperties;
import android.os.Trace;
import android.os.Trace;
import android.os.UserHandle;
import android.provider.Settings.Secure;
import android.provider.Settings.Secure;
import android.util.DisplayUtils;
import android.util.DisplayUtils;
import android.util.Log;
import android.util.Log;
@@ -68,7 +64,6 @@ import androidx.annotation.VisibleForTesting;


import com.android.internal.util.Preconditions;
import com.android.internal.util.Preconditions;
import com.android.settingslib.Utils;
import com.android.settingslib.Utils;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.decor.CutoutDecorProviderFactory;
import com.android.systemui.decor.CutoutDecorProviderFactory;
@@ -128,7 +123,6 @@ public class ScreenDecorations implements CoreStartable, Tunable , Dumpable {
    private DisplayManager mDisplayManager;
    private DisplayManager mDisplayManager;
    @VisibleForTesting
    @VisibleForTesting
    protected boolean mIsRegistered;
    protected boolean mIsRegistered;
    private final BroadcastDispatcher mBroadcastDispatcher;
    private final Context mContext;
    private final Context mContext;
    private final Executor mMainExecutor;
    private final Executor mMainExecutor;
    private final TunerService mTunerService;
    private final TunerService mTunerService;
@@ -302,7 +296,6 @@ public class ScreenDecorations implements CoreStartable, Tunable , Dumpable {
    public ScreenDecorations(Context context,
    public ScreenDecorations(Context context,
            @Main Executor mainExecutor,
            @Main Executor mainExecutor,
            SecureSettings secureSettings,
            SecureSettings secureSettings,
            BroadcastDispatcher broadcastDispatcher,
            TunerService tunerService,
            TunerService tunerService,
            UserTracker userTracker,
            UserTracker userTracker,
            PrivacyDotViewController dotViewController,
            PrivacyDotViewController dotViewController,
@@ -312,7 +305,6 @@ public class ScreenDecorations implements CoreStartable, Tunable , Dumpable {
        mContext = context;
        mContext = context;
        mMainExecutor = mainExecutor;
        mMainExecutor = mainExecutor;
        mSecureSettings = secureSettings;
        mSecureSettings = secureSettings;
        mBroadcastDispatcher = broadcastDispatcher;
        mTunerService = tunerService;
        mTunerService = tunerService;
        mUserTracker = userTracker;
        mUserTracker = userTracker;
        mDotViewController = dotViewController;
        mDotViewController = dotViewController;
@@ -598,10 +590,7 @@ public class ScreenDecorations implements CoreStartable, Tunable , Dumpable {
            mColorInversionSetting.onChange(false);
            mColorInversionSetting.onChange(false);
            updateColorInversion(mColorInversionSetting.getValue());
            updateColorInversion(mColorInversionSetting.getValue());


            IntentFilter filter = new IntentFilter();
            mUserTracker.addCallback(mUserChangedCallback, mExecutor);
            filter.addAction(Intent.ACTION_USER_SWITCHED);
            mBroadcastDispatcher.registerReceiver(mUserSwitchIntentReceiver, filter,
                    mExecutor, UserHandle.ALL);
            mIsRegistered = true;
            mIsRegistered = true;
        } else {
        } else {
            mMainExecutor.execute(() -> mTunerService.removeTunable(this));
            mMainExecutor.execute(() -> mTunerService.removeTunable(this));
@@ -610,7 +599,7 @@ public class ScreenDecorations implements CoreStartable, Tunable , Dumpable {
                mColorInversionSetting.setListening(false);
                mColorInversionSetting.setListening(false);
            }
            }


            mBroadcastDispatcher.unregisterReceiver(mUserSwitchIntentReceiver);
            mUserTracker.removeCallback(mUserChangedCallback);
            mIsRegistered = false;
            mIsRegistered = false;
        }
        }
    }
    }
@@ -897,15 +886,15 @@ public class ScreenDecorations implements CoreStartable, Tunable , Dumpable {
        }
        }
    }
    }


    private final BroadcastReceiver mUserSwitchIntentReceiver = new BroadcastReceiver() {
    private final UserTracker.Callback mUserChangedCallback =
            new UserTracker.Callback() {
                @Override
                @Override
        public void onReceive(Context context, Intent intent) {
                public void onUserChanged(int newUser, @NonNull Context userContext) {
            int newUserId = mUserTracker.getUserId();
                    if (DEBUG) {
                    if (DEBUG) {
                Log.d(TAG, "UserSwitched newUserId=" + newUserId);
                        Log.d(TAG, "UserSwitched newUserId=" + newUser);
                    }
                    }
                    // update color inversion setting to the new user
                    // update color inversion setting to the new user
            mColorInversionSetting.setUserId(newUserId);
                    mColorInversionSetting.setUserId(newUser);
                    updateColorInversion(mColorInversionSetting.getValue());
                    updateColorInversion(mColorInversionSetting.getValue());
                }
                }
            };
            };
+11 −21
Original line number Original line Diff line number Diff line
@@ -33,7 +33,6 @@ import android.util.Log
import com.android.internal.annotations.VisibleForTesting
import com.android.internal.annotations.VisibleForTesting
import com.android.systemui.Dumpable
import com.android.systemui.Dumpable
import com.android.systemui.backup.BackupHelper
import com.android.systemui.backup.BackupHelper
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.controls.ControlStatus
import com.android.systemui.controls.ControlStatus
import com.android.systemui.controls.ControlsServiceInfo
import com.android.systemui.controls.ControlsServiceInfo
import com.android.systemui.controls.management.ControlsListingController
import com.android.systemui.controls.management.ControlsListingController
@@ -59,11 +58,10 @@ class ControlsControllerImpl @Inject constructor (
    private val uiController: ControlsUiController,
    private val uiController: ControlsUiController,
    private val bindingController: ControlsBindingController,
    private val bindingController: ControlsBindingController,
    private val listingController: ControlsListingController,
    private val listingController: ControlsListingController,
    private val broadcastDispatcher: BroadcastDispatcher,
    private val userFileManager: UserFileManager,
    private val userFileManager: UserFileManager,
    private val userTracker: UserTracker,
    optionalWrapper: Optional<ControlsFavoritePersistenceWrapper>,
    optionalWrapper: Optional<ControlsFavoritePersistenceWrapper>,
    dumpManager: DumpManager,
    dumpManager: DumpManager,
    userTracker: UserTracker
) : Dumpable, ControlsController {
) : Dumpable, ControlsController {


    companion object {
    companion object {
@@ -120,18 +118,15 @@ class ControlsControllerImpl @Inject constructor (
        userChanging = false
        userChanging = false
    }
    }


    private val userSwitchReceiver = object : BroadcastReceiver() {
    private val userTrackerCallback = object : UserTracker.Callback {
        override fun onReceive(context: Context, intent: Intent) {
        override fun onUserChanged(newUser: Int, userContext: Context) {
            if (intent.action == Intent.ACTION_USER_SWITCHED) {
            userChanging = true
            userChanging = true
                val newUser =
            val newUserHandle = UserHandle.of(newUser)
                        UserHandle.of(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, sendingUserId))
            if (currentUser == newUserHandle) {
                if (currentUser == newUser) {
                userChanging = false
                userChanging = false
                return
                return
            }
            }
                setValuesForUser(newUser)
            setValuesForUser(newUserHandle)
            }
        }
        }
    }
    }


@@ -233,12 +228,7 @@ class ControlsControllerImpl @Inject constructor (
        dumpManager.registerDumpable(javaClass.name, this)
        dumpManager.registerDumpable(javaClass.name, this)
        resetFavorites()
        resetFavorites()
        userChanging = false
        userChanging = false
        broadcastDispatcher.registerReceiver(
        userTracker.addCallback(userTrackerCallback, executor)
                userSwitchReceiver,
                IntentFilter(Intent.ACTION_USER_SWITCHED),
                executor,
                UserHandle.ALL
        )
        context.registerReceiver(
        context.registerReceiver(
            restoreFinishedReceiver,
            restoreFinishedReceiver,
            IntentFilter(BackupHelper.ACTION_RESTORE_FINISHED),
            IntentFilter(BackupHelper.ACTION_RESTORE_FINISHED),
@@ -250,7 +240,7 @@ class ControlsControllerImpl @Inject constructor (
    }
    }


    fun destroy() {
    fun destroy() {
        broadcastDispatcher.unregisterReceiver(userSwitchReceiver)
        userTracker.removeCallback(userTrackerCallback)
        context.unregisterReceiver(restoreFinishedReceiver)
        context.unregisterReceiver(restoreFinishedReceiver)
        listingController.removeCallback(listingCallback)
        listingController.removeCallback(listingCallback)
    }
    }
+0 −10
Original line number Original line Diff line number Diff line
@@ -19,7 +19,6 @@ package com.android.systemui.dagger;
import android.content.BroadcastReceiver;
import android.content.BroadcastReceiver;


import com.android.systemui.GuestResetOrExitSessionReceiver;
import com.android.systemui.GuestResetOrExitSessionReceiver;
import com.android.systemui.GuestResumeSessionReceiver;
import com.android.systemui.media.dialog.MediaOutputDialogReceiver;
import com.android.systemui.media.dialog.MediaOutputDialogReceiver;
import com.android.systemui.people.widget.PeopleSpaceWidgetPinnedReceiver;
import com.android.systemui.people.widget.PeopleSpaceWidgetPinnedReceiver;
import com.android.systemui.people.widget.PeopleSpaceWidgetProvider;
import com.android.systemui.people.widget.PeopleSpaceWidgetProvider;
@@ -101,15 +100,6 @@ public abstract class DefaultBroadcastReceiverBinder {
    public abstract BroadcastReceiver bindPeopleSpaceWidgetProvider(
    public abstract BroadcastReceiver bindPeopleSpaceWidgetProvider(
            PeopleSpaceWidgetProvider broadcastReceiver);
            PeopleSpaceWidgetProvider broadcastReceiver);


    /**
     *
     */
    @Binds
    @IntoMap
    @ClassKey(GuestResumeSessionReceiver.class)
    public abstract BroadcastReceiver bindGuestResumeSessionReceiver(
            GuestResumeSessionReceiver broadcastReceiver);

    /**
    /**
     *
     *
     */
     */
+15 −6
Original line number Original line Diff line number Diff line
@@ -29,12 +29,13 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter;
import android.hardware.display.AmbientDisplayConfiguration;
import android.hardware.display.AmbientDisplayConfiguration;
import android.os.SystemClock;
import android.os.SystemClock;
import android.os.UserHandle;
import android.text.format.Formatter;
import android.text.format.Formatter;
import android.util.IndentingPrintWriter;
import android.util.IndentingPrintWriter;
import android.util.Log;
import android.util.Log;
import android.view.Display;
import android.view.Display;


import androidx.annotation.NonNull;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.InstanceId;
import com.android.internal.logging.InstanceId;
import com.android.internal.logging.UiEvent;
import com.android.internal.logging.UiEvent;
@@ -100,6 +101,7 @@ public class DozeTriggers implements DozeMachine.Part {
    private final BroadcastDispatcher mBroadcastDispatcher;
    private final BroadcastDispatcher mBroadcastDispatcher;
    private final AuthController mAuthController;
    private final AuthController mAuthController;
    private final KeyguardStateController mKeyguardStateController;
    private final KeyguardStateController mKeyguardStateController;
    private final UserTracker mUserTracker;
    private final UiEventLogger mUiEventLogger;
    private final UiEventLogger mUiEventLogger;


    private long mNotificationPulseTime;
    private long mNotificationPulseTime;
@@ -110,6 +112,14 @@ public class DozeTriggers implements DozeMachine.Part {
    private boolean mWantTouchScreenSensors;
    private boolean mWantTouchScreenSensors;
    private boolean mWantSensors;
    private boolean mWantSensors;


    private final UserTracker.Callback mUserChangedCallback =
            new UserTracker.Callback() {
                @Override
                public void onUserChanged(int newUser, @NonNull Context userContext) {
                    mDozeSensors.onUserSwitched();
                }
            };

    @VisibleForTesting
    @VisibleForTesting
    public enum DozingUpdateUiEvent implements UiEventLogger.UiEventEnum {
    public enum DozingUpdateUiEvent implements UiEventLogger.UiEventEnum {
        @UiEvent(doc = "Dozing updated due to notification.")
        @UiEvent(doc = "Dozing updated due to notification.")
@@ -210,6 +220,7 @@ public class DozeTriggers implements DozeMachine.Part {
        mAuthController = authController;
        mAuthController = authController;
        mUiEventLogger = uiEventLogger;
        mUiEventLogger = uiEventLogger;
        mKeyguardStateController = keyguardStateController;
        mKeyguardStateController = keyguardStateController;
        mUserTracker = userTracker;
    }
    }


    @Override
    @Override
@@ -234,7 +245,7 @@ public class DozeTriggers implements DozeMachine.Part {
            return;
            return;
        }
        }
        mNotificationPulseTime = SystemClock.elapsedRealtime();
        mNotificationPulseTime = SystemClock.elapsedRealtime();
        if (!mConfig.pulseOnNotificationEnabled(UserHandle.USER_CURRENT)) {
        if (!mConfig.pulseOnNotificationEnabled(mUserTracker.getUserId())) {
            runIfNotNull(onPulseSuppressedListener);
            runIfNotNull(onPulseSuppressedListener);
            mDozeLog.tracePulseDropped("pulseOnNotificationsDisabled");
            mDozeLog.tracePulseDropped("pulseOnNotificationsDisabled");
            return;
            return;
@@ -490,12 +501,14 @@ public class DozeTriggers implements DozeMachine.Part {
        mBroadcastReceiver.register(mBroadcastDispatcher);
        mBroadcastReceiver.register(mBroadcastDispatcher);
        mDockManager.addListener(mDockEventListener);
        mDockManager.addListener(mDockEventListener);
        mDozeHost.addCallback(mHostCallback);
        mDozeHost.addCallback(mHostCallback);
        mUserTracker.addCallback(mUserChangedCallback, mContext.getMainExecutor());
    }
    }


    private void unregisterCallbacks() {
    private void unregisterCallbacks() {
        mBroadcastReceiver.unregister(mBroadcastDispatcher);
        mBroadcastReceiver.unregister(mBroadcastDispatcher);
        mDozeHost.removeCallback(mHostCallback);
        mDozeHost.removeCallback(mHostCallback);
        mDockManager.removeListener(mDockEventListener);
        mDockManager.removeListener(mDockEventListener);
        mUserTracker.removeCallback(mUserChangedCallback);
    }
    }


    private void stopListeningToAllTriggers() {
    private void stopListeningToAllTriggers() {
@@ -620,9 +633,6 @@ public class DozeTriggers implements DozeMachine.Part {
                requestPulse(DozeLog.PULSE_REASON_INTENT, false, /* performedProxCheck */
                requestPulse(DozeLog.PULSE_REASON_INTENT, false, /* performedProxCheck */
                        null /* onPulseSuppressedListener */);
                        null /* onPulseSuppressedListener */);
            }
            }
            if (Intent.ACTION_USER_SWITCHED.equals(intent.getAction())) {
                mDozeSensors.onUserSwitched();
            }
        }
        }


        public void register(BroadcastDispatcher broadcastDispatcher) {
        public void register(BroadcastDispatcher broadcastDispatcher) {
@@ -630,7 +640,6 @@ public class DozeTriggers implements DozeMachine.Part {
                return;
                return;
            }
            }
            IntentFilter filter = new IntentFilter(PULSE_ACTION);
            IntentFilter filter = new IntentFilter(PULSE_ACTION);
            filter.addAction(Intent.ACTION_USER_SWITCHED);
            broadcastDispatcher.registerReceiver(this, filter);
            broadcastDispatcher.registerReceiver(this, filter);
            mRegistered = true;
            mRegistered = true;
        }
        }
Loading