diff --git a/app/src/main/java/org/thoughtcrime/securesms/DeviceAddFragment.java b/app/src/main/java/org/thoughtcrime/securesms/DeviceAddFragment.java
index 5d7e4ad1c..35e31f354 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/DeviceAddFragment.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/DeviceAddFragment.java
@@ -14,12 +14,16 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
+import androidx.core.view.ViewCompat;
import org.signal.qr.QrScannerView;
import org.signal.qr.kitkat.ScanListener;
import org.thoughtcrime.securesms.util.LifecycleDisposable;
import org.thoughtcrime.securesms.util.ViewUtil;
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.disposables.Disposable;
+
public class DeviceAddFragment extends LoggingFragment {
private final LifecycleDisposable lifecycleDisposable = new LifecycleDisposable();
@@ -34,6 +38,7 @@ public class DeviceAddFragment extends LoggingFragment {
this.overlay = container.findViewById(R.id.overlay);
QrScannerView scannerView = container.findViewById(R.id.scanner);
this.devicesImage = container.findViewById(R.id.devices);
+ ViewCompat.setTransitionName(devicesImage, "devices");
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
this.overlay.setOrientation(LinearLayout.HORIZONTAL);
@@ -61,11 +66,18 @@ public class DeviceAddFragment extends LoggingFragment {
scannerView.start(getViewLifecycleOwner());
lifecycleDisposable.bindTo(getViewLifecycleOwner());
- lifecycleDisposable.add(scannerView.getQrData().subscribe(qrData -> {
- if (scanListener != null) {
- scanListener.onQrDataFound(qrData);
- }
- }));
+
+ Disposable qrDisposable = scannerView
+ .getQrData()
+ .distinctUntilChanged()
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(qrData -> {
+ if (scanListener != null) {
+ scanListener.onQrDataFound(qrData);
+ }
+ });
+
+ lifecycleDisposable.add(qrDisposable);
return container;
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/DeviceLinkFragment.java b/app/src/main/java/org/thoughtcrime/securesms/DeviceLinkFragment.java
index 21f72c139..ab4e4bec7 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/DeviceLinkFragment.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/DeviceLinkFragment.java
@@ -9,6 +9,7 @@ import android.view.ViewGroup;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
+import androidx.core.view.ViewCompat;
import androidx.fragment.app.Fragment;
public class DeviceLinkFragment extends Fragment implements View.OnClickListener {
@@ -21,6 +22,7 @@ public class DeviceLinkFragment extends Fragment implements View.OnClickListener
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup viewGroup, Bundle bundle) {
this.container = (LinearLayout) inflater.inflate(R.layout.device_link_fragment, container, false);
this.container.findViewById(R.id.link_device).setOnClickListener(this);
+ ViewCompat.setTransitionName(container.findViewById(R.id.devices), "devices");
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
container.setOrientation(LinearLayout.HORIZONTAL);
diff --git a/app/src/main/res/layout/device_add_fragment.xml b/app/src/main/res/layout/device_add_fragment.xml
index 4b3482ec1..5af655f51 100644
--- a/app/src/main/res/layout/device_add_fragment.xml
+++ b/app/src/main/res/layout/device_add_fragment.xml
@@ -22,7 +22,6 @@
android:layout_height="match_parent"
android:layout_weight="1" />
-
-
diff --git a/app/src/main/res/layout/device_link_fragment.xml b/app/src/main/res/layout/device_link_fragment.xml
index 6f310f451..87e86ad01 100644
--- a/app/src/main/res/layout/device_link_fragment.xml
+++ b/app/src/main/res/layout/device_link_fragment.xml
@@ -6,6 +6,7 @@
android:gravity="center">