Skip to content

Commit 208b2e3

Browse files
authored
Merge pull request #62 from Aga-C/better-support-24-12-hr-forrmats
Better support for 24 and 12 hour time formats (#52)
2 parents 11ab68b + 99a6504 commit 208b2e3

11 files changed

+80
-15
lines changed

app/src/main/kotlin/org/fossify/clock/activities/SettingsActivity.kt

+11
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import org.fossify.clock.R
1010
import org.fossify.clock.databinding.ActivitySettingsBinding
1111
import org.fossify.clock.dialogs.ExportDataDialog
1212
import org.fossify.clock.extensions.config
13+
import org.fossify.clock.extensions.updateWidgets
1314
import org.fossify.clock.extensions.dbHelper
1415
import org.fossify.clock.extensions.timerDb
1516
import org.fossify.clock.helpers.DBHelper
@@ -101,6 +102,7 @@ class SettingsActivity : SimpleActivity() {
101102
setupCustomizeColors()
102103
setupUseEnglish()
103104
setupLanguage()
105+
setupHourFormat()
104106
setupDefaultTab()
105107
setupPreventPhoneFromSleeping()
106108
setupStartWeekOn()
@@ -178,6 +180,15 @@ class SettingsActivity : SimpleActivity() {
178180
}
179181
}
180182

183+
private fun setupHourFormat() = binding.apply {
184+
settingsHourFormat.isChecked = config.use24HourFormat
185+
settingsHourFormatHolder.setOnClickListener {
186+
settingsHourFormat.toggle()
187+
config.use24HourFormat = settingsHourFormat.isChecked
188+
updateWidgets()
189+
}
190+
}
191+
181192
private fun getDefaultTabText() = getString(
182193
when (config.defaultTab) {
183194
TAB_CLOCK -> R.string.clock

app/src/main/kotlin/org/fossify/clock/activities/WidgetDigitalConfigureActivity.kt

+6
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import android.os.Bundle
1010
import android.widget.SeekBar
1111
import org.fossify.clock.databinding.WidgetConfigDigitalBinding
1212
import org.fossify.clock.extensions.config
13+
import org.fossify.clock.helpers.FORMAT_12H
14+
import org.fossify.clock.helpers.FORMAT_24H
1315
import org.fossify.clock.helpers.MyDigitalTimeWidgetProvider
1416
import org.fossify.clock.helpers.SIMPLE_PHONE
1517
import org.fossify.commons.dialogs.ColorPickerDialog
@@ -84,6 +86,10 @@ class WidgetDigitalConfigureActivity : SimpleActivity() {
8486
}
8587

8688
updateTextColor()
89+
90+
val clockFormat = if (config.use24HourFormat) FORMAT_24H else FORMAT_12H
91+
binding.configDigitalTime.format24Hour = clockFormat
92+
binding.configDigitalTime.format12Hour = clockFormat
8793
}
8894

8995
private fun saveConfig() {

app/src/main/kotlin/org/fossify/clock/dialogs/EditAlarmDialog.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class EditAlarmDialog(val activity: SimpleActivity, val alarm: Alarm, val onDism
3434
binding.apply {
3535
editAlarmTime.setOnClickListener {
3636
if (activity.config.isUsingSystemTheme) {
37-
val timeFormat = if (DateFormat.is24HourFormat(activity)) {
37+
val timeFormat = if (activity.config.use24HourFormat) {
3838
TimeFormat.CLOCK_24H
3939
} else {
4040
TimeFormat.CLOCK_12H
@@ -59,7 +59,7 @@ class EditAlarmDialog(val activity: SimpleActivity, val alarm: Alarm, val onDism
5959
timeSetListener,
6060
alarm.timeInMinutes / 60,
6161
alarm.timeInMinutes % 60,
62-
DateFormat.is24HourFormat(activity)
62+
activity.config.use24HourFormat
6363
).show()
6464
}
6565
}

app/src/main/kotlin/org/fossify/clock/extensions/Context.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ fun Context.updateAnalogueWidgets() {
247247
}
248248

249249
fun Context.getFormattedTime(passedSeconds: Int, showSeconds: Boolean, makeAmPmSmaller: Boolean): SpannableString {
250-
val use24HourFormat = DateFormat.is24HourFormat(this)
250+
val use24HourFormat = config.use24HourFormat
251251
val hours = (passedSeconds / 3600) % 24
252252
val minutes = (passedSeconds / 60) % 60
253253
val seconds = passedSeconds % 60
@@ -299,10 +299,10 @@ fun Context.getClosestEnabledAlarmString(callback: (result: String) -> Unit) {
299299
calendar.add(Calendar.MINUTE, closestAlarmTime)
300300
val dayOfWeekIndex = (calendar.get(Calendar.DAY_OF_WEEK) + 5) % 7
301301
val dayOfWeek = resources.getStringArray(org.fossify.commons.R.array.week_days_short)[dayOfWeekIndex]
302-
val pattern = if (DateFormat.is24HourFormat(this)) {
303-
"HH:mm"
302+
val pattern = if (config.use24HourFormat) {
303+
FORMAT_24H
304304
} else {
305-
"h:mm a"
305+
FORMAT_12H
306306
}
307307

308308
val formattedTime = SimpleDateFormat(pattern, Locale.getDefault()).format(calendar.time)

app/src/main/kotlin/org/fossify/clock/fragments/ClockFragment.kt

+6-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import org.fossify.clock.databinding.FragmentClockBinding
1414
import org.fossify.clock.dialogs.AddTimeZonesDialog
1515
import org.fossify.clock.dialogs.EditTimeZoneDialog
1616
import org.fossify.clock.extensions.*
17+
import org.fossify.clock.helpers.FORMAT_12H_WITH_SECONDS
18+
import org.fossify.clock.helpers.FORMAT_24H_WITH_SECONDS
1719
import org.fossify.clock.helpers.getPassedSeconds
1820
import org.fossify.clock.models.MyTimeZone
1921
import org.fossify.commons.extensions.beVisibleIf
@@ -61,6 +63,9 @@ class ClockFragment : Fragment() {
6163
binding.apply {
6264
requireContext().updateTextColors(clockFragment)
6365
clockTime.setTextColor(requireContext().getProperTextColor())
66+
val clockFormat = if (requireActivity().config.use24HourFormat) FORMAT_24H_WITH_SECONDS else FORMAT_12H_WITH_SECONDS
67+
clockTime.format24Hour = clockFormat
68+
clockTime.format12Hour = clockFormat
6469
clockFab.setOnClickListener {
6570
fabClicked()
6671
}
@@ -74,7 +79,7 @@ class ClockFragment : Fragment() {
7479
val minutes = (passedSeconds / 60) % 60
7580
val seconds = passedSeconds % 60
7681

77-
if (!DateFormat.is24HourFormat(requireContext())) {
82+
if (!requireActivity().config.use24HourFormat) {
7883
binding.clockTime.textSize = resources.getDimension(R.dimen.clock_text_size_smaller) / resources.displayMetrics.density
7984
}
8085

app/src/main/kotlin/org/fossify/clock/helpers/Constants.kt

+6
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,12 @@ const val TOMORROW_BIT = -2
8282
const val STOPWATCH_SHORTCUT_ID = "stopwatch_shortcut_id"
8383
const val STOPWATCH_TOGGLE_ACTION = "org.fossify.clock.TOGGLE_STOPWATCH"
8484

85+
// time formatting
86+
const val FORMAT_12H = "h:mm a"
87+
const val FORMAT_24H = "HH:mm"
88+
const val FORMAT_12H_WITH_SECONDS = "h:mm:ss a"
89+
const val FORMAT_24H_WITH_SECONDS = "HH:mm:ss"
90+
8591
val DAY_BIT_MAP = mapOf(
8692
Calendar.SUNDAY to SUNDAY_BIT,
8793
Calendar.MONDAY to MONDAY_BIT,

app/src/main/kotlin/org/fossify/clock/helpers/MyDigitalTimeWidgetProvider.kt

+7-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import android.content.Context
88
import android.content.Intent
99
import android.graphics.*
1010
import android.os.Bundle
11+
import android.view.View
1112
import android.widget.RemoteViews
1213
import org.fossify.clock.R
1314
import org.fossify.clock.activities.SplashActivity
@@ -42,6 +43,10 @@ class MyDigitalTimeWidgetProvider : AppWidgetProvider() {
4243
views.apply {
4344
setText(R.id.widget_next_alarm, nextAlarm)
4445
setVisibleIf(R.id.widget_alarm_holder, nextAlarm.isNotEmpty())
46+
val clockToHide = if (context.config.use24HourFormat) R.id.widget_text_clock_12 else R.id.widget_text_clock_24
47+
val clockToShow = if (context.config.use24HourFormat) R.id.widget_text_clock_24 else R.id.widget_text_clock_12
48+
setViewVisibility(clockToHide, View.GONE)
49+
setViewVisibility(clockToShow, View.VISIBLE)
4550
}
4651
}
4752

@@ -51,7 +56,8 @@ class MyDigitalTimeWidgetProvider : AppWidgetProvider() {
5156

5257
views.apply {
5358
applyColorFilter(R.id.widget_background, config.widgetBgColor)
54-
setTextColor(R.id.widget_text_clock, widgetTextColor)
59+
setTextColor(R.id.widget_text_clock_24, widgetTextColor)
60+
setTextColor(R.id.widget_text_clock_12, widgetTextColor)
5561
setTextColor(R.id.widget_date, widgetTextColor)
5662
setTextColor(R.id.widget_next_alarm, widgetTextColor)
5763

app/src/main/res/layout/activity_settings.xml

+15
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,21 @@
133133

134134
</RelativeLayout>
135135

136+
<RelativeLayout
137+
android:id="@+id/settings_hour_format_holder"
138+
style="@style/SettingsHolderCheckboxStyle"
139+
android:layout_width="match_parent"
140+
android:layout_height="wrap_content">
141+
142+
<org.fossify.commons.views.MyAppCompatCheckbox
143+
android:id="@+id/settings_hour_format"
144+
style="@style/SettingsCheckboxStyle"
145+
android:layout_width="match_parent"
146+
android:layout_height="wrap_content"
147+
android:text="@string/use_24_hour_time_format" />
148+
149+
</RelativeLayout>
150+
136151
<RelativeLayout
137152
android:id="@+id/settings_default_tab_holder"
138153
style="@style/SettingsHolderTextViewStyle"

app/src/main/res/layout/fragment_clock.xml

-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
android:layout_width="match_parent"
1717
android:layout_height="wrap_content"
1818
android:layout_marginTop="@dimen/activity_margin"
19-
android:format12Hour="h:mm:ss a"
20-
android:format24Hour="k:mm:ss"
2119
android:gravity="center_horizontal"
2220
android:textSize="@dimen/clock_text_size"
2321
tools:text="00:00:00" />

app/src/main/res/layout/widget_config_digital.xml

-2
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,6 @@
3232
android:id="@+id/config_digital_time"
3333
android:layout_width="match_parent"
3434
android:layout_height="@dimen/widget_digital_time_height"
35-
android:format12Hour="h:mm"
36-
android:format24Hour="k:mm"
3735
android:gravity="center_horizontal"
3836
android:includeFontPadding="false"
3937
android:shadowColor="@android:color/black"

app/src/main/res/layout/widget_digital.xml

+23-3
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,16 @@
2626
tools:ignore="UnusedAttribute">
2727

2828
<TextClock
29-
android:id="@+id/widget_text_clock"
29+
android:id="@+id/widget_text_clock_24"
3030
android:layout_width="match_parent"
3131
android:layout_height="0dp"
3232
android:layout_weight="4"
3333
android:autoSizeMaxTextSize="300sp"
3434
android:autoSizeMinTextSize="2sp"
3535
android:autoSizeStepGranularity="1sp"
3636
android:autoSizeTextType="uniform"
37-
android:format12Hour="h:mm"
38-
android:format24Hour="k:mm"
37+
android:format12Hour="HH:mm"
38+
android:format24Hour="HH:mm"
3939
android:gravity="center"
4040
android:includeFontPadding="false"
4141
android:maxLines="1"
@@ -45,6 +45,26 @@
4545
android:textSize="@dimen/normal_text_size"
4646
tools:text="00:00" />
4747

48+
<TextClock
49+
android:id="@+id/widget_text_clock_12"
50+
android:layout_width="match_parent"
51+
android:layout_height="0dp"
52+
android:layout_weight="4"
53+
android:autoSizeMaxTextSize="300sp"
54+
android:autoSizeMinTextSize="2sp"
55+
android:autoSizeStepGranularity="1sp"
56+
android:autoSizeTextType="uniform"
57+
android:format12Hour="h:mm a"
58+
android:format24Hour="h:mm a"
59+
android:gravity="center"
60+
android:includeFontPadding="false"
61+
android:maxLines="1"
62+
android:shadowColor="@android:color/black"
63+
android:shadowDy="1"
64+
android:shadowRadius="1"
65+
android:textSize="@dimen/normal_text_size"
66+
tools:text="0:00 AM" />
67+
4868
<TextClock
4969
android:id="@+id/widget_date"
5070
android:layout_width="match_parent"

0 commit comments

Comments
 (0)