diff --git a/app/src/main/java/com/example/sprout/refactor/notification/Observable.java b/app/src/main/java/com/example/sprout/refactor/notification/Observable.java new file mode 100644 index 0000000..3fc1923 --- /dev/null +++ b/app/src/main/java/com/example/sprout/refactor/notification/Observable.java @@ -0,0 +1,35 @@ +package com.example.sprout.refactor.notification; + +import java.util.ArrayList; + +/** + * Observable + * + * @param 監視したいObject + * @author matsumoto_k + */ + +public class Observable { + + private ArrayList> observers = new ArrayList<>(); + + public void notifyObservers(T t) { + for (Observer observer : observers) { + observer.notify(t); + } + } + + public void notifyError(Throwable throwable) { + for (Observer observer : observers) { + observer.error(throwable); + } + } + + public void addObserver(Observer observer) { + observers.add(observer); + } + + public void removeObserver(Observer observer) { + observers.remove(observer); + } +} diff --git a/app/src/main/java/com/example/sprout/refactor/notification/Observer.java b/app/src/main/java/com/example/sprout/refactor/notification/Observer.java new file mode 100644 index 0000000..a2ee92d --- /dev/null +++ b/app/src/main/java/com/example/sprout/refactor/notification/Observer.java @@ -0,0 +1,13 @@ +package com.example.sprout.refactor.notification; + +/** + * Observer + * + * @param 監視させるObject + * @author matsumoto_k + */ +public abstract class Observer { + public abstract void notify(T t); + + public abstract void error(Throwable throwable); +} diff --git a/app/src/main/java/com/example/sprout/refactor/repository/RegistrationRepository.java b/app/src/main/java/com/example/sprout/refactor/repository/RegistrationRepository.java index 5d79da2..658cdc9 100644 --- a/app/src/main/java/com/example/sprout/refactor/repository/RegistrationRepository.java +++ b/app/src/main/java/com/example/sprout/refactor/repository/RegistrationRepository.java @@ -1,6 +1,7 @@ package com.example.sprout.refactor.repository; import com.example.sprout.refactor.api.SproutService; +import com.example.sprout.refactor.notification.Observable; import com.example.sprout.refactor.vo.Account; import retrofit2.Call; @@ -15,23 +16,28 @@ public class RegistrationRepository extends Repository { private SproutService sproutService = null; + private Observable accountObservable = new Observable<>(); public RegistrationRepository(SproutService sproutService) { this.sproutService = sproutService; } - public void registration(String userName, final Listener listener) { + public void registration(String userName) { Call task = sproutService.registration(userName); task.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { - listener.onSuccess(response.body()); + accountObservable.notifyObservers(response.body()); } @Override public void onFailure(Call call, Throwable t) { - listener.onFailure(t); + accountObservable.notifyError(t); } }); } + + public Observable getAccountObservable() { + return accountObservable; + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/sprout/refactor/viewmodel/RegistrationViewModel.java b/app/src/main/java/com/example/sprout/refactor/viewmodel/RegistrationViewModel.java index b81eeed..2c92402 100644 --- a/app/src/main/java/com/example/sprout/refactor/viewmodel/RegistrationViewModel.java +++ b/app/src/main/java/com/example/sprout/refactor/viewmodel/RegistrationViewModel.java @@ -4,8 +4,8 @@ import com.example.sprout.refactor.common.ActivityEvent; import com.example.sprout.refactor.contract.ViewContract; +import com.example.sprout.refactor.notification.Observer; import com.example.sprout.refactor.repository.RegistrationRepository; -import com.example.sprout.refactor.repository.Repository; import com.example.sprout.refactor.util.PreferenceUtil; import com.example.sprout.refactor.vo.Account; @@ -19,10 +19,28 @@ private ObservableField editUserName = new ObservableField<>(""); private ViewContract viewContract = null; private RegistrationRepository registrationRepository = null; + private Observer observer = null; public RegistrationViewModel(RegistrationRepository registrationRepository, ViewContract toastContract) { this.registrationRepository = registrationRepository; this.viewContract = toastContract; + observer = new Observer() { + @Override + public void notify(Account account) { + PreferenceUtil.getInstance().saveInt(PreferenceUtil.Key.USER_ID, account.getUserID()); + PreferenceUtil.getInstance().saveBoolean(PreferenceUtil.Key.REGISTERED, true); + viewContract.showShortToast("アカウントを作成しました"); + viewContract.startActivity(ActivityEvent.START_ROOM_LIST); + viewContract.finishActivity(); + } + + @Override + public void error(Throwable throwable) { + viewContract.showShortToast("アカウント作成に失敗しました"); + + } + }; + registrationRepository.getAccountObservable().addObserver(observer); } @Override @@ -34,26 +52,18 @@ } } + @Override + public void onDestroy() { + super.onDestroy(); + registrationRepository.getAccountObservable().removeObserver(observer); + } + public void onClickRegistration(String userName) { if (userName.isEmpty()) { viewContract.showShortToast("名前を入力して下さい"); return; } - registrationRepository.registration(userName, new Repository.Listener() { - @Override - public void onSuccess(Account account) { - PreferenceUtil.getInstance().saveInt(PreferenceUtil.Key.USER_ID, account.getUserID()); - PreferenceUtil.getInstance().saveBoolean(PreferenceUtil.Key.REGISTERED, true); - viewContract.showShortToast("アカウントを作成しました"); - viewContract.startActivity(ActivityEvent.START_ROOM_LIST); - viewContract.finishActivity(); - } - - @Override - public void onFailure(Throwable throwable) { - viewContract.showShortToast("アカウント作成に失敗しました"); - } - }); + registrationRepository.registration(userName); } public ObservableField getEditUserName() {