Fixed bug where, on app reinstall, the notification actions stopped working due to losing permission for gracecancellationpendingintent.
@ -45,7 +45,6 @@ public class AlarmAlertActivity extends Activity {
|
||||
setContentView(R.layout.alarm_alert);
|
||||
|
||||
notifyIntent = new Intent(getApplicationContext(), AlarmNotify.class);
|
||||
|
||||
// Disable any current notifications
|
||||
stopService(notifyIntent);
|
||||
|
||||
|
@ -15,7 +15,7 @@ import android.util.Log;
|
||||
|
||||
public class AlarmNotify extends Service {
|
||||
public static final int notifyID = 1;
|
||||
private volatile boolean threadRunning = false;
|
||||
public volatile boolean notificationRunning = false;
|
||||
|
||||
@Override
|
||||
public IBinder onBind(Intent intent) {
|
||||
@ -25,7 +25,8 @@ public class AlarmNotify extends Service {
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
// If the notification is cancelled, stop updating.
|
||||
threadRunning = false;
|
||||
notificationRunning = false;
|
||||
Log.d("AlarmNotify", "1: Setting notificationRunning to false");
|
||||
// Remove the notification in the notification bar
|
||||
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
|
||||
nm.cancel(notifyID);
|
||||
@ -41,7 +42,6 @@ public class AlarmNotify extends Service {
|
||||
// convert gracePeriod to milliseconds and calculate when it'll fire
|
||||
final long endTime = System.currentTimeMillis() + (gracePeriod * 60 * 1000);
|
||||
|
||||
//Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.alarm_notification);
|
||||
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_grey);
|
||||
final NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
final Notification.Builder notification = new Notification.Builder(this)
|
||||
@ -50,13 +50,12 @@ public class AlarmNotify extends Service {
|
||||
.setSmallIcon(R.drawable.alarm_notification)
|
||||
.setLargeIcon(bm)
|
||||
.setOnlyAlertOnce(true)
|
||||
.setAutoCancel(true)
|
||||
.setAutoCancel(false)
|
||||
.setPriority(Notification.PRIORITY_HIGH);
|
||||
//.setContentText(String.format(getString(R.string.notificationText), phoneNumber) + MainActivity.MinutesToGracePeriodStr(gracePeriod))
|
||||
|
||||
// Set up dismiss action
|
||||
Intent cancellerIntent = new Intent(getBaseContext(), CancelGraceReceiver.class);
|
||||
PendingIntent cancellerPendingIntent = PendingIntent.getBroadcast(getBaseContext(), MainActivity.CANCEL_GRACE_REQUEST, cancellerIntent, 0);
|
||||
PendingIntent cancellerPendingIntent = PendingIntent.getBroadcast(getBaseContext(), MainActivity.CANCEL_GRACE_REQUEST, cancellerIntent, PendingIntent.FLAG_CANCEL_CURRENT);
|
||||
|
||||
// Cancel the grace period if the user clears the notification
|
||||
notification.setDeleteIntent(cancellerPendingIntent);
|
||||
@ -65,11 +64,14 @@ public class AlarmNotify extends Service {
|
||||
// Allow the user to cancel by selecting the ContentText or ContentTitle
|
||||
notification.setContentIntent(cancellerPendingIntent);
|
||||
|
||||
// TODO load alert activity (without sound or vibration) on select? This would allow the user to test competence
|
||||
/**
|
||||
* TODO load alert activity (without sound or vibration) on select?
|
||||
* TODO This would allow the user to test competence
|
||||
Intent alertActivityIntent = new Intent(this, AlarmAlertActivity.class);
|
||||
alertActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
|
||||
Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
|
||||
//notification.setContentIntent(alertActivityIntent);
|
||||
notification.setContentIntent(alertActivityIntent);
|
||||
*/
|
||||
|
||||
nm.cancel(notifyID);
|
||||
nm.notify(notifyID, notification.build());
|
||||
@ -77,7 +79,8 @@ public class AlarmNotify extends Service {
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
threadRunning = true;
|
||||
notificationRunning = true;
|
||||
Log.d("AlarmNotify", "2: Setting notificationRunning to true");
|
||||
int max = 1000;
|
||||
// Convert endTime from milliseconds to seconds, and translate to time remaining
|
||||
int secondsLeft = (int) ((endTime - System.currentTimeMillis())) / (1000);
|
||||
@ -87,7 +90,8 @@ public class AlarmNotify extends Service {
|
||||
|
||||
while (progress < max) {
|
||||
// Stop the thread if cancelled elsewhere
|
||||
if (!threadRunning) {
|
||||
Log.d("AlarmNotify", "notificationRunning is "+notificationRunning);
|
||||
if (!notificationRunning) {
|
||||
return;
|
||||
}
|
||||
int minutesLeft = secondsLeft / 60;
|
||||
|
@ -24,11 +24,6 @@ public class AlarmReceiver extends BroadcastReceiver {
|
||||
Boolean alarmActive = sharedPref.getBoolean(context.getString(R.string.AlarmActivePref), true);
|
||||
|
||||
if (alarmActive) {
|
||||
|
||||
// Cancel notification if it's not already cancelled.
|
||||
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
nm.cancel(AlarmNotify.notifyID);
|
||||
|
||||
// Set a grace period alarm to send SMS
|
||||
int gracePeriod = sharedPref.getInt(context.getString(R.string.GracePeriodPref), 60);
|
||||
|
||||
|
@ -12,10 +12,6 @@ import android.widget.Toast;
|
||||
public class CancelGraceReceiver extends BroadcastReceiver {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
// Cancel notification if it's not already cancelled.
|
||||
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
nm.cancel(AlarmNotify.notifyID);
|
||||
|
||||
AlarmManager graceManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
|
||||
Intent graceIntent = new Intent(context, GraceReceiver.class);
|
||||
PendingIntent gracePendingIntent = PendingIntent.getBroadcast(context, MainActivity.GRACE_REQUEST, graceIntent, 0);
|
||||
|
@ -3,7 +3,6 @@ package za.org.treehouse.hypoalarm;
|
||||
import android.app.AlarmManager;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.app.TimePickerDialog;
|
||||
import android.content.ComponentName;
|
||||
@ -115,10 +114,6 @@ public class MainActivity extends ActionBarActivity {
|
||||
editor.commit();
|
||||
|
||||
if (!b) {
|
||||
// Cancel notification if it's not already cancelled.
|
||||
NotificationManager nm = (NotificationManager) getActivity().getSystemService(NOTIFICATION_SERVICE);
|
||||
nm.cancel(AlarmNotify.notifyID);
|
||||
|
||||
// Cancel any current alarm
|
||||
alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
|
||||
Intent alarmIntent = new Intent(getActivity(), AlarmReceiver.class);
|
||||
@ -275,8 +270,6 @@ public class MainActivity extends ActionBarActivity {
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||
// Use the current set time as the default value for the picker
|
||||
//String defaultTimeStr = alarmTimeButton.getText().toString();
|
||||
//String alarmTimeStr = sharedPref.getString(getString(R.string.AlarmTimePref), defaultTimeStr);
|
||||
String alarmTimeStr = alarmTimeButton.getText().toString();
|
||||
Calendar cal = TimeStringToCalendar(alarmTimeStr);
|
||||
int hour = cal.get(Calendar.HOUR_OF_DAY);
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 31 KiB |