diff options
| -rw-r--r-- | core/java/android/app/ISearchManager.aidl | 1 | ||||
| -rw-r--r-- | core/java/android/app/SearchManager.java | 18 | ||||
| -rw-r--r-- | core/java/android/server/search/SearchManagerService.java | 9 | ||||
| -rw-r--r-- | core/java/android/server/search/SearchableInfo.java | 15 | ||||
| -rw-r--r-- | core/java/android/server/search/Searchables.java | 16 | ||||
| -rw-r--r-- | core/res/res/values/attrs.xml | 5 | ||||
| -rw-r--r-- | tests/AndroidTests/src/com/android/unit_tests/SearchablesTest.java | 10 |
7 files changed, 69 insertions, 5 deletions
diff --git a/core/java/android/app/ISearchManager.aidl b/core/java/android/app/ISearchManager.aidl index 6c3617a..39eb4f1 100644 --- a/core/java/android/app/ISearchManager.aidl +++ b/core/java/android/app/ISearchManager.aidl @@ -22,4 +22,5 @@ import android.server.search.SearchableInfo; /** @hide */ interface ISearchManager { SearchableInfo getSearchableInfo(in ComponentName launchActivity, boolean globalSearch); + List<SearchableInfo> getSearchablesInGlobalSearch(); } diff --git a/core/java/android/app/SearchManager.java b/core/java/android/app/SearchManager.java index 76d780a..39f3bcd 100644 --- a/core/java/android/app/SearchManager.java +++ b/core/java/android/app/SearchManager.java @@ -30,6 +30,8 @@ import android.os.ServiceManager; import android.server.search.SearchableInfo; import android.view.KeyEvent; +import java.util.List; + /** * This class provides access to the system search services. * @@ -1655,4 +1657,20 @@ public class SearchManager return context.getContentResolver().query(uri, null, selection, selArgs, null); } + /** + * Returns a list of the searchable activities that can be included in global search. + * + * @return a list containing searchable information for all searchable activities + * that have the <code>exported</code> attribute set in their searchable + * meta-data. + * + * @hide because SearchableInfo is not part of the API. + */ + public static List<SearchableInfo> getSearchablesInGlobalSearch() { + try { + return sService.getSearchablesInGlobalSearch(); + } catch (RemoteException e) { + return null; + } + } } diff --git a/core/java/android/server/search/SearchManagerService.java b/core/java/android/server/search/SearchManagerService.java index f180823..03623d6 100644 --- a/core/java/android/server/search/SearchManagerService.java +++ b/core/java/android/server/search/SearchManagerService.java @@ -24,6 +24,8 @@ import android.content.Intent; import android.content.IntentFilter; import android.os.Handler; +import java.util.List; + /** * This is a simplified version of the Search Manager service. It no longer handles * presentation (UI). Its function is to maintain the map & list of "searchable" @@ -143,5 +145,12 @@ public class SearchManagerService extends ISearchManager.Stub return si; } + + /** + * Returns a list of the searchable activities that can be included in global search. + */ + public List<SearchableInfo> getSearchablesInGlobalSearch() { + return mSearchables.getSearchablesInGlobalSearchList(); + } } diff --git a/core/java/android/server/search/SearchableInfo.java b/core/java/android/server/search/SearchableInfo.java index a4a7827..aad7ae2 100644 --- a/core/java/android/server/search/SearchableInfo.java +++ b/core/java/android/server/search/SearchableInfo.java @@ -66,6 +66,7 @@ public final class SearchableInfo implements Parcelable { private int mSearchButtonText = 0; private int mSearchInputType = 0; private int mSearchImeOptions = 0; + private boolean mIncludeInGlobalSearch = false; private String mSuggestAuthority = null; private String mSuggestPath = null; private String mSuggestSelection = null; @@ -236,6 +237,8 @@ public final class SearchableInfo implements Parcelable { InputType.TYPE_TEXT_VARIATION_NORMAL); mSearchImeOptions = a.getInt(com.android.internal.R.styleable.Searchable_imeOptions, EditorInfo.IME_ACTION_SEARCH); + mIncludeInGlobalSearch = a.getBoolean( + com.android.internal.R.styleable.Searchable_includeInGlobalSearch, false); setSearchModeFlags(); if (DBG_INHIBIT_SUGGESTIONS == 0) { @@ -576,6 +579,16 @@ public final class SearchableInfo implements Parcelable { } /** + * Checks whether the searchable is exported. + * + * @return The value of the <code>exported</code> attribute, + * or <code>false</code> if the attribute is not set. + */ + public boolean shouldIncludeInGlobalSearch() { + return mIncludeInGlobalSearch; + } + + /** * Support for parcelable and aidl operations. */ public static final Parcelable.Creator<SearchableInfo> CREATOR @@ -606,6 +619,7 @@ public final class SearchableInfo implements Parcelable { mSearchButtonText = in.readInt(); mSearchInputType = in.readInt(); mSearchImeOptions = in.readInt(); + mIncludeInGlobalSearch = in.readInt() != 0; setSearchModeFlags(); mSuggestAuthority = in.readString(); @@ -644,6 +658,7 @@ public final class SearchableInfo implements Parcelable { dest.writeInt(mSearchButtonText); dest.writeInt(mSearchInputType); dest.writeInt(mSearchImeOptions); + dest.writeInt(mIncludeInGlobalSearch ? 1 : 0); dest.writeString(mSuggestAuthority); dest.writeString(mSuggestPath); diff --git a/core/java/android/server/search/Searchables.java b/core/java/android/server/search/Searchables.java index e338bd2..40d7449 100644 --- a/core/java/android/server/search/Searchables.java +++ b/core/java/android/server/search/Searchables.java @@ -44,6 +44,7 @@ public class Searchables { private HashMap<ComponentName, SearchableInfo> mSearchablesMap = null; private ArrayList<SearchableInfo> mSearchablesList = null; + private ArrayList<SearchableInfo> mSearchablesInGlobalSearchList = null; private SearchableInfo mDefaultSearchable = null; /** @@ -189,6 +190,8 @@ public class Searchables { = new HashMap<ComponentName, SearchableInfo>(); ArrayList<SearchableInfo> newSearchablesList = new ArrayList<SearchableInfo>(); + ArrayList<SearchableInfo> newSearchablesInGlobalSearchList + = new ArrayList<SearchableInfo>(); final PackageManager pm = mContext.getPackageManager(); @@ -208,6 +211,9 @@ public class Searchables { if (searchable != null) { newSearchablesList.add(searchable); newSearchablesMap.put(searchable.mSearchActivity, searchable); + if (searchable.shouldIncludeInGlobalSearch()) { + newSearchablesInGlobalSearchList.add(searchable); + } } } } @@ -219,8 +225,9 @@ public class Searchables { // Store a consistent set of new values synchronized (this) { - mSearchablesList = newSearchablesList; mSearchablesMap = newSearchablesMap; + mSearchablesList = newSearchablesList; + mSearchablesInGlobalSearchList = newSearchablesInGlobalSearchList; mDefaultSearchable = newDefaultSearchable; } } @@ -232,4 +239,11 @@ public class Searchables { ArrayList<SearchableInfo> result = new ArrayList<SearchableInfo>(mSearchablesList); return result; } + + /** + * Returns a list of the searchable activities that can be included in global search. + */ + public synchronized ArrayList<SearchableInfo> getSearchablesInGlobalSearchList() { + return new ArrayList<SearchableInfo>(mSearchablesInGlobalSearchList); + } } diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 922dd32..8195dcb 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -2785,6 +2785,11 @@ search suggestions. The default value is 0. <i>Optional attribute.</i> --> <attr name="searchSuggestThreshold" format="integer" /> + <!-- If provided and <code>true</code>, this searchable activity will be + included in any global lists of search targets. + The default value is <code>false</code>. <i>Optional attribute.</i>. --> + <attr name="includeInGlobalSearch" format="boolean" /> + </declare-styleable> <!-- In order to process special action keys during search, you must define them using diff --git a/tests/AndroidTests/src/com/android/unit_tests/SearchablesTest.java b/tests/AndroidTests/src/com/android/unit_tests/SearchablesTest.java index cdbe98b..743c979 100644 --- a/tests/AndroidTests/src/com/android/unit_tests/SearchablesTest.java +++ b/tests/AndroidTests/src/com/android/unit_tests/SearchablesTest.java @@ -153,6 +153,8 @@ public class SearchablesTest extends AndroidTestCase { int count = searchablesList.size(); assertTrue(count >= 1); // this isn't really a unit test checkSearchables(searchablesList); + ArrayList<SearchableInfo> global = searchables.getSearchablesInGlobalSearchList(); + checkSearchables(global); } /** @@ -166,10 +168,10 @@ public class SearchablesTest extends AndroidTestCase { Searchables searchables = new Searchables(mockContext); searchables.buildSearchableList(); ArrayList<SearchableInfo> searchablesList = searchables.getSearchablesList(); - if (searchablesList != null) { - int count = searchablesList.size(); - assertTrue(count == 0); - } + assertNotNull(searchablesList); + MoreAsserts.assertEmpty(searchablesList); + ArrayList<SearchableInfo> global = searchables.getSearchablesInGlobalSearchList(); + MoreAsserts.assertEmpty(global); } /** |
