aboutsummaryrefslogtreecommitdiff
path: root/security
diff options
context:
space:
mode:
authorJan-Felix Schmakeit <jfschmakeit@google.com>2016-12-01 15:35:18 +1100
committerJan-Felix Schmakeit <jfschmakeit@google.com>2016-12-01 15:49:53 +1100
commit8ad9d23cef21171447003ce1e574a7304e990e15 (patch)
tree3e8ad9aa91c867e1806c09ea4a8c0282218b77f2 /security
parentca8142263e550a96dda0e738de3540a8fecce701 (diff)
downloadandroid-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')
-rw-r--r--security/DirectBoot/Application/src/main/java/com/example/android/directboot/SchedulerFragment.java2
-rw-r--r--security/DirectBoot/Application/src/main/java/com/example/android/directboot/alarms/Alarm.java52
-rw-r--r--security/DirectBoot/Application/src/main/java/com/example/android/directboot/alarms/AlarmIntentService.java16
-rw-r--r--security/DirectBoot/Application/src/main/java/com/example/android/directboot/alarms/AlarmUtil.java27
-rw-r--r--security/DirectBoot/template-params.xml10
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>