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

Commit 243dd312 authored by Tsung-Mao Fang's avatar Tsung-Mao Fang Committed by Automerger Merge Worker
Browse files

Merge "Add a learn more text in footerprefernce" into sc-dev am: b3533c83

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14674300

Change-Id: I4990b59a736fe7f83cd4385b3aafd2bee1f355e6
parents 41f6671a b3533c83
Loading
Loading
Loading
Loading
+20 −6
Original line number Diff line number Diff line
@@ -43,13 +43,27 @@
            android:layout_height="wrap_content"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <com.android.settingslib.widget.LinkTextView
            android:id="@android:id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
        android:paddingBottom="16dp"
            android:paddingTop="16dp"
            android:paddingBottom="8dp"
            android:textColor="?android:attr/textColorSecondary"
            android:ellipsize="marquee" />

        <com.android.settingslib.widget.LinkTextView
            android:id="@+id/settingslib_learn_more"
            android:text="@string/settingslib_learn_more_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:clickable="true"
            android:visibility="gone"
            style="@style/TextAppearance.Footer.Title.SettingsLib"/>
    </LinearLayout>

</LinearLayout>
 No newline at end of file
+20 −6
Original line number Diff line number Diff line
@@ -42,13 +42,27 @@
            android:layout_height="wrap_content"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <com.android.settingslib.widget.LinkTextView
            android:id="@android:id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
        android:paddingBottom="16dp"
            android:paddingTop="16dp"
            android:paddingBottom="8dp"
            android:textColor="?android:attr/textColorSecondary"
            android:ellipsize="marquee" />

        <com.android.settingslib.widget.LinkTextView
            android:id="@+id/settingslib_learn_more"
            android:text="@string/settingslib_learn_more_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:clickable="true"
            android:visibility="gone"
            style="@style/TextAppearance.Footer.Title.SettingsLib"/>
    </LinearLayout>

</LinearLayout>
 No newline at end of file
+22 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
  Copyright (C) 2021 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.
  -->

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">

    <!-- learn more text of footer preference [CHAR LIMIT=NONE] -->
    <string name="settingslib_learn_more_text">Learn more</string>
</resources>
 No newline at end of file
+25 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
  Copyright (C) 2021 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.
  -->

<resources>
    <style name="TextAppearance.Footer.Title.SettingsLib"
           parent="@android:style/TextAppearance.DeviceDefault.Medium">
        <item name="android:textSize">14sp</item>
        <item name="android:fontFamily">@*android:string/config_headlineFontFamilyMedium</item>
        <item name="android:textColor">?android:attr/colorAccent</item>
    </style>
</resources>
 No newline at end of file
+86 −2
Original line number Diff line number Diff line
@@ -17,13 +17,17 @@
package com.android.settingslib.widget;

import android.content.Context;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.text.style.UnderlineSpan;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder;

@@ -35,7 +39,10 @@ public class FooterPreference extends Preference {

    public static final String KEY_FOOTER = "footer_preference";
    static final int ORDER_FOOTER = Integer.MAX_VALUE - 1;
    @VisibleForTesting
    View.OnClickListener mLearnMoreListener;
    private CharSequence mContentDescription;
    private CharSequence mLearnMoreContentDescription;

    public FooterPreference(Context context, AttributeSet attrs) {
        super(context, attrs, R.attr.footerPreferenceStyle);
@@ -53,9 +60,25 @@ public class FooterPreference extends Preference {
        title.setMovementMethod(new LinkMovementMethod());
        title.setClickable(false);
        title.setLongClickable(false);
        if (!TextUtils.isEmpty(mContentDescription)) {
            title.setContentDescription(mContentDescription);
        }

        TextView learnMore = holder.itemView.findViewById(R.id.settingslib_learn_more);
        if (learnMore != null && mLearnMoreListener != null) {
            learnMore.setVisibility(View.VISIBLE);
            learnMore.setOnClickListener(mLearnMoreListener);
            SpannableString learnMoreText = new SpannableString(learnMore.getText());
            learnMoreText.setSpan(new UnderlineSpan(), 0, learnMoreText.length(), 0);
            learnMore.setText(learnMoreText);
            if (!TextUtils.isEmpty(mLearnMoreContentDescription)) {
                learnMore.setContentDescription(mLearnMoreContentDescription);
            }
        } else {
            learnMore.setVisibility(View.GONE);
        }
    }

    @Override
    public void setSummary(CharSequence summary) {
        setTitle(summary);
@@ -87,10 +110,42 @@ public class FooterPreference extends Preference {
    /**
     * Return the content description of footer preference.
     */
    public CharSequence getContentDescription() {
    @VisibleForTesting
    CharSequence getContentDescription() {
        return mContentDescription;
    }

    /**
     * To set content description of the learn more text. This can use for talkback
     * environment if developer wants to have a customization content.
     *
     * @param learnMoreContentDescription The resource id of the content description.
     */
    public void setLearnMoreContentDescription(CharSequence learnMoreContentDescription) {
        if (!TextUtils.equals(mContentDescription, learnMoreContentDescription)) {
            mLearnMoreContentDescription = learnMoreContentDescription;
            notifyChanged();
        }
    }

    /**
     * Return the content description of learn more link.
     */
    @VisibleForTesting
    CharSequence getLearnMoreContentDescription() {
        return mLearnMoreContentDescription;
    }

    /**
     * Assign an action for the learn more link.
     */
    public void setLearnMoreAction(View.OnClickListener listener) {
        if (mLearnMoreListener != listener) {
            mLearnMoreListener = listener;
            notifyChanged();
        }
    }

    private void init() {
        setLayoutResource(R.layout.preference_footer);
        if (getIcon() == null) {
@@ -110,6 +165,7 @@ public class FooterPreference extends Preference {
        private String mKey;
        private CharSequence mTitle;
        private CharSequence mContentDescription;
        private CharSequence mLearnMoreContentDescription;

        public Builder(@NonNull Context context) {
            mContext = context;
@@ -167,6 +223,30 @@ public class FooterPreference extends Preference {
            return this;
        }

        /**
         * To set content description of the learn more text. This can use for talkback
         * environment if developer wants to have a customization content.
         *
         * @param learnMoreContentDescription The resource id of the content description.
         */
        public Builder setLearnMoreContentDescription(CharSequence learnMoreContentDescription) {
            mLearnMoreContentDescription = learnMoreContentDescription;
            return this;
        }

        /**
         * To set content description of the {@link FooterPreference}. This can use for talkback
         * environment if developer wants to have a customization content.
         *
         * @param learnMoreContentDescriptionResId The resource id of the content description.
         */
        public Builder setLearnMoreContentDescription(
                @StringRes int learnMoreContentDescriptionResId) {
            mLearnMoreContentDescription = mContext.getText(learnMoreContentDescriptionResId);
            return this;
        }


        /**
         * To generate the {@link FooterPreference}.
         */
@@ -184,6 +264,10 @@ public class FooterPreference extends Preference {
            if (!TextUtils.isEmpty(mContentDescription)) {
                footerPreference.setContentDescription(mContentDescription);
            }

            if (!TextUtils.isEmpty(mLearnMoreContentDescription)) {
                footerPreference.setLearnMoreContentDescription(mLearnMoreContentDescription);
            }
            return footerPreference;
        }
    }
Loading