diff options
author | Daniel Lublin <daniel@lublin.se> | 2024-01-16 13:08:56 +0300 |
---|---|---|
committer | Daniel Lublin <daniel@lublin.se> | 2024-01-16 13:12:51 +0300 |
commit | 863e0201818e729fda43c18766b90afaff7ffc23 (patch) | |
tree | 91e9bb1ae14f0ece1779b2d37013e25e48bc72fe | |
parent | 6c8dd424dba702fc1a601f60ed37ae0ab459fccc (diff) |
Set foreground service type, required on SDK 34/UPSIDE_DOWN_CAKE/Android 14
6 files changed, 36 insertions, 7 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 839ad7a..51a5a44 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -image: docker.io/quite/android-sdk-ndk:6 +image: docker.io/quite/android-sdk-ndk:7 variables: # get those pesky submodules diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 05071bb..e461adc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,6 +23,7 @@ android:required="false" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> + <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" android:minSdkVersion="34" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission @@ -85,7 +86,8 @@ <service android:name=".service.MumlaService" android:exported="true" - android:enabled="true" /> + android:enabled="true" + android:foregroundServiceType="microphone" /> <activity android:name=".app.MumlaActivity" diff --git a/app/src/main/java/se/lublin/mumla/channel/ChannelListFragment.java b/app/src/main/java/se/lublin/mumla/channel/ChannelListFragment.java index 1bdeedf..24a87a8 100644 --- a/app/src/main/java/se/lublin/mumla/channel/ChannelListFragment.java +++ b/app/src/main/java/se/lublin/mumla/channel/ChannelListFragment.java @@ -17,6 +17,8 @@ package se.lublin.mumla.channel; +import static android.content.Context.RECEIVER_NOT_EXPORTED; + import android.app.Activity; import android.app.SearchManager; import android.content.BroadcastReceiver; @@ -27,6 +29,7 @@ import android.content.SharedPreferences; import android.database.CursorWrapper; import android.graphics.PorterDuff; import android.media.AudioManager; +import android.os.Build; import android.os.Bundle; import android.os.RemoteException; import android.preference.PreferenceManager; @@ -174,7 +177,11 @@ public class ChannelListFragment extends HumlaServiceFragment implements OnChann public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); registerForContextMenu(mChannelView); - getActivity().registerReceiver(mBluetoothReceiver, new IntentFilter(AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED)); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + getActivity().registerReceiver(mBluetoothReceiver, new IntentFilter(AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED), RECEIVER_NOT_EXPORTED); + } else { + getActivity().registerReceiver(mBluetoothReceiver, new IntentFilter(AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED)); + } } @Override 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 46834ec..64f180f 100644 --- a/app/src/main/java/se/lublin/mumla/service/MumlaConnectionNotification.java +++ b/app/src/main/java/se/lublin/mumla/service/MumlaConnectionNotification.java @@ -19,6 +19,8 @@ package se.lublin.mumla.service; import static android.app.PendingIntent.FLAG_CANCEL_CURRENT; import static android.app.PendingIntent.FLAG_IMMUTABLE; +import static android.content.Context.RECEIVER_NOT_EXPORTED; +import static android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE; import android.app.Notification; import android.app.NotificationChannel; @@ -29,6 +31,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.pm.ServiceInfo; import android.os.Build; import androidx.core.app.NotificationCompat; @@ -109,7 +112,11 @@ public class MumlaConnectionNotification { filter.addAction(BROADCAST_MUTE); filter.addAction(BROADCAST_OVERLAY); try { - mService.registerReceiver(mNotificationReceiver, filter); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + mService.registerReceiver(mNotificationReceiver, filter, RECEIVER_NOT_EXPORTED); + } else { + mService.registerReceiver(mNotificationReceiver, filter); + } } catch (IllegalArgumentException e) { // Thrown if receiver is already registered. e.printStackTrace(); @@ -181,7 +188,11 @@ public class MumlaConnectionNotification { builder.setContentIntent(pendingIntent); Notification notification = builder.build(); - mService.startForeground(NOTIFICATION_ID, notification); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + mService.startForeground(NOTIFICATION_ID, notification, FOREGROUND_SERVICE_TYPE_MICROPHONE); + } else { + mService.startForeground(NOTIFICATION_ID, notification); + } return notification; } 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 767586a..86c9f86 100644 --- a/app/src/main/java/se/lublin/mumla/service/MumlaReconnectNotification.java +++ b/app/src/main/java/se/lublin/mumla/service/MumlaReconnectNotification.java @@ -19,6 +19,7 @@ package se.lublin.mumla.service; import static android.app.PendingIntent.FLAG_CANCEL_CURRENT; import static android.app.PendingIntent.FLAG_IMMUTABLE; +import static android.content.Context.RECEIVER_NOT_EXPORTED; import android.app.NotificationChannel; import android.app.NotificationManager; @@ -81,7 +82,11 @@ public class MumlaReconnectNotification { filter.addAction(BROADCAST_RECONNECT); filter.addAction(BROADCAST_CANCEL_RECONNECT); try { - mContext.registerReceiver(mNotificationReceiver, filter); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + mContext.registerReceiver(mNotificationReceiver, filter, RECEIVER_NOT_EXPORTED); + } else { + mContext.registerReceiver(mNotificationReceiver, filter); + } } catch (IllegalArgumentException e) { // Thrown if receiver is already registered. e.printStackTrace(); 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 d20e5e5..c852dc6 100644 --- a/app/src/main/java/se/lublin/mumla/service/MumlaService.java +++ b/app/src/main/java/se/lublin/mumla/service/MumlaService.java @@ -357,7 +357,11 @@ public class MumlaService extends HumlaService implements setSelfMuteDeafState(mSettings.isMuted(), mSettings.isDeafened()); } - registerReceiver(mTalkReceiver, new IntentFilter(TalkBroadcastReceiver.BROADCAST_TALK)); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + registerReceiver(mTalkReceiver, new IntentFilter(TalkBroadcastReceiver.BROADCAST_TALK), RECEIVER_EXPORTED); + } else { + registerReceiver(mTalkReceiver, new IntentFilter(TalkBroadcastReceiver.BROADCAST_TALK)); + } if (mSettings.isHotCornerEnabled()) { mHotCorner.setShown(true); |