diff options
author | Daniel Lublin <daniel@lublin.se> | 2022-02-22 09:13:54 +0300 |
---|---|---|
committer | Daniel Lublin <daniel@lublin.se> | 2022-02-22 09:13:54 +0300 |
commit | e06bace8288ec33de504e95d0fd6d57bfe1701a2 (patch) | |
tree | dee507c2fb519b33cae61c2b80f906e2a2b03282 | |
parent | bb7f370c19f4ed944da36a572a9b11e3d8d7f162 (diff) |
Bump to SDK 31 while we're at it; fix apparent new issues
6 files changed, 55 insertions, 29 deletions
diff --git a/app/build.gradle b/app/build.gradle index d1dabd1..6a08687 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -57,7 +57,7 @@ android { defaultConfig { minSdkVersion 14 - targetSdkVersion 30 + targetSdkVersion 31 multiDexEnabled true applicationId "se.lublin.mumla" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 30b8373..1570822 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -31,6 +31,7 @@ android:maxSdkVersion="29" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> + <uses-permission android:name="android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.BLUETOOTH" /> @@ -51,9 +52,11 @@ <!-- requestLegacyExternalStorage still true: we keep using old code if Android < 30 --> <activity android:name=".wizard.WizardActivity" /> + <activity android:name=".preference.Preferences" - android:parentActivityName=".app.MumlaActivity"> + android:parentActivityName=".app.MumlaActivity" + android:exported="false"> <intent-filter> <action android:name="se.lublin.mumla.app.PREFS_GENERAL" /> @@ -88,7 +91,8 @@ <activity android:name=".app.MumlaActivity" android:label="@string/app_name" - android:launchMode="singleTop" > + android:launchMode="singleTop" + android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> @@ -112,36 +116,46 @@ </intent-filter> </activity> - <activity android:name=".preference.CertificateSelectActivity" - android:theme="@style/Base.Theme.AppCompat.Light.Dialog"> + <activity + android:name=".preference.CertificateSelectActivity" + android:theme="@style/Base.Theme.AppCompat.Light.Dialog" + android:exported="false"> <intent-filter> <action android:name="se.lublin.mumla.app.CERTIFICATE_SELECT" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> - <activity android:name=".preference.CertificateImportActivity" - android:theme="@style/Base.Theme.AppCompat.Light.Dialog"> + <activity + android:name=".preference.CertificateImportActivity" + android:theme="@style/Base.Theme.AppCompat.Light.Dialog" + android:exported="false"> <intent-filter> <action android:name="se.lublin.mumla.app.CERTIFICATE_IMPORT" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> - <activity android:name=".preference.CertificateExportActivity" - android:theme="@style/Base.Theme.AppCompat.Light.Dialog"> + <activity + android:name=".preference.CertificateExportActivity" + android:theme="@style/Base.Theme.AppCompat.Light.Dialog" + android:exported="false"> <intent-filter> <action android:name="se.lublin.mumla.app.CERTIFICATE_EXPORT" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> - <activity android:name=".preference.CertificateGenerateActivity" - android:theme="@style/Base.Theme.AppCompat.Light.Dialog"> + <activity + android:name=".preference.CertificateGenerateActivity" + android:theme="@style/Base.Theme.AppCompat.Light.Dialog" + android:exported="false"> <intent-filter> <action android:name="se.lublin.mumla.app.CERTIFICATE_GENERATE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> - <activity android:name=".preference.ServerCertificateClearActivity" - android:theme="@style/Base.Theme.AppCompat.Light.Dialog"> + <activity + android:name=".preference.ServerCertificateClearActivity" + android:theme="@style/Base.Theme.AppCompat.Light.Dialog" + android:exported="false"> <intent-filter> <action android:name="se.lublin.mumla.app.CLEAR_SERVER_CERTIFICATES" /> <category android:name="android.intent.category.DEFAULT" /> diff --git a/app/src/main/java/se/lublin/mumla/service/MumlaConnectionNotification.java b/app/src/main/java/se/lublin/mumla/service/MumlaConnectionNotification.java index c3b5c09..46834ec 100644 --- a/app/src/main/java/se/lublin/mumla/service/MumlaConnectionNotification.java +++ b/app/src/main/java/se/lublin/mumla/service/MumlaConnectionNotification.java @@ -17,6 +17,9 @@ package se.lublin.mumla.service; +import static android.app.PendingIntent.FLAG_CANCEL_CURRENT; +import static android.app.PendingIntent.FLAG_IMMUTABLE; + import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; @@ -161,19 +164,20 @@ public class MumlaConnectionNotification { builder.addAction(R.drawable.ic_action_microphone, mService.getString(R.string.mute), PendingIntent.getBroadcast(mService, 1, - muteIntent, PendingIntent.FLAG_CANCEL_CURRENT)); + muteIntent, FLAG_CANCEL_CURRENT | FLAG_IMMUTABLE)); builder.addAction(R.drawable.ic_action_audio, mService.getString(R.string.deafen), PendingIntent.getBroadcast(mService, 1, - deafenIntent, PendingIntent.FLAG_CANCEL_CURRENT)); + deafenIntent, FLAG_CANCEL_CURRENT | FLAG_IMMUTABLE)); builder.addAction(R.drawable.ic_action_channels, mService.getString(R.string.overlay), PendingIntent.getBroadcast(mService, 2, - overlayIntent, PendingIntent.FLAG_CANCEL_CURRENT)); + overlayIntent, FLAG_CANCEL_CURRENT | FLAG_IMMUTABLE)); } Intent channelListIntent = new Intent(mService, MumlaActivity.class); channelListIntent.putExtra(MumlaActivity.EXTRA_DRAWER_FRAGMENT, DrawerAdapter.ITEM_SERVER); // FLAG_CANCEL_CURRENT ensures that the extra always gets sent. - PendingIntent pendingIntent = PendingIntent.getActivity(mService, 0, channelListIntent, PendingIntent.FLAG_CANCEL_CURRENT); + PendingIntent pendingIntent = PendingIntent.getActivity(mService, 0, + channelListIntent, FLAG_CANCEL_CURRENT | FLAG_IMMUTABLE); builder.setContentIntent(pendingIntent); Notification notification = builder.build(); diff --git a/app/src/main/java/se/lublin/mumla/service/MumlaMessageNotification.java b/app/src/main/java/se/lublin/mumla/service/MumlaMessageNotification.java index 2786096..0201551 100644 --- a/app/src/main/java/se/lublin/mumla/service/MumlaMessageNotification.java +++ b/app/src/main/java/se/lublin/mumla/service/MumlaMessageNotification.java @@ -17,6 +17,9 @@ package se.lublin.mumla.service; +import static android.app.PendingIntent.FLAG_CANCEL_CURRENT; +import static android.app.PendingIntent.FLAG_IMMUTABLE; + import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; @@ -72,7 +75,8 @@ public class MumlaMessageNotification { Intent channelListIntent = new Intent(mContext, MumlaActivity.class); channelListIntent.putExtra(MumlaActivity.EXTRA_DRAWER_FRAGMENT, DrawerAdapter.ITEM_SERVER); // FLAG_CANCEL_CURRENT ensures that the extra always gets sent. - PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, channelListIntent, PendingIntent.FLAG_CANCEL_CURRENT); + PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, + channelListIntent, FLAG_CANCEL_CURRENT | FLAG_IMMUTABLE); String channelId = ""; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { diff --git a/app/src/main/java/se/lublin/mumla/service/MumlaReconnectNotification.java b/app/src/main/java/se/lublin/mumla/service/MumlaReconnectNotification.java index 796f1ea..767586a 100644 --- a/app/src/main/java/se/lublin/mumla/service/MumlaReconnectNotification.java +++ b/app/src/main/java/se/lublin/mumla/service/MumlaReconnectNotification.java @@ -17,6 +17,9 @@ package se.lublin.mumla.service; +import static android.app.PendingIntent.FLAG_CANCEL_CURRENT; +import static android.app.PendingIntent.FLAG_IMMUTABLE; + import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; @@ -105,22 +108,20 @@ public class MumlaReconnectNotification { builder.setTicker(mContext.getString(R.string.mumlaDisconnected)); Intent dismissIntent = new Intent(BROADCAST_DISMISS); - builder.setDeleteIntent(PendingIntent.getBroadcast(mContext, 2, dismissIntent, - PendingIntent.FLAG_CANCEL_CURRENT)); + builder.setDeleteIntent(PendingIntent.getBroadcast(mContext, 2, + dismissIntent, FLAG_CANCEL_CURRENT | FLAG_IMMUTABLE)); if (autoReconnect) { Intent cancelIntent = new Intent(BROADCAST_CANCEL_RECONNECT); builder.addAction(R.drawable.ic_action_delete_dark, - mContext.getString(R.string.cancel_reconnect), - PendingIntent.getBroadcast(mContext, 2, - cancelIntent, PendingIntent.FLAG_CANCEL_CURRENT)); + mContext.getString(R.string.cancel_reconnect), PendingIntent.getBroadcast(mContext, 2, + cancelIntent, FLAG_CANCEL_CURRENT | FLAG_IMMUTABLE)); builder.setOngoing(true); } else { Intent reconnectIntent = new Intent(BROADCAST_RECONNECT); builder.addAction(R.drawable.ic_action_move, - mContext.getString(R.string.reconnect), - PendingIntent.getBroadcast(mContext, 2, - reconnectIntent, PendingIntent.FLAG_CANCEL_CURRENT)); + mContext.getString(R.string.reconnect), PendingIntent.getBroadcast(mContext, 2, + reconnectIntent, FLAG_CANCEL_CURRENT | FLAG_IMMUTABLE)); } NotificationManagerCompat nmc = NotificationManagerCompat.from(mContext); diff --git a/app/src/main/java/se/lublin/mumla/service/MumlaService.java b/app/src/main/java/se/lublin/mumla/service/MumlaService.java index 9ea2207..dd3f24b 100644 --- a/app/src/main/java/se/lublin/mumla/service/MumlaService.java +++ b/app/src/main/java/se/lublin/mumla/service/MumlaService.java @@ -499,9 +499,12 @@ public class MumlaService extends HumlaService implements @Override public void onOverlayToggled() { - // ditch notification shade/panel to make overlay presence/permission request visible - Intent close = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); - getApplicationContext().sendBroadcast(close); + // Ditch notification shade/panel to make overlay presence/permission request visible. + // But on Android 12 that's no longer allowed. + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { + Intent close = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); + getApplicationContext().sendBroadcast(close); + } if (!mChannelOverlay.isShown()) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { |