diff options
author | Pavel Kirpichyov <pavel.kirpichyov@gmail.com> | 2014-11-12 12:35:58 -0800 |
---|---|---|
committer | Michael Bestas <mikeioannina@gmail.com> | 2016-12-30 18:05:57 +0200 |
commit | 66da02cab906d5abfcdf7c91c2a1613f469c9395 (patch) | |
tree | 9b96f69d641cba2a1e2fc7160620e8ed16f92b0a | |
parent | 65db68f2414e0eb61bae3280dc0b74408dc2fd37 (diff) | |
download | android_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.mk | 1 | ||||
-rw-r--r-- | src/com/android/deskclock/provider/Alarm.java | 42 | ||||
-rwxr-xr-x | src/com/android/deskclock/provider/AlarmInstance.java | 31 | ||||
-rw-r--r-- | src/com/android/deskclock/provider/ClockContract.java | 12 | ||||
-rw-r--r-- | src/com/android/deskclock/provider/ClockDatabaseHelper.java | 68 | ||||
-rw-r--r-- | src/com/android/deskclock/provider/ClockProvider.java | 4 |
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); |