Merge "Fix potential crash loop" into nyc-dev
am: 619f468
* commit '619f4682a3ba41d1d39356f16c9b1ec394b01464':
Fix potential crash loop
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user