diff --git a/src/org/thoughtcrime/securesms/ApplicationContext.java b/src/org/thoughtcrime/securesms/ApplicationContext.java index 10fb4ee141..095deb2cd7 100644 --- a/src/org/thoughtcrime/securesms/ApplicationContext.java +++ b/src/org/thoughtcrime/securesms/ApplicationContext.java @@ -57,6 +57,8 @@ import org.thoughtcrime.securesms.logging.CustomSignalProtocolLogger; import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.logging.PersistentLogger; import org.thoughtcrime.securesms.logging.UncaughtExceptionLogger; +import org.thoughtcrime.securesms.mediasend.LegacyCameraModels; +import org.thoughtcrime.securesms.mediasend.camerax.CameraXUtil; import org.thoughtcrime.securesms.migrations.ApplicationMigrations; import org.thoughtcrime.securesms.notifications.MessageNotifier; import org.thoughtcrime.securesms.notifications.NotificationChannels; @@ -374,7 +376,7 @@ public class ApplicationContext extends MultiDexApplication implements DefaultLi @SuppressLint("RestrictedApi") private void initializeCameraX() { - if (Build.VERSION.SDK_INT >= 21) { + if (CameraXUtil.isSupported()) { new Thread(() -> { try { CameraX.init(this, Camera2AppConfig.create(this)); diff --git a/src/org/thoughtcrime/securesms/mediasend/CameraFragment.java b/src/org/thoughtcrime/securesms/mediasend/CameraFragment.java index 48c084dd64..afd384ac7e 100644 --- a/src/org/thoughtcrime/securesms/mediasend/CameraFragment.java +++ b/src/org/thoughtcrime/securesms/mediasend/CameraFragment.java @@ -7,13 +7,17 @@ import androidx.annotation.NonNull; import androidx.camera.core.CameraX; import androidx.fragment.app.Fragment; +import org.thoughtcrime.securesms.mediasend.camerax.CameraXUtil; + import java.io.FileDescriptor; +import java.util.HashSet; +import java.util.Set; public interface CameraFragment { @SuppressLint("RestrictedApi") static Fragment newInstance() { - if (Build.VERSION.SDK_INT >= 21 && CameraX.isInitialized()) { + if (CameraXUtil.isSupported() && CameraX.isInitialized()) { return CameraXFragment.newInstance(); } else { return Camera1Fragment.newInstance(); diff --git a/src/org/thoughtcrime/securesms/mediasend/LegacyCameraModels.java b/src/org/thoughtcrime/securesms/mediasend/LegacyCameraModels.java new file mode 100644 index 0000000000..c703af1f4f --- /dev/null +++ b/src/org/thoughtcrime/securesms/mediasend/LegacyCameraModels.java @@ -0,0 +1,20 @@ +package org.thoughtcrime.securesms.mediasend; + +import android.os.Build; + +import java.util.HashSet; +import java.util.Set; + +public final class LegacyCameraModels { + private static final Set LEGACY_MODELS = new HashSet() {{ + add("Pixel 4"); + add("Pixel 4 XL"); + }}; + + private LegacyCameraModels() { + } + + public static boolean isLegacyCameraModel() { + return LEGACY_MODELS.contains(Build.MODEL); + } +} diff --git a/src/org/thoughtcrime/securesms/mediasend/camerax/CameraXUtil.java b/src/org/thoughtcrime/securesms/mediasend/camerax/CameraXUtil.java index 8b4ed6dbac..f1fae6bcbd 100644 --- a/src/org/thoughtcrime/securesms/mediasend/camerax/CameraXUtil.java +++ b/src/org/thoughtcrime/securesms/mediasend/camerax/CameraXUtil.java @@ -25,6 +25,8 @@ import androidx.camera.core.ImageCapture; import androidx.camera.core.ImageProxy; import org.thoughtcrime.securesms.logging.Log; +import org.thoughtcrime.securesms.mediasend.LegacyCameraModels; +import org.thoughtcrime.securesms.migrations.LegacyMigrationJob; import org.thoughtcrime.securesms.util.Stopwatch; import java.io.ByteArrayOutputStream; @@ -80,6 +82,10 @@ public class CameraXUtil { return new ImageResult(data, width, height); } + public static boolean isSupported() { + return Build.VERSION.SDK_INT >= 21 && !LegacyCameraModels.isLegacyCameraModel(); + } + public static int toCameraDirectionInt(@Nullable CameraX.LensFacing facing) { if (facing == CameraX.LensFacing.FRONT) { return Camera.CameraInfo.CAMERA_FACING_FRONT;