diff options
author | Annie Chin <afchin@google.com> | 2015-01-05 16:06:49 -0800 |
---|---|---|
committer | Annie Chin <afchin@google.com> | 2015-01-09 14:18:20 -0800 |
commit | 7e6864814023f0a35f90cc16042bc3ff96eba86c (patch) | |
tree | 34fbd9cb3567302264ae5f715df62e86a21c9d6d /src | |
parent | 3b7ed22e5e1c40cdda943fc5c699fa1171a0d1e9 (diff) | |
download | android_packages_apps_DeskClock-7e6864814023f0a35f90cc16042bc3ff96eba86c.tar.gz android_packages_apps_DeskClock-7e6864814023f0a35f90cc16042bc3ff96eba86c.tar.bz2 android_packages_apps_DeskClock-7e6864814023f0a35f90cc16042bc3ff96eba86c.zip |
Add contentaction to upcoming alarm notifications.
The contentaction will send a "SHOW_ALL_ALARMS" message to the wear.
Refactor DeskClockExtensions.
Change-Id: Ia7b5914fc22ab04f457861704c6dfb3b2a5dcda6
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/deskclock/AlarmClockFragment.java | 7 | ||||
-rw-r--r-- | src/com/android/deskclock/DeskClock.java | 1 | ||||
-rw-r--r-- | src/com/android/deskclock/DeskClockExtensions.java | 26 | ||||
-rw-r--r-- | src/com/android/deskclock/ExtensionsFactory.java | 96 | ||||
-rw-r--r-- | src/com/android/deskclock/alarms/AlarmNotifications.java | 39 |
5 files changed, 39 insertions, 130 deletions
diff --git a/src/com/android/deskclock/AlarmClockFragment.java b/src/com/android/deskclock/AlarmClockFragment.java index 98892fca5..681a5c85d 100644 --- a/src/com/android/deskclock/AlarmClockFragment.java +++ b/src/com/android/deskclock/AlarmClockFragment.java @@ -104,8 +104,6 @@ public class AlarmClockFragment extends DeskClockFragment implements private static final String KEY_UNDO_SHOWING = "undoShowing"; private static final String KEY_PREVIOUS_DAY_MAP = "previousDayMap"; private static final String KEY_SELECTED_ALARM = "selectedAlarm"; - private static final DeskClockExtensions sDeskClockExtensions = ExtensionsFactory - .getDeskClockExtensions(); private static final int REQUEST_CODE_RINGTONE = 1; private static final long INVALID_ID = -1; @@ -1361,8 +1359,6 @@ public class AlarmClockFragment extends DeskClockFragment implements ContentResolver cr = context.getContentResolver(); AlarmStateManager.deleteAllInstances(context, alarm.id); Alarm.deleteAlarm(cr, alarm.id); - sDeskClockExtensions.deleteAlarm( - AlarmClockFragment.this.getActivity().getApplicationContext(), alarm.id); } return null; } @@ -1386,9 +1382,6 @@ public class AlarmClockFragment extends DeskClockFragment implements // Create and add instance to db if (newAlarm.enabled) { - sDeskClockExtensions.addAlarm( - AlarmClockFragment.this.getActivity().getApplicationContext(), - newAlarm); return setupAlarmInstance(context, newAlarm); } } diff --git a/src/com/android/deskclock/DeskClock.java b/src/com/android/deskclock/DeskClock.java index 0dd9c5ca7..c5eb58d27 100644 --- a/src/com/android/deskclock/DeskClock.java +++ b/src/com/android/deskclock/DeskClock.java @@ -260,7 +260,6 @@ public class DeskClock extends Activity implements LabelDialogFragment.TimerLabe // We need to update the system next alarm time on app startup because the // user might have clear our data. AlarmStateManager.updateNextAlarm(this); - ExtensionsFactory.init(getAssets()); } @Override diff --git a/src/com/android/deskclock/DeskClockExtensions.java b/src/com/android/deskclock/DeskClockExtensions.java index 09c73569d..29cd09a53 100644 --- a/src/com/android/deskclock/DeskClockExtensions.java +++ b/src/com/android/deskclock/DeskClockExtensions.java @@ -1,28 +1,20 @@ package com.android.deskclock; import android.content.Context; +import android.support.v4.app.NotificationCompat; +import android.support.v4.app.NotificationManagerCompat; -import com.android.deskclock.provider.Alarm; +import com.android.deskclock.provider.AlarmInstance; /** DeskClockExtensions. */ public interface DeskClockExtensions { - /** - * Notify paired device that a new alarm has been created on the phone, so that the alarm can be - * synced to the device. - * - * @param context the application context. - * @param newAlarm the alarm to add. - */ - public void addAlarm(Context context, Alarm newAlarm); + public void sendNotification(NotificationManagerCompat nm, + NotificationCompat.Builder notification, + AlarmInstance instance); - /** - * Notify paired device that an alarm has been deleted from the phone so that it can also be - * deleted from the device. - * - * @param context the application context. - * @param alarmId the alarm id of the alarm to delete. - */ - public void deleteAlarm(Context context, long alarmId); + public void sendNotification(NotificationManagerCompat nm, + NotificationCompat.Builder notification, AlarmInstance instance, Context context); + public void clearNotification(NotificationManagerCompat nm, AlarmInstance instance); } diff --git a/src/com/android/deskclock/ExtensionsFactory.java b/src/com/android/deskclock/ExtensionsFactory.java index 7dd773085..1f19190db 100644 --- a/src/com/android/deskclock/ExtensionsFactory.java +++ b/src/com/android/deskclock/ExtensionsFactory.java @@ -1,94 +1,40 @@ package com.android.deskclock; import android.content.Context; -import android.content.res.AssetManager; -import android.util.Log; +import android.support.v4.app.NotificationCompat; +import android.support.v4.app.NotificationManagerCompat; -import com.android.deskclock.provider.Alarm; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.Properties; +import com.android.deskclock.provider.AlarmInstance; public class ExtensionsFactory { - - private static String TAG = "ExtensionsFactory"; - // Config filename for mappings of various class names to their custom - // implementations. - private static String EXTENSIONS_PROPERTIES = "deskclock_extensions.properties"; - private static String DESKCLOCKEXTENSIONS_KEY = "DeskclockExtensions"; - private static Properties sProperties = new Properties(); private static DeskClockExtensions sDeskClockExtensions = null; - public static void init(AssetManager assetManager) { - try { - InputStream fileStream = assetManager.open(EXTENSIONS_PROPERTIES); - sProperties.load(fileStream); - fileStream.close(); - } catch (FileNotFoundException e) { - // No custom extensions. Ignore. - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "No custom extensions."); - } - } catch (IOException e) { - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, e.toString()); - } - } - } + private ExtensionsFactory() { } - private static <T> T createInstance(String className) { - try { - Class<?> c = Class.forName(className); - return (T) c.newInstance(); - } catch (ClassNotFoundException e) { - if (Log.isLoggable(TAG, Log.ERROR)) { - Log.e(TAG, className + ": unable to create instance.", e); - } - } catch (IllegalAccessException e) { - if (Log.isLoggable(TAG, Log.ERROR)) { - Log.e(TAG, className + ": unable to create instance.", e); - } - } catch (InstantiationException e) { - if (Log.isLoggable(TAG, Log.ERROR)) { - Log.e(TAG, className + ": unable to create instance.", e); - } - } - return null; + public static void init(DeskClockExtensions extensions) { + sDeskClockExtensions = extensions; } public static DeskClockExtensions getDeskClockExtensions() { - if ((sDeskClockExtensions != null)) { - return sDeskClockExtensions; + if (sDeskClockExtensions == null) { + sDeskClockExtensions = new NullDeskClockExtensions(); } - String className = sProperties.getProperty(DESKCLOCKEXTENSIONS_KEY); - if (className != null) { - sDeskClockExtensions = createInstance(className); - } else { - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, DESKCLOCKEXTENSIONS_KEY + " not found in properties file."); - } - } + return sDeskClockExtensions; + } - if (sDeskClockExtensions == null) { - sDeskClockExtensions = new DeskClockExtensions() { - @Override - public void addAlarm(Context context, Alarm newAlarm) { - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "Add alarm: Empty inline implementation called."); - } - } + private static class NullDeskClockExtensions implements DeskClockExtensions { + @Override + public void sendNotification(NotificationManagerCompat nm, + NotificationCompat.Builder notification, AlarmInstance instance) { } - @Override - public void deleteAlarm(Context context, long alarmId) { - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "Delete alarm: Empty inline implementation called."); - } - } - }; + @Override + public void sendNotification(NotificationManagerCompat nm, + NotificationCompat.Builder notification, AlarmInstance instance, Context context) { + } + + @Override + public void clearNotification(NotificationManagerCompat nm, AlarmInstance instance) { } - return sDeskClockExtensions; } } diff --git a/src/com/android/deskclock/alarms/AlarmNotifications.java b/src/com/android/deskclock/alarms/AlarmNotifications.java index 555429bcd..9ba1c69bf 100644 --- a/src/com/android/deskclock/alarms/AlarmNotifications.java +++ b/src/com/android/deskclock/alarms/AlarmNotifications.java @@ -22,25 +22,19 @@ import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.res.Resources; +import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationManagerCompat; import com.android.deskclock.AlarmClockFragment; import com.android.deskclock.AlarmUtils; import com.android.deskclock.DeskClock; +import com.android.deskclock.ExtensionsFactory; import com.android.deskclock.LogUtils; import com.android.deskclock.R; import com.android.deskclock.provider.Alarm; import com.android.deskclock.provider.AlarmInstance; public final class AlarmNotifications { - /* - * Given the hash code for a phone notification, return the hash code for the corresponding - * notification on the wear. - */ - private static int getWearNotificationHashCode(int phoneNotificationHash) { - return -phoneNotificationHash; - } - public static void registerNextAlarmWithAlarmManager(Context context, AlarmInstance instance) { // Sets a surrogate alarm with alarm manager that provides the AlarmClockInfo for the // alarm that is going to fire next. The operation is constructed such that it is ignored @@ -72,7 +66,7 @@ public final class AlarmNotifications { NotificationManagerCompat nm = NotificationManagerCompat.from(context); Resources resources = context.getResources(); - Notification.Builder notification = new Notification.Builder(context) + NotificationCompat.Builder notification = new NotificationCompat.Builder(context) .setContentTitle(resources.getString(R.string.alarm_alert_predismiss_title)) .setContentText(AlarmUtils.getAlarmText(context, instance)) .setSmallIcon(R.drawable.stat_notify_alarm) @@ -110,7 +104,7 @@ public final class AlarmNotifications { NotificationManagerCompat nm = NotificationManagerCompat.from(context); Resources resources = context.getResources(); - Notification.Builder notification = new Notification.Builder(context) + NotificationCompat.Builder notification = new NotificationCompat.Builder(context) .setContentTitle(resources.getString(R.string.alarm_alert_predismiss_title)) .setContentText(AlarmUtils.getAlarmText(context, instance)) .setSmallIcon(R.drawable.stat_notify_alarm) @@ -139,14 +133,8 @@ public final class AlarmNotifications { nm.cancel(instance.hashCode()); nm.notify(instance.hashCode(), notification.build()); - // Set up non-ongoing wear notification - notification.setOngoing(false) - .setGroup(Integer.toString(instance.hashCode())) - .setGroupSummary(false) - .setLocalOnly(false); - - nm.cancel(getWearNotificationHashCode(instance.hashCode())); - nm.notify(getWearNotificationHashCode(instance.hashCode()), notification.build()); + ExtensionsFactory.getDeskClockExtensions().sendNotification( + nm, notification, instance, context); } public static void showSnoozeNotification(Context context, AlarmInstance instance) { @@ -154,7 +142,7 @@ public final class AlarmNotifications { NotificationManagerCompat nm = NotificationManagerCompat.from(context); Resources resources = context.getResources(); - Notification.Builder notification = new Notification.Builder(context) + NotificationCompat.Builder notification = new NotificationCompat.Builder(context) .setContentTitle(instance.getLabelOrDefault(context)) .setContentText(resources.getString(R.string.alarm_alert_snooze_until, AlarmUtils.getFormattedTime(context, instance.getAlarmTime()))) @@ -183,14 +171,7 @@ public final class AlarmNotifications { nm.cancel(instance.hashCode()); nm.notify(instance.hashCode(), notification.build()); - // Set up non-ongoing wear notification - notification.setOngoing(false) - .setGroup(Integer.toString(instance.hashCode())) - .setGroupSummary(false) - .setLocalOnly(false); - - nm.cancel(getWearNotificationHashCode(instance.hashCode())); - nm.notify(getWearNotificationHashCode(instance.hashCode()), notification.build()); + ExtensionsFactory.getDeskClockExtensions().sendNotification(nm, notification, instance); } public static void showMissedNotification(Context context, AlarmInstance instance) { @@ -291,9 +272,7 @@ public final class AlarmNotifications { NotificationManagerCompat nm = NotificationManagerCompat.from(context); nm.cancel(instance.hashCode()); - // Also clear corresponding watch notification when an upcoming or snoozed alarm is - // dismissed from either the phone or the wear. - nm.cancel(getWearNotificationHashCode(instance.hashCode())); + ExtensionsFactory.getDeskClockExtensions().clearNotification(nm, instance); } private static Intent createViewAlarmIntent(Context context, AlarmInstance instance) { |