Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import com.rootstrap.android.metrics.VISIT_PROFILE
import com.rootstrap.android.network.managers.SessionManager
import com.rootstrap.android.ui.base.BaseActivity
import com.rootstrap.android.ui.view.ProfileView
import com.rootstrap.android.util.NetworkState
import com.rootstrap.android.util.ViewModelListener
import kotlinx.android.synthetic.main.activity_profile.*

class ProfileActivity : BaseActivity(), ProfileView {
Expand All @@ -19,27 +21,39 @@ class ProfileActivity : BaseActivity(), ProfileView {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_profile)

val factory = ProfileActivityViewModelFactory(this)
val factory = ProfileActivityViewModelFactory(viewModelListener)
viewModel = ViewModelProviders.of(this, factory)
.get(ProfileActivityViewModel::class.java)

Analytics.track(PageEvents.visit(VISIT_PROFILE))

welcome_text_view.text = getString(R.string.welcome_message, SessionManager.user?.firstName)
sign_out_button.setOnClickListener { viewModel.signOut() }
}

override fun onResume() {
super.onResume()
viewModel.register()
}

override fun onPause() {
super.onPause()
viewModel.unregister()
lifecycle.addObserver(viewModel)
}

override fun goToFirstScreen() {
startActivityClearTask(SignUpActivity())
}

