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.QrScannerView;
|
||||||
import org.signal.qr.kitkat.ScanListener;
|
import org.signal.qr.kitkat.ScanListener;
|
||||||
|
import org.thoughtcrime.securesms.util.FeatureFlags;
|
||||||
import org.thoughtcrime.securesms.util.LifecycleDisposable;
|
import org.thoughtcrime.securesms.util.LifecycleDisposable;
|
||||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
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());
|
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 USE_FCM_FOREGROUND_SERVICE = "android.useFcmForegroundService.3";
|
||||||
private static final String STORIES_AUTO_DOWNLOAD_MAXIMUM = "android.stories.autoDownloadMaximum";
|
private static final String STORIES_AUTO_DOWNLOAD_MAXIMUM = "android.stories.autoDownloadMaximum";
|
||||||
private static final String GIFT_BADGES = "android.giftBadges.3";
|
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
|
* 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,
|
PAYMENTS_COUNTRY_BLOCKLIST,
|
||||||
USE_FCM_FOREGROUND_SERVICE,
|
USE_FCM_FOREGROUND_SERVICE,
|
||||||
STORIES_AUTO_DOWNLOAD_MAXIMUM,
|
STORIES_AUTO_DOWNLOAD_MAXIMUM,
|
||||||
GIFT_BADGES
|
GIFT_BADGES,
|
||||||
|
USE_QR_LEGACY_SCAN
|
||||||
);
|
);
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
|
@ -206,7 +208,8 @@ public final class FeatureFlags {
|
||||||
USE_HARDWARE_AEC_IF_OLD,
|
USE_HARDWARE_AEC_IF_OLD,
|
||||||
USE_AEC3,
|
USE_AEC3,
|
||||||
PAYMENTS_COUNTRY_BLOCKLIST,
|
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);
|
return getBoolean(GIFT_BADGES, Environment.IS_STAGING);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean useQrLegacyScan() {
|
||||||
|
return getBoolean(USE_QR_LEGACY_SCAN, false);
|
||||||
|
}
|
||||||
|
|
||||||
/** Only for rendering debug info. */
|
/** Only for rendering debug info. */
|
||||||
public static synchronized @NonNull Map<String, Object> getMemoryValues() {
|
public static synchronized @NonNull Map<String, Object> getMemoryValues() {
|
||||||
return new TreeMap<>(REMOTE_VALUES);
|
return new TreeMap<>(REMOTE_VALUES);
|
||||||
|
|
|
@ -8,6 +8,7 @@ import androidx.lifecycle.DefaultLifecycleObserver
|
||||||
import androidx.lifecycle.LifecycleOwner
|
import androidx.lifecycle.LifecycleOwner
|
||||||
import io.reactivex.rxjava3.core.Observable
|
import io.reactivex.rxjava3.core.Observable
|
||||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
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
|
* 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,
|
context: Context,
|
||||||
attrs: AttributeSet? = null,
|
attrs: AttributeSet? = null,
|
||||||
defStyleAttr: Int = 0
|
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()
|
private val qrDataPublish: PublishSubject<String> = PublishSubject.create()
|
||||||
|
|
||||||
val qrData: Observable<String> = qrDataPublish
|
val qrData: Observable<String> = qrDataPublish
|
||||||
|
|
||||||
init {
|
private fun initScannerView(forceLegacy: Boolean) {
|
||||||
val scannerView: FrameLayout = if (Build.VERSION.SDK_INT >= 21) {
|
val scannerView: FrameLayout = if (Build.VERSION.SDK_INT >= 21 && !forceLegacy) {
|
||||||
ScannerView21(context) { qrDataPublish.onNext(it) }
|
ScannerView21(context) { qrDataPublish.onNext(it) }
|
||||||
} else {
|
} else {
|
||||||
ScannerView19(context) { qrDataPublish.onNext(it) }
|
ScannerView19(context) { qrDataPublish.onNext(it) }
|
||||||
|
@ -39,12 +40,23 @@ class QrScannerView @JvmOverloads constructor(
|
||||||
this.scannerView = (scannerView as ScannerView)
|
this.scannerView = (scannerView as ScannerView)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun start(lifecycleOwner: LifecycleOwner) {
|
fun start(lifecycleOwner: LifecycleOwner, forceLegacy: Boolean = false) {
|
||||||
scannerView.start(lifecycleOwner)
|
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 {
|
lifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver {
|
||||||
override fun onDestroy(owner: LifecycleOwner) {
|
override fun onDestroy(owner: LifecycleOwner) {
|
||||||
qrDataPublish.onComplete()
|
qrDataPublish.onComplete()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private val TAG = Log.tag(QrScannerView::class.java)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue