summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/service/voice/VoiceInteractionSession.java22
1 files changed, 21 insertions, 1 deletions
diff --git a/core/java/android/service/voice/VoiceInteractionSession.java b/core/java/android/service/voice/VoiceInteractionSession.java
index b783f6b8fd51..7d17093b2707 100644
--- a/core/java/android/service/voice/VoiceInteractionSession.java
+++ b/core/java/android/service/voice/VoiceInteractionSession.java
@@ -16,6 +16,7 @@
package android.service.voice;
+import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import android.annotation.CallbackExecutor;
@@ -38,6 +39,7 @@ import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.graphics.Region;
+import android.hardware.display.DisplayManager;
import android.os.Binder;
import android.os.Bundle;
import android.os.CancellationSignal;
@@ -1043,15 +1045,33 @@ public class VoiceInteractionSession implements KeyEvent.Callback, ComponentCall
}
public VoiceInteractionSession(Context context, Handler handler) {
- mContext = context;
mHandlerCaller = new HandlerCaller(context, handler.getLooper(),
mCallbacks, true);
+ mContext = createWindowContextIfNeeded(context);
}
public Context getContext() {
return mContext;
}
+ private Context createWindowContextIfNeeded(Context context) {
+ try {
+ if (!context.isUiContext()) {
+ DisplayManager displayManager = context.getSystemService(DisplayManager.class);
+ if (displayManager != null) {
+ return context.createWindowContext(
+ displayManager.getDisplay(DEFAULT_DISPLAY),
+ WindowManager.LayoutParams.TYPE_VOICE_INTERACTION,
+ /* options= */ null);
+ }
+ }
+ return context;
+ } catch (RuntimeException e) {
+ Log.w(TAG, "Fail to createWindowContext, Exception = " + e);
+ return context;
+ }
+ }
+
void addRequest(Request req) {
synchronized (this) {
mActiveRequests.put(req.mInterface.asBinder(), req);