From 93d9c7bd59618be9455cffb75550d2058b62a050 Mon Sep 17 00:00:00 2001 From: BlackyHawky Date: Wed, 12 Jun 2024 12:42:00 +0200 Subject: [PATCH] Dismiss or snooze alarms by swiping or tapping - Fix #58 --- .../com/best/deskclock/alarms/AlarmActivity.java | 13 ++++++++++--- .../java/com/best/deskclock/data/DataModel.java | 8 ++++++++ .../java/com/best/deskclock/data/SettingsDAO.java | 8 ++++++++ .../java/com/best/deskclock/data/SettingsModel.java | 4 ++++ .../deskclock/settings/AlarmSettingsActivity.java | 8 ++++++++ app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/settings_alarm.xml | 8 ++++++++ 8 files changed, 49 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/best/deskclock/alarms/AlarmActivity.java b/app/src/main/java/com/best/deskclock/alarms/AlarmActivity.java index f53080621..cf9570315 100644 --- a/app/src/main/java/com/best/deskclock/alarms/AlarmActivity.java +++ b/app/src/main/java/com/best/deskclock/alarms/AlarmActivity.java @@ -100,6 +100,7 @@ public void onServiceDisconnected(ComponentName name) { private AlarmVolumeButtonBehavior mPowerBehavior; private int mCurrentHourColor; private int mTextColor; + private boolean isSwipeActionEnabled; private boolean mReceiverRegistered; /** * Whether the AlarmService is currently bound @@ -269,7 +270,12 @@ protected void onCreate(Bundle savedInstanceState) { mCurrentHourColor = getColor(R.color.md_theme_background); getWindow().setBackgroundDrawable(new ColorDrawable(mCurrentHourColor)); - mAlarmButton.setOnTouchListener(this); + isSwipeActionEnabled = DataModel.getDataModel().isSwipeActionEnabled(); + if (isSwipeActionEnabled) { + mAlarmButton.setOnTouchListener(this); + } else { + mAlarmButton.setOnTouchListener(null); + } mSnoozeButton.setOnClickListener(this); mDismissButton.setOnClickListener(this); @@ -381,8 +387,9 @@ public void onClick(View view) { } LOGGER.v("onClick: %s", view); - // If in accessibility mode, allow snooze/dismiss by double tapping on respective icons. - if (isAccessibilityEnabled()) { + // If in accessibility mode or if alarm swiping is disabled in settings, + // allow snooze/dismiss by tapping on respective icons. + if (isAccessibilityEnabled() || !isSwipeActionEnabled) { if (view == mSnoozeButton) { snooze(); } else if (view == mDismissButton) { diff --git a/app/src/main/java/com/best/deskclock/data/DataModel.java b/app/src/main/java/com/best/deskclock/data/DataModel.java index bc86fd852..8a364f230 100644 --- a/app/src/main/java/com/best/deskclock/data/DataModel.java +++ b/app/src/main/java/com/best/deskclock/data/DataModel.java @@ -1035,6 +1035,14 @@ public boolean getShowHomeClock() { return mSettingsModel.getShowHomeClock(); } + /** + * @return {@code true} if swipe action is enabled to dismiss or snooze alarms. {@code false} otherwise. + */ + public boolean isSwipeActionEnabled() { + enforceMainLooper(); + return mSettingsModel.isSwipeActionEnabled(); + } + /** * @return the display order of the weekdays, which can start with {@link Calendar#SATURDAY}, * {@link Calendar#SUNDAY} or {@link Calendar#MONDAY} diff --git a/app/src/main/java/com/best/deskclock/data/SettingsDAO.java b/app/src/main/java/com/best/deskclock/data/SettingsDAO.java index 41ef63abe..2b5335490 100644 --- a/app/src/main/java/com/best/deskclock/data/SettingsDAO.java +++ b/app/src/main/java/com/best/deskclock/data/SettingsDAO.java @@ -16,6 +16,7 @@ import static com.best.deskclock.data.Weekdays.Order.SAT_TO_FRI; import static com.best.deskclock.data.Weekdays.Order.SUN_TO_SAT; import static com.best.deskclock.settings.AlarmSettingsActivity.KEY_DEFAULT_ALARM_RINGTONE; +import static com.best.deskclock.settings.AlarmSettingsActivity.KEY_SWIPE_ACTION; import static com.best.deskclock.settings.InterfaceCustomizationActivity.DEFAULT_ACCENT_COLOR; import static com.best.deskclock.settings.InterfaceCustomizationActivity.KEY_DEFAULT_DARK_MODE; import static com.best.deskclock.settings.InterfaceCustomizationActivity.SYSTEM_THEME; @@ -376,6 +377,13 @@ static long getTimerCrescendoDuration(SharedPreferences prefs) { return Integer.parseInt(crescendoSeconds) * DateUtils.SECOND_IN_MILLIS; } + /** + * @return {@code true} if swipe action is enabled to dismiss or snooze alarms. {@code false} otherwise. + */ + static boolean isSwipeActionEnabled(SharedPreferences pref) { + return pref.getBoolean(KEY_SWIPE_ACTION, true); + } + /** * @return the display order of the weekdays, which can start with {@link Calendar#SATURDAY}, * {@link Calendar#SUNDAY} or {@link Calendar#MONDAY} diff --git a/app/src/main/java/com/best/deskclock/data/SettingsModel.java b/app/src/main/java/com/best/deskclock/data/SettingsModel.java index 1a4190bee..09d00b1a0 100644 --- a/app/src/main/java/com/best/deskclock/data/SettingsModel.java +++ b/app/src/main/java/com/best/deskclock/data/SettingsModel.java @@ -240,6 +240,10 @@ long getTimerCrescendoDuration() { return SettingsDAO.getTimerCrescendoDuration(mPrefs); } + boolean isSwipeActionEnabled() { + return SettingsDAO.isSwipeActionEnabled(mPrefs); + } + Weekdays.Order getWeekdayOrder() { return SettingsDAO.getWeekdayOrder(mPrefs); } diff --git a/app/src/main/java/com/best/deskclock/settings/AlarmSettingsActivity.java b/app/src/main/java/com/best/deskclock/settings/AlarmSettingsActivity.java index e42be7019..a00fe4608 100644 --- a/app/src/main/java/com/best/deskclock/settings/AlarmSettingsActivity.java +++ b/app/src/main/java/com/best/deskclock/settings/AlarmSettingsActivity.java @@ -12,6 +12,7 @@ import androidx.preference.ListPreference; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; +import androidx.preference.SwitchPreferenceCompat; import com.best.deskclock.R; import com.best.deskclock.Utils; @@ -30,6 +31,7 @@ public class AlarmSettingsActivity extends CollapsingToolbarBaseActivity { public static final String KEY_AUTO_SILENCE = "auto_silence"; public static final String KEY_ALARM_SNOOZE = "snooze_duration"; public static final String KEY_ALARM_CRESCENDO = "alarm_crescendo_duration"; + public static final String KEY_SWIPE_ACTION = "key_swipe_action"; public static final String KEY_VOLUME_BUTTONS = "volume_button_setting"; public static final String DEFAULT_VOLUME_BEHAVIOR = "0"; public static final String VOLUME_BEHAVIOR_SNOOZE = "1"; @@ -85,6 +87,8 @@ public boolean onPreferenceChange(Preference pref, Object newValue) { updateAutoSnoozeSummary((ListPreference) pref, delay); } + case KEY_SWIPE_ACTION -> Utils.setVibrationTime(requireContext(), 50); + case KEY_ALARM_SNOOZE, KEY_ALARM_CRESCENDO, KEY_VOLUME_BUTTONS, KEY_POWER_BUTTONS, KEY_FLIP_ACTION, KEY_SHAKE_ACTION, KEY_WEEK_START -> { final ListPreference preference = (ListPreference) pref; @@ -125,6 +129,10 @@ private void refresh() { refreshListPreference(Objects.requireNonNull(findPreference(KEY_ALARM_CRESCENDO))); + final SwitchPreferenceCompat swipeActionPref = findPreference(KEY_SWIPE_ACTION); + Objects.requireNonNull(swipeActionPref).setChecked(DataModel.getDataModel().isSwipeActionEnabled()); + swipeActionPref.setOnPreferenceChangeListener(this); + final ListPreference volumeButtonsPref = findPreference(KEY_VOLUME_BUTTONS); Objects.requireNonNull(volumeButtonsPref).setSummary(volumeButtonsPref.getEntry()); volumeButtonsPref.setOnPreferenceChangeListener(this); diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 636f9601a..d342e9ea9 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -209,6 +209,7 @@ "La sonnerie d\'alarme par défaut est silencieuse." "Modifier" "L\'appareil est défini sur \"Aucune interruption\"." + Glisser pour répéter ou arrêter les alarmes "Boutons du volume" "Répéter" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ffd518cf4..72c7e7278 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -444,6 +444,8 @@ Change Device is set to total silence + + Swipe to dismiss or snooze alarms Volume buttons diff --git a/app/src/main/res/xml/settings_alarm.xml b/app/src/main/res/xml/settings_alarm.xml index 7d3a043da..bd92d1053 100644 --- a/app/src/main/res/xml/settings_alarm.xml +++ b/app/src/main/res/xml/settings_alarm.xml @@ -67,6 +67,14 @@ app:allowDividerAbove="false" app:iconSpaceReserved="false"> + +