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 0465b5b..0f862a6 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 @@ -3,10 +3,13 @@ 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.Sprout; 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; /** @@ -14,14 +17,34 @@ * * @author matsumoto_k */ -public class RoomCreateActivity extends AppCompatActivity { +public class RoomCreateActivity extends AppCompatActivity implements ViewContract { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); RfActivityRoomCreateBinding binding = DataBindingUtil.setContentView(this, R.layout.rf_activity_room_create); - RoomCreateViewModel roomCreateViewModel = new RoomCreateViewModel(Sprout.get().getRoomRepository()); + RoomCreateViewModel roomCreateViewModel = new RoomCreateViewModel(Sprout.get().getRoomRepository(), (ViewContract) this); binding.setViewModel(roomCreateViewModel); getLifecycle().addObserver(roomCreateViewModel); } + + @Override + public void startActivity(ActivityEvent event) { + + } + + @Override + public void finishActivity() { + + } + + @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(); + } } diff --git a/app/src/main/java/com/example/sprout/refactor/api/SproutService.java b/app/src/main/java/com/example/sprout/refactor/api/SproutService.java index d71ea03..11ba466 100644 --- a/app/src/main/java/com/example/sprout/refactor/api/SproutService.java +++ b/app/src/main/java/com/example/sprout/refactor/api/SproutService.java @@ -29,4 +29,8 @@ @FormUrlEncoded @PUT("rooms/{roomId}") Call enterRoom(@Path("roomId") int roomId, @Field("userId") int userId); + + @FormUrlEncoded + @POST("rooms") + Call createRoom(@Field("userId") int userId, @Field("roomName") String roomName, @Field("key") String key); } diff --git a/app/src/main/java/com/example/sprout/refactor/repository/RoomRepository.java b/app/src/main/java/com/example/sprout/refactor/repository/RoomRepository.java index 51ad4f5..3a862e6 100644 --- a/app/src/main/java/com/example/sprout/refactor/repository/RoomRepository.java +++ b/app/src/main/java/com/example/sprout/refactor/repository/RoomRepository.java @@ -19,6 +19,7 @@ private SproutService sproutService = null; private Observable roomListObservable = new Observable<>(); private Observable enterRoomObservable = new Observable<>(); + private Observable createRoomObservable = new Observable<>(); public RoomRepository(SproutService sproutService) { this.sproutService = sproutService; @@ -62,6 +63,25 @@ }); } + public void createRoom(int userId, String roomName, String key) { + Call task = sproutService.createRoom(userId, roomName, key); + task.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + createRoomObservable.notifyObservers(response.body()); + } else { + createRoomObservable.notifyError(new Throwable("error")); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + createRoomObservable.notifyError(t); + } + }); + } + public Observable getRoomListObservable() { return roomListObservable; } @@ -69,4 +89,8 @@ public Observable getEnterRoomObservable() { return enterRoomObservable; } + + public Observable getCreateRoomObservable() { + return createRoomObservable; + } } 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 dd912fb..7c1cce2 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 @@ -1,6 +1,13 @@ package com.example.sprout.refactor.viewmodel; +import android.databinding.ObservableBoolean; +import android.databinding.ObservableField; + +import com.example.sprout.refactor.contract.ViewContract; +import com.example.sprout.refactor.notification.Observer; import com.example.sprout.refactor.repository.RoomRepository; +import com.example.sprout.refactor.util.PreferenceUtil; +import com.example.sprout.refactor.vo.RoomResponse; /** * ルーム作成のViewModel @@ -10,8 +17,62 @@ public class RoomCreateViewModel extends BaseViewModel { private RoomRepository roomRepository = null; + private ViewContract viewContract = null; + private ObservableField roomName = new ObservableField<>(""); + private ObservableField pass = new ObservableField<>(""); + private ObservableBoolean hasPass = new ObservableBoolean(false); + private Observer observer = null; - public RoomCreateViewModel(RoomRepository roomRepository) { + public RoomCreateViewModel(RoomRepository roomRepository, ViewContract viewContract) { this.roomRepository = roomRepository; + this.viewContract = viewContract; + + observer = new Observer() { + @Override + public void notify(RoomResponse roomResponse) { + PreferenceUtil.getInstance().saveInt(PreferenceUtil.Key.ROOM_ID, roomResponse.getRoom().getRoomId()); + viewContract.showShortToast("ルームを作成しました"); + } + + @Override + public void error(Throwable throwable) { + viewContract.showShortToast("ルーム作成に失敗しました"); + } + }; + this.roomRepository.getCreateRoomObservable().addObserver(observer); + } + + @Override + public void onDestroy() { + super.onDestroy(); + this.roomRepository.getCreateRoomObservable().removeObserver(observer); + } + + public void onClickCreate(String userName, String pass) { + if (hasPass.get()) { + if (userName.isEmpty() || pass.isEmpty()) { + viewContract.showShortToast("必要項目を入力して下さい"); + return; + } + roomRepository.createRoom(PreferenceUtil.getInstance().getInt(PreferenceUtil.Key.USER_ID), userName, pass); + } else { + if (userName.isEmpty()) { + viewContract.showShortToast("必要項目を入力して下さい"); + return; + } + roomRepository.createRoom(PreferenceUtil.getInstance().getInt(PreferenceUtil.Key.USER_ID), userName, null); + } + } + + public ObservableField getRoomName() { + return roomName; + } + + public ObservableField getPass() { + return pass; + } + + public ObservableBoolean getHasPass() { + return hasPass; } } diff --git a/app/src/main/res/layout/rf_activity_room_create.xml b/app/src/main/res/layout/rf_activity_room_create.xml index 41fc91e..98d0029 100644 --- a/app/src/main/res/layout/rf_activity_room_create.xml +++ b/app/src/main/res/layout/rf_activity_room_create.xml @@ -8,9 +8,34 @@ type="com.example.sprout.refactor.viewmodel.RoomCreateViewModel" /> - + android:layout_height="match_parent" + android:layout_margin="@dimen/margin_small" + android:orientation="vertical"> - + + + + + + +