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

Commit 350bed0a authored by Stefan Andonian's avatar Stefan Andonian
Browse files

Replace shared dagger inject with Intent Extras in IssueRecordingService.

This is necessary because dagger injects are not shared among different
users, and the IssueRecordingService is not started in the system user
in headless system user mode.

Bug: 364824477
Test: Verified this works on device.
Flag: EXEMPT bug fix
Change-Id: I98ee14ae7819456d3a0cb42c039a4426dece1006
parent 1f62ad35
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -30,9 +30,11 @@ import com.android.systemui.plugins.statusbar.statusBarStateController
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.IssueRecordingState
import com.android.systemui.recordissue.RecordIssueDialogDelegate
import com.android.systemui.screenrecord.RecordingController
import com.android.systemui.settings.UserContextProvider
import com.android.systemui.settings.userFileManager
import com.android.systemui.settings.userTracker
import com.android.systemui.statusbar.phone.KeyguardDismissUtil
import com.android.systemui.statusbar.policy.keyguardStateController
@@ -81,10 +83,11 @@ class IssueRecordingUserActionInteractorTest : SysuiTestCase() {
            underTest =
                IssueRecordingUserActionInteractor(
                    testDispatcher,
                    IssueRecordingState(userTracker, userFileManager),
                    KeyguardDismissUtil(
                        keyguardStateController,
                        statusBarStateController,
                        activityStarter
                        activityStarter,
                    ),
                    keyguardStateController,
                    dialogTransitionAnimator,
+2 −2
Original line number Diff line number Diff line
@@ -107,7 +107,7 @@ class IssueRecordingServiceSessionTest : SysuiTestCase() {

    @Test
    fun requestBugreport_afterReceivingShareCommand_withTakeBugreportTrue() {
        issueRecordingState.takeBugreport = true
        underTest.takeBugReport = true
        val uri = mock<Uri>()

        underTest.share(0, uri)
@@ -118,7 +118,7 @@ class IssueRecordingServiceSessionTest : SysuiTestCase() {

    @Test
    fun sharesTracesDirectly_afterReceivingShareCommand_withTakeBugreportFalse() {
        issueRecordingState.takeBugreport = false
        underTest.takeBugReport = false
        val uri = mock<Uri>()

        underTest.share(0, uri)
+8 −1
Original line number Diff line number Diff line
@@ -152,7 +152,14 @@ constructor(
        recordingController.startCountdown(
            DELAY_MS,
            INTERVAL_MS,
            pendingServiceIntent(getStartIntent(userContextProvider.userContext)),
            pendingServiceIntent(
                getStartIntent(
                    userContextProvider.userContext,
                    issueRecordingState.traceConfig,
                    issueRecordingState.recordScreen,
                    issueRecordingState.takeBugreport,
                )
            ),
            pendingServiceIntent(getStopIntent(userContextProvider.userContext)),
        )

+12 −3
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import com.android.systemui.qs.tiles.base.interactor.QSTileUserActionInteractor
import com.android.systemui.qs.tiles.viewmodel.QSTileUserAction
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.screenrecord.RecordingController
@@ -52,6 +53,7 @@ class IssueRecordingUserActionInteractor
@Inject
constructor(
    @Main private val mainCoroutineContext: CoroutineContext,
    private val state: IssueRecordingState,
    private val keyguardDismissUtil: KeyguardDismissUtil,
    private val keyguardStateController: KeyguardStateController,
    private val dialogTransitionAnimator: DialogTransitionAnimator,
@@ -104,8 +106,15 @@ constructor(
        recordingController.startCountdown(
            DELAY_MS,
            INTERVAL_MS,
            pendingServiceIntent(getStartIntent(userContextProvider.userContext)),
            pendingServiceIntent(getStopIntent(userContextProvider.userContext))
            pendingServiceIntent(
                getStartIntent(
                    userContextProvider.userContext,
                    state.traceConfig,
                    state.recordScreen,
                    state.takeBugreport,
                )
            ),
            pendingServiceIntent(getStopIntent(userContextProvider.userContext)),
        )

    private fun stopIssueRecordingService() =
@@ -117,6 +126,6 @@ constructor(
            userContextProvider.userContext,
            RecordingService.REQUEST_CODE,
            action,
            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,
        )
}
+22 −3
Original line number Diff line number Diff line
@@ -38,6 +38,8 @@ import com.android.systemui.screenrecord.RecordingService
import com.android.systemui.screenrecord.RecordingServiceStrings
import com.android.systemui.settings.UserContextProvider
import com.android.systemui.statusbar.phone.KeyguardDismissUtil
import com.android.traceur.MessageConstants.INTENT_EXTRA_TRACE_TYPE
import com.android.traceur.TraceConfig
import java.util.concurrent.Executor
import javax.inject.Inject

@@ -110,7 +112,13 @@ constructor(
        when (intent?.action) {
            ACTION_START -> {
                session.start()
                if (!issueRecordingState.recordScreen) {
                with(session) {
                    traceConfig =
                        intent.getParcelableExtra(INTENT_EXTRA_TRACE_TYPE, TraceConfig::class.java)
                    takeBugReport = intent.getBooleanExtra(EXTRA_BUG_REPORT, false)
                    start()
                }
                if (!intent.getBooleanExtra(EXTRA_SCREEN_RECORD, false)) {
                    // If we don't want to record the screen, the ACTION_SHOW_START_NOTIF action
                    // will circumvent the RecordingService's screen recording start code.
                    return super.onStartCommand(Intent(ACTION_SHOW_START_NOTIF), flags, startId)
@@ -136,6 +144,8 @@ constructor(
    companion object {
        private const val TAG = "IssueRecordingService"
        private const val CHANNEL_ID = "issue_record"
        const val EXTRA_SCREEN_RECORD = "extra_screenRecord"
        const val EXTRA_BUG_REPORT = "extra_bugReport"

        /**
         * Get an intent to stop the issue recording service.
@@ -153,8 +163,17 @@ constructor(
         *
         * @param context Context from the requesting activity
         */
        fun getStartIntent(context: Context): Intent =
            Intent(context, IssueRecordingService::class.java).setAction(ACTION_START)
        fun getStartIntent(
            context: Context,
            traceConfig: TraceConfig,
            screenRecord: Boolean,
            bugReport: Boolean,
        ): Intent =
            Intent(context, IssueRecordingService::class.java)
                .setAction(ACTION_START)
                .putExtra(INTENT_EXTRA_TRACE_TYPE, traceConfig)
                .putExtra(EXTRA_SCREEN_RECORD, screenRecord)
                .putExtra(EXTRA_BUG_REPORT, bugReport)
    }
}

Loading