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

Commit 586cc8b4 authored by Stefan Andonian's avatar Stefan Andonian
Browse files

Fix "Record issue doesn't stop after tapping the chips on status bar"

This issue was happening because the IssueRecordingService wasn't using
the RecordingController to start the recording, but instead was
bypassing it and using the IssueRecordingService directly. The solution
was simply to use the RecordingController, which handled the chip logic
already.

Bug: 364129809
Test: Verified that the fix works locally on my device.
Flag: EXEMPT bug fix
Change-Id: I9e3f9bac6ca11d089cb947c07d145804f916c510
parent 32c3d5fe
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -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,
                )
        }
    }
+22 −14
Original line number Diff line number Diff line
@@ -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,22 +138,24 @@ constructor(
    }

    private fun startIssueRecordingService() =
        PendingIntent.getForegroundService(
                userContextProvider.userContext,
                RecordingService.REQUEST_CODE,
                IssueRecordingService.getStartIntent(userContextProvider.userContext),
                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
        recordingController.startCountdown(
            DELAY_MS,
            INTERVAL_MS,
            pendingServiceIntent(getStartIntent(userContextProvider.userContext)),
            pendingServiceIntent(getStopIntent(userContextProvider.userContext))
        )
            .send(BroadcastOptions.makeBasic().apply { isInteractive = true }.toBundle())

    private fun stopIssueRecordingService() =
        pendingServiceIntent(getStopIntent(userContextProvider.userContext))
            .send(BroadcastOptions.makeBasic().apply { isInteractive = true }.toBundle())

    private fun pendingServiceIntent(action: Intent) =
        PendingIntent.getService(
            userContextProvider.userContext,
            RecordingService.REQUEST_CODE,
                IssueRecordingService.getStopIntent(userContextProvider.userContext),
            action,
            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
        )
            .send(BroadcastOptions.makeBasic().apply { isInteractive = true }.toBundle())

    private fun showPrompt(expandable: Expandable?) {
        val dialog: AlertDialog =
+22 −14
Original line number Diff line number Diff line
@@ -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
        recordingController.startCountdown(
            DELAY_MS,
            INTERVAL_MS,
            pendingServiceIntent(getStartIntent(userContextProvider.userContext)),
            pendingServiceIntent(getStopIntent(userContextProvider.userContext))
        )
            .send(BroadcastOptions.makeBasic().apply { isInteractive = true }.toBundle())

    private fun stopIssueRecordingService() =
        pendingServiceIntent(getStopIntent(userContextProvider.userContext))
            .send(BroadcastOptions.makeBasic().apply { isInteractive = true }.toBundle())

    private fun pendingServiceIntent(action: Intent) =
        PendingIntent.getService(
            userContextProvider.userContext,
            RecordingService.REQUEST_CODE,
                IssueRecordingService.getStopIntent(userContextProvider.userContext),
            action,
            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
        )
            .send(BroadcastOptions.makeBasic().apply { isInteractive = true }.toBundle())
}
+3 −0
Original line number Diff line number Diff line
@@ -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,
            )
    }