summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--media/java/android/media/projection/MediaProjection.java11
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;
}