From 498b7fee691122015efb6134ae102031311cfdcb Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Tue, 13 Dec 2022 12:52:04 -0400 Subject: [PATCH] Remove SingleLiveEvent from EditAboutViewModel. --- .../profiles/manage/EditAboutFragment.java | 13 ++++++-- .../profiles/manage/EditAboutViewModel.java | 31 ++++++++++--------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditAboutFragment.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditAboutFragment.java index 8f527b957..d49190ed0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditAboutFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditAboutFragment.java @@ -24,11 +24,12 @@ import androidx.recyclerview.widget.RecyclerView; import org.signal.core.util.BreakIteratorCompat; import org.signal.core.util.EditTextUtil; +import org.signal.core.util.StringUtil; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.emoji.EmojiUtil; import org.thoughtcrime.securesms.reactions.any.ReactWithAnyEmojiBottomSheetDialogFragment; import org.thoughtcrime.securesms.recipients.Recipient; -import org.signal.core.util.StringUtil; +import org.thoughtcrime.securesms.util.LifecycleDisposable; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.adapter.AlwaysChangedDiffUtil; import org.thoughtcrime.securesms.util.text.AfterTextChanged; @@ -64,6 +65,7 @@ public class EditAboutFragment extends Fragment implements ManageProfileActivity private TextView countView; private CircularProgressMaterialButton saveButton; private EditAboutViewModel viewModel; + private LifecycleDisposable lifecycleDisposable; private String selectedEmoji; @@ -79,6 +81,9 @@ public class EditAboutFragment extends Fragment implements ManageProfileActivity this.countView = view.findViewById(R.id.edit_about_count); this.saveButton = view.findViewById(R.id.edit_about_save); + lifecycleDisposable = new LifecycleDisposable(); + lifecycleDisposable.bindTo(getViewLifecycleOwner()); + initializeViewModel(); view.findViewById(R.id.toolbar) @@ -146,8 +151,10 @@ public class EditAboutFragment extends Fragment implements ManageProfileActivity private void initializeViewModel() { this.viewModel = new ViewModelProvider(this).get(EditAboutViewModel.class); - viewModel.getSaveState().observe(getViewLifecycleOwner(), this::presentSaveState); - viewModel.getEvents().observe(getViewLifecycleOwner(), this::presentEvent); + lifecycleDisposable.addAll( + viewModel.getSaveState().subscribe(this::presentSaveState), + viewModel.getEvents().subscribe(this::presentEvent) + ); } private void presentCount(@NonNull String aboutBody) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditAboutViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditAboutViewModel.java index aa9c2c33c..f451dc9bd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditAboutViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditAboutViewModel.java @@ -3,42 +3,43 @@ package org.thoughtcrime.securesms.profiles.manage; import android.content.Context; import androidx.annotation.NonNull; -import androidx.lifecycle.LiveData; -import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; -import org.thoughtcrime.securesms.util.SingleLiveEvent; +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.subjects.BehaviorSubject; +import io.reactivex.rxjava3.subjects.PublishSubject; public final class EditAboutViewModel extends ViewModel { private final ManageProfileRepository repository; - private final MutableLiveData saveState; - private final SingleLiveEvent events; + private final BehaviorSubject saveState; + private final PublishSubject events; public EditAboutViewModel() { this.repository = new ManageProfileRepository(); - this.saveState = new MutableLiveData<>(SaveState.IDLE); - this.events = new SingleLiveEvent<>(); + this.saveState = BehaviorSubject.createDefault(SaveState.IDLE); + this.events = PublishSubject.create(); } - @NonNull LiveData getSaveState() { - return saveState; + @NonNull Observable getSaveState() { + return saveState.observeOn(AndroidSchedulers.mainThread()); } - @NonNull LiveData getEvents() { - return events; + @NonNull Observable getEvents() { + return events.observeOn(AndroidSchedulers.mainThread()); } void onSaveClicked(@NonNull Context context, @NonNull String about, @NonNull String emoji) { - saveState.setValue(SaveState.IN_PROGRESS); + saveState.onNext(SaveState.IN_PROGRESS); repository.setAbout(context, about, emoji, result -> { switch (result) { case SUCCESS: - saveState.postValue(SaveState.DONE); + saveState.onNext(SaveState.DONE); break; case FAILURE_NETWORK: - saveState.postValue(SaveState.IDLE); - events.postValue(Event.NETWORK_FAILURE); + saveState.onNext(SaveState.IDLE); + events.onNext(Event.NETWORK_FAILURE); break; } });