Merge "Add a learn more text in footerprefernce" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
b3533c8369
@@ -43,13 +43,27 @@
|
||||
android:layout_height="wrap_content"/>
|
||||
</LinearLayout>
|
||||
|
||||
<com.android.settingslib.widget.LinkTextView
|
||||
android:id="@android:id/title"
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="16dp"
|
||||
android:paddingTop="16dp"
|
||||
android:textColor="?android:attr/textColorSecondary"
|
||||
android:ellipsize="marquee" />
|
||||
android:orientation="vertical">
|
||||
<com.android.settingslib.widget.LinkTextView
|
||||
android:id="@android:id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
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>
|
||||
@@ -42,13 +42,27 @@
|
||||
android:layout_height="wrap_content"/>
|
||||
</LinearLayout>
|
||||
|
||||
<com.android.settingslib.widget.LinkTextView
|
||||
android:id="@android:id/title"
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="16dp"
|
||||
android:paddingTop="16dp"
|
||||
android:textColor="?android:attr/textColorSecondary"
|
||||
android:ellipsize="marquee" />
|
||||
android:orientation="vertical">
|
||||
<com.android.settingslib.widget.LinkTextView
|
||||
android:id="@android:id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
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>
|
||||
22
packages/SettingsLib/FooterPreference/res/values/strings.xml
Normal file
22
packages/SettingsLib/FooterPreference/res/values/strings.xml
Normal file
@@ -0,0 +1,22 @@
|
||||
<?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>
|
||||
25
packages/SettingsLib/FooterPreference/res/values/styles.xml
Normal file
25
packages/SettingsLib/FooterPreference/res/values/styles.xml
Normal file
@@ -0,0 +1,25 @@
|
||||
<?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>
|
||||
@@ -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,7 +60,23 @@ public class FooterPreference extends Preference {
|
||||
title.setMovementMethod(new LinkMovementMethod());
|
||||
title.setClickable(false);
|
||||
title.setLongClickable(false);
|
||||
title.setContentDescription(mContentDescription);
|
||||
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
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,4 +69,19 @@ public class FooterPreferenceTest {
|
||||
|
||||
assertThat(mFooterPreference.getContentDescription()).isEqualTo("test");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setLearnMoreContentDescription_contentSet_shouldGetSameContentDescription() {
|
||||
mFooterPreference.setLearnMoreContentDescription("test");
|
||||
|
||||
assertThat(mFooterPreference.getLearnMoreContentDescription()).isEqualTo("test");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setLearnMoreAction_actionSet_shouldGetAction() {
|
||||
mFooterPreference.setLearnMoreAction(v -> {
|
||||
});
|
||||
|
||||
assertThat(mFooterPreference.mLearnMoreListener).isNotNull();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user