Add force legacy QR scanning switch.
This commit is contained in:
parent
4c44f1ee02
commit
d6108fbbf3
3 changed files with 29 additions and 9 deletions
|
@ -18,6 +18,7 @@ import androidx.core.view.ViewCompat;
|
|||
|
||||
import org.signal.qr.QrScannerView;
|
||||
import org.signal.qr.kitkat.ScanListener;
|
||||
import org.thoughtcrime.securesms.util.FeatureFlags;
|
||||
import org.thoughtcrime.securesms.util.LifecycleDisposable;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
|
||||
|
@ -56,7 +57,7 @@ public class DeviceAddFragment extends LoggingFragment {
|
|||
});
|
||||
}
|
||||
|
||||
scannerView.start(getViewLifecycleOwner());
|
||||
scannerView.start(getViewLifecycleOwner(), FeatureFlags.useQrLegacyScan());
|
||||
|
||||
lifecycleDisposable.bindTo(getViewLifecycleOwner());
|
||||
|
||||
|
|
|
@ -97,6 +97,7 @@ public final class FeatureFlags {
|
|||
private static final String USE_FCM_FOREGROUND_SERVICE = "android.useFcmForegroundService.3";
|
||||
private static final String STORIES_AUTO_DOWNLOAD_MAXIMUM = "android.stories.autoDownloadMaximum";
|
||||
private static final String GIFT_BADGES = "android.giftBadges.3";
|
||||
private static final String USE_QR_LEGACY_SCAN = "android.qr.legacy_scan";
|
||||
|
||||
/**
|
||||
* We will only store remote values for flags in this set. If you want a flag to be controllable
|
||||
|
@ -146,7 +147,8 @@ public final class FeatureFlags {
|
|||
PAYMENTS_COUNTRY_BLOCKLIST,
|
||||
USE_FCM_FOREGROUND_SERVICE,
|
||||
STORIES_AUTO_DOWNLOAD_MAXIMUM,
|
||||
GIFT_BADGES
|
||||
GIFT_BADGES,
|
||||
USE_QR_LEGACY_SCAN
|
||||
);
|
||||
|
||||
@VisibleForTesting
|
||||
|
@ -206,7 +208,8 @@ public final class FeatureFlags {
|
|||
USE_HARDWARE_AEC_IF_OLD,
|
||||
USE_AEC3,
|
||||
PAYMENTS_COUNTRY_BLOCKLIST,
|
||||
USE_FCM_FOREGROUND_SERVICE
|
||||
USE_FCM_FOREGROUND_SERVICE,
|
||||
USE_QR_LEGACY_SCAN
|
||||
);
|
||||
|
||||
/**
|
||||
|
@ -510,6 +513,10 @@ public final class FeatureFlags {
|
|||
return getBoolean(GIFT_BADGES, Environment.IS_STAGING);
|
||||
}
|
||||
|
||||
public static boolean useQrLegacyScan() {
|
||||
return getBoolean(USE_QR_LEGACY_SCAN, false);
|
||||
}
|
||||
|
||||
/** Only for rendering debug info. */
|
||||
public static synchronized @NonNull Map<String, Object> getMemoryValues() {
|
||||
return new TreeMap<>(REMOTE_VALUES);
|
||||
|
|
|
@ -8,6 +8,7 @@ import androidx.lifecycle.DefaultLifecycleObserver
|
|||
import androidx.lifecycle.LifecycleOwner
|
||||
import io.reactivex.rxjava3.core.Observable
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
import org.signal.core.util.logging.Log
|
||||
|
||||
/**
|
||||
* View for starting up a camera and scanning a QR-Code. Safe to use on an API version and
|
||||
|
@ -19,15 +20,15 @@ class QrScannerView @JvmOverloads constructor(
|
|||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0
|
||||
) : FrameLayout(context, attrs, defStyleAttr), ScannerView {
|
||||
) : FrameLayout(context, attrs, defStyleAttr) {
|
||||
|
||||
private val scannerView: ScannerView
|
||||
private var scannerView: ScannerView? = null
|
||||
private val qrDataPublish: PublishSubject<String> = PublishSubject.create()
|
||||
|
||||
val qrData: Observable<String> = qrDataPublish
|
||||
|
||||
init {
|
||||
val scannerView: FrameLayout = if (Build.VERSION.SDK_INT >= 21) {
|
||||
private fun initScannerView(forceLegacy: Boolean) {
|
||||
val scannerView: FrameLayout = if (Build.VERSION.SDK_INT >= 21 && !forceLegacy) {
|
||||
ScannerView21(context) { qrDataPublish.onNext(it) }
|
||||
} else {
|
||||
ScannerView19(context) { qrDataPublish.onNext(it) }
|
||||
|
@ -39,12 +40,23 @@ class QrScannerView @JvmOverloads constructor(
|
|||
this.scannerView = (scannerView as ScannerView)
|
||||
}
|
||||
|
||||
override fun start(lifecycleOwner: LifecycleOwner) {
|
||||
scannerView.start(lifecycleOwner)
|
||||
fun start(lifecycleOwner: LifecycleOwner, forceLegacy: Boolean = false) {
|
||||
if (scannerView != null) {
|
||||
Log.w(TAG, "Attempt to start scanning that has already started")
|
||||
return
|
||||
}
|
||||
|
||||
initScannerView(forceLegacy)
|
||||
|
||||
scannerView?.start(lifecycleOwner)
|
||||
lifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver {
|
||||
override fun onDestroy(owner: LifecycleOwner) {
|
||||
qrDataPublish.onComplete()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val TAG = Log.tag(QrScannerView::class.java)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue