[Chipbar] Move the controller that was common between the media ttt

sender and media ttt receiver into a more generic
TemporaryViewDisplayController class.

Future CLs will pull all the media-specific code out of this generic
class.

Bug: 245610654
Test: media.taptotransfer tests
Test: temporarydisplay tests
Test: verify media ttt chip still works
Change-Id: I814c04068fbd2b02521dd9bf8b2794bb0273464b
This commit is contained in:
Caitlin Shkuratov
2022-09-07 21:46:11 +00:00
parent 40db12e7c7
commit 935167436b
9 changed files with 81 additions and 100 deletions

View File

@@ -240,8 +240,6 @@
-packages/SystemUI/src/com/android/systemui/media/nearby/NearbyMediaDevicesManager.kt
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/MediaTttCommandLineHelper.kt
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/MediaTttFlags.kt
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/ChipInfoCommon.kt
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommon.kt
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttLogger.kt
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/ChipStateReceiver.kt
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiver.kt
@@ -529,6 +527,8 @@
-packages/SystemUI/src/com/android/systemui/statusbar/tv/VpnStatusObserver.kt
-packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowModule.kt
-packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowStateController.kt
-packages/SystemUI/src/com/android/systemui/temporarydisplay/TemporaryViewInfo.kt
-packages/SystemUI/src/com/android/systemui/temporarydisplay/TemporaryViewDisplayController.kt
-packages/SystemUI/src/com/android/systemui/toast/ToastDefaultAnimation.kt
-packages/SystemUI/src/com/android/systemui/toast/ToastLogger.kt
-packages/SystemUI/src/com/android/systemui/tv/TVSystemUICoreStartableModule.kt
@@ -677,7 +677,6 @@
-packages/SystemUI/tests/src/com/android/systemui/media/muteawait/MediaMuteAwaitConnectionManagerTest.kt
-packages/SystemUI/tests/src/com/android/systemui/media/nearby/NearbyMediaDevicesManagerTest.kt
-packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/MediaTttCommandLineHelperTest.kt
-packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommonTest.kt
-packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/common/MediaTttLoggerTest.kt
-packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiverTest.kt
-packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSenderTest.kt
@@ -834,6 +833,7 @@
-packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/VariableDateViewControllerTest.kt
-packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/WalletControllerImplTest.kt
-packages/SystemUI/tests/src/com/android/systemui/statusbar/window/StatusBarWindowStateControllerTest.kt
-packages/SystemUI/tests/src/com/android/systemui/temporarydisplay/TemporaryViewDisplayControllerTest.kt
-packages/SystemUI/tests/src/com/android/systemui/unfold/FoldStateLoggingProviderTest.kt
-packages/SystemUI/tests/src/com/android/systemui/unfold/UnfoldLatencyTrackerTest.kt
-packages/SystemUI/tests/src/com/android/systemui/unfold/UnfoldTransitionWallpaperControllerTest.kt

View File

