[add] Refactor RoomMainActivity with observer pattern
1 parent 3de6d4d commit ece9c3184906ae9b6220873c9792dfaae240ca83
KeijuMatsumoto authored on 22 Dec 2017
Showing 6 changed files
View
32
app/src/main/java/com/example/sprout/refactor/activity/RoomMainActivity.java
package com.example.sprout.refactor.activity;
 
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.widget.Toast;
 
import com.example.sprout.R;
import com.example.sprout.databinding.RfActivityRoomMainBinding;
import com.example.sprout.refactor.Constant;
import com.example.sprout.refactor.adapter.RoomMainAdapter;
import com.example.sprout.refactor.common.ActivityEvent;
import com.example.sprout.refactor.contract.ViewContract;
import com.example.sprout.refactor.viewmodel.RoomMainViewModel;
 
import framework.gameMain.RealTimeActivity;
 
public class RoomMainActivity extends RealTimeActivity implements ViewContract {
public class RoomMainActivity extends RealTimeActivity {
 
private RoomMainViewModel roomMainViewModel = null;
private RfActivityRoomMainBinding binding;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RfActivityRoomMainBinding binding = DataBindingUtil.setContentView(this, R.layout.rf_activity_room_main);
roomMainViewModel = new RoomMainViewModel(new RoomMainAdapter(this), (ViewContract) this);
binding = DataBindingUtil.setContentView(this, R.layout.rf_activity_room_main);
roomMainViewModel = new RoomMainViewModel(new RoomMainAdapter(this));
binding.setViewModel(roomMainViewModel);
getLifecycle().addObserver(roomMainViewModel);
}
 
@Override
protected void onResume() {
super.onResume();
addUiObserver(roomMainViewModel);
this.start(Constant.ROOM_UPDATE_DELAY, Constant.ROOM_UPDATE_INTERVAL);
}
 
@Override
protected void onPause() {
super.onPause();
removeUiObserver(roomMainViewModel);
this.stop();
}
 
@Override
protected void update(long interval) {
roomMainViewModel.update();
}
 
@Override
public void startActivity(ActivityEvent event) {
 
}
 
@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();
}
}
View
5
app/src/main/java/com/example/sprout/refactor/model/ModelLocator.java
 
// Modelを管理するクラス群
private RegistrationModel registrationModel = new RegistrationModel(this.registrationRepository);
private RoomsModel roomsModel = new RoomsModel(this.roomRepository);
private RoomModel roomModel = new RoomModel(this.roomRepository);
private RoomResponseModel roomResponseModel = new RoomResponseModel(this.roomRepository);
 
private ModelLocator() {
}
public RoomsModel getRoomsModel() {
return roomsModel;
}
 
public RoomModel getRoomModel() {
return roomModel;
}
 
public RoomResponseModel getRoomResponseModel() {
return roomResponseModel;
}
}
View
42
app/src/main/java/com/example/sprout/refactor/model/RoomModel.java 0 → 100644
package com.example.sprout.refactor.model;
 
import com.example.sprout.refactor.model.entity.Room;
import com.example.sprout.refactor.notification.Observable;
import com.example.sprout.refactor.notification.Observer;
import com.example.sprout.refactor.repository.RoomRepository;
 
/**
* Created by matsumoto_k on 2017/12/22.
*/
 
public class RoomModel {
 
private RoomRepository roomRepository = null;
private Observable<Room> roomObservable = new Observable<>();
 
public RoomModel(RoomRepository roomRepository) {
this.roomRepository = roomRepository;
 
Observer<Room> RoomObserver = new Observer<Room>() {
@Override
public void notify(Room room) {
roomObservable.notifyObservers(room);
}
 
@Override
public void error(Throwable throwable) {
roomObservable.notifyError(throwable);
}
};
this.roomRepository.getRoomObservable().addObserver(RoomObserver);
}
 
public void get(int roomId) {
roomRepository.getRoom(roomId);
}
 
public Observable<Room> getRoomObservable() {
return roomObservable;
}
}
View
4
app/src/main/java/com/example/sprout/refactor/model/RoomResponseModel.java
public void enterRoomWithKey(int roomId, int userId, String key) {
roomRepository.enterRoomWithKey(roomId, userId, key);
}
 
public void updateRoomState(int roomId, int memberId, int role) {
roomRepository.updateRoomState(roomId, memberId, role);
}
 
public Observable<RoomResponse> getRoomResponseObservable() {
return roomResponseObservable;
}
}
View
36
app/src/main/java/com/example/sprout/refactor/viewmodel/RoomMainViewModel.java
import android.widget.LinearLayout;
 
