Merge changes Ie00cdf3e,I0bb03792 into main
* changes:
workaround(expressive): Fix padding issues Setup > Vision settings
feat(expressive): Remove the `Done` button for expressive SUW on Vision settings.
diff --git a/src/com/android/settings/display/ScreenResolutionFragment.java b/src/com/android/settings/display/ScreenResolutionFragment.java
index 224a6f3..9f6ae17 100644
--- a/src/com/android/settings/display/ScreenResolutionFragment.java
+++ b/src/com/android/settings/display/ScreenResolutionFragment.java
@@ -28,6 +28,7 @@
import android.util.Log;
import android.view.Display;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceScreen;
@@ -52,11 +53,15 @@
/** Preference fragment used for switch screen resolution */
@SearchIndexable
public class ScreenResolutionFragment extends RadioButtonPickerFragment {
+ public static final String NON_BREAKING_SPACE = "\u00A0";
+
private static final String TAG = "ScreenResolution";
private Resources mResources;
private static final String SCREEN_RESOLUTION = "user_selected_resolution";
private static final String SCREEN_RESOLUTION_KEY = "screen_resolution";
+ private static final int RESOLUTION_SPACE_THRESHOLD = 1_000;
+ private static final int RESOLUTION_SPACE_THRESHOLD_DIGIT_AMOUNT = 3;
private Display mDefaultDisplay;
private String[] mScreenResolutionOptions;
private Set<Point> mResolutions;
@@ -94,12 +99,45 @@
private SpannableString getResolutionSpannable(int width, int height) {
- String resolutionString = width + " x " + height;
+ String resolutionString = getResolutionString(width, height);
String accessibleText = mResources.getString(
R.string.screen_resolution_delimiter_a11y, width, height);
return Utils.createAccessibleSequence(resolutionString, accessibleText);
}
+ /**
+ * Formats the given width and height into a resolution string, inserting non-breaking
+ * spaces as thousand separators if the values exceed a specified threshold.
+ *
+ * @param width The width value.
+ * @param height The height value.
+ * @return A formatted string representing the resolution (e.g., "1 080 x 1 280").
+ * Non-breaking spaces are used to ensure the numbers and 'x' stay together.
+ * If the width or height is less than RESOLUTION_SPACE_THRESHOLD, no spaces are added.
+ */
+ @NonNull
+ @VisibleForTesting
+ static String getResolutionString(int width, int height) {
+ StringBuilder resolutionStrBldr = new StringBuilder(String.valueOf(width));
+ if (width >= RESOLUTION_SPACE_THRESHOLD) {
+ int insertWidthPosition =
+ resolutionStrBldr.length() - RESOLUTION_SPACE_THRESHOLD_DIGIT_AMOUNT;
+ resolutionStrBldr.insert(insertWidthPosition, NON_BREAKING_SPACE);
+ }
+ resolutionStrBldr.append(NON_BREAKING_SPACE);
+ resolutionStrBldr.append("x");
+ resolutionStrBldr.append(NON_BREAKING_SPACE);
+
+ resolutionStrBldr.append(String.valueOf(height));
+ if (height >= RESOLUTION_SPACE_THRESHOLD) {
+ int insertHeightPosition =
+ resolutionStrBldr.length() - RESOLUTION_SPACE_THRESHOLD_DIGIT_AMOUNT;
+ resolutionStrBldr.insert(insertHeightPosition, NON_BREAKING_SPACE);
+ }
+
+ return resolutionStrBldr.toString();
+ }
+
@Override
protected int getPreferenceScreenResId() {
return R.xml.screen_resolution_settings;
diff --git a/tests/unit/src/com/android/settings/display/ScreenResolutionFragmentTest.java b/tests/unit/src/com/android/settings/display/ScreenResolutionFragmentTest.java
index 8409531..8a8a681 100644
--- a/tests/unit/src/com/android/settings/display/ScreenResolutionFragmentTest.java
+++ b/tests/unit/src/com/android/settings/display/ScreenResolutionFragmentTest.java
@@ -110,4 +110,28 @@
assertThat(preference.getSummary().toString().contentEquals(summary)).isTrue();
}
+
+ @Test
+ public void testResolutionString_widthAndHeightAboveThreshold() {
+ String result = ScreenResolutionFragment.getResolutionString(1080, 1280);
+ assertThat(result).isEqualTo("1\u00A0080\u00A0x\u00A01\u00A0280");
+ }
+
+ @Test
+ public void testResolutionString_widthAboveThreshold_heightBelowThreshold() {
+ String result = ScreenResolutionFragment.getResolutionString(1080, 980);
+ assertThat(result).isEqualTo("1\u00A0080\u00A0x\u00A0980");
+ }
+
+ @Test
+ public void testResolutionString_widthBelowThreshold_heightBelowThreshold() {
+ String result = ScreenResolutionFragment.getResolutionString(980, 980);
+ assertThat(result).isEqualTo("980\u00A0x\u00A0980");
+ }
+
+ @Test
+ public void testResolutionString_widthBelowThreshold_heightAboveThreshold() {
+ String result = ScreenResolutionFragment.getResolutionString(980, 1080);
+ assertThat(result).isEqualTo("980\u00A0x\u00A01\u00A0080");
+ }
}