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

Commit ff4d832c authored by Caitlin Shkuratov's avatar Caitlin Shkuratov Committed by Android (Google) Code Review
Browse files

Merge "[SB] Remove status_bar_screen_sharing_chips flag." into main

parents 99222aa5 7e4f7f41
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -391,14 +391,6 @@ flag {
    }
}

flag {
    name: "status_bar_screen_sharing_chips"
    namespace: "systemui"
    description: "Show chips on the left side of the status bar when a user is screen sharing, "
        "recording, or casting"
    bug: "332662551"
}

flag {
    name: "status_bar_show_audio_only_projection_chip"
    namespace: "systemui"
+10 −6
Original line number Diff line number Diff line
@@ -283,14 +283,16 @@ class CallChipViewModelTest : SysuiTestCase() {
        testScope.runTest {
            val latest by collectLastValue(underTest.chip)

            val intent = mock<PendingIntent>()
            repo.setOngoingCallState(inCallModel(startTimeMs = 1000, intent = intent))
            val pendingIntent = mock<PendingIntent>()
            repo.setOngoingCallState(inCallModel(startTimeMs = 1000, intent = pendingIntent))
            val clickListener = (latest as OngoingActivityChipModel.Shown).onClickListener
            assertThat(clickListener).isNotNull()

            clickListener!!.onClick(chipView)

            verify(kosmos.activityStarter).postStartActivityDismissingKeyguard(intent, null)
            // Ensure that the SysUI didn't modify the notification's intent by verifying it
            // directly matches the `PendingIntent` set -- see b/212467440.
            verify(kosmos.activityStarter).postStartActivityDismissingKeyguard(pendingIntent, null)
        }

    @Test
@@ -298,14 +300,16 @@ class CallChipViewModelTest : SysuiTestCase() {
        testScope.runTest {
            val latest by collectLastValue(underTest.chip)

            val intent = mock<PendingIntent>()
            repo.setOngoingCallState(inCallModel(startTimeMs = 0, intent = intent))
            val pendingIntent = mock<PendingIntent>()
            repo.setOngoingCallState(inCallModel(startTimeMs = 0, intent = pendingIntent))
            val clickListener = (latest as OngoingActivityChipModel.Shown).onClickListener
            assertThat(clickListener).isNotNull()

            clickListener!!.onClick(chipView)

            verify(kosmos.activityStarter).postStartActivityDismissingKeyguard(intent, null)
            // Ensure that the SysUI didn't modify the notification's intent by verifying it
            // directly matches the `PendingIntent` set -- see b/212467440.
            verify(kosmos.activityStarter).postStartActivityDismissingKeyguard(pendingIntent, null)
        }

    companion object {
+0 −110
Original line number Diff line number Diff line
@@ -45,13 +45,10 @@ import com.android.systemui.display.domain.interactor.ConnectedDisplayInteractor
import com.android.systemui.kosmos.testScope
import com.android.systemui.privacy.PrivacyItemController
import com.android.systemui.privacy.logging.PrivacyLogger
import com.android.systemui.screenrecord.RecordingController
import com.android.systemui.settings.UserTracker
import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.statusbar.phone.ui.StatusBarIconController
import com.android.systemui.statusbar.policy.BluetoothController
import com.android.systemui.statusbar.policy.CastController
import com.android.systemui.statusbar.policy.CastDevice
import com.android.systemui.statusbar.policy.DataSaverController
import com.android.systemui.statusbar.policy.DeviceProvisionedController
import com.android.systemui.statusbar.policy.HotspotController
@@ -92,7 +89,6 @@ import org.mockito.Mockito.verify
import org.mockito.Mockito.`when` as whenever
import org.mockito.MockitoAnnotations
import org.mockito.kotlin.any
import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.eq
import org.mockito.kotlin.reset

@@ -108,8 +104,6 @@ class PhoneStatusBarPolicyTest : SysuiTestCase() {
    companion object {
        private const val ZEN_SLOT = "zen"
        private const val ALARM_SLOT = "alarm"
        private const val CAST_SLOT = "cast"
        private const val SCREEN_RECORD_SLOT = "screen_record"
        private const val CONNECTED_DISPLAY_SLOT = "connected_display"
        private const val MANAGED_PROFILE_SLOT = "managed_profile"
    }
@@ -117,7 +111,6 @@ class PhoneStatusBarPolicyTest : SysuiTestCase() {
    @Mock private lateinit var iconController: StatusBarIconController
    @Mock private lateinit var commandQueue: CommandQueue
    @Mock private lateinit var broadcastDispatcher: BroadcastDispatcher
    @Mock private lateinit var castController: CastController
    @Mock private lateinit var hotspotController: HotspotController
    @Mock private lateinit var bluetoothController: BluetoothController
    @Mock private lateinit var nextAlarmController: NextAlarmController
@@ -133,7 +126,6 @@ class PhoneStatusBarPolicyTest : SysuiTestCase() {
    @Mock private lateinit var userTracker: UserTracker
    @Mock private lateinit var devicePolicyManager: DevicePolicyManager
    @Mock private lateinit var devicePolicyManagerResources: DevicePolicyResourcesManager
    @Mock private lateinit var recordingController: RecordingController
    @Mock private lateinit var telecomManager: TelecomManager
    @Mock private lateinit var sharedPreferences: SharedPreferences
    @Mock private lateinit var dateFormatUtil: DateFormatUtil
@@ -301,101 +293,6 @@ class PhoneStatusBarPolicyTest : SysuiTestCase() {
            verify(iconController).setIconVisibility(CONNECTED_DISPLAY_SLOT, true)
        }

    @Test
    @DisableFlags(Flags.FLAG_STATUS_BAR_SCREEN_SHARING_CHIPS)
    fun cast_chipsFlagOff_iconShown() {
        statusBarPolicy.init()
        clearInvocations(iconController)

        val callbackCaptor = argumentCaptor<CastController.Callback>()
        verify(castController).addCallback(callbackCaptor.capture())

        whenever(castController.castDevices)
            .thenReturn(
                listOf(
                    CastDevice(
                        "id",
                        "name",
                        "description",
                        CastDevice.CastState.Connected,
                        CastDevice.CastOrigin.MediaProjection,
                    )
                )
            )
        callbackCaptor.firstValue.onCastDevicesChanged()

        verify(iconController).setIconVisibility(CAST_SLOT, true)
    }

    @Test
    @EnableFlags(Flags.FLAG_STATUS_BAR_SCREEN_SHARING_CHIPS)
    fun cast_chipsFlagOn_noCallbackRegistered() {
        statusBarPolicy.init()

        verify(castController, never()).addCallback(any())
    }

    @Test
    @DisableFlags(Flags.FLAG_STATUS_BAR_SCREEN_SHARING_CHIPS)
    fun screenRecord_chipsFlagOff_iconShown_forAllStates() {
        statusBarPolicy.init()
        clearInvocations(iconController)

        val callbackCaptor = argumentCaptor<RecordingController.RecordingStateChangeCallback>()
        verify(recordingController).addCallback(callbackCaptor.capture())

        callbackCaptor.firstValue.onCountdown(3000)
        testableLooper.processAllMessages()
        verify(iconController).setIconVisibility(SCREEN_RECORD_SLOT, true)
        clearInvocations(iconController)

        callbackCaptor.firstValue.onCountdownEnd()
        testableLooper.processAllMessages()
        verify(iconController).setIconVisibility(SCREEN_RECORD_SLOT, false)
        clearInvocations(iconController)

        callbackCaptor.firstValue.onRecordingStart()
        testableLooper.processAllMessages()
        verify(iconController).setIconVisibility(SCREEN_RECORD_SLOT, true)
        clearInvocations(iconController)

        callbackCaptor.firstValue.onRecordingEnd()
        testableLooper.processAllMessages()
        verify(iconController).setIconVisibility(SCREEN_RECORD_SLOT, false)
        clearInvocations(iconController)
    }

    @Test
    @EnableFlags(Flags.FLAG_STATUS_BAR_SCREEN_SHARING_CHIPS)
    fun screenRecord_chipsFlagOn_noCallbackRegistered() {
        statusBarPolicy.init()

        verify(recordingController, never()).addCallback(any())
    }

    @Test
    @EnableFlags(Flags.FLAG_STATUS_BAR_SCREEN_SHARING_CHIPS)
    fun screenRecord_chipsFlagOn_methodsDoNothing() {
        statusBarPolicy.init()
        clearInvocations(iconController)

        statusBarPolicy.onCountdown(3000)
        testableLooper.processAllMessages()
        verify(iconController, never()).setIconVisibility(eq(SCREEN_RECORD_SLOT), any())

        statusBarPolicy.onCountdownEnd()
        testableLooper.processAllMessages()
        verify(iconController, never()).setIconVisibility(eq(SCREEN_RECORD_SLOT), any())

        statusBarPolicy.onRecordingStart()
        testableLooper.processAllMessages()
        verify(iconController, never()).setIconVisibility(eq(SCREEN_RECORD_SLOT), any())

        statusBarPolicy.onRecordingEnd()
        testableLooper.processAllMessages()
        verify(iconController, never()).setIconVisibility(eq(SCREEN_RECORD_SLOT), any())
    }

    @Test
    @EnableFlags(android.app.Flags.FLAG_MODES_UI, android.app.Flags.FLAG_MODES_UI_ICONS)
    fun zenModeInteractorActiveModeChanged_showsModeIcon() =
@@ -514,7 +411,6 @@ class PhoneStatusBarPolicyTest : SysuiTestCase() {
            executor,
            testableLooper.looper,
            context.resources,
            castController,
            hotspotController,
            bluetoothController,
            nextAlarmController,
@@ -530,7 +426,6 @@ class PhoneStatusBarPolicyTest : SysuiTestCase() {
            userManager,
            userTracker,
            devicePolicyManager,
            recordingController,
            telecomManager,
            /* displayId = */ 0,
            sharedPreferences,
@@ -589,11 +484,6 @@ class PhoneStatusBarPolicyTest : SysuiTestCase() {

        override fun getConfig(): ZenModeConfig = throw NotImplementedError()

        fun setConsolidatedPolicy(policy: NotificationManager.Policy) {
            this.consolidatedPolicy = policy
            callbacks.forEach { it.onConsolidatedPolicyChanged(consolidatedPolicy) }
        }

        override fun getConsolidatedPolicy(): NotificationManager.Policy = consolidatedPolicy

        override fun getNextAlarm() = throw NotImplementedError()
+0 −96
Original line number Diff line number Diff line
@@ -21,21 +21,18 @@ import android.app.IActivityManager
import android.app.IUidObserver
import android.app.PendingIntent
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.testing.TestableLooper
import android.view.LayoutInflater
import android.view.View
import android.widget.LinearLayout
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.Flags.FLAG_STATUS_BAR_SCREEN_SHARING_CHIPS
import com.android.systemui.SysuiTestCase
import com.android.systemui.concurrency.fakeExecutor
import com.android.systemui.dump.DumpManager
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.testScope
import com.android.systemui.log.logcatLogBuffer
import com.android.systemui.plugins.activityStarter
import com.android.systemui.res.R
import com.android.systemui.statusbar.StatusBarIconView
import com.android.systemui.statusbar.data.repository.fakeStatusBarModeRepository
@@ -50,7 +47,6 @@ import com.android.systemui.statusbar.phone.ongoingcall.data.repository.ongoingC
import com.android.systemui.statusbar.phone.ongoingcall.shared.model.OngoingCallModel
import com.android.systemui.statusbar.window.StatusBarWindowController
import com.android.systemui.statusbar.window.StatusBarWindowControllerStore
import com.android.systemui.util.time.fakeSystemClock
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runCurrent
@@ -77,7 +73,6 @@ import org.mockito.kotlin.whenever
class OngoingCallControllerTest : SysuiTestCase() {
    private val kosmos = Kosmos()

    private val clock = kosmos.fakeSystemClock
    private val mainExecutor = kosmos.fakeExecutor
    private val testScope = kosmos.testScope
    private val statusBarModeRepository = kosmos.fakeStatusBarModeRepository
@@ -88,7 +83,6 @@ class OngoingCallControllerTest : SysuiTestCase() {

    private val mockSwipeStatusBarAwayGestureHandler = mock<SwipeStatusBarAwayGestureHandler>()
    private val mockOngoingCallListener = mock<OngoingCallListener>()
    private val mockActivityStarter = kosmos.activityStarter
    private val mockIActivityManager = mock<IActivityManager>()
    private val mockStatusBarWindowController = mock<StatusBarWindowController>()
    private val mockStatusBarWindowControllerStore = mock<StatusBarWindowControllerStore>()
@@ -111,8 +105,6 @@ class OngoingCallControllerTest : SysuiTestCase() {
                context,
                ongoingCallRepository,
                kosmos.activeNotificationsInteractor,
                clock,
                mockActivityStarter,
                mainExecutor,
                mockIActivityManager,
                DumpManager(),
@@ -223,48 +215,6 @@ class OngoingCallControllerTest : SysuiTestCase() {
        )
    }

    /** Regression test for b/192379214. */
    @Test
    @DisableFlags(android.app.Flags.FLAG_SORT_SECTION_BY_TIME, FLAG_STATUS_BAR_SCREEN_SHARING_CHIPS)
    fun notifRepoHasCallNotif_notificationWhenIsZero_timeHidden() {
        setNotifOnRepo(
            activeNotificationModel(
                key = "notif",
                callType = CallType.Ongoing,
                contentIntent = null,
                whenTime = 0,
            )
        )

        chipView.measure(
            View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
            View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
        )

        assertThat(chipView.findViewById<View>(R.id.ongoing_activity_chip_time)?.measuredWidth)
            .isEqualTo(0)
    }

    @Test
    @DisableFlags(FLAG_STATUS_BAR_SCREEN_SHARING_CHIPS)
    fun notifRepoHasCallNotif_notificationWhenIsValid_timeShown() {
        setNotifOnRepo(
            activeNotificationModel(
                key = "notif",
                callType = CallType.Ongoing,
                whenTime = clock.currentTimeMillis(),
            )
        )

        chipView.measure(
            View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
            View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
        )

        assertThat(chipView.findViewById<View>(R.id.ongoing_activity_chip_time)?.measuredWidth)
            .isGreaterThan(0)
    }

    /** Regression test for b/194731244. */
    @Test
    fun repoHasCallNotif_updatedManyTimes_uidObserverOnlyRegisteredOnce() {
@@ -493,52 +443,6 @@ class OngoingCallControllerTest : SysuiTestCase() {
        verify(mockOngoingCallListener).onOngoingCallStateChanged(any())
    }

    /** Regression test for b/212467440. */
    @Test
    @DisableFlags(FLAG_STATUS_BAR_SCREEN_SHARING_CHIPS)
    fun chipClicked_activityStarterTriggeredWithUnmodifiedIntent() {
        val pendingIntent = mock<PendingIntent>()
        setNotifOnRepo(
            activeNotificationModel(
                key = "notif",
                uid = CALL_UID,
                contentIntent = pendingIntent,
                callType = CallType.Ongoing,
            )
        )

        chipView.performClick()

        // Ensure that the sysui didn't modify the notification's intent -- see b/212467440.
        verify(mockActivityStarter).postStartActivityDismissingKeyguard(eq(pendingIntent), any())
    }

    @Test
    @DisableFlags(FLAG_STATUS_BAR_SCREEN_SHARING_CHIPS)
    fun callNotificationAdded_chipIsClickable() {
        setCallNotifOnRepo()

        assertThat(chipView.hasOnClickListeners()).isTrue()
    }

    @Test
    @EnableFlags(FLAG_STATUS_BAR_SCREEN_SHARING_CHIPS)
    fun callNotificationAdded_newChipsEnabled_chipNotClickable() {
        setCallNotifOnRepo()

        assertThat(chipView.hasOnClickListeners()).isFalse()
    }

    @Test
    @DisableFlags(FLAG_STATUS_BAR_SCREEN_SHARING_CHIPS)
    fun fullscreenIsTrue_chipStillClickable() {
        setCallNotifOnRepo()
        statusBarModeRepository.defaultDisplay.isInFullscreenMode.value = true
        testScope.runCurrent()

        assertThat(chipView.hasOnClickListeners()).isTrue()
    }

    @Test
    fun callStartedInImmersiveMode_swipeGestureCallbackAdded() {
        statusBarModeRepository.defaultDisplay.isInFullscreenMode.value = true
+2 −134

File changed.

Preview size limit exceeded, changes collapsed.

Loading