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 2fefd34..0dbbd25 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 @@ -23,6 +23,8 @@ // Modelを管理するクラス群 private RegistrationModel registrationModel = new RegistrationModel(this.registrationRepository); + private RoomsModel roomsModel = new RoomsModel(this.roomRepository); + private RoomResponseModel roomResponseModel = new RoomResponseModel(this.roomRepository); private ModelLocator() { } @@ -61,4 +63,12 @@ public RegistrationModel getRegistrationModel() { return registrationModel; } + + public RoomsModel getRoomsModel() { + return roomsModel; + } + + public RoomResponseModel getRoomResponseModel() { + return roomResponseModel; + } } 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 new file mode 100644 index 0000000..1f72130 --- /dev/null +++ b/app/src/main/java/com/example/sprout/refactor/model/RoomResponseModel.java @@ -0,0 +1,44 @@ +package com.example.sprout.refactor.model; + +import com.example.sprout.refactor.model.entity.RoomResponse; +import com.example.sprout.refactor.notification.Observable; +import com.example.sprout.refactor.notification.Observer; +import com.example.sprout.refactor.repository.RoomRepository; +import com.example.sprout.refactor.util.PreferenceUtil; + +/** + * Created by matsumoto_k on 2017/12/22. + */ + +public class RoomResponseModel { + + private RoomRepository roomRepository = null; + private Observable roomResponseObservable = new Observable<>(); + + public RoomResponseModel(RoomRepository roomRepository) { + this.roomRepository = roomRepository; + + Observer roomResponseObserver = new Observer() { + @Override + public void notify(RoomResponse roomResponse) { + PreferenceUtil.getInstance().saveInt(PreferenceUtil.Key.ROOM_ID, roomResponse.getRoom().getRoomId()); + PreferenceUtil.getInstance().saveInt(PreferenceUtil.Key.MEMBER_ID, roomResponse.getMemberId()); + roomResponseObservable.notifyObservers(roomResponse); + } + + @Override + public void error(Throwable throwable) { + roomResponseObservable.notifyError(throwable); + } + }; + this.roomRepository.getRoomResponseObservable().addObserver(roomResponseObserver); + } + + public void enterRoom(int roomId, int userId) { + roomRepository.enterRoom(roomId, userId); + } + + public Observable getRoomResponseObservable() { + return roomResponseObservable; + } +} diff --git a/app/src/main/java/com/example/sprout/refactor/model/RoomsModel.java b/app/src/main/java/com/example/sprout/refactor/model/RoomsModel.java new file mode 100644 index 0000000..1820a75 --- /dev/null +++ b/app/src/main/java/com/example/sprout/refactor/model/RoomsModel.java @@ -0,0 +1,43 @@ +package com.example.sprout.refactor.model; + +import com.example.sprout.refactor.model.entity.Rooms; +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 RoomsModel { + + private RoomRepository roomRepository = null; + private Observable roomsObservable = new Observable<>(); + + public RoomsModel(RoomRepository roomRepository) { + this.roomRepository = roomRepository; + Observer roomsObserver = new Observer() { + @Override + public void notify(Rooms rooms) { + roomsObservable.notifyObservers(rooms); + } + + @Override + public void error(Throwable throwable) { + roomsObservable.notifyError(throwable); + } + }; + this.roomRepository.getRoomsObservable().addObserver(roomsObserver); + } + + /** + * Roomsをapiで取得する + */ + public void get() { + roomRepository.getRooms(); + } + + public Observable getRoomsObservable() { + return roomsObservable; + } +} 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 9a75f5f..0911db4 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 @@ -13,11 +13,12 @@ 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; import com.example.sprout.refactor.model.entity.Room; import com.example.sprout.refactor.model.entity.RoomResponse; import com.example.sprout.refactor.model.entity.Rooms; import com.example.sprout.refactor.notification.Observer; -import com.example.sprout.refactor.repository.RoomRepository; import com.example.sprout.refactor.util.PreferenceUtil; import java.util.ArrayList; @@ -30,30 +31,30 @@ */ public class RoomListViewModel extends BaseViewModel { - private RoomRepository roomRepository = null; + private RoomsModel roomsModel = ModelLocator.get().getRoomsModel(); + private RoomResponseModel roomResponseModel = ModelLocator.get().getRoomResponseModel(); private RoomListAdapter adapter = null; private RoomListAdapter.OnItemClickedListener listener = null; - private Observer roomListObserver = null; - private Observer enterRoomObserver = null; + private Observer roomsObserver = null; + private Observer roomResponseObserver = null; + private PreferenceUtil preferenceUtil = PreferenceUtil.getInstance(); public RoomListViewModel(RoomListAdapter adapter) { - this.roomRepository = ModelLocator.getModel(ModelLocator.Tag.ROOM_REPOSITORY, RoomRepository.class); this.listener = room -> { if (room.hasKey()) { PreferenceUtil.getInstance().saveInt(PreferenceUtil.Key.ROOM_ID, room.getRoomId()); navigationObservable.notifyObservers(new NavigationMessage(NavigationMessage.Type.Start, RoomInputKeyActivity.class)); } else { - roomRepository.enterRoom(room.getRoomId(), PreferenceUtil.getInstance().getInt(PreferenceUtil.Key.USER_ID)); + roomResponseModel.enterRoom(room.getRoomId(), preferenceUtil.getInt(PreferenceUtil.Key.USER_ID)); } }; adapter.setListener(listener); this.adapter = adapter; - roomListObserver = new Observer() { + roomsObserver = new Observer() { @Override public void notify(Rooms rooms) { - ModelLocator.setModel(ModelLocator.Tag.Rooms, rooms); ArrayList items = new ArrayList<>(rooms.getRoomList().values()); Collections.reverse(items); RoomListViewModel.this.adapter.setDataAndRefresh(items); @@ -65,13 +66,10 @@ } }; - enterRoomObserver = new Observer() { + roomResponseObserver = new Observer() { @Override public void notify(RoomResponse roomResponse) { if (roomResponse.canEnter()) { - 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()); navigationObservable.notifyObservers(new NavigationMessage(NavigationMessage.Type.Start, RoomMainActivity.class)); } else { toastObservable.notifyObservers(new ToastMessage("入室に失敗しました", ToastMessage.Length.SHORT)); @@ -88,20 +86,20 @@ @Override public void onResume() { super.onResume(); - roomRepository.getRoomsObservable().addObserver(roomListObserver); - roomRepository.getRoomResponseObservable().addObserver(enterRoomObserver); - roomRepository.getRooms(); + roomsModel.getRoomsObservable().addObserver(roomsObserver); + roomResponseModel.getRoomResponseObservable().addObserver(roomResponseObserver); + roomsModel.get(); } @Override public void onPause() { super.onPause(); - roomRepository.getRoomsObservable().removeObserver(roomListObserver); - roomRepository.getRoomResponseObservable().removeObserver(enterRoomObserver); + roomsModel.getRoomsObservable().removeObserver(roomsObserver); + roomResponseModel.getRoomResponseObservable().removeObserver(roomResponseObserver); } public void onClickRefresh() { - roomRepository.getRooms(); + roomsModel.get(); } public void onClickCreateRoom() {