From f9fde4eefd78fc48a8791e164564528af4cc91c9 Mon Sep 17 00:00:00 2001 From: theBoatman Date: Sat, 18 May 2024 18:14:09 +0200 Subject: [PATCH] Add an option to dismiss the alarm with a button instead of a slieder. --- .../alarmclock/AlarmClockProvider.java | 17 ++++++++++---- .../alarmclock/AlarmNotificationActivity.java | 21 ++++++++++++++++-- .../android/alarmclock/AlarmOptions.java | 22 +++++++++++++++++++ .../android/alarmclock/DbUtil.java | 9 ++++++-- .../drawable/baseline_call_to_action_24.xml | 10 +++++++++ .../src/main/res/layout/notification.xml | 19 ++++++++++++++++ .../klock/src/main/res/values-de/strings.xml | 2 ++ .../klock/src/main/res/values/strings.xml | 2 ++ 8 files changed, 94 insertions(+), 8 deletions(-) create mode 100644 android/alarmclock/klock/src/main/res/drawable/baseline_call_to_action_24.xml diff --git a/android/alarmclock/klock/src/main/java/com/angrydoughnuts/android/alarmclock/AlarmClockProvider.java b/android/alarmclock/klock/src/main/java/com/angrydoughnuts/android/alarmclock/AlarmClockProvider.java index 0b36799..062a13e 100644 --- a/android/alarmclock/klock/src/main/java/com/angrydoughnuts/android/alarmclock/AlarmClockProvider.java +++ b/android/alarmclock/klock/src/main/java/com/angrydoughnuts/android/alarmclock/AlarmClockProvider.java @@ -107,6 +107,8 @@ public Uri insert(Uri uri, ContentValues values) { values.put(SettingsEntry.VOLUME_ENDING, defaults.volume_ending); if (!values.containsKey(SettingsEntry.VOLUME_TIME)) values.put(SettingsEntry.VOLUME_TIME, defaults.volume_time); + if (!values.containsKey(SettingsEntry.DISMISS_BY_BUTTON)) + values.put(SettingsEntry.DISMISS_BY_BUTTON, defaults.dismiss_by_button); db.insertOrThrow(SettingsEntry.TABLE_NAME, null, values); getContext().getContentResolver().notifyChange(uri, null); @@ -250,11 +252,12 @@ public static class SettingsEntry implements BaseColumns { public static final String VOLUME_STARTING = "vol_start"; public static final String VOLUME_ENDING = "vol_end"; public static final String VOLUME_TIME = "vol_time"; + public static final String DISMISS_BY_BUTTON = "dismiss_button"; } private static class DbAlarmClockHelper extends SQLiteOpenHelper { private static final String DB_NAME = "alarmclock"; - private static final int DB_VERSION = 2; + private static final int DB_VERSION = 3; public DbAlarmClockHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); @@ -275,8 +278,8 @@ public void onCreate(SQLiteDatabase db) { AlarmEntry.DAY_OF_WEEK + " UNSIGNED INTEGER (0, 127)," + AlarmEntry.NEXT_SNOOZE + " UNSIGNED INTEGER DEFAULT 0)"); - // |(primary) | (string) | (string) | (1 to 60) | (boolean) | (0 to 100) | (0 to 100) | (0 to 60) | - // | id | tone_url | tone_name | snooze | vibrate | vol_start | vol_end | vol_time | + // |(primary) | (string) | (string) | (1 to 60) | (boolean) | (0 to 100) | (0 to 100) | (0 to 60) | (boolean) | + // | id | tone_url | tone_name | snooze | vibrate | vol_start | vol_end | vol_time | dismiss_button | // snooze is in minutes. db.execSQL( "CREATE TABLE " + SettingsEntry.TABLE_NAME + " (" + @@ -287,7 +290,8 @@ public void onCreate(SQLiteDatabase db) { SettingsEntry.VIBRATE + " UNSIGNED INTEGER (0, 1)," + SettingsEntry.VOLUME_STARTING + " UNSIGNED INTEGER (1, 100)," + SettingsEntry.VOLUME_ENDING + " UNSIGNED INTEGER (1, 100)," + - SettingsEntry.VOLUME_TIME + " UNSIGNED INTEGER (1, 60))"); + SettingsEntry.VOLUME_TIME + " UNSIGNED INTEGER (1, 60)," + + SettingsEntry.DISMISS_BY_BUTTON + " UNSIGNED INTEGER (0, 1))"); } @Override @@ -309,6 +313,11 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { SettingsEntry.ALARM_ID + " = " + DbUtil.Settings.DEFAULTS_ID + " WHERE " + SettingsEntry.ALARM_ID + " == -1"); } + if (oldVersion < 3) { + db.execSQL( + "ALTER TABLE " + SettingsEntry.TABLE_NAME + " ADD COLUMN " + + SettingsEntry.DISMISS_BY_BUTTON + " UNSIGNED INTEGER (0, 1) DEFAULT 0"); + } } } } diff --git a/android/alarmclock/klock/src/main/java/com/angrydoughnuts/android/alarmclock/AlarmNotificationActivity.java b/android/alarmclock/klock/src/main/java/com/angrydoughnuts/android/alarmclock/AlarmNotificationActivity.java index bb11606..853854c 100644 --- a/android/alarmclock/klock/src/main/java/com/angrydoughnuts/android/alarmclock/AlarmNotificationActivity.java +++ b/android/alarmclock/klock/src/main/java/com/angrydoughnuts/android/alarmclock/AlarmNotificationActivity.java @@ -22,13 +22,11 @@ import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; -import android.util.Log; import android.view.View; import android.view.WindowManager; import android.widget.TextView; import java.util.ArrayList; -import java.util.HashSet; public class AlarmNotificationActivity extends Activity { public static final String TIMEOUT = "timeout"; @@ -83,6 +81,25 @@ public void onClick(View view) { } }); + boolean dismiss_by_button = false; + for (long alarmid : AlarmNotificationService.getActiveAlarms()) { + dismiss_by_button = dismiss_by_button || DbUtil.Settings.get(this, alarmid).dismiss_by_button; + } + + if (dismiss_by_button) { + findViewById(R.id.dismiss_alarm_button).setVisibility(View.VISIBLE); + findViewById(R.id.dismiss_alarm).setVisibility(View.INVISIBLE); + } + + findViewById(R.id.dismiss_alarm_button).setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View view) { + AlarmNotificationService.dismissAllAlarms(getApplicationContext()); + finish(); + } + }); + ((Slider)findViewById(R.id.dismiss_alarm)).setListener( new Slider.Listener() { @Override diff --git a/android/alarmclock/klock/src/main/java/com/angrydoughnuts/android/alarmclock/AlarmOptions.java b/android/alarmclock/klock/src/main/java/com/angrydoughnuts/android/alarmclock/AlarmOptions.java index 07502b3..d769ce8 100644 --- a/android/alarmclock/klock/src/main/java/com/angrydoughnuts/android/alarmclock/AlarmOptions.java +++ b/android/alarmclock/klock/src/main/java/com/angrydoughnuts/android/alarmclock/AlarmOptions.java @@ -586,6 +586,28 @@ public void onStopTrackingTouch(SeekBar s) { setView(edit_volume_time, volume_time_slide, 1.0f); setView(this, volume_status, 1.0f); + + // EDIT DISMISS BUTTON + final TextView edit_dismiss_by_button_status = new TextView(c); + edit_dismiss_by_button_status.setText(s.dismiss_by_button ?c.getString(R.string.alarm_dismiss_by_button):c.getString(R.string.alarm_dismiss_by_slider)); + + final ViewGroup edit_dismiss_by_button = newItem(c); + addView(edit_dismiss_by_button); + setImage(edit_dismiss_by_button, R.drawable.baseline_call_to_action_24); + Switch dismiss_by_button_switch = new Switch(c); + setView(edit_dismiss_by_button, dismiss_by_button_switch, 0.0f); + setView(this, edit_dismiss_by_button_status, 1.0f); + dismiss_by_button_switch.setChecked(s.dismiss_by_button); + dismiss_by_button_switch.setOnCheckedChangeListener( + new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton b, boolean checked) { + ContentValues val = new ContentValues(); + val.put(AlarmClockProvider.SettingsEntry.DISMISS_BY_BUTTON, checked); + c.getContentResolver().update(settings, val, null, null); + edit_dismiss_by_button_status.setText(checked?c.getString(R.string.alarm_dismiss_by_button):c.getString(R.string.alarm_dismiss_by_slider)); + } + }); } private ViewGroup newItem(Context c) { diff --git a/android/alarmclock/klock/src/main/java/com/angrydoughnuts/android/alarmclock/DbUtil.java b/android/alarmclock/klock/src/main/java/com/angrydoughnuts/android/alarmclock/DbUtil.java index d6b2657..aeb4734 100644 --- a/android/alarmclock/klock/src/main/java/com/angrydoughnuts/android/alarmclock/DbUtil.java +++ b/android/alarmclock/klock/src/main/java/com/angrydoughnuts/android/alarmclock/DbUtil.java @@ -19,7 +19,6 @@ import android.content.Context; import android.database.Cursor; import android.net.Uri; -import android.provider.Settings; import java.util.Calendar; @@ -112,6 +111,7 @@ public static final class Settings { public final int volume_starting; public final int volume_ending; public final int volume_time; + public final boolean dismiss_by_button; private static final Uri TONE_URL_DEFAULT = android.provider.Settings.System.DEFAULT_ALARM_ALERT_URI; @@ -120,6 +120,7 @@ public static final class Settings { private static final int VOLUME_STARTING_DEFAULT = 0; private static final int VOLUME_ENDING_DEFAULT = 100; private static final int VOLUME_TIME_DEFAULT = 20; + private static final boolean DISMISS_BY_BUTTON_DEFAULT = false; public static Settings get(Context context, long id) { Settings s = null; @@ -155,7 +156,8 @@ private static Cursor query(Context context, long id) { AlarmClockProvider.SettingsEntry.VIBRATE, AlarmClockProvider.SettingsEntry.VOLUME_STARTING, AlarmClockProvider.SettingsEntry.VOLUME_ENDING, - AlarmClockProvider.SettingsEntry.VOLUME_TIME }, + AlarmClockProvider.SettingsEntry.VOLUME_TIME, + AlarmClockProvider.SettingsEntry.DISMISS_BY_BUTTON}, null, null, null); } @@ -174,6 +176,8 @@ private Settings(Cursor c) { AlarmClockProvider.SettingsEntry.VOLUME_ENDING)); volume_time = c.getInt(c.getColumnIndex( AlarmClockProvider.SettingsEntry.VOLUME_TIME)); + dismiss_by_button = c.getInt(c.getColumnIndex( + AlarmClockProvider.SettingsEntry.DISMISS_BY_BUTTON)) != 0; } private Settings(Context c) { @@ -184,6 +188,7 @@ private Settings(Context c) { volume_starting = VOLUME_STARTING_DEFAULT; volume_ending = VOLUME_ENDING_DEFAULT; volume_time = VOLUME_TIME_DEFAULT; + dismiss_by_button = DISMISS_BY_BUTTON_DEFAULT; } } } diff --git a/android/alarmclock/klock/src/main/res/drawable/baseline_call_to_action_24.xml b/android/alarmclock/klock/src/main/res/drawable/baseline_call_to_action_24.xml new file mode 100644 index 0000000..a4f102b --- /dev/null +++ b/android/alarmclock/klock/src/main/res/drawable/baseline_call_to_action_24.xml @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/android/alarmclock/klock/src/main/res/layout/notification.xml b/android/alarmclock/klock/src/main/res/layout/notification.xml index 4ce4444..b2f8c0c 100644 --- a/android/alarmclock/klock/src/main/res/layout/notification.xml +++ b/android/alarmclock/klock/src/main/res/layout/notification.xml @@ -64,6 +64,25 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" /> + + +