diff options
author | 2025-01-17 07:15:45 +0000 | |
---|---|---|
committer | 2025-01-17 07:15:45 +0000 | |
commit | 6590ebf9e144daab835d983bf5bd15a4ae151306 (patch) | |
tree | ae96d9295a977bf2c1f25f29d8a63f30edb57a52 | |
parent | 44c66c63091c0c3dfbbe90f9bb4988f5ac160c83 (diff) |
Update TopIntroPreference
- support learn more button
- support hyperlink
Bug: 367394720
Bug: 384999645
Test: visual test
Flag: EXEMPT backward compatibility
Change-Id: I3e96f31eed33d1d94d38f0ecb7dc39401468c07f
-rw-r--r-- | packages/SettingsLib/SettingsTheme/res/layout/settingslib_expressive_collapsable_textview.xml (renamed from packages/SettingsLib/SettingsTheme/res/layout-v35/settingslib_expressive_collapsable_textview.xml) | 0 | ||||
-rw-r--r-- | packages/SettingsLib/SettingsTheme/res/values-v31/styles_expressive.xml | 5 | ||||
-rw-r--r-- | packages/SettingsLib/SettingsTheme/res/values-v35/styles_expressive.xml | 5 | ||||
-rw-r--r-- | packages/SettingsLib/TopIntroPreference/res/layout-v33/top_intro_preference.xml | 41 | ||||
-rw-r--r-- | packages/SettingsLib/TopIntroPreference/res/layout/settingslib_expressive_top_intro.xml (renamed from packages/SettingsLib/TopIntroPreference/res/layout-v35/settingslib_expressive_top_intro.xml) | 2 | ||||
-rw-r--r-- | packages/SettingsLib/TopIntroPreference/res/layout/top_intro_preference.xml | 39 | ||||
-rw-r--r-- | packages/SettingsLib/TopIntroPreference/src/com/android/settingslib/widget/TopIntroPreference.kt | 43 |
7 files changed, 22 insertions, 113 deletions
diff --git a/packages/SettingsLib/SettingsTheme/res/layout-v35/settingslib_expressive_collapsable_textview.xml b/packages/SettingsLib/SettingsTheme/res/layout/settingslib_expressive_collapsable_textview.xml index 7d7bec14ed78..7d7bec14ed78 100644 --- a/packages/SettingsLib/SettingsTheme/res/layout-v35/settingslib_expressive_collapsable_textview.xml +++ b/packages/SettingsLib/SettingsTheme/res/layout/settingslib_expressive_collapsable_textview.xml diff --git a/packages/SettingsLib/SettingsTheme/res/values-v31/styles_expressive.xml b/packages/SettingsLib/SettingsTheme/res/values-v31/styles_expressive.xml index b5f22b73cecd..ec67d068123a 100644 --- a/packages/SettingsLib/SettingsTheme/res/values-v31/styles_expressive.xml +++ b/packages/SettingsLib/SettingsTheme/res/values-v31/styles_expressive.xml @@ -104,6 +104,11 @@ <item name="android:layout_width">match_parent</item> </style> + <style name="SettingslibTextAppearance.LinkableTextStyle.Expressive" + parent="@style/TextAppearance.SettingsLib.LabelLarge"> + <item name="android:textColor">?android:attr/colorAccent</item> + </style> + <style name="SettingslibTextButtonStyle.Expressive" parent="@style/Widget.Material3Expressive.Button.TextButton.Icon"> <item name="android:theme">@style/Theme.Material3.DynamicColors.DayNight</item> diff --git a/packages/SettingsLib/SettingsTheme/res/values-v35/styles_expressive.xml b/packages/SettingsLib/SettingsTheme/res/values-v35/styles_expressive.xml index 1a085681864a..3af88c48e8ca 100644 --- a/packages/SettingsLib/SettingsTheme/res/values-v35/styles_expressive.xml +++ b/packages/SettingsLib/SettingsTheme/res/values-v35/styles_expressive.xml @@ -70,11 +70,6 @@ <item name="android:textAppearance">@style/TextAppearance.SettingsLib.TitleLarge.Emphasized</item> </style> - <style name="SettingslibTextAppearance.LinkableTextStyle.Expressive" - parent="@style/TextAppearance.SettingsLib.LabelLarge"> - <item name="android:textColor">?android:attr/colorAccent</item> - </style> - <style name="SettingsLibStatusBannerCardStyle"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">wrap_content</item> diff --git a/packages/SettingsLib/TopIntroPreference/res/layout-v33/top_intro_preference.xml b/packages/SettingsLib/TopIntroPreference/res/layout-v33/top_intro_preference.xml deleted file mode 100644 index 195d45f3a639..000000000000 --- a/packages/SettingsLib/TopIntroPreference/res/layout-v33/top_intro_preference.xml +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - 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. - --> - -<LinearLayout - xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:paddingStart="?android:attr/listPreferredItemPaddingStart" - android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" - android:paddingBottom="16dp" - android:paddingTop="8dp" - android:background="?android:attr/selectableItemBackground" - android:clipToPadding="false"> - - <TextView - android:id="@android:id/title" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="start" - android:textAlignment="viewStart" - android:clickable="false" - android:longClickable="false" - android:maxLines="10" - android:hyphenationFrequency="normalFast" - android:lineBreakWordStyle="phrase" - android:textAppearance="@style/TextAppearance.TopIntroText"/> -</LinearLayout>
\ No newline at end of file diff --git a/packages/SettingsLib/TopIntroPreference/res/layout-v35/settingslib_expressive_top_intro.xml b/packages/SettingsLib/TopIntroPreference/res/layout/settingslib_expressive_top_intro.xml index fb13ef79cc3b..834814ccbc6b 100644 --- a/packages/SettingsLib/TopIntroPreference/res/layout-v35/settingslib_expressive_top_intro.xml +++ b/packages/SettingsLib/TopIntroPreference/res/layout/settingslib_expressive_top_intro.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- - Copyright (C) 2024 The Android Open Source Project + Copyright (C) 2025 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. diff --git a/packages/SettingsLib/TopIntroPreference/res/layout/top_intro_preference.xml b/packages/SettingsLib/TopIntroPreference/res/layout/top_intro_preference.xml deleted file mode 100644 index bee6bc70f2c8..000000000000 --- a/packages/SettingsLib/TopIntroPreference/res/layout/top_intro_preference.xml +++ /dev/null @@ -1,39 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2020 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. - --> - -<LinearLayout - xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:paddingStart="?android:attr/listPreferredItemPaddingStart" - android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" - android:paddingBottom="16dp" - android:paddingTop="8dp" - android:background="?android:attr/selectableItemBackground" - android:clipToPadding="false"> - - <TextView - android:id="@android:id/title" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="start" - android:textAlignment="viewStart" - android:clickable="false" - android:longClickable="false" - android:maxLines="10" - android:textAppearance="@style/TextAppearance.TopIntroText"/> -</LinearLayout>
\ No newline at end of file diff --git a/packages/SettingsLib/TopIntroPreference/src/com/android/settingslib/widget/TopIntroPreference.kt b/packages/SettingsLib/TopIntroPreference/src/com/android/settingslib/widget/TopIntroPreference.kt index 4428480eaa3e..08ba836b21ca 100644 --- a/packages/SettingsLib/TopIntroPreference/src/com/android/settingslib/widget/TopIntroPreference.kt +++ b/packages/SettingsLib/TopIntroPreference/src/com/android/settingslib/widget/TopIntroPreference.kt @@ -17,20 +17,20 @@ 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 import com.android.settingslib.widget.preference.topintro.R -open class TopIntroPreference @JvmOverloads constructor( +open class TopIntroPreference +@JvmOverloads +constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0, - defStyleRes: Int = 0 + defStyleRes: Int = 0, ) : Preference(context, attrs, defStyleAttr, defStyleRes), GroupSectionDividerMixin { private var isCollapsable: Boolean = false @@ -40,25 +40,18 @@ open class TopIntroPreference @JvmOverloads constructor( private var learnMoreText: CharSequence? = null init { - if (SettingsThemeHelper.isExpressiveTheme(context)) { - layoutResource = R.layout.settingslib_expressive_top_intro - initAttributes(context, attrs, defStyleAttr) - } else { - layoutResource = R.layout.top_intro_preference - } + layoutResource = R.layout.settingslib_expressive_top_intro + initAttributes(context, attrs, defStyleAttr) + isSelectable = false } private fun initAttributes(context: Context, attrs: AttributeSet?, defStyleAttr: Int) { - context.obtainStyledAttributes( - attrs, - COLLAPSABLE_TEXT_VIEW_ATTRS, defStyleAttr, 0 - ).apply { + context.obtainStyledAttributes(attrs, COLLAPSABLE_TEXT_VIEW_ATTRS, defStyleAttr, 0).apply { isCollapsable = getBoolean(IS_COLLAPSABLE, false) - minLines = getInt( - MIN_LINES, - if (isCollapsable) DEFAULT_MIN_LINES else DEFAULT_MAX_LINES - ).coerceIn(1, DEFAULT_MAX_LINES) + minLines = + getInt(MIN_LINES, if (isCollapsable) DEFAULT_MIN_LINES else DEFAULT_MAX_LINES) + .coerceIn(1, DEFAULT_MAX_LINES) recycle() } } @@ -68,10 +61,6 @@ open class TopIntroPreference @JvmOverloads constructor( holder.isDividerAllowedAbove = false holder.isDividerAllowedBelow = false - if (!SettingsThemeHelper.isExpressiveTheme(context)) { - return - } - (holder.findViewById(R.id.collapsable_text_view) as? CollapsableTextView)?.apply { setCollapsable(isCollapsable) setMinLines(minLines) @@ -89,9 +78,9 @@ open class TopIntroPreference @JvmOverloads constructor( /** * Sets whether the text view is collapsable. + * * @param collapsable True if the text view should be collapsable, false otherwise. */ - @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) fun setCollapsable(collapsable: Boolean) { isCollapsable = collapsable notifyChanged() @@ -99,9 +88,9 @@ open class TopIntroPreference @JvmOverloads constructor( /** * Sets the minimum number of lines to display when collapsed. + * * @param lines The minimum number of lines. */ - @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) fun setMinLines(lines: Int) { minLines = lines.coerceIn(1, DEFAULT_MAX_LINES) notifyChanged() @@ -109,9 +98,9 @@ open class TopIntroPreference @JvmOverloads constructor( /** * 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 @@ -121,9 +110,9 @@ open class TopIntroPreference @JvmOverloads constructor( /** * 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 @@ -133,9 +122,9 @@ open class TopIntroPreference @JvmOverloads constructor( /** * 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 |