Loading packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/section/AmbientStatusBarSection.kt +3 −1 Original line number Diff line number Diff line Loading @@ -44,7 +44,9 @@ constructor(private val factory: AmbientStatusBarComponent.Factory) { ) as AmbientStatusBarView) .apply { visibility = View.VISIBLE factory.create(this).getController().apply { init() } factory.create(this, touchInsetSession = null).getController().apply { init() } } }, modifier = modifier.element(Communal.Elements.StatusBar), Loading packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/statusbar/ui/AmbientStatusBarViewControllerTest.java +25 −0 Original line number Diff line number Diff line Loading @@ -36,14 +36,17 @@ import android.app.AlarmManager; import android.content.Context; import android.content.res.Resources; import android.hardware.SensorPrivacyManager; import android.platform.test.annotations.EnableFlags; import android.provider.Settings; import android.testing.TestableLooper; import android.view.View; import androidx.compose.ui.platform.ComposeView; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.ambient.statusbar.shared.flag.OngoingActivityChipsOnDream; import com.android.systemui.dreams.DreamOverlayNotificationCountProvider; import com.android.systemui.dreams.DreamOverlayStateController; import com.android.systemui.dreams.DreamOverlayStatusBarItemsProvider; Loading @@ -62,6 +65,7 @@ import com.android.systemui.statusbar.policy.NextAlarmController; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.statusbar.window.StatusBarWindowStateController; import com.android.systemui.statusbar.window.StatusBarWindowStateListener; import com.android.systemui.touch.TouchInsetManager; import com.android.systemui.util.time.DateFormatUtil; import org.junit.Before; Loading @@ -85,6 +89,8 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { private static final String NOTIFICATION_INDICATOR_FORMATTER_STRING = "{count, plural, =1 {# notification} other {# notifications}}"; @Mock Context mContext; @Mock MockAmbientStatusBarView mView; @Mock Loading Loading @@ -119,6 +125,8 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { AmbientStatusBarViewModel.Factory mAmbientStatusBarViewModelFactory; @Mock ConnectedDisplaysStatusBarNotificationIconViewStore.Factory mIconViewStoreFactory; @Mock TouchInsetManager.TouchInsetSession mTouchInsetSession; LogBuffer mLogBuffer = FakeLogBuffer.Factory.Companion.create(); Loading @@ -142,6 +150,7 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { doCallRealMethod().when(mView).setVisibility(anyInt()); doCallRealMethod().when(mView).getVisibility(); when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser()); when(mView.getContext()).thenReturn(mContext); mController = new AmbientStatusBarViewController( mView, Loading @@ -162,6 +171,7 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { mKosmos.getCommunalSceneInteractor(), mAmbientStatusBarViewModelFactory, mIconViewStoreFactory, mTouchInsetSession, mLogBuffer); mController.onInit(); } Loading Loading @@ -342,6 +352,7 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { mKosmos.getCommunalSceneInteractor(), mAmbientStatusBarViewModelFactory, mIconViewStoreFactory, mTouchInsetSession, mLogBuffer); controller.onViewAttached(); verify(mView, never()).showIcon( Loading Loading @@ -596,6 +607,20 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { verify(mStatusBarWindowStateController).removeListener(eq(listenerCaptor.getValue())); } @EnableFlags(OngoingActivityChipsOnDream.FLAG_NAME) @Test public void testAddAndRemoveOngoingActivityChipsViewFromTouchInsetSession() { final ComposeView ongoingActivityChipsView = Mockito.mock(ComposeView.class); when(mView.findViewById(R.id.dream_overlay_ongoing_activity_chips)) .thenReturn(ongoingActivityChipsView); mController.onViewAttached(); verify(mTouchInsetSession).addViewToTracking(ongoingActivityChipsView); mController.onViewDetached(); verify(mTouchInsetSession).removeViewFromTracking(ongoingActivityChipsView); } private StatusBarWindowStateListener updateStatusBarWindowState(boolean show) { when(mStatusBarWindowStateController.windowIsShowing()).thenReturn(show); final ArgumentCaptor<StatusBarWindowStateListener> Loading packages/SystemUI/src/com/android/systemui/ambient/statusbar/dagger/AmbientStatusBarComponent.kt +2 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.ambient.statusbar.dagger import com.android.systemui.ambient.statusbar.ui.AmbientStatusBarView import com.android.systemui.ambient.statusbar.ui.AmbientStatusBarViewController import com.android.systemui.touch.TouchInsetManager import dagger.BindsInstance import dagger.Subcomponent Loading @@ -31,6 +32,7 @@ interface AmbientStatusBarComponent { interface Factory { fun create( @BindsInstance view: AmbientStatusBarView, @BindsInstance touchInsetSession: TouchInsetManager.TouchInsetSession?, ): AmbientStatusBarComponent } Loading packages/SystemUI/src/com/android/systemui/ambient/statusbar/ui/AmbientStatusBarViewController.java +28 −6 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ import com.android.systemui.statusbar.policy.NextAlarmController; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.statusbar.window.StatusBarWindowStateController; import com.android.systemui.statusbar.window.StatusBarWindowStateListener; import com.android.systemui.touch.TouchInsetManager; import com.android.systemui.util.ViewController; import com.android.systemui.util.time.DateFormatUtil; Loading Loading @@ -100,12 +101,17 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus private final ConnectedDisplaysStatusBarNotificationIconViewStore.Factory mIconViewStoreFactory; private final DreamLogger mLogger; @Nullable private final TouchInsetManager.TouchInsetSession mTouchInsetSession; private boolean mIsAttached; private boolean mCommunalVisible; // Whether dream entry animations are finished. private boolean mEntryAnimationsFinished = false; @Nullable private ComposeView mOngoingActivityChipsView = null; private final DreamOverlayStateController.Callback mDreamOverlayStateCallback = new DreamOverlayStateController.Callback() { @Override Loading Loading @@ -169,6 +175,7 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus CommunalSceneInteractor communalSceneInteractor, AmbientStatusBarViewModel.Factory ambientStatusBarViewModelFactory, ConnectedDisplaysStatusBarNotificationIconViewStore.Factory iconViewStoreFactory, @Nullable TouchInsetManager.TouchInsetSession touchInsetSession, @DreamLog LogBuffer logBuffer) { super(view); mResources = resources; Loading @@ -188,6 +195,7 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus mCommunalSceneInteractor = communalSceneInteractor; mAmbientStatusBarViewModelFactory = ambientStatusBarViewModelFactory; mIconViewStoreFactory = iconViewStoreFactory; mTouchInsetSession = touchInsetSession; mLogger = new DreamLogger(logBuffer, TAG); } Loading @@ -214,13 +222,21 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus mIsAttached = true; if (OngoingActivityChipsOnDream.isEnabled()) { final ComposeView ongoingActivityChipsView = mOngoingActivityChipsView = mView.findViewById(R.id.dream_overlay_ongoing_activity_chips); if (mOngoingActivityChipsView != null) { AmbientStatusBarViewBinder.bindOngoingActivityChipsView( getContext(), ongoingActivityChipsView, mOngoingActivityChipsView, mAmbientStatusBarViewModelFactory, mIconViewStoreFactory); // Allow the ongoing activity chips view to receive touch events. if (mTouchInsetSession != null) { mTouchInsetSession.addViewToTracking(mOngoingActivityChipsView); } } } mFlows.add(collectFlow( Loading Loading @@ -268,6 +284,12 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus flow.dispose(); } mFlows.clear(); if (mTouchInsetSession != null && mOngoingActivityChipsView != null) { mTouchInsetSession.removeViewFromTracking(mOngoingActivityChipsView); mOngoingActivityChipsView = null; } mIsAttached = false; } Loading packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayModule.java +3 −2 Original line number Diff line number Diff line Loading @@ -104,8 +104,9 @@ public abstract class DreamOverlayModule { @Provides @DreamOverlayComponent.DreamOverlayScope public static AmbientStatusBarViewController providesStatusBarViewController( AmbientStatusBarView view, AmbientStatusBarComponent.Factory factory) { return factory.create(view).getController(); AmbientStatusBarView view, AmbientStatusBarComponent.Factory factory, TouchInsetManager.TouchInsetSession touchInsetSession) { return factory.create(view, touchInsetSession).getController(); } /** */ Loading Loading
packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/section/AmbientStatusBarSection.kt +3 −1 Original line number Diff line number Diff line Loading @@ -44,7 +44,9 @@ constructor(private val factory: AmbientStatusBarComponent.Factory) { ) as AmbientStatusBarView) .apply { visibility = View.VISIBLE factory.create(this).getController().apply { init() } factory.create(this, touchInsetSession = null).getController().apply { init() } } }, modifier = modifier.element(Communal.Elements.StatusBar), Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/statusbar/ui/AmbientStatusBarViewControllerTest.java +25 −0 Original line number Diff line number Diff line Loading @@ -36,14 +36,17 @@ import android.app.AlarmManager; import android.content.Context; import android.content.res.Resources; import android.hardware.SensorPrivacyManager; import android.platform.test.annotations.EnableFlags; import android.provider.Settings; import android.testing.TestableLooper; import android.view.View; import androidx.compose.ui.platform.ComposeView; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.ambient.statusbar.shared.flag.OngoingActivityChipsOnDream; import com.android.systemui.dreams.DreamOverlayNotificationCountProvider; import com.android.systemui.dreams.DreamOverlayStateController; import com.android.systemui.dreams.DreamOverlayStatusBarItemsProvider; Loading @@ -62,6 +65,7 @@ import com.android.systemui.statusbar.policy.NextAlarmController; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.statusbar.window.StatusBarWindowStateController; import com.android.systemui.statusbar.window.StatusBarWindowStateListener; import com.android.systemui.touch.TouchInsetManager; import com.android.systemui.util.time.DateFormatUtil; import org.junit.Before; Loading @@ -85,6 +89,8 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { private static final String NOTIFICATION_INDICATOR_FORMATTER_STRING = "{count, plural, =1 {# notification} other {# notifications}}"; @Mock Context mContext; @Mock MockAmbientStatusBarView mView; @Mock Loading Loading @@ -119,6 +125,8 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { AmbientStatusBarViewModel.Factory mAmbientStatusBarViewModelFactory; @Mock ConnectedDisplaysStatusBarNotificationIconViewStore.Factory mIconViewStoreFactory; @Mock TouchInsetManager.TouchInsetSession mTouchInsetSession; LogBuffer mLogBuffer = FakeLogBuffer.Factory.Companion.create(); Loading @@ -142,6 +150,7 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { doCallRealMethod().when(mView).setVisibility(anyInt()); doCallRealMethod().when(mView).getVisibility(); when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser()); when(mView.getContext()).thenReturn(mContext); mController = new AmbientStatusBarViewController( mView, Loading @@ -162,6 +171,7 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { mKosmos.getCommunalSceneInteractor(), mAmbientStatusBarViewModelFactory, mIconViewStoreFactory, mTouchInsetSession, mLogBuffer); mController.onInit(); } Loading Loading @@ -342,6 +352,7 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { mKosmos.getCommunalSceneInteractor(), mAmbientStatusBarViewModelFactory, mIconViewStoreFactory, mTouchInsetSession, mLogBuffer); controller.onViewAttached(); verify(mView, never()).showIcon( Loading Loading @@ -596,6 +607,20 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { verify(mStatusBarWindowStateController).removeListener(eq(listenerCaptor.getValue())); } @EnableFlags(OngoingActivityChipsOnDream.FLAG_NAME) @Test public void testAddAndRemoveOngoingActivityChipsViewFromTouchInsetSession() { final ComposeView ongoingActivityChipsView = Mockito.mock(ComposeView.class); when(mView.findViewById(R.id.dream_overlay_ongoing_activity_chips)) .thenReturn(ongoingActivityChipsView); mController.onViewAttached(); verify(mTouchInsetSession).addViewToTracking(ongoingActivityChipsView); mController.onViewDetached(); verify(mTouchInsetSession).removeViewFromTracking(ongoingActivityChipsView); } private StatusBarWindowStateListener updateStatusBarWindowState(boolean show) { when(mStatusBarWindowStateController.windowIsShowing()).thenReturn(show); final ArgumentCaptor<StatusBarWindowStateListener> Loading
packages/SystemUI/src/com/android/systemui/ambient/statusbar/dagger/AmbientStatusBarComponent.kt +2 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.ambient.statusbar.dagger import com.android.systemui.ambient.statusbar.ui.AmbientStatusBarView import com.android.systemui.ambient.statusbar.ui.AmbientStatusBarViewController import com.android.systemui.touch.TouchInsetManager import dagger.BindsInstance import dagger.Subcomponent Loading @@ -31,6 +32,7 @@ interface AmbientStatusBarComponent { interface Factory { fun create( @BindsInstance view: AmbientStatusBarView, @BindsInstance touchInsetSession: TouchInsetManager.TouchInsetSession?, ): AmbientStatusBarComponent } Loading
packages/SystemUI/src/com/android/systemui/ambient/statusbar/ui/AmbientStatusBarViewController.java +28 −6 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ import com.android.systemui.statusbar.policy.NextAlarmController; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.statusbar.window.StatusBarWindowStateController; import com.android.systemui.statusbar.window.StatusBarWindowStateListener; import com.android.systemui.touch.TouchInsetManager; import com.android.systemui.util.ViewController; import com.android.systemui.util.time.DateFormatUtil; Loading Loading @@ -100,12 +101,17 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus private final ConnectedDisplaysStatusBarNotificationIconViewStore.Factory mIconViewStoreFactory; private final DreamLogger mLogger; @Nullable private final TouchInsetManager.TouchInsetSession mTouchInsetSession; private boolean mIsAttached; private boolean mCommunalVisible; // Whether dream entry animations are finished. private boolean mEntryAnimationsFinished = false; @Nullable private ComposeView mOngoingActivityChipsView = null; private final DreamOverlayStateController.Callback mDreamOverlayStateCallback = new DreamOverlayStateController.Callback() { @Override Loading Loading @@ -169,6 +175,7 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus CommunalSceneInteractor communalSceneInteractor, AmbientStatusBarViewModel.Factory ambientStatusBarViewModelFactory, ConnectedDisplaysStatusBarNotificationIconViewStore.Factory iconViewStoreFactory, @Nullable TouchInsetManager.TouchInsetSession touchInsetSession, @DreamLog LogBuffer logBuffer) { super(view); mResources = resources; Loading @@ -188,6 +195,7 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus mCommunalSceneInteractor = communalSceneInteractor; mAmbientStatusBarViewModelFactory = ambientStatusBarViewModelFactory; mIconViewStoreFactory = iconViewStoreFactory; mTouchInsetSession = touchInsetSession; mLogger = new DreamLogger(logBuffer, TAG); } Loading @@ -214,13 +222,21 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus mIsAttached = true; if (OngoingActivityChipsOnDream.isEnabled()) { final ComposeView ongoingActivityChipsView = mOngoingActivityChipsView = mView.findViewById(R.id.dream_overlay_ongoing_activity_chips); if (mOngoingActivityChipsView != null) { AmbientStatusBarViewBinder.bindOngoingActivityChipsView( getContext(), ongoingActivityChipsView, mOngoingActivityChipsView, mAmbientStatusBarViewModelFactory, mIconViewStoreFactory); // Allow the ongoing activity chips view to receive touch events. if (mTouchInsetSession != null) { mTouchInsetSession.addViewToTracking(mOngoingActivityChipsView); } } } mFlows.add(collectFlow( Loading Loading @@ -268,6 +284,12 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus flow.dispose(); } mFlows.clear(); if (mTouchInsetSession != null && mOngoingActivityChipsView != null) { mTouchInsetSession.removeViewFromTracking(mOngoingActivityChipsView); mOngoingActivityChipsView = null; } mIsAttached = false; } Loading
packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayModule.java +3 −2 Original line number Diff line number Diff line Loading @@ -104,8 +104,9 @@ public abstract class DreamOverlayModule { @Provides @DreamOverlayComponent.DreamOverlayScope public static AmbientStatusBarViewController providesStatusBarViewController( AmbientStatusBarView view, AmbientStatusBarComponent.Factory factory) { return factory.create(view).getController(); AmbientStatusBarView view, AmbientStatusBarComponent.Factory factory, TouchInsetManager.TouchInsetSession touchInsetSession) { return factory.create(view, touchInsetSession).getController(); } /** */ Loading