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();
+        }
     }
 }