diff options
18 files changed, 247 insertions, 92 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayStatusBarViewControllerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/statusbar/ui/AmbientStatusBarViewControllerTest.java index f561c531253b..d84d151ae984 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayStatusBarViewControllerTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/statusbar/ui/AmbientStatusBarViewControllerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 The Android Open Source Project + * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.systemui.dreams; +package com.android.systemui.ambient.statusbar.ui; import static android.app.StatusBarManager.WINDOW_STATE_HIDDEN; import static android.app.StatusBarManager.WINDOW_STATE_SHOWING; @@ -44,6 +44,10 @@ import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; +import com.android.systemui.dreams.DreamOverlayNotificationCountProvider; +import com.android.systemui.dreams.DreamOverlayStateController; +import com.android.systemui.dreams.DreamOverlayStatusBarItemsProvider; +import com.android.systemui.kosmos.KosmosJavaAdapter; import com.android.systemui.log.LogBuffer; import com.android.systemui.log.core.FakeLogBuffer; import com.android.systemui.res.R; @@ -54,7 +58,6 @@ 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; @@ -72,14 +75,12 @@ import java.util.concurrent.Executor; @SmallTest @TestableLooper.RunWithLooper(setAsMainLooper = true) @RunWith(AndroidJUnit4.class) -public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { +public class AmbientStatusBarViewControllerTest extends SysuiTestCase { private static final String NOTIFICATION_INDICATOR_FORMATTER_STRING = "{count, plural, =1 {# notification} other {# notifications}}"; @Mock - MockDreamOverlayStatusBarView mView; - @Mock - TouchInsetManager.TouchInsetSession mTouchSession; + MockAmbientStatusBarView mView; @Mock Resources mResources; @Mock @@ -114,9 +115,11 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { private final Executor mMainExecutor = Runnable::run; - private final FakeWifiRepository mWifiRepository = new FakeWifiRepository(); + private final KosmosJavaAdapter mKosmos = new KosmosJavaAdapter(this); + + private final FakeWifiRepository mWifiRepository = mKosmos.getFakeWifiRepository(); - DreamOverlayStatusBarViewController mController; + AmbientStatusBarViewController mController; @Before public void setup() { @@ -128,11 +131,10 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { doCallRealMethod().when(mView).getVisibility(); when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser()); - mController = new DreamOverlayStatusBarViewController( + mController = new AmbientStatusBarViewController( mView, mResources, mMainExecutor, - mTouchSession, mAlarmManager, mNextAlarmController, mDateFormatUtil, @@ -143,7 +145,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { mDreamOverlayStatusBarItemsProvider, mDreamOverlayStateController, mUserTracker, - mWifiRepository, + mKosmos.getWifiInteractor(), mLogBuffer); } @@ -164,7 +166,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { mController.updateWifiUnavailableStatusIcon(false); verify(mView).showIcon( - DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, true, null); + AmbientStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, true, null); } @Test @@ -173,7 +175,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { mController.updateWifiUnavailableStatusIcon(true); verify(mView).showIcon( - DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, false, null); + AmbientStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, false, null); } @Test @@ -183,7 +185,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { when(mAlarmManager.getNextAlarmClock(anyInt())).thenReturn(alarmClockInfo); mController.onViewAttached(); verify(mView).showIcon( - eq(DreamOverlayStatusBarView.STATUS_ICON_ALARM_SET), eq(true), any()); + eq(AmbientStatusBarView.STATUS_ICON_ALARM_SET), eq(true), any()); } @Test @@ -191,7 +193,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { when(mAlarmManager.getNextAlarmClock(anyInt())).thenReturn(null); mController.onViewAttached(); verify(mView).showIcon( - eq(DreamOverlayStatusBarView.STATUS_ICON_ALARM_SET), eq(false), isNull()); + eq(AmbientStatusBarView.STATUS_ICON_ALARM_SET), eq(false), isNull()); } @Test @@ -202,7 +204,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { .thenReturn(false); mController.onViewAttached(); verify(mView).showIcon( - DreamOverlayStatusBarView.STATUS_ICON_MIC_DISABLED, true, null); + AmbientStatusBarView.STATUS_ICON_MIC_DISABLED, true, null); } @Test @@ -213,7 +215,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { .thenReturn(true); mController.onViewAttached(); verify(mView).showIcon( - DreamOverlayStatusBarView.STATUS_ICON_CAMERA_DISABLED, true, null); + AmbientStatusBarView.STATUS_ICON_CAMERA_DISABLED, true, null); } @Test @@ -224,7 +226,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { .thenReturn(true); mController.onViewAttached(); verify(mView).showIcon( - DreamOverlayStatusBarView.STATUS_ICON_MIC_CAMERA_DISABLED, true, null); + AmbientStatusBarView.STATUS_ICON_MIC_CAMERA_DISABLED, true, null); } @Test @@ -237,7 +239,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { callbackCapture.getValue().onNotificationCountChanged(1); verify(mView).showIcon( - eq(DreamOverlayStatusBarView.STATUS_ICON_NOTIFICATIONS), eq(true), any()); + eq(AmbientStatusBarView.STATUS_ICON_NOTIFICATIONS), eq(true), any()); } @Test @@ -250,16 +252,15 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { callbackCapture.getValue().onNotificationCountChanged(0); verify(mView).showIcon( - eq(DreamOverlayStatusBarView.STATUS_ICON_NOTIFICATIONS), eq(false), isNull()); + eq(AmbientStatusBarView.STATUS_ICON_NOTIFICATIONS), eq(false), isNull()); } @Test public void testNotificationsIconNotShownWhenCountProviderAbsent() { - DreamOverlayStatusBarViewController controller = new DreamOverlayStatusBarViewController( + AmbientStatusBarViewController controller = new AmbientStatusBarViewController( mView, mResources, mMainExecutor, - mTouchSession, mAlarmManager, mNextAlarmController, mDateFormatUtil, @@ -270,11 +271,11 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { mDreamOverlayStatusBarItemsProvider, mDreamOverlayStateController, mUserTracker, - mWifiRepository, + mKosmos.getWifiInteractor(), mLogBuffer); controller.onViewAttached(); verify(mView, never()).showIcon( - eq(DreamOverlayStatusBarView.STATUS_ICON_NOTIFICATIONS), eq(true), any()); + eq(AmbientStatusBarView.STATUS_ICON_NOTIFICATIONS), eq(true), any()); } @Test @@ -283,7 +284,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS); mController.onViewAttached(); verify(mView).showIcon( - DreamOverlayStatusBarView.STATUS_ICON_PRIORITY_MODE_ON, true, null); + AmbientStatusBarView.STATUS_ICON_PRIORITY_MODE_ON, true, null); } @Test @@ -292,7 +293,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { Settings.Global.ZEN_MODE_OFF); mController.onViewAttached(); verify(mView).showIcon( - DreamOverlayStatusBarView.STATUS_ICON_PRIORITY_MODE_ON, false, null); + AmbientStatusBarView.STATUS_ICON_PRIORITY_MODE_ON, false, null); } @Test @@ -322,7 +323,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { callbackCapture.getValue().onNotificationCountChanged(1); verify(mView).showIcon( - eq(DreamOverlayStatusBarView.STATUS_ICON_NOTIFICATIONS), eq(true), any()); + eq(AmbientStatusBarView.STATUS_ICON_NOTIFICATIONS), eq(true), any()); } @Test @@ -335,7 +336,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { callbackCapture.getValue().onNotificationCountChanged(0); verify(mView).showIcon( - eq(DreamOverlayStatusBarView.STATUS_ICON_NOTIFICATIONS), eq(false), any()); + eq(AmbientStatusBarView.STATUS_ICON_NOTIFICATIONS), eq(false), any()); } @Test @@ -354,7 +355,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { SensorPrivacyManager.Sensors.MICROPHONE, true); verify(mView).showIcon( - DreamOverlayStatusBarView.STATUS_ICON_MIC_CAMERA_DISABLED, true, null); + AmbientStatusBarView.STATUS_ICON_MIC_CAMERA_DISABLED, true, null); } @Test @@ -369,7 +370,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { callbackCapture.getValue().onZenChanged(Settings.Global.ZEN_MODE_NO_INTERRUPTIONS); verify(mView).showIcon( - DreamOverlayStatusBarView.STATUS_ICON_PRIORITY_MODE_ON, true, null); + AmbientStatusBarView.STATUS_ICON_PRIORITY_MODE_ON, true, null); } @Test @@ -384,7 +385,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { callbackCapture.getValue().onZenChanged(Settings.Global.ZEN_MODE_OFF); verify(mView).showIcon( - DreamOverlayStatusBarView.STATUS_ICON_PRIORITY_MODE_ON, false, null); + AmbientStatusBarView.STATUS_ICON_PRIORITY_MODE_ON, false, null); } @Test @@ -399,7 +400,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { callbackCapture.getValue().onStateChanged(); verify(mView).showIcon( - DreamOverlayStatusBarView.STATUS_ICON_ASSISTANT_ATTENTION_ACTIVE, true, null); + AmbientStatusBarView.STATUS_ICON_ASSISTANT_ATTENTION_ACTIVE, true, null); } @Test @@ -460,7 +461,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { final ArgumentCaptor<DreamOverlayStatusBarItemsProvider.Callback> callbackCapture = ArgumentCaptor.forClass( - DreamOverlayStatusBarItemsProvider.Callback.class); + DreamOverlayStatusBarItemsProvider.Callback.class); verify(mDreamOverlayStatusBarItemsProvider).addCallback(callbackCapture.capture()); callbackCapture.getValue().onStatusBarItemsChanged(List.of(mStatusBarItem)); @@ -532,10 +533,10 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { callback.onStateChanged(); } - private static class MockDreamOverlayStatusBarView extends DreamOverlayStatusBarView { + private static class MockAmbientStatusBarView extends AmbientStatusBarView { private int mVisibility = View.VISIBLE; - private MockDreamOverlayStatusBarView(Context context) { + private MockAmbientStatusBarView(Context context) { super(context); } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayAnimationsControllerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayAnimationsControllerTest.kt index 86fdaa5872e8..73ef77540398 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayAnimationsControllerTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayAnimationsControllerTest.kt @@ -7,6 +7,7 @@ import android.view.View import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase +import com.android.systemui.ambient.statusbar.ui.AmbientStatusBarViewController import com.android.systemui.complication.ComplicationHostViewController import com.android.systemui.dreams.ui.viewmodel.DreamViewModel import com.android.systemui.log.core.FakeLogBuffer @@ -43,7 +44,7 @@ class DreamOverlayAnimationsControllerTest : SysuiTestCase() { @Mock private lateinit var mockAnimator: AnimatorSet @Mock private lateinit var blurUtils: BlurUtils @Mock private lateinit var hostViewController: ComplicationHostViewController - @Mock private lateinit var statusBarViewController: DreamOverlayStatusBarViewController + @Mock private lateinit var statusBarViewController: AmbientStatusBarViewController @Mock private lateinit var stateController: DreamOverlayStateController @Mock private lateinit var transitionViewModel: DreamViewModel private val logBuffer = FakeLogBuffer.Factory.create() diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayContainerViewControllerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayContainerViewControllerTest.java index f5c86e092a26..4c8c1134a9d5 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayContainerViewControllerTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayContainerViewControllerTest.java @@ -47,6 +47,7 @@ import com.android.dream.lowlight.LowLightTransitionCoordinator; import com.android.keyguard.BouncerPanelExpansionCalculator; import com.android.systemui.Flags; import com.android.systemui.SysuiTestCase; +import com.android.systemui.ambient.statusbar.ui.AmbientStatusBarViewController; import com.android.systemui.ambient.touch.scrim.BouncerlessScrimController; import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerCallbackInteractor; import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerCallbackInteractor.PrimaryBouncerExpansionCallback; @@ -55,6 +56,7 @@ import com.android.systemui.complication.ComplicationHostViewController; import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor; import com.android.systemui.shade.domain.interactor.ShadeInteractor; import com.android.systemui.statusbar.BlurUtils; +import com.android.systemui.touch.TouchInsetManager; import kotlinx.coroutines.CoroutineDispatcher; @@ -80,7 +82,7 @@ public class DreamOverlayContainerViewControllerTest extends SysuiTestCase { ViewTreeObserver mViewTreeObserver; @Mock - DreamOverlayStatusBarViewController mDreamOverlayStatusBarViewController; + AmbientStatusBarViewController mAmbientStatusBarViewController; @Mock LowLightTransitionCoordinator mLowLightTransitionCoordinator; @@ -131,6 +133,8 @@ public class DreamOverlayContainerViewControllerTest extends SysuiTestCase { CommunalInteractor mCommunalInteractor; @Mock private DreamManager mDreamManager; + @Mock + private TouchInsetManager.TouchInsetSession mTouchInsetSession; DreamOverlayContainerViewController mController; @@ -150,8 +154,9 @@ public class DreamOverlayContainerViewControllerTest extends SysuiTestCase { mComplicationHostViewController, mDreamOverlayContentView, mHubGestureIndicatorView, - mDreamOverlayStatusBarViewController, + mAmbientStatusBarViewController, mLowLightTransitionCoordinator, + mTouchInsetSession, mBlurUtils, mHandler, mDispatcher, @@ -190,7 +195,7 @@ public class DreamOverlayContainerViewControllerTest extends SysuiTestCase { @Test public void testDreamOverlayStatusBarViewControllerInitialized() { mController.init(); - verify(mDreamOverlayStatusBarViewController).init(); + verify(mAmbientStatusBarViewController).init(); } @Test diff --git a/packages/SystemUI/res/layout/dream_overlay_status_bar_view.xml b/packages/SystemUI/res/layout/ambient_status_bar_view.xml index ec2edb52a039..7d765ce7ac6f 100644 --- a/packages/SystemUI/res/layout/dream_overlay_status_bar_view.xml +++ b/packages/SystemUI/res/layout/ambient_status_bar_view.xml @@ -14,7 +14,7 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> -<com.android.systemui.dreams.DreamOverlayStatusBarView +<com.android.systemui.ambient.statusbar.ui.AmbientStatusBarView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/dream_overlay_status_bar" @@ -118,4 +118,4 @@ android:contentDescription="@string/assistant_attention_content_description" /> </LinearLayout> -</com.android.systemui.dreams.DreamOverlayStatusBarView> +</com.android.systemui.ambient.statusbar.ui.AmbientStatusBarView> diff --git a/packages/SystemUI/res/layout/dream_overlay_container.xml b/packages/SystemUI/res/layout/dream_overlay_container.xml index 4234fca55e3c..dcd3fa66ef04 100644 --- a/packages/SystemUI/res/layout/dream_overlay_container.xml +++ b/packages/SystemUI/res/layout/dream_overlay_container.xml @@ -44,5 +44,5 @@ app:layout_constraintBottom_toBottomOf="parent" /> - <include layout="@layout/dream_overlay_status_bar_view" /> + <include layout="@layout/ambient_status_bar_view" /> </com.android.systemui.dreams.DreamOverlayContainerView>
\ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/ambient/dagger/AmbientModule.kt b/packages/SystemUI/src/com/android/systemui/ambient/dagger/AmbientModule.kt index ea0039858551..b0314d8fab84 100644 --- a/packages/SystemUI/src/com/android/systemui/ambient/dagger/AmbientModule.kt +++ b/packages/SystemUI/src/com/android/systemui/ambient/dagger/AmbientModule.kt @@ -16,11 +16,19 @@ package com.android.systemui.ambient.dagger +import com.android.systemui.ambient.statusbar.dagger.AmbientStatusBarComponent import com.android.systemui.ambient.touch.dagger.AmbientTouchComponent import com.android.systemui.ambient.touch.dagger.InputSessionComponent import dagger.Module -@Module(subcomponents = [AmbientTouchComponent::class, InputSessionComponent::class]) +@Module( + subcomponents = + [ + AmbientStatusBarComponent::class, + AmbientTouchComponent::class, + InputSessionComponent::class, + ] +) interface AmbientModule { companion object { const val TOUCH_HANDLERS = "touch_handlers" diff --git a/packages/SystemUI/src/com/android/systemui/ambient/statusbar/dagger/AmbientStatusBarComponent.kt b/packages/SystemUI/src/com/android/systemui/ambient/statusbar/dagger/AmbientStatusBarComponent.kt new file mode 100644 index 000000000000..8ad4d000015a --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/ambient/statusbar/dagger/AmbientStatusBarComponent.kt @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.ambient.statusbar.dagger + +import com.android.systemui.ambient.statusbar.ui.AmbientStatusBarView +import com.android.systemui.ambient.statusbar.ui.AmbientStatusBarViewController +import dagger.BindsInstance +import dagger.Subcomponent + +/** + * [AmbientStatusBarComponent] can be used for displaying a status bar over ambient surfaces like + * the dream or communal hub. + */ +@Subcomponent +interface AmbientStatusBarComponent { + @Subcomponent.Factory + interface Factory { + fun create( + @BindsInstance view: AmbientStatusBarView, + ): AmbientStatusBarComponent + } + + /** Builds a [AmbientStatusBarViewController] */ + fun getController(): AmbientStatusBarViewController +} diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarView.java b/packages/SystemUI/src/com/android/systemui/ambient/statusbar/ui/AmbientStatusBarView.java index 8e77079e0b5d..aa9623127d17 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/ambient/statusbar/ui/AmbientStatusBarView.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 The Android Open Source Project + * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.systemui.dreams; +package com.android.systemui.ambient.statusbar.ui; import android.annotation.IntDef; import android.annotation.Nullable; @@ -39,10 +39,10 @@ import java.util.Map; import java.util.Objects; /** - * {@link DreamOverlayStatusBarView} is the view responsible for displaying the status bar in a + * {@link AmbientStatusBarView} is the view responsible for displaying the status bar in a * dream. The status bar displays conditional status icons such as "priority mode" and "no wifi". */ -public class DreamOverlayStatusBarView extends ConstraintLayout { +public class AmbientStatusBarView extends ConstraintLayout { @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = { "STATUS_ICON_" }, value = { @@ -76,20 +76,20 @@ public class DreamOverlayStatusBarView extends ConstraintLayout { private static final float KEY_SHADOW_ALPHA = 0.35f; private static final float AMBIENT_SHADOW_ALPHA = 0.4f; - public DreamOverlayStatusBarView(Context context) { + public AmbientStatusBarView(Context context) { this(context, null); } - public DreamOverlayStatusBarView(Context context, AttributeSet attrs) { + public AmbientStatusBarView(Context context, AttributeSet attrs) { this(context, attrs, 0); } - public DreamOverlayStatusBarView(Context context, AttributeSet attrs, int defStyleAttr) { + public AmbientStatusBarView(Context context, AttributeSet attrs, int defStyleAttr) { this(context, attrs, defStyleAttr, 0); mContext = context; } - public DreamOverlayStatusBarView( + public AmbientStatusBarView( Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java b/packages/SystemUI/src/com/android/systemui/ambient/statusbar/ui/AmbientStatusBarViewController.java index da72a569e854..a242d5a25238 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java +++ b/packages/SystemUI/src/com/android/systemui/ambient/statusbar/ui/AmbientStatusBarViewController.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 The Android Open Source Project + * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.systemui.dreams; +package com.android.systemui.ambient.statusbar.ui; import static com.android.systemui.util.kotlin.JavaAdapterKt.collectFlow; @@ -31,20 +31,22 @@ import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import com.android.systemui.dagger.qualifiers.Main; +import com.android.systemui.dreams.DreamLogger; +import com.android.systemui.dreams.DreamOverlayNotificationCountProvider; +import com.android.systemui.dreams.DreamOverlayStateController; +import com.android.systemui.dreams.DreamOverlayStatusBarItemsProvider; import com.android.systemui.dreams.DreamOverlayStatusBarItemsProvider.StatusBarItem; -import com.android.systemui.dreams.dagger.DreamOverlayComponent; import com.android.systemui.log.LogBuffer; import com.android.systemui.log.dagger.DreamLog; import com.android.systemui.res.R; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.CrossFadeHelper; -import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository; +import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor; import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel; import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController; 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.touch.TouchInsetManager; import com.android.systemui.util.ViewController; import com.android.systemui.util.time.DateFormatUtil; @@ -59,13 +61,11 @@ import java.util.stream.Collectors; import javax.inject.Inject; /** - * View controller for {@link DreamOverlayStatusBarView}. + * View controller for {@link AmbientStatusBarView}. */ -@DreamOverlayComponent.DreamOverlayScope -public class DreamOverlayStatusBarViewController extends ViewController<DreamOverlayStatusBarView> { +public class AmbientStatusBarViewController extends ViewController<AmbientStatusBarView> { private static final String TAG = "DreamStatusBarCtrl"; - private final TouchInsetManager.TouchInsetSession mTouchInsetSession; private final NextAlarmController mNextAlarmController; private final AlarmManager mAlarmManager; private final Resources mResources; @@ -76,7 +76,7 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve private final ZenModeController mZenModeController; private final DreamOverlayStateController mDreamOverlayStateController; private final UserTracker mUserTracker; - private final WifiRepository mWifiRepository; + private final WifiInteractor mWifiInteractor; private final StatusBarWindowStateController mStatusBarWindowStateController; private final DreamOverlayStatusBarItemsProvider mStatusBarItemsProvider; private final Executor mMainExecutor; @@ -115,7 +115,7 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve private final DreamOverlayNotificationCountProvider.Callback mNotificationCountCallback = notificationCount -> showIcon( - DreamOverlayStatusBarView.STATUS_ICON_NOTIFICATIONS, + AmbientStatusBarView.STATUS_ICON_NOTIFICATIONS, notificationCount > 0, notificationCount > 0 ? buildNotificationsContentDescription(notificationCount) @@ -125,11 +125,10 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve this::onStatusBarItemsChanged; @Inject - public DreamOverlayStatusBarViewController( - DreamOverlayStatusBarView view, + public AmbientStatusBarViewController( + AmbientStatusBarView view, @Main Resources resources, @Main Executor mainExecutor, - TouchInsetManager.TouchInsetSession touchInsetSession, AlarmManager alarmManager, NextAlarmController nextAlarmController, DateFormatUtil dateFormatUtil, @@ -140,12 +139,11 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve DreamOverlayStatusBarItemsProvider statusBarItemsProvider, DreamOverlayStateController dreamOverlayStateController, UserTracker userTracker, - WifiRepository wifiRepository, + WifiInteractor wifiInteractor, @DreamLog LogBuffer logBuffer) { super(view); mResources = resources; mMainExecutor = mainExecutor; - mTouchInsetSession = touchInsetSession; mAlarmManager = alarmManager; mNextAlarmController = nextAlarmController; mDateFormatUtil = dateFormatUtil; @@ -156,7 +154,7 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve mZenModeController = zenModeController; mDreamOverlayStateController = dreamOverlayStateController; mUserTracker = userTracker; - mWifiRepository = wifiRepository; + mWifiInteractor = wifiInteractor; mLogger = new DreamLogger(logBuffer, TAG); // Register to receive show/hide updates for the system status bar. Our custom status bar @@ -170,7 +168,7 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve collectFlow( mView, - mWifiRepository.getWifiNetwork(), + mWifiInteractor.getWifiNetwork(), network -> updateWifiUnavailableStatusIcon( network instanceof WifiNetworkModel.Active)); @@ -202,7 +200,6 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve mView.removeAllExtraStatusBarItemViews(); mDreamOverlayStateController.setDreamOverlayStatusBarVisible(false); mDreamOverlayStateController.removeCallback(mDreamOverlayStateCallback); - mTouchInsetSession.clear(); mIsAttached = false; } @@ -212,7 +209,7 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve * * No-op if the dream overlay status bar should not be shown. */ - protected void setFadeAmount(float fadeAmount, boolean fadingOut) { + public void setFadeAmount(float fadeAmount, boolean fadingOut) { updateVisibility(); if (mView.getVisibility() != View.VISIBLE) { @@ -240,7 +237,7 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve @VisibleForTesting void updateWifiUnavailableStatusIcon(boolean available) { - showIcon(DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, !available, + showIcon(AmbientStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, !available, R.string.wifi_unavailable_dream_overlay_content_description); } @@ -249,13 +246,13 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve mAlarmManager.getNextAlarmClock(mUserTracker.getUserId()); final boolean hasAlarm = alarm != null && alarm.getTriggerTime() > 0; showIcon( - DreamOverlayStatusBarView.STATUS_ICON_ALARM_SET, + AmbientStatusBarView.STATUS_ICON_ALARM_SET, hasAlarm, hasAlarm ? buildAlarmContentDescription(alarm) : null); } private void updateAssistantAttentionIcon() { - showIcon(DreamOverlayStatusBarView.STATUS_ICON_ASSISTANT_ATTENTION_ACTIVE, + showIcon(AmbientStatusBarView.STATUS_ICON_ASSISTANT_ATTENTION_ACTIVE, mDreamOverlayStateController.hasAssistantAttention(), R.string.assistant_attention_content_description); } @@ -284,17 +281,17 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve .isSensorBlocked(SensorPrivacyManager.Sensors.MICROPHONE); final boolean cameraBlocked = mSensorPrivacyController .isSensorBlocked(SensorPrivacyManager.Sensors.CAMERA); - @DreamOverlayStatusBarView.StatusIconType int iconType = Resources.ID_NULL; + @AmbientStatusBarView.StatusIconType int iconType = Resources.ID_NULL; showIcon( - DreamOverlayStatusBarView.STATUS_ICON_CAMERA_DISABLED, + AmbientStatusBarView.STATUS_ICON_CAMERA_DISABLED, !micBlocked && cameraBlocked, R.string.camera_blocked_dream_overlay_content_description); showIcon( - DreamOverlayStatusBarView.STATUS_ICON_MIC_DISABLED, + AmbientStatusBarView.STATUS_ICON_MIC_DISABLED, micBlocked && !cameraBlocked, R.string.microphone_blocked_dream_overlay_content_description); showIcon( - DreamOverlayStatusBarView.STATUS_ICON_MIC_CAMERA_DISABLED, + AmbientStatusBarView.STATUS_ICON_MIC_CAMERA_DISABLED, micBlocked && cameraBlocked, R.string.camera_and_microphone_blocked_dream_overlay_content_description); } @@ -308,24 +305,24 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve private void updatePriorityModeStatusIcon() { showIcon( - DreamOverlayStatusBarView.STATUS_ICON_PRIORITY_MODE_ON, + AmbientStatusBarView.STATUS_ICON_PRIORITY_MODE_ON, mZenModeController.getZen() != Settings.Global.ZEN_MODE_OFF, R.string.priority_mode_dream_overlay_content_description); } - private void showIcon(@DreamOverlayStatusBarView.StatusIconType int iconType, boolean show, + private void showIcon(@AmbientStatusBarView.StatusIconType int iconType, boolean show, int contentDescriptionResId) { showIcon(iconType, show, mResources.getString(contentDescriptionResId)); } private void showIcon( - @DreamOverlayStatusBarView.StatusIconType int iconType, + @AmbientStatusBarView.StatusIconType int iconType, boolean show, @Nullable String contentDescription) { mMainExecutor.execute(() -> { if (mIsAttached) { mLogger.logShowOrHideStatusBarItem( - show, DreamOverlayStatusBarView.getLoggableStatusIconType(iconType)); + show, AmbientStatusBarView.getLoggableStatusIconType(iconType)); mView.showIcon(iconType, show, contentDescription); } }); diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayAnimationsController.kt b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayAnimationsController.kt index f860893f800b..3294c816d67c 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayAnimationsController.kt +++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayAnimationsController.kt @@ -27,11 +27,13 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import com.android.app.animation.Interpolators import com.android.dream.lowlight.util.TruncatedInterpolator +import com.android.systemui.ambient.statusbar.ui.AmbientStatusBarViewController import com.android.systemui.complication.ComplicationHostViewController import com.android.systemui.complication.ComplicationLayoutParams import com.android.systemui.complication.ComplicationLayoutParams.POSITION_BOTTOM import com.android.systemui.complication.ComplicationLayoutParams.POSITION_TOP import com.android.systemui.complication.ComplicationLayoutParams.Position +import com.android.systemui.dreams.dagger.DreamOverlayComponent.DreamOverlayScope import com.android.systemui.dreams.dagger.DreamOverlayModule import com.android.systemui.dreams.ui.viewmodel.DreamViewModel import com.android.systemui.lifecycle.repeatWhenAttached @@ -45,12 +47,13 @@ import javax.inject.Named import kotlinx.coroutines.launch /** Controller for dream overlay animations. */ +@DreamOverlayScope class DreamOverlayAnimationsController @Inject constructor( private val mBlurUtils: BlurUtils, private val mComplicationHostViewController: ComplicationHostViewController, - private val mStatusBarViewController: DreamOverlayStatusBarViewController, + private val mStatusBarViewController: AmbientStatusBarViewController, private val mOverlayStateController: DreamOverlayStateController, @Named(DreamOverlayModule.DREAM_BLUR_RADIUS) private val mDreamBlurRadius: Int, private val dreamViewModel: DreamViewModel, diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java index 1e725eb71dde..245def8fd27b 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java @@ -40,6 +40,7 @@ import android.view.ViewGroup; import com.android.app.animation.Interpolators; import com.android.dream.lowlight.LowLightTransitionCoordinator; +import com.android.systemui.ambient.statusbar.ui.AmbientStatusBarViewController; import com.android.systemui.ambient.touch.scrim.BouncerlessScrimController; import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerCallbackInteractor; import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerCallbackInteractor.PrimaryBouncerExpansionCallback; @@ -55,6 +56,7 @@ import com.android.systemui.res.R; import com.android.systemui.shade.ShadeExpansionChangeEvent; import com.android.systemui.shade.domain.interactor.ShadeInteractor; import com.android.systemui.statusbar.BlurUtils; +import com.android.systemui.touch.TouchInsetManager; import com.android.systemui.util.ViewController; import kotlinx.coroutines.CoroutineDispatcher; @@ -72,10 +74,12 @@ import javax.inject.Named; public class DreamOverlayContainerViewController extends ViewController<DreamOverlayContainerView> implements LowLightTransitionCoordinator.LowLightEnterListener { - private final DreamOverlayStatusBarViewController mStatusBarViewController; + private final AmbientStatusBarViewController mStatusBarViewController; + private final TouchInsetManager.TouchInsetSession mTouchInsetSession; private final BlurUtils mBlurUtils; private final DreamOverlayAnimationsController mDreamOverlayAnimationsController; private final DreamOverlayStateController mStateController; + private final LowLightTransitionCoordinator mLowLightTransitionCoordinator; private final KeyguardTransitionInteractor mKeyguardTransitionInteractor; private final ShadeInteractor mShadeInteractor; @@ -188,8 +192,9 @@ public class DreamOverlayContainerViewController extends ComplicationHostViewController complicationHostViewController, @Named(DreamOverlayModule.DREAM_OVERLAY_CONTENT_VIEW) ViewGroup contentView, @Named(DreamOverlayModule.HUB_GESTURE_INDICATOR_VIEW) View hubGestureIndicatorView, - DreamOverlayStatusBarViewController statusBarViewController, + AmbientStatusBarViewController statusBarViewController, LowLightTransitionCoordinator lowLightTransitionCoordinator, + TouchInsetManager.TouchInsetSession touchInsetSession, BlurUtils blurUtils, @Main Handler handler, @Background CoroutineDispatcher backgroundDispatcher, @@ -209,6 +214,7 @@ public class DreamOverlayContainerViewController extends super(containerView); mDreamOverlayContentView = contentView; mStatusBarViewController = statusBarViewController; + mTouchInsetSession = touchInsetSession; mBlurUtils = blurUtils; mDreamOverlayAnimationsController = animationsController; mStateController = stateController; @@ -294,6 +300,7 @@ public class DreamOverlayContainerViewController extends mHandler.removeCallbacksAndMessages(null); mPrimaryBouncerCallbackInteractor.removeBouncerExpansionCallback(mBouncerExpansionCallback); mBouncerlessScrimController.removeCallback(mBouncerlessExpansionCallback); + mTouchInsetSession.clear(); mDreamOverlayAnimationsController.cancelAnimations(); } diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayDotImageView.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayDotImageView.java index 409b196fe525..08335180db87 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayDotImageView.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayDotImageView.java @@ -31,12 +31,13 @@ import android.util.AttributeSet; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.android.systemui.ambient.statusbar.ui.AmbientStatusBarView; import com.android.systemui.res.R; import com.android.systemui.statusbar.AlphaOptimizedImageView; /** * An {@link AlphaOptimizedImageView} that is responsible for rendering a dot. Used by - * {@link DreamOverlayStatusBarView}. + * {@link AmbientStatusBarView}. */ public class DreamOverlayDotImageView extends AlphaOptimizedImageView { private final @ColorInt int mDotColor; diff --git a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayModule.java b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayModule.java index 789b7f8550d7..76fcabd635d8 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayModule.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayModule.java @@ -25,9 +25,11 @@ import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleOwner; import com.android.internal.util.Preconditions; +import com.android.systemui.ambient.statusbar.dagger.AmbientStatusBarComponent; +import com.android.systemui.ambient.statusbar.ui.AmbientStatusBarView; +import com.android.systemui.ambient.statusbar.ui.AmbientStatusBarViewController; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dreams.DreamOverlayContainerView; -import com.android.systemui.dreams.DreamOverlayStatusBarView; import com.android.systemui.res.R; import com.android.systemui.touch.TouchInsetManager; @@ -60,7 +62,7 @@ public abstract class DreamOverlayModule { public static DreamOverlayContainerView providesDreamOverlayContainerView( LayoutInflater layoutInflater) { return Preconditions.checkNotNull((DreamOverlayContainerView) - layoutInflater.inflate(R.layout.dream_overlay_container, null), + layoutInflater.inflate(R.layout.dream_overlay_container, null), "R.layout.dream_layout_container could not be properly inflated"); } @@ -95,13 +97,23 @@ public abstract class DreamOverlayModule { /** */ @Provides @DreamOverlayComponent.DreamOverlayScope - public static DreamOverlayStatusBarView providesDreamOverlayStatusBarView( + public static AmbientStatusBarView providesDreamOverlayStatusBarView( DreamOverlayContainerView view) { return Preconditions.checkNotNull(view.findViewById(R.id.dream_overlay_status_bar), "R.id.status_bar must not be null"); } - /** */ + /** + * Provides the view controller for the {@link AmbientStatusBarView} + */ + @Provides + @DreamOverlayComponent.DreamOverlayScope + public static AmbientStatusBarViewController providesStatusBarViewController( + AmbientStatusBarView view, AmbientStatusBarComponent.Factory factory) { + return factory.create(view).getController(); + } + + /** */ @Provides @DreamOverlayComponent.DreamOverlayScope @Named(MAX_BURN_IN_OFFSET) diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt index 6d2d04a70538..45a14ad69372 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt @@ -62,6 +62,8 @@ import com.android.systemui.statusbar.notification.stack.domain.interactor.heads import com.android.systemui.statusbar.notification.stack.domain.interactor.sharedNotificationContainerInteractor import com.android.systemui.statusbar.phone.scrimController import com.android.systemui.statusbar.pipeline.mobile.data.repository.fakeMobileConnectionsRepository +import com.android.systemui.statusbar.pipeline.wifi.data.repository.fakeWifiRepository +import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.wifiInteractor import com.android.systemui.statusbar.policy.data.repository.fakeDeviceProvisioningRepository import com.android.systemui.statusbar.policy.domain.interactor.deviceProvisioningInteractor import com.android.systemui.util.time.systemClock @@ -130,6 +132,8 @@ class KosmosJavaAdapter() { val shadeController by lazy { kosmos.shadeController } val shadeRepository by lazy { kosmos.shadeRepository } val shadeInteractor by lazy { kosmos.shadeInteractor } + val wifiInteractor by lazy { kosmos.wifiInteractor } + val fakeWifiRepository by lazy { kosmos.fakeWifiRepository } val ongoingActivityChipsViewModel by lazy { kosmos.ongoingActivityChipsViewModel } val scrimController by lazy { kosmos.scrimController } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepositoryKosmos.kt new file mode 100644 index 000000000000..8e656cf002ce --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/shared/data/repository/ConnectivityRepositoryKosmos.kt @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.pipeline.shared.data.repository + +import com.android.systemui.kosmos.Kosmos + +val Kosmos.fakeConnectivityRepository: FakeConnectivityRepository by + Kosmos.Fixture { FakeConnectivityRepository() } +val Kosmos.connectivityRepository: ConnectivityRepository by + Kosmos.Fixture { fakeConnectivityRepository } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/FakeWifiRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/FakeWifiRepository.kt index 97c8d5fd9e4a..709be5edf4c0 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/FakeWifiRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/FakeWifiRepository.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 The Android Open Source Project + * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositoryKosmos.kt new file mode 100644 index 000000000000..e44061a718d5 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositoryKosmos.kt @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.pipeline.wifi.data.repository + +import com.android.systemui.kosmos.Kosmos + +val Kosmos.fakeWifiRepository: FakeWifiRepository by Kosmos.Fixture { FakeWifiRepository() } +val Kosmos.wifiRepository: WifiRepository by Kosmos.Fixture { fakeWifiRepository } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractorKosmos.kt new file mode 100644 index 000000000000..703619958a26 --- /dev/null +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/wifi/domain/interactor/WifiInteractorKosmos.kt @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.pipeline.wifi.domain.interactor + +import com.android.systemui.kosmos.Kosmos +import com.android.systemui.kosmos.applicationCoroutineScope +import com.android.systemui.statusbar.pipeline.shared.data.repository.connectivityRepository +import com.android.systemui.statusbar.pipeline.wifi.data.repository.wifiRepository + +val Kosmos.wifiInteractor: WifiInteractor by + Kosmos.Fixture { + WifiInteractorImpl( + connectivityRepository, + wifiRepository, + applicationCoroutineScope, + ) + } |