Merge changes I07729e8b,I72601976 into tm-qpr-dev
* changes: [Media TTT] Animate in the receiver chip. [Media TTT] Move receiver chip to the bottom of the screen.
This commit is contained in:
committed by
Android (Google) Code Review
commit
70f018574c
@@ -14,20 +14,19 @@
|
|||||||
~ See the License for the specific language governing permissions and
|
~ See the License for the specific language governing permissions and
|
||||||
~ limitations under the License.
|
~ limitations under the License.
|
||||||
-->
|
-->
|
||||||
<!-- TODO(b/203800646): layout_marginTop doesn't seem to work on some large screens. -->
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:id="@+id/media_ttt_receiver_chip"
|
android:id="@+id/media_ttt_receiver_chip"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@drawable/media_ttt_chip_background_receiver"
|
|
||||||
>
|
>
|
||||||
|
|
||||||
<com.android.internal.widget.CachingIconView
|
<com.android.internal.widget.CachingIconView
|
||||||
android:id="@+id/app_icon"
|
android:id="@+id/app_icon"
|
||||||
android:layout_width="@dimen/media_ttt_icon_size_receiver"
|
android:layout_width="@dimen/media_ttt_icon_size_receiver"
|
||||||
android:layout_height="@dimen/media_ttt_icon_size_receiver"
|
android:layout_height="@dimen/media_ttt_icon_size_receiver"
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center|bottom"
|
||||||
|
android:alpha="0.0"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|||||||
@@ -1060,6 +1060,7 @@
|
|||||||
<!-- Since the generic icon isn't circular, we need to scale it down so it still fits within
|
<!-- Since the generic icon isn't circular, we need to scale it down so it still fits within
|
||||||
the circular chip. -->
|
the circular chip. -->
|
||||||
<dimen name="media_ttt_generic_icon_size_receiver">70dp</dimen>
|
<dimen name="media_ttt_generic_icon_size_receiver">70dp</dimen>
|
||||||
|
<dimen name="media_ttt_receiver_vert_translation">20dp</dimen>
|
||||||
|
|
||||||
<!-- Window magnification -->
|
<!-- Window magnification -->
|
||||||
<dimen name="magnification_border_drag_size">35dp</dimen>
|
<dimen name="magnification_border_drag_size">35dp</dimen>
|
||||||
|
|||||||
@@ -25,17 +25,14 @@ import android.graphics.drawable.Drawable
|
|||||||
import android.os.PowerManager
|
import android.os.PowerManager
|
||||||
import android.os.SystemClock
|
import android.os.SystemClock
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.view.Gravity
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.MotionEvent
|
import android.view.MotionEvent
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import android.view.accessibility.AccessibilityManager
|
import android.view.accessibility.AccessibilityManager
|
||||||
import android.view.accessibility.AccessibilityManager.FLAG_CONTENT_CONTROLS
|
import android.view.accessibility.AccessibilityManager.FLAG_CONTENT_CONTROLS
|
||||||
import android.view.accessibility.AccessibilityManager.FLAG_CONTENT_ICONS
|
import android.view.accessibility.AccessibilityManager.FLAG_CONTENT_ICONS
|
||||||
import android.view.accessibility.AccessibilityManager.FLAG_CONTENT_TEXT
|
import android.view.accessibility.AccessibilityManager.FLAG_CONTENT_TEXT
|
||||||
import android.widget.LinearLayout
|
|
||||||
import com.android.internal.widget.CachingIconView
|
import com.android.internal.widget.CachingIconView
|
||||||
import com.android.settingslib.Utils
|
import com.android.settingslib.Utils
|
||||||
import com.android.systemui.R
|
import com.android.systemui.R
|
||||||
@@ -65,12 +62,15 @@ abstract class MediaTttChipControllerCommon<T : ChipInfoCommon>(
|
|||||||
private val powerManager: PowerManager,
|
private val powerManager: PowerManager,
|
||||||
@LayoutRes private val chipLayoutRes: Int
|
@LayoutRes private val chipLayoutRes: Int
|
||||||
) {
|
) {
|
||||||
/** The window layout parameters we'll use when attaching the view to a window. */
|
|
||||||
|
/**
|
||||||
|
* Window layout params that will be used as a starting point for the [windowLayoutParams] of
|
||||||
|
* all subclasses.
|
||||||
|
*/
|
||||||
@SuppressLint("WrongConstant") // We're allowed to use TYPE_VOLUME_OVERLAY
|
@SuppressLint("WrongConstant") // We're allowed to use TYPE_VOLUME_OVERLAY
|
||||||
private val windowLayoutParams = WindowManager.LayoutParams().apply {
|
internal val commonWindowLayoutParams = WindowManager.LayoutParams().apply {
|
||||||
width = WindowManager.LayoutParams.WRAP_CONTENT
|
width = WindowManager.LayoutParams.WRAP_CONTENT
|
||||||
height = WindowManager.LayoutParams.WRAP_CONTENT
|
height = WindowManager.LayoutParams.WRAP_CONTENT
|
||||||
gravity = Gravity.TOP.or(Gravity.CENTER_HORIZONTAL)
|
|
||||||
type = WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY
|
type = WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY
|
||||||
flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
|
flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
|
||||||
title = WINDOW_TITLE
|
title = WINDOW_TITLE
|
||||||
@@ -78,6 +78,14 @@ abstract class MediaTttChipControllerCommon<T : ChipInfoCommon>(
|
|||||||
setTrustedOverlay()
|
setTrustedOverlay()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The window layout parameters we'll use when attaching the view to a window.
|
||||||
|
*
|
||||||
|
* Subclasses must override this to provide their specific layout params, and they should use
|
||||||
|
* [commonWindowLayoutParams] as part of their layout params.
|
||||||
|
*/
|
||||||
|
internal abstract val windowLayoutParams: WindowManager.LayoutParams
|
||||||
|
|
||||||
/** The chip view currently being displayed. Null if the chip is not being displayed. */
|
/** The chip view currently being displayed. Null if the chip is not being displayed. */
|
||||||
private var chipView: ViewGroup? = null
|
private var chipView: ViewGroup? = null
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ import android.media.MediaRoute2Info
|
|||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.PowerManager
|
import android.os.PowerManager
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import android.view.Gravity
|
||||||
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import android.view.accessibility.AccessibilityManager
|
import android.view.accessibility.AccessibilityManager
|
||||||
@@ -36,6 +38,7 @@ import com.android.systemui.media.taptotransfer.common.MediaTttChipControllerCom
|
|||||||
import com.android.systemui.media.taptotransfer.common.MediaTttLogger
|
import com.android.systemui.media.taptotransfer.common.MediaTttLogger
|
||||||
import com.android.systemui.statusbar.CommandQueue
|
import com.android.systemui.statusbar.CommandQueue
|
||||||
import com.android.systemui.statusbar.gesture.TapGestureDetector
|
import com.android.systemui.statusbar.gesture.TapGestureDetector
|
||||||
|
import com.android.systemui.util.animation.AnimationUtil.Companion.frames
|
||||||
import com.android.systemui.util.concurrency.DelayableExecutor
|
import com.android.systemui.util.concurrency.DelayableExecutor
|
||||||
import com.android.systemui.util.view.ViewUtil
|
import com.android.systemui.util.view.ViewUtil
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@@ -69,6 +72,11 @@ class MediaTttChipControllerReceiver @Inject constructor(
|
|||||||
powerManager,
|
powerManager,
|
||||||
R.layout.media_ttt_chip_receiver
|
R.layout.media_ttt_chip_receiver
|
||||||
) {
|
) {
|
||||||
|
override val windowLayoutParams = commonWindowLayoutParams.apply {
|
||||||
|
height = getWindowHeight()
|
||||||
|
gravity = Gravity.BOTTOM.or(Gravity.CENTER_HORIZONTAL)
|
||||||
|
}
|
||||||
|
|
||||||
private val commandQueueCallbacks = object : CommandQueue.Callbacks {
|
private val commandQueueCallbacks = object : CommandQueue.Callbacks {
|
||||||
override fun updateMediaTapToTransferReceiverDisplay(
|
override fun updateMediaTapToTransferReceiverDisplay(
|
||||||
@StatusBarManager.MediaTransferReceiverState displayState: Int,
|
@StatusBarManager.MediaTransferReceiverState displayState: Int,
|
||||||
@@ -131,6 +139,19 @@ class MediaTttChipControllerReceiver @Inject constructor(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun animateChipIn(chipView: ViewGroup) {
|
||||||
|
val appIconView = chipView.requireViewById<View>(R.id.app_icon)
|
||||||
|
appIconView.animate()
|
||||||
|
.translationYBy(-1 * getTranslationAmount().toFloat())
|
||||||
|
.setDuration(30.frames)
|
||||||
|
.start()
|
||||||
|
appIconView.animate()
|
||||||
|
.alpha(1f)
|
||||||
|
.setDuration(5.frames)
|
||||||
|
.start()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
override fun getIconSize(isAppIcon: Boolean): Int? =
|
override fun getIconSize(isAppIcon: Boolean): Int? =
|
||||||
context.resources.getDimensionPixelSize(
|
context.resources.getDimensionPixelSize(
|
||||||
if (isAppIcon) {
|
if (isAppIcon) {
|
||||||
@@ -139,6 +160,17 @@ class MediaTttChipControllerReceiver @Inject constructor(
|
|||||||
R.dimen.media_ttt_generic_icon_size_receiver
|
R.dimen.media_ttt_generic_icon_size_receiver
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
private fun getWindowHeight(): Int {
|
||||||
|
return context.resources.getDimensionPixelSize(R.dimen.media_ttt_icon_size_receiver) +
|
||||||
|
// Make the window large enough to accommodate the animation amount
|
||||||
|
getTranslationAmount()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Returns the amount that the chip will be translated by in its intro animation. */
|
||||||
|
private fun getTranslationAmount(): Int {
|
||||||
|
return context.resources.getDimensionPixelSize(R.dimen.media_ttt_receiver_vert_translation)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data class ChipReceiverInfo(
|
data class ChipReceiverInfo(
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import android.content.Context
|
|||||||
import android.media.MediaRoute2Info
|
import android.media.MediaRoute2Info
|
||||||
import android.os.PowerManager
|
import android.os.PowerManager
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import android.view.Gravity
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
@@ -69,6 +70,10 @@ class MediaTttChipControllerSender @Inject constructor(
|
|||||||
powerManager,
|
powerManager,
|
||||||
R.layout.media_ttt_chip
|
R.layout.media_ttt_chip
|
||||||
) {
|
) {
|
||||||
|
override val windowLayoutParams = commonWindowLayoutParams.apply {
|
||||||
|
gravity = Gravity.TOP.or(Gravity.CENTER_HORIZONTAL)
|
||||||
|
}
|
||||||
|
|
||||||
private var currentlyDisplayedChipState: ChipStateSender? = null
|
private var currentlyDisplayedChipState: ChipStateSender? = null
|
||||||
|
|
||||||
private val commandQueueCallbacks = object : CommandQueue.Callbacks {
|
private val commandQueueCallbacks = object : CommandQueue.Callbacks {
|
||||||
|
|||||||
@@ -371,11 +371,9 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() {
|
|||||||
powerManager,
|
powerManager,
|
||||||
R.layout.media_ttt_chip
|
R.layout.media_ttt_chip
|
||||||
) {
|
) {
|
||||||
override fun updateChipView(chipInfo: ChipInfo, currentChipView: ViewGroup) {
|
override val windowLayoutParams = commonWindowLayoutParams
|
||||||
|
override fun updateChipView(chipInfo: ChipInfo, currentChipView: ViewGroup) {}
|
||||||
}
|
override fun getIconSize(isAppIcon: Boolean): Int = ICON_SIZE
|
||||||
|
|
||||||
override fun getIconSize(isAppIcon: Boolean): Int? = ICON_SIZE
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inner class ChipInfo : ChipInfoCommon {
|
inner class ChipInfo : ChipInfoCommon {
|
||||||
|
|||||||
Reference in New Issue
Block a user