Loading packages/SettingsLib/FooterPreference/res/layout-v31/preference_footer.xml +20 −6 Original line number Diff line number Diff line Loading @@ -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 packages/SettingsLib/FooterPreference/res/layout/preference_footer.xml +20 −6 Original line number Diff line number Diff line Loading @@ -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 packages/SettingsLib/FooterPreference/res/values/strings.xml 0 → 100644 +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 packages/SettingsLib/FooterPreference/res/values/styles.xml 0 → 100644 +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 packages/SettingsLib/FooterPreference/src/com/android/settingslib/widget/FooterPreference.java +86 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading @@ -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); Loading Loading @@ -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) { Loading @@ -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; Loading Loading @@ -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}. */ Loading @@ -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 Loading
packages/SettingsLib/FooterPreference/res/layout-v31/preference_footer.xml +20 −6 Original line number Diff line number Diff line Loading @@ -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
packages/SettingsLib/FooterPreference/res/layout/preference_footer.xml +20 −6 Original line number Diff line number Diff line Loading @@ -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
packages/SettingsLib/FooterPreference/res/values/strings.xml 0 → 100644 +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
packages/SettingsLib/FooterPreference/res/values/styles.xml 0 → 100644 +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
packages/SettingsLib/FooterPreference/src/com/android/settingslib/widget/FooterPreference.java +86 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading @@ -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); Loading Loading @@ -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) { Loading @@ -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; Loading Loading @@ -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}. */ Loading @@ -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