diff --git a/app/src/main/java/com/example/sprout/refactor/activity/RoomCreateActivity.java b/app/src/main/java/com/example/sprout/refactor/activity/RoomCreateActivity.java index 4d853aa..746e6f1 100644 --- a/app/src/main/java/com/example/sprout/refactor/activity/RoomCreateActivity.java +++ b/app/src/main/java/com/example/sprout/refactor/activity/RoomCreateActivity.java @@ -8,47 +8,68 @@ import com.example.sprout.R; import com.example.sprout.databinding.RfActivityRoomCreateBinding; -import com.example.sprout.refactor.common.ActivityEvent; -import com.example.sprout.refactor.contract.ViewContract; import com.example.sprout.refactor.viewmodel.RoomCreateViewModel; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.CompositeDisposable; +import io.reactivex.schedulers.Schedulers; + /** * ルーム作成のActivity * * @author matsumoto_k */ -public class RoomCreateActivity extends AppCompatActivity implements ViewContract { +public class RoomCreateActivity extends AppCompatActivity { + + private CompositeDisposable subscriptions = null; + private RoomCreateViewModel roomCreateViewModel = null; + private RfActivityRoomCreateBinding binding = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - RfActivityRoomCreateBinding binding = DataBindingUtil.setContentView(this, R.layout.rf_activity_room_create); - RoomCreateViewModel roomCreateViewModel = new RoomCreateViewModel((ViewContract) this); + binding = DataBindingUtil.setContentView(this, R.layout.rf_activity_room_create); + roomCreateViewModel = new RoomCreateViewModel(); binding.setViewModel(roomCreateViewModel); getLifecycle().addObserver(roomCreateViewModel); } @Override - public void startActivity(ActivityEvent event) { - switch (event) { - case ROOM_MAIN: - startActivity(new Intent(RoomCreateActivity.this, RoomMainActivity.class)); - break; - } + protected void onResume() { + super.onResume(); + subscribe(); } - @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(); + private void subscribe() { + subscriptions = new CompositeDisposable(); + // トーストの購読 + subscriptions.add( + roomCreateViewModel.getToastMessanger() + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(toastMessage -> { + switch (toastMessage.getLength()) { + case SHORT: + Toast.makeText(this, toastMessage.getMessage(), Toast.LENGTH_SHORT).show(); + break; + case LONG: + Toast.makeText(this, toastMessage.getMessage(), Toast.LENGTH_LONG).show(); + break; + } + }) + ); + // 画面遷移の購読 + subscriptions.add( + roomCreateViewModel.getNavigationMessenger() + .observeOn(Schedulers.computation()) + .subscribe(navigationMessage -> { + switch (navigationMessage.getType()) { + case Start: + startActivity(new Intent(RoomCreateActivity.this, navigationMessage.getClazz())); + break; + case Finsih: + finish(); + } + }) + ); } } 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 8d90b99..4526041 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 @@ -36,6 +36,19 @@ ); } + public void createRoom(int userId, String roomName, String key) { + roomRepository.createRoom(userId, roomName, key) + .subscribeOn(Schedulers.computation()) + .subscribe( + roomResponse -> { + this.roomResopnseSubject.onNext(roomResponse); + }, + error -> { + errorSubject.onNext(error); + } + ); + } + public Observable getRoomResopnseObservable() { return roomResopnseSubject.hide(); } diff --git a/app/src/main/java/com/example/sprout/refactor/viewmodel/RoomCreateViewModel.java b/app/src/main/java/com/example/sprout/refactor/viewmodel/RoomCreateViewModel.java index 72ec0c1..f195645 100644 --- a/app/src/main/java/com/example/sprout/refactor/viewmodel/RoomCreateViewModel.java +++ b/app/src/main/java/com/example/sprout/refactor/viewmodel/RoomCreateViewModel.java @@ -3,14 +3,16 @@ import android.databinding.ObservableBoolean; import android.databinding.ObservableField; -import com.example.sprout.refactor.common.ActivityEvent; +import com.example.sprout.refactor.activity.RoomMainActivity; import com.example.sprout.refactor.contract.ViewContract; +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; +import io.reactivex.disposables.CompositeDisposable; + /** * ルーム作成のViewModel * @@ -18,65 +20,67 @@ */ public class RoomCreateViewModel extends BaseViewModel { - private RoomRepository roomRepository = null; - private ViewContract viewContract = null; + private RoomResponseModel roomResponseModel = ModelLocator.get().getRoomResponseModel(); private ObservableField roomName = new ObservableField<>(""); private ObservableField pass = new ObservableField<>(""); private ObservableBoolean hasPass = new ObservableBoolean(false); - private Observer observer = null; + private CompositeDisposable subscriptions = null; + private PreferenceUtil preferenceUtil = PreferenceUtil.getInstance(); - public RoomCreateViewModel(ViewContract viewContract) { - this.roomRepository = ModelLocator.getModel(ModelLocator.Tag.ROOM_REPOSITORY, RoomRepository.class); - this.viewContract = viewContract; - - observer = new Observer() { - @Override - public void notify(RoomResponse roomResponse) { - ModelLocator.setModel(ModelLocator.Tag.RoomResponse, roomResponse); - PreferenceUtil.getInstance().saveInt(PreferenceUtil.Key.ROOM_ID, roomResponse.getRoom().getRoomId()); - PreferenceUtil.getInstance().saveInt(PreferenceUtil.Key.MEMBER_ID, roomResponse.getMemberId()); - viewContract.showShortToast("ルームを作成しました"); - viewContract.startActivity(ActivityEvent.ROOM_MAIN); - viewContract.finishActivity(); - } - - @Override - public void error(Throwable throwable) { - viewContract.showShortToast("ルーム作成に失敗しました"); - } - }; + public RoomCreateViewModel() { } @Override public void onResume() { super.onResume(); - roomRepository.getRoomResponseObservable().addObserver(observer); + subscriptions = new CompositeDisposable(); + subscriptions.add( + roomResponseModel.getRoomResopnseObservable() + .subscribe( + roomResponse -> { + preferenceUtil.saveInt(PreferenceUtil.Key.ROOM_ID, roomResponse.getRoom().getRoomId()); + preferenceUtil.saveInt(PreferenceUtil.Key.MEMBER_ID, roomResponse.getMemberId()); + toastMessanger.showToast(new ToastMessage("ルームを作成しました", ToastMessage.Length.SHORT)); + navigationMessenger.navigateTo(new NavigationMessage(NavigationMessage.Type.Start, RoomMainActivity.class)); + navigationMessenger.navigateTo(new NavigationMessage(NavigationMessage.Type.Finsih)); + } + ) + ); } @Override public void onPause() { super.onPause(); - roomRepository.getRoomResponseObservable().removeObserver(observer); + subscriptions.dispose(); } - public void onClickCreate(String userName, String pass) { + /** + * ルーム作成クリック + * + * @param roomName + * @param pass + */ + public void onClickCreate(String roomName, String pass) { + // パスワードのチェックが入っている時 if (hasPass.get()) { - if (userName.isEmpty() || pass.isEmpty()) { - viewContract.showShortToast("必要項目を入力して下さい"); + if (roomName.isEmpty() || pass.isEmpty()) { + toastMessanger.showToast(new ToastMessage("必要項目を入力して下さい", ToastMessage.Length.SHORT)); return; } - roomRepository.createRoom(PreferenceUtil.getInstance().getInt(PreferenceUtil.Key.USER_ID), userName, pass); - } else { - if (userName.isEmpty()) { - viewContract.showShortToast("必要項目を入力して下さい"); + roomResponseModel.createRoom(PreferenceUtil.getInstance().getInt(PreferenceUtil.Key.USER_ID), roomName, pass); + } + // パスワードのチェックが入っていない時 + else { + if (roomName.isEmpty()) { + toastMessanger.showToast(new ToastMessage("必要項目を入力して下さい", ToastMessage.Length.SHORT)); return; } - roomRepository.createRoom(PreferenceUtil.getInstance().getInt(PreferenceUtil.Key.USER_ID), userName, null); + roomResponseModel.createRoom(PreferenceUtil.getInstance().getInt(PreferenceUtil.Key.USER_ID), roomName, null); } } public void onClickBack() { - viewContract.finishActivity(); + navigationMessenger.navigateTo(new NavigationMessage(NavigationMessage.Type.Finsih)); } public ObservableField getRoomName() { diff --git a/app/src/main/java/com/example/sprout/refactor/viewmodel/RoomListViewModel.java b/app/src/main/java/com/example/sprout/refactor/viewmodel/RoomListViewModel.java index 0416a38..66037db 100644 --- a/app/src/main/java/com/example/sprout/refactor/viewmodel/RoomListViewModel.java +++ b/app/src/main/java/com/example/sprout/refactor/viewmodel/RoomListViewModel.java @@ -11,6 +11,7 @@ import com.example.sprout.refactor.activity.RoomMainActivity; import com.example.sprout.refactor.adapter.RoomListAdapter; 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.RoomResponseModel; import com.example.sprout.refactor.model.RoomsModel; @@ -34,7 +35,7 @@ private RoomResponseModel roomResponseModel = ModelLocator.get().getRoomResponseModel(); private RoomListAdapter adapter = null; private RoomListAdapter.OnItemClickedListener listener = null; - private CompositeDisposable subscriptions = new CompositeDisposable(); + private CompositeDisposable subscriptions = null; public RoomListViewModel(RoomListAdapter adapter) { @@ -53,6 +54,7 @@ @Override public void onResume() { super.onResume(); + subscriptions = new CompositeDisposable(); subscriptions.add( roomsModel.getRoomsObservable() .observeOn(AndroidSchedulers.mainThread()) @@ -74,6 +76,14 @@ } ) ); + subscriptions.add( + roomResponseModel.getErrorObservable() + .subscribe( + error -> { + toastMessanger.showToast(new ToastMessage("入室に失敗しました", ToastMessage.Length.SHORT)); + } + ) + ); roomsModel.get(); }