diff options
| -rw-r--r-- | media/java/android/media/projection/MediaProjection.java | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/media/java/android/media/projection/MediaProjection.java b/media/java/android/media/projection/MediaProjection.java index 72cddc91f436..353556d70a19 100644 --- a/media/java/android/media/projection/MediaProjection.java +++ b/media/java/android/media/projection/MediaProjection.java @@ -50,6 +50,13 @@ public final class MediaProjection { private final Context mContext; private final Map<Callback, CallbackRecord> mCallbacks; + /** + * Store the WindowContext in a field. If it is a local variable, and it is garbage collected + * during a MediaProjection session, the WindowContainer listener no longer exists. + */ + @Nullable + private Context mWindowContext; + /** @hide */ public MediaProjection(Context context, IMediaProjection impl) { mCallbacks = new ArrayMap<Callback, CallbackRecord>(); @@ -162,11 +169,11 @@ public final class MediaProjection { */ private VirtualDisplayConfig.Builder buildMirroredVirtualDisplay(@NonNull String name, int width, int height, int dpi) { - Context windowContext = mContext.createWindowContext(mContext.getDisplayNoVerify(), + mWindowContext = mContext.createWindowContext(mContext.getDisplayNoVerify(), TYPE_APPLICATION, null /* options */); final VirtualDisplayConfig.Builder builder = new VirtualDisplayConfig.Builder(name, width, height, dpi); - builder.setWindowTokenClientToMirror(windowContext.getWindowContextToken()); + builder.setWindowTokenClientToMirror(mWindowContext.getWindowContextToken()); return builder; } |