diff --git a/app/src/main/java/com/example/sprout/refactor/activity/RoomInputKeyActivity.java b/app/src/main/java/com/example/sprout/refactor/activity/RoomInputKeyActivity.java index 115f5a1..ef65af5 100644 --- a/app/src/main/java/com/example/sprout/refactor/activity/RoomInputKeyActivity.java +++ b/app/src/main/java/com/example/sprout/refactor/activity/RoomInputKeyActivity.java @@ -1,15 +1,10 @@ package com.example.sprout.refactor.activity; -import android.content.Intent; import android.databinding.DataBindingUtil; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.widget.Toast; import com.example.sprout.R; import com.example.sprout.databinding.RfActivityRoomInputKeyBinding; -import com.example.sprout.refactor.common.ActivityEvent; -import com.example.sprout.refactor.contract.ViewContract; import com.example.sprout.refactor.viewmodel.RoomInputKeyViewModel; /** @@ -17,7 +12,7 @@ * * @author matsumoto_k */ -public class RoomInputKeyActivity extends AppCompatActivity implements ViewContract { +public class RoomInputKeyActivity extends BaseActivity { private RfActivityRoomInputKeyBinding binding = null; private RoomInputKeyViewModel roomInputKeyViewModel = null; @@ -26,32 +21,14 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.rf_activity_room_input_key); - roomInputKeyViewModel = new RoomInputKeyViewModel((ViewContract) this); + roomInputKeyViewModel = new RoomInputKeyViewModel(); binding.setViewModel(roomInputKeyViewModel); getLifecycle().addObserver(roomInputKeyViewModel); } @Override - public void startActivity(ActivityEvent event) { - switch (event) { - case ROOM_MAIN: - startActivity(new Intent(RoomInputKeyActivity.this, RoomMainActivity.class)); - break; - } - } - - @Override - public void finishActivity() { - finish(); - } - - @Override - public void showShortToast(String message) { - Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); - } - - @Override - public void showLongToast(String message) { - Toast.makeText(this, message, Toast.LENGTH_LONG).show(); + protected void onResume() { + super.onResume(); + addUiObserver(roomInputKeyViewModel); } } diff --git a/app/src/main/java/com/example/sprout/refactor/model/RoomResponseModel.java b/app/src/main/java/com/example/sprout/refactor/model/RoomResponseModel.java index 6ee33a0..3a34899 100644 --- a/app/src/main/java/com/example/sprout/refactor/model/RoomResponseModel.java +++ b/app/src/main/java/com/example/sprout/refactor/model/RoomResponseModel.java @@ -29,8 +29,21 @@ .subscribe( roomResponse -> { if (roomResponse.canEnter()) { - preferenceUtil.saveInt(PreferenceUtil.Key.ROOM_ID, roomResponse.getRoom().getRoomId()); - preferenceUtil.saveInt(PreferenceUtil.Key.MEMBER_ID, roomResponse.getMemberId()); + roomResopnseSubject.onNext(roomResponse); + } + }, + error -> { + errorSubject.onNext(new Error(error)); + } + ); + } + + public void enterRoomWithKey(int roomId, int userId, String key) { + roomRepository.enterRoomWithKey(roomId, userId, key) + .subscribeOn(Schedulers.computation()) + .subscribe( + roomResponse -> { + if (roomResponse.canEnter()) { roomResopnseSubject.onNext(roomResponse); } }, @@ -54,7 +67,13 @@ } public Observable getRoomResopnseObservable() { - return roomResopnseSubject.hide(); + return roomResopnseSubject + .hide() + .doOnNext(roomResponse -> { + preferenceUtil.saveInt(PreferenceUtil.Key.ROOM_ID, roomResponse.getRoom().getRoomId()); + preferenceUtil.saveInt(PreferenceUtil.Key.MEMBER_ID, roomResponse.getMemberId()); + } + ); } public Observable getErrorObservable() { diff --git a/app/src/main/java/com/example/sprout/refactor/viewmodel/RoomInputKeyViewModel.java b/app/src/main/java/com/example/sprout/refactor/viewmodel/RoomInputKeyViewModel.java index 9bcc836..e9887ff 100644 --- a/app/src/main/java/com/example/sprout/refactor/viewmodel/RoomInputKeyViewModel.java +++ b/app/src/main/java/com/example/sprout/refactor/viewmodel/RoomInputKeyViewModel.java @@ -2,12 +2,11 @@ import android.databinding.ObservableField; -import com.example.sprout.refactor.common.ActivityEvent; -import com.example.sprout.refactor.contract.ViewContract; +import com.example.sprout.refactor.activity.RoomMainActivity; +import com.example.sprout.refactor.messengers.NavigationMessage; +import com.example.sprout.refactor.messengers.ToastMessage; import com.example.sprout.refactor.model.ModelLocator; -import com.example.sprout.refactor.model.entity.RoomResponse; -import com.example.sprout.refactor.notification.Observer; -import com.example.sprout.refactor.repository.RoomRepository; +import com.example.sprout.refactor.model.RoomResponseModel; import com.example.sprout.refactor.util.PreferenceUtil; /** @@ -17,59 +16,54 @@ */ public class RoomInputKeyViewModel extends BaseViewModel { - private RoomRepository roomRepository = null; - private ViewContract viewContract = null; + private RoomResponseModel roomResponseModel = ModelLocator.get().getRoomResponseModel(); private ObservableField pass = new ObservableField<>(""); - private Observer observer = null; - public RoomInputKeyViewModel(ViewContract viewContract) { - this.roomRepository = ModelLocator.getModel(ModelLocator.Tag.ROOM_REPOSITORY, RoomRepository.class); - this.viewContract = viewContract; - - observer = new Observer() { - @Override - public void notify(RoomResponse roomResponse) { - if (roomResponse.canEnter()) { - ModelLocator.setModel(ModelLocator.Tag.RoomResponse, roomResponse); - viewContract.startActivity(ActivityEvent.ROOM_MAIN); - } else { - viewContract.showShortToast("入室に失敗しました"); - } - } - - @Override - public void error(Throwable throwable) { - viewContract.showShortToast("入室に失敗しました"); - } - }; + public RoomInputKeyViewModel() { } @Override public void onResume() { super.onResume(); - roomRepository.getRoomResponseObservable().addObserver(observer); + subscriptions.add( + roomResponseModel.getRoomResopnseObservable() + .subscribe( + roomResponse -> { + if (roomResponse.canEnter()) { + navigationMessenger.navigateTo(new NavigationMessage(NavigationMessage.Type.Start, RoomMainActivity.class)); + navigationMessenger.navigateTo(new NavigationMessage(NavigationMessage.Type.Finsih)); + } + } + ) + ); + subscriptions.add( + roomResponseModel.getErrorObservable() + .subscribe(error -> { + switch (error.type()) { + case CONFLICT: + toastMessanger.showToast(new ToastMessage("入室に失敗しました", ToastMessage.Length.SHORT)); + break; + case NetworkError: + toastMessanger.showToast(new ToastMessage("電波の良い場所に移動してもう一度試して下さい", ToastMessage.Length.SHORT)); + } + }) + ); } - @Override - public void onPause() { - super.onPause(); - roomRepository.getRoomResponseObservable().removeObserver(observer); - } - - public void onClickEnter(String pass) { - if (pass.isEmpty()) { - viewContract.showShortToast("パスワードを入力して下さい"); + public void onClickEnter(String key) { + if (key.isEmpty()) { + toastMessanger.showToast(new ToastMessage("パスワードを入力して下さい", ToastMessage.Length.SHORT)); } else { - roomRepository.enterRoomWithKey( + roomResponseModel.enterRoomWithKey( PreferenceUtil.getInstance().getInt(PreferenceUtil.Key.ROOM_ID), PreferenceUtil.getInstance().getInt(PreferenceUtil.Key.USER_ID), - pass + key ); } } public void onClickBack() { - viewContract.finishActivity(); + navigationMessenger.navigateTo(new NavigationMessage(NavigationMessage.Type.Finsih)); } public ObservableField getPass() {