diff options
5 files changed, 26 insertions, 2 deletions
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index 7e230a3d9ea4..369968f3c33b 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -301,6 +301,19 @@ public class ActivityManager { public static final int START_INTENT_NOT_RESOLVED = FIRST_START_FATAL_ERROR_CODE + 9; /** + * Result for IActivityManager.startAssistantActivity: active session is currently hidden. + * @hide + */ + public static final int START_ASSISTANT_HIDDEN_SESSION = FIRST_START_FATAL_ERROR_CODE + 10; + + /** + * Result for IActivityManager.startAssistantActivity: active session does not match + * the requesting token. + * @hide + */ + public static final int START_ASSISTANT_NOT_ACTIVE_SESSION = FIRST_START_FATAL_ERROR_CODE + 11; + + /** * Result for IActivityManaqer.startActivity: the activity was started * successfully as normal. * @hide diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java index 16cbb7c36847..dbea34964329 100644 --- a/core/java/android/app/Instrumentation.java +++ b/core/java/android/app/Instrumentation.java @@ -1953,6 +1953,12 @@ public class Instrumentation { case ActivityManager.START_VOICE_HIDDEN_SESSION: throw new IllegalStateException( "Cannot start voice activity on a hidden session"); + case ActivityManager.START_ASSISTANT_NOT_ACTIVE_SESSION: + throw new IllegalStateException( + "Session calling startAssistantActivity does not match active session"); + case ActivityManager.START_ASSISTANT_HIDDEN_SESSION: + throw new IllegalStateException( + "Cannot start assistant activity on a hidden session"); case ActivityManager.START_CANCELED: throw new AndroidRuntimeException("Activity could not be started for " + intent); diff --git a/core/java/android/service/voice/VoiceInteractionSession.java b/core/java/android/service/voice/VoiceInteractionSession.java index a2a129d2bbe0..625dd9ebfef8 100644 --- a/core/java/android/service/voice/VoiceInteractionSession.java +++ b/core/java/android/service/voice/VoiceInteractionSession.java @@ -235,6 +235,8 @@ public class VoiceInteractionSession implements KeyEvent.Callback, ComponentCall @Override public void hide() { + // Remove any pending messages to show the session + mHandlerCaller.removeMessages(MSG_SHOW); mHandlerCaller.sendMessage(mHandlerCaller.obtainMessage(MSG_HIDE)); } diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java index 0c5e4bdca08d..3788cf331600 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java @@ -16,6 +16,8 @@ package com.android.server.voiceinteraction; +import static android.app.ActivityManager.START_ASSISTANT_HIDDEN_SESSION; +import static android.app.ActivityManager.START_ASSISTANT_NOT_ACTIVE_SESSION; import static android.app.ActivityManager.START_VOICE_HIDDEN_SESSION; import static android.app.ActivityManager.START_VOICE_NOT_ACTIVE_SESSION; @@ -212,11 +214,11 @@ class VoiceInteractionManagerServiceImpl implements VoiceInteractionSessionConne try { if (mActiveSession == null || token != mActiveSession.mToken) { Slog.w(TAG, "startAssistantActivity does not match active session"); - return START_VOICE_NOT_ACTIVE_SESSION; + return START_ASSISTANT_NOT_ACTIVE_SESSION; } if (!mActiveSession.mShown) { Slog.w(TAG, "startAssistantActivity not allowed on hidden session"); - return START_VOICE_HIDDEN_SESSION; + return START_ASSISTANT_HIDDEN_SESSION; } intent = new Intent(intent); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionSessionConnection.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionSessionConnection.java index 4267ec4ea98c..d394d6311ba5 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionSessionConnection.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionSessionConnection.java @@ -453,6 +453,7 @@ final class VoiceInteractionSessionConnection implements ServiceConnection { mShowFlags = 0; mHaveAssistData = false; mAssistData.clear(); + mPendingShowCallbacks.clear(); if (mSession != null) { try { mSession.hide(); |