Handle navigation with VectorSharedAction
This commit is contained in:
parent
4485d1c685
commit
6ab7209e4d
@ -31,6 +31,7 @@ import im.vector.riotx.features.home.HomeSharedActionViewModel
|
||||
import im.vector.riotx.features.home.createdirect.CreateDirectRoomSharedActionViewModel
|
||||
import im.vector.riotx.features.home.room.detail.timeline.action.MessageSharedActionViewModel
|
||||
import im.vector.riotx.features.home.room.list.actions.RoomListQuickActionsSharedActionViewModel
|
||||
import im.vector.riotx.features.login.LoginSharedActionViewModel
|
||||
import im.vector.riotx.features.reactions.EmojiChooserViewModel
|
||||
import im.vector.riotx.features.roomdirectory.RoomDirectorySharedActionViewModel
|
||||
import im.vector.riotx.features.workers.signout.SignOutViewModel
|
||||
@ -112,4 +113,9 @@ interface ViewModelModule {
|
||||
@IntoMap
|
||||
@ViewModelKey(RoomDirectorySharedActionViewModel::class)
|
||||
fun bindRoomDirectorySharedActionViewModel(viewModel: RoomDirectorySharedActionViewModel): ViewModel
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ViewModelKey(LoginSharedActionViewModel::class)
|
||||
fun bindLoginSharedActionViewModel(viewModel: LoginSharedActionViewModel): ViewModel
|
||||
}
|
||||
|
@ -23,6 +23,5 @@ sealed class LoginAction : VectorViewModelAction {
|
||||
data class UpdateHomeServer(val homeServerUrl: String) : LoginAction()
|
||||
data class Login(val login: String, val password: String) : LoginAction()
|
||||
data class SsoLoginSuccess(val credentials: Credentials) : LoginAction()
|
||||
data class NavigateTo(val target: LoginActivity.Navigation) : LoginAction()
|
||||
data class InitWith(val loginConfig: LoginConfig) : LoginAction()
|
||||
}
|
||||
|
@ -25,7 +25,6 @@ import im.vector.riotx.R
|
||||
import im.vector.riotx.core.di.ScreenComponent
|
||||
import im.vector.riotx.core.extensions.addFragment
|
||||
import im.vector.riotx.core.extensions.addFragmentToBackstack
|
||||
import im.vector.riotx.core.extensions.observeEvent
|
||||
import im.vector.riotx.core.platform.VectorBaseActivity
|
||||
import im.vector.riotx.features.disclaimer.showDisclaimerDialog
|
||||
import im.vector.riotx.features.home.HomeActivity
|
||||
@ -33,13 +32,8 @@ import javax.inject.Inject
|
||||
|
||||
class LoginActivity : VectorBaseActivity() {
|
||||
|
||||
// Supported navigation actions for this Activity
|
||||
sealed class Navigation {
|
||||
object OpenSsoLoginFallback : Navigation()
|
||||
object GoBack : Navigation()
|
||||
}
|
||||
|
||||
private val loginViewModel: LoginViewModel by viewModel()
|
||||
private lateinit var loginSharedActionViewModel: LoginSharedActionViewModel
|
||||
|
||||
@Inject lateinit var loginViewModelFactory: LoginViewModel.Factory
|
||||
|
||||
@ -60,12 +54,15 @@ class LoginActivity : VectorBaseActivity() {
|
||||
loginViewModel.handle(LoginAction.InitWith(loginConfig))
|
||||
}
|
||||
|
||||
loginViewModel.navigationLiveData.observeEvent(this) {
|
||||
when (it) {
|
||||
is Navigation.OpenSsoLoginFallback -> addFragmentToBackstack(R.id.simpleFragmentContainer, LoginSsoFallbackFragment::class.java)
|
||||
is Navigation.GoBack -> supportFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)
|
||||
}
|
||||
}
|
||||
loginSharedActionViewModel = viewModelProvider.get(LoginSharedActionViewModel::class.java)
|
||||
loginSharedActionViewModel.observe()
|
||||
.subscribe {
|
||||
when (it) {
|
||||
is LoginNavigation.OpenSsoLoginFallback -> addFragmentToBackstack(R.id.simpleFragmentContainer, LoginSsoFallbackFragment::class.java)
|
||||
is LoginNavigation.GoBack -> supportFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)
|
||||
}
|
||||
}
|
||||
.disposeOnDestroy()
|
||||
|
||||
loginViewModel.selectSubscribe(this, LoginViewState::asyncLoginAction) {
|
||||
if (it is Success) {
|
||||
|
@ -44,6 +44,7 @@ import javax.inject.Inject
|
||||
class LoginFragment @Inject constructor() : VectorBaseFragment() {
|
||||
|
||||
private val viewModel: LoginViewModel by activityViewModel()
|
||||
private lateinit var loginSharedActionViewModel: LoginSharedActionViewModel
|
||||
|
||||
private var passwordShown = false
|
||||
|
||||
@ -52,6 +53,8 @@ class LoginFragment @Inject constructor() : VectorBaseFragment() {
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
loginSharedActionViewModel = activityViewModelProvider.get(LoginSharedActionViewModel::class.java)
|
||||
|
||||
setupNotice()
|
||||
setupAuthButton()
|
||||
setupPasswordReveal()
|
||||
@ -114,7 +117,7 @@ class LoginFragment @Inject constructor() : VectorBaseFragment() {
|
||||
}
|
||||
|
||||
private fun openSso() {
|
||||
viewModel.handle(LoginAction.NavigateTo(LoginActivity.Navigation.OpenSsoLoginFallback))
|
||||
loginSharedActionViewModel.post(LoginNavigation.OpenSsoLoginFallback)
|
||||
}
|
||||
|
||||
private fun setupPasswordReveal() {
|
||||
|
@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright 2019 New Vector Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package im.vector.riotx.features.login
|
||||
|
||||
import im.vector.riotx.core.platform.VectorSharedAction
|
||||
|
||||
// Supported navigation actions for this Activity
|
||||
sealed class LoginNavigation : VectorSharedAction {
|
||||
object OpenSsoLoginFallback : LoginNavigation()
|
||||
object GoBack : LoginNavigation()
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright 2019 New Vector Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package im.vector.riotx.features.login
|
||||
|
||||
import im.vector.riotx.core.platform.VectorSharedActionViewModel
|
||||
import javax.inject.Inject
|
||||
|
||||
class LoginSharedActionViewModel @Inject constructor() : VectorSharedActionViewModel<LoginNavigation>()
|
@ -47,6 +47,7 @@ import javax.inject.Inject
|
||||
*/
|
||||
class LoginSsoFallbackFragment @Inject constructor() : VectorBaseFragment(), OnBackPressed {
|
||||
|
||||
private lateinit var loginSharedActionViewModel: LoginSharedActionViewModel
|
||||
private val viewModel: LoginViewModel by activityViewModel()
|
||||
|
||||
var homeServerUrl: String = ""
|
||||
@ -69,6 +70,7 @@ class LoginSsoFallbackFragment @Inject constructor() : VectorBaseFragment(), OnB
|
||||
login_sso_fallback_toolbar.title = getString(R.string.login)
|
||||
|
||||
setupWebview()
|
||||
loginSharedActionViewModel = activityViewModelProvider.get(LoginSharedActionViewModel::class.java)
|
||||
}
|
||||
|
||||
@SuppressLint("SetJavaScriptEnabled")
|
||||
@ -143,7 +145,7 @@ class LoginSsoFallbackFragment @Inject constructor() : VectorBaseFragment(), OnB
|
||||
super.onReceivedError(view, errorCode, description, failingUrl)
|
||||
|
||||
// on error case, close this fragment
|
||||
viewModel.handle(LoginAction.NavigateTo(LoginActivity.Navigation.GoBack))
|
||||
loginSharedActionViewModel.post(LoginNavigation.GoBack)
|
||||
}
|
||||
|
||||
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
|
||||
|
@ -16,8 +16,6 @@
|
||||
|
||||
package im.vector.riotx.features.login
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import arrow.core.Try
|
||||
import com.airbnb.mvrx.*
|
||||
import com.squareup.inject.assisted.Assisted
|
||||
@ -32,7 +30,6 @@ import im.vector.matrix.android.internal.auth.data.LoginFlowResponse
|
||||
import im.vector.riotx.core.di.ActiveSessionHolder
|
||||
import im.vector.riotx.core.extensions.configureAndStart
|
||||
import im.vector.riotx.core.platform.VectorViewModel
|
||||
import im.vector.riotx.core.utils.LiveEvent
|
||||
import im.vector.riotx.features.notifications.PushRuleTriggerListener
|
||||
import im.vector.riotx.features.session.SessionListener
|
||||
import timber.log.Timber
|
||||
@ -60,10 +57,6 @@ class LoginViewModel @AssistedInject constructor(@Assisted initialState: LoginVi
|
||||
|
||||
private var loginConfig: LoginConfig? = null
|
||||
|
||||
private val _navigationLiveData = MutableLiveData<LiveEvent<LoginActivity.Navigation>>()
|
||||
val navigationLiveData: LiveData<LiveEvent<LoginActivity.Navigation>>
|
||||
get() = _navigationLiveData
|
||||
|
||||
private var homeServerConnectionConfig: HomeServerConnectionConfig? = null
|
||||
private var currentTask: Cancelable? = null
|
||||
|
||||
@ -73,7 +66,6 @@ class LoginViewModel @AssistedInject constructor(@Assisted initialState: LoginVi
|
||||
is LoginAction.UpdateHomeServer -> handleUpdateHomeserver(action)
|
||||
is LoginAction.Login -> handleLogin(action)
|
||||
is LoginAction.SsoLoginSuccess -> handleSsoLoginSuccess(action)
|
||||
is LoginAction.NavigateTo -> handleNavigation(action)
|
||||
}
|
||||
}
|
||||
|
||||
@ -202,10 +194,6 @@ class LoginViewModel @AssistedInject constructor(@Assisted initialState: LoginVi
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleNavigation(action: LoginAction.NavigateTo) {
|
||||
_navigationLiveData.postValue(LiveEvent(action.target))
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
super.onCleared()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user