diff options
Diffstat (limited to 'src')
5 files changed, 133 insertions, 19 deletions
diff --git a/src/com/android/deskclock/provider/Alarm.java b/src/com/android/deskclock/provider/Alarm.java index 0d5a726f0..c7f7e7e67 100644 --- a/src/com/android/deskclock/provider/Alarm.java +++ b/src/com/android/deskclock/provider/Alarm.java @@ -26,6 +26,7 @@ import android.media.RingtoneManager; import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; +import android.os.ParcelUuid; import androidx.loader.content.CursorLoader; import com.android.deskclock.R; @@ -35,6 +36,7 @@ import com.android.deskclock.data.Weekdays; import java.util.Calendar; import java.util.LinkedList; import java.util.List; +import java.util.UUID; public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { /** @@ -59,7 +61,8 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { VIBRATE, LABEL, RINGTONE, - DELETE_AFTER_USE + DELETE_AFTER_USE, + INCREASING_VOLUME, }; private static final String[] QUERY_ALARMS_WITH_INSTANCES_COLUMNS = { @@ -72,6 +75,7 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { ClockDatabaseHelper.ALARMS_TABLE_NAME + "." + LABEL, ClockDatabaseHelper.ALARMS_TABLE_NAME + "." + RINGTONE, ClockDatabaseHelper.ALARMS_TABLE_NAME + "." + DELETE_AFTER_USE, + ClockDatabaseHelper.ALARMS_TABLE_NAME + "." + INCREASING_VOLUME, ClockDatabaseHelper.INSTANCES_TABLE_NAME + "." + ClockContract.InstancesColumns.ALARM_STATE, ClockDatabaseHelper.INSTANCES_TABLE_NAME + "." + ClockContract.InstancesColumns._ID, @@ -97,6 +101,8 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { private static final int LABEL_INDEX = 6; private static final int RINGTONE_INDEX = 7; private static final int DELETE_AFTER_USE_INDEX = 8; + private static final int INCREASING_VOLUME_INDEX = 9; + private static final int INSTANCE_STATE_INDEX = 9; public static final int INSTANCE_ID_INDEX = 10; public static final int INSTANCE_YEAR_INDEX = 11; @@ -107,7 +113,7 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { public static final int INSTANCE_LABEL_INDEX = 16; public static final int INSTANCE_VIBRATE_INDEX = 17; - private static final int COLUMN_COUNT = DELETE_AFTER_USE_INDEX + 1; + private static final int COLUMN_COUNT = INCREASING_VOLUME_INDEX + 1; private static final int ALARM_JOIN_INSTANCE_COLUMN_COUNT = INSTANCE_VIBRATE_INDEX + 1; public static ContentValues createContentValues(Alarm alarm) { @@ -123,6 +129,7 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { values.put(VIBRATE, alarm.vibrate ? 1 : 0); values.put(LABEL, alarm.label); values.put(DELETE_AFTER_USE, alarm.deleteAfterUse); + values.put(INCREASING_VOLUME, alarm.increasingVolume ? 1 : 0); if (alarm.alert == null) { // We want to put null, so default alarm changes values.putNull(RINGTONE); @@ -284,6 +291,7 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { public String label; public Uri alert; public boolean deleteAfterUse; + public boolean increasingVolume; public int instanceState; public int instanceId; @@ -301,6 +309,7 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { this.label = ""; this.alert = DataModel.getDataModel().getDefaultAlarmRingtoneUri(); this.deleteAfterUse = false; + this.increasingVolume = false; } public Alarm(Cursor c) { @@ -312,6 +321,7 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { vibrate = c.getInt(VIBRATE_INDEX) == 1; label = c.getString(LABEL_INDEX); deleteAfterUse = c.getInt(DELETE_AFTER_USE_INDEX) == 1; + increasingVolume = c.getInt(INCREASING_VOLUME_INDEX) == 1; if (c.getColumnCount() == ALARM_JOIN_INSTANCE_COLUMN_COUNT) { instanceState = c.getInt(INSTANCE_STATE_INDEX); @@ -337,6 +347,7 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { label = p.readString(); alert = p.readParcelable(null); deleteAfterUse = p.readInt() == 1; + increasingVolume = p.readInt() == 1; } /** @@ -371,6 +382,7 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { p.writeString(label); p.writeParcelable(alert, flags); p.writeInt(deleteAfterUse ? 1 : 0); + p.writeInt(increasingVolume ? 1 : 0); } public int describeContents() { @@ -383,6 +395,7 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { result.mVibrate = vibrate; result.mLabel = label; result.mRingtone = alert; + result.mIncreasingVolume = increasingVolume; return result; } @@ -463,6 +476,7 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { ", vibrate=" + vibrate + ", label='" + label + '\'' + ", deleteAfterUse=" + deleteAfterUse + + ", increasingVolume=" + increasingVolume + '}'; } } diff --git a/src/com/android/deskclock/provider/AlarmInstance.java b/src/com/android/deskclock/provider/AlarmInstance.java index 9fb7a7b07..a7502b740 100644 --- a/src/com/android/deskclock/provider/AlarmInstance.java +++ b/src/com/android/deskclock/provider/AlarmInstance.java @@ -33,6 +33,7 @@ import com.android.deskclock.data.DataModel; import java.util.Calendar; import java.util.LinkedList; import java.util.List; +import java.util.UUID; public final class AlarmInstance implements ClockContract.InstancesColumns { /** @@ -66,7 +67,8 @@ public final class AlarmInstance implements ClockContract.InstancesColumns { VIBRATE, RINGTONE, ALARM_ID, - ALARM_STATE + ALARM_STATE, + INCREASING_VOLUME }; /** @@ -84,8 +86,9 @@ public final class AlarmInstance implements ClockContract.InstancesColumns { private static final int RINGTONE_INDEX = 8; private static final int ALARM_ID_INDEX = 9; private static final int ALARM_STATE_INDEX = 10; + private static final int INCREASING_VOLUME_INDEX = 11; - private static final int COLUMN_COUNT = ALARM_STATE_INDEX + 1; + private static final int COLUMN_COUNT = INCREASING_VOLUME_INDEX + 1; public static ContentValues createContentValues(AlarmInstance instance) { ContentValues values = new ContentValues(COLUMN_COUNT); @@ -109,6 +112,8 @@ public final class AlarmInstance implements ClockContract.InstancesColumns { } values.put(ALARM_ID, instance.mAlarmId); values.put(ALARM_STATE, instance.mAlarmState); + values.put(INCREASING_VOLUME, instance.mIncreasingVolume ? 1 : 0); + return values; } @@ -295,6 +300,7 @@ public final class AlarmInstance implements ClockContract.InstancesColumns { public Uri mRingtone; public Long mAlarmId; public int mAlarmState; + public boolean mIncreasingVolume; public AlarmInstance(Calendar calendar, Long alarmId) { this(calendar); @@ -308,6 +314,7 @@ public final class AlarmInstance implements ClockContract.InstancesColumns { mVibrate = false; mRingtone = null; mAlarmState = SILENT_STATE; + mIncreasingVolume = false; } public AlarmInstance(AlarmInstance instance) { @@ -322,6 +329,7 @@ public final class AlarmInstance implements ClockContract.InstancesColumns { this.mRingtone = instance.mRingtone; this.mAlarmId = instance.mAlarmId; this.mAlarmState = instance.mAlarmState; + this.mIncreasingVolume = instance.mIncreasingVolume; } public AlarmInstance(Cursor c, boolean joinedTable) { @@ -356,6 +364,7 @@ public final class AlarmInstance implements ClockContract.InstancesColumns { mAlarmId = c.getLong(ALARM_ID_INDEX); } mAlarmState = c.getInt(ALARM_STATE_INDEX); + mIncreasingVolume = c.getInt(INCREASING_VOLUME_INDEX) == 1; } /** @@ -471,6 +480,7 @@ public final class AlarmInstance implements ClockContract.InstancesColumns { ", mRingtone=" + mRingtone + ", mAlarmId=" + mAlarmId + ", mAlarmState=" + mAlarmState + + ", mIncreasingVolume=" + mIncreasingVolume + '}'; } } diff --git a/src/com/android/deskclock/provider/ClockContract.java b/src/com/android/deskclock/provider/ClockContract.java index 5335ccc28..487ed6f4e 100644 --- a/src/com/android/deskclock/provider/ClockContract.java +++ b/src/com/android/deskclock/provider/ClockContract.java @@ -84,6 +84,12 @@ public final class ClockContract { * <p>Type: STRING</p> */ String RINGTONE = "ringtone"; + + /** + * True if alarm should start off quiet and slowly increase volume + * <P>Type: BOOLEAN</P> + */ + public static final String INCREASING_VOLUME = "incvol"; } /** diff --git a/src/com/android/deskclock/provider/ClockDatabaseHelper.java b/src/com/android/deskclock/provider/ClockDatabaseHelper.java index b6fc90017..11bd43cf1 100644 --- a/src/com/android/deskclock/provider/ClockDatabaseHelper.java +++ b/src/com/android/deskclock/provider/ClockDatabaseHelper.java @@ -16,6 +16,7 @@ package com.android.deskclock.provider; +import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; @@ -29,6 +30,7 @@ import com.android.deskclock.LogUtils; import com.android.deskclock.data.Weekdays; import java.util.Calendar; +import java.util.UUID; /** * Helper class for opening the database from multiple providers. Also provides @@ -57,11 +59,26 @@ class ClockDatabaseHelper extends SQLiteOpenHelper { */ private static final int VERSION_8 = 8; + /** + * Added increasing alarm volume mode + */ + private static final int VERSION_9 = 10; + + /** + * Added change profile + */ + private static final int VERSION_10 = 11; + + /** + * Removed change profile + */ + private static final int VERSION_11 = 12; + // This creates a default alarm at 8:30 for every Mon,Tue,Wed,Thu,Fri - private static final String DEFAULT_ALARM_1 = "(8, 30, 31, 0, 1, '', NULL, 0);"; + private static final String DEFAULT_ALARM_1 = "(8, 30, 31, 0, 1, '', NULL, 0, 0);"; // This creates a default alarm at 9:30 for every Sat,Sun - private static final String DEFAULT_ALARM_2 = "(9, 00, 96, 0, 1, '', NULL, 0);"; + private static final String DEFAULT_ALARM_2 = "(9, 00, 96, 0, 1, '', NULL, 0, 0);"; // Database and table names static final String DATABASE_NAME = "alarms.db"; @@ -70,8 +87,8 @@ class ClockDatabaseHelper extends SQLiteOpenHelper { static final String INSTANCES_TABLE_NAME = "alarm_instances"; private static final String SELECTED_CITIES_TABLE_NAME = "selected_cities"; - private static void createAlarmsTable(SQLiteDatabase db) { - db.execSQL("CREATE TABLE " + ALARMS_TABLE_NAME + " (" + + private static void createAlarmsTable(SQLiteDatabase db, String alarmsTableName) { + db.execSQL("CREATE TABLE " + alarmsTableName + " (" + ClockContract.AlarmsColumns._ID + " INTEGER PRIMARY KEY," + ClockContract.AlarmsColumns.HOUR + " INTEGER NOT NULL, " + ClockContract.AlarmsColumns.MINUTES + " INTEGER NOT NULL, " + @@ -80,12 +97,13 @@ class ClockDatabaseHelper extends SQLiteOpenHelper { ClockContract.AlarmsColumns.VIBRATE + " INTEGER NOT NULL, " + ClockContract.AlarmsColumns.LABEL + " TEXT NOT NULL, " + ClockContract.AlarmsColumns.RINGTONE + " TEXT, " + - ClockContract.AlarmsColumns.DELETE_AFTER_USE + " INTEGER NOT NULL DEFAULT 0);"); + ClockContract.AlarmsColumns.DELETE_AFTER_USE + " INTEGER NOT NULL DEFAULT 0, " + + ClockContract.AlarmsColumns.INCREASING_VOLUME + " INTEGER NOT NULL DEFAULT 0);"); LogUtils.i("Alarms Table created"); } - private static void createInstanceTable(SQLiteDatabase db) { - db.execSQL("CREATE TABLE " + INSTANCES_TABLE_NAME + " (" + + private static void createInstanceTable(SQLiteDatabase db, String instanceTableName) { + db.execSQL("CREATE TABLE " + instanceTableName + " (" + ClockContract.InstancesColumns._ID + " INTEGER PRIMARY KEY," + ClockContract.InstancesColumns.YEAR + " INTEGER NOT NULL, " + ClockContract.InstancesColumns.MONTH + " INTEGER NOT NULL, " + @@ -98,19 +116,19 @@ class ClockDatabaseHelper extends SQLiteOpenHelper { ClockContract.InstancesColumns.ALARM_STATE + " INTEGER NOT NULL, " + ClockContract.InstancesColumns.ALARM_ID + " INTEGER REFERENCES " + ALARMS_TABLE_NAME + "(" + ClockContract.AlarmsColumns._ID + ") " + - "ON UPDATE CASCADE ON DELETE CASCADE" + - ");"); + "ON UPDATE CASCADE ON DELETE CASCADE, " + + ClockContract.InstancesColumns.INCREASING_VOLUME + " INTEGER NOT NULL DEFAULT 0);"); LogUtils.i("Instance table created"); } public ClockDatabaseHelper(Context context) { - super(context, DATABASE_NAME, null, VERSION_8); + super(context, DATABASE_NAME, null, VERSION_11); } @Override public void onCreate(SQLiteDatabase db) { - createAlarmsTable(db); - createInstanceTable(db); + createAlarmsTable(db, ALARMS_TABLE_NAME); + createInstanceTable(db, INSTANCES_TABLE_NAME); // insert default alarms LogUtils.i("Inserting default alarms"); @@ -123,7 +141,8 @@ class ClockDatabaseHelper extends SQLiteOpenHelper { ClockContract.AlarmsColumns.VIBRATE + cs + ClockContract.AlarmsColumns.LABEL + cs + ClockContract.AlarmsColumns.RINGTONE + cs + - ClockContract.AlarmsColumns.DELETE_AFTER_USE + ") VALUES "; + ClockContract.AlarmsColumns.DELETE_AFTER_USE + cs + + ClockContract.AlarmsColumns.INCREASING_VOLUME + ") VALUES "; db.execSQL(insertMe + DEFAULT_ALARM_1); db.execSQL(insertMe + DEFAULT_ALARM_2); } @@ -142,8 +161,8 @@ class ClockDatabaseHelper extends SQLiteOpenHelper { db.execSQL("DROP TABLE IF EXISTS " + INSTANCES_TABLE_NAME + ";"); // Create new alarms table and copy over the data - createAlarmsTable(db); - createInstanceTable(db); + createAlarmsTable(db, ALARMS_TABLE_NAME); + createInstanceTable(db, INSTANCES_TABLE_NAME); LogUtils.i("Copying old alarms to new table"); final String[] OLD_TABLE_COLUMNS = { @@ -155,6 +174,7 @@ class ClockDatabaseHelper extends SQLiteOpenHelper { "vibrate", "message", "alert", + "incvol" }; try (Cursor cursor = db.query(OLD_ALARMS_TABLE_NAME, OLD_TABLE_COLUMNS, null, null, null, null, null)) { @@ -176,6 +196,7 @@ class ClockDatabaseHelper extends SQLiteOpenHelper { alarm.alert = TextUtils.isEmpty(alertString) ? null : Uri.parse(alertString); } + alarm.increasingVolume = cursor.getInt(8) == 1; // Save new version of alarm and create alarm instance for it db.insert(ALARMS_TABLE_NAME, null, Alarm.createContentValues(alarm)); @@ -189,6 +210,67 @@ class ClockDatabaseHelper extends SQLiteOpenHelper { LogUtils.i("Dropping old alarm table"); db.execSQL("DROP TABLE IF EXISTS " + OLD_ALARMS_TABLE_NAME + ";"); + return; + } + + if (oldVersion < VERSION_9) { + db.execSQL("ALTER TABLE " + ALARMS_TABLE_NAME + + " ADD COLUMN " + ClockContract.AlarmsColumns.INCREASING_VOLUME + + " INTEGER NOT NULL DEFAULT 0;"); + db.execSQL("ALTER TABLE " + INSTANCES_TABLE_NAME + + " ADD COLUMN " + ClockContract.InstancesColumns.INCREASING_VOLUME + + " INTEGER NOT NULL DEFAULT 0;"); + } + + if (oldVersion < VERSION_10) { + db.execSQL("ALTER TABLE " + ALARMS_TABLE_NAME + + " ADD COLUMN profile" + + " TEXT NOT NULL DEFAULT '';"); + db.execSQL("ALTER TABLE " + INSTANCES_TABLE_NAME + + " ADD COLUMN profile" + + " TEXT NOT NULL DEFAULT '';"); + } + + if (oldVersion < VERSION_11) { + LogUtils.i("Copying alarms to temporary table"); + final String TEMP_ALARMS_TABLE_NAME = ALARMS_TABLE_NAME + "_temp"; + final String TEMP_INSTANCES_TABLE_NAME = INSTANCES_TABLE_NAME + "_temp"; + createAlarmsTable(db, TEMP_ALARMS_TABLE_NAME); + createInstanceTable(db, TEMP_INSTANCES_TABLE_NAME); + final String[] OLD_TABLE_COLUMNS = { + ClockContract.AlarmsColumns._ID, + ClockContract.AlarmsColumns.HOUR, + ClockContract.AlarmsColumns.MINUTES, + ClockContract.AlarmsColumns.DAYS_OF_WEEK, + ClockContract.AlarmsColumns.ENABLED, + ClockContract.AlarmsColumns.VIBRATE, + ClockContract.AlarmsColumns.LABEL, + ClockContract.AlarmsColumns.RINGTONE, + ClockContract.AlarmsColumns.DELETE_AFTER_USE, + ClockContract.AlarmsColumns.INCREASING_VOLUME + }; + + try (Cursor cursor = db.query(ALARMS_TABLE_NAME, OLD_TABLE_COLUMNS, + null, null, null, null, null)) { + final Calendar currentTime = Calendar.getInstance(); + while (cursor != null && cursor.moveToNext()) { + final Alarm alarm = new Alarm(cursor); + // Save new version of alarm and create alarm instance for it + db.insert(TEMP_ALARMS_TABLE_NAME, null, + Alarm.createContentValues(alarm)); + if (alarm.enabled) { + AlarmInstance newInstance = alarm.createInstanceAfter(currentTime); + db.insert(TEMP_INSTANCES_TABLE_NAME, null, + AlarmInstance.createContentValues(newInstance)); + } + } + } + db.execSQL("DROP TABLE IF EXISTS " + ALARMS_TABLE_NAME + ";"); + db.execSQL("DROP TABLE IF EXISTS " + INSTANCES_TABLE_NAME + ";"); + db.execSQL("ALTER TABLE " + TEMP_ALARMS_TABLE_NAME + + " RENAME TO " + ALARMS_TABLE_NAME + ";"); + db.execSQL("ALTER TABLE " + TEMP_INSTANCES_TABLE_NAME + + " RENAME TO " + INSTANCES_TABLE_NAME + ";"); } } diff --git a/src/com/android/deskclock/provider/ClockProvider.java b/src/com/android/deskclock/provider/ClockProvider.java index 83480f314..0e8882421 100644 --- a/src/com/android/deskclock/provider/ClockProvider.java +++ b/src/com/android/deskclock/provider/ClockProvider.java @@ -75,6 +75,8 @@ public class ClockProvider extends ContentProvider { ALARMS_TABLE_NAME + "." + AlarmsColumns.RINGTONE); sAlarmsWithInstancesProjection.put(ALARMS_TABLE_NAME + "." + AlarmsColumns.DELETE_AFTER_USE, ALARMS_TABLE_NAME + "." + AlarmsColumns.DELETE_AFTER_USE); + sAlarmsWithInstancesProjection.put(ALARMS_TABLE_NAME + "." + AlarmsColumns.INCREASING_VOLUME, + ALARMS_TABLE_NAME + "." + AlarmsColumns.INCREASING_VOLUME); sAlarmsWithInstancesProjection.put(INSTANCES_TABLE_NAME + "." + InstancesColumns.ALARM_STATE, INSTANCES_TABLE_NAME + "." + InstancesColumns.ALARM_STATE); |