WIP: Re-enable daily reminder feature (part 2)
parent
807ee43e97
commit
bd2fc73d7b
|
@ -2,7 +2,7 @@ apply plugin: 'com.android.application'
|
|||
|
||||
android {
|
||||
compileSdkVersion 29
|
||||
buildToolsVersion '30.0.2'
|
||||
buildToolsVersion '30.0.3'
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 16
|
||||
|
@ -19,9 +19,9 @@ android {
|
|||
multiDexEnabled true
|
||||
}
|
||||
|
||||
lintOptions {
|
||||
checkReleaseBuilds false
|
||||
lint {
|
||||
abortOnError false
|
||||
checkReleaseBuilds false
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
|
|
|
@ -126,8 +126,9 @@
|
|||
android:resource="@xml/nnf_provider_paths" />
|
||||
</provider>
|
||||
<receiver
|
||||
android:name=".DailyReminderReceiver"
|
||||
android:exported="true">
|
||||
android:name="sh.ftp.rocketninelabs.meditationassistant.DailyReminderReceiver"
|
||||
android:exported="true"
|
||||
android:directBootAware="true">
|
||||
<intent-filter>
|
||||
<action android:name="sh.ftp.rocketninelabs.meditationassistant.DAILY_NOTIFICATION"></action>
|
||||
<action android:name="sh.ftp.rocketninelabs.meditationassistant.DAILY_NOTIFICATION_UPDATED"></action>
|
||||
|
|
|
@ -30,7 +30,7 @@ public class DailyReminderReceiver extends BroadcastReceiver {
|
|||
}
|
||||
|
||||
if (!getMeditationAssistant().getPrefs().getBoolean("pref_daily_reminder", false)) {
|
||||
cancelReminder(context);
|
||||
getMeditationAssistant().cancelDailyReminder(context);
|
||||
return; // The user has not enabled the daily reminder
|
||||
}
|
||||
Log.d("MeditationAssistant", "onReceive in DailyReminderReceiver");
|
||||
|
@ -83,78 +83,20 @@ public class DailyReminderReceiver extends BroadcastReceiver {
|
|||
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
|
||||
stackBuilder.addParentStack(MainActivity.class);
|
||||
stackBuilder.addNextIntent(notificationIntent);
|
||||
PendingIntent resultPendingIntent =
|
||||
stackBuilder.getPendingIntent(
|
||||
0,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT
|
||||
);
|
||||
|
||||
//Intent launchMain = new Intent(context, MainActivity.class);
|
||||
//PendingIntent launchNotification = PendingIntent.getActivity(context, 1008, launchMain, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
notificationBuilder.setContentIntent(resultPendingIntent);
|
||||
|
||||
Notification notification = notificationBuilder.build();
|
||||
|
||||
NotificationManager notificationManager =
|
||||
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
notificationManager.notify(1946, notification);
|
||||
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
notificationManager.notify(MeditationAssistant.dailyReminderNotificationID, notification);
|
||||
} else {
|
||||
Log.d("MeditationAssistant", "Skipping daily reminder notification today, a daily notification was recently shown...");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String reminderTime = ma.getPrefs().getString("pref_daily_reminder_time", "19:00");
|
||||
String[] reminderTimeSplit = ((reminderTime != null && reminderTime != "") ? reminderTime : "19:00").split(":");
|
||||
Integer reminderHour = Integer.valueOf(reminderTimeSplit[0]);
|
||||
Integer reminderMinute = Integer.valueOf(reminderTimeSplit[1]);
|
||||
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.set(Calendar.HOUR_OF_DAY, reminderHour);
|
||||
calendar.set(Calendar.MINUTE, reminderMinute);
|
||||
calendar.set(Calendar.SECOND, 0);
|
||||
|
||||
if (Calendar.getInstance().getTimeInMillis() > calendar.getTimeInMillis()) {
|
||||
calendar.add(Calendar.DATE, 1); // Tomorrow
|
||||
}
|
||||
|
||||
cancelReminder(context);
|
||||
|
||||
getMeditationAssistant().reminderPendingIntent = PendingIntent
|
||||
.getBroadcast(
|
||||
context,
|
||||
1946,
|
||||
new Intent(
|
||||
MeditationAssistant.ACTION_REMINDER),
|
||||
PendingIntent.FLAG_CANCEL_CURRENT
|
||||
);
|
||||
|
||||
/* Don't use setAlarmClock here as it will always place an alarm icon in the status bar */
|
||||
getMeditationAssistant().setAlarm(true, calendar.getTimeInMillis(), getMeditationAssistant().reminderPendingIntent);
|
||||
Log.d("MeditationAssistant", "Set daily reminder alarm for " + calendar.toString());
|
||||
}
|
||||
|
||||
private void cancelReminder(Context context) {
|
||||
if (getMeditationAssistant().reminderPendingIntent != null) {
|
||||
try {
|
||||
getMeditationAssistant().getAlarmManager().cancel(getMeditationAssistant().reminderPendingIntent);
|
||||
} catch (Exception e) {
|
||||
Log.e("MeditationAssistant", "AlarmManager update was not canceled. " + e.toString());
|
||||
}
|
||||
try {
|
||||
PendingIntent.getBroadcast(context, 0, new Intent(
|
||||
MeditationAssistant.ACTION_REMINDER),
|
||||
PendingIntent.FLAG_CANCEL_CURRENT
|
||||
).cancel();
|
||||
} catch (Exception e) {
|
||||
Log.e("MeditationAssistant", "PendingIntent broadcast was not canceled. " + e.toString());
|
||||
}
|
||||
try {
|
||||
getMeditationAssistant().reminderPendingIntent.cancel();
|
||||
} catch (Exception e) {
|
||||
Log.e("MeditationAssistant", "PendingIntent was not canceled. " + e.toString());
|
||||
}
|
||||
}
|
||||
getMeditationAssistant().setDailyReminder(context);
|
||||
}
|
||||
|
||||
public MeditationAssistant getMeditationAssistant() {
|
||||
|
|
|
@ -101,6 +101,7 @@ public class MeditationAssistant extends Application {
|
|||
|
||||
public static int CSV_COLUMN_COUNT = 5;
|
||||
|
||||
public static int dailyReminderNotificationID = 1946; // Terence McKenna's year of birth
|
||||
public static int sessionNotificationID = 1990;
|
||||
public static int bellNotificationID = 1991;
|
||||
|
||||
|
@ -170,6 +171,7 @@ public class MeditationAssistant extends Application {
|
|||
private Button sessionDialogCompletedTimeButton = null;
|
||||
private Button sessionDialogLengthButton = null;
|
||||
private EditText sessionDialogMessage = null;
|
||||
private DailyReminderReceiver dailyReminderReceiver = null;
|
||||
private DatePickerDialog.OnDateSetListener sessionDialogDateSetListener =
|
||||
new DatePickerDialog.OnDateSetListener() {
|
||||
@Override
|
||||
|
@ -1202,17 +1204,13 @@ public class MeditationAssistant extends Application {
|
|||
+ Build.VERSION.SDK_INT
|
||||
);
|
||||
|
||||
DailyReminderReceiver receiver = new DailyReminderReceiver();
|
||||
IntentFilter reminderFilter = new IntentFilter();
|
||||
reminderFilter.addAction(ACTION_REMINDER);
|
||||
reminderFilter.addAction(ACTION_UPDATED);
|
||||
reminderFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
reminderFilter.addAction(Intent.ACTION_LOCKED_BOOT_COMPLETED);
|
||||
} else {
|
||||
reminderFilter.addAction(Intent.ACTION_BOOT_COMPLETED);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
dailyReminderReceiver = new DailyReminderReceiver();
|
||||
IntentFilter reminderFilter = new IntentFilter();
|
||||
reminderFilter.addAction(ACTION_REMINDER);
|
||||
reminderFilter.addAction(ACTION_UPDATED);
|
||||
registerReceiver(dailyReminderReceiver, reminderFilter);
|
||||
}
|
||||
registerReceiver(receiver, reminderFilter);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 23) {
|
||||
PackageManager pm = getPackageManager();
|
||||
|
@ -1264,13 +1262,52 @@ public class MeditationAssistant extends Application {
|
|||
|
||||
db = DatabaseHandler.getInstance(getApplicationContext());
|
||||
|
||||
/* Send the daily notification updated intent just in case the receiver hasn't been called yet */
|
||||
Log.d("MeditationAssistant", "Sending initial daily notification updated intent");
|
||||
Intent intent = new Intent();
|
||||
intent.setAction(MeditationAssistant.ACTION_UPDATED);
|
||||
sendBroadcast(intent);
|
||||
setDailyReminder(getApplicationContext());
|
||||
}
|
||||
|
||||
public void setDailyReminder(Context context) {
|
||||
String reminderTime = getPrefs().getString("pref_daily_reminder_time", "19:00");
|
||||
String[] reminderTimeSplit = ((reminderTime != null && reminderTime != "") ? reminderTime : "19:00").split(":");
|
||||
Integer reminderHour = Integer.valueOf(reminderTimeSplit[0]);
|
||||
Integer reminderMinute = Integer.valueOf(reminderTimeSplit[1]);
|
||||
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.set(Calendar.HOUR_OF_DAY, reminderHour);
|
||||
calendar.set(Calendar.MINUTE, reminderMinute);
|
||||
calendar.set(Calendar.SECOND, 0);
|
||||
|
||||
if (Calendar.getInstance().getTimeInMillis() > calendar.getTimeInMillis()) {
|
||||
calendar.add(Calendar.DATE, 1); // Tomorrow
|
||||
}
|
||||
|
||||
cancelDailyReminder(context);
|
||||
|
||||
reminderPendingIntent = PendingIntent.getBroadcast(context, dailyReminderNotificationID, new Intent(MeditationAssistant.ACTION_REMINDER), PendingIntent.FLAG_CANCEL_CURRENT);
|
||||
|
||||
/* Don't use setAlarmClock here as it will always place an alarm icon in the status bar */
|
||||
setAlarm(true, calendar.getTimeInMillis(), reminderPendingIntent);
|
||||
Log.d("MeditationAssistant", "Set daily reminder alarm for " + calendar.toString());
|
||||
}
|
||||
|
||||
public void cancelDailyReminder(Context context) {
|
||||
if (reminderPendingIntent != null) {
|
||||
try {
|
||||
getAlarmManager().cancel(reminderPendingIntent);
|
||||
} catch (Exception e) {
|
||||
Log.e("MeditationAssistant", "AlarmManager update was not canceled. " + e.toString());
|
||||
}
|
||||
try {
|
||||
PendingIntent.getBroadcast(context, 0, new Intent(MeditationAssistant.ACTION_REMINDER), PendingIntent.FLAG_CANCEL_CURRENT).cancel();
|
||||
} catch (Exception e) {
|
||||
Log.e("MeditationAssistant", "PendingIntent broadcast was not canceled. " + e.toString());
|
||||
}
|
||||
try {
|
||||
reminderPendingIntent.cancel();
|
||||
} catch (Exception e) {
|
||||
Log.e("MeditationAssistant", "PendingIntent was not canceled. " + e.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
public String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException {
|
||||
StringBuilder result = new StringBuilder();
|
||||
boolean first = true;
|
||||
|
|
|
@ -5,7 +5,7 @@ buildscript {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.0.2'
|
||||
classpath 'com.android.tools.build:gradle:7.2.0'
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
|
|||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
|
||||
|
|
Loading…
Reference in New Issue