Revert^2 "Allow update the max lines on the title"
Revert "Revert "Allow update the max lines on the title"
Revert submission 28661116-revert-28616239-356726764-dont-truncate-color-correction-options-LCBEOTEYHE
Reason for revert: Attempt to re-land b/356726764 with a fix to add `sdk_verion: system_current` to the SelectorWithWidgetPreference aconfig
Reverted changes: /q/submissionid:28661116-revert-28616239-356726764-dont-truncate-color-correction-options-LCBEOTEYHE
Change-Id: Iaf8c1e24632e4db56631bf0de81c1d9bf47b83ed
diff --git a/packages/SettingsLib/SelectorWithWidgetPreference/Android.bp b/packages/SettingsLib/SelectorWithWidgetPreference/Android.bp
index 2fe446d..155ee83 100644
--- a/packages/SettingsLib/SelectorWithWidgetPreference/Android.bp
+++ b/packages/SettingsLib/SelectorWithWidgetPreference/Android.bp
@@ -20,6 +20,7 @@
static_libs: [
"androidx.preference_preference",
"SettingsLibSettingsTheme",
+ "settingslib_selectorwithwidgetpreference_flags_lib",
],
sdk_version: "system_current",
@@ -30,3 +31,25 @@
"com.android.mediaprovider",
],
}
+
+aconfig_declarations {
+ name: "settingslib_selectorwithwidgetpreference_flags",
+ package: "com.android.settingslib.widget.selectorwithwidgetpreference.flags",
+ container: "system",
+ srcs: [
+ "aconfig/selectorwithwidgetpreference.aconfig",
+ ],
+}
+
+java_aconfig_library {
+ name: "settingslib_selectorwithwidgetpreference_flags_lib",
+ aconfig_declarations: "settingslib_selectorwithwidgetpreference_flags",
+
+ min_sdk_version: "30",
+ sdk_version: "system_current",
+ apex_available: [
+ "//apex_available:platform",
+ "com.android.permission",
+ "com.android.mediaprovider",
+ ],
+}
diff --git a/packages/SettingsLib/SelectorWithWidgetPreference/aconfig/selectorwithwidgetpreference.aconfig b/packages/SettingsLib/SelectorWithWidgetPreference/aconfig/selectorwithwidgetpreference.aconfig
new file mode 100644
index 0000000..70cda47
--- /dev/null
+++ b/packages/SettingsLib/SelectorWithWidgetPreference/aconfig/selectorwithwidgetpreference.aconfig
@@ -0,0 +1,13 @@
+package: "com.android.settingslib.widget.selectorwithwidgetpreference.flags"
+container: "system"
+
+flag {
+ name: "allow_set_title_max_lines"
+ namespace: "accessibility"
+ description: "Allow changes to the title max lines so it's not always fixed to 2"
+ bug: "356726764"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
diff --git a/packages/SettingsLib/SelectorWithWidgetPreference/res/values/attrs.xml b/packages/SettingsLib/SelectorWithWidgetPreference/res/values/attrs.xml
new file mode 100644
index 0000000..7ffde25
--- /dev/null
+++ b/packages/SettingsLib/SelectorWithWidgetPreference/res/values/attrs.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ ~ Copyright (C) 2024 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>
+ <declare-styleable name="SelectorWithWidgetPreference">
+ <!-- The maximum number of lines for rendering the title. -->
+ <attr name="titleMaxLines" format="integer" />
+ </declare-styleable>
+</resources>
\ No newline at end of file
diff --git a/packages/SettingsLib/SelectorWithWidgetPreference/src/com/android/settingslib/widget/SelectorWithWidgetPreference.java b/packages/SettingsLib/SelectorWithWidgetPreference/src/com/android/settingslib/widget/SelectorWithWidgetPreference.java
index f2ce8a9..34de5c4 100644
--- a/packages/SettingsLib/SelectorWithWidgetPreference/src/com/android/settingslib/widget/SelectorWithWidgetPreference.java
+++ b/packages/SettingsLib/SelectorWithWidgetPreference/src/com/android/settingslib/widget/SelectorWithWidgetPreference.java
@@ -17,15 +17,21 @@
package com.android.settingslib.widget;
import android.content.Context;
+import android.content.res.TypedArray;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
+import android.widget.TextView;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
import androidx.preference.CheckBoxPreference;
import androidx.preference.PreferenceViewHolder;
import com.android.settingslib.widget.preference.selector.R;
+import com.android.settingslib.widget.selectorwithwidgetpreference.flags.Flags;
/**
* Selector preference (checkbox or radio button) with an optional additional widget.
@@ -41,6 +47,8 @@
* on the right side that can open another page.
*/
public class SelectorWithWidgetPreference extends CheckBoxPreference {
+ @VisibleForTesting
+ static final int DEFAULT_MAX_LINES = 2;
/**
* Interface definition for a callback to be invoked when the preference is clicked.
@@ -63,6 +71,8 @@
private boolean mIsCheckBox = false; // whether to display this button as a checkbox
private View.OnClickListener mExtraWidgetOnClickListener;
+ private int mTitleMaxLines;
+
/**
* Perform inflation from XML and apply a class-specific base style.
@@ -74,9 +84,10 @@
* resource that supplies default values for the view. Can be 0 to not
* look for defaults.
*/
- public SelectorWithWidgetPreference(Context context, AttributeSet attrs, int defStyle) {
+ public SelectorWithWidgetPreference(@NonNull Context context, @Nullable AttributeSet attrs,
+ int defStyle) {
super(context, attrs, defStyle);
- init();
+ init(context, attrs, defStyle, /* defStyleRes= */ 0);
}
/**
@@ -88,7 +99,7 @@
*/
public SelectorWithWidgetPreference(Context context, AttributeSet attrs) {
super(context, attrs);
- init();
+ init(context, attrs, /* defStyleAttr= */ 0, /* defStyleRes= */ 0);
}
/**
@@ -100,7 +111,7 @@
public SelectorWithWidgetPreference(Context context, boolean isCheckbox) {
super(context, null);
mIsCheckBox = isCheckbox;
- init();
+ init(context, /* attrs= */ null, /* defStyleAttr= */ 0, /* defStyleRes= */ 0);
}
/**
@@ -161,6 +172,11 @@
mExtraWidgetContainer = holder.findViewById(R.id.selector_extra_widget_container);
setExtraWidgetOnClickListener(mExtraWidgetOnClickListener);
+
+ if (Flags.allowSetTitleMaxLines()) {
+ TextView title = (TextView) holder.findViewById(android.R.id.title);
+ title.setMaxLines(mTitleMaxLines);
+ }
}
/**
@@ -200,7 +216,8 @@
return mIsCheckBox;
}
- private void init() {
+ private void init(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr,
+ int defStyleRes) {
if (mIsCheckBox) {
setWidgetLayoutResource(R.layout.preference_widget_checkbox);
} else {
@@ -208,5 +225,16 @@
}
setLayoutResource(R.layout.preference_selector_with_widget);
setIconSpaceReserved(false);
+
+ if (Flags.allowSetTitleMaxLines()) {
+ final TypedArray a =
+ context.obtainStyledAttributes(
+ attrs, R.styleable.SelectorWithWidgetPreference, defStyleAttr,
+ defStyleRes);
+ mTitleMaxLines =
+ a.getInt(R.styleable.SelectorWithWidgetPreference_titleMaxLines,
+ DEFAULT_MAX_LINES);
+ a.recycle();
+ }
}
}