diff options
| author | 2024-07-11 16:13:46 +0000 | |
|---|---|---|
| committer | 2024-07-11 16:13:46 +0000 | |
| commit | 22a9d4ebadbfcb8633c0bce5606a48d881690c75 (patch) | |
| tree | 47ca2d324720b85bf654eb36c52c627dbc325cb4 | |
| parent | 28e73636351bfd8e6734114746e7ff5743da346f (diff) | |
| parent | 16c85a11a6b698b391526971f93f88125fb587dd (diff) | |
Merge "Adding ViewCaptureAwareWindowManager to system ui windows." into main
4 files changed, 47 insertions, 7 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayServiceTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayServiceTest.kt index 5a39de8392be..444f63afb021 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayServiceTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayServiceTest.kt @@ -34,6 +34,9 @@ import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest +import com.android.app.viewcapture.ViewCapture +import com.android.app.viewcapture.ViewCaptureAwareWindowManager +import com.android.app.viewcapture.ViewCaptureFactory import com.android.compose.animation.scene.ObservableTransitionState import com.android.internal.logging.UiEventLogger import com.android.keyguard.KeyguardUpdateMonitor @@ -79,6 +82,7 @@ import org.mockito.Mock import org.mockito.Mockito import org.mockito.Mockito.clearInvocations import org.mockito.Mockito.isNull +import org.mockito.Mockito.spy import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations @@ -114,11 +118,11 @@ class DreamOverlayServiceTest : SysuiTestCase() { @Mock lateinit var mDreamComplicationComponentFactory: - com.android.systemui.dreams.complication.dagger.ComplicationComponent.Factory + com.android.systemui.dreams.complication.dagger.ComplicationComponent.Factory @Mock lateinit var mDreamComplicationComponent: - com.android.systemui.dreams.complication.dagger.ComplicationComponent + com.android.systemui.dreams.complication.dagger.ComplicationComponent @Mock lateinit var mHideComplicationTouchHandler: HideComplicationTouchHandler @@ -154,8 +158,12 @@ class DreamOverlayServiceTest : SysuiTestCase() { @Mock lateinit var mDreamOverlayCallbackController: DreamOverlayCallbackController + @Mock lateinit var mLazyViewCapture: Lazy<ViewCapture> + + private lateinit var mViewCaptureAwareWindowManager: ViewCaptureAwareWindowManager private lateinit var bouncerRepository: FakeKeyguardBouncerRepository private lateinit var communalRepository: FakeCommunalSceneRepository + private var viewCaptureSpy = spy(ViewCaptureFactory.getInstance(context)) @Captor var mViewCaptor: ArgumentCaptor<View>? = null private lateinit var mService: DreamOverlayService @@ -192,13 +200,16 @@ class DreamOverlayServiceTest : SysuiTestCase() { whenever(mDreamOverlayContainerViewController.containerView) .thenReturn(mDreamOverlayContainerView) whenever(mScrimManager.getCurrentController()).thenReturn(mScrimController) + whenever(mLazyViewCapture.value).thenReturn(viewCaptureSpy) mWindowParams = WindowManager.LayoutParams() + mViewCaptureAwareWindowManager = ViewCaptureAwareWindowManager(mWindowManager, + mLazyViewCapture, isViewCaptureEnabled = false) mService = DreamOverlayService( mContext, mLifecycleOwner, mMainExecutor, - mWindowManager, + mViewCaptureAwareWindowManager, mComplicationComponentFactory, mDreamComplicationComponentFactory, mDreamOverlayComponentFactory, @@ -246,7 +257,7 @@ class DreamOverlayServiceTest : SysuiTestCase() { mMainExecutor.runAllReady() verify(mUiEventLogger).log(DreamOverlayService.DreamOverlayEvent.DREAM_OVERLAY_ENTER_START) verify(mUiEventLogger) - .log(DreamOverlayService.DreamOverlayEvent.DREAM_OVERLAY_COMPLETE_START) + .log(DreamOverlayService.DreamOverlayEvent.DREAM_OVERLAY_COMPLETE_START) } @Test diff --git a/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java b/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java index b0fc60e74b52..a6deca76b799 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java @@ -16,6 +16,9 @@ package com.android.systemui.dagger; +import static com.android.systemui.Flags.enableViewCaptureTracing; +import static com.android.systemui.util.ConvenienceExtensionsKt.toKotlinLazy; + import android.annotation.Nullable; import android.annotation.SuppressLint; import android.app.ActivityManager; @@ -111,6 +114,9 @@ import android.view.textclassifier.TextClassificationManager; import androidx.asynclayoutinflater.view.AsyncLayoutInflater; import androidx.core.app.NotificationManagerCompat; +import com.android.app.viewcapture.ViewCapture; +import com.android.app.viewcapture.ViewCaptureAwareWindowManager; +import com.android.app.viewcapture.ViewCaptureFactory; import com.android.internal.app.IBatteryStats; import com.android.internal.appwidget.IAppWidgetService; import com.android.internal.jank.InteractionJankMonitor; @@ -125,6 +131,7 @@ import com.android.systemui.shared.system.PackageManagerWrapper; import com.android.systemui.user.utils.UserScopedService; import com.android.systemui.user.utils.UserScopedServiceImpl; +import dagger.Lazy; import dagger.Module; import dagger.Provides; @@ -680,6 +687,15 @@ public class FrameworkServicesModule { @Provides @Singleton + static ViewCaptureAwareWindowManager provideViewCaptureAwareWindowManager( + WindowManager windowManager, Lazy<ViewCapture> daggerLazyViewCapture) { + return new ViewCaptureAwareWindowManager(windowManager, + /* lazyViewCapture= */ toKotlinLazy(daggerLazyViewCapture), + /* isViewCaptureEnabled= */ enableViewCaptureTracing()); + } + + @Provides + @Singleton static PermissionManager providePermissionManager(Context context) { PermissionManager pm = context.getSystemService(PermissionManager.class); if (pm != null) { @@ -764,4 +780,10 @@ public class FrameworkServicesModule { return IDeviceIdleController.Stub.asInterface( ServiceManager.getService(Context.DEVICE_IDLE_CONTROLLER)); } + + @Provides + @Singleton + static ViewCapture provideViewCapture(Context context) { + return ViewCaptureFactory.getInstance(context); + } } diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java index c6c5747973b3..83fa001d104e 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java @@ -45,6 +45,7 @@ import androidx.lifecycle.LifecycleService; import androidx.lifecycle.ServiceLifecycleDispatcher; import androidx.lifecycle.ViewModelStore; +import com.android.app.viewcapture.ViewCaptureAwareWindowManager; import com.android.dream.lowlight.dagger.LowLightDreamModule; import com.android.internal.logging.UiEvent; import com.android.internal.logging.UiEventLogger; @@ -97,7 +98,7 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ @Nullable private final ComponentName mHomeControlPanelDreamComponent; private final UiEventLogger mUiEventLogger; - private final WindowManager mWindowManager; + private final ViewCaptureAwareWindowManager mWindowManager; private final String mWindowTitle; // A reference to the {@link Window} used to hold the dream overlay. @@ -244,7 +245,7 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ Context context, DreamOverlayLifecycleOwner lifecycleOwner, @Main DelayableExecutor executor, - WindowManager windowManager, + ViewCaptureAwareWindowManager viewCaptureAwareWindowManager, ComplicationComponent.Factory complicationComponentFactory, com.android.systemui.dreams.complication.dagger.ComplicationComponent.Factory dreamComplicationComponentFactory, @@ -267,7 +268,7 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ super(executor); mContext = context; mExecutor = executor; - mWindowManager = windowManager; + mWindowManager = viewCaptureAwareWindowManager; mKeyguardUpdateMonitor = keyguardUpdateMonitor; mScrimManager = scrimManager; mLowLightDreamComponent = lowLightDreamComponent; diff --git a/packages/SystemUI/src/com/android/systemui/util/ConvenienceExtensions.kt b/packages/SystemUI/src/com/android/systemui/util/ConvenienceExtensions.kt index ec7aabb58b49..f2132248e4f7 100644 --- a/packages/SystemUI/src/com/android/systemui/util/ConvenienceExtensions.kt +++ b/packages/SystemUI/src/com/android/systemui/util/ConvenienceExtensions.kt @@ -20,6 +20,7 @@ import android.graphics.Rect import android.util.IndentingPrintWriter import android.view.View import android.view.ViewGroup +import dagger.Lazy import java.io.PrintWriter /** [Sequence] that yields all of the direct children of this [ViewGroup] */ @@ -56,3 +57,8 @@ val View.boundsOnScreen: Rect getBoundsOnScreen(bounds) return bounds } + +/** Extension method to convert [dagger.Lazy] to [kotlin.Lazy] for object of any class [T]. */ +fun <T> Lazy<T>.toKotlinLazy(): kotlin.Lazy<T> { + return lazy { this.get() } +} |