import com.example.sprout.refactor.adapter.RoomMainAdapter;
import com.example.sprout.refactor.common.MemberState;
import com.example.sprout.refactor.contract.ViewContract;
import com.example.sprout.refactor.messengers.NavigationMessage;
import com.example.sprout.refactor.model.ModelLocator;
import com.example.sprout.refactor.model.RoomModel;
import com.example.sprout.refactor.model.RoomResponseModel;
import com.example.sprout.refactor.model.entity.Member;
import com.example.sprout.refactor.model.entity.Room;
import com.example.sprout.refactor.model.entity.RoomResponse;
import com.example.sprout.refactor.notification.Observer;
*/
 
public class RoomMainViewModel extends BaseViewModel {
 
private RoomRepository roomRepository = null;
private RoomRepository roomRepository = ModelLocator.get().getRoomRepository();
private RoomModel roomModel = ModelLocator.get().getRoomModel();
private RoomResponseModel roomResponseModel = ModelLocator.get().getRoomResponseModel();
private RoomMainAdapter adapter = null;
private ViewContract viewContract = null;
private ObservableBoolean ready = new ObservableBoolean(false);
private Observer<Room> roomObserver = null;
private Observer<RoomResponse> updateRoomStateObserver = null;
private Observer<Void> exitRoomObserver = null;
 
public RoomMainViewModel(RoomMainAdapter adapter, ViewContract viewContract) {
this.roomRepository = ModelLocator.getModel(ModelLocator.Tag.ROOM_REPOSITORY, RoomRepository.class);
this.viewContract = viewContract;
public RoomMainViewModel(RoomMainAdapter adapter) {
this.adapter = adapter;
 
roomObserver = new Observer<Room>() {
@Override
public void notify(Room room) {
ModelLocator.setModel(ModelLocator.Tag.Room, room);
ArrayList<Member> items = new ArrayList<>(room.getMemberList().values());
RoomMainViewModel.this.adapter.setDataAndRefresh(items);
}
 
 
exitRoomObserver = new Observer<Void>() {
@Override
public void notify(Void aVoid) {
viewContract.finishActivity();
navigationObservable.notifyObservers(new NavigationMessage(NavigationMessage.Type.Finish));
}
 
@Override
public void error(Throwable throwable) {
 
@Override
public void onResume() {
super.onResume();
roomRepository.getRoomObservable().addObserver(roomObserver);
roomRepository.getRoomResponseObservable().addObserver(updateRoomStateObserver);
roomModel.getRoomObservable().addObserver(roomObserver);
roomResponseModel.getRoomResponseObservable().addObserver(updateRoomStateObserver);
roomRepository.getVoidObservable().addObserver(exitRoomObserver);
}
 
@Override
public void onPause() {
super.onPause();
roomRepository.getRoomObservable().removeObserver(roomObserver);
roomRepository.getRoomResponseObservable().removeObserver(updateRoomStateObserver);
roomModel.getRoomObservable().removeObserver(roomObserver);
roomResponseModel.getRoomResponseObservable().removeObserver(updateRoomStateObserver);
roomRepository.getVoidObservable().removeObserver(exitRoomObserver);
}
 
public void update() {
roomRepository.getRoom(PreferenceUtil.getInstance().getInt(PreferenceUtil.Key.ROOM_ID));
roomModel.get(PreferenceUtil.getInstance().getInt(PreferenceUtil.Key.ROOM_ID));
}
 
public void onClickGunman() {
roomRepository.updateRoomState(
roomResponseModel.updateRoomState(
PreferenceUtil.getInstance().getInt(PreferenceUtil.Key.ROOM_ID),
PreferenceUtil.getInstance().getInt(PreferenceUtil.Key.MEMBER_ID),
MemberState.GUNMAN.getValue());
}
 
public void onClickWitch() {
roomRepository.updateRoomState(
roomResponseModel.updateRoomState(
PreferenceUtil.getInstance().getInt(PreferenceUtil.Key.ROOM_ID),
PreferenceUtil.getInstance().getInt(PreferenceUtil.Key.MEMBER_ID),
MemberState.WITCH.getValue());
}
 
public void onClickReady() {
ready.set(!ready.get());
roomRepository.updateRoomState(
roomResponseModel.updateRoomState(
PreferenceUtil.getInstance().getInt(PreferenceUtil.Key.ROOM_ID),
PreferenceUtil.getInstance().getInt(PreferenceUtil.Key.MEMBER_ID),
MemberState.READY.getValue());
}
View
4
app/src/main/java/framework/gameMain/RealTimeActivity.java
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
 
import com.example.sprout.refactor.activity.BaseActivity;
 
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
 
public abstract class RealTimeActivity extends AppCompatActivity implements Runnable {
public abstract class RealTimeActivity extends BaseActivity implements Runnable {
//インターバル確認用変数
private long interval = 15L;
private long prevTime = 0L;