diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index d213a5dab5..b06617ec3d 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -616,6 +616,11 @@
android:authorities="org.thoughtcrime.securesms.database.stickerpack"
android:exported="false" />
+
+
diff --git a/src/org/thoughtcrime/securesms/ApplicationContext.java b/src/org/thoughtcrime/securesms/ApplicationContext.java
index 5266d98935..bad17e383f 100644
--- a/src/org/thoughtcrime/securesms/ApplicationContext.java
+++ b/src/org/thoughtcrime/securesms/ApplicationContext.java
@@ -17,6 +17,9 @@
package org.thoughtcrime.securesms;
import android.annotation.SuppressLint;
+
+import androidx.camera.camera2.Camera2AppConfig;
+import androidx.camera.core.CameraX;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ProcessLifecycleOwner;
@@ -126,6 +129,7 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc
initializePendingMessages();
initializeUnidentifiedDeliveryAbilityRefresh();
initializeBlobProvider();
+ initializeCameraX();
NotificationChannels.create(this);
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
}
@@ -357,6 +361,17 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc
});
}
+ @SuppressLint("RestrictedApi")
+ private void initializeCameraX() {
+ if (Build.VERSION.SDK_INT >= 21) {
+ try {
+ CameraX.init(this, Camera2AppConfig.create(this));
+ } catch (Throwable t) {
+ Log.w(TAG, "Failed to initialize CameraX.");
+ }
+ }
+ }
+
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(DynamicLanguageContextWrapper.updateContext(base, TextSecurePreferences.getLanguage(base)));
diff --git a/src/org/thoughtcrime/securesms/mediasend/CameraFragment.java b/src/org/thoughtcrime/securesms/mediasend/CameraFragment.java
index bc518cbc75..198d5c192d 100644
--- a/src/org/thoughtcrime/securesms/mediasend/CameraFragment.java
+++ b/src/org/thoughtcrime/securesms/mediasend/CameraFragment.java
@@ -1,14 +1,17 @@
package org.thoughtcrime.securesms.mediasend;
+import android.annotation.SuppressLint;
import android.os.Build;
import androidx.annotation.NonNull;
+import androidx.camera.core.CameraX;
import androidx.fragment.app.Fragment;
public interface CameraFragment {
+ @SuppressLint("RestrictedApi")
static Fragment newInstance() {
- if (Build.VERSION.SDK_INT >= 21) {
+ if (Build.VERSION.SDK_INT >= 21 && CameraX.isInitialized()) {
return CameraXFragment.newInstance();
} else {
return Camera1Fragment.newInstance();