Remove SingleLiveEvent from EditAboutViewModel.

This commit is contained in:
Alex Hart 2022-12-13 12:52:04 -04:00 committed by Cody Henthorne
parent 3478e13d38
commit 498b7fee69
2 changed files with 26 additions and 18 deletions

View file

@ -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.<Toolbar>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) {

View file

@ -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> saveState;
private final SingleLiveEvent<Event> events;
private final BehaviorSubject<SaveState> saveState;
private final PublishSubject<Event> 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<SaveState> getSaveState() {
return saveState;
@NonNull Observable<SaveState> getSaveState() {
return saveState.observeOn(AndroidSchedulers.mainThread());
}
@NonNull LiveData<Event> getEvents() {
return events;
@NonNull Observable<Event> 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;
}
});