[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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user