Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1656ca70 authored by Fabian Kozynski's avatar Fabian Kozynski Committed by Android (Google) Code Review
Browse files

Merge "Delayable marquee TextView" into tm-qpr-dev

parents 8bbc4391 d4028caa
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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"
+4 −0
Original line number Diff line number Diff line
@@ -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>
+1 −0
Original line number Diff line number Diff line
@@ -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;
    }

+79 −0
Original line number Diff line number Diff line
/*
 * 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
    }
}