Merge "Fix focus at ttt chip" into tm-qpr-dev

This commit is contained in:
Michael Mikhail
2022-08-09 15:11:12 +00:00
committed by Android (Google) Code Review
2 changed files with 23 additions and 8 deletions

View File

@@ -56,7 +56,7 @@ abstract class MediaTttChipControllerCommon<T : ChipInfoCommon>(
internal val logger: MediaTttLogger, internal val logger: MediaTttLogger,
internal val windowManager: WindowManager, internal val windowManager: WindowManager,
private val viewUtil: ViewUtil, private val viewUtil: ViewUtil,
@Main private val mainExecutor: DelayableExecutor, @Main internal val mainExecutor: DelayableExecutor,
private val accessibilityManager: AccessibilityManager, private val accessibilityManager: AccessibilityManager,
private val configurationController: ConfigurationController, private val configurationController: ConfigurationController,
private val powerManager: PowerManager, private val powerManager: PowerManager,
@@ -205,13 +205,15 @@ abstract class MediaTttChipControllerCommon<T : ChipInfoCommon>(
* *
* @param appPackageName the package name of the app playing the media. Will be used to fetch * @param appPackageName the package name of the app playing the media. Will be used to fetch
* the app icon and app name if overrides aren't provided. * the app icon and app name if overrides aren't provided.
*
* @return the content description of the icon.
*/ */
internal fun setIcon( internal fun setIcon(
currentChipView: ViewGroup, currentChipView: ViewGroup,
appPackageName: String?, appPackageName: String?,
appIconDrawableOverride: Drawable? = null, appIconDrawableOverride: Drawable? = null,
appNameOverride: CharSequence? = null, appNameOverride: CharSequence? = null,
) { ): CharSequence {
val appIconView = currentChipView.requireViewById<CachingIconView>(R.id.app_icon) val appIconView = currentChipView.requireViewById<CachingIconView>(R.id.app_icon)
val iconInfo = getIconInfo(appPackageName) val iconInfo = getIconInfo(appPackageName)
@@ -224,6 +226,7 @@ abstract class MediaTttChipControllerCommon<T : ChipInfoCommon>(
appIconView.contentDescription = appNameOverride ?: iconInfo.iconName appIconView.contentDescription = appNameOverride ?: iconInfo.iconName
appIconView.setImageDrawable(appIconDrawableOverride ?: iconInfo.icon) appIconView.setImageDrawable(appIconDrawableOverride ?: iconInfo.icon)
return appIconView.contentDescription.toString()
} }
/** /**

View File

@@ -122,13 +122,12 @@ class MediaTttChipControllerSender @Inject constructor(
val chipState = newChipInfo.state val chipState = newChipInfo.state
// App icon // App icon
setIcon(currentChipView, newChipInfo.routeInfo.packageName) val iconName = setIcon(currentChipView, newChipInfo.routeInfo.packageName)
// Text // Text
val otherDeviceName = newChipInfo.routeInfo.name.toString() val otherDeviceName = newChipInfo.routeInfo.name.toString()
currentChipView.requireViewById<TextView>(R.id.text).apply { val chipText = chipState.getChipTextString(context, otherDeviceName)
text = chipState.getChipTextString(context, otherDeviceName) currentChipView.requireViewById<TextView>(R.id.text).text = chipText
}
// Loading // Loading
currentChipView.requireViewById<View>(R.id.loading).visibility = currentChipView.requireViewById<View>(R.id.loading).visibility =
@@ -145,17 +144,29 @@ class MediaTttChipControllerSender @Inject constructor(
// Failure // Failure
currentChipView.requireViewById<View>(R.id.failure_icon).visibility = currentChipView.requireViewById<View>(R.id.failure_icon).visibility =
chipState.isTransferFailure.visibleIfTrue() chipState.isTransferFailure.visibleIfTrue()
// For accessibility
currentChipView.requireViewById<ViewGroup>(
R.id.media_ttt_sender_chip_inner
).contentDescription = "$iconName $chipText"
} }
override fun animateChipIn(chipView: ViewGroup) { override fun animateChipIn(chipView: ViewGroup) {
val chipInnerView = chipView.requireViewById<ViewGroup>(R.id.media_ttt_sender_chip_inner)
ViewHierarchyAnimator.animateAddition( ViewHierarchyAnimator.animateAddition(
chipView.requireViewById<ViewGroup>(R.id.media_ttt_sender_chip_inner), chipInnerView,
ViewHierarchyAnimator.Hotspot.TOP, ViewHierarchyAnimator.Hotspot.TOP,
Interpolators.EMPHASIZED_DECELERATE, Interpolators.EMPHASIZED_DECELERATE,
duration = 500L, duration = ANIMATION_DURATION,
includeMargins = true, includeMargins = true,
includeFadeIn = true, includeFadeIn = true,
) )
// We can only request focus once the animation finishes.
mainExecutor.executeDelayed(
{ chipInnerView.requestAccessibilityFocus() },
ANIMATION_DURATION
)
} }
override fun removeChip(removalReason: String) { override fun removeChip(removalReason: String) {
@@ -186,3 +197,4 @@ data class ChipSenderInfo(
} }
const val SENDER_TAG = "MediaTapToTransferSender" const val SENDER_TAG = "MediaTapToTransferSender"
private const val ANIMATION_DURATION = 500L