diff options
author | Dianne Hackborn <hackbod@google.com> | 2014-10-08 17:43:48 -0700 |
---|---|---|
committer | Dianne Hackborn <hackbod@google.com> | 2014-10-09 10:37:19 -0700 |
commit | fdf5b35ab46639759d6389a4e2a4d5799cb6814b (patch) | |
tree | 2d8e17d3f7323290237308f40dccd5bdd7890f46 /core/java/android/app | |
parent | 5e5bc4b13cd1fc657da940c14e2333d8d3b18080 (diff) | |
download | frameworks_base-fdf5b35ab46639759d6389a4e2a4d5799cb6814b.zip frameworks_base-fdf5b35ab46639759d6389a4e2a4d5799cb6814b.tar.gz frameworks_base-fdf5b35ab46639759d6389a4e2a4d5799cb6814b.tar.bz2 |
Implement issue #17906468: Allow search request to fall back to global search
Change-Id: I04834b2a9f1ec4a68c6a3fed14da2f8dd93b3be7
Diffstat (limited to 'core/java/android/app')
-rw-r--r-- | core/java/android/app/Activity.java | 18 | ||||
-rw-r--r-- | core/java/android/app/ActivityManagerNative.java | 31 | ||||
-rw-r--r-- | core/java/android/app/IActivityManager.java | 4 | ||||
-rw-r--r-- | core/java/android/app/ISearchManager.aidl | 1 | ||||
-rw-r--r-- | core/java/android/app/SearchManager.java | 16 |
5 files changed, 65 insertions, 5 deletions
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 9f683e3..0e98175 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -3498,14 +3498,24 @@ public class Activity extends ContextThemeWrapper * <p>You can override this function to force global search, e.g. in response to a dedicated * search key, or to block search entirely (by simply returning false). * - * @return Returns {@code true} if search launched, and {@code false} if activity blocks it. - * The default implementation always returns {@code true}. + * <p>Note: when running in a {@link Configuration#UI_MODE_TYPE_TELEVISION}, the default + * implementation changes to simply return false and you must supply your own custom + * implementation if you want to support search.</p> + * + * @return Returns {@code true} if search launched, and {@code false} if the activity does + * not respond to search. The default implementation always returns {@code true}, except + * when in {@link Configuration#UI_MODE_TYPE_TELEVISION} mode where it returns false. * * @see android.app.SearchManager */ public boolean onSearchRequested() { - startSearch(null, false, null, false); - return true; + if ((getResources().getConfiguration().uiMode&Configuration.UI_MODE_TYPE_MASK) + != Configuration.UI_MODE_TYPE_TELEVISION) { + startSearch(null, false, null, false); + return true; + } else { + return false; + } } /** diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index 11470e3..6c67c09 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -1929,7 +1929,7 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM case IS_INTENT_SENDER_TARGETED_TO_PACKAGE_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IIntentSender r = IIntentSender.Stub.asInterface( - data.readStrongBinder()); + data.readStrongBinder()); boolean res = isIntentSenderTargetedToPackage(r); reply.writeNoException(); reply.writeInt(res ? 1 : 0); @@ -2102,6 +2102,18 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } + case LAUNCH_ASSIST_INTENT_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + Intent intent = Intent.CREATOR.createFromParcel(data); + int requestType = data.readInt(); + String hint = data.readString(); + int userHandle = data.readInt(); + boolean res = launchAssistIntent(intent, requestType, hint, userHandle); + reply.writeNoException(); + reply.writeInt(res ? 1 : 0); + return true; + } + case KILL_UID_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); int uid = data.readInt(); @@ -5039,6 +5051,23 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); } + public boolean launchAssistIntent(Intent intent, int requestType, String hint, int userHandle) + throws RemoteException { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + intent.writeToParcel(data, 0); + data.writeInt(requestType); + data.writeString(hint); + data.writeInt(userHandle); + mRemote.transact(LAUNCH_ASSIST_INTENT_TRANSACTION, data, reply, 0); + reply.readException(); + boolean res = reply.readInt() != 0; + data.recycle(); + reply.recycle(); + return res; + } + public void killUid(int uid, String reason) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java index aa5fea0..b72addf 100644 --- a/core/java/android/app/IActivityManager.java +++ b/core/java/android/app/IActivityManager.java @@ -417,6 +417,9 @@ public interface IActivityManager extends IInterface { public void reportAssistContextExtras(IBinder token, Bundle extras) throws RemoteException; + public boolean launchAssistIntent(Intent intent, int requestType, String hint, int userHandle) + throws RemoteException; + public void killUid(int uid, String reason) throws RemoteException; public void hang(IBinder who, boolean allowRestart) throws RemoteException; @@ -777,4 +780,5 @@ public interface IActivityManager extends IInterface { int RELEASE_SOME_ACTIVITIES_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+236; int BOOT_ANIMATION_COMPLETE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+237; int GET_TASK_DESCRIPTION_ICON_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+238; + int LAUNCH_ASSIST_INTENT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+239; } diff --git a/core/java/android/app/ISearchManager.aidl b/core/java/android/app/ISearchManager.aidl index 074d343..03e7ff4 100644 --- a/core/java/android/app/ISearchManager.aidl +++ b/core/java/android/app/ISearchManager.aidl @@ -31,4 +31,5 @@ interface ISearchManager { ComponentName getGlobalSearchActivity(); ComponentName getWebSearchActivity(); ComponentName getAssistIntent(int userHandle); + boolean launchAssistAction(int requestType, String hint, int userHandle); } diff --git a/core/java/android/app/SearchManager.java b/core/java/android/app/SearchManager.java index 4c253f3..a40b29a 100644 --- a/core/java/android/app/SearchManager.java +++ b/core/java/android/app/SearchManager.java @@ -989,4 +989,20 @@ public class SearchManager return null; } } + + /** + * Launch an assist action for the current top activity. + * @hide + */ + public boolean launchAssistAction(int requestType, String hint, int userHandle) { + try { + if (mService == null) { + return false; + } + return mService.launchAssistAction(requestType, hint, userHandle); + } catch (RemoteException re) { + Log.e(TAG, "launchAssistAction() failed: " + re); + return false; + } + } } |