Loading core/java/android/server/search/SearchManagerService.java +39 −30 Original line number Diff line number Diff line Loading @@ -43,13 +43,13 @@ public class SearchManagerService extends ISearchManager.Stub { // Context that the service is running in. private final Context mContext; // This field is initialized in initialize(), and then never modified. // It is volatile since it can be accessed by multiple threads. private volatile Searchables mSearchables; // This field is initialized in ensureSearchablesCreated(), and then never modified. // Only accessed by ensureSearchablesCreated() and getSearchables() private Searchables mSearchables; // This field is initialized in initialize(), and then never modified. // It is volatile since it can be accessed by multiple threads. private volatile SearchDialogWrapper mSearchDialog; // This field is initialized in ensureSearchDialogCreated(), and then never modified. // Only accessed by ensureSearchDialogCreated() and getSearchDialog() private SearchDialogWrapper mSearchDialog; /** * Initializes the Search Manager service in the provided system context. Loading @@ -68,16 +68,18 @@ public class SearchManagerService extends ISearchManager.Stub { } /** * Initializes the search UI and the list of searchable activities. * Initializes the list of searchable activities and the search UI. */ void initialize() { mSearchables = createSearchables(); mSearchDialog = new SearchDialogWrapper(mContext); ensureSearchablesCreated(); ensureSearchDialogCreated(); } private Searchables createSearchables() { Searchables searchables = new Searchables(mContext); searchables.buildSearchableList(); private synchronized void ensureSearchablesCreated() { if (mSearchables != null) return; // already created mSearchables = new Searchables(mContext); mSearchables.buildSearchableList(); IntentFilter packageFilter = new IntentFilter(); packageFilter.addAction(Intent.ACTION_PACKAGE_ADDED); Loading @@ -85,8 +87,22 @@ public class SearchManagerService extends ISearchManager.Stub { packageFilter.addAction(Intent.ACTION_PACKAGE_CHANGED); packageFilter.addDataScheme("package"); mContext.registerReceiver(mPackageChangedReceiver, packageFilter); } private synchronized void ensureSearchDialogCreated() { if (mSearchDialog != null) return; return searchables; mSearchDialog = new SearchDialogWrapper(mContext); } private synchronized Searchables getSearchables() { ensureSearchablesCreated(); return mSearchables; } private synchronized SearchDialogWrapper getSearchDialog() { ensureSearchDialogCreated(); return mSearchDialog; } /** Loading @@ -102,9 +118,9 @@ public class SearchManagerService extends ISearchManager.Stub { Intent.ACTION_PACKAGE_CHANGED.equals(action)) { if (DBG) Log.d(TAG, "Got " + action); // Dismiss search dialog, since the search context may no longer be valid mSearchDialog.stopSearch(); getSearchDialog().stopSearch(); // Update list of searchable activities mSearchables.buildSearchableList(); getSearchables().buildSearchableList(); broadcastSearchablesChanged(); } } Loading Loading @@ -135,15 +151,14 @@ public class SearchManagerService extends ISearchManager.Stub { */ public SearchableInfo getSearchableInfo(final ComponentName launchActivity, final boolean globalSearch) { if (mSearchables == null) return null; if (globalSearch) { return mSearchables.getDefaultSearchable(); return getSearchables().getDefaultSearchable(); } else { if (launchActivity == null) { Log.e(TAG, "getSearchableInfo(), activity == null"); return null; } return mSearchables.getSearchableInfo(launchActivity); return getSearchables().getSearchableInfo(launchActivity); } } Loading @@ -151,8 +166,7 @@ public class SearchManagerService extends ISearchManager.Stub { * Returns a list of the searchable activities that can be included in global search. */ public List<SearchableInfo> getSearchablesInGlobalSearch() { if (mSearchables == null) return null; return mSearchables.getSearchablesInGlobalSearchList(); return getSearchables().getSearchablesInGlobalSearchList(); } /** Loading @@ -160,8 +174,7 @@ public class SearchManagerService extends ISearchManager.Stub { * Can be called from any thread. */ public List<SearchableInfo> getSearchablesForWebSearch() { if (mSearchables == null) return null; return mSearchables.getSearchablesForWebSearchList(); return getSearchables().getSearchablesForWebSearchList(); } /** Loading @@ -169,8 +182,7 @@ public class SearchManagerService extends ISearchManager.Stub { * Can be called from any thread. */ public SearchableInfo getDefaultSearchableForWebSearch() { if (mSearchables == null) return null; return mSearchables.getDefaultSearchableForWebSearch(); return getSearchables().getDefaultSearchableForWebSearch(); } /** Loading @@ -178,8 +190,7 @@ public class SearchManagerService extends ISearchManager.Stub { * Can be called from any thread. */ public void setDefaultWebSearch(final ComponentName component) { if (mSearchables == null) return; mSearchables.setDefaultWebSearch(component); getSearchables().setDefaultWebSearch(component); broadcastSearchablesChanged(); } Loading @@ -196,8 +207,7 @@ public class SearchManagerService extends ISearchManager.Stub { Bundle appSearchData, boolean globalSearch, ISearchManagerCallback searchManagerCallback) { if (mSearchDialog == null) return; mSearchDialog.startSearch(initialQuery, getSearchDialog().startSearch(initialQuery, selectInitialQuery, launchActivity, appSearchData, Loading @@ -209,8 +219,7 @@ public class SearchManagerService extends ISearchManager.Stub { * Cancels the search dialog. Can be called from any thread. */ public void stopSearch() { if (mSearchDialog == null) return; mSearchDialog.stopSearch(); getSearchDialog().stopSearch(); } } Loading
core/java/android/server/search/SearchManagerService.java +39 −30 Original line number Diff line number Diff line Loading @@ -43,13 +43,13 @@ public class SearchManagerService extends ISearchManager.Stub { // Context that the service is running in. private final Context mContext; // This field is initialized in initialize(), and then never modified. // It is volatile since it can be accessed by multiple threads. private volatile Searchables mSearchables; // This field is initialized in ensureSearchablesCreated(), and then never modified. // Only accessed by ensureSearchablesCreated() and getSearchables() private Searchables mSearchables; // This field is initialized in initialize(), and then never modified. // It is volatile since it can be accessed by multiple threads. private volatile SearchDialogWrapper mSearchDialog; // This field is initialized in ensureSearchDialogCreated(), and then never modified. // Only accessed by ensureSearchDialogCreated() and getSearchDialog() private SearchDialogWrapper mSearchDialog; /** * Initializes the Search Manager service in the provided system context. Loading @@ -68,16 +68,18 @@ public class SearchManagerService extends ISearchManager.Stub { } /** * Initializes the search UI and the list of searchable activities. * Initializes the list of searchable activities and the search UI. */ void initialize() { mSearchables = createSearchables(); mSearchDialog = new SearchDialogWrapper(mContext); ensureSearchablesCreated(); ensureSearchDialogCreated(); } private Searchables createSearchables() { Searchables searchables = new Searchables(mContext); searchables.buildSearchableList(); private synchronized void ensureSearchablesCreated() { if (mSearchables != null) return; // already created mSearchables = new Searchables(mContext); mSearchables.buildSearchableList(); IntentFilter packageFilter = new IntentFilter(); packageFilter.addAction(Intent.ACTION_PACKAGE_ADDED); Loading @@ -85,8 +87,22 @@ public class SearchManagerService extends ISearchManager.Stub { packageFilter.addAction(Intent.ACTION_PACKAGE_CHANGED); packageFilter.addDataScheme("package"); mContext.registerReceiver(mPackageChangedReceiver, packageFilter); } private synchronized void ensureSearchDialogCreated() { if (mSearchDialog != null) return; return searchables; mSearchDialog = new SearchDialogWrapper(mContext); } private synchronized Searchables getSearchables() { ensureSearchablesCreated(); return mSearchables; } private synchronized SearchDialogWrapper getSearchDialog() { ensureSearchDialogCreated(); return mSearchDialog; } /** Loading @@ -102,9 +118,9 @@ public class SearchManagerService extends ISearchManager.Stub { Intent.ACTION_PACKAGE_CHANGED.equals(action)) { if (DBG) Log.d(TAG, "Got " + action); // Dismiss search dialog, since the search context may no longer be valid mSearchDialog.stopSearch(); getSearchDialog().stopSearch(); // Update list of searchable activities mSearchables.buildSearchableList(); getSearchables().buildSearchableList(); broadcastSearchablesChanged(); } } Loading Loading @@ -135,15 +151,14 @@ public class SearchManagerService extends ISearchManager.Stub { */ public SearchableInfo getSearchableInfo(final ComponentName launchActivity, final boolean globalSearch) { if (mSearchables == null) return null; if (globalSearch) { return mSearchables.getDefaultSearchable(); return getSearchables().getDefaultSearchable(); } else { if (launchActivity == null) { Log.e(TAG, "getSearchableInfo(), activity == null"); return null; } return mSearchables.getSearchableInfo(launchActivity); return getSearchables().getSearchableInfo(launchActivity); } } Loading @@ -151,8 +166,7 @@ public class SearchManagerService extends ISearchManager.Stub { * Returns a list of the searchable activities that can be included in global search. */ public List<SearchableInfo> getSearchablesInGlobalSearch() { if (mSearchables == null) return null; return mSearchables.getSearchablesInGlobalSearchList(); return getSearchables().getSearchablesInGlobalSearchList(); } /** Loading @@ -160,8 +174,7 @@ public class SearchManagerService extends ISearchManager.Stub { * Can be called from any thread. */ public List<SearchableInfo> getSearchablesForWebSearch() { if (mSearchables == null) return null; return mSearchables.getSearchablesForWebSearchList(); return getSearchables().getSearchablesForWebSearchList(); } /** Loading @@ -169,8 +182,7 @@ public class SearchManagerService extends ISearchManager.Stub { * Can be called from any thread. */ public SearchableInfo getDefaultSearchableForWebSearch() { if (mSearchables == null) return null; return mSearchables.getDefaultSearchableForWebSearch(); return getSearchables().getDefaultSearchableForWebSearch(); } /** Loading @@ -178,8 +190,7 @@ public class SearchManagerService extends ISearchManager.Stub { * Can be called from any thread. */ public void setDefaultWebSearch(final ComponentName component) { if (mSearchables == null) return; mSearchables.setDefaultWebSearch(component); getSearchables().setDefaultWebSearch(component); broadcastSearchablesChanged(); } Loading @@ -196,8 +207,7 @@ public class SearchManagerService extends ISearchManager.Stub { Bundle appSearchData, boolean globalSearch, ISearchManagerCallback searchManagerCallback) { if (mSearchDialog == null) return; mSearchDialog.startSearch(initialQuery, getSearchDialog().startSearch(initialQuery, selectInitialQuery, launchActivity, appSearchData, Loading @@ -209,8 +219,7 @@ public class SearchManagerService extends ISearchManager.Stub { * Cancels the search dialog. Can be called from any thread. */ public void stopSearch() { if (mSearchDialog == null) return; mSearchDialog.stopSearch(); getSearchDialog().stopSearch(); } }