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

Commit f57b725b authored by Mill Chen's avatar Mill Chen
Browse files

[Expressive design] Update IntroPreference

- supoort hyperlink in the title
- support learn more

Bug: 367714364
Test: visual
Flag: EXEMPT resource only update
Change-Id: I63c4ded25d93cfbb5f0f9cf495163fc1d99f1c08
parent 3ca6e05a
Loading
Loading
Loading
Loading
+48 −0
Original line number Diff line number Diff line
@@ -18,7 +18,9 @@ package com.android.settingslib.widget

import android.content.Context
import android.os.Build
import android.text.TextUtils
import android.util.AttributeSet
import android.view.View
import androidx.annotation.RequiresApi
import androidx.preference.Preference
import androidx.preference.PreferenceViewHolder
@@ -33,6 +35,9 @@ class IntroPreference @JvmOverloads constructor(

    private var isCollapsable: Boolean = false
    private var minLines: Int = 2
    private var hyperlinkListener: View.OnClickListener? = null
    private var learnMoreListener: View.OnClickListener? = null
    private var learnMoreText: CharSequence? = null

    init {
        layoutResource = R.layout.settingslib_expressive_preference_intro
@@ -64,6 +69,13 @@ class IntroPreference @JvmOverloads constructor(
            setCollapsable(isCollapsable)
            setMinLines(minLines)
            setText(summary.toString())
            if (hyperlinkListener != null) {
                setHyperlinkListener(hyperlinkListener)
            }
            if (learnMoreListener != null) {
                setLearnMoreText(learnMoreText)
                setLearnMoreAction(learnMoreListener)
            }
        }
    }

@@ -88,6 +100,42 @@ class IntroPreference @JvmOverloads constructor(
        notifyChanged()
    }

    /**
     * Sets the action when clicking on the hyperlink in the text.
     * @param listener The click listener for hyperlink.
     */
    @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
    fun setHyperlinkListener(listener: View.OnClickListener) {
        if (hyperlinkListener != listener) {
            hyperlinkListener = listener
            notifyChanged()
        }
    }

    /**
     * Sets the action when clicking on the learn more view.
     * @param listener The click listener for learn more.
     */
    @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
    fun setLearnMoreAction(listener: View.OnClickListener) {
        if (learnMoreListener != listener) {
            learnMoreListener = listener
            notifyChanged()
        }
    }

    /**
     * Sets the text of learn more view.
     * @param text The text of learn more.
     */
    @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
    fun setLearnMoreText(text: CharSequence) {
        if (!TextUtils.equals(learnMoreText, text)) {
            learnMoreText = text
            notifyChanged()
        }
    }

    companion object {
        private const val DEFAULT_MAX_LINES = 10
        private const val DEFAULT_MIN_LINES = 2