diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index 7e230a3d9ea41..369968f3c33b4 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -300,6 +300,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. diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java index 16cbb7c368476..dbea34964329c 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 a2a129d2bbe01..625dd9ebfef8a 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 0c5e4bdca08d8..3788cf3316004 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 4267ec4ea98ce..d394d6311ba5e 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();