summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Kirpichyov <pavel.kirpichyov@gmail.com>2014-11-12 12:35:58 -0800
committerMichael Bestas <mikeioannina@gmail.com>2016-12-30 18:05:57 +0200
commit66da02cab906d5abfcdf7c91c2a1613f469c9395 (patch)
tree9b96f69d641cba2a1e2fc7160620e8ed16f92b0a
parent65db68f2414e0eb61bae3280dc0b74408dc2fd37 (diff)
downloadandroid_packages_apps_DeskClock-66da02cab906d5abfcdf7c91c2a1613f469c9395.tar.gz
android_packages_apps_DeskClock-66da02cab906d5abfcdf7c91c2a1613f469c9395.tar.bz2
android_packages_apps_DeskClock-66da02cab906d5abfcdf7c91c2a1613f469c9395.zip
Provide upgrade path for cm12.1 -> cm13.0
This just takes care of making the database is up to date with cm12.1 *Increasing alarm and switch to profile still need to be implemented. Change-Id: Ibbb2b618ddeb6f93cd95a0fba3923bfd6d3fbbbb
-rw-r--r--Android.mk1
-rw-r--r--src/com/android/deskclock/provider/Alarm.java42
-rwxr-xr-xsrc/com/android/deskclock/provider/AlarmInstance.java31
-rw-r--r--src/com/android/deskclock/provider/ClockContract.java12
-rw-r--r--src/com/android/deskclock/provider/ClockDatabaseHelper.java68
-rw-r--r--src/com/android/deskclock/provider/ClockProvider.java4
6 files changed, 147 insertions, 11 deletions
diff --git a/Android.mk b/Android.mk
index 412be55eb..4ba067a3d 100644
--- a/Android.mk
+++ b/Android.mk
@@ -31,6 +31,7 @@ LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-appcompat
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-gridlayout
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-recyclerview
+LOCAL_STATIC_JAVA_LIBRARIES += org.cyanogenmod.platform.sdk
LOCAL_AAPT_FLAGS := --auto-add-overlay
LOCAL_AAPT_FLAGS += --extra-packages android.support.design
diff --git a/src/com/android/deskclock/provider/Alarm.java b/src/com/android/deskclock/provider/Alarm.java
index ac2477b1b..c356bb31f 100644
--- a/src/com/android/deskclock/provider/Alarm.java
+++ b/src/com/android/deskclock/provider/Alarm.java
@@ -27,13 +27,16 @@ 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 cyanogenmod.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 {
/**
@@ -58,7 +61,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 = {
@@ -71,6 +76,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,
@@ -96,6 +103,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;
@@ -106,7 +115,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) {
@@ -122,6 +131,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);
@@ -252,6 +263,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;
@@ -269,6 +282,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) {
@@ -280,6 +295,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);
@@ -305,6 +322,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();
}
public Alarm(Cursor c, Uri defaultRingtoneUri) {
@@ -316,9 +335,22 @@ 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);
alert = defaultRingtoneUri;
}
+ 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;
}
@@ -344,6 +376,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() {
@@ -356,6 +390,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;
}
@@ -436,6 +472,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 e837d3316..25a4142c7 100755
--- a/src/com/android/deskclock/provider/AlarmInstance.java
+++ b/src/com/android/deskclock/provider/AlarmInstance.java
@@ -34,10 +34,12 @@ import com.android.deskclock.R;
import com.android.deskclock.Utils;
import com.android.deskclock.alarms.AlarmStateManager;
import com.android.deskclock.settings.SettingsActivity;
+import cyanogenmod.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 {
/**
@@ -76,7 +78,9 @@ public final class AlarmInstance implements ClockContract.InstancesColumns {
VIBRATE,
RINGTONE,
ALARM_ID,
- ALARM_STATE
+ ALARM_STATE,
+ INCREASING_VOLUME,
+ PROFILE
};
/**
@@ -94,8 +98,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);
@@ -119,6 +125,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;
}
@@ -324,6 +333,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);
@@ -337,6 +348,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) {
@@ -351,6 +364,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) {
@@ -385,6 +400,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;
+ }
+ }
}
public String getLabelOrDefault(Context context) {
@@ -501,6 +526,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 d81eeff90..b7e9c0ab4 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 412c0cb10..aa6ba33a1 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;
@@ -26,8 +27,10 @@ import android.net.Uri;
import android.text.TextUtils;
import com.android.deskclock.LogUtils;
+import cyanogenmod.app.ProfileManager;
import java.util.Calendar;
+import java.util.UUID;
/**
* Helper class for opening the database from multiple providers. Also provides
@@ -56,14 +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;
+
//Setting default alarm to system setting alarm_alert
// This creates a default alarm at 8:30 for every Mon,Tue,Wed,Thu,Fri
//fixed ringtone dialog not selected any list item when first enter
- 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";
@@ -82,7 +97,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");
}
@@ -100,13 +118,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
@@ -125,7 +145,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);
}
@@ -157,6 +179,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)) {
@@ -178,6 +202,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));
@@ -191,6 +226,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 a96eb5e61..e175f5574 100644
--- a/src/com/android/deskclock/provider/ClockProvider.java
+++ b/src/com/android/deskclock/provider/ClockProvider.java
@@ -72,6 +72,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);