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

Commit bcd4d487 authored by Bryce Lee's avatar Bryce Lee Committed by Android (Google) Code Review
Browse files

Merge "Handle EditModeState when starting EditWidgetsActivity." into main

parents 534dd5ee 298586b7
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -50,7 +50,6 @@ import com.android.systemui.communal.domain.model.CommunalContentModel
import com.android.systemui.communal.domain.model.CommunalTransitionProgressModel
import com.android.systemui.communal.shared.model.CommunalContentSize
import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.communal.shared.model.EditModeState
import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
@@ -594,11 +593,8 @@ class CommunalInteractorTest(flags: FlagsParameterization) : SysuiTestCase() {
    @Test
    fun testShowWidgetEditorStartsActivity() =
        kosmos.runTest {
            val editModeState by collectLastValue(communalSceneInteractor.editModeState)

            underTest.showWidgetEditor()

            assertThat(editModeState).isEqualTo(EditModeState.STARTING)
            verify(editWidgetsActivityStarter).startActivity()
        }

+73 −4
Original line number Diff line number Diff line
@@ -16,11 +16,14 @@

package com.android.systemui.communal.widgets

import android.app.ActivityManager
import android.content.ComponentName
import android.content.Intent
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.communal.domain.interactor.communalSceneInteractor
import com.android.systemui.communal.shared.model.EditModeState
import com.android.systemui.kosmos.testScope
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.testKosmos
@@ -31,9 +34,10 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.kotlin.any
import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.clearInvocations
import org.mockito.kotlin.eq
import org.mockito.kotlin.mock
import org.mockito.kotlin.times
import org.mockito.kotlin.never
import org.mockito.kotlin.verify

@SmallTest
@@ -53,9 +57,59 @@ class EditWidgetsActivityStarterTest : SysuiTestCase() {
            EditWidgetsActivityStarterImpl(
                context.applicationContext,
                activityStarter,
                kosmos.communalSceneInteractor,
            )
    }

    @Test
    fun activityLaunch_editModeClearedWhenActivityLaunchCancelled() {
        with(kosmos) {
            testScope.runTest {
                underTest.startActivity(shouldOpenWidgetPickerOnStart = true)

                val captor = argumentCaptor<ActivityStarter.Callback>()
                verify(activityStarter)
                    .startActivityDismissingKeyguard(
                        any(),
                        eq(true),
                        eq(true),
                        any(),
                        captor.capture(),
                    )

                assertThat(communalSceneInteractor.editModeState.value)
                    .isEqualTo(EditModeState.STARTING)

                captor.lastValue.onActivityStarted(ActivityManager.START_CANCELED)

                assertThat(communalSceneInteractor.editModeState.value).isNull()
            }
        }
    }

    @Test
    fun activityLaunch_suppressesSubsequentLaunchesWhenPending() {
        with(kosmos) {
            testScope.runTest {
                underTest.startActivity(shouldOpenWidgetPickerOnStart = true)
                verify(activityStarter)
                    .startActivityDismissingKeyguard(any(), eq(true), eq(true), any(), any())

                clearInvocations(activityStarter)

                underTest.startActivity(shouldOpenWidgetPickerOnStart = false)
                verify(activityStarter, never())
                    .startActivityDismissingKeyguard(any(), eq(true), eq(true), any(), any())

                communalSceneInteractor.setEditModeState(null)

                underTest.startActivity(shouldOpenWidgetPickerOnStart = true)
                verify(activityStarter)
                    .startActivityDismissingKeyguard(any(), eq(true), eq(true), any(), any())
            }
        }
    }

    @Test
    fun activityLaunch_intentIsWellFormed() {
        with(kosmos) {
@@ -64,7 +118,13 @@ class EditWidgetsActivityStarterTest : SysuiTestCase() {

                val captor = argumentCaptor<Intent>()
                verify(activityStarter)
                    .startActivityDismissingKeyguard(captor.capture(), eq(true), eq(true), any())
                    .startActivityDismissingKeyguard(
                        captor.capture(),
                        eq(true),
                        eq(true),
                        any(),
                        any(),
                    )
                assertThat(captor.lastValue.component).isEqualTo(component)
                assertThat(captor.lastValue.flags and Intent.FLAG_ACTIVITY_NEW_TASK).isNotEqualTo(0)
                assertThat(captor.lastValue.flags and Intent.FLAG_ACTIVITY_CLEAR_TASK)
@@ -76,10 +136,19 @@ class EditWidgetsActivityStarterTest : SysuiTestCase() {
                    )
                    .isEqualTo(true)

                clearInvocations(activityStarter)
                communalSceneInteractor.setEditModeState(null)

                underTest.startActivity(shouldOpenWidgetPickerOnStart = false)

                verify(activityStarter, times(2))
                    .startActivityDismissingKeyguard(captor.capture(), eq(true), eq(true), any())
                verify(activityStarter)
                    .startActivityDismissingKeyguard(
                        captor.capture(),
                        eq(true),
                        eq(true),
                        any(),
                        any(),
                    )
                assertThat(captor.lastValue.component).isEqualTo(component)
                assertThat(captor.lastValue.flags and Intent.FLAG_ACTIVITY_NEW_TASK).isNotEqualTo(0)
                assertThat(captor.lastValue.flags and Intent.FLAG_ACTIVITY_CLEAR_TASK)
+7 −0
Original line number Diff line number Diff line
@@ -177,6 +177,13 @@ public interface ActivityStarter {
            boolean dismissShade,
            @Nullable String customMessage);

    /** Starts an activity and dismisses keyguard. */
    void startActivityDismissingKeyguard(Intent intent,
            boolean onlyProvisioned,
            boolean dismissShade,
            @Nullable String customMessage,
            Callback callback);

    /** Starts an activity and dismisses keyguard. */
    void startActivityDismissingKeyguard(Intent intent,
            boolean onlyProvisioned,
+0 −2
Original line number Diff line number Diff line
@@ -42,7 +42,6 @@ import com.android.systemui.communal.shared.model.CommunalContentSize.FixedSize.
import com.android.systemui.communal.shared.model.CommunalContentSize.FixedSize.THIRD
import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.communal.shared.model.CommunalWidgetContentModel
import com.android.systemui.communal.shared.model.EditModeState
import com.android.systemui.communal.widgets.EditWidgetsActivityStarter
import com.android.systemui.communal.widgets.WidgetConfigurator
import com.android.systemui.dagger.SysUISingleton
@@ -369,7 +368,6 @@ constructor(

    /** Show the widget editor Activity. */
    fun showWidgetEditor(shouldOpenWidgetPickerOnStart: Boolean = false) {
        communalSceneInteractor.setEditModeState(EditModeState.STARTING)
        editWidgetsActivityStarter.startActivity(shouldOpenWidgetPickerOnStart)
    }

+16 −4
Original line number Diff line number Diff line
@@ -16,8 +16,11 @@

package com.android.systemui.communal.widgets

import android.app.ActivityManager
import android.content.Context
import android.content.Intent
import com.android.systemui.communal.domain.interactor.CommunalSceneInteractor
import com.android.systemui.communal.shared.model.EditModeState
import com.android.systemui.communal.widgets.EditWidgetsActivity.Companion.EXTRA_OPEN_WIDGET_PICKER_ON_START
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.plugins.ActivityStarter
@@ -25,9 +28,7 @@ import com.android.systemui.res.R
import javax.inject.Inject

interface EditWidgetsActivityStarter {
    fun startActivity(
        shouldOpenWidgetPickerOnStart: Boolean = false,
    )
    fun startActivity(shouldOpenWidgetPickerOnStart: Boolean = false)
}

class EditWidgetsActivityStarterImpl
@@ -35,9 +36,16 @@ class EditWidgetsActivityStarterImpl
constructor(
    @Application private val applicationContext: Context,
    private val activityStarter: ActivityStarter,
    private val communalSceneInteractor: CommunalSceneInteractor,
) : EditWidgetsActivityStarter {

    override fun startActivity(shouldOpenWidgetPickerOnStart: Boolean) {
        if (communalSceneInteractor.editModeState.value != null) {
            return
        }

        communalSceneInteractor.setEditModeState(EditModeState.STARTING)

        activityStarter.startActivityDismissingKeyguard(
            Intent(applicationContext, EditWidgetsActivity::class.java)
                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
@@ -47,6 +55,10 @@ constructor(
            /* onlyProvisioned = */ true,
            /* dismissShade = */ true,
            applicationContext.resources.getString(R.string.unlock_reason_to_customize_widgets),
        )
        ) { resultCode ->
            if (resultCode == ActivityManager.START_CANCELED) {
                communalSceneInteractor.setEditModeState(null)
            }
        }
    }
}
Loading