mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-03-17 19:58:57 +03:00
Login screens: back button management for SSO
This commit is contained in:
parent
f12e6c941d
commit
62d5aba796
6 changed files with 30 additions and 20 deletions
|
@ -21,6 +21,7 @@ interface OnBackPressed {
|
|||
/**
|
||||
* Returns true, if the on back pressed event has been handled by this Fragment.
|
||||
* Otherwise return false
|
||||
* @param toolbarButton true if this is the back button from the toolbar
|
||||
*/
|
||||
fun onBackPressed(): Boolean
|
||||
fun onBackPressed(toolbarButton: Boolean): Boolean
|
||||
}
|
||||
|
|
|
@ -278,7 +278,7 @@ abstract class VectorBaseActivity : AppCompatActivity(), HasScreenInjector {
|
|||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
if (item.itemId == android.R.id.home) {
|
||||
onBackPressed()
|
||||
onBackPressed(true)
|
||||
return true
|
||||
}
|
||||
|
||||
|
@ -286,20 +286,24 @@ abstract class VectorBaseActivity : AppCompatActivity(), HasScreenInjector {
|
|||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
val handled = recursivelyDispatchOnBackPressed(supportFragmentManager)
|
||||
onBackPressed(false)
|
||||
}
|
||||
|
||||
private fun onBackPressed(fromToolbar: Boolean) {
|
||||
val handled = recursivelyDispatchOnBackPressed(supportFragmentManager, fromToolbar)
|
||||
if (!handled) {
|
||||
super.onBackPressed()
|
||||
}
|
||||
}
|
||||
|
||||
private fun recursivelyDispatchOnBackPressed(fm: FragmentManager): Boolean {
|
||||
val reverseOrder = fm.fragments.filter { it is VectorBaseFragment }.reversed()
|
||||
private fun recursivelyDispatchOnBackPressed(fm: FragmentManager, fromToolbar: Boolean): Boolean {
|
||||
val reverseOrder = fm.fragments.filterIsInstance<VectorBaseFragment>().reversed()
|
||||
for (f in reverseOrder) {
|
||||
val handledByChildFragments = recursivelyDispatchOnBackPressed(f.childFragmentManager)
|
||||
val handledByChildFragments = recursivelyDispatchOnBackPressed(f.childFragmentManager, fromToolbar)
|
||||
if (handledByChildFragments) {
|
||||
return true
|
||||
}
|
||||
if (f is OnBackPressed && f.onBackPressed()) {
|
||||
if (f is OnBackPressed && f.onBackPressed(fromToolbar)) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
|
|
@ -329,7 +329,7 @@ class RoomListFragment @Inject constructor(
|
|||
stateView.state = StateView.State.Error(message)
|
||||
}
|
||||
|
||||
override fun onBackPressed(): Boolean {
|
||||
override fun onBackPressed(toolbarButton: Boolean): Boolean {
|
||||
if (createChatFabMenu.onBackPressed()) {
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ abstract class AbstractLoginFragment : VectorBaseFragment(), OnBackPressed {
|
|||
loginSharedActionViewModel = activityViewModelProvider.get(LoginSharedActionViewModel::class.java)
|
||||
}
|
||||
|
||||
override fun onBackPressed(): Boolean {
|
||||
override fun onBackPressed(toolbarButton: Boolean): Boolean {
|
||||
resetViewModel()
|
||||
// Do not consume the Back event
|
||||
return false
|
||||
|
|
|
@ -20,6 +20,7 @@ import android.content.Context
|
|||
import android.content.Intent
|
||||
import android.view.View
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.fragment.app.FragmentManager
|
||||
|
@ -34,6 +35,7 @@ import im.vector.riotx.core.di.ScreenComponent
|
|||
import im.vector.riotx.core.error.ErrorFormatter
|
||||
import im.vector.riotx.core.extensions.addFragment
|
||||
import im.vector.riotx.core.extensions.addFragmentToBackstack
|
||||
import im.vector.riotx.core.platform.ToolbarConfigurable
|
||||
import im.vector.riotx.core.platform.VectorBaseActivity
|
||||
import im.vector.riotx.features.home.HomeActivity
|
||||
import im.vector.riotx.features.login.terms.LoginTermsFragment
|
||||
|
@ -46,7 +48,7 @@ import javax.net.ssl.HttpsURLConnection
|
|||
/**
|
||||
* The LoginActivity manages the fragment navigation and also display the loading View
|
||||
*/
|
||||
class LoginActivity : VectorBaseActivity() {
|
||||
class LoginActivity : VectorBaseActivity(), ToolbarConfigurable {
|
||||
|
||||
private val loginViewModel: LoginViewModel by viewModel()
|
||||
private lateinit var loginSharedActionViewModel: LoginSharedActionViewModel
|
||||
|
@ -134,16 +136,16 @@ class LoginActivity : VectorBaseActivity() {
|
|||
}
|
||||
|
||||
private fun displayRegistrationError(throwable: Throwable) {
|
||||
val message = when(throwable) {
|
||||
val message = when (throwable) {
|
||||
is Failure.ServerError -> {
|
||||
if(throwable.error.code == MatrixError.FORBIDDEN
|
||||
if (throwable.error.code == MatrixError.FORBIDDEN
|
||||
&& throwable.httpCode == HttpsURLConnection.HTTP_FORBIDDEN /* 403 */) {
|
||||
getString(R.string.login_registration_disabled)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
else -> null
|
||||
else -> null
|
||||
}
|
||||
?: errorFormatter.toHumanReadable(throwable)
|
||||
|
||||
|
@ -274,6 +276,10 @@ class LoginActivity : VectorBaseActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun configure(toolbar: Toolbar) {
|
||||
configureToolbar(toolbar)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val FRAGMENT_REGISTRATION_STAGE_TAG = "FRAGMENT_REGISTRATION_STAGE_TAG"
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ import javax.inject.Inject
|
|||
|
||||
/**
|
||||
* This screen is displayed for SSO login and also when the application does not support login flow or registration flow
|
||||
* of the homeserfver, as a fallback to login or to create an account
|
||||
* of the homeserver, as a fallback to login or to create an account
|
||||
*/
|
||||
class LoginWebFragment @Inject constructor(private val assetReader: AssetReader) : AbstractLoginFragment() {
|
||||
|
||||
|
@ -241,12 +241,11 @@ class LoginWebFragment @Inject constructor(private val assetReader: AssetReader)
|
|||
// Nothing to do
|
||||
}
|
||||
|
||||
override fun onBackPressed(): Boolean {
|
||||
return if (loginWebWebView.canGoBack()) {
|
||||
loginWebWebView.goBack()
|
||||
true
|
||||
} else {
|
||||
super.onBackPressed()
|
||||
override fun onBackPressed(toolbarButton: Boolean): Boolean {
|
||||
return when {
|
||||
toolbarButton -> super.onBackPressed(toolbarButton)
|
||||
loginWebWebView.canGoBack() -> loginWebWebView.goBack().run { true }
|
||||
else -> super.onBackPressed(toolbarButton)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue