diff --git a/app/src/main/java/se/ajpanton/statusbartweak/shell/ui/ClockFragment.java b/app/src/main/java/se/ajpanton/statusbartweak/shell/ui/ClockFragment.java index 7bf1d17..b633fe7 100644 --- a/app/src/main/java/se/ajpanton/statusbartweak/shell/ui/ClockFragment.java +++ b/app/src/main/java/se/ajpanton/statusbartweak/shell/ui/ClockFragment.java @@ -125,7 +125,8 @@ public final class ClockFragment extends Fragment { SbtSettings.KEY_CLOCK_CUSTOM_FORMAT, customFormatEnabledValue, customFormatValue, - 18f); + 18f, + true); bindCustomFormat( prefs, drawerClockCustomFormatEnabled, @@ -136,7 +137,8 @@ public final class ClockFragment extends Fragment { SbtSettings.KEY_DRAWER_CLOCK_CUSTOM_FORMAT, drawerClockCustomFormatEnabledValue, drawerClockCustomFormatValue, - 24f); + 24f, + false); bindCustomFormat( prefs, drawerDateCustomFormatEnabled, @@ -147,7 +149,8 @@ public final class ClockFragment extends Fragment { SbtSettings.KEY_DRAWER_DATE_CUSTOM_FORMAT, drawerDateCustomFormatEnabledValue, drawerDateCustomFormatValue, - 16f); + 16f, + false); updateCustomFormatHelpVisibility(customFormatHelpContainer, customFormatHelpToggle, false); applyBulletText(customFormatHelpCommon); applyBulletText(customFormatHelpStyling); @@ -186,7 +189,8 @@ public final class ClockFragment extends Fragment { String formatKey, boolean enabled, String format, - float previewTextSizeSp) { + float previewTextSizeSp, + boolean multilinePreview) { if (enabledView == null || input == null) { return; } @@ -198,7 +202,7 @@ public final class ClockFragment extends Fragment { previewTextSizeSp); } updateCustomFormatVisibility(container, enabled); - PreviewBinding binding = new PreviewBinding(enabledView, input, preview); + PreviewBinding binding = new PreviewBinding(enabledView, input, preview, multilinePreview); previewBindings.add(binding); updatePreview(binding); enabledView.setOnCheckedChangeListener((buttonView, isChecked) -> { @@ -247,12 +251,37 @@ public final class ClockFragment extends Fragment { binding.preview.getContext(), pattern, binding.preview.getPreviewTextColor()); + if (!binding.multilinePreview) { + result = flattenRows(result); + } binding.preview.setPreview(result); binding.preview.setVisibility(result.rows().isEmpty() ? View.GONE : View.VISIBLE); binding.preview.setContentDescription(result.contentDescription()); return result.containsSeconds(); } + private ClockPatternPreviewRenderer.Result flattenRows(ClockPatternPreviewRenderer.Result result) { + if (result == null || result.rows() == null || result.rows().size() <= 1) { + return result; + } + SpannableStringBuilder text = new SpannableStringBuilder(); + StringBuilder description = new StringBuilder(); + for (int i = 0; i < result.rows().size(); i++) { + ClockPatternPreviewRenderer.Row row = result.rows().get(i); + if (i > 0) { + text.append(' '); + description.append(' '); + } + if (row != null && row.text() != null) { + text.append(row.text()); + description.append(row.text()); + } + } + ArrayList rows = new ArrayList<>(); + rows.add(new ClockPatternPreviewRenderer.Row(text, "", "", 0, 0)); + return new ClockPatternPreviewRenderer.Result(rows, description.toString(), result.containsSeconds()); + } + private void schedulePreviewTickerIfNeeded() { View view = getView(); if (view == null) { @@ -446,7 +475,7 @@ public final class ClockFragment extends Fragment { view.setText(builder); } - private record PreviewBinding(CheckBox enabled, EditText input, ClockPatternPreviewView preview) { + private record PreviewBinding(CheckBox enabled, EditText input, ClockPatternPreviewView preview, boolean multilinePreview) { } private static final class FontFamilyAdapter extends BaseAdapter {