Merge "[MediaProjection] Store WindowContext in field" into sc-v2-dev am: 47431a3b73

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15684817

Change-Id: Ie6cb521003499eb22d267bdd20712fae29c962ee
This commit is contained in:
Naomi Musgrave
2021-09-01 12:43:22 +00:00
committed by Automerger Merge Worker

View File

@@ -50,6 +50,13 @@ public final class MediaProjection {
private final Context mContext; private final Context mContext;
private final Map<Callback, CallbackRecord> mCallbacks; 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 */ /** @hide */
public MediaProjection(Context context, IMediaProjection impl) { public MediaProjection(Context context, IMediaProjection impl) {
mCallbacks = new ArrayMap<Callback, CallbackRecord>(); mCallbacks = new ArrayMap<Callback, CallbackRecord>();
@@ -162,11 +169,11 @@ public final class MediaProjection {
*/ */
private VirtualDisplayConfig.Builder buildMirroredVirtualDisplay(@NonNull String name, private VirtualDisplayConfig.Builder buildMirroredVirtualDisplay(@NonNull String name,
int width, int height, int dpi) { int width, int height, int dpi) {
Context windowContext = mContext.createWindowContext(mContext.getDisplayNoVerify(), mWindowContext = mContext.createWindowContext(mContext.getDisplayNoVerify(),
TYPE_APPLICATION, null /* options */); TYPE_APPLICATION, null /* options */);
final VirtualDisplayConfig.Builder builder = new VirtualDisplayConfig.Builder(name, width, final VirtualDisplayConfig.Builder builder = new VirtualDisplayConfig.Builder(name, width,
height, dpi); height, dpi);
builder.setWindowTokenClientToMirror(windowContext.getWindowContextToken()); builder.setWindowTokenClientToMirror(mWindowContext.getWindowContextToken());
return builder; return builder;
} }