public static final int PHASE_THIRD_PARTY_APPS_CAN_START = 600;
/**
- * After receiving this boot phase, services must have finished all boot-related work.
+ * After receiving this boot phase, services can allow user interaction with the device.
+ * This phase occurs when boot has completed and the home application has started.
+ * System services may prefer to listen to this phase rather than registering a
+ * broadcast receiver for ACTION_BOOT_COMPLETED to reduce overall latency.
*/
- public static final int PHASE_BOOT_COMPLETE = 1000;
+ public static final int PHASE_BOOT_COMPLETED = 1000;
private final Context mContext;
Watchdog.getInstance().addThread(mHandler);
}
+ @Override
+ public void onBootPhase(int phase) {
+ if (phase == PHASE_BOOT_COMPLETED) {
+ // This is our early signal that the system thinks it has finished booting.
+ // However, the boot animation may still be running for a few more seconds
+ // since it is ultimately in charge of when it terminates.
+ // Defer transitioning into the boot completed state until the animation exits.
+ // We do this so that the screen does not start to dim prematurely before
+ // the user has actually had a chance to interact with the device.
+ startWatchingForBootAnimationFinished();
+ }
+ }
+
public void systemReady(IAppOpsService appOps) {
synchronized (mLock) {
mSystemReady = true;
mContext.registerReceiver(new BatteryReceiver(), filter, null, mHandler);
filter = new IntentFilter();
- filter.addAction(Intent.ACTION_BOOT_COMPLETED);
- filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
- mContext.registerReceiver(new BootCompletedReceiver(), filter, null, mHandler);
-
- filter = new IntentFilter();
filter.addAction(Intent.ACTION_DREAMING_STARTED);
filter.addAction(Intent.ACTION_DREAMING_STOPPED);
mContext.registerReceiver(new DreamReceiver(), filter, null, mHandler);
}
}
- private final class BootCompletedReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- // This is our early signal that the system thinks it has finished booting.
- // However, the boot animation may still be running for a few more seconds
- // since it is ultimately in charge of when it terminates.
- // Defer transitioning into the boot completed state until the animation exits.
- // We do this so that the screen does not start to dim prematurely before
- // the user has actually had a chance to interact with the device.
- startWatchingForBootAnimationFinished();
- }
- }
-
private final class DreamReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {