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

Commit e1a996e9 authored by Dianne Hackborn's avatar Dianne Hackborn Committed by Android (Google) Code Review
Browse files

Merge "Move handling of package changes to a background thread."

parents ebd47751 d0d7503f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -69,7 +69,7 @@ public class SearchManagerService extends ISearchManager.Stub {
    private synchronized Searchables getSearchables() {
        if (mSearchables == null) {
            Log.i(TAG, "Building list of searchable activities");
            new MyPackageMonitor().register(mContext, true);
            new MyPackageMonitor().register(mContext, null, true);
            mSearchables = new Searchables(mContext);
            mSearchables.buildSearchableList();
        }
+1 −1
Original line number Diff line number Diff line
@@ -365,7 +365,7 @@ public class ActivityChooserModel extends DataSetObservable {
        } else {
            mHistoryFileName = historyFileName;
        }
        mPackageMonitor.register(mContext, true);
        mPackageMonitor.register(mContext, null, true);
    }

    /**
+2 −2
Original line number Diff line number Diff line
@@ -99,7 +99,7 @@ public class ResolverActivity extends AlertActivity implements
        ap.mTitle = title;
        ap.mOnClickListener = this;

        mPackageMonitor.register(this, false);
        mPackageMonitor.register(this, getMainLooper(), false);

        if (alwaysUseOption) {
            LayoutInflater inflater = (LayoutInflater) getSystemService(
@@ -135,7 +135,7 @@ public class ResolverActivity extends AlertActivity implements
    @Override
    protected void onRestart() {
        super.onRestart();
        mPackageMonitor.register(this, false);
        mPackageMonitor.register(this, getMainLooper(), false);
        mAdapter.handlePackagesChanged();
    }

+31 −6
Original line number Diff line number Diff line
@@ -21,6 +21,9 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;

import java.util.HashSet;

@@ -33,6 +36,10 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver {
    static final IntentFilter sNonDataFilt = new IntentFilter();
    static final IntentFilter sExternalFilt = new IntentFilter();

    static final Object sLock = new Object();
    static HandlerThread sBackgroundThread;
    static Handler sBackgroundHandler;

    static {
        sPackageFilt.addAction(Intent.ACTION_PACKAGE_ADDED);
        sPackageFilt.addAction(Intent.ACTION_PACKAGE_REMOVED);
@@ -49,6 +56,7 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver {
    final HashSet<String> mUpdatingPackages = new HashSet<String>();
    
    Context mRegisteredContext;
    Handler mRegisteredHandler;
    String[] mDisappearingPackages;
    String[] mAppearingPackages;
    String[] mModifiedPackages;
@@ -57,16 +65,33 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver {
    
    String[] mTempArray = new String[1];
    
    public void register(Context context, boolean externalStorage) {
    public void register(Context context, Looper thread, boolean externalStorage) {
        if (mRegisteredContext != null) {
            throw new IllegalStateException("Already registered");
        }
        mRegisteredContext = context;
        context.registerReceiver(this, sPackageFilt);
        context.registerReceiver(this, sNonDataFilt);
        if (thread == null) {
            synchronized (sLock) {
                if (sBackgroundThread == null) {
                    sBackgroundThread = new HandlerThread("PackageMonitor",
                            android.os.Process.THREAD_PRIORITY_BACKGROUND);
                    sBackgroundThread.start();
                    sBackgroundHandler = new Handler(sBackgroundThread.getLooper());
                }
                mRegisteredHandler = sBackgroundHandler;
            }
        } else {
            mRegisteredHandler = new Handler(thread);
        }
        context.registerReceiver(this, sPackageFilt, null, mRegisteredHandler);
        context.registerReceiver(this, sNonDataFilt, null, mRegisteredHandler);
        if (externalStorage) {
            context.registerReceiver(this, sExternalFilt);
            context.registerReceiver(this, sExternalFilt, null, mRegisteredHandler);
        }
    }

    public Handler getRegisteredHandler() {
        return mRegisteredHandler;
    }

    public void unregister() {
+1 −1
Original line number Diff line number Diff line
@@ -451,7 +451,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
    public DevicePolicyManagerService(Context context) {
        mContext = context;
        mMonitor = new MyPackageMonitor();
        mMonitor.register(context, true);
        mMonitor.register(context, null, true);
        mWakeLock = ((PowerManager)context.getSystemService(Context.POWER_SERVICE))
                .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "DPM");
        IntentFilter filter = new IntentFilter();
Loading