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 @@ + + + + + + + + + + + + +