diff options
Diffstat (limited to 'src/com/android')
5 files changed, 144 insertions, 11 deletions
diff --git a/src/com/android/deskclock/provider/Alarm.java b/src/com/android/deskclock/provider/Alarm.java index fc8aebdb2..33b6e16c0 100644 --- a/src/com/android/deskclock/provider/Alarm.java +++ b/src/com/android/deskclock/provider/Alarm.java @@ -27,14 +27,17 @@ import android.media.RingtoneManager; import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; +import android.os.ParcelUuid; import com.android.deskclock.R; import com.android.deskclock.data.DataModel; import com.android.deskclock.data.Weekdays; +import lineageos.app.ProfileManager; 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 +62,9 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { VIBRATE, LABEL, RINGTONE, - DELETE_AFTER_USE + DELETE_AFTER_USE, + INCREASING_VOLUME, + PROFILE }; private static final String[] QUERY_ALARMS_WITH_INSTANCES_COLUMNS = { @@ -72,6 +77,8 @@ 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.ALARMS_TABLE_NAME + "." + PROFILE, ClockDatabaseHelper.INSTANCES_TABLE_NAME + "." + ClockContract.InstancesColumns.ALARM_STATE, ClockDatabaseHelper.INSTANCES_TABLE_NAME + "." + ClockContract.InstancesColumns._ID, @@ -97,6 +104,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 = 10; + private static final int PROFILE_INDEX = 11; 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 +116,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 = PROFILE_INDEX + 1; private static final int ALARM_JOIN_INSTANCE_COLUMN_COUNT = INSTANCE_VIBRATE_INDEX + 1; public static ContentValues createContentValues(Alarm alarm) { @@ -123,6 +132,8 @@ 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); + values.put(PROFILE, alarm.profile.toString()); if (alarm.alert == null) { // We want to put null, so default alarm changes values.putNull(RINGTONE); @@ -284,6 +295,8 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { public String label; public Uri alert; public boolean deleteAfterUse; + public boolean increasingVolume; + public UUID profile; public int instanceState; public int instanceId; @@ -301,6 +314,8 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { this.label = ""; this.alert = DataModel.getDataModel().getDefaultAlarmRingtoneUri(); this.deleteAfterUse = false; + this.increasingVolume = false; + this.profile = ProfileManager.NO_PROFILE; } public Alarm(Cursor c) { @@ -312,6 +327,8 @@ 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; + profile = getProfileFromCursor(c); if (c.getColumnCount() == ALARM_JOIN_INSTANCE_COLUMN_COUNT) { instanceState = c.getInt(INSTANCE_STATE_INDEX); @@ -337,6 +354,8 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { label = p.readString(); alert = p.readParcelable(null); deleteAfterUse = p.readInt() == 1; + increasingVolume = p.readInt() == 1; + profile = ParcelUuid.CREATOR.createFromParcel(p).getUuid(); } /** @@ -346,6 +365,17 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { return getContentUri(id); } + private static UUID getProfileFromCursor(Cursor c) { + if (!c.isNull(PROFILE_INDEX)) { + try { + return UUID.fromString(c.getString(PROFILE_INDEX)); + } catch (IllegalArgumentException ex) { + // fall back to no profile + } + } + return ProfileManager.NO_PROFILE; + } + public String getLabelOrDefault(Context context) { return label.isEmpty() ? context.getString(R.string.default_label) : label; } @@ -371,6 +401,8 @@ 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); + p.writeParcelable(new ParcelUuid(profile), 0); } public int describeContents() { @@ -383,6 +415,8 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { result.mVibrate = vibrate; result.mLabel = label; result.mRingtone = alert; + result.mIncreasingVolume = increasingVolume; + result.mProfile = profile; return result; } @@ -463,6 +497,8 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { ", vibrate=" + vibrate + ", label='" + label + '\'' + ", deleteAfterUse=" + deleteAfterUse + + ", increasingVolume=" + increasingVolume + + ", profile=" + profile + '}'; } } diff --git a/src/com/android/deskclock/provider/AlarmInstance.java b/src/com/android/deskclock/provider/AlarmInstance.java index 9fb7a7b07..e5208b3ed 100644 --- a/src/com/android/deskclock/provider/AlarmInstance.java +++ b/src/com/android/deskclock/provider/AlarmInstance.java @@ -29,10 +29,12 @@ import com.android.deskclock.LogUtils; import com.android.deskclock.R; import com.android.deskclock.alarms.AlarmStateManager; import com.android.deskclock.data.DataModel; +import lineageos.app.ProfileManager; 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 +68,9 @@ public final class AlarmInstance implements ClockContract.InstancesColumns { VIBRATE, RINGTONE, ALARM_ID, - ALARM_STATE + ALARM_STATE, + INCREASING_VOLUME, + PROFILE }; /** @@ -84,8 +88,10 @@ 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 PROFILE_INDEX = 12; - private static final int COLUMN_COUNT = ALARM_STATE_INDEX + 1; + private static final int COLUMN_COUNT = PROFILE_INDEX + 1; public static ContentValues createContentValues(AlarmInstance instance) { ContentValues values = new ContentValues(COLUMN_COUNT); @@ -109,6 +115,9 @@ 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); + values.put(PROFILE, instance.mProfile.toString()); + return values; } @@ -295,6 +304,8 @@ public final class AlarmInstance implements ClockContract.InstancesColumns { public Uri mRingtone; public Long mAlarmId; public int mAlarmState; + public boolean mIncreasingVolume; + public UUID mProfile; public AlarmInstance(Calendar calendar, Long alarmId) { this(calendar); @@ -308,6 +319,8 @@ public final class AlarmInstance implements ClockContract.InstancesColumns { mVibrate = false; mRingtone = null; mAlarmState = SILENT_STATE; + mIncreasingVolume = false; + mProfile = ProfileManager.NO_PROFILE; } public AlarmInstance(AlarmInstance instance) { @@ -322,6 +335,8 @@ public final class AlarmInstance implements ClockContract.InstancesColumns { this.mRingtone = instance.mRingtone; this.mAlarmId = instance.mAlarmId; this.mAlarmState = instance.mAlarmState; + this.mIncreasingVolume = instance.mIncreasingVolume; + this.mProfile = instance.mProfile; } public AlarmInstance(Cursor c, boolean joinedTable) { @@ -356,6 +371,16 @@ 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; + if (c.isNull(PROFILE_INDEX)) { + mProfile = ProfileManager.NO_PROFILE; + } else { + try { + mProfile = UUID.fromString(c.getString(PROFILE_INDEX)); + } catch (IllegalArgumentException ex) { + mProfile = ProfileManager.NO_PROFILE; + } + } } /** @@ -471,6 +496,8 @@ public final class AlarmInstance implements ClockContract.InstancesColumns { ", mRingtone=" + mRingtone + ", mAlarmId=" + mAlarmId + ", mAlarmState=" + mAlarmState + + ", mIncreasingVolume=" + mIncreasingVolume + + ", mProfile=" + mProfile + '}'; } } diff --git a/src/com/android/deskclock/provider/ClockContract.java b/src/com/android/deskclock/provider/ClockContract.java index 5335ccc28..5e3ae06d6 100644 --- a/src/com/android/deskclock/provider/ClockContract.java +++ b/src/com/android/deskclock/provider/ClockContract.java @@ -84,6 +84,18 @@ 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"; + + /** + * Profile to change to when alarm triggers + * <P>Type: STRING</P> + */ + public static final String PROFILE = "profile"; } /** diff --git a/src/com/android/deskclock/provider/ClockDatabaseHelper.java b/src/com/android/deskclock/provider/ClockDatabaseHelper.java index b6fc90017..0d75f92e6 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; @@ -27,8 +28,10 @@ import android.text.TextUtils; import com.android.deskclock.LogUtils; import com.android.deskclock.data.Weekdays; +import lineageos.app.ProfileManager; import java.util.Calendar; +import java.util.UUID; /** * Helper class for opening the database from multiple providers. Also provides @@ -57,11 +60,23 @@ 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; + // 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, " + + ProfileManager.NO_PROFILE.toString() + ");"; // 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, " + + ProfileManager.NO_PROFILE.toString() + ");"; // Database and table names static final String DATABASE_NAME = "alarms.db"; @@ -80,7 +95,10 @@ 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, " + + ClockContract.AlarmsColumns.PROFILE + " TEXT NOT NULL DEFAULT '" + + ProfileManager.NO_PROFILE.toString() + "');"); LogUtils.i("Alarms Table created"); } @@ -98,13 +116,15 @@ 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, " + + ClockContract.InstancesColumns.PROFILE + " TEXT NOT NULL DEFAULT '" + + ProfileManager.NO_PROFILE.toString() + "');"); LogUtils.i("Instance table created"); } public ClockDatabaseHelper(Context context) { - super(context, DATABASE_NAME, null, VERSION_8); + super(context, DATABASE_NAME, null, VERSION_10); } @Override @@ -123,7 +143,9 @@ 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 + cs + + ClockContract.AlarmsColumns.PROFILE + ") VALUES "; db.execSQL(insertMe + DEFAULT_ALARM_1); db.execSQL(insertMe + DEFAULT_ALARM_2); } @@ -155,6 +177,8 @@ class ClockDatabaseHelper extends SQLiteOpenHelper { "vibrate", "message", "alert", + "incvol", + "profile" }; try (Cursor cursor = db.query(OLD_ALARMS_TABLE_NAME, OLD_TABLE_COLUMNS, null, null, null, null, null)) { @@ -176,6 +200,17 @@ class ClockDatabaseHelper extends SQLiteOpenHelper { alarm.alert = TextUtils.isEmpty(alertString) ? null : Uri.parse(alertString); } + alarm.increasingVolume = cursor.getInt(8) == 1; + + if (cursor.isNull(9)) { + alarm.profile = ProfileManager.NO_PROFILE; + } else { + try { + alarm.profile = UUID.fromString(cursor.getString(9)); + } catch (IllegalArgumentException ex) { + alarm.profile = ProfileManager.NO_PROFILE; + } + } // Save new version of alarm and create alarm instance for it db.insert(ALARMS_TABLE_NAME, null, Alarm.createContentValues(alarm)); @@ -189,6 +224,25 @@ 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 " + ClockContract.AlarmsColumns.PROFILE + + " TEXT NOT NULL DEFAULT '" + ProfileManager.NO_PROFILE + "';"); + db.execSQL("ALTER TABLE " + INSTANCES_TABLE_NAME + + " ADD COLUMN " + ClockContract.InstancesColumns.PROFILE + + " TEXT NOT NULL DEFAULT '" + ProfileManager.NO_PROFILE + "';"); } } diff --git a/src/com/android/deskclock/provider/ClockProvider.java b/src/com/android/deskclock/provider/ClockProvider.java index 51be7e8e0..c859aa9b2 100644 --- a/src/com/android/deskclock/provider/ClockProvider.java +++ b/src/com/android/deskclock/provider/ClockProvider.java @@ -75,6 +75,10 @@ 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(ALARMS_TABLE_NAME + "." + AlarmsColumns.PROFILE, + ALARMS_TABLE_NAME + "." + AlarmsColumns.PROFILE); sAlarmsWithInstancesProjection.put(INSTANCES_TABLE_NAME + "." + InstancesColumns.ALARM_STATE, INSTANCES_TABLE_NAME + "." + InstancesColumns.ALARM_STATE); |