[add] Refactor RoomInputKeyActivity with rx
1 parent 099bb28 commit d3e7bfef30c6b6285eb7d4532ff4f2884c89cd46
KeijuMatsumoto authored on 22 Dec 2017
Showing 3 changed files
View
51
app/src/main/java/com/example/sprout/refactor/activity/RoomInputKeyActivity.java
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;
 
/**
* ルーム入室(key)のActivity
*
* @author matsumoto_k
*/
public class RoomInputKeyActivity extends AppCompatActivity implements ViewContract {
public class RoomInputKeyActivity extends BaseActivity {
 
private RfActivityRoomInputKeyBinding binding = null;
private RoomInputKeyViewModel roomInputKeyViewModel = null;
 
@Override
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);
}
}
View
44
app/src/main/java/com/example/sprout/refactor/model/RoomResponseModel.java
.subscribeOn(Schedulers.computation())
.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);
}
},
error -> {
);
}
 
public Observable<RoomResponse> 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<Error> getErrorObservable() {
return errorSubject.hide();
View
127
app/src/main/java/com/example/sprout/refactor/viewmodel/RoomInputKeyViewModel.java
package com.example.sprout.refactor.viewmodel;
 
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;
 
/**
* ルーム入室(key)のViewModel
* @author matsumoto_k
*/
public class RoomInputKeyViewModel extends BaseViewModel {
 
private RoomRepository roomRepository = null;
private ViewContract viewContract = null;
private RoomResponseModel roomResponseModel = ModelLocator.get().getRoomResponseModel();
private ObservableField<String> pass = new ObservableField<>("");
private Observer<RoomResponse> observer = null;
 
public RoomInputKeyViewModel(ViewContract viewContract) {
this.roomRepository = ModelLocator.getModel(ModelLocator.Tag.ROOM_REPOSITORY, RoomRepository.class);
this.viewContract = viewContract;
 
observer = new Observer<RoomResponse>() {
@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<String> getPass() {
return pass;