Build searchables list after boot

This avoids delaying the first launch of QuickSearchBox or Browser
after boot while SearchManagerService builds the searchables list.

Bug http://b/issue?id=2639863

Change-Id: Ia510204691ecf487a2008723fe8f6caaced86618
This commit is contained in:
Bjorn Bringert
2010-05-04 20:44:16 +01:00
parent 3bb5e4d322
commit 2c7b197a4a

View File

@@ -21,9 +21,12 @@ import com.android.internal.content.PackageMonitor;
import android.app.ISearchManager;
import android.app.SearchManager;
import android.app.SearchableInfo;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Process;
import android.util.Log;
import java.util.List;
@@ -51,17 +54,37 @@ public class SearchManagerService extends ISearchManager.Stub {
*/
public SearchManagerService(Context context) {
mContext = context;
mContext.registerReceiver(new BootCompletedReceiver(),
new IntentFilter(Intent.ACTION_BOOT_COMPLETED));
}
private synchronized Searchables getSearchables() {
if (mSearchables == null) {
Log.i(TAG, "Building list of searchable activities");
new MyPackageMonitor().register(mContext, true);
mSearchables = new Searchables(mContext);
mSearchables.buildSearchableList();
new MyPackageMonitor().register(mContext, true);
}
return mSearchables;
}
/**
* Creates the initial searchables list after boot.
*/
private final class BootCompletedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
new Thread() {
@Override
public void run() {
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
mContext.unregisterReceiver(BootCompletedReceiver.this);
getSearchables();
}
}.start();
}
}
/**
* Refreshes the "searchables" list when packages are added/removed.
*/