summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorJorim Jaggi <jjaggi@google.com>2015-07-06 16:18:11 -0700
committerJorim Jaggi <jjaggi@google.com>2015-07-08 22:26:24 +0000
commit165ce066b701ba0153000f0692bfc7032655d17d (patch)
treef557490ccff7c7dd1787fedd40540d6ccd35d5a3 /core
parent588932a53e63c0a7ee281dea22559c129b40eb99 (diff)
downloadframeworks_base-165ce066b701ba0153000f0692bfc7032655d17d.zip
frameworks_base-165ce066b701ba0153000f0692bfc7032655d17d.tar.gz
frameworks_base-165ce066b701ba0153000f0692bfc7032655d17d.tar.bz2
Fix assist for hardware long-press
Activating the assistant will now route through SysUI, so we have the logic whether to start an activity or to start a voice interaction session in one single place. Bug: 22201770 Change-Id: I0f4699533aea2a1e595ee25a844434c82f548c01
Diffstat (limited to 'core')
-rw-r--r--core/java/android/app/ISearchManager.aidl4
-rw-r--r--core/java/android/app/SearchManager.java49
-rw-r--r--core/java/com/android/internal/app/AssistUtils.java19
-rw-r--r--core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl4
-rw-r--r--core/java/com/android/internal/policy/PhoneWindow.java2
-rw-r--r--core/java/com/android/internal/statusbar/IStatusBar.aidl5
-rw-r--r--core/java/com/android/internal/statusbar/IStatusBarService.aidl6
7 files changed, 54 insertions, 35 deletions
diff --git a/core/java/android/app/ISearchManager.aidl b/core/java/android/app/ISearchManager.aidl
index 6094012..0d09e4a 100644
--- a/core/java/android/app/ISearchManager.aidl
+++ b/core/java/android/app/ISearchManager.aidl
@@ -30,6 +30,6 @@ interface ISearchManager {
List<ResolveInfo> getGlobalSearchActivities();
ComponentName getGlobalSearchActivity();
ComponentName getWebSearchActivity();
- ComponentName getAssistIntent(int userHandle);
- boolean launchAssistAction(String hint, int userHandle, in Bundle args);
+ void launchAssist(in Bundle args);
+ boolean launchLegacyAssist(String hint, int userHandle, in Bundle args);
}
diff --git a/core/java/android/app/SearchManager.java b/core/java/android/app/SearchManager.java
index 45799a1..9e32164 100644
--- a/core/java/android/app/SearchManager.java
+++ b/core/java/android/app/SearchManager.java
@@ -946,27 +946,9 @@ public class SearchManager
*
* @hide
*/
- public Intent getAssistIntent(Context context, boolean inclContext) {
- return getAssistIntent(context, inclContext, UserHandle.myUserId());
- }
-
- /**
- * Gets an intent for launching installed assistant activity, or null if not available.
- * @return The assist intent.
- *
- * @hide
- */
- public Intent getAssistIntent(Context context, boolean inclContext, int userHandle) {
+ public Intent getAssistIntent(boolean inclContext) {
try {
- if (mService == null) {
- return null;
- }
- ComponentName comp = mService.getAssistIntent(userHandle);
- if (comp == null) {
- return null;
- }
Intent intent = new Intent(Intent.ACTION_ASSIST);
- intent.setComponent(comp);
if (inclContext) {
IActivityManager am = ActivityManagerNative.getDefault();
Bundle extras = am.getAssistContextExtras(ActivityManager.ASSIST_CONTEXT_BASIC);
@@ -982,17 +964,38 @@ public class SearchManager
}
/**
- * Launch an assist action for the current top activity.
+ * Starts the assistant.
+ *
+ * @param args the args to pass to the assistant
+ *
+ * @hide
+ */
+ public void launchAssist(Bundle args) {
+ try {
+ if (mService == null) {
+ return;
+ }
+ mService.launchAssist(args);
+ } catch (RemoteException re) {
+ Log.e(TAG, "launchAssist() failed: " + re);
+ }
+ }
+
+ /**
+ * Starts the legacy assistant (i.e. the {@link Intent#ACTION_ASSIST}).
+ *
+ * @param args the args to pass to the assistant
+ *
* @hide
*/
- public boolean launchAssistAction(String hint, int userHandle, Bundle args) {
+ public boolean launchLegacyAssist(String hint, int userHandle, Bundle args) {
try {
if (mService == null) {
return false;
}
- return mService.launchAssistAction(hint, userHandle, args);
+ return mService.launchLegacyAssist(hint, userHandle, args);
} catch (RemoteException re) {
- Log.e(TAG, "launchAssistAction() failed: " + re);
+ Log.e(TAG, "launchAssist() failed: " + re);
return false;
}
}
diff --git a/core/java/com/android/internal/app/AssistUtils.java b/core/java/com/android/internal/app/AssistUtils.java
index b520384..6ba09c9 100644
--- a/core/java/com/android/internal/app/AssistUtils.java
+++ b/core/java/com/android/internal/app/AssistUtils.java
@@ -20,6 +20,9 @@ import android.app.SearchManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.provider.Settings;
@@ -42,9 +45,10 @@ public class AssistUtils {
ServiceManager.getService(Context.VOICE_INTERACTION_MANAGER_SERVICE));
}
- public void showSessionForActiveService(IVoiceInteractionSessionShowCallback showCallback) {
+ public void showSessionForActiveService(Bundle args,
+ IVoiceInteractionSessionShowCallback showCallback) {
try {
- mVoiceInteractionManagerService.showSessionForActiveService(showCallback);
+ mVoiceInteractionManagerService.showSessionForActiveService(args, showCallback);
} catch (RemoteException e) {
Log.w(TAG, "Failed to call showSessionForActiveService", e);
}
@@ -118,11 +122,14 @@ public class AssistUtils {
}
Intent intent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
- .getAssistIntent(mContext, false, userId);
- if (intent != null) {
- return intent.getComponent();
+ .getAssistIntent(false);
+ PackageManager pm = mContext.getPackageManager();
+ ResolveInfo info = pm.resolveActivityAsUser(intent, PackageManager.MATCH_DEFAULT_ONLY,
+ userId);
+ if (info != null) {
+ return new ComponentName(info.activityInfo.applicationInfo.packageName,
+ info.activityInfo.name);
}
-
return null;
}
diff --git a/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl
index 8cd9bab..7f54f50 100644
--- a/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl
+++ b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl
@@ -93,9 +93,11 @@ interface IVoiceInteractionManagerService {
* Shows the session for the currently active service. Used to start a new session from system
* affordances.
*
+ * @param args the bundle to pass as arguments to the voice interaction session
* @param showCallback callback to be notified when the session was shown
*/
- void showSessionForActiveService(IVoiceInteractionSessionShowCallback showCallback);
+ void showSessionForActiveService(in Bundle args,
+ IVoiceInteractionSessionShowCallback showCallback);
/**
* Hides the session from the active service, if it is showing.
diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java
index 0abd200..016d010 100644
--- a/core/java/com/android/internal/policy/PhoneWindow.java
+++ b/core/java/com/android/internal/policy/PhoneWindow.java
@@ -4419,7 +4419,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
Bundle args = new Bundle();
args.putInt(Intent.EXTRA_ASSIST_INPUT_DEVICE_ID, event.getDeviceId());
return ((SearchManager)getContext().getSystemService(Context.SEARCH_SERVICE))
- .launchAssistAction(null, UserHandle.myUserId(), args);
+ .launchLegacyAssist(null, UserHandle.myUserId(), args);
}
return result;
}
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl
index 0732add..c1645c3 100644
--- a/core/java/com/android/internal/statusbar/IStatusBar.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl
@@ -16,9 +16,11 @@
package com.android.internal.statusbar;
-import com.android.internal.statusbar.StatusBarIcon;
+import android.os.Bundle;
import android.service.notification.StatusBarNotification;
+import com.android.internal.statusbar.StatusBarIcon;
+
/** @hide */
oneway interface IStatusBar
{
@@ -66,5 +68,6 @@ oneway interface IStatusBar
void appTransitionStarting(long statusBarAnimationsStartTime, long statusBarAnimationsDuration);
void showAssistDisclosure();
+ void startAssist(in Bundle args);
}
diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
index 63bfbe5..7db2cc9 100644
--- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
@@ -16,11 +16,13 @@
package com.android.internal.statusbar;
+import android.os.Bundle;
+import android.service.notification.StatusBarNotification;
+
import com.android.internal.statusbar.IStatusBar;
import com.android.internal.statusbar.StatusBarIcon;
import com.android.internal.statusbar.StatusBarIconList;
import com.android.internal.statusbar.NotificationVisibility;
-import android.service.notification.StatusBarNotification;
/** @hide */
interface IStatusBarService
@@ -86,4 +88,6 @@ interface IStatusBarService
* bar caused by this app transition in millis
*/
void appTransitionStarting(long statusBarAnimationsStartTime, long statusBarAnimationsDuration);
+
+ void startAssist(in Bundle args);
}