Loading libs/WindowManager/Shell/res/values/dimen.xml +11 −0 Original line number Diff line number Diff line Loading @@ -447,6 +447,17 @@ 80 dp for handle + 20 dp for room to grow on the sides when hovered. --> <dimen name="desktop_mode_fullscreen_decor_caption_width">100dp</dimen> <!-- Horizontal padding for desktop mode caption in default unhovered untouched state. --> <dimen name="desktop_mode_fullscreen_decor_caption_horizontal_padding_default">10dp</dimen> <!-- Horizontal padding for desktop mode caption when hovered. 1/2 * (100 dp of total width - 80 dp for handle * 1.2 scaling factor). --> <dimen name="desktop_mode_fullscreen_decor_caption_horizontal_padding_hovered">2dp</dimen> <!-- Horizontal padding for desktop mode caption when touched. 1/2 * (100 dp of total width - 80 dp for handle * 0.85 scaling factor). --> <dimen name="desktop_mode_fullscreen_decor_caption_horizontal_padding_touched">16dp</dimen> <!-- Required empty space to be visible for partially offscreen tasks. --> <dimen name="freeform_required_visible_empty_space_in_header">48dp</dimen> Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/HandleImageButton.kt +28 −13 Original line number Diff line number Diff line Loading @@ -17,9 +17,12 @@ package com.android.wm.shell.windowdecor import android.animation.ValueAnimator import android.annotation.DimenRes import android.content.res.Resources; import android.content.Context import android.util.AttributeSet import android.widget.ImageButton import com.android.wm.shell.R /** * [ImageButton] for the handle at the top of fullscreen apps. Has custom hover Loading @@ -30,13 +33,23 @@ class HandleImageButton (context: Context?, attrs: AttributeSet?) : ImageButton(context, attrs) { private val handleAnimator = ValueAnimator() /** Final horizontal padding for hover enter. **/ private val HANDLE_HOVER_ENTER_PADDING = loadDimensionPixelSize( R.dimen.desktop_mode_fullscreen_decor_caption_horizontal_padding_hovered) /** Final horizontal padding for press down. **/ private val HANDLE_PRESS_DOWN_PADDING = loadDimensionPixelSize( R.dimen.desktop_mode_fullscreen_decor_caption_horizontal_padding_touched) /** Default horizontal padding. **/ private val HANDLE_DEFAULT_PADDING = loadDimensionPixelSize( R.dimen.desktop_mode_fullscreen_decor_caption_horizontal_padding_default) override fun onHoverChanged(hovered: Boolean) { super.onHoverChanged(hovered) if (hovered) { animateHandle(HANDLE_HOVER_ANIM_DURATION, HANDLE_HOVER_ENTER_SCALE) animateHandle(HANDLE_HOVER_ANIM_DURATION, HANDLE_HOVER_ENTER_PADDING) } else { if (!isPressed) { animateHandle(HANDLE_HOVER_ANIM_DURATION, HANDLE_DEFAULT_SCALE) animateHandle(HANDLE_HOVER_ANIM_DURATION, HANDLE_DEFAULT_PADDING) } } } Loading @@ -45,35 +58,37 @@ class HandleImageButton (context: Context?, attrs: AttributeSet?) : if (isPressed != pressed) { super.setPressed(pressed) if (pressed) { animateHandle(HANDLE_PRESS_ANIM_DURATION, HANDLE_PRESS_DOWN_SCALE) animateHandle(HANDLE_PRESS_ANIM_DURATION, HANDLE_PRESS_DOWN_PADDING) } else { animateHandle(HANDLE_PRESS_ANIM_DURATION, HANDLE_DEFAULT_SCALE) animateHandle(HANDLE_PRESS_ANIM_DURATION, HANDLE_DEFAULT_PADDING) } } } private fun animateHandle(duration: Long, endScale: Float) { private fun animateHandle(duration: Long, endPadding: Int) { if (handleAnimator.isRunning) { handleAnimator.cancel() } handleAnimator.duration = duration handleAnimator.setFloatValues(scaleX, endScale) handleAnimator.setIntValues(paddingLeft, endPadding) handleAnimator.addUpdateListener { animator -> scaleX = animator.animatedValue as Float val padding = animator.animatedValue as Int setPadding(padding, paddingTop, padding, paddingBottom) } handleAnimator.start() } private fun loadDimensionPixelSize(@DimenRes resourceId: Int): Int { if (resourceId == Resources.ID_NULL) { return 0 } return context.resources.getDimensionPixelSize(resourceId) } companion object { /** The duration of animations related to hover state. **/ private const val HANDLE_HOVER_ANIM_DURATION = 300L /** The duration of animations related to pressed state. **/ private const val HANDLE_PRESS_ANIM_DURATION = 200L /** Ending scale for hover enter. **/ private const val HANDLE_HOVER_ENTER_SCALE = 1.2f /** Ending scale for press down. **/ private const val HANDLE_PRESS_DOWN_SCALE = 0.85f /** Default scale for handle. **/ private const val HANDLE_DEFAULT_SCALE = 1f } } Loading
libs/WindowManager/Shell/res/values/dimen.xml +11 −0 Original line number Diff line number Diff line Loading @@ -447,6 +447,17 @@ 80 dp for handle + 20 dp for room to grow on the sides when hovered. --> <dimen name="desktop_mode_fullscreen_decor_caption_width">100dp</dimen> <!-- Horizontal padding for desktop mode caption in default unhovered untouched state. --> <dimen name="desktop_mode_fullscreen_decor_caption_horizontal_padding_default">10dp</dimen> <!-- Horizontal padding for desktop mode caption when hovered. 1/2 * (100 dp of total width - 80 dp for handle * 1.2 scaling factor). --> <dimen name="desktop_mode_fullscreen_decor_caption_horizontal_padding_hovered">2dp</dimen> <!-- Horizontal padding for desktop mode caption when touched. 1/2 * (100 dp of total width - 80 dp for handle * 0.85 scaling factor). --> <dimen name="desktop_mode_fullscreen_decor_caption_horizontal_padding_touched">16dp</dimen> <!-- Required empty space to be visible for partially offscreen tasks. --> <dimen name="freeform_required_visible_empty_space_in_header">48dp</dimen> Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/HandleImageButton.kt +28 −13 Original line number Diff line number Diff line Loading @@ -17,9 +17,12 @@ package com.android.wm.shell.windowdecor import android.animation.ValueAnimator import android.annotation.DimenRes import android.content.res.Resources; import android.content.Context import android.util.AttributeSet import android.widget.ImageButton import com.android.wm.shell.R /** * [ImageButton] for the handle at the top of fullscreen apps. Has custom hover Loading @@ -30,13 +33,23 @@ class HandleImageButton (context: Context?, attrs: AttributeSet?) : ImageButton(context, attrs) { private val handleAnimator = ValueAnimator() /** Final horizontal padding for hover enter. **/ private val HANDLE_HOVER_ENTER_PADDING = loadDimensionPixelSize( R.dimen.desktop_mode_fullscreen_decor_caption_horizontal_padding_hovered) /** Final horizontal padding for press down. **/ private val HANDLE_PRESS_DOWN_PADDING = loadDimensionPixelSize( R.dimen.desktop_mode_fullscreen_decor_caption_horizontal_padding_touched) /** Default horizontal padding. **/ private val HANDLE_DEFAULT_PADDING = loadDimensionPixelSize( R.dimen.desktop_mode_fullscreen_decor_caption_horizontal_padding_default) override fun onHoverChanged(hovered: Boolean) { super.onHoverChanged(hovered) if (hovered) { animateHandle(HANDLE_HOVER_ANIM_DURATION, HANDLE_HOVER_ENTER_SCALE) animateHandle(HANDLE_HOVER_ANIM_DURATION, HANDLE_HOVER_ENTER_PADDING) } else { if (!isPressed) { animateHandle(HANDLE_HOVER_ANIM_DURATION, HANDLE_DEFAULT_SCALE) animateHandle(HANDLE_HOVER_ANIM_DURATION, HANDLE_DEFAULT_PADDING) } } } Loading @@ -45,35 +58,37 @@ class HandleImageButton (context: Context?, attrs: AttributeSet?) : if (isPressed != pressed) { super.setPressed(pressed) if (pressed) { animateHandle(HANDLE_PRESS_ANIM_DURATION, HANDLE_PRESS_DOWN_SCALE) animateHandle(HANDLE_PRESS_ANIM_DURATION, HANDLE_PRESS_DOWN_PADDING) } else { animateHandle(HANDLE_PRESS_ANIM_DURATION, HANDLE_DEFAULT_SCALE) animateHandle(HANDLE_PRESS_ANIM_DURATION, HANDLE_DEFAULT_PADDING) } } } private fun animateHandle(duration: Long, endScale: Float) { private fun animateHandle(duration: Long, endPadding: Int) { if (handleAnimator.isRunning) { handleAnimator.cancel() } handleAnimator.duration = duration handleAnimator.setFloatValues(scaleX, endScale) handleAnimator.setIntValues(paddingLeft, endPadding) handleAnimator.addUpdateListener { animator -> scaleX = animator.animatedValue as Float val padding = animator.animatedValue as Int setPadding(padding, paddingTop, padding, paddingBottom) } handleAnimator.start() } private fun loadDimensionPixelSize(@DimenRes resourceId: Int): Int { if (resourceId == Resources.ID_NULL) { return 0 } return context.resources.getDimensionPixelSize(resourceId) } companion object { /** The duration of animations related to hover state. **/ private const val HANDLE_HOVER_ANIM_DURATION = 300L /** The duration of animations related to pressed state. **/ private const val HANDLE_PRESS_ANIM_DURATION = 200L /** Ending scale for hover enter. **/ private const val HANDLE_HOVER_ENTER_SCALE = 1.2f /** Ending scale for press down. **/ private const val HANDLE_PRESS_DOWN_SCALE = 0.85f /** Default scale for handle. **/ private const val HANDLE_DEFAULT_SCALE = 1f } }