blob: 8b90547f7bdb1e670a3682fb9d58764c22b74550 [file] [log] [blame]
/*
* 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
}
}