diff --git a/app/src/main/java/com/example/sprout/refactor/api/RegistrationService.java b/app/src/main/java/com/example/sprout/refactor/api/RegistrationService.java index a23ddd0..9d5bb07 100644 --- a/app/src/main/java/com/example/sprout/refactor/api/RegistrationService.java +++ b/app/src/main/java/com/example/sprout/refactor/api/RegistrationService.java @@ -5,6 +5,7 @@ import io.reactivex.Observable; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; +import retrofit2.http.GET; import retrofit2.http.POST; /** @@ -23,4 +24,10 @@ @FormUrlEncoded @POST("accounts") Observable registration(@Field("userName") String userName); + + /** + * アカウント取得 + */ + @GET("accounts/{userId}") + Observable getAccount(@Field("userId") int userId); } diff --git a/app/src/main/java/com/example/sprout/refactor/model/ModelLocator.java b/app/src/main/java/com/example/sprout/refactor/model/ModelLocator.java index 78e4a4e..157f11d 100644 --- a/app/src/main/java/com/example/sprout/refactor/model/ModelLocator.java +++ b/app/src/main/java/com/example/sprout/refactor/model/ModelLocator.java @@ -1,5 +1,6 @@ package com.example.sprout.refactor.model; +import com.example.sprout.refactor.model.entity.Account; import com.example.sprout.refactor.repository.RegistrationRepository; import com.example.sprout.refactor.repository.RoomRepository; @@ -17,20 +18,15 @@ return ourInstance; } - private RegistrationRepository registrationRepository = null; - private RoomRepository roomRepository = null; + // Apiを管理するクラス群 + private RegistrationRepository registrationRepository = new RegistrationRepository(); + private RoomRepository roomRepository = new RoomRepository(); + + // Model一覧 + private Account account = new Account(); + private RegistrationModel registrationModel = new RegistrationModel(this.registrationRepository); private ModelLocator() { - this.registrationRepository = new RegistrationRepository(); - this.roomRepository = new RoomRepository(); - } - - public RegistrationRepository getRegistrationRepository() { - return registrationRepository; - } - - public RoomRepository getRoomRepository() { - return roomRepository; } private static final HashMap showcase = new HashMap<>(); @@ -55,4 +51,20 @@ public static void setModel(Tag tag, Object model) { showcase.put(tag, model); } + + public RegistrationRepository getRegistrationRepository() { + return registrationRepository; + } + + public RoomRepository getRoomRepository() { + return roomRepository; + } + + public Account getAccount() { + return account; + } + + public RegistrationModel getRegistrationModel() { + return registrationModel; + } } diff --git a/app/src/main/java/com/example/sprout/refactor/model/RegistrationModel.java b/app/src/main/java/com/example/sprout/refactor/model/RegistrationModel.java new file mode 100644 index 0000000..79ce8a7 --- /dev/null +++ b/app/src/main/java/com/example/sprout/refactor/model/RegistrationModel.java @@ -0,0 +1,51 @@ +package com.example.sprout.refactor.model; + +import com.example.sprout.refactor.model.entity.Account; +import com.example.sprout.refactor.repository.RegistrationRepository; + +import io.reactivex.Observable; +import io.reactivex.schedulers.Schedulers; +import io.reactivex.subjects.BehaviorSubject; +import io.reactivex.subjects.Subject; + +/** + * Accountを管理するクラス + * Created by matsumoto_k on 2017/12/14. + */ + +public class RegistrationModel { + + private final Subject accountSubject = BehaviorSubject.create().toSerialized(); + private final Subject errorSubject = BehaviorSubject.create().toSerialized(); + private RegistrationRepository registrationRepository = null; + + public RegistrationModel(RegistrationRepository registrationRepository) { + this.registrationRepository = registrationRepository; + } + + public void registration(String userName) { + registrationRepository.registration(userName) + .subscribeOn(Schedulers.computation()) + .subscribe( + account -> accountSubject.onNext(account), + error -> errorSubject.onNext(error) + ); + } + + public void get(int userId) { + registrationRepository.getAccount(userId) + .subscribeOn(Schedulers.computation()) + .subscribe( + account -> accountSubject.onNext(account), + error -> errorSubject.onNext(error) + ); + } + + public Observable getAccountObservable() { + return accountSubject.hide(); + } + + public Observable getErrorSubject() { + return errorSubject.hide(); + } +} 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 63ec1d2..fa47bd4 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 @@ -5,9 +5,6 @@ import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import io.reactivex.Observable; -import io.reactivex.schedulers.Schedulers; -import io.reactivex.subjects.PublishSubject; -import io.reactivex.subjects.Subject; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; @@ -19,8 +16,6 @@ public class RegistrationRepository extends Repository { private RegistrationService registrationService = null; - private Subject registrationSubject = PublishSubject.create().toSerialized(); - private Subject registrationErrorSubject = PublishSubject.create().toSerialized(); public RegistrationRepository() { this.registrationService = new Retrofit @@ -39,23 +34,17 @@ * @param userName * @return */ - public void registration(String userName) { - registrationService.registration(userName) - .subscribeOn(Schedulers.computation()) - .subscribe(account -> { - //通信成功時 - registrationSubject.onNext(account); - }, - error -> { - registrationErrorSubject.onNext(error); - }); + public Observable registration(String userName) { + return registrationService.registration(userName); } - public Observable getRegistrationObservable() { - return registrationSubject.hide(); - } - - public Observable getRegistrationErrorObservable() { - return registrationErrorSubject.hide(); + /** + * アカウントの取得 + * + * @param userId + * @return + */ + public Observable getAccount(int userId) { + return registrationService.getAccount(userId); } } \ 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 bcfbe0a..156a2e5 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 @@ -10,8 +10,8 @@ import com.example.sprout.refactor.messengers.ToastMessage; import com.example.sprout.refactor.messengers.ToastMessenger; import com.example.sprout.refactor.model.ModelLocator; +import com.example.sprout.refactor.model.RegistrationModel; import com.example.sprout.refactor.model.entity.Account; -import com.example.sprout.refactor.repository.RegistrationRepository; import com.example.sprout.refactor.util.PreferenceUtil; import io.reactivex.Observable; @@ -26,14 +26,13 @@ public class RegistrationViewModel extends BaseViewModel { private ObservableField editUserName = new ObservableField<>(""); - private RegistrationRepository registrationRepository = ModelLocator.getModel(ModelLocator.Tag.REGISTRATION_REPOSITORY, RegistrationRepository.class); + private RegistrationModel registrationModel = ModelLocator.get().getRegistrationModel(); private ToastMessenger toastMessanger = new ToastMessenger(); private NavigationMessenger navigationMessenger = new NavigationMessenger(); private PreferenceUtil preferenceUtil = PreferenceUtil.getInstance(); private CompositeDisposable subscriptions = new CompositeDisposable(); public RegistrationViewModel() { - this.registrationRepository = ModelLocator.getModel(ModelLocator.Tag.REGISTRATION_REPOSITORY, RegistrationRepository.class); // 既にアカウント登録されていたらされていたらルーム一覧に画面遷移する if (preferenceUtil.getBoolean(PreferenceUtil.Key.REGISTERED, false)) { navigationMessenger.navigateTo(new NavigationMessage(NavigationMessage.Type.Start, RoomListActivity.class)); @@ -45,26 +44,19 @@ public void onResume() { super.onResume(); subscriptions.add( - registrationRepository.getRegistrationObservable() + registrationModel.getAccountObservable() .observeOn(AndroidSchedulers.mainThread()) .subscribe(account -> { - }) - ); - subscriptions.add( - registrationRepository.getRegistrationObservable() - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(account -> { - ModelLocator.getModel(ModelLocator.Tag.ACCOUNT, Account.class).setAccount(account); preferenceUtil.saveInt(PreferenceUtil.Key.USER_ID, account.getUserID()); preferenceUtil.saveBoolean(PreferenceUtil.Key.REGISTERED, true); toastMessanger.showToast(new ToastMessage(Sprout.get().getResources().getString(R.string.success_registration), ToastMessage.Length.LONG)); navigationMessenger.navigateTo(new NavigationMessage(NavigationMessage.Type.Start, RoomListActivity.class)); navigationMessenger.navigateTo(new NavigationMessage(NavigationMessage.Type.Finsih)); } - )) - ; + ) + ); subscriptions.add( - registrationRepository.getRegistrationErrorObservable() + registrationModel.getErrorSubject() .observeOn(AndroidSchedulers.mainThread()) .subscribe(error -> { toastMessanger.showToast(new ToastMessage(Sprout.get().getResources().getString(R.string.fail_registration), ToastMessage.Length.LONG)); @@ -88,7 +80,7 @@ toastMessanger.showToast(new ToastMessage(Sprout.get().getResources().getString(R.string.empty_name), ToastMessage.Length.SHORT)); return; } - registrationRepository.registration(userName); + registrationModel.registration(userName); }