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

Commit 11cc1f16 authored by Adam Lesinski's avatar Adam Lesinski Committed by Anthony Hugh
Browse files

DO NOT MERGE: Set the appliance (tv/watch) in the configuration earlier

Some UI is displayed (boot/optimizing) before the configuration
has been completely set. This noteably happens for watches and
TVs because UIModeManagerService hasn't started yet.

UIModeManagerService is started earlier, and its dependency
TwilightService is loaded during the "all system services ready"
boot phase.

b/18388692

Change-Id: Iabdf8ac3eb04ebcb44779d752e19042769cc65c6
parent 104a29b6
Loading
Loading
Loading
Loading
+20 −7
Original line number Diff line number Diff line
@@ -156,7 +156,7 @@ final class UiModeManagerService extends SystemService {
    @Override
    public void onStart() {
        final Context context = getContext();
        mTwilightManager = getLocalService(TwilightManager.class);

        final PowerManager powerManager =
                (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        mWakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, TAG);
@@ -183,7 +183,11 @@ final class UiModeManagerService extends SystemService {
        mNightMode = Settings.Secure.getInt(context.getContentResolver(),
                Settings.Secure.UI_NIGHT_MODE, UiModeManager.MODE_NIGHT_AUTO);

        mTwilightManager.registerListener(mTwilightListener, mHandler);
        // Update the initial, static configurations.
        synchronized (this) {
            updateConfigurationLocked();
            sendConfigurationLocked();
        }

        publishBinderService(Context.UI_MODE_SERVICE, mService);
    }
@@ -292,15 +296,22 @@ final class UiModeManagerService extends SystemService {
                    pw.print(" mSetUiMode=0x"); pw.println(Integer.toHexString(mSetUiMode));
            pw.print("  mHoldingConfiguration="); pw.print(mHoldingConfiguration);
                    pw.print(" mSystemReady="); pw.println(mSystemReady);
            if (mTwilightManager != null) {
                // We may not have a TwilightManager.
                pw.print("  mTwilightService.getCurrentState()=");
                pw.println(mTwilightManager.getCurrentState());
            }
        }
    }

    @Override
    public void onBootPhase(int phase) {
        if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) {
            synchronized (mLock) {
                mTwilightManager = getLocalService(TwilightManager.class);
                if (mTwilightManager != null) {
                    mTwilightManager.registerListener(mTwilightListener, mHandler);
                }
                mSystemReady = true;
                mCarModeEnabled = mDockState == Intent.EXTRA_DOCK_STATE_CAR;
                updateComputedNightModeLocked();
@@ -626,11 +637,13 @@ final class UiModeManagerService extends SystemService {
    }

    private void updateComputedNightModeLocked() {
        if (mTwilightManager != null) {
            TwilightState state = mTwilightManager.getCurrentState();
            if (state != null) {
                mComputedNightMode = state.isNight();
            }
        }
    }


}
+4 −2
Original line number Diff line number Diff line
@@ -569,6 +569,10 @@ public final class SystemServer {
            }
        }

        // We start this here so that we update our configuration to set watch or television
        // as appropriate.
        mSystemServiceManager.startService(UiModeManagerService.class);

        try {
            mPackageManagerService.performBootDexOpt();
        } catch (Throwable e) {
@@ -834,8 +838,6 @@ public final class SystemServer {

            mSystemServiceManager.startService(TwilightService.class);

            mSystemServiceManager.startService(UiModeManagerService.class);

            mSystemServiceManager.startService(JobSchedulerService.class);

            if (!disableNonCoreServices) {