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" />
+
+
+
+
Ausgewählt:
Wecker-Zeitlimit
ACHTUNG: Diese Weckzeit hat ihr Zeitlimit erreicht.
+ Ausschalten mit einem Button.
+ Ausschalten mit einem Schieberegler.
diff --git a/android/alarmclock/klock/src/main/res/values/strings.xml b/android/alarmclock/klock/src/main/res/values/strings.xml
index 37ea623..6a0b86e 100644
--- a/android/alarmclock/klock/src/main/res/values/strings.xml
+++ b/android/alarmclock/klock/src/main/res/values/strings.xml
@@ -60,4 +60,6 @@
WARNING: This alarm has timed out waiting for an acknowledgment.
Pending alarms
Ringing alarms
+ Dismiss alarm by button.
+ Dismiss alarm by slider.