@@ -34,15 +34,14 @@ import com.android.settingslib.Utils
import com.android.systemui.R
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.media.taptotransfer.common.ChipInfoCommon
import com.android.systemui.media.taptotransfer.common.DEFAULT_TIMEOUT_MILLIS
import com.android.systemui.media.taptotransfer.common.MediaTttChipControllerCommon
import com.android.systemui.media.taptotransfer.common.MediaTttLogger
import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.temporarydisplay.DEFAULT_TIMEOUT_MILLIS
import com.android.systemui.temporarydisplay.TemporaryViewDisplayController
import com.android.systemui.temporarydisplay.TemporaryViewInfo
import com.android.systemui.util.animation.AnimationUtil.Companion.frames
import com.android.systemui.util.concurrency.DelayableExecutor
import com.android.systemui.util.view.ViewUtil
import javax.inject.Inject
/**
@@ -56,18 +55,16 @@ class MediaTttChipControllerReceiver @Inject constructor(
context: Context,
@MediaTttReceiverLogger logger: MediaTttLogger,
windowManager: WindowManager,
viewUtil: ViewUtil,
mainExecutor: DelayableExecutor,
accessibilityManager: AccessibilityManager,
configurationController: ConfigurationController,
powerManager: PowerManager,
@Main private val mainHandler: Handler,
private val uiEventLogger: MediaTttReceiverUiEventLogger,
) : MediaTttChipControllerCommon<ChipReceiverInfo>(
) : TemporaryViewDisplayController<ChipReceiverInfo>(
context,
logger,
windowManager,
viewUtil,
mainExecutor,
accessibilityManager,
configurationController,
@@ -216,7 +213,7 @@ data class ChipReceiverInfo(
val routeInfo: MediaRoute2Info,
val appIconDrawableOverride: Drawable?,
val appNameOverride: CharSequence?
) : ChipInfoCommon {
) : TemporaryViewInfo {
override fun getTimeoutMs() = DEFAULT_TIMEOUT_MILLIS
}

View File

@@ -25,7 +25,7 @@ import androidx.annotation.StringRes
import com.android.internal.logging.UiEventLogger
import com.android.internal.statusbar.IUndoMediaTransferCallback
import com.android.systemui.R
import com.android.systemui.media.taptotransfer.common.DEFAULT_TIMEOUT_MILLIS
import com.android.systemui.temporarydisplay.DEFAULT_TIMEOUT_MILLIS
/**
* A class enumerating all the possible states of the media tap-to-transfer chip on the sender

View File

@@ -33,14 +33,13 @@ import com.android.systemui.animation.Interpolators
import com.android.systemui.animation.ViewHierarchyAnimator
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.media.taptotransfer.common.ChipInfoCommon
import com.android.systemui.media.taptotransfer.common.MediaTttChipControllerCommon
import com.android.systemui.media.taptotransfer.common.MediaTttLogger
import com.android.systemui.media.taptotransfer.common.MediaTttRemovalReason
import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.temporarydisplay.TemporaryDisplayRemovalReason
import com.android.systemui.temporarydisplay.TemporaryViewDisplayController
import com.android.systemui.temporarydisplay.TemporaryViewInfo
import com.android.systemui.util.concurrency.DelayableExecutor
import com.android.systemui.util.view.ViewUtil
import javax.inject.Inject
/**
@@ -53,17 +52,15 @@ class MediaTttChipControllerSender @Inject constructor(
context: Context,
@MediaTttSenderLogger logger: MediaTttLogger,
windowManager: WindowManager,
viewUtil: ViewUtil,
@Main mainExecutor: DelayableExecutor,
accessibilityManager: AccessibilityManager,
configurationController: ConfigurationController,
powerManager: PowerManager,
private val uiEventLogger: MediaTttSenderUiEventLogger
) : MediaTttChipControllerCommon<ChipSenderInfo>(
) : TemporaryViewDisplayController<ChipSenderInfo>(
context,
logger,
windowManager,
viewUtil,
mainExecutor,
accessibilityManager,
configurationController,
@@ -169,7 +166,7 @@ class MediaTttChipControllerSender @Inject constructor(
// Don't remove the chip if we're mid-transfer since the user should still be able to
// see the status of the transfer. (But do remove it if it's finally timed out.)
if (chipInfo?.state?.isMidTransfer == true &&
removalReason != MediaTttRemovalReason.REASON_TIMEOUT) {
removalReason != TemporaryDisplayRemovalReason.REASON_TIMEOUT) {
return
}
super.removeChip(removalReason)
@@ -188,7 +185,7 @@ data class ChipSenderInfo(
val state: ChipStateSender,
val routeInfo: MediaRoute2Info,
val undoCallback: IUndoMediaTransferCallback? = null
) : ChipInfoCommon {
) : TemporaryViewInfo {
override fun getTimeoutMs() = state.timeout
}

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.systemui.media.taptotransfer.common
package com.android.systemui.temporarydisplay
import android.annotation.LayoutRes
import android.annotation.SuppressLint
@@ -37,30 +37,30 @@ import com.android.internal.widget.CachingIconView
import com.android.settingslib.Utils
import com.android.systemui.R
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.media.taptotransfer.common.MediaTttLogger
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.util.concurrency.DelayableExecutor
import com.android.systemui.util.view.ViewUtil
/**
* A superclass controller that provides common functionality for showing chips on the sender device
* and the receiver device.
* A generic controller that can temporarily display a new view in a new window.
*
* Subclasses need to override and implement [updateChipView], which is where they can control what
* gets displayed to the user.
*
* The generic type T is expected to contain all the information necessary for the subclasses to
* display the chip in a certain state, since they receive <T> in [updateChipView].
*
* TODO(b/245610654): Remove all the media-specific logic from this class.
*/
abstract class MediaTttChipControllerCommon<T : ChipInfoCommon>(
internal val context: Context,
internal val logger: MediaTttLogger,
internal val windowManager: WindowManager,
private val viewUtil: ViewUtil,
@Main private val mainExecutor: DelayableExecutor,
private val accessibilityManager: AccessibilityManager,
private val configurationController: ConfigurationController,
private val powerManager: PowerManager,
@LayoutRes private val chipLayoutRes: Int,
abstract class TemporaryViewDisplayController<T : TemporaryViewInfo>(
internal val context: Context,
internal val logger: MediaTttLogger,
internal val windowManager: WindowManager,
@Main private val mainExecutor: DelayableExecutor,
private val accessibilityManager: AccessibilityManager,
private val configurationController: ConfigurationController,
private val powerManager: PowerManager,
@LayoutRes private val chipLayoutRes: Int,
) {
/**
* Window layout params that will be used as a starting point for the [windowLayoutParams] of
@@ -131,7 +131,7 @@ abstract class MediaTttChipControllerCommon<T : ChipInfoCommon>(
)
cancelChipViewTimeout?.run()
cancelChipViewTimeout = mainExecutor.executeDelayed(
{ removeChip(MediaTttRemovalReason.REASON_TIMEOUT) },
{ removeChip(TemporaryDisplayRemovalReason.REASON_TIMEOUT) },
timeout.toLong()
)
}
@@ -264,9 +264,9 @@ abstract class MediaTttChipControllerCommon<T : ChipInfoCommon>(
// Used in CTS tests UpdateMediaTapToTransferSenderDisplayTest and
// UpdateMediaTapToTransferReceiverDisplayTest
private const val WINDOW_TITLE = "Media Transfer Chip View"
private val TAG = MediaTttChipControllerCommon::class.simpleName!!
private val TAG = TemporaryViewDisplayController::class.simpleName!!
object MediaTttRemovalReason {
object TemporaryDisplayRemovalReason {
const val REASON_TIMEOUT = "TIMEOUT"
const val REASON_SCREEN_TAP = "SCREEN_TAP"
}

View File

@@ -14,17 +14,17 @@
* limitations under the License.
*/
package com.android.systemui.media.taptotransfer.common
package com.android.systemui.temporarydisplay
/**
* A superclass chip state that will be subclassed by the sender chip and receiver chip.
* A superclass view state used with [TemporaryViewDisplayController].
*/
interface ChipInfoCommon {
interface TemporaryViewInfo {
/**
* Returns the amount of time the given chip state should display on the screen before it times
* Returns the amount of time the given view state should display on the screen before it times
* out and disappears.
*/
fun getTimeoutMs(): Long
fun getTimeoutMs(): Long = DEFAULT_TIMEOUT_MILLIS
}
const val DEFAULT_TIMEOUT_MILLIS = 10000L

View File

@@ -41,7 +41,6 @@ import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.eq
import com.android.systemui.util.time.FakeSystemClock
import com.android.systemui.util.view.ViewUtil
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
@@ -74,8 +73,6 @@ class MediaTttChipControllerReceiverTest : SysuiTestCase() {
@Mock
private lateinit var windowManager: WindowManager
@Mock
private lateinit var viewUtil: ViewUtil
@Mock
private lateinit var commandQueue: CommandQueue
private lateinit var commandQueueCallback: CommandQueue.Callbacks
private lateinit var fakeAppIconDrawable: Drawable
@@ -102,7 +99,6 @@ class MediaTttChipControllerReceiverTest : SysuiTestCase() {
context,
logger,
windowManager,
viewUtil,
FakeExecutor(FakeSystemClock()),
accessibilityManager,
configurationController,

View File

@@ -42,7 +42,6 @@ import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.eq
import com.android.systemui.util.time.FakeSystemClock
import com.android.systemui.util.view.ViewUtil
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
@@ -51,8 +50,8 @@ import org.mockito.ArgumentCaptor
import org.mockito.Mock
import org.mockito.Mockito.never
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
import org.mockito.Mockito.`when` as whenever
import org.mockito.MockitoAnnotations
@SmallTest
@RunWith(AndroidTestingRunner::class)
@@ -75,8 +74,6 @@ class MediaTttChipControllerSenderTest : SysuiTestCase() {
@Mock
private lateinit var windowManager: WindowManager
@Mock
private lateinit var viewUtil: ViewUtil
@Mock
private lateinit var commandQueue: CommandQueue
private lateinit var commandQueueCallback: CommandQueue.Callbacks
private lateinit var fakeAppIconDrawable: Drawable
@@ -110,7 +107,6 @@ class MediaTttChipControllerSenderTest : SysuiTestCase() {
context,
logger,
windowManager,
viewUtil,
fakeExecutor,
accessibilityManager,
configurationController,

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.systemui.media.taptotransfer.common
package com.android.systemui.temporarydisplay
import android.content.Context
import android.content.pm.ApplicationInfo
@@ -30,6 +30,7 @@ import androidx.test.filters.SmallTest
import com.android.systemui.R
import com.android.systemui.SysuiTestCase
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.media.taptotransfer.common.MediaTttLogger
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener
import com.android.systemui.util.concurrency.DelayableExecutor
@@ -38,7 +39,6 @@ import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.argumentCaptor
import com.android.systemui.util.mockito.capture
import com.android.systemui.util.time.FakeSystemClock
import com.android.systemui.util.view.ViewUtil
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
@@ -52,8 +52,8 @@ import org.mockito.Mockito.`when` as whenever
import org.mockito.MockitoAnnotations
@SmallTest
class MediaTttChipControllerCommonTest : SysuiTestCase() {
private lateinit var controllerCommon: TestControllerCommon
class TemporaryViewDisplayControllerTest : SysuiTestCase() {
private lateinit var underTest: TestController
private lateinit var fakeClock: FakeSystemClock
private lateinit var fakeExecutor: FakeExecutor
@@ -72,8 +72,6 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() {
@Mock
private lateinit var windowManager: WindowManager
@Mock
private lateinit var viewUtil: ViewUtil
@Mock
private lateinit var powerManager: PowerManager
@Before
@@ -97,11 +95,10 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() {
fakeClock = FakeSystemClock()
fakeExecutor = FakeExecutor(fakeClock)
controllerCommon = TestControllerCommon(
underTest = TestController(
context,
logger,
windowManager,
viewUtil,
fakeExecutor,
accessibilityManager,
configurationController,
@@ -111,7 +108,7 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() {
@Test
fun displayChip_chipAdded() {
controllerCommon.displayChip(getState())
underTest.displayChip(getState())
verify(windowManager).addView(any(), any())
}
@@ -120,7 +117,7 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() {
fun displayChip_screenOff_screenWakes() {
whenever(powerManager.isScreenOn).thenReturn(false)
controllerCommon.displayChip(getState())
underTest.displayChip(getState())
verify(powerManager).wakeUp(any(), any(), any())
}
@@ -129,24 +126,24 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() {
fun displayChip_screenAlreadyOn_screenNotWoken() {
whenever(powerManager.isScreenOn).thenReturn(true)
controllerCommon.displayChip(getState())
underTest.displayChip(getState())
verify(powerManager, never()).wakeUp(any(), any(), any())
}
@Test
fun displayChip_twice_chipNotAddedTwice() {
controllerCommon.displayChip(getState())
underTest.displayChip(getState())
reset(windowManager)
controllerCommon.displayChip(getState())
underTest.displayChip(getState())
verify(windowManager, never()).addView(any(), any())
}
@Test
fun displayChip_chipDoesNotDisappearsBeforeTimeout() {
val state = getState()
controllerCommon.displayChip(state)
underTest.displayChip(state)
reset(windowManager)
fakeClock.advanceTime(TIMEOUT_MS - 1)
@@ -157,7 +154,7 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() {
@Test
fun displayChip_chipDisappearsAfterTimeout() {
val state = getState()
controllerCommon.displayChip(state)
underTest.displayChip(state)
reset(windowManager)
fakeClock.advanceTime(TIMEOUT_MS + 1)
@@ -169,12 +166,12 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() {
fun displayChip_calledAgainBeforeTimeout_timeoutReset() {
// First, display the chip
val state = getState()
controllerCommon.displayChip(state)
underTest.displayChip(state)
// After some time, re-display the chip
val waitTime = 1000L
fakeClock.advanceTime(waitTime)
controllerCommon.displayChip(getState())
underTest.displayChip(getState())
// Wait until the timeout for the first display would've happened
fakeClock.advanceTime(TIMEOUT_MS - waitTime + 1)
@@ -187,11 +184,11 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() {
fun displayChip_calledAgainBeforeTimeout_eventuallyTimesOut() {
// First, display the chip
val state = getState()
controllerCommon.displayChip(state)
underTest.displayChip(state)
// After some time, re-display the chip
fakeClock.advanceTime(1000L)
controllerCommon.displayChip(getState())
underTest.displayChip(getState())
// Ensure we still hide the chip eventually
fakeClock.advanceTime(TIMEOUT_MS + 1)
@@ -201,25 +198,25 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() {
@Test
fun displayScaleChange_chipReinflatedWithMostRecentState() {
controllerCommon.displayChip(getState(name = "First name"))
controllerCommon.displayChip(getState(name = "Second name"))
underTest.displayChip(getState(name = "First name"))
underTest.displayChip(getState(name = "Second name"))
reset(windowManager)
getConfigurationListener().onDensityOrFontScaleChanged()
verify(windowManager).removeView(any())
verify(windowManager).addView(any(), any())
assertThat(controllerCommon.mostRecentChipInfo?.name).isEqualTo("Second name")
assertThat(underTest.mostRecentChipInfo?.name).isEqualTo("Second name")
}
@Test
fun removeChip_chipRemovedAndRemovalLogged() {
// First, add the chip
controllerCommon.displayChip(getState())
underTest.displayChip(getState())
// Then, remove it
val reason = "test reason"
controllerCommon.removeChip(reason)
underTest.removeChip(reason)
verify(windowManager).removeView(any())
verify(logger).logChipRemoval(reason)
@@ -227,27 +224,27 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() {
@Test
fun removeChip_noAdd_viewNotRemoved() {
controllerCommon.removeChip("reason")
underTest.removeChip("reason")
verify(windowManager, never()).removeView(any())
}
@Test
fun setIcon_nullAppIconDrawableAndNullPackageName_stillHasIcon() {
controllerCommon.displayChip(getState())
underTest.displayChip(getState())
val chipView = getChipView()
controllerCommon.setIcon(chipView, appPackageName = null, appIconDrawableOverride = null)
underTest.setIcon(chipView, appPackageName = null, appIconDrawableOverride = null)
assertThat(chipView.getAppIconView().drawable).isNotNull()
}
@Test
fun setIcon_nullAppIconDrawableAndInvalidPackageName_stillHasIcon() {
controllerCommon.displayChip(getState())
underTest.displayChip(getState())
val chipView = getChipView()
controllerCommon.setIcon(
underTest.setIcon(
chipView, appPackageName = "fakePackageName", appIconDrawableOverride = null
)
@@ -256,41 +253,41 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() {
@Test
fun setIcon_nullAppIconDrawable_iconIsFromPackageName() {
controllerCommon.displayChip(getState())
underTest.displayChip(getState())
val chipView = getChipView()
controllerCommon.setIcon(chipView, PACKAGE_NAME, appIconDrawableOverride = null, null)
underTest.setIcon(chipView, PACKAGE_NAME, appIconDrawableOverride = null, null)
assertThat(chipView.getAppIconView().drawable).isEqualTo(appIconFromPackageName)
}
@Test
fun setIcon_hasAppIconDrawable_iconIsDrawable() {
controllerCommon.displayChip(getState())
underTest.displayChip(getState())
val chipView = getChipView()
val drawable = context.getDrawable(R.drawable.ic_alarm)!!
controllerCommon.setIcon(chipView, PACKAGE_NAME, drawable, null)
underTest.setIcon(chipView, PACKAGE_NAME, drawable, null)
assertThat(chipView.getAppIconView().drawable).isEqualTo(drawable)
}
@Test
fun setIcon_nullAppNameAndNullPackageName_stillHasContentDescription() {
controllerCommon.displayChip(getState())
underTest.displayChip(getState())
val chipView = getChipView()
controllerCommon.setIcon(chipView, appPackageName = null, appNameOverride = null)
underTest.setIcon(chipView, appPackageName = null, appNameOverride = null)
assertThat(chipView.getAppIconView().contentDescription.toString()).isNotEmpty()
}
@Test
fun setIcon_nullAppNameAndInvalidPackageName_stillHasContentDescription() {
controllerCommon.displayChip(getState())
underTest.displayChip(getState())
val chipView = getChipView()
controllerCommon.setIcon(
underTest.setIcon(
chipView, appPackageName = "fakePackageName", appNameOverride = null
)
@@ -299,31 +296,31 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() {
@Test
fun setIcon_nullAppName_iconContentDescriptionIsFromPackageName() {
controllerCommon.displayChip(getState())
underTest.displayChip(getState())
val chipView = getChipView()
controllerCommon.setIcon(chipView, PACKAGE_NAME, null, appNameOverride = null)
underTest.setIcon(chipView, PACKAGE_NAME, null, appNameOverride = null)
assertThat(chipView.getAppIconView().contentDescription).isEqualTo(APP_NAME)
}
@Test
fun setIcon_hasAppName_iconContentDescriptionIsAppNameOverride() {
controllerCommon.displayChip(getState())
underTest.displayChip(getState())
val chipView = getChipView()
val appName = "Override App Name"
controllerCommon.setIcon(chipView, PACKAGE_NAME, null, appName)
underTest.setIcon(chipView, PACKAGE_NAME, null, appName)
assertThat(chipView.getAppIconView().contentDescription).isEqualTo(appName)
}
@Test
fun setIcon_iconSizeMatchesGetIconSize() {
controllerCommon.displayChip(getState())
underTest.displayChip(getState())
val chipView = getChipView()
controllerCommon.setIcon(chipView, PACKAGE_NAME)
underTest.setIcon(chipView, PACKAGE_NAME)
chipView.measure(
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
@@ -349,20 +346,18 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() {
return callbackCaptor.value
}
inner class TestControllerCommon(
inner class TestController(
context: Context,
logger: MediaTttLogger,
windowManager: WindowManager,
viewUtil: ViewUtil,
@Main mainExecutor: DelayableExecutor,
accessibilityManager: AccessibilityManager,
configurationController: ConfigurationController,
powerManager: PowerManager,
) : MediaTttChipControllerCommon<ChipInfo>(
) : TemporaryViewDisplayController<ChipInfo>(
context,
logger,
windowManager,
viewUtil,
mainExecutor,
accessibilityManager,
configurationController,
@@ -379,7 +374,7 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() {
override fun getIconSize(isAppIcon: Boolean): Int = ICON_SIZE
}
inner class ChipInfo(val name: String) : ChipInfoCommon {
inner class ChipInfo(val name: String) : TemporaryViewInfo {
override fun getTimeoutMs() = 1L
}
}