diff options
author | Jan-Felix Schmakeit <jfschmakeit@google.com> | 2016-12-01 15:35:18 +1100 |
---|---|---|
committer | Jan-Felix Schmakeit <jfschmakeit@google.com> | 2016-12-01 15:49:53 +1100 |
commit | 8ad9d23cef21171447003ce1e574a7304e990e15 (patch) | |
tree | 3e8ad9aa91c867e1806c09ea4a8c0282218b77f2 /security | |
parent | ca8142263e550a96dda0e738de3540a8fecce701 (diff) | |
download | android-8ad9d23cef21171447003ce1e574a7304e990e15.tar.gz |
Fix DirectBoot sample.
Custom Parcelable objects are not support in PendingIntents set in
AlarmManager (see https://code.google.com/p/android/issues/detail?id=209422 ),
instead the alarm is encoded directly as extra values.
Bump dependencies to fix issues on final N devices.
Move sample to 'security' category.
Change-Id: I6622c6dce6348d9386203791861fb42415537db3
Diffstat (limited to 'security')
5 files changed, 59 insertions, 48 deletions
diff --git a/security/DirectBoot/Application/src/main/java/com/example/android/directboot/SchedulerFragment.java b/security/DirectBoot/Application/src/main/java/com/example/android/directboot/SchedulerFragment.java index 0f32c258..008961f8 100644 --- a/security/DirectBoot/Application/src/main/java/com/example/android/directboot/SchedulerFragment.java +++ b/security/DirectBoot/Application/src/main/java/com/example/android/directboot/SchedulerFragment.java @@ -129,7 +129,7 @@ public class SchedulerFragment extends Fragment { @Override public void onReceive(Context context, Intent intent) { - Alarm alarm = intent.getParcelableExtra(AlarmIntentService.ALARM_KEY); + Alarm alarm = AlarmUtil.readAlarm(intent.getExtras()); mAlarmAdapter.deleteAlarm(alarm); } } diff --git a/security/DirectBoot/Application/src/main/java/com/example/android/directboot/alarms/Alarm.java b/security/DirectBoot/Application/src/main/java/com/example/android/directboot/alarms/Alarm.java index 82712c6b..27ca5c45 100644 --- a/security/DirectBoot/Application/src/main/java/com/example/android/directboot/alarms/Alarm.java +++ b/security/DirectBoot/Application/src/main/java/com/example/android/directboot/alarms/Alarm.java @@ -16,66 +16,44 @@ package com.example.android.directboot.alarms; -import android.os.Parcel; -import android.os.Parcelable; -import android.support.annotation.NonNull; - import org.json.JSONException; import org.json.JSONObject; +import android.support.annotation.NonNull; + import java.util.Calendar; import java.util.Objects; /** * Class represents a single alarm. */ -public class Alarm implements Comparable<Alarm>, Parcelable { +public class Alarm implements Comparable<Alarm> { public int id; + public int month; + public int date; + /** Integer as a 24-hour format */ public int hour; - public int minute; - - public Alarm() {} - protected Alarm(Parcel in) { - id = in.readInt(); - month = in.readInt(); - date = in.readInt(); - hour = in.readInt(); - minute = in.readInt(); - } - - public static final Creator<Alarm> CREATOR = new Creator<Alarm>() { - @Override - public Alarm createFromParcel(Parcel in) { - return new Alarm(in); - } - - @Override - public Alarm[] newArray(int size) { - return new Alarm[size]; - } - }; + public int minute; - @Override - public int describeContents() { - return 0; + public Alarm(int id, int month, int date, int hour, int minute) { + this.id = id; + this.month = month; + this.date = date; + this.hour = hour; + this.minute = minute; } - @Override - public void writeToParcel(Parcel parcel, int i) { - parcel.writeInt(id); - parcel.writeInt(month); - parcel.writeInt(date); - parcel.writeInt(hour); - parcel.writeInt(minute); + public Alarm() { } /** * Serialize the instance as a JSON String. + * * @return serialized JSON String. */ public String toJson() { diff --git a/security/DirectBoot/Application/src/main/java/com/example/android/directboot/alarms/AlarmIntentService.java b/security/DirectBoot/Application/src/main/java/com/example/android/directboot/alarms/AlarmIntentService.java index 446345cd..3909482e 100644 --- a/security/DirectBoot/Application/src/main/java/com/example/android/directboot/alarms/AlarmIntentService.java +++ b/security/DirectBoot/Application/src/main/java/com/example/android/directboot/alarms/AlarmIntentService.java @@ -34,7 +34,17 @@ public class AlarmIntentService extends IntentService { public static final String ALARM_WENT_OFF_ACTION = AlarmIntentService.class.getName() + ".ALARM_WENT_OFF"; - public static final String ALARM_KEY = "alarm_instance"; + + + public static final String KEY_ALARM_ID = "alarm_id"; + + public static final String KEY_ALARM_MONTH = "alarm_month"; + + public static final String KEY_ALARM_DATE = "alarm_date"; + + public static final String KEY_ALARM_HOUR = "alarm_hour"; + + public static final String KEY_ALARM_MINUTE = "alarm_minute"; public AlarmIntentService() { super(AlarmIntentService.class.getName()); @@ -43,7 +53,7 @@ public class AlarmIntentService extends IntentService { @Override protected void onHandleIntent(Intent intent) { Context context = getApplicationContext(); - Alarm alarm = intent.getParcelableExtra(ALARM_KEY); + Alarm alarm = AlarmUtil.readAlarm(intent.getExtras()); NotificationManager notificationManager = context .getSystemService(NotificationManager.class); @@ -59,7 +69,7 @@ public class AlarmIntentService extends IntentService { AlarmStorage alarmStorage = new AlarmStorage(context); alarmStorage.deleteAlarm(alarm); Intent wentOffIntent = new Intent(ALARM_WENT_OFF_ACTION); - wentOffIntent.putExtra(ALARM_KEY, alarm); + wentOffIntent.putExtras(AlarmUtil.writeAlarm(alarm)); LocalBroadcastManager.getInstance(context).sendBroadcast(wentOffIntent); } } diff --git a/security/DirectBoot/Application/src/main/java/com/example/android/directboot/alarms/AlarmUtil.java b/security/DirectBoot/Application/src/main/java/com/example/android/directboot/alarms/AlarmUtil.java index b80e8c9d..29c01c99 100644 --- a/security/DirectBoot/Application/src/main/java/com/example/android/directboot/alarms/AlarmUtil.java +++ b/security/DirectBoot/Application/src/main/java/com/example/android/directboot/alarms/AlarmUtil.java @@ -20,6 +20,7 @@ import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; +import android.os.Bundle; import android.util.Log; import java.util.Calendar; @@ -45,7 +46,9 @@ public class AlarmUtil { */ public void scheduleAlarm(Alarm alarm) { Intent intent = new Intent(mContext, AlarmIntentService.class); - intent.putExtra(AlarmIntentService.ALARM_KEY, alarm); + Bundle extras = writeAlarm(alarm); + intent.putExtras(extras); + PendingIntent pendingIntent = PendingIntent .getService(mContext, alarm.id, intent, PendingIntent.FLAG_UPDATE_CURRENT); Calendar alarmTime = Calendar.getInstance(); @@ -71,7 +74,6 @@ public class AlarmUtil { */ public void cancelAlarm(Alarm alarm) { Intent intent = new Intent(mContext, AlarmIntentService.class); - intent.putExtra(AlarmIntentService.ALARM_KEY, alarm); PendingIntent pendingIntent = PendingIntent .getService(mContext, alarm.id, intent, PendingIntent.FLAG_UPDATE_CURRENT); mAlarmManager.cancel(pendingIntent); @@ -94,4 +96,25 @@ public class AlarmUtil { } return alarmTime; } + + public static Alarm readAlarm(Bundle extras) { + int id = extras.getInt(AlarmIntentService.KEY_ALARM_ID); + int month = extras.getInt(AlarmIntentService.KEY_ALARM_MONTH); + int date = extras.getInt(AlarmIntentService.KEY_ALARM_DATE); + int hour = extras.getInt(AlarmIntentService.KEY_ALARM_HOUR); + int minute = extras.getInt(AlarmIntentService.KEY_ALARM_MINUTE); + + return new Alarm(id, month, date, hour, minute); + } + + public static Bundle writeAlarm(Alarm alarm){ + Bundle extras = new Bundle(); + extras.putInt(AlarmIntentService.KEY_ALARM_ID, alarm.id); + extras.putInt(AlarmIntentService.KEY_ALARM_MONTH, alarm.month); + extras.putInt(AlarmIntentService.KEY_ALARM_DATE, alarm.date); + extras.putInt(AlarmIntentService.KEY_ALARM_HOUR, alarm.hour); + extras.putInt(AlarmIntentService.KEY_ALARM_MINUTE, alarm.minute); + + return extras; + } } diff --git a/security/DirectBoot/template-params.xml b/security/DirectBoot/template-params.xml index dd5d5b1f..b020ec14 100644 --- a/security/DirectBoot/template-params.xml +++ b/security/DirectBoot/template-params.xml @@ -22,13 +22,13 @@ <package>com.example.android.directboot</package> <minSdk>24</minSdk> - <compileSdkVersion>24</compileSdkVersion> - <targetSdkVersion>24</targetSdkVersion> + <compileSdkVersion>25</compileSdkVersion> + <targetSdkVersion>25</targetSdkVersion> <!-- Include additional dependencies here.--> <!-- dependency>com.google.android.gms:play-services:5.0.+</dependency --> - <dependency>com.android.support:recyclerview-v7:24.0.0</dependency> - <dependency>com.android.support:design:24.0.0</dependency> + <dependency>com.android.support:recyclerview-v7:25.0.1</dependency> + <dependency>com.android.support:design:25.0.1</dependency> <template src="base" /> @@ -45,7 +45,7 @@ go off after reboot even before the user enters their credentials. <metadata> <status>PUBLISHED</status> - <categories>Android N Preview</categories> + <categories>Security</categories> <technologies>Android</technologies> <languages>Java</languages> <solutions>Mobile</solutions> |