From 42449786211591d097d0fbac72296534c4ab23b6 Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Tue, 19 Apr 2016 11:45:51 -0700 Subject: [PATCH] Throw better exception when startVoiceActivity fails Introduced new error codes so that Instrumentation can include the correct message in the exception. Bug: 28216630 Change-Id: I93ee77153cdad11fa208c74c28c6790db27c9753 --- core/java/android/app/ActivityManager.java | 13 +++++++++++++ core/java/android/app/Instrumentation.java | 11 ++++++++++- .../VoiceInteractionManagerServiceImpl.java | 4 ++-- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index 424d3557a5aaa..2f7c550979296 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -125,6 +125,19 @@ public class ActivityManager { */ public static final String META_HOME_ALTERNATE = "android.app.home.alternate"; + /** + * Result for IActivityManager.startVoiceActivity: active session is currently hidden. + * @hide + */ + public static final int START_VOICE_HIDDEN_SESSION = -10; + + /** + * Result for IActivityManager.startVoiceActivity: active session does not match + * the requesting token. + * @hide + */ + public static final int START_VOICE_NOT_ACTIVE_SESSION = -9; + /** * Result for IActivityManager.startActivity: trying to start a background user * activity that shouldn't be displayed for all users. diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java index 4fca69ac31be5..95ea2a561bbee 100644 --- a/core/java/android/app/Instrumentation.java +++ b/core/java/android/app/Instrumentation.java @@ -1797,7 +1797,7 @@ public class Instrumentation { if (res >= ActivityManager.START_SUCCESS) { return; } - + switch (res) { case ActivityManager.START_INTENT_NOT_RESOLVED: case ActivityManager.START_CLASS_NOT_FOUND: @@ -1820,6 +1820,15 @@ public class Instrumentation { case ActivityManager.START_NOT_VOICE_COMPATIBLE: throw new SecurityException( "Starting under voice control not allowed for: " + intent); + case ActivityManager.START_VOICE_NOT_ACTIVE_SESSION: + throw new IllegalStateException( + "Session calling startVoiceActivity does not match active session"); + case ActivityManager.START_VOICE_HIDDEN_SESSION: + throw new IllegalStateException( + "Cannot start voice activity on a hidden session"); + case ActivityManager.START_CANCELED: + throw new AndroidRuntimeException("Activity could not be started for " + + intent); default: throw new AndroidRuntimeException("Unknown error code " + res + " when starting " + intent); diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java index 1e9db18aa6a38..3f9da4c154ea5 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java @@ -183,11 +183,11 @@ class VoiceInteractionManagerServiceImpl implements VoiceInteractionSessionConne try { if (mActiveSession == null || token != mActiveSession.mToken) { Slog.w(TAG, "startVoiceActivity does not match active session"); - return ActivityManager.START_CANCELED; + return ActivityManager.START_VOICE_NOT_ACTIVE_SESSION; } if (!mActiveSession.mShown) { Slog.w(TAG, "startVoiceActivity not allowed on hidden session"); - return ActivityManager.START_CANCELED; + return ActivityManager.START_VOICE_HIDDEN_SESSION; } intent = new Intent(intent); intent.addCategory(Intent.CATEGORY_VOICE);