mirror of
https://github.com/oxen-io/session-android.git
synced 2025-06-09 14:18:34 +00:00
Disable default CameraX initializer.
CameraX was initializing Camera2 API stuff on API < 21, causing crashes at boot. To handle this, we disable the default ContentProvider initializer and initialize things ourselves for appropriate API levels.
This commit is contained in:
parent
23b4a9b191
commit
6715a89a25
@ -616,6 +616,11 @@
|
|||||||
android:authorities="org.thoughtcrime.securesms.database.stickerpack"
|
android:authorities="org.thoughtcrime.securesms.database.stickerpack"
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
|
|
||||||
|
<provider android:name="androidx.camera.camera2.impl.Camera2Initializer"
|
||||||
|
android:authorities="${applicationId}.camerax-init"
|
||||||
|
android:exported="false"
|
||||||
|
android:enabled="false" />
|
||||||
|
|
||||||
<receiver android:name=".service.BootReceiver">
|
<receiver android:name=".service.BootReceiver">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.BOOT_COMPLETED"/>
|
<action android:name="android.intent.action.BOOT_COMPLETED"/>
|
||||||
|
@ -17,6 +17,9 @@
|
|||||||
package org.thoughtcrime.securesms;
|
package org.thoughtcrime.securesms;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
|
|
||||||
|
import androidx.camera.camera2.Camera2AppConfig;
|
||||||
|
import androidx.camera.core.CameraX;
|
||||||
import androidx.lifecycle.DefaultLifecycleObserver;
|
import androidx.lifecycle.DefaultLifecycleObserver;
|
||||||
import androidx.lifecycle.LifecycleOwner;
|
import androidx.lifecycle.LifecycleOwner;
|
||||||
import androidx.lifecycle.ProcessLifecycleOwner;
|
import androidx.lifecycle.ProcessLifecycleOwner;
|
||||||
@ -126,6 +129,7 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc
|
|||||||
initializePendingMessages();
|
initializePendingMessages();
|
||||||
initializeUnidentifiedDeliveryAbilityRefresh();
|
initializeUnidentifiedDeliveryAbilityRefresh();
|
||||||
initializeBlobProvider();
|
initializeBlobProvider();
|
||||||
|
initializeCameraX();
|
||||||
NotificationChannels.create(this);
|
NotificationChannels.create(this);
|
||||||
ProcessLifecycleOwner.get().getLifecycle().addObserver(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
|
@Override
|
||||||
protected void attachBaseContext(Context base) {
|
protected void attachBaseContext(Context base) {
|
||||||
super.attachBaseContext(DynamicLanguageContextWrapper.updateContext(base, TextSecurePreferences.getLanguage(base)));
|
super.attachBaseContext(DynamicLanguageContextWrapper.updateContext(base, TextSecurePreferences.getLanguage(base)));
|
||||||
|
@ -1,14 +1,17 @@
|
|||||||
package org.thoughtcrime.securesms.mediasend;
|
package org.thoughtcrime.securesms.mediasend;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.camera.core.CameraX;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
|
|
||||||
public interface CameraFragment {
|
public interface CameraFragment {
|
||||||
|
|
||||||
|
@SuppressLint("RestrictedApi")
|
||||||
static Fragment newInstance() {
|
static Fragment newInstance() {
|
||||||
if (Build.VERSION.SDK_INT >= 21) {
|
if (Build.VERSION.SDK_INT >= 21 && CameraX.isInitialized()) {
|
||||||
return CameraXFragment.newInstance();
|
return CameraXFragment.newInstance();
|
||||||
} else {
|
} else {
|
||||||
return Camera1Fragment.newInstance();
|
return Camera1Fragment.newInstance();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user