diff options
4 files changed, 55 insertions, 29 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/irecording/IssueRecordingUserActionInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/irecording/IssueRecordingUserActionInteractorTest.kt index 4e5806902a10..5bd3645b4cab 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/irecording/IssueRecordingUserActionInteractorTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/irecording/IssueRecordingUserActionInteractorTest.kt @@ -31,6 +31,7 @@ import com.android.systemui.qs.pipeline.domain.interactor.panelInteractor import com.android.systemui.qs.tiles.base.interactor.QSTileInput import com.android.systemui.qs.tiles.viewmodel.QSTileUserAction import com.android.systemui.recordissue.RecordIssueDialogDelegate +import com.android.systemui.screenrecord.RecordingController import com.android.systemui.settings.UserContextProvider import com.android.systemui.settings.userTracker import com.android.systemui.statusbar.phone.KeyguardDismissUtil @@ -40,12 +41,16 @@ import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.mockito.Mock import org.mockito.Mockito.mock +import org.mockito.MockitoAnnotations @SmallTest @RunWith(AndroidJUnit4::class) class IssueRecordingUserActionInteractorTest : SysuiTestCase() { + @Mock private lateinit var recordingController: RecordingController + val user = UserHandle(1) val kosmos = Kosmos().also { it.testCase = this } @@ -56,6 +61,7 @@ class IssueRecordingUserActionInteractorTest : SysuiTestCase() { @Before fun setup() { + MockitoAnnotations.initMocks(this) hasCreatedDialogDelegate = false with(kosmos) { val factory = @@ -84,7 +90,8 @@ class IssueRecordingUserActionInteractorTest : SysuiTestCase() { dialogTransitionAnimator, panelInteractor, userTracker, - factory + factory, + recordingController, ) } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/RecordIssueTile.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/RecordIssueTile.kt index a3feb2b09da3..d89e73d2c69f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/RecordIssueTile.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/RecordIssueTile.kt @@ -43,12 +43,14 @@ import com.android.systemui.qs.QsEventLogger 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.recordissue.IssueRecordingService +import com.android.systemui.recordissue.IssueRecordingService.Companion.getStartIntent +import com.android.systemui.recordissue.IssueRecordingService.Companion.getStopIntent import com.android.systemui.recordissue.IssueRecordingState import com.android.systemui.recordissue.RecordIssueDialogDelegate import com.android.systemui.recordissue.RecordIssueModule.Companion.TILE_SPEC import com.android.systemui.recordissue.TraceurMessageSender import com.android.systemui.res.R +import com.android.systemui.screenrecord.RecordingController import com.android.systemui.screenrecord.RecordingService import com.android.systemui.settings.UserContextProvider import com.android.systemui.statusbar.phone.KeyguardDismissUtil @@ -56,6 +58,9 @@ import com.android.systemui.statusbar.policy.KeyguardStateController import java.util.concurrent.Executor import javax.inject.Inject +const val DELAY_MS: Long = 0 +const val INTERVAL_MS: Long = 1000 + class RecordIssueTile @Inject constructor( @@ -77,6 +82,7 @@ constructor( @Background private val bgExecutor: Executor, private val issueRecordingState: IssueRecordingState, private val delegateFactory: RecordIssueDialogDelegate.Factory, + private val recordingController: RecordingController, ) : QSTileImpl<QSTile.BooleanState>( host, @@ -132,23 +138,25 @@ constructor( } private fun startIssueRecordingService() = - PendingIntent.getForegroundService( - userContextProvider.userContext, - RecordingService.REQUEST_CODE, - IssueRecordingService.getStartIntent(userContextProvider.userContext), - PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE - ) - .send(BroadcastOptions.makeBasic().apply { isInteractive = true }.toBundle()) + recordingController.startCountdown( + DELAY_MS, + INTERVAL_MS, + pendingServiceIntent(getStartIntent(userContextProvider.userContext)), + pendingServiceIntent(getStopIntent(userContextProvider.userContext)) + ) private fun stopIssueRecordingService() = - PendingIntent.getService( - userContextProvider.userContext, - RecordingService.REQUEST_CODE, - IssueRecordingService.getStopIntent(userContextProvider.userContext), - PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE - ) + pendingServiceIntent(getStopIntent(userContextProvider.userContext)) .send(BroadcastOptions.makeBasic().apply { isInteractive = true }.toBundle()) + private fun pendingServiceIntent(action: Intent) = + PendingIntent.getService( + userContextProvider.userContext, + RecordingService.REQUEST_CODE, + action, + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE + ) + private fun showPrompt(expandable: Expandable?) { val dialog: AlertDialog = delegateFactory diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/irecording/IssueRecordingUserActionInteractor.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/irecording/IssueRecordingUserActionInteractor.kt index 4971fefc8f57..0c8a3750f6fe 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/irecording/IssueRecordingUserActionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/irecording/IssueRecordingUserActionInteractor.kt @@ -19,6 +19,7 @@ package com.android.systemui.qs.tiles.impl.irecording import android.app.AlertDialog import android.app.BroadcastOptions import android.app.PendingIntent +import android.content.Intent import android.util.Log import com.android.internal.jank.InteractionJankMonitor import com.android.systemui.animation.DialogCuj @@ -27,12 +28,16 @@ import com.android.systemui.animation.Expandable import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.plugins.ActivityStarter import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractor +import com.android.systemui.qs.tiles.DELAY_MS +import com.android.systemui.qs.tiles.INTERVAL_MS import com.android.systemui.qs.tiles.base.interactor.QSTileInput import com.android.systemui.qs.tiles.base.interactor.QSTileUserActionInteractor import com.android.systemui.qs.tiles.viewmodel.QSTileUserAction -import com.android.systemui.recordissue.IssueRecordingService +import com.android.systemui.recordissue.IssueRecordingService.Companion.getStartIntent +import com.android.systemui.recordissue.IssueRecordingService.Companion.getStopIntent import com.android.systemui.recordissue.RecordIssueDialogDelegate import com.android.systemui.recordissue.RecordIssueModule.Companion.TILE_SPEC +import com.android.systemui.screenrecord.RecordingController import com.android.systemui.screenrecord.RecordingService import com.android.systemui.settings.UserContextProvider import com.android.systemui.statusbar.phone.KeyguardDismissUtil @@ -53,6 +58,7 @@ constructor( private val panelInteractor: PanelInteractor, private val userContextProvider: UserContextProvider, private val delegateFactory: RecordIssueDialogDelegate.Factory, + private val recordingController: RecordingController, ) : QSTileUserActionInteractor<IssueRecordingModel> { override suspend fun handleInput(input: QSTileInput<IssueRecordingModel>) { @@ -95,20 +101,22 @@ constructor( } private fun startIssueRecordingService() = - PendingIntent.getForegroundService( - userContextProvider.userContext, - RecordingService.REQUEST_CODE, - IssueRecordingService.getStartIntent(userContextProvider.userContext), - PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE - ) - .send(BroadcastOptions.makeBasic().apply { isInteractive = true }.toBundle()) + recordingController.startCountdown( + DELAY_MS, + INTERVAL_MS, + pendingServiceIntent(getStartIntent(userContextProvider.userContext)), + pendingServiceIntent(getStopIntent(userContextProvider.userContext)) + ) private fun stopIssueRecordingService() = - PendingIntent.getService( - userContextProvider.userContext, - RecordingService.REQUEST_CODE, - IssueRecordingService.getStopIntent(userContextProvider.userContext), - PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE - ) + pendingServiceIntent(getStopIntent(userContextProvider.userContext)) .send(BroadcastOptions.makeBasic().apply { isInteractive = true }.toBundle()) + + private fun pendingServiceIntent(action: Intent) = + PendingIntent.getService( + userContextProvider.userContext, + RecordingService.REQUEST_CODE, + action, + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE + ) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/RecordIssueTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/RecordIssueTileTest.kt index 73548baad377..ca518f9bc5d7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/RecordIssueTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/RecordIssueTileTest.kt @@ -35,6 +35,7 @@ import com.android.systemui.recordissue.IssueRecordingState import com.android.systemui.recordissue.RecordIssueDialogDelegate import com.android.systemui.recordissue.TraceurMessageSender import com.android.systemui.res.R +import com.android.systemui.screenrecord.RecordingController import com.android.systemui.settings.UserContextProvider import com.android.systemui.statusbar.phone.KeyguardDismissUtil import com.android.systemui.statusbar.phone.SystemUIDialog @@ -65,6 +66,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 activityStarter: ActivityStarter @Mock private lateinit var qsLogger: QSLogger @Mock private lateinit var keyguardDismissUtil: KeyguardDismissUtil @@ -109,6 +111,7 @@ class RecordIssueTileTest : SysuiTestCase() { Executors.newSingleThreadExecutor(), issueRecordingState, delegateFactory, + recordingController, ) } |