Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Better support for 24 and 12 hour time formats (#52) #62

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import org.fossify.clock.R
import org.fossify.clock.databinding.ActivitySettingsBinding
import org.fossify.clock.dialogs.ExportDataDialog
import org.fossify.clock.extensions.config
import org.fossify.clock.extensions.updateWidgets
import org.fossify.clock.extensions.dbHelper
import org.fossify.clock.extensions.timerDb
import org.fossify.clock.helpers.DBHelper
Expand Down Expand Up @@ -101,6 +102,7 @@ class SettingsActivity : SimpleActivity() {
setupCustomizeColors()
setupUseEnglish()
setupLanguage()
setupHourFormat()
setupDefaultTab()
setupPreventPhoneFromSleeping()
setupStartWeekOn()
Expand Down Expand Up @@ -178,6 +180,15 @@ class SettingsActivity : SimpleActivity() {
}
}

private fun setupHourFormat() = binding.apply {
settingsHourFormat.isChecked = config.use24HourFormat
settingsHourFormatHolder.setOnClickListener {
settingsHourFormat.toggle()
config.use24HourFormat = settingsHourFormat.isChecked
updateWidgets()
}
}

private fun getDefaultTabText() = getString(
when (config.defaultTab) {
TAB_CLOCK -> R.string.clock
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import android.os.Bundle
import android.widget.SeekBar
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_24H
import org.fossify.clock.helpers.MyDigitalTimeWidgetProvider
import org.fossify.clock.helpers.SIMPLE_PHONE
import org.fossify.commons.dialogs.ColorPickerDialog
Expand Down Expand Up @@ -84,6 +86,10 @@ class WidgetDigitalConfigureActivity : SimpleActivity() {
}

updateTextColor()

val clockFormat = if (config.use24HourFormat) FORMAT_24H else FORMAT_12H
binding.configDigitalTime.format24Hour = clockFormat
binding.configDigitalTime.format12Hour = clockFormat
}

private fun saveConfig() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class EditAlarmDialog(val activity: SimpleActivity, val alarm: Alarm, val onDism
binding.apply {
editAlarmTime.setOnClickListener {
if (activity.config.isUsingSystemTheme) {
val timeFormat = if (DateFormat.is24HourFormat(activity)) {
val timeFormat = if (activity.config.use24HourFormat) {
TimeFormat.CLOCK_24H
} else {
TimeFormat.CLOCK_12H
Expand All @@ -59,7 +59,7 @@ class EditAlarmDialog(val activity: SimpleActivity, val alarm: Alarm, val onDism
timeSetListener,
alarm.timeInMinutes / 60,
alarm.timeInMinutes % 60,
DateFormat.is24HourFormat(activity)
activity.config.use24HourFormat
).show()
}
}
Expand Down
8 changes: 4 additions & 4 deletions app/src/main/kotlin/org/fossify/clock/extensions/Context.kt
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ fun Context.updateAnalogueWidgets() {
}

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

val formattedTime = SimpleDateFormat(pattern, Locale.getDefault()).format(calendar.time)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ import org.fossify.clock.databinding.FragmentClockBinding
import org.fossify.clock.dialogs.AddTimeZonesDialog
import org.fossify.clock.dialogs.EditTimeZoneDialog
import org.fossify.clock.extensions.*
import org.fossify.clock.helpers.FORMAT_12H_WITH_SECONDS
import org.fossify.clock.helpers.FORMAT_24H_WITH_SECONDS
import org.fossify.clock.helpers.getPassedSeconds
import org.fossify.clock.models.MyTimeZone
import org.fossify.commons.extensions.beVisibleIf
Expand Down Expand Up @@ -61,6 +63,9 @@ class ClockFragment : Fragment() {
binding.apply {
requireContext().updateTextColors(clockFragment)
clockTime.setTextColor(requireContext().getProperTextColor())
val clockFormat = if (requireActivity().config.use24HourFormat) FORMAT_24H_WITH_SECONDS else FORMAT_12H_WITH_SECONDS
clockTime.format24Hour = clockFormat
clockTime.format12Hour = clockFormat
clockFab.setOnClickListener {
fabClicked()
}
Expand All @@ -74,7 +79,7 @@ class ClockFragment : Fragment() {
val minutes = (passedSeconds / 60) % 60
val seconds = passedSeconds % 60

if (!DateFormat.is24HourFormat(requireContext())) {
if (!requireActivity().config.use24HourFormat) {
binding.clockTime.textSize = resources.getDimension(R.dimen.clock_text_size_smaller) / resources.displayMetrics.density
}

Expand Down
6 changes: 6 additions & 0 deletions app/src/main/kotlin/org/fossify/clock/helpers/Constants.kt
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,12 @@ const val TOMORROW_BIT = -2
const val STOPWATCH_SHORTCUT_ID = "stopwatch_shortcut_id"
const val STOPWATCH_TOGGLE_ACTION = "org.fossify.clock.TOGGLE_STOPWATCH"

// time formatting
const val FORMAT_12H = "h:mm a"
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"

val DAY_BIT_MAP = mapOf(
Calendar.SUNDAY to SUNDAY_BIT,
Calendar.MONDAY to MONDAY_BIT,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import android.content.Context
import android.content.Intent
import android.graphics.*
import android.os.Bundle
import android.view.View
import android.widget.RemoteViews
import org.fossify.clock.R
import org.fossify.clock.activities.SplashActivity
Expand Down Expand Up @@ -42,6 +43,10 @@ class MyDigitalTimeWidgetProvider : AppWidgetProvider() {
views.apply {
setText(R.id.widget_next_alarm, nextAlarm)
setVisibleIf(R.id.widget_alarm_holder, nextAlarm.isNotEmpty())
val clockToHide = if (context.config.use24HourFormat) R.id.widget_text_clock_12 else R.id.widget_text_clock_24
val clockToShow = if (context.config.use24HourFormat) R.id.widget_text_clock_24 else R.id.widget_text_clock_12
setViewVisibility(clockToHide, View.GONE)
setViewVisibility(clockToShow, View.VISIBLE)
}
}

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

views.apply {
applyColorFilter(R.id.widget_background, config.widgetBgColor)
setTextColor(R.id.widget_text_clock, widgetTextColor)
setTextColor(R.id.widget_text_clock_24, widgetTextColor)
setTextColor(R.id.widget_text_clock_12, widgetTextColor)
setTextColor(R.id.widget_date, widgetTextColor)
setTextColor(R.id.widget_next_alarm, widgetTextColor)

Expand Down
15 changes: 15 additions & 0 deletions app/src/main/res/layout/activity_settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,21 @@

</RelativeLayout>

<RelativeLayout
android:id="@+id/settings_hour_format_holder"
style="@style/SettingsHolderCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<org.fossify.commons.views.MyAppCompatCheckbox
android:id="@+id/settings_hour_format"
style="@style/SettingsCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/use_24_hour_time_format" />

</RelativeLayout>

<RelativeLayout
android:id="@+id/settings_default_tab_holder"
style="@style/SettingsHolderTextViewStyle"
Expand Down
2 changes: 0 additions & 2 deletions app/src/main/res/layout/fragment_clock.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/activity_margin"
android:format12Hour="h:mm:ss a"
android:format24Hour="k:mm:ss"
android:gravity="center_horizontal"
android:textSize="@dimen/clock_text_size"
tools:text="00:00:00" />
Expand Down
2 changes: 0 additions & 2 deletions app/src/main/res/layout/widget_config_digital.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,6 @@
android:id="@+id/config_digital_time"
android:layout_width="match_parent"
android:layout_height="@dimen/widget_digital_time_height"
android:format12Hour="h:mm"
android:format24Hour="k:mm"
android:gravity="center_horizontal"
android:includeFontPadding="false"
android:shadowColor="@android:color/black"
Expand Down
26 changes: 23 additions & 3 deletions app/src/main/res/layout/widget_digital.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,16 @@
tools:ignore="UnusedAttribute">

<TextClock
android:id="@+id/widget_text_clock"
android:id="@+id/widget_text_clock_24"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="4"
android:autoSizeMaxTextSize="300sp"
android:autoSizeMinTextSize="2sp"
android:autoSizeStepGranularity="1sp"
android:autoSizeTextType="uniform"
android:format12Hour="h:mm"
android:format24Hour="k:mm"
android:format12Hour="HH:mm"
android:format24Hour="HH:mm"
android:gravity="center"
android:includeFontPadding="false"
android:maxLines="1"
Expand All @@ -45,6 +45,26 @@
android:textSize="@dimen/normal_text_size"
tools:text="00:00" />

<TextClock
android:id="@+id/widget_text_clock_12"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="4"
android:autoSizeMaxTextSize="300sp"
android:autoSizeMinTextSize="2sp"
android:autoSizeStepGranularity="1sp"
android:autoSizeTextType="uniform"
android:format12Hour="h:mm a"
android:format24Hour="h:mm a"
android:gravity="center"
android:includeFontPadding="false"
android:maxLines="1"
android:shadowColor="@android:color/black"
android:shadowDy="1"
android:shadowRadius="1"
android:textSize="@dimen/normal_text_size"
tools:text="0:00 AM" />

<TextClock
android:id="@+id/widget_date"
android:layout_width="match_parent"
Expand Down
Loading