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

Commit ed162255 authored by Justin Klaassen's avatar Justin Klaassen Committed by android-build-merger
Browse files

Merge \\"Don\\'t activate Night display until user setup is complete\\" into...

Merge \\"Don\\'t activate Night display until user setup is complete\\" into nyc-mr1-dev am: 6028472b
am: 21558d12

Change-Id: Ib6b196dc54affb5e18580cdbff3b5c1016ab329b
parents 6bf0c56c 21558d12
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() {