From b33bfda58435897d9f66b2d3acb95494d64d3d23 Mon Sep 17 00:00:00 2001 From: xhon-pelushi Date: Sat, 15 Aug 2026 10:56:02 -0400 Subject: [PATCH] Add option to hide AM/PM in digital widget Adds a "Show AM/PM" switch to the digital widget's configuration screen so 12-hour format users can drop the AM/PM suffix, which some find redundant and wastes widget space. Fixes #138 --- .../WidgetDigitalConfigureActivity.kt | 36 ++++++++++++++----- .../org/fossify/clock/helpers/Config.kt | 4 +++ .../org/fossify/clock/helpers/Constants.kt | 2 ++ .../helpers/MyDigitalTimeWidgetProvider.kt | 3 ++ .../main/res/layout/widget_config_digital.xml | 9 +++++ app/src/main/res/values/strings.xml | 1 + 6 files changed, 46 insertions(+), 9 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/clock/activities/WidgetDigitalConfigureActivity.kt b/app/src/main/kotlin/org/fossify/clock/activities/WidgetDigitalConfigureActivity.kt index 392dfdea6..9b52a74fd 100644 --- a/app/src/main/kotlin/org/fossify/clock/activities/WidgetDigitalConfigureActivity.kt +++ b/app/src/main/kotlin/org/fossify/clock/activities/WidgetDigitalConfigureActivity.kt @@ -7,9 +7,11 @@ import android.graphics.Color import android.os.Build import android.os.Bundle import android.widget.SeekBar +import androidx.core.view.isVisible import org.fossify.clock.databinding.WidgetConfigDigitalBinding import org.fossify.clock.extensions.config import org.fossify.clock.helpers.FORMAT_12H +import org.fossify.clock.helpers.FORMAT_12H_NO_AM_PM import org.fossify.clock.helpers.FORMAT_24H import org.fossify.clock.helpers.MyDigitalTimeWidgetProvider import org.fossify.clock.helpers.SIMPLE_PHONE @@ -30,6 +32,7 @@ class WidgetDigitalConfigureActivity : SimpleActivity() { private var mWidgetId = 0 private var mBgColor = 0 private var mTextColor = 0 + private var mShowAmPm = true private var mBgColorWithoutTransparency = 0 private var mFeatureLockedDialog: FeatureLockedDialog? = null private val binding: WidgetConfigDigitalBinding by viewBinding(WidgetConfigDigitalBinding::inflate) @@ -60,6 +63,13 @@ class WidgetDigitalConfigureActivity : SimpleActivity() { binding.configDigitalBgColor.setOnClickListener { pickBackgroundColor() } binding.configDigitalTextColor.setOnClickListener { pickTextColor() } + binding.configDigitalShowAmPm.isVisible = !config.use24HourFormat + binding.configDigitalShowAmPm.isChecked = mShowAmPm + binding.configDigitalShowAmPm.setOnCheckedChangeListener { _, isChecked -> + mShowAmPm = isChecked + updateClockPreviewFormat() + } + val primaryColor = getProperPrimaryColor() binding.configDigitalBgSeekbar.setColors(mTextColor, primaryColor, primaryColor) @@ -98,15 +108,30 @@ class WidgetDigitalConfigureActivity : SimpleActivity() { mTextColor = resources.getColor(org.fossify.commons.R.color.you_primary_color, theme) } + mShowAmPm = config.widgetShowAmPm updateTextColor() + updateClockPreviewFormat() + } + + private fun updateClockPreviewFormat() { + val clockFormat = if (config.use24HourFormat) { + FORMAT_24H + } else if (mShowAmPm) { + FORMAT_12H + } else { + FORMAT_12H_NO_AM_PM + } - val clockFormat = if (config.use24HourFormat) FORMAT_24H else FORMAT_12H binding.configDigitalTime.format24Hour = clockFormat binding.configDigitalTime.format12Hour = clockFormat } private fun saveConfig() { - storeWidgetColors() + config.apply { + widgetBgColor = mBgColor + widgetTextColor = mTextColor + widgetShowAmPm = mShowAmPm + } requestWidgetUpdate() Intent().apply { @@ -116,13 +141,6 @@ class WidgetDigitalConfigureActivity : SimpleActivity() { finish() } - private fun storeWidgetColors() { - config.apply { - widgetBgColor = mBgColor - widgetTextColor = mTextColor - } - } - private fun pickBackgroundColor() { ColorPickerDialog(this, mBgColorWithoutTransparency) { wasPositivePressed, color -> if (wasPositivePressed) { diff --git a/app/src/main/kotlin/org/fossify/clock/helpers/Config.kt b/app/src/main/kotlin/org/fossify/clock/helpers/Config.kt index 1839bfcc0..7ea2be722 100644 --- a/app/src/main/kotlin/org/fossify/clock/helpers/Config.kt +++ b/app/src/main/kotlin/org/fossify/clock/helpers/Config.kt @@ -138,6 +138,10 @@ class Config(context: Context) : BaseConfig(context) { putBoolean(WAS_INITIAL_WIDGET_SET_UP, wasInitialWidgetSetUp) } + var widgetShowAmPm: Boolean + get() = prefs.getBoolean(WIDGET_SHOW_AM_PM, true) + set(widgetShowAmPm) = prefs.edit { putBoolean(WIDGET_SHOW_AM_PM, widgetShowAmPm) } + var lastDataExportPath: String get() = prefs.getString(LAST_DATA_EXPORT_PATH, "")!! set(lastDataExportPath) = prefs.edit { diff --git a/app/src/main/kotlin/org/fossify/clock/helpers/Constants.kt b/app/src/main/kotlin/org/fossify/clock/helpers/Constants.kt index 2d812c03d..e6a0f8926 100644 --- a/app/src/main/kotlin/org/fossify/clock/helpers/Constants.kt +++ b/app/src/main/kotlin/org/fossify/clock/helpers/Constants.kt @@ -38,6 +38,7 @@ const val TIMERS_SORT_BY = "timers_sort_by" const val TIMERS_CUSTOM_SORTING = "timers_custom_sorting" const val STOPWATCH_LAPS_SORT_BY = "stopwatch_laps_sort_by" const val WAS_INITIAL_WIDGET_SET_UP = "was_initial_widget_set_up" +const val WIDGET_SHOW_AM_PM = "widget_show_am_pm" const val DATA_EXPORT_EXTENSION = ".json" const val LAST_DATA_EXPORT_PATH = "last_alarms_export_path" const val MIGRATE_FIRST_DAY_OF_WEEK = "migrate_first_day_of_week" @@ -100,6 +101,7 @@ const val STOPWATCH_TOGGLE_ACTION = "org.fossify.clock.TOGGLE_STOPWATCH" // time formatting const val FORMAT_12H = "h:mm a" +const val FORMAT_12H_NO_AM_PM = "h:mm" const val FORMAT_24H = "HH:mm" const val FORMAT_12H_WITH_SECONDS = "h:mm:ss a" const val FORMAT_24H_WITH_SECONDS = "HH:mm:ss" diff --git a/app/src/main/kotlin/org/fossify/clock/helpers/MyDigitalTimeWidgetProvider.kt b/app/src/main/kotlin/org/fossify/clock/helpers/MyDigitalTimeWidgetProvider.kt index 768a8cb9a..ceff09e36 100644 --- a/app/src/main/kotlin/org/fossify/clock/helpers/MyDigitalTimeWidgetProvider.kt +++ b/app/src/main/kotlin/org/fossify/clock/helpers/MyDigitalTimeWidgetProvider.kt @@ -66,6 +66,9 @@ class MyDigitalTimeWidgetProvider : AppWidgetProvider() { setViewVisibility(clockToHide, View.GONE) setViewVisibility(clockToShow, View.VISIBLE) + + val format12Hour = if (context.config.widgetShowAmPm) FORMAT_12H else FORMAT_12H_NO_AM_PM + setCharSequence(R.id.widget_text_clock_12, "setFormat12Hour", format12Hour) } } diff --git a/app/src/main/res/layout/widget_config_digital.xml b/app/src/main/res/layout/widget_config_digital.xml index 7b513486a..ca1d2a715 100644 --- a/app/src/main/res/layout/widget_config_digital.xml +++ b/app/src/main/res/layout/widget_config_digital.xml @@ -58,6 +58,15 @@ + + Time expired Clock and date Use text shadow + Show AM/PM Swipe right to Dismiss, or left to Snooze. Creation order Alarm time