Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7f4de0a7 authored by Xi Zhang's avatar Xi Zhang
Browse files

Create UX interface that wraps RecordingController

This is a strict mechanical refactor to prepare for a flagged new feature.

In this CL, we create a new ScreenRecordUxController interface with 2 implementations: a ScreenRecordingLegacyUxControllerImpl 1:1 that wraps the existing RecordingController and forwards all the calls, and the ScreenReactionsUxControllerImpl which will contain the new UX design.

Next stop: consolidate functions in ScreenRecordUxController into UX events handlers, so it's no longer 1:1 redirection. For example, create a "onTileClicked" functions and move the code in ScreenRecordTile#showDialog to ScreenRecordUxController. The ScreenRecordTile will no longer contain UX code. It will be handled by code in android/systemui.

Test: manual tests
Flag: EXEMPT strict mechanical refactors
Bug: 409330121

Change-Id: Icac4837a0b996130f558794b2b91013786f6c933
parent 9b88eae5
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@ import com.android.systemui.recordissue.IssueRecordingState
import com.android.systemui.recordissue.RecordIssueDialogDelegate
import com.android.systemui.recordissue.TraceurConnection
import com.android.systemui.res.R
import com.android.systemui.screenrecord.RecordingController
import com.android.systemui.screenrecord.ScreenRecordUxController
import com.android.systemui.settings.UserContextProvider
import com.android.systemui.statusbar.phone.KeyguardDismissUtil
import com.android.systemui.statusbar.phone.SystemUIDialog
@@ -69,7 +69,7 @@ class RecordIssueTileTest : SysuiTestCase() {
    @Mock private lateinit var qsEventLogger: QsEventLogger
    @Mock private lateinit var metricsLogger: MetricsLogger
    @Mock private lateinit var statusBarStateController: StatusBarStateController
    @Mock private lateinit var recordingController: RecordingController
    @Mock private lateinit var screenRecordUxController: ScreenRecordUxController
    @Mock private lateinit var activityStarter: ActivityStarter
    @Mock private lateinit var qsLogger: QSLogger
    @Mock private lateinit var keyguardDismissUtil: KeyguardDismissUtil
@@ -120,7 +120,7 @@ class RecordIssueTileTest : SysuiTestCase() {
                Executors.newSingleThreadExecutor(),
                issueRecordingState,
                delegateFactory,
                recordingController,
                screenRecordUxController,
            )
    }

+2 −2
Original line number Diff line number Diff line
@@ -59,7 +59,7 @@ import com.android.systemui.qs.logging.QSLogger;
import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractor;
import com.android.systemui.qs.tileimpl.QSTileImpl;
import com.android.systemui.res.R;
import com.android.systemui.screenrecord.RecordingController;
import com.android.systemui.screenrecord.ScreenRecordUxController;
import com.android.systemui.settings.UserContextProvider;
import com.android.systemui.statusbar.phone.KeyguardDismissUtil;
import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -90,7 +90,7 @@ public class ScreenRecordTileTest extends SysuiTestCase {
    }

    @Mock
    private RecordingController mController;
    private ScreenRecordUxController mController;
    @Mock
    private QSHost mHost;
    @Mock
+3 −3
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ import com.android.systemui.qs.tiles.base.shared.model.QSTileUserAction
import com.android.systemui.qs.tiles.impl.irecording.data.model.IssueRecordingModel
import com.android.systemui.recordissue.IssueRecordingState
import com.android.systemui.recordissue.RecordIssueDialogDelegate
import com.android.systemui.screenrecord.RecordingController
import com.android.systemui.screenrecord.ScreenRecordUxController
import com.android.systemui.settings.UserContextProvider
import com.android.systemui.settings.userFileManager
import com.android.systemui.settings.userTracker
@@ -54,7 +54,7 @@ import org.mockito.MockitoAnnotations
@RunWith(AndroidJUnit4::class)
class IssueRecordingUserActionInteractorTest : SysuiTestCase() {

    @Mock private lateinit var recordingController: RecordingController
    @Mock private lateinit var screenRecordUxController: ScreenRecordUxController

    val user = UserHandle(1)
    val kosmos = testKosmos().also { it.testCase = this }
@@ -103,7 +103,7 @@ class IssueRecordingUserActionInteractorTest : SysuiTestCase() {
                    panelInteractor,
                    userTracker,
                    factory,
                    recordingController,
                    screenRecordUxController,
                )
        }
    }
