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

Commit 619f4682 authored by Makoto Onuki's avatar Makoto Onuki Committed by Android (Google) Code Review
Browse files

Merge "Fix potential crash loop" into nyc-dev

parents 5feb8cbc c5475d42
Loading
Loading
Loading
Loading
+8 −5
Original line number Original line Diff line number Diff line
@@ -26,6 +26,7 @@ import android.os.Looper;
import android.os.UserHandle;
import android.os.UserHandle;
import android.util.Slog;
import android.util.Slog;
import com.android.internal.os.BackgroundThread;
import com.android.internal.os.BackgroundThread;
import com.android.internal.util.Preconditions;


import java.util.HashSet;
import java.util.HashSet;


@@ -72,15 +73,17 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver {


    public void register(Context context, Looper thread, UserHandle user,
    public void register(Context context, Looper thread, UserHandle user,
            boolean externalStorage) {
            boolean externalStorage) {
        register(context, user, externalStorage,
                (thread == null) ? BackgroundThread.getHandler() : new Handler(thread));
    }

    public void register(Context context, UserHandle user,
        boolean externalStorage, Handler handler) {
        if (mRegisteredContext != null) {
        if (mRegisteredContext != null) {
            throw new IllegalStateException("Already registered");
            throw new IllegalStateException("Already registered");
        }
        }
        mRegisteredContext = context;
        mRegisteredContext = context;
        if (thread == null) {
        mRegisteredHandler = Preconditions.checkNotNull(handler);
            mRegisteredHandler = BackgroundThread.getHandler();
        } else {
            mRegisteredHandler = new Handler(thread);
        }
        if (user != null) {
        if (user != null) {
            context.registerReceiverAsUser(this, user, sPackageFilt, null, mRegisteredHandler);
            context.registerReceiverAsUser(this, user, sPackageFilt, null, mRegisteredHandler);
            context.registerReceiverAsUser(this, user, sNonDataFilt, null, mRegisteredHandler);
            context.registerReceiverAsUser(this, user, sNonDataFilt, null, mRegisteredHandler);
+8 −2
Original line number Original line Diff line number Diff line
@@ -42,6 +42,7 @@ import android.graphics.Rect;
import android.net.Uri;
import android.net.Uri;
import android.os.Binder;
import android.os.Binder;
import android.os.Bundle;
import android.os.Bundle;
import android.os.Handler;
import android.os.IInterface;
import android.os.IInterface;
import android.os.ParcelFileDescriptor;
import android.os.ParcelFileDescriptor;
import android.os.RemoteCallbackList;
import android.os.RemoteCallbackList;
@@ -54,6 +55,7 @@ import android.util.Slog;


import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.content.PackageMonitor;
import com.android.internal.content.PackageMonitor;
import com.android.internal.os.BackgroundThread;
import com.android.internal.util.Preconditions;
import com.android.internal.util.Preconditions;
import com.android.server.LocalServices;
import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.SystemService;
@@ -102,6 +104,8 @@ public class LauncherAppsService extends SystemService {


        private final MyPackageMonitor mPackageMonitor = new MyPackageMonitor();
        private final MyPackageMonitor mPackageMonitor = new MyPackageMonitor();


        private final Handler mCallbackHandler;

        public LauncherAppsImpl(Context context) {
        public LauncherAppsImpl(Context context) {
            mContext = context;
            mContext = context;
            mPm = mContext.getPackageManager();
            mPm = mContext.getPackageManager();
@@ -109,6 +113,7 @@ public class LauncherAppsService extends SystemService {
            mShortcutServiceInternal = Preconditions.checkNotNull(
            mShortcutServiceInternal = Preconditions.checkNotNull(
                    LocalServices.getService(ShortcutServiceInternal.class));
                    LocalServices.getService(ShortcutServiceInternal.class));
            mShortcutServiceInternal.addListener(mPackageMonitor);
            mShortcutServiceInternal.addListener(mPackageMonitor);
            mCallbackHandler = BackgroundThread.getHandler();
        }
        }


        @VisibleForTesting
        @VisibleForTesting
@@ -165,7 +170,7 @@ public class LauncherAppsService extends SystemService {
         * Register a receiver to watch for package broadcasts
         * Register a receiver to watch for package broadcasts
         */
         */
        private void startWatchingPackageBroadcasts() {
        private void startWatchingPackageBroadcasts() {
            mPackageMonitor.register(mContext, null, UserHandle.ALL, true);
            mPackageMonitor.register(mContext, UserHandle.ALL, true, mCallbackHandler);
        }
        }


        /**
        /**
@@ -550,8 +555,9 @@ public class LauncherAppsService extends SystemService {
            }
            }
        }
        }


        @VisibleForTesting
        void postToPackageMonitorHandler(Runnable r) {
        void postToPackageMonitorHandler(Runnable r) {
            mPackageMonitor.getRegisteredHandler().post(r);
            mCallbackHandler.post(r);
        }
        }


        private class MyPackageMonitor extends PackageMonitor implements ShortcutChangeListener {
        private class MyPackageMonitor extends PackageMonitor implements ShortcutChangeListener {