Loading res/layout/preference_multiline_title_edittext.xml 0 → 100644 +58 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- ~ 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. ~ 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:minHeight="?android:attr/listPreferredItemHeightSmall" android:gravity="center_vertical" android:paddingStart="?android:attr/listPreferredItemPaddingStart" android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" android:background="?android:attr/selectableItemBackground" android:baselineAligned="false"> <RelativeLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:paddingTop="16dp" android:paddingBottom="16dp"> <TextView android:id="@android:id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="false" android:textAppearance="?android:attr/textAppearanceListItem" /> <TextView android:id="@android:id/summary" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@android:id/title" android:layout_alignStart="@android:id/title" android:layout_marginTop="2dp" android:textAppearance="?android:attr/textAppearanceListItemSecondary" android:textColor="?android:attr/textColorSecondary" android:maxLines="4" /> </RelativeLayout> <LinearLayout android:id="@android:id/widget_frame" android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" android:orientation="vertical" /> </LinearLayout> No newline at end of file src/com/android/server/telecom/MultiLineTitleEditTextPreference.java +9 −18 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ import android.view.View; import android.widget.TextView; /** * This class is used in respond_via_sms_settings.xml * * Ultra-simple subclass of EditTextPreference that allows the "title" to wrap * onto multiple lines. * Loading @@ -31,10 +33,6 @@ import android.widget.TextView; * settings UI we want titles to be multi-line, since the customized messages * might be fairly long, and should be able to wrap.) * * TODO: This is pretty cumbersome; it would be nicer for the framework to * either allow modifying the title's attributes in XML, or at least provide * some way from Java (given an EditTextPreference) to reach inside and get a * handle to the "title" TextView. * * TODO: Also, it would reduce clutter if this could be an inner class in * RespondViaSmsManager.java, but then there would be no way to reference the Loading @@ -45,29 +43,22 @@ import android.widget.TextView; * <view class="com.android.server.telecom.Foo$Bar"> as you can with regular views. */ public class MultiLineTitleEditTextPreference extends EditTextPreference { public MultiLineTitleEditTextPreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); public MultiLineTitleEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } public MultiLineTitleEditTextPreference(Context context, AttributeSet attrs) { super(context, attrs); init(); } public MultiLineTitleEditTextPreference(Context context) { super(context); init(); } // The "title" TextView inside an EditTextPreference defaults to // singleLine="true" (see preference_holo.xml under frameworks/base.) // We override onBindView() purely to look up that TextView and call // setSingleLine(false) on it. @Override protected void onBindView(View view) { super.onBindView(view); TextView textView = (TextView) view.findViewById(com.android.internal.R.id.title); if (textView != null) { textView.setSingleLine(false); } private void init() { setLayoutResource(com.android.server.telecom.R.layout.preference_multiline_title_edittext); } } Loading
res/layout/preference_multiline_title_edittext.xml 0 → 100644 +58 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- ~ 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. ~ 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:minHeight="?android:attr/listPreferredItemHeightSmall" android:gravity="center_vertical" android:paddingStart="?android:attr/listPreferredItemPaddingStart" android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" android:background="?android:attr/selectableItemBackground" android:baselineAligned="false"> <RelativeLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:paddingTop="16dp" android:paddingBottom="16dp"> <TextView android:id="@android:id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="false" android:textAppearance="?android:attr/textAppearanceListItem" /> <TextView android:id="@android:id/summary" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@android:id/title" android:layout_alignStart="@android:id/title" android:layout_marginTop="2dp" android:textAppearance="?android:attr/textAppearanceListItemSecondary" android:textColor="?android:attr/textColorSecondary" android:maxLines="4" /> </RelativeLayout> <LinearLayout android:id="@android:id/widget_frame" android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" android:orientation="vertical" /> </LinearLayout> No newline at end of file
src/com/android/server/telecom/MultiLineTitleEditTextPreference.java +9 −18 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ import android.view.View; import android.widget.TextView; /** * This class is used in respond_via_sms_settings.xml * * Ultra-simple subclass of EditTextPreference that allows the "title" to wrap * onto multiple lines. * Loading @@ -31,10 +33,6 @@ import android.widget.TextView; * settings UI we want titles to be multi-line, since the customized messages * might be fairly long, and should be able to wrap.) * * TODO: This is pretty cumbersome; it would be nicer for the framework to * either allow modifying the title's attributes in XML, or at least provide * some way from Java (given an EditTextPreference) to reach inside and get a * handle to the "title" TextView. * * TODO: Also, it would reduce clutter if this could be an inner class in * RespondViaSmsManager.java, but then there would be no way to reference the Loading @@ -45,29 +43,22 @@ import android.widget.TextView; * <view class="com.android.server.telecom.Foo$Bar"> as you can with regular views. */ public class MultiLineTitleEditTextPreference extends EditTextPreference { public MultiLineTitleEditTextPreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); public MultiLineTitleEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } public MultiLineTitleEditTextPreference(Context context, AttributeSet attrs) { super(context, attrs); init(); } public MultiLineTitleEditTextPreference(Context context) { super(context); init(); } // The "title" TextView inside an EditTextPreference defaults to // singleLine="true" (see preference_holo.xml under frameworks/base.) // We override onBindView() purely to look up that TextView and call // setSingleLine(false) on it. @Override protected void onBindView(View view) { super.onBindView(view); TextView textView = (TextView) view.findViewById(com.android.internal.R.id.title); if (textView != null) { textView.setSingleLine(false); } private void init() { setLayoutResource(com.android.server.telecom.R.layout.preference_multiline_title_edittext); } }