Merge "Fix potential crash loop" into nyc-dev

am: 619f468

* commit '619f4682a3ba41d1d39356f16c9b1ec394b01464':
  Fix potential crash loop
This commit is contained in:
Makoto Onuki
2016-03-25 19:23:52 +00:00
committed by android-build-merger
2 changed files with 16 additions and 7 deletions

View File

@@ -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);

View File

@@ -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 {