// ViewModelListener
private val viewModelListener = object : ViewModelListener {
override fun updateState() {
when (viewModel.state) {
ProfileState.signOutFailure -> showError(viewModel.error)
ProfileState.signedOutSuccessfully -> goToFirstScreen()
else -> {
}
}
}

override fun updateNetworkState() {
when (viewModel.networkState) {
NetworkState.loading -> showProgress()
NetworkState.idle -> hideProgress()
else -> showError(viewModel.error ?: getString(R.string.default_error))
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,41 +4,57 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.rootstrap.android.network.managers.UserManager
import com.rootstrap.android.ui.base.BaseViewModel
import com.rootstrap.android.ui.view.ProfileView
import com.rootstrap.android.util.NetworkState
import com.rootstrap.android.util.ViewModelListener
import com.rootstrap.android.util.extensions.ErrorEvent
import com.rootstrap.android.util.extensions.FailureEvent
import com.squareup.otto.Subscribe

open class ProfileActivityViewModel(var view: ProfileView) : BaseViewModel(view) {
open class ProfileActivityViewModel(listener: ViewModelListener?) : BaseViewModel(listener) {

private val manager = UserManager

fun signOut() {
view.showProgress()
networkState = NetworkState.loading
manager.signOut()
}

var state: ProfileState = ProfileState.none
set(value) {
field = value
listener?.updateState()
}

@Subscribe
fun signedOutSuccessfully(event: UserManager.SignedOutSuccessfullyEvent) {
view.hideProgress()
view.goToFirstScreen()
networkState = NetworkState.idle
state = ProfileState.signedOutSuccessfully
}

@Subscribe
fun signOutError(event: ErrorEvent) {
view.hideProgress()
view.showError(event.error)
error = event.error
networkState = NetworkState.idle
networkState = NetworkState.error
}

@Subscribe
fun signOutFailure(event: FailureEvent) {
view.hideProgress()
view.showError(null)
error = null
networkState = NetworkState.idle
state = ProfileState.signOutFailure
}
}

class ProfileActivityViewModelFactory(var view: ProfileView) : ViewModelProvider.Factory {
enum class ProfileState {
signOutFailure,
signedOutSuccessfully,
none,
}

class ProfileActivityViewModelFactory(var listener: ViewModelListener?) :
ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return ProfileActivityViewModel(view) as T
return ProfileActivityViewModel(listener) as T
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import com.rootstrap.android.metrics.VISIT_SIGN_IN
import com.rootstrap.android.network.models.User
import com.rootstrap.android.ui.base.BaseActivity
import com.rootstrap.android.ui.view.AuthView
import com.rootstrap.android.util.NetworkState
import com.rootstrap.android.util.ViewModelListener
import com.rootstrap.android.util.extensions.value
import kotlinx.android.synthetic.main.activity_sign_in.*

Expand All @@ -21,21 +23,13 @@ class SignInActivity : BaseActivity(), AuthView {
setContentView(R.layout.activity_sign_in)
Analytics.track(PageEvents.visit(VISIT_SIGN_IN))

val factory = SignInActivityViewModelFactory(this)
val factory = SignInActivityViewModelFactory(viewModelListener)
viewModel = ViewModelProviders.of(this, factory)
.get(SignInActivityViewModel::class.java)

sign_in_button.setOnClickListener { signIn() }
}

override fun onResume() {
super.onResume()
viewModel.register()
}

override fun onPause() {
super.onPause()
viewModel.unregister()
lifecycle.addObserver(viewModel)
}

override fun showProfile() {
Expand All @@ -49,4 +43,24 @@ class SignInActivity : BaseActivity(), AuthView {
)
viewModel.signIn(user)
}

// ViewModelListener
private val viewModelListener = object : ViewModelListener {
override fun updateState() {
when (viewModel.state) {
SignInState.signedInFailure -> showError(viewModel.error)
SignInState.signedInSuccess -> showProfile()
else -> {
}
}
}

override fun updateNetworkState() {
when (viewModel.networkState) {
NetworkState.loading -> showProgress()
NetworkState.idle -> hideProgress()
else -> showError(viewModel.error ?: getString(R.string.default_error))
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,41 +5,56 @@ import androidx.lifecycle.ViewModelProvider
import com.rootstrap.android.network.managers.UserManager
import com.rootstrap.android.network.models.User
import com.rootstrap.android.ui.base.BaseViewModel
import com.rootstrap.android.ui.view.AuthView
import com.rootstrap.android.util.NetworkState
import com.rootstrap.android.util.ViewModelListener
import com.rootstrap.android.util.extensions.ErrorEvent
import com.rootstrap.android.util.extensions.FailureEvent
import com.squareup.otto.Subscribe

open class SignInActivityViewModel(var view: AuthView) : BaseViewModel(view) {
open class SignInActivityViewModel(listener: ViewModelListener?) : BaseViewModel(listener) {

private val manager = UserManager

var state: SignInState = SignInState.none
set(value) {
field = value
listener?.updateState()
}

fun signIn(user: User) {
view.showProgress()
networkState = NetworkState.loading
manager.signIn(user)
}

@Subscribe
fun signedInSuccessfully(event: UserManager.SignInSuccessfullyEvent) {
view.hideProgress()
view.showProfile()
networkState = NetworkState.idle
state = SignInState.signedInSuccess
}

@Subscribe
fun signedInError(event: ErrorEvent) {
view.hideProgress()
view.showError(event.error)
error = event.error
networkState = NetworkState.idle
networkState = NetworkState.error
}

@Subscribe
fun signedInFailure(event: FailureEvent) {
view.hideProgress()
view.showError(null)
error = null
networkState = NetworkState.idle
state = SignInState.signedInFailure
}
}

class SignInActivityViewModelFactory(var view: AuthView) : ViewModelProvider.Factory {
enum class SignInState {
signedInFailure,
signedInSuccess,
none,
}

class SignInActivityViewModelFactory(var listener: ViewModelListener?) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return SignInActivityViewModel(view) as T
return SignInActivityViewModel(listener) as T
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import com.rootstrap.android.metrics.VISIT_SIGN_UP
import com.rootstrap.android.network.models.User
import com.rootstrap.android.ui.base.BaseActivity
import com.rootstrap.android.ui.view.AuthView
import com.rootstrap.android.util.NetworkState
import com.rootstrap.android.util.ViewModelListener
import com.rootstrap.android.util.extensions.value
import kotlinx.android.synthetic.main.activity_sign_up.*

Expand All @@ -22,22 +24,14 @@ class SignUpActivity : BaseActivity(), AuthView {
setContentView(R.layout.activity_sign_up)
Analytics.track(PageEvents.visit(VISIT_SIGN_UP))

val factory = SignUpActivityViewModelFactory(this)
val factory = SignUpActivityViewModelFactory(viewModelListener)
viewModel = ViewModelProviders.of(this, factory)
.get(SignUpActivityViewModel::class.java)

sign_up_button.setOnClickListener { signUp() }
sign_in_text_view.setOnClickListener { startActivity(Intent(this, SignInActivity::class.java)) }
}

override fun onResume() {
super.onResume()
viewModel.register()
}

override fun onPause() {
super.onPause()
viewModel.unregister()
lifecycle.addObserver(viewModel)
}

override fun showProfile() {
Expand All @@ -53,4 +47,24 @@ class SignUpActivity : BaseActivity(), AuthView {
)
viewModel.signUp(user)
}

// ViewModelListener
private val viewModelListener = object : ViewModelListener {
override fun updateState() {
when (viewModel.state) {
SignUpState.signedUpFailure -> showError(viewModel.error)
SignUpState.signedUpSuccess -> showProfile()
else -> {
}
}
}

override fun updateNetworkState() {
when (viewModel.networkState) {
NetworkState.loading -> showProgress()
NetworkState.idle -> hideProgress()
else -> showError(viewModel.error ?: getString(R.string.default_error))
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,41 +5,56 @@ import androidx.lifecycle.ViewModelProvider
import com.rootstrap.android.network.managers.UserManager
import com.rootstrap.android.network.models.User
import com.rootstrap.android.ui.base.BaseViewModel
import com.rootstrap.android.ui.view.AuthView
import com.rootstrap.android.util.NetworkState
import com.rootstrap.android.util.ViewModelListener
import com.rootstrap.android.util.extensions.ErrorEvent
import com.rootstrap.android.util.extensions.FailureEvent
import com.squareup.otto.Subscribe

open class SignUpActivityViewModel(var view: AuthView) : BaseViewModel(view) {
open class SignUpActivityViewModel(listener: ViewModelListener?) : BaseViewModel(listener) {

private val manager = UserManager

var state: SignUpState = SignUpState.none
set(value) {
field = value
listener?.updateState()
}

fun signUp(user: User) {
view.showProgress()
networkState = NetworkState.loading
manager.signUp(user)
}

@Subscribe
fun signedUpSuccessfully(event: UserManager.UserCreatedSuccessfullyEvent) {
view.hideProgress()
view.showProfile()
networkState = NetworkState.idle
state = SignUpState.signedUpSuccess
}

@Subscribe
fun signedUpError(event: ErrorEvent) {
view.hideProgress()
view.showError(event.error)
error = event.error
networkState = NetworkState.idle
networkState = NetworkState.error
}

@Subscribe
fun signedUpFailure(event: FailureEvent) {
view.hideProgress()
view.showError(null)
error = null
networkState = NetworkState.idle
state = SignUpState.signedUpFailure
}
}

class SignUpActivityViewModelFactory(var view: AuthView) : ViewModelProvider.Factory {
enum class SignUpState {
signedUpFailure,
signedUpSuccess,
none,
}

class SignUpActivityViewModelFactory(var listener: ViewModelListener?) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return SignUpActivityViewModel(view) as T
return SignUpActivityViewModel(listener) as T
}
}
Loading