From d4028caa7a0d8f2c03b628cb377747663a9da05e Mon Sep 17 00:00:00 2001 From: Fabian Kozynski Date: Thu, 12 May 2022 10:34:51 -0400 Subject: Delayable marquee TextView Adds a TextView class that delays the start of its marquee after it's been visible and selected for a while. Test: manual Fixes: 203534602 Change-Id: Ie76b28c11348d842d0337dd612c54a39c844e148 --- packages/SystemUI/res/layout/qs_tile_label.xml | 4 +- packages/SystemUI/res/values/attrs.xml | 4 ++ .../com/android/systemui/qs/PagedTileLayout.java | 1 + .../systemui/util/DelayableMarqueeTextView.kt | 79 ++++++++++++++++++++++ 4 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 packages/SystemUI/src/com/android/systemui/util/DelayableMarqueeTextView.kt 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"> - - + + + + 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 + } +} -- cgit v1.2.3-59-g8ed1b