From d69d1c8967baf9f54744756168b7cfb559bb0327 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Fri, 27 May 2022 09:51:20 -0400 Subject: [PATCH] Fix IAE crash in link device transition. --- .../securesms/DeviceAddFragment.java | 22 ++++++++++++++----- .../securesms/DeviceLinkFragment.java | 2 ++ .../main/res/layout/device_add_fragment.xml | 2 -- .../main/res/layout/device_link_fragment.xml | 1 + 4 files changed, 20 insertions(+), 7 deletions(-) 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">