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 index 5a3fbc4..d33be6c 100644 --- a/app/src/main/java/com/example/sprout/refactor/activity/RegistrationActivity.java +++ b/app/src/main/java/com/example/sprout/refactor/activity/RegistrationActivity.java @@ -1,15 +1,10 @@ package com.example.sprout.refactor.activity; -import android.content.Intent; 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.databinding.RfActivityRegistrationBinding; -import com.example.sprout.refactor.common.ActivityEvent; -import com.example.sprout.refactor.contract.ViewContract; import com.example.sprout.refactor.viewmodel.RegistrationViewModel; /** @@ -17,7 +12,7 @@ * * @author matsumoto_k */ -public class RegistrationActivity extends AppCompatActivity implements ViewContract { +public class RegistrationActivity extends BaseActivity { private RfActivityRegistrationBinding binding = null; private RegistrationViewModel registrationViewModel = null; @@ -26,32 +21,20 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.rf_activity_registration); - registrationViewModel = new RegistrationViewModel((ViewContract) this); + registrationViewModel = new RegistrationViewModel(); binding.setViewModel(registrationViewModel); getLifecycle().addObserver(registrationViewModel); } @Override - public void showShortToast(String message) { - Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); + protected void onResume() { + super.onResume(); + addUiObserver(registrationViewModel); } @Override - public void showLongToast(String message) { - Toast.makeText(this, message, Toast.LENGTH_LONG).show(); - } - - @Override - public void startActivity(ActivityEvent event) { - switch (event) { - case ROOM_LIST: - startActivity(new Intent(RegistrationActivity.this, RoomListActivity.class)); - break; - } - } - - @Override - public void finishActivity() { - finish(); + protected void onPause() { + super.onPause(); + removeUiObserver(registrationViewModel); } } 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 78e4a4e..2fefd34 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 @@ -17,12 +17,14 @@ return ourInstance; } - private RegistrationRepository registrationRepository = null; - private RoomRepository roomRepository = null; + // Apiを管理するクラス群 + private RegistrationRepository registrationRepository = new RegistrationRepository(); + private RoomRepository roomRepository = new RoomRepository(); + + // Modelを管理するクラス群 + private RegistrationModel registrationModel = new RegistrationModel(this.registrationRepository); private ModelLocator() { - this.registrationRepository = new RegistrationRepository(); - this.roomRepository = new RoomRepository(); } public RegistrationRepository getRegistrationRepository() { @@ -55,4 +57,8 @@ public static void setModel(Tag tag, Object model) { showcase.put(tag, model); } + + public RegistrationModel getRegistrationModel() { + return registrationModel; + } } diff --git a/app/src/main/java/com/example/sprout/refactor/model/RegistrationModel.java b/app/src/main/java/com/example/sprout/refactor/model/RegistrationModel.java new file mode 100644 index 0000000..a9f1d7f --- /dev/null +++ b/app/src/main/java/com/example/sprout/refactor/model/RegistrationModel.java @@ -0,0 +1,45 @@ +package com.example.sprout.refactor.model; + +import com.example.sprout.refactor.model.entity.Account; +import com.example.sprout.refactor.notification.Observable; +import com.example.sprout.refactor.notification.Observer; +import com.example.sprout.refactor.repository.RegistrationRepository; +import com.example.sprout.refactor.util.PreferenceUtil; + +/** + * Accountを管理するクラス + * Created by matsumoto_k on 2017/12/22. + */ +public class RegistrationModel { + + private Observer observer = null; + private Observable accountObservable = new Observable<>(); + private RegistrationRepository registrationRepository = null; + + public RegistrationModel(RegistrationRepository registrationRepository) { + this.registrationRepository = registrationRepository; + observer = new Observer() { + @Override + public void notify(Account account) { + PreferenceUtil.getInstance().saveInt(PreferenceUtil.Key.USER_ID, account.getUserID()); + PreferenceUtil.getInstance().saveBoolean(PreferenceUtil.Key.REGISTERED, true); + accountObservable.notifyObservers(account); + } + + @Override + public void error(Throwable throwable) { + accountObservable.notifyError(throwable); + } + }; + + this.registrationRepository.getAccountObservable().addObserver(observer); + } + + public void create(String userName) { + this.registrationRepository.registration(userName); + } + + public Observable getAccountObservable() { + return accountObservable; + } +} 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 index 612cd6e..e1f7f78 100644 --- a/app/src/main/java/com/example/sprout/refactor/viewmodel/RegistrationViewModel.java +++ b/app/src/main/java/com/example/sprout/refactor/viewmodel/RegistrationViewModel.java @@ -2,12 +2,13 @@ import android.databinding.ObservableField; -import com.example.sprout.refactor.common.ActivityEvent; -import com.example.sprout.refactor.contract.ViewContract; +import com.example.sprout.refactor.activity.RoomListActivity; +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.RegistrationModel; import com.example.sprout.refactor.model.entity.Account; import com.example.sprout.refactor.notification.Observer; -import com.example.sprout.refactor.repository.RegistrationRepository; import com.example.sprout.refactor.util.PreferenceUtil; /** @@ -18,59 +19,47 @@ public class RegistrationViewModel extends BaseViewModel { private ObservableField editUserName = new ObservableField<>(""); - private ViewContract viewContract = null; - private RegistrationRepository registrationRepository = null; + private RegistrationModel registrationModel = ModelLocator.get().getRegistrationModel(); private Observer observer = null; - public RegistrationViewModel(ViewContract toastContract) { - this.registrationRepository = ModelLocator.getModel(ModelLocator.Tag.REGISTRATION_REPOSITORY, RegistrationRepository.class); - this.viewContract = toastContract; + public RegistrationViewModel() { observer = new Observer() { @Override public void notify(Account account) { - ModelLocator.setModel(ModelLocator.Tag.ACCOUNT, account); - PreferenceUtil.getInstance().saveInt(PreferenceUtil.Key.USER_ID, account.getUserID()); - PreferenceUtil.getInstance().saveBoolean(PreferenceUtil.Key.REGISTERED, true); - viewContract.showShortToast("アカウントを作成しました"); - viewContract.startActivity(ActivityEvent.ROOM_LIST); - viewContract.finishActivity(); + toastObservable.notifyObservers(new ToastMessage("アカウントを作成しました", ToastMessage.Length.SHORT)); + navigationObservable.notifyObservers(new NavigationMessage(NavigationMessage.Type.Start, RoomListActivity.class)); + navigationObservable.notifyObservers(new NavigationMessage(NavigationMessage.Type.Finish)); } @Override public void error(Throwable throwable) { - viewContract.showShortToast("アカウント作成に失敗しました"); - + toastObservable.notifyObservers(new ToastMessage("アカウント作成に失敗しました", ToastMessage.Length.SHORT)); } }; } @Override - public void onCreate() { - super.onCreate(); - if (PreferenceUtil.getInstance().getBoolean(PreferenceUtil.Key.REGISTERED)) { - viewContract.startActivity(ActivityEvent.ROOM_LIST); - viewContract.finishActivity(); - } - } - - @Override public void onResume() { super.onResume(); - registrationRepository.getAccountObservable().addObserver(observer); + if (PreferenceUtil.getInstance().getBoolean(PreferenceUtil.Key.REGISTERED)) { + navigationObservable.notifyObservers(new NavigationMessage(NavigationMessage.Type.Start, RoomListActivity.class)); + navigationObservable.notifyObservers(new NavigationMessage(NavigationMessage.Type.Finish)); + } + registrationModel.getAccountObservable().addObserver(observer); } @Override public void onPause() { super.onPause(); - registrationRepository.getAccountObservable().removeObserver(observer); + registrationModel.getAccountObservable().removeObserver(observer); } public void onClickRegistration(String userName) { if (userName.isEmpty()) { - viewContract.showShortToast("名前を入力して下さい"); + toastObservable.notifyObservers(new ToastMessage("名前を入力して下さい", ToastMessage.Length.SHORT)); return; } - registrationRepository.registration(userName); + registrationModel.create(userName); } public ObservableField getEditUserName() {