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

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

Merge "Correct sequencing of widget vs boot-complete broadcasts" into qt-dev

parents 2407da88 74e5b7de
Loading
Loading
Loading
Loading
+8 −0
Original line number Original line Diff line number Diff line
@@ -725,6 +725,14 @@ public class BroadcastDispatcher {
        final Dumper dumper = new Dumper(pw, queueName, dumpPackage, sdf);
        final Dumper dumper = new Dumper(pw, queueName, dumpPackage, sdf);
        boolean printed = false;
        boolean printed = false;


        dumper.setHeading("Currently in flight");
        dumper.setLabel("In-Flight Ordered Broadcast");
        if (mCurrentBroadcast != null) {
            dumper.dump(mCurrentBroadcast);
        } else {
            pw.println("  (null)");
        }

        dumper.setHeading("Active ordered broadcasts");
        dumper.setHeading("Active ordered broadcasts");
        dumper.setLabel("Active Ordered Broadcast");
        dumper.setLabel("Active Ordered Broadcast");
        for (Deferrals d : mAlarmBroadcasts) {
        for (Deferrals d : mAlarmBroadcasts) {
+21 −13
Original line number Original line Diff line number Diff line
@@ -559,7 +559,7 @@ class UserController implements Handler.Callback {
        // Spin up app widgets prior to boot-complete, so they can be ready promptly
        // Spin up app widgets prior to boot-complete, so they can be ready promptly
        mInjector.startUserWidgets(userId);
        mInjector.startUserWidgets(userId);


        Slog.i(TAG, "Sending BOOT_COMPLETE user #" + userId);
        Slog.i(TAG, "Posting BOOT_COMPLETED user #" + userId);
        // Do not report secondary users, runtime restarts or first boot/upgrade
        // Do not report secondary users, runtime restarts or first boot/upgrade
        if (userId == UserHandle.USER_SYSTEM
        if (userId == UserHandle.USER_SYSTEM
                && !mInjector.isRuntimeRestarted() && !mInjector.isFirstBootOrUpgrade()) {
                && !mInjector.isRuntimeRestarted() && !mInjector.isFirstBootOrUpgrade()) {
@@ -572,18 +572,26 @@ class UserController implements Handler.Callback {
        bootIntent.addFlags(Intent.FLAG_RECEIVER_NO_ABORT
        bootIntent.addFlags(Intent.FLAG_RECEIVER_NO_ABORT
                | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND
                | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND
                | Intent.FLAG_RECEIVER_OFFLOAD);
                | Intent.FLAG_RECEIVER_OFFLOAD);
        mInjector.broadcastIntent(bootIntent, null, new IIntentReceiver.Stub() {
        // Widget broadcasts are outbound via FgThread, so to guarantee sequencing
        // we also send the boot_completed broadcast from that thread.
        final int callingUid = Binder.getCallingUid();
        final int callingPid = Binder.getCallingPid();
        FgThread.getHandler().post(() -> {
            mInjector.broadcastIntent(bootIntent, null,
                    new IIntentReceiver.Stub() {
                        @Override
                        @Override
                        public void performReceive(Intent intent, int resultCode, String data,
                        public void performReceive(Intent intent, int resultCode, String data,
                                Bundle extras, boolean ordered, boolean sticky, int sendingUser)
                                Bundle extras, boolean ordered, boolean sticky, int sendingUser)
                                        throws RemoteException {
                                        throws RemoteException {
                        Slog.i(UserController.TAG, "Finished processing BOOT_COMPLETED for u" + userId);
                            Slog.i(UserController.TAG, "Finished processing BOOT_COMPLETED for u"
                                    + userId);
                            mBootCompleted = true;
                            mBootCompleted = true;
                        }
                        }
                    }, 0, null, null,
                    }, 0, null, null,
                    new String[]{android.Manifest.permission.RECEIVE_BOOT_COMPLETED},
                    new String[]{android.Manifest.permission.RECEIVE_BOOT_COMPLETED},
                    AppOpsManager.OP_NONE, null, true, false, MY_PID, SYSTEM_UID,
                    AppOpsManager.OP_NONE, null, true, false, MY_PID, SYSTEM_UID,
                Binder.getCallingUid(), Binder.getCallingPid(), userId);
                    callingUid, callingPid, userId);
        });
    }
    }


    int restartUser(final int userId, final boolean foreground) {
    int restartUser(final int userId, final boolean foreground) {