diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 00b9547..d3b79b5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -4,52 +4,58 @@
android:versionCode="1"
android:versionName="1.0">
-
-
+
+
+
+
+
-
+
+
+
+
+ android:screenOrientation="landscape" />
+ android:screenOrientation="landscape" />
+ android:screenOrientation="landscape" />
+ android:screenOrientation="landscape" />
+ android:screenOrientation="landscape" />
+ android:screenOrientation="landscape" />
-
+
\ No newline at end of file
diff --git a/app/src/main/java/com/example/sprout/Sprout.java b/app/src/main/java/com/example/sprout/Sprout.java
index 48089d4..ac51f95 100644
--- a/app/src/main/java/com/example/sprout/Sprout.java
+++ b/app/src/main/java/com/example/sprout/Sprout.java
@@ -12,6 +12,8 @@
import com.example.sprout.battles.BattlesConnection;
import com.example.sprout.battles.Team;
import com.example.sprout.battles.UpdateActor;
+import com.example.sprout.refactor.api.SproutService;
+import com.example.sprout.refactor.repository.RegistrationRepository;
import com.example.sprout.rooms.RoomsConnection;
import java.util.HashMap;
@@ -24,6 +26,9 @@
import framework.model3D.Position3D;
import framework.model3D.Universe;
import java3d.Vector3d;
+import okhttp3.OkHttpClient;
+import retrofit2.Retrofit;
+import retrofit2.converter.gson.GsonConverterFactory;
/**
* Sprout APplication class
@@ -33,6 +38,9 @@
public class Sprout extends Application {
private static Sprout instance = null;
+ private OkHttpClient okHttpClient = null;
+ private SproutService sproutService = null;
+ private RegistrationRepository registrationRepository = null;
@Override
public void onCreate() {
@@ -44,6 +52,33 @@
return instance;
}
+ public OkHttpClient getOkHttpClient() {
+ if (okHttpClient == null) {
+ okHttpClient = new OkHttpClient.Builder().build();
+ }
+ return okHttpClient;
+ }
+
+ public SproutService getSproutService() {
+ if (sproutService == null) {
+ sproutService = new Retrofit
+ .Builder()
+ .baseUrl("http://nitta-lab-www2.is.konan-u.ac.jp:8080/SproutServer/")
+ .client(getOkHttpClient())
+ .addConverterFactory(GsonConverterFactory.create())
+ .build()
+ .create(SproutService.class);
+ }
+ return sproutService;
+ }
+
+ public RegistrationRepository getRegistrationRepository() {
+ if (registrationRepository == null) {
+ registrationRepository = new RegistrationRepository(getSproutService());
+ }
+ return registrationRepository;
+ }
+
private RoomsConnection roomsConnection = null;
private BattlesConnection battlesConnection = null;
private AccountsConnection accountsConnection = null;
diff --git a/app/src/main/java/com/example/sprout/refactor/activity/RegistrationActivity.java b/app/src/main/java/com/example/sprout/refactor/activity/RegistrationActivity.java
new file mode 100644
index 0000000..dfbf0f3
--- /dev/null
+++ b/app/src/main/java/com/example/sprout/refactor/activity/RegistrationActivity.java
@@ -0,0 +1,56 @@
+package com.example.sprout.refactor.activity;
+
+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.RfActivityRegistrationBinding;
+import com.example.sprout.refactor.common.ActivityEvent;
+import com.example.sprout.refactor.contract.ViewContract;
+import com.example.sprout.refactor.viewmodel.RegistrationViewModel;
+
+/**
+ * アカウント登録のActivity
+ *
+ * @author matsumoto_k
+ */
+public class RegistrationActivity extends AppCompatActivity implements ViewContract {
+
+ private RfActivityRegistrationBinding binding = null;
+ private RegistrationViewModel registrationViewModel = null;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ binding = DataBindingUtil.setContentView(this, R.layout.rf_activity_registration);
+ registrationViewModel = new RegistrationViewModel(Sprout.get().getRegistrationRepository(), (ViewContract) this);
+ binding.setViewModel(registrationViewModel);
+ getLifecycle().addObserver(registrationViewModel);
+ }
+
+ @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();
+ }
+
+ @Override
+ public void startActivity(ActivityEvent event) {
+ switch (event) {
+ case START_ROOM_LIST:
+ break;
+ }
+ }
+
+ @Override
+ public void finishActivity() {
+ finish();
+ }
+}
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
new file mode 100644
index 0000000..ccf1386
--- /dev/null
+++ b/app/src/main/java/com/example/sprout/refactor/api/SproutService.java
@@ -0,0 +1,20 @@
+package com.example.sprout.refactor.api;
+
+import com.example.sprout.refactor.vo.Account;
+
+import retrofit2.Call;
+import retrofit2.http.Field;
+import retrofit2.http.FormUrlEncoded;
+import retrofit2.http.POST;
+
+/**
+ * Sproutのapi一覧
+ *
+ * @author matsumoto_k
+ */
+public interface SproutService {
+
+ @FormUrlEncoded
+ @POST("accounts")
+ Call registration(@Field("userName") String userName);
+}
diff --git a/app/src/main/java/com/example/sprout/refactor/common/ActivityEvent.java b/app/src/main/java/com/example/sprout/refactor/common/ActivityEvent.java
new file mode 100644
index 0000000..06a498a
--- /dev/null
+++ b/app/src/main/java/com/example/sprout/refactor/common/ActivityEvent.java
@@ -0,0 +1,9 @@
+package com.example.sprout.refactor.common;
+
+/**
+ * Created by matsumoto_k on 2017/11/29.
+ */
+
+public enum ActivityEvent {
+ START_ROOM_LIST // ルームリストを開く
+}
diff --git a/app/src/main/java/com/example/sprout/refactor/contract/ViewContract.java b/app/src/main/java/com/example/sprout/refactor/contract/ViewContract.java
new file mode 100644
index 0000000..5913869
--- /dev/null
+++ b/app/src/main/java/com/example/sprout/refactor/contract/ViewContract.java
@@ -0,0 +1,18 @@
+package com.example.sprout.refactor.contract;
+
+import com.example.sprout.refactor.common.ActivityEvent;
+
+/**
+ * トーストのContract
+ *
+ * @author matsumoto_k
+ */
+public interface ViewContract {
+ public void startActivity(ActivityEvent event);
+
+ public void finishActivity();
+
+ public void showShortToast(String message);
+
+ public void showLongToast(String message);
+}
diff --git a/app/src/main/java/com/example/sprout/refactor/repository/RegistrationRepository.java b/app/src/main/java/com/example/sprout/refactor/repository/RegistrationRepository.java
new file mode 100644
index 0000000..5d79da2
--- /dev/null
+++ b/app/src/main/java/com/example/sprout/refactor/repository/RegistrationRepository.java
@@ -0,0 +1,37 @@
+package com.example.sprout.refactor.repository;
+
+import com.example.sprout.refactor.api.SproutService;
+import com.example.sprout.refactor.vo.Account;
+
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+
+/**
+ * アカウント登録のリポジトリ
+ *
+ * @author matsumoto_k
+ */
+public class RegistrationRepository extends Repository {
+
+ private SproutService sproutService = null;
+
+ public RegistrationRepository(SproutService sproutService) {
+ this.sproutService = sproutService;
+ }
+
+ public void registration(String userName, final Listener listener) {
+ Call task = sproutService.registration(userName);
+ task.enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+ listener.onSuccess(response.body());
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+ listener.onFailure(t);
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/sprout/refactor/repository/Repository.java b/app/src/main/java/com/example/sprout/refactor/repository/Repository.java
new file mode 100644
index 0000000..281f168
--- /dev/null
+++ b/app/src/main/java/com/example/sprout/refactor/repository/Repository.java
@@ -0,0 +1,14 @@
+package com.example.sprout.refactor.repository;
+
+/**
+ * Base Repository
+ *
+ * @author matsumoto_k
+ */
+public abstract class Repository {
+ public interface Listener {
+ void onSuccess(T value);
+
+ void onFailure(Throwable throwable);
+ }
+}
diff --git a/app/src/main/java/com/example/sprout/refactor/viewmodel/BaseViewModel.java b/app/src/main/java/com/example/sprout/refactor/viewmodel/BaseViewModel.java
new file mode 100644
index 0000000..c2b107c
--- /dev/null
+++ b/app/src/main/java/com/example/sprout/refactor/viewmodel/BaseViewModel.java
@@ -0,0 +1,37 @@
+package com.example.sprout.refactor.viewmodel;
+
+import android.arch.lifecycle.Lifecycle;
+import android.arch.lifecycle.LifecycleObserver;
+import android.arch.lifecycle.OnLifecycleEvent;
+
+/**
+ * Base ViewModel
+ *
+ * @author matsumoto_k
+ */
+public abstract class BaseViewModel implements LifecycleObserver {
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
+ public void onCreate() {
+ }
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_START)
+ public void onStart() {
+ }
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
+ public void onResume() {
+ }
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
+ public void onPause() {
+ }
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
+ public void onStop() {
+ }
+
+ @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
+ public void onDestroy() {
+ }
+}
diff --git a/app/src/main/java/com/example/sprout/refactor/viewmodel/RegistrationViewModel.java b/app/src/main/java/com/example/sprout/refactor/viewmodel/RegistrationViewModel.java
new file mode 100644
index 0000000..b853a23
--- /dev/null
+++ b/app/src/main/java/com/example/sprout/refactor/viewmodel/RegistrationViewModel.java
@@ -0,0 +1,54 @@
+package com.example.sprout.refactor.viewmodel;
+
+import android.databinding.ObservableField;
+
+import com.example.sprout.refactor.contract.ViewContract;
+import com.example.sprout.refactor.repository.RegistrationRepository;
+import com.example.sprout.refactor.repository.Repository;
+import com.example.sprout.refactor.util.PreferenceUtil;
+import com.example.sprout.refactor.vo.Account;
+
+/**
+ * アカウント登録のViewModel
+ *
+ * @author matsumoto_k
+ */
+public class RegistrationViewModel extends BaseViewModel {
+
+ private ObservableField editUserName = new ObservableField<>("");
+ private ViewContract viewContract = null;
+ private RegistrationRepository registrationRepository = null;
+
+ public RegistrationViewModel(RegistrationRepository registrationRepository, ViewContract toastContract) {
+ this.registrationRepository = registrationRepository;
+ this.viewContract = toastContract;
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ }
+
+ public void onClickRegistration(String userName) {
+ if (userName.isEmpty()) {
+ viewContract.showShortToast("名前を入力して下さい");
+ return;
+ }
+ registrationRepository.registration(userName, new Repository.Listener() {
+ @Override
+ public void onSuccess(Account account) {
+ PreferenceUtil.getInstance().saveInt(PreferenceUtil.Key.USER_ID, account.getUserID());
+ viewContract.showShortToast("アカウントを作成しました");
+ }
+
+ @Override
+ public void onFailure(Throwable throwable) {
+ viewContract.showShortToast("アカウント作成に失敗しました");
+ }
+ });
+ }
+
+ public ObservableField getEditUserName() {
+ return editUserName;
+ }
+}
diff --git a/app/src/main/java/com/example/sprout/refactor/vo/Account.java b/app/src/main/java/com/example/sprout/refactor/vo/Account.java
new file mode 100644
index 0000000..0d73f3d
--- /dev/null
+++ b/app/src/main/java/com/example/sprout/refactor/vo/Account.java
@@ -0,0 +1,37 @@
+package com.example.sprout.refactor.vo;
+
+/**
+ * Rアカウント登録のEntity
+ *
+ * @author matsumoto_k
+ */
+public class Account {
+
+ private String userName = "";
+ private String mode = "";
+ private int userID = 0; // TODO:Server側のレスポンスをIDからIdに修正する
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ public String getMode() {
+ return mode;
+ }
+
+ public void setMode(String mode) {
+ this.mode = mode;
+ }
+
+ public int getUserID() {
+ return userID;
+ }
+
+ public void setUserID(int userID) {
+ this.userID = userID;
+ }
+}
diff --git a/app/src/main/res/layout/rf_activity_registration.xml b/app/src/main/res/layout/rf_activity_registration.xml
new file mode 100644
index 0000000..cd857a8
--- /dev/null
+++ b/app/src/main/res/layout/rf_activity_registration.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 55c1e59..18fb17e 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -3,5 +3,6 @@
16dp
16dp
+ 8dp
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6442b7f..b65de6e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -12,4 +12,6 @@
RegistrationActivity
RoomInputKeyActivity
+ 登録
+