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

Commit 6028472b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Don't activate Night display until user setup is complete" into nyc-mr1-dev

parents 06f13cba 2696d999
Loading
Loading
Loading
Loading
+63 −33
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.os.UserHandle;
@@ -56,7 +58,10 @@ public final class NightDisplayService extends SystemService
        0,      0,      0, 1
    };

    private final Handler mHandler;

    private int mCurrentUser = UserHandle.USER_NULL;
    private ContentObserver mUserSetupObserver;
    private boolean mBootCompleted;

    private NightDisplayController mController;
@@ -65,6 +70,7 @@ public final class NightDisplayService extends SystemService

    public NightDisplayService(Context context) {
        super(context);
        mHandler = new Handler(Looper.getMainLooper());
    }

    @Override
@@ -72,16 +78,24 @@ public final class NightDisplayService extends SystemService
        // Nothing to publish.
    }

    @Override
    public void onBootPhase(int phase) {
        if (phase == PHASE_BOOT_COMPLETED) {
            mBootCompleted = true;

            // Register listeners now that boot is complete.
            if (mCurrentUser != UserHandle.USER_NULL && mUserSetupObserver == null) {
                setUp();
            }
        }
    }

    @Override
    public void onStartUser(int userHandle) {
        super.onStartUser(userHandle);

        // Register listeners for the new user.
        if (mCurrentUser == UserHandle.USER_NULL) {
            mCurrentUser = userHandle;
            if (mBootCompleted) {
                setUpNightMode();
            }
            onUserChanged(userHandle);
        }
    }

@@ -89,44 +103,60 @@ public final class NightDisplayService extends SystemService
    public void onSwitchUser(int userHandle) {
        super.onSwitchUser(userHandle);

        // Unregister listeners for the old user.
        if (mBootCompleted && mCurrentUser != UserHandle.USER_NULL) {
            tearDownNightMode();
        }

        // Register listeners for the new user.
        mCurrentUser = userHandle;
        if (mBootCompleted) {
            setUpNightMode();
        }
        onUserChanged(userHandle);
    }

    @Override
    public void onStopUser(int userHandle) {
        super.onStopUser(userHandle);

        // Unregister listeners for the old user.
        if (mCurrentUser == userHandle) {
            if (mBootCompleted) {
                tearDownNightMode();
            onUserChanged(UserHandle.USER_NULL);
        }
    }
            mCurrentUser = UserHandle.USER_NULL;

    private void onUserChanged(int userHandle) {
        final ContentResolver cr = getContext().getContentResolver();

        if (mCurrentUser != UserHandle.USER_NULL) {
            if (mUserSetupObserver != null) {
                cr.unregisterContentObserver(mUserSetupObserver);
                mUserSetupObserver = null;
            } else if (mBootCompleted) {
                tearDown();
            }
        }

    @Override
    public void onBootPhase(int phase) {
        if (phase == PHASE_BOOT_COMPLETED) {
            mBootCompleted = true;
        mCurrentUser = userHandle;

            // Register listeners now that boot is complete.
        if (mCurrentUser != UserHandle.USER_NULL) {
                setUpNightMode();
            if (!isUserSetupCompleted(cr, mCurrentUser)) {
                mUserSetupObserver = new ContentObserver(mHandler) {
                    @Override
                    public void onChange(boolean selfChange, Uri uri) {
                        if (isUserSetupCompleted(cr, mCurrentUser)) {
                            cr.unregisterContentObserver(this);
                            mUserSetupObserver = null;

                            if (mBootCompleted) {
                                setUp();
                            }
                        }
                    }
                };
                cr.registerContentObserver(Secure.getUriFor(Secure.USER_SETUP_COMPLETE),
                        false /* notifyForDescendents */, mUserSetupObserver, mCurrentUser);
            } else if (mBootCompleted) {
                setUp();
            }
        }
    }

    private static boolean isUserSetupCompleted(ContentResolver cr, int userHandle) {
        return Secure.getIntForUser(cr, Secure.USER_SETUP_COMPLETE, 0, userHandle) == 1;
    }

    private void setUpNightMode() {
    private void setUp() {
        // Create a new controller for the current user and start listening for changes.
        mController = new NightDisplayController(getContext(), mCurrentUser);
        mController.setListener(this);
@@ -140,8 +170,11 @@ public final class NightDisplayService extends SystemService
        }
    }

    private void tearDownNightMode() {
    private void tearDown() {
        if (mController != null) {
            mController.setListener(null);
            mController = null;
        }

        if (mAutoMode != null) {
            mAutoMode.onStop();
@@ -149,7 +182,6 @@ public final class NightDisplayService extends SystemService
        }

        mIsActivated = null;
        mController = null;
    }

    @Override
@@ -324,13 +356,11 @@ public final class NightDisplayService extends SystemService
    private class TwilightAutoMode extends AutoMode implements TwilightListener {

        private final TwilightManager mTwilightManager;
        private final Handler mHandler;

        private boolean mIsNight;

        public TwilightAutoMode() {
            mTwilightManager = getLocalService(TwilightManager.class);
            mHandler = new Handler(Looper.getMainLooper());
        }

        private void updateActivated() {