Partial Screen Sharing: Task Switcher - Dagger Module and Core Startable
Implement the wiring to start the task switcher triggering: - Creates the dagger module that binds the repo implementations. Currently binds the no-op implementation of the MediaProjectionRepository - Add the core startable to the sysui module Bug: 286201261 Test: MediaProjectionTaskSwitcherCoreStartableTest.kt Change-Id: Id14bfaeddc16b4ec675d3f381da8f4694d7aae14
This commit is contained in:
committed by
Chris Göllner
parent
27f8a2266c
commit
2cbdf89c36
@@ -42,6 +42,7 @@ import com.android.systemui.media.dialog.MediaOutputSwitcherDialogUI
|
||||
import com.android.systemui.media.taptotransfer.MediaTttCommandLineHelper
|
||||
import com.android.systemui.media.taptotransfer.receiver.MediaTttChipControllerReceiver
|
||||
import com.android.systemui.media.taptotransfer.sender.MediaTttSenderCoordinator
|
||||
import com.android.systemui.mediaprojection.taskswitcher.MediaProjectionTaskSwitcherCoreStartable
|
||||
import com.android.systemui.power.PowerUI
|
||||
import com.android.systemui.reardisplay.RearDisplayDialogController
|
||||
import com.android.systemui.recents.Recents
|
||||
@@ -111,6 +112,14 @@ abstract class SystemUICoreStartableModule {
|
||||
@ClassKey(KeyboardUI::class)
|
||||
abstract fun bindKeyboardUI(sysui: KeyboardUI): CoreStartable
|
||||
|
||||
/** Inject into MediaProjectionTaskSwitcherCoreStartable. */
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ClassKey(MediaProjectionTaskSwitcherCoreStartable::class)
|
||||
abstract fun bindProjectedTaskListener(
|
||||
sysui: MediaProjectionTaskSwitcherCoreStartable
|
||||
): CoreStartable
|
||||
|
||||
/** Inject into KeyguardBiometricLockoutLogger */
|
||||
@Binds
|
||||
@IntoMap
|
||||
|
||||
@@ -59,6 +59,7 @@ import com.android.systemui.log.dagger.LogModule;
|
||||
import com.android.systemui.log.dagger.MonitorLog;
|
||||
import com.android.systemui.log.table.TableLogBuffer;
|
||||
import com.android.systemui.mediaprojection.appselector.MediaProjectionModule;
|
||||
import com.android.systemui.mediaprojection.taskswitcher.MediaProjectionTaskSwitcherModule;
|
||||
import com.android.systemui.model.SysUiState;
|
||||
import com.android.systemui.motiontool.MotionToolModule;
|
||||
import com.android.systemui.navigationbar.NavigationBarComponent;
|
||||
@@ -182,6 +183,7 @@ import javax.inject.Named;
|
||||
LockscreenLayoutModule.class,
|
||||
LogModule.class,
|
||||
MediaProjectionModule.class,
|
||||
MediaProjectionTaskSwitcherModule.class,
|
||||
MotionToolModule.class,
|
||||
PeopleHubModule.class,
|
||||
PeopleModule.class,
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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.mediaprojection.taskswitcher
|
||||
|
||||
import com.android.systemui.CoreStartable
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.flags.FeatureFlags
|
||||
import com.android.systemui.flags.Flags
|
||||
import com.android.systemui.mediaprojection.taskswitcher.ui.TaskSwitcherNotificationCoordinator
|
||||
import javax.inject.Inject
|
||||
|
||||
@SysUISingleton
|
||||
class MediaProjectionTaskSwitcherCoreStartable
|
||||
@Inject
|
||||
constructor(
|
||||
private val notificationCoordinator: TaskSwitcherNotificationCoordinator,
|
||||
private val featureFlags: FeatureFlags,
|
||||
) : CoreStartable {
|
||||
|
||||
override fun start() {
|
||||
if (featureFlags.isEnabled(Flags.PARTIAL_SCREEN_SHARING_TASK_SWITCHER)) {
|
||||
notificationCoordinator.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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.mediaprojection.taskswitcher
|
||||
|
||||
import com.android.systemui.mediaprojection.taskswitcher.data.repository.ActivityTaskManagerTasksRepository
|
||||
import com.android.systemui.mediaprojection.taskswitcher.data.repository.MediaProjectionRepository
|
||||
import com.android.systemui.mediaprojection.taskswitcher.data.repository.NoOpMediaProjectionRepository
|
||||
import com.android.systemui.mediaprojection.taskswitcher.data.repository.TasksRepository
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
|
||||
@Module
|
||||
interface MediaProjectionTaskSwitcherModule {
|
||||
|
||||
@Binds fun mediaRepository(impl: NoOpMediaProjectionRepository): MediaProjectionRepository
|
||||
|
||||
@Binds fun tasksRepository(impl: ActivityTaskManagerTasksRepository): TasksRepository
|
||||
}
|
||||
@@ -18,6 +18,7 @@ package com.android.systemui.mediaprojection.taskswitcher.data.repository
|
||||
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.mediaprojection.taskswitcher.data.model.MediaProjectionState
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.emptyFlow
|
||||
|
||||
@@ -26,7 +27,7 @@ import kotlinx.coroutines.flow.emptyFlow
|
||||
* placeholder, while the real implementation is not completed.
|
||||
*/
|
||||
@SysUISingleton
|
||||
class NoOpMediaProjectionRepository : MediaProjectionRepository {
|
||||
class NoOpMediaProjectionRepository @Inject constructor() : MediaProjectionRepository {
|
||||
|
||||
override val mediaProjectionState: Flow<MediaProjectionState> = emptyFlow()
|
||||
}
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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.mediaprojection.taskswitcher
|
||||
|
||||
import android.testing.AndroidTestingRunner
|
||||
import androidx.test.filters.SmallTest
|
||||
import com.android.systemui.SysuiTestCase
|
||||
import com.android.systemui.flags.FeatureFlags
|
||||
import com.android.systemui.flags.Flags
|
||||
import com.android.systemui.mediaprojection.taskswitcher.ui.TaskSwitcherNotificationCoordinator
|
||||
import com.android.systemui.util.mockito.whenever
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.mockito.Mock
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.Mockito.verifyZeroInteractions
|
||||
import org.mockito.MockitoAnnotations
|
||||
|
||||
@RunWith(AndroidTestingRunner::class)
|
||||
@SmallTest
|
||||
class MediaProjectionTaskSwitcherCoreStartableTest : SysuiTestCase() {
|
||||
|
||||
@Mock private lateinit var flags: FeatureFlags
|
||||
@Mock private lateinit var coordinator: TaskSwitcherNotificationCoordinator
|
||||
|
||||
private lateinit var coreStartable: MediaProjectionTaskSwitcherCoreStartable
|
||||
|
||||
@Before
|
||||
fun setUp() {
|
||||
MockitoAnnotations.initMocks(this)
|
||||
|
||||
coreStartable = MediaProjectionTaskSwitcherCoreStartable(coordinator, flags)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun start_flagEnabled_startsCoordinator() {
|
||||
whenever(flags.isEnabled(Flags.PARTIAL_SCREEN_SHARING_TASK_SWITCHER)).thenReturn(true)
|
||||
|
||||
coreStartable.start()
|
||||
|
||||
verify(coordinator).start()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun start_flagDisabled_doesNotStartCoordinator() {
|
||||
whenever(flags.isEnabled(Flags.PARTIAL_SCREEN_SHARING_TASK_SWITCHER)).thenReturn(false)
|
||||
|
||||
coreStartable.start()
|
||||
|
||||
verifyZeroInteractions(coordinator)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user