diff options
| author | 2016-04-19 11:45:51 -0700 | |
|---|---|---|
| committer | 2016-04-19 11:45:51 -0700 | |
| commit | 42449786211591d097d0fbac72296534c4ab23b6 (patch) | |
| tree | 1b3230271ee4175bdc8409377e444f1d13ba4fbd | |
| parent | 8dd32a56f74b896b21895ec75d58fa415caa2c70 (diff) | |
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
3 files changed, 25 insertions, 3 deletions
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index 424d3557a5aa..2f7c55097929 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -126,6 +126,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. * @hide diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java index 4fca69ac31be..95ea2a561bbe 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 1e9db18aa6a3..3f9da4c154ea 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); |