Merge "[MediaProjection] Store WindowContext in field" into sc-v2-dev

This commit is contained in:
Naomi Musgrave
2021-09-01 12:33:28 +00:00
committed by Android (Google) Code Review

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;
} }