+9 −9
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ import com.android.systemui.mediaprojection.MediaProjectionMetricsLogger
import com.android.systemui.plugins.ActivityStarter.OnDismissAction
import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractor
import com.android.systemui.qs.tiles.base.domain.model.QSTileInputTestKtx
import com.android.systemui.screenrecord.RecordingController
import com.android.systemui.screenrecord.ScreenRecordUxController
import com.android.systemui.screenrecord.data.model.ScreenRecordModel
import com.android.systemui.screenrecord.data.repository.ScreenRecordRepositoryImpl
import com.android.systemui.statusbar.phone.KeyguardDismissUtil
@@ -56,13 +56,13 @@ class ScreenRecordTileUserActionInteractorTest : SysuiTestCase() {
    private val keyguardDismissUtil = mock<KeyguardDismissUtil>()
    private val panelInteractor = mock<PanelInteractor>()
    private val dialog = mock<Dialog>()
    private val recordingController =
        mock<RecordingController> { on { createScreenRecordDialog(any()) } doReturn dialog }
    private val screenRecordUxController =
        mock<ScreenRecordUxController> { on { createScreenRecordDialog(any()) } doReturn dialog }

    private val screenRecordRepository =
        ScreenRecordRepositoryImpl(
            bgCoroutineContext = testScope.testScheduler,
            recordingController = recordingController,
            screenRecordUxController = screenRecordUxController,
        )

    private val underTest =
@@ -70,7 +70,7 @@ class ScreenRecordTileUserActionInteractorTest : SysuiTestCase() {
            testScope.testScheduler,
            testScope.testScheduler,
            screenRecordRepository,
            recordingController,
            screenRecordUxController,
            keyguardInteractor,
            keyguardDismissUtil,
            dialogTransitionAnimator,
@@ -84,7 +84,7 @@ class ScreenRecordTileUserActionInteractorTest : SysuiTestCase() {

        underTest.handleInput(QSTileInputTestKtx.click(startingModel))

        verify(recordingController).cancelCountdown()
        verify(screenRecordUxController).cancelCountdown()
    }

    @Test
@@ -93,7 +93,7 @@ class ScreenRecordTileUserActionInteractorTest : SysuiTestCase() {

        underTest.handleInput(QSTileInputTestKtx.click(recordingModel))

        verify(recordingController).stopRecording(eq(StopReason.STOP_QS_TILE))
        verify(screenRecordUxController).stopRecording(eq(StopReason.STOP_QS_TILE))
    }

    @Test
@@ -102,7 +102,7 @@ class ScreenRecordTileUserActionInteractorTest : SysuiTestCase() {

        underTest.handleInput(QSTileInputTestKtx.click(recordingModel))
        val onStartRecordingClickedCaptor = argumentCaptor<Runnable>()
        verify(recordingController)
        verify(screenRecordUxController)
            .createScreenRecordDialog(onStartRecordingClickedCaptor.capture())

        val onDismissActionCaptor = argumentCaptor<OnDismissAction>()
@@ -134,7 +134,7 @@ class ScreenRecordTileUserActionInteractorTest : SysuiTestCase() {
            QSTileInputTestKtx.click(recordingModel, UserHandle.CURRENT, expandable)
        )
        val onStartRecordingClickedCaptor = argumentCaptor<Runnable>()
        verify(recordingController)
        verify(screenRecordUxController)
            .createScreenRecordDialog(onStartRecordingClickedCaptor.capture())

        val onDismissActionCaptor = argumentCaptor<OnDismissAction>()
+4 −4
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static com.android.systemui.screenrecord.RecordingService.GROUP_KEY_ERROR
import static com.android.systemui.screenrecord.RecordingService.GROUP_KEY_SAVED;
import static com.android.systemui.screenrecord.RecordingService.NOTIF_GROUP_ID_ERROR_SAVING;
import static com.android.systemui.screenrecord.RecordingService.NOTIF_GROUP_ID_SAVED;
import static com.android.systemui.screenrecord.ScreenRecordUxController.INTENT_UPDATE_STATE;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -78,7 +79,7 @@ public class RecordingServiceTest extends SysuiTestCase {
    @Mock
    private UiEventLogger mUiEventLogger;
    @Mock
    private RecordingController mController;
    private ScreenRecordUxController mController;
    @Mock
    private NotificationManager mNotificationManager;
    @Mock
@@ -109,7 +110,7 @@ public class RecordingServiceTest extends SysuiTestCase {

    private class RecordingServiceTestable extends RecordingService {
        RecordingServiceTestable(
                RecordingController controller, Executor executor,
                ScreenRecordUxController controller, Executor executor,
                Handler handler, UiEventLogger uiEventLogger,
                NotificationManager notificationManager,
                UserContextProvider userContextTracker, KeyguardDismissUtil keyguardDismissUtil,
@@ -328,8 +329,7 @@ public class RecordingServiceTest extends SysuiTestCase {
        } else {
            ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class);
            verify(mRecordingService).sendBroadcast(argumentCaptor.capture(), eq(PERMISSION_SELF));
            assertEquals(RecordingController.INTENT_UPDATE_STATE,
                    argumentCaptor.getValue().getAction());
            assertEquals(INTENT_UPDATE_STATE, argumentCaptor.getValue().getAction());
        }
    }
}
Loading