Fix PendingIntents missing FLAG_MUTABLE
Even though PendingIntents are assumed to be mutable by default, adding FLAG_MUTABLE is required when running on Android API 33+.master
parent
ed5afd4b83
commit
1e67644af2
|
@ -8,8 +8,8 @@ android {
|
|||
minSdkVersion 16
|
||||
targetSdkVersion 33
|
||||
|
||||
versionCode 166
|
||||
versionName "1.6.6"
|
||||
versionCode 167
|
||||
versionName "1.6.7"
|
||||
|
||||
applicationId "sh.ftp.rocketninelabs.meditationassistant"
|
||||
manifestPlaceholders = [
|
||||
|
|
|
@ -27,6 +27,12 @@
|
|||
<uses-permission
|
||||
android:name="android.permission.READ_EXTERNAL_STORAGE"
|
||||
tools:node="replace" />
|
||||
<uses-permission
|
||||
android:name="android.permission.USE_EXACT_ALARM"
|
||||
tools:node="replace" />
|
||||
<uses-permission
|
||||
android:name="android.permission.SCHEDULE_EXACT_ALARM"
|
||||
tools:node="replace" android:maxSdkVersion="32" />
|
||||
|
||||
<application
|
||||
android:name=".MeditationAssistant"
|
||||
|
|
|
@ -83,7 +83,7 @@ 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);
|
||||
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT | MeditationAssistant.extraPendingIntentFlags());
|
||||
notificationBuilder.setContentIntent(resultPendingIntent);
|
||||
|
||||
Notification notification = notificationBuilder.build();
|
||||
|
|
|
@ -131,7 +131,7 @@ public class MainActivity extends Activity implements OnShowcaseEventListener {
|
|||
intent_interval.setAction(BROADCAST_ACTION_ALARM);
|
||||
pendingintent_interval = PendingIntent.getActivity(
|
||||
getApplicationContext(), ID_INTERVAL,
|
||||
intent_interval, PendingIntent.FLAG_CANCEL_CURRENT);
|
||||
intent_interval, PendingIntent.FLAG_CANCEL_CURRENT | MeditationAssistant.extraPendingIntentFlags());
|
||||
getMeditationAssistant().setAlarm(true, cal.getTimeInMillis(), pendingintent_interval);
|
||||
|
||||
handler.postDelayed(this, interval * 1000);
|
||||
|
@ -1244,7 +1244,7 @@ public class MainActivity extends Activity implements OnShowcaseEventListener {
|
|||
intent.setAction(BROADCAST_ACTION_ALARM);
|
||||
pendingintent = PendingIntent.getActivity(
|
||||
getApplicationContext(), ID_END, intent,
|
||||
PendingIntent.FLAG_CANCEL_CURRENT);
|
||||
PendingIntent.FLAG_CANCEL_CURRENT | MeditationAssistant.extraPendingIntentFlags());
|
||||
|
||||
Log.d("MeditationAssistant", "Setting MAIN WAKEUP alarm for "
|
||||
+ cal.getTimeInMillis() + " (Now: "
|
||||
|
@ -1398,7 +1398,7 @@ public class MainActivity extends Activity implements OnShowcaseEventListener {
|
|||
intent.setAction(BROADCAST_ACTION_ALARM);
|
||||
pendingintent = PendingIntent.getActivity(
|
||||
getApplicationContext(), ID_END, intent,
|
||||
PendingIntent.FLAG_CANCEL_CURRENT);
|
||||
PendingIntent.FLAG_CANCEL_CURRENT | MeditationAssistant.extraPendingIntentFlags());
|
||||
|
||||
Log.d("MeditationAssistant", "Setting MAIN WAKEUP alarm for "
|
||||
+ cal.getTimeInMillis() + " (Now: "
|
||||
|
@ -1456,7 +1456,7 @@ public class MainActivity extends Activity implements OnShowcaseEventListener {
|
|||
intent_delay.setAction(BROADCAST_ACTION_ALARM);
|
||||
pendingintent_delay = PendingIntent.getActivity(
|
||||
getApplicationContext(), ID_DELAY, intent_delay,
|
||||
PendingIntent.FLAG_CANCEL_CURRENT);
|
||||
PendingIntent.FLAG_CANCEL_CURRENT | MeditationAssistant.extraPendingIntentFlags());
|
||||
getMeditationAssistant().setAlarm(true, cal.getTimeInMillis(), pendingintent_delay);
|
||||
} else {
|
||||
handler.postDelayed(meditateRunnable, 50);
|
||||
|
@ -1485,7 +1485,7 @@ public class MainActivity extends Activity implements OnShowcaseEventListener {
|
|||
intent_interval.setAction(BROADCAST_ACTION_ALARM);
|
||||
pendingintent_interval = PendingIntent.getActivity(
|
||||
getApplicationContext(), ID_INTERVAL,
|
||||
intent_interval, PendingIntent.FLAG_CANCEL_CURRENT);
|
||||
intent_interval, PendingIntent.FLAG_CANCEL_CURRENT | MeditationAssistant.extraPendingIntentFlags());
|
||||
getMeditationAssistant().setAlarm(true, cal.getTimeInMillis(), pendingintent_interval);
|
||||
}
|
||||
}
|
||||
|
@ -1521,7 +1521,7 @@ public class MainActivity extends Activity implements OnShowcaseEventListener {
|
|||
intent_bell.putExtra("wakeupbell", true);
|
||||
intent_bell.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
|
||||
intent_bell.setAction(BROADCAST_ACTION_ALARM);
|
||||
mindfulnessBellIntent = PendingIntent.getActivity(getApplicationContext(), ID_BELL, intent_bell, PendingIntent.FLAG_CANCEL_CURRENT);
|
||||
mindfulnessBellIntent = PendingIntent.getActivity(getApplicationContext(), ID_BELL, intent_bell, PendingIntent.FLAG_CANCEL_CURRENT | MeditationAssistant.extraPendingIntentFlags());
|
||||
getMeditationAssistant().setAlarm(true, cal.getTimeInMillis(), mindfulnessBellIntent);
|
||||
}
|
||||
|
||||
|
@ -2016,7 +2016,7 @@ public class MainActivity extends Activity implements OnShowcaseEventListener {
|
|||
intent_interval.setAction(BROADCAST_ACTION_ALARM);
|
||||
pendingintent_interval = PendingIntent.getActivity(
|
||||
getApplicationContext(), ID_INTERVAL,
|
||||
intent_interval, PendingIntent.FLAG_CANCEL_CURRENT);
|
||||
intent_interval, PendingIntent.FLAG_CANCEL_CURRENT | MeditationAssistant.extraPendingIntentFlags());
|
||||
getMeditationAssistant().setAlarm(true, cal.getTimeInMillis(), pendingintent_interval);
|
||||
} else {
|
||||
Log.d("MeditationAssistant", "Skipping INTERVAL WAKEUP alarm");
|
||||
|
|
|
@ -52,26 +52,13 @@ public class MediNETActivity extends Activity {
|
|||
}
|
||||
|
||||
public String getPageUrl(String page) {
|
||||
/*TimeZone tz = TimeZone.getDefault();
|
||||
Date now = new Date();
|
||||
|
||||
if (page.equals("community")) {
|
||||
return MeditationAssistant.URL_MEDINET + "/om/community?v="
|
||||
+ MediNET.version.toString() + "&avn="
|
||||
+ getMeditationAssistant().getMAAppVersionNumber() + "&th="
|
||||
+ ma.getMAThemeString() + "&tz="
|
||||
+ TimeZone.getDefault().getID() + "&x="
|
||||
+ getMeditationAssistant().getMediNETKey() + "&page="
|
||||
+ page;
|
||||
}*/
|
||||
|
||||
return MeditationAssistant.URL_MEDINET + "/client_android.php?v="
|
||||
+ MediNET.version.toString() + "&avn="
|
||||
+ getMeditationAssistant().getMAAppVersionNumber() + "&th="
|
||||
+ ma.getMAThemeString() + "&tz="
|
||||
+ TimeZone.getDefault().getID() + "&x="
|
||||
+ getMeditationAssistant().getMediNETKey() + "&page="
|
||||
+ page;
|
||||
return MeditationAssistant.URL_MEDINET
|
||||
+ "/om/" + page
|
||||
+ "?v=" + MediNET.version.toString()
|
||||
+ "&avn=" + getMeditationAssistant().getMAAppVersionNumber()
|
||||
+ "&th=" + ma.getMAThemeString()
|
||||
+ "&tz=" + TimeZone.getDefault().getID()
|
||||
+ "&x=" + getMeditationAssistant().getMediNETKey();
|
||||
}
|
||||
|
||||
public void goTo(String go_to) {
|
||||
|
|
|
@ -366,7 +366,7 @@ public class MeditationAssistant extends Application {
|
|||
|
||||
public void setAlarm(boolean allowAlarmClock, long triggerAtMillis, PendingIntent pendingIntent) {
|
||||
if (Build.VERSION.SDK_INT >= 21 && allowAlarmClock) {
|
||||
getAlarmManager().setAlarmClock(new AlarmManager.AlarmClockInfo(triggerAtMillis, PendingIntent.getActivity(this, 0, new Intent(getApplicationContext(), MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT)), pendingIntent);
|
||||
getAlarmManager().setAlarmClock(new AlarmManager.AlarmClockInfo(triggerAtMillis, PendingIntent.getActivity(this, 0, new Intent(getApplicationContext(), MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT | MeditationAssistant.extraPendingIntentFlags())), pendingIntent);
|
||||
} else if (Build.VERSION.SDK_INT >= 19) {
|
||||
getAlarmManager().setExact(AlarmManager.RTC_WAKEUP, triggerAtMillis, pendingIntent);
|
||||
} else {
|
||||
|
@ -765,7 +765,7 @@ public class MeditationAssistant extends Application {
|
|||
|
||||
AuthorizationService authorizationService = new AuthorizationService(context);
|
||||
|
||||
PendingIntent authIntent = PendingIntent.getActivity(MeditationAssistant.this, 0, new Intent(context, AuthResultActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK), PendingIntent.FLAG_CANCEL_CURRENT);
|
||||
PendingIntent authIntent = PendingIntent.getActivity(MeditationAssistant.this, 0, new Intent(context, AuthResultActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK), PendingIntent.FLAG_CANCEL_CURRENT | MeditationAssistant.extraPendingIntentFlags());
|
||||
|
||||
authorizationService.performAuthorizationRequest(
|
||||
request,
|
||||
|
@ -1297,7 +1297,7 @@ public class MeditationAssistant extends Application {
|
|||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
|
||||
cancelDailyReminder(context);
|
||||
|
||||
reminderPendingIntent = PendingIntent.getBroadcast(context, dailyReminderNotificationID, new Intent(MeditationAssistant.ACTION_REMINDER), PendingIntent.FLAG_CANCEL_CURRENT);
|
||||
reminderPendingIntent = PendingIntent.getBroadcast(context, dailyReminderNotificationID, new Intent(MeditationAssistant.ACTION_REMINDER), PendingIntent.FLAG_CANCEL_CURRENT | MeditationAssistant.extraPendingIntentFlags());
|
||||
|
||||
/* Don't use setAlarmClock here as it will always place an alarm icon in the status bar */
|
||||
setAlarm(false, calendar.getTimeInMillis(), reminderPendingIntent);
|
||||
|
@ -1332,7 +1332,7 @@ public class MeditationAssistant extends Application {
|
|||
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();
|
||||
PendingIntent.getBroadcast(context, 0, new Intent(MeditationAssistant.ACTION_REMINDER), PendingIntent.FLAG_CANCEL_CURRENT | MeditationAssistant.extraPendingIntentFlags()).cancel();
|
||||
} catch (Exception e) {
|
||||
Log.e("MeditationAssistant", "PendingIntent broadcast was not canceled. " + e.toString());
|
||||
}
|
||||
|
@ -1553,14 +1553,14 @@ public class MeditationAssistant extends Application {
|
|||
// intent.putExtra("notificationButton", "notification");
|
||||
// intent.putExtra("notificationButton", "");
|
||||
PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
PendingIntent.FLAG_UPDATE_CURRENT | MeditationAssistant.extraPendingIntentFlags());
|
||||
|
||||
Intent intent3 = new Intent(this, MainActivity.class);
|
||||
// intent3.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
||||
// intent3.putExtra("notificationButton", "end");
|
||||
intent3.setAction("notificationEndBell");
|
||||
PendingIntent pIntentEnd = PendingIntent.getActivity(this, 0, intent3,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
PendingIntent.FLAG_UPDATE_CURRENT | MeditationAssistant.extraPendingIntentFlags());
|
||||
|
||||
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
|
||||
.setOngoing(true)
|
||||
|
@ -1591,20 +1591,20 @@ public class MeditationAssistant extends Application {
|
|||
// intent.putExtra("notificationButton", "notification");
|
||||
// intent.putExtra("notificationButton", "");
|
||||
PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
PendingIntent.FLAG_UPDATE_CURRENT | MeditationAssistant.extraPendingIntentFlags());
|
||||
|
||||
Intent intent2 = new Intent(this, MainActivity.class);
|
||||
// intent2.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
||||
intent2.setAction("notificationPause");
|
||||
PendingIntent pIntentPause = PendingIntent.getActivity(this, 0, intent2,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
PendingIntent.FLAG_UPDATE_CURRENT | MeditationAssistant.extraPendingIntentFlags());
|
||||
|
||||
Intent intent3 = new Intent(this, MainActivity.class);
|
||||
// intent3.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
||||
// intent3.putExtra("notificationButton", "end");
|
||||
intent3.setAction("notificationEnd");
|
||||
PendingIntent pIntentEnd = PendingIntent.getActivity(this, 0, intent3,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
PendingIntent.FLAG_UPDATE_CURRENT | MeditationAssistant.extraPendingIntentFlags());
|
||||
|
||||
String streaktext = "";
|
||||
if (getMeditationStreak().get(0) > 1) {
|
||||
|
@ -2643,4 +2643,11 @@ public class MeditationAssistant extends Application {
|
|||
super.attachBaseContext(base);
|
||||
MultiDex.install(this);
|
||||
}
|
||||
|
||||
public static int extraPendingIntentFlags() {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
|
||||
return 0;
|
||||
}
|
||||
return PendingIntent.FLAG_MUTABLE;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -57,7 +57,7 @@ public class WidgetPresetProvider extends AppWidgetProvider {
|
|||
clickintent.putExtra("widgetid", widgetId);
|
||||
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(
|
||||
context, widgetId, clickintent, 0);
|
||||
context, widgetId, clickintent, MeditationAssistant.extraPendingIntentFlags());
|
||||
updateViews.setOnClickPendingIntent(R.id.layWidget, pendingIntent);
|
||||
updateViews.setOnClickPendingIntent(R.id.txtWidgetPresetText, pendingIntent);
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ public class WidgetStreakService extends Service {
|
|||
Intent clickintent = new Intent(getApplicationContext(), MainActivity.class);
|
||||
clickintent.setAction("widgetclick");
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(
|
||||
getApplicationContext(), 0, clickintent, 0);
|
||||
getApplicationContext(), 0, clickintent, MeditationAssistant.extraPendingIntentFlags());
|
||||
updateViews.setOnClickPendingIntent(R.id.layWidget, pendingIntent);
|
||||
updateViews.setOnClickPendingIntent(R.id.txtWidgetStreakDays, pendingIntent);
|
||||
updateViews.setOnClickPendingIntent(R.id.txtWidgetStreakText, pendingIntent);
|
||||
|
|
|
@ -5,7 +5,7 @@ buildscript {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.2.0'
|
||||
classpath 'com.android.tools.build:gradle:7.2.2'
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue