Skip to content

Commit

Permalink
[Fix] App crash when Adding notification timer with empty name
Browse files Browse the repository at this point in the history
  • Loading branch information
rh-id committed Apr 6, 2022
1 parent d47a090 commit 4cf6354
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 16 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package m.co.rh.id.a_flash_deck.base.rx;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

import io.reactivex.rxjava3.subjects.BehaviorSubject;

public class SerialBehaviorSubject<E extends Serializable> implements Serializable {
private transient BehaviorSubject<E> mSubject;

public SerialBehaviorSubject() {
mSubject = BehaviorSubject.create();
}

public SerialBehaviorSubject(E element) {
mSubject = BehaviorSubject.createDefault(element);
}

public BehaviorSubject<E> getSubject() {
return mSubject;
}

public E getValue() {
return mSubject.getValue();
}

public void onNext(E element) {
mSubject.onNext(element);
}

private void writeObject(ObjectOutputStream out) throws IOException {
out.writeObject(mSubject.getValue());
}

@SuppressWarnings("unchecked")
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
E element = (E) in.readObject();
if (element == null) {
mSubject = BehaviorSubject.create();
} else {
mSubject = BehaviorSubject.createDefault(element);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,14 @@
import java.util.ArrayList;

import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.subjects.BehaviorSubject;
import m.co.rh.id.a_flash_deck.base.constants.Routes;
import m.co.rh.id.a_flash_deck.base.entity.Deck;
import m.co.rh.id.a_flash_deck.base.entity.NotificationTimer;
import m.co.rh.id.a_flash_deck.base.exception.ValidationException;
import m.co.rh.id.a_flash_deck.base.provider.IStatefulViewProvider;
import m.co.rh.id.a_flash_deck.base.provider.navigator.CommonNavConfig;
import m.co.rh.id.a_flash_deck.base.rx.RxDisposer;
import m.co.rh.id.a_flash_deck.base.rx.SerialBehaviorSubject;
import m.co.rh.id.a_flash_deck.timer.R;
import m.co.rh.id.a_flash_deck.timer.provider.command.NewNotificationTimerCmd;
import m.co.rh.id.a_flash_deck.timer.provider.command.UpdateNotificationTimerCmd;
Expand All @@ -61,12 +61,13 @@ public class NotificationTimerDetailSVDialog extends StatefulViewDialog<Activity
private transient Provider mSvProvider;
private String mTitle;
private NotificationTimer mNotificationTimer;
private transient BehaviorSubject<String> mNameSubject;
private SerialBehaviorSubject<String> mNameSubject;
private transient NewNotificationTimerCmd mNewNotificationTimerCmd;

@Override
protected void initState(Activity activity) {
super.initState(activity);
mNameSubject = new SerialBehaviorSubject<>();
Args args = Args.of(mNavRoute);
if (args != null && args.isUpdate()) {
mNotificationTimer = args.getNotificationTimer();
Expand Down Expand Up @@ -104,8 +105,9 @@ protected View createView(Activity activity, ViewGroup container) {
mNewNotificationTimerCmd = mSvProvider.get(NewNotificationTimerCmd.class);
}

mSvProvider.get(RxDisposer.class).add("createView_onNameChanged", mNameSubject.subscribe(
editTextName::setText));
mSvProvider.get(RxDisposer.class).add("createView_onNameChanged", mNameSubject.getSubject()
.subscribe(
editTextName::setText));
mSvProvider.get(RxDisposer.class).add("createView_onValidName",
mNewNotificationTimerCmd.getNameValid()
.subscribe(s -> {
Expand All @@ -127,10 +129,6 @@ public void dispose(Activity activity) {
}
mNavRoute = null;
mNotificationTimer = null;
if (mNameSubject != null) {
mNameSubject.onComplete();
mNameSubject = null;
}
mNewNotificationTimerCmd = null;
}

Expand All @@ -141,14 +139,8 @@ private String getSelectedDecks() {

private void setNameSubject() {
String name = mNotificationTimer.name;
if (mNameSubject == null) {
if (name == null) {
mNameSubject = BehaviorSubject.create();
} else {
mNameSubject = BehaviorSubject.createDefault(name);
}
} else {
mNameSubject.onNext(name);
if (name != null) {
mNameSubject.onNext(mNotificationTimer.name);
}
}

Expand Down

0 comments on commit 4cf6354

Please sign in to comment.