diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/ImmersiveModeConfirmation.java | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ImmersiveModeConfirmation.java b/packages/SystemUI/src/com/android/systemui/statusbar/ImmersiveModeConfirmation.java index 693cc4a659c7..2b9daef119fc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ImmersiveModeConfirmation.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ImmersiveModeConfirmation.java @@ -28,6 +28,9 @@ import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_M import static android.window.DisplayAreaOrganizer.FEATURE_UNDEFINED; import static android.window.DisplayAreaOrganizer.KEY_ROOT_DISPLAY_AREA_ID; +import static com.android.systemui.Flags.enableViewCaptureTracing; +import static com.android.systemui.util.ConvenienceExtensionsKt.toKotlinLazy; + import android.animation.ArgbEvaluator; import android.animation.ValueAnimator; import android.annotation.NonNull; @@ -73,12 +76,16 @@ import android.widget.Button; import android.widget.FrameLayout; import android.widget.RelativeLayout; +import com.android.app.viewcapture.ViewCapture; +import com.android.app.viewcapture.ViewCaptureAwareWindowManager; import com.android.systemui.CoreStartable; import com.android.systemui.res.R; import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.shared.system.TaskStackChangeListeners; import com.android.systemui.util.settings.SecureSettings; +import kotlin.Lazy; + import javax.inject.Inject; /** @@ -105,12 +112,12 @@ public class ImmersiveModeConfirmation implements CoreStartable, CommandQueue.Ca private final CommandQueue mCommandQueue; private ClingWindowView mClingWindow; - /** The last {@link WindowManager} that is used to add the confirmation window. */ + /** The wrapper on the last {@link WindowManager} used to add the confirmation window. */ @Nullable - private WindowManager mWindowManager; + private ViewCaptureAwareWindowManager mViewCaptureAwareWindowManager; /** - * The WindowContext that is registered with {@link #mWindowManager} with options to specify the - * {@link RootDisplayArea} to attach the confirmation window. + * The WindowContext that is registered with {@link #mViewCaptureAwareWindowManager} with + * options to specify the {@link RootDisplayArea} to attach the confirmation window. */ @Nullable private Context mWindowContext; @@ -127,15 +134,19 @@ public class ImmersiveModeConfirmation implements CoreStartable, CommandQueue.Ca private ContentObserver mContentObserver; + private Lazy<ViewCapture> mLazyViewCapture; + @Inject public ImmersiveModeConfirmation(Context context, CommandQueue commandQueue, - SecureSettings secureSettings) { + SecureSettings secureSettings, + dagger.Lazy<ViewCapture> daggerLazyViewCapture) { mSysUiContext = context; final Display display = mSysUiContext.getDisplay(); mDisplayContext = display.getDisplayId() == DEFAULT_DISPLAY ? mSysUiContext : mSysUiContext.createDisplayContext(display); mCommandQueue = commandQueue; mSecureSettings = secureSettings; + mLazyViewCapture = toKotlinLazy(daggerLazyViewCapture); } boolean loadSetting(int currentUserId) { @@ -239,14 +250,14 @@ public class ImmersiveModeConfirmation implements CoreStartable, CommandQueue.Ca private void handleHide() { if (mClingWindow != null) { if (DEBUG) Log.d(TAG, "Hiding immersive mode confirmation"); - if (mWindowManager != null) { + if (mViewCaptureAwareWindowManager != null) { try { - mWindowManager.removeView(mClingWindow); + mViewCaptureAwareWindowManager.removeView(mClingWindow); } catch (WindowManager.InvalidDisplayException e) { Log.w(TAG, "Fail to hide the immersive confirmation window because of " + e); } - mWindowManager = null; + mViewCaptureAwareWindowManager = null; mWindowContext = null; } mClingWindow = null; @@ -505,8 +516,8 @@ public class ImmersiveModeConfirmation implements CoreStartable, CommandQueue.Ca * confirmation window. */ @NonNull - private WindowManager createWindowManager(int rootDisplayAreaId) { - if (mWindowManager != null) { + private ViewCaptureAwareWindowManager createWindowManager(int rootDisplayAreaId) { + if (mViewCaptureAwareWindowManager != null) { throw new IllegalStateException( "Must not create a new WindowManager while there is an existing one"); } @@ -515,8 +526,10 @@ public class ImmersiveModeConfirmation implements CoreStartable, CommandQueue.Ca mWindowContextRootDisplayAreaId = rootDisplayAreaId; mWindowContext = mDisplayContext.createWindowContext( IMMERSIVE_MODE_CONFIRMATION_WINDOW_TYPE, options); - mWindowManager = mWindowContext.getSystemService(WindowManager.class); - return mWindowManager; + WindowManager wm = mWindowContext.getSystemService(WindowManager.class); + mViewCaptureAwareWindowManager = new ViewCaptureAwareWindowManager(wm, mLazyViewCapture, + enableViewCaptureTracing()); + return mViewCaptureAwareWindowManager; } /** |