diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index dbd91920ad..ae8fe4c852 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -85,6 +85,13 @@
+
+
+
+
+
+
+
+ android:name=".service.KeyCachingService"
+ android:foregroundServiceType="remoteMessaging"/>
@@ -1162,14 +1172,17 @@
@@ -1365,7 +1379,7 @@
+ android:foregroundServiceType="dataSync" />
diff --git a/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActivity.java b/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActivity.java
index afe98f5a0e..fd060db91d 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActivity.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActivity.java
@@ -9,6 +9,7 @@ import android.os.Bundle;
import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import org.greenrobot.eventbus.EventBus;
@@ -295,7 +296,7 @@ public abstract class PassphraseRequiredActivity extends BaseActivity implements
};
IntentFilter filter = new IntentFilter(KeyCachingService.CLEAR_KEY_EVENT);
- registerReceiver(clearKeyReceiver, filter, KeyCachingService.KEY_PERMISSION, null);
+ ContextCompat.registerReceiver(this, clearKeyReceiver, filter, KeyCachingService.KEY_PERMISSION, null, ContextCompat.RECEIVER_NOT_EXPORTED);
}
private void removeClearKeyReceiver(Context context) {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt
index 1439e5e183..133a91c746 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt
@@ -3389,12 +3389,12 @@ class ConversationFragment :
}
}
- requireActivity().registerReceiver(pinnedShortcutReceiver, IntentFilter(ACTION_PINNED_SHORTCUT))
+ ContextCompat.registerReceiver(requireActivity(), pinnedShortcutReceiver, IntentFilter(ACTION_PINNED_SHORTCUT), ContextCompat.RECEIVER_EXPORTED)
}
viewModel.getContactPhotoIcon(requireContext(), Glide.with(this@ConversationFragment))
.subscribe { infoCompat ->
- val intent = Intent(ACTION_PINNED_SHORTCUT)
+ val intent = Intent(ACTION_PINNED_SHORTCUT).apply { `package` = requireContext().packageName }
val callback = PendingIntent.getBroadcast(requireContext(), 902, intent, PendingIntentFlags.mutable())
ShortcutManagerCompat.requestPinShortcut(requireContext(), infoCompat, callback.intentSender)
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/SmsRetrieverReceiver.java b/app/src/main/java/org/thoughtcrime/securesms/registration/SmsRetrieverReceiver.java
index 6ca552d2ba..53d78b742b 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/registration/SmsRetrieverReceiver.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/registration/SmsRetrieverReceiver.java
@@ -8,6 +8,7 @@ import android.content.IntentFilter;
import android.os.Bundle;
import androidx.annotation.NonNull;
+import androidx.core.content.ContextCompat;
import com.google.android.gms.auth.api.phone.SmsRetriever;
import com.google.android.gms.common.api.CommonStatusCodes;
@@ -34,7 +35,7 @@ public class SmsRetrieverReceiver extends BroadcastReceiver {
public void registerReceiver() {
Log.d(TAG, "Registering SMS retriever receiver");
- context.registerReceiver(this, new IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION));
+ ContextCompat.registerReceiver(context, this, new IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION), ContextCompat.RECEIVER_EXPORTED);
}
public void unregisterReceiver() {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ActiveCallManager.kt b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ActiveCallManager.kt
index c4f47e18a1..027c9c0fac 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ActiveCallManager.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ActiveCallManager.kt
@@ -274,7 +274,7 @@ class ActiveCallManager(
@get:RequiresApi(30)
override val serviceType: Int
- get() = ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA or ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE
+ get() = ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC
private var hangUpRtcOnDeviceCallAnswered: PhoneStateListener? = null
private var notification: Notification? = null
diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcCallService.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcCallService.java
index 4089f26c12..2cc363907f 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcCallService.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcCallService.java
@@ -315,7 +315,7 @@ public final class WebRtcCallService extends Service implements SignalAudioManag
}
if (Build.VERSION.SDK_INT >= 30) {
- startForeground(notificationId, notification, ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA | ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE);
+ startForeground(notificationId, notification, ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC);
} else {
startForeground(notificationId, notification);
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/AlarmSleepTimer.java b/app/src/main/java/org/thoughtcrime/securesms/util/AlarmSleepTimer.java
index 733a10674e..7fbbe91e6e 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/util/AlarmSleepTimer.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/util/AlarmSleepTimer.java
@@ -10,6 +10,7 @@ import android.os.Build;
import android.os.SystemClock;
import androidx.core.app.AlarmManagerCompat;
+import androidx.core.content.ContextCompat;
import org.signal.core.util.PendingIntentFlags;
import org.signal.core.util.logging.Log;
@@ -42,7 +43,7 @@ public class AlarmSleepTimer implements SleepTimer {
try {
String actionName = buildActionName(actionId);
- context.registerReceiver(alarmReceiver, new IntentFilter(actionName));
+ ContextCompat.registerReceiver(context, alarmReceiver, new IntentFilter(actionName), ContextCompat.RECEIVER_NOT_EXPORTED);
long startTime = System.currentTimeMillis();
alarmReceiver.setAlarm(sleepDuration, actionName);
@@ -72,7 +73,9 @@ public class AlarmSleepTimer implements SleepTimer {
private static final String WAKE_UP_THREAD_ACTION = "org.thoughtcrime.securesms.util.AlarmSleepTimer.AlarmReceiver.WAKE_UP_THREAD";
private void setAlarm(long millis, String action) {
- final Intent intent = new Intent(action);
+ final Intent intent = new Intent(action);
+ intent.setPackage(context.getPackageName());
+
final PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntentFlags.mutable());
final AlarmManager alarmManager = ServiceUtil.getAlarmManager(context);
diff --git a/constants.gradle.kts b/constants.gradle.kts
index 3c9af2ae4e..f98824f703 100644
--- a/constants.gradle.kts
+++ b/constants.gradle.kts
@@ -1,6 +1,6 @@
val signalBuildToolsVersion by extra("34.0.0")
val signalCompileSdkVersion by extra("android-34")
-val signalTargetSdkVersion by extra(33)
+val signalTargetSdkVersion by extra(34)
val signalMinSdkVersion by extra(21)
val signalJavaVersion by extra(JavaVersion.VERSION_17)
val signalKotlinJvmTarget by extra("17")
\ No newline at end of file
diff --git a/core-util/src/main/java/org/signal/core/util/PendingIntentFlags.kt b/core-util/src/main/java/org/signal/core/util/PendingIntentFlags.kt
index 7f119405b6..507e737bee 100644
--- a/core-util/src/main/java/org/signal/core/util/PendingIntentFlags.kt
+++ b/core-util/src/main/java/org/signal/core/util/PendingIntentFlags.kt
@@ -23,9 +23,13 @@ object PendingIntentFlags {
return mutable() or PendingIntent.FLAG_CANCEL_CURRENT
}
+ /**
+ * Flag indicating that this [PendingIntent] can be used only once. After [PendingIntent.send] is called on it,
+ * it will be automatically canceled for you and any future attempt to send through it will fail.
+ */
@JvmStatic
fun oneShot(): Int {
- return mutable() or PendingIntent.FLAG_ONE_SHOT
+ return immutable() or PendingIntent.FLAG_ONE_SHOT
}
/**
diff --git a/device-transfer/lib/src/main/AndroidManifest.xml b/device-transfer/lib/src/main/AndroidManifest.xml
index 091975b220..ca62ee0ac7 100644
--- a/device-transfer/lib/src/main/AndroidManifest.xml
+++ b/device-transfer/lib/src/main/AndroidManifest.xml
@@ -9,11 +9,13 @@
+