diff options
| author | 2022-06-08 18:26:02 +0000 | |
|---|---|---|
| committer | 2022-06-08 18:26:02 +0000 | |
| commit | 1656ca704ad905b92972aa218d0636409d88d391 (patch) | |
| tree | c634bcef1e4056d1159b35a1eceb29aa681144cc | |
| parent | 8bbc4391267c4f10445566a83f14fda02faa8fa9 (diff) | |
| parent | d4028caa7a0d8f2c03b628cb377747663a9da05e (diff) | |
Merge "Delayable marquee TextView" into tm-qpr-dev
4 files changed, 86 insertions, 2 deletions
diff --git a/packages/SystemUI/res/layout/qs_tile_label.xml b/packages/SystemUI/res/layout/qs_tile_label.xml index 77523ec9229f..c124aea01afc 100644 --- a/packages/SystemUI/res/layout/qs_tile_label.xml +++ b/packages/SystemUI/res/layout/qs_tile_label.xml @@ -28,7 +28,7 @@ android:importantForAccessibility="no" android:layout_gravity="center_vertical | start"> - <com.android.systemui.util.SafeMarqueeTextView + <com.android.systemui.util.DelayableMarqueeTextView android:id="@+id/tile_label" android:layout_width="match_parent" android:layout_height="wrap_content" @@ -41,7 +41,7 @@ android:importantForAccessibility="no" android:textAppearance="@style/TextAppearance.QS.TileLabel"/> - <com.android.systemui.util.SafeMarqueeTextView + <com.android.systemui.util.DelayableMarqueeTextView android:id="@+id/app_label" android:layout_width="match_parent" android:layout_height="wrap_content" diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml index 3228c3c9d37f..70a72ad23d7e 100644 --- a/packages/SystemUI/res/values/attrs.xml +++ b/packages/SystemUI/res/values/attrs.xml @@ -193,5 +193,9 @@ <declare-styleable name="DreamOverlayDotImageView"> <attr name="dotColor" format="color" /> </declare-styleable> + + <declare-styleable name="DelayableMarqueeTextView"> + <attr name="marqueeDelay" format="integer" /> + </declare-styleable> </resources> diff --git a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java index ce50ddff7b0f..fcafeada9d9a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java +++ b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java @@ -283,6 +283,7 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { .inflate(R.layout.qs_paged_page, this, false); page.setMinRows(mMinRows); page.setMaxColumns(mMaxColumns); + page.setSelected(false); return page; } diff --git a/packages/SystemUI/src/com/android/systemui/util/DelayableMarqueeTextView.kt b/packages/SystemUI/src/com/android/systemui/util/DelayableMarqueeTextView.kt new file mode 100644 index 000000000000..8b90547f7bdb --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/util/DelayableMarqueeTextView.kt @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.util + +import android.content.Context +import android.util.AttributeSet +import com.android.systemui.R + +class DelayableMarqueeTextView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0, + defStyleRes: Int = 0 +) : SafeMarqueeTextView(context, attrs, defStyleAttr, defStyleRes) { + + var marqueeDelay: Long = DEFAULT_MARQUEE_DELAY + private var wantsMarquee = false + private var marqueeBlocked = true + + private val enableMarquee = Runnable { + if (wantsMarquee) { + marqueeBlocked = false + startMarquee() + } + } + + init { + val typedArray = context.theme.obtainStyledAttributes( + attrs, + R.styleable.DelayableMarqueeTextView, + defStyleAttr, + defStyleRes + ) + marqueeDelay = typedArray.getInteger( + R.styleable.DelayableMarqueeTextView_marqueeDelay, + DEFAULT_MARQUEE_DELAY.toInt() + ).toLong() + typedArray.recycle() + } + + override fun startMarquee() { + if (!isSelected) { + return + } + wantsMarquee = true + if (marqueeBlocked) { + if (handler?.hasCallbacks(enableMarquee) == false) { + postDelayed(enableMarquee, marqueeDelay) + } + return + } + super.startMarquee() + } + + override fun stopMarquee() { + handler?.removeCallbacks(enableMarquee) + wantsMarquee = false + marqueeBlocked = true + super.stopMarquee() + } + + companion object { + const val DEFAULT_MARQUEE_DELAY = 2000L + } +} |