Skip to content

Commit

Permalink
Implement the midnight delay option
Browse files Browse the repository at this point in the history
Closes iSoron#694.
  • Loading branch information
hiqua committed Jan 25, 2021
1 parent 7d9dcee commit a263183
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import android.content.Context
import org.isoron.uhabits.core.database.UnsupportedDatabaseVersionException
import org.isoron.uhabits.core.reminders.ReminderScheduler
import org.isoron.uhabits.core.ui.NotificationTray
import org.isoron.uhabits.core.utils.DateUtils
import org.isoron.uhabits.core.utils.DateUtils.Companion.setStartDayOffset
import org.isoron.uhabits.inject.AppContextModule
import org.isoron.uhabits.inject.DaggerHabitsApplicationComponent
import org.isoron.uhabits.inject.HabitsApplicationComponent
Expand Down Expand Up @@ -67,14 +67,13 @@ class HabitsApplication : Application() {
.habitsModule(HabitsModule(db))
.build()

DateUtils.setStartDayOffset(3, 0)

val habitList = component.habitList
for (h in habitList) h.recompute()

widgetUpdater = component.widgetUpdater
widgetUpdater.startListening()
widgetUpdater.scheduleStartDayWidgetUpdate()
widgetUpdater = component.widgetUpdater.apply {
startListening()
scheduleStartDayWidgetUpdate()
}

reminderScheduler = component.reminderScheduler
reminderScheduler.startListening()
Expand All @@ -85,6 +84,12 @@ class HabitsApplication : Application() {
val prefs = component.preferences
prefs.lastAppVersion = BuildConfig.VERSION_CODE

if (prefs.isMidnightDelayEnabled) {
setStartDayOffset(3, 0)
} else {
setStartDayOffset(0, 0)
}

val taskRunner = component.taskRunner
taskRunner.execute {
reminderScheduler.scheduleAll()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import android.view.View.MeasureSpec.EXACTLY
import android.widget.LinearLayout
import org.isoron.uhabits.R
import org.isoron.uhabits.core.preferences.Preferences
import org.isoron.uhabits.core.utils.DateUtils.Companion.setStartDayOffset
import org.isoron.uhabits.utils.dim
import org.isoron.uhabits.utils.toMeasureSpec

Expand Down Expand Up @@ -54,6 +55,12 @@ abstract class ButtonPanelView<T : View>(

@Synchronized
protected fun inflateButtons() {
if (preferences.isMidnightDelayEnabled) {
setStartDayOffset(3, 0)
} else {
setStartDayOffset(0, 0)
}

val reverse = preferences.isCheckmarkSequenceReversed

buttons.clear()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,13 +79,15 @@ class SharedPreferencesStorage

override fun onSharedPreferenceChanged(
sharedPreferences: SharedPreferences,
key: String
key: String?
) {
val preferences = this.preferences ?: return
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
when (key) {
"pref_checkmark_reverse_order" ->
preferences.isCheckmarkSequenceReversed = getBoolean(key, false)
"pref_midnight_delay" ->
preferences.isMidnightDelayEnabled = getBoolean(key, false)
"pref_sticky_notifications" ->
preferences.setNotificationsSticky(getBoolean(key, false))
"pref_led_notifications" ->
Expand Down
4 changes: 3 additions & 1 deletion uhabits-android/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -240,4 +240,6 @@
<string name="pref_unknown_description">Differentiate days without data from actual lapses. To enter a lapse, toggle twice.</string>
<string name="you_are_now_a_developer">You are now a developer</string>
<string name="activity_not_found">No app was found to support this action</string>
</resources>
<string name="pref_midnight_delay_title">Extend day a few hours past midnight</string>
<string name="pref_midnight_delay_description">Wait until 3:00 AM to show a new day. Useful if you typically go to sleep after midnight.</string>
</resources>
9 changes: 8 additions & 1 deletion uhabits-android/src/main/res/xml/preferences.xml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,13 @@
android:title="@string/pref_toggle_title"
app:iconSpaceReserved="false" />

<CheckBoxPreference
android:defaultValue="false"
android:key="pref_midnight_delay"
android:summary="@string/pref_midnight_delay_description"
android:title="@string/pref_midnight_delay_title"
app:iconSpaceReserved="false" />

<CheckBoxPreference
android:defaultValue="false"
android:key="pref_skip_enabled"
Expand Down Expand Up @@ -245,4 +252,4 @@

</PreferenceCategory>

</PreferenceScreen>
</PreferenceScreen>
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,13 @@ open class Preferences(private val storage: Storage) {
for (l in listeners) l.onCheckmarkSequenceChanged()
}

open var isMidnightDelayEnabled: Boolean
get() = storage.getBoolean("pref_midnight_delay", false)
set(enabled) {
storage.putBoolean("pref_midnight_delay", enabled)
for (l in listeners) l.onCheckmarkSequenceChanged()
}

fun updateLastHint(number: Int, timestamp: Timestamp) {
storage.putInt("last_hint_number", number)
storage.putLong("last_hint_timestamp", timestamp.unixTime)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,4 +167,12 @@ class PreferencesTest : BaseUnitTest() {
assertTrue(prefs.showArchived)
assertFalse(prefs.showCompleted)
}

@Test
@Throws(Exception::class)
fun testMidnightDelay() {
assertFalse(prefs.isMidnightDelayEnabled)
prefs.isMidnightDelayEnabled = true
assertTrue(prefs.isMidnightDelayEnabled)
}
}

0 comments on commit a263183

Please sign in to comment.