mirror of
https://github.com/Steffo99/twom.git
synced 2024-11-22 16:14:25 +00:00
Handle log out
This commit is contained in:
parent
17dec236c2
commit
9f7df9bfa4
9 changed files with 157 additions and 82 deletions
|
@ -31,7 +31,7 @@
|
||||||
</provider>
|
</provider>
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".matrix.MatrixActivity"
|
android:name=".main.MainActivity"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
android:theme="@android:style/Theme.NoTitleBar">
|
android:theme="@android:style/Theme.NoTitleBar">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
|
|
|
@ -98,6 +98,9 @@ fun LoginActivityControl(
|
||||||
loginStep = LoginStep.SERVICE
|
loginStep = LoginStep.SERVICE
|
||||||
val auth = TwoMMatrix.matrix.authenticationService()
|
val auth = TwoMMatrix.matrix.authenticationService()
|
||||||
|
|
||||||
|
Log.d("Login", "Resetting authentication service...")
|
||||||
|
auth.reset()
|
||||||
|
|
||||||
Log.d("Login", "Retrieving .well-known data for: $username")
|
Log.d("Login", "Retrieving .well-known data for: $username")
|
||||||
loginStep = LoginStep.WELLKNOWN
|
loginStep = LoginStep.WELLKNOWN
|
||||||
lateinit var wellKnown: WellknownResult
|
lateinit var wellKnown: WellknownResult
|
||||||
|
|
85
app/src/main/java/eu/steffo/twom/main/MainActivity.kt
Normal file
85
app/src/main/java/eu/steffo/twom/main/MainActivity.kt
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
package eu.steffo.twom.main
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.util.Log
|
||||||
|
import androidx.activity.ComponentActivity
|
||||||
|
import androidx.activity.compose.setContent
|
||||||
|
import androidx.activity.result.ActivityResult
|
||||||
|
import androidx.activity.result.ActivityResultLauncher
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
|
import eu.steffo.twom.login.LoginActivity
|
||||||
|
import eu.steffo.twom.matrix.TwoMMatrix
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import org.matrix.android.sdk.api.session.Session
|
||||||
|
|
||||||
|
|
||||||
|
class MainActivity : ComponentActivity() {
|
||||||
|
private lateinit var loginLauncher: ActivityResultLauncher<Intent>
|
||||||
|
|
||||||
|
private var session: Session? = null
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
TwoMMatrix.ensureMatrix(applicationContext)
|
||||||
|
|
||||||
|
loginLauncher =
|
||||||
|
registerForActivityResult(
|
||||||
|
ActivityResultContracts.StartActivityForResult(),
|
||||||
|
this::handleLoginResult
|
||||||
|
)
|
||||||
|
|
||||||
|
// This calls recompose() by itself
|
||||||
|
openLastSession()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun openLastSession() {
|
||||||
|
session = TwoMMatrix.matrix.authenticationService().getLastAuthenticatedSession()
|
||||||
|
session?.open()
|
||||||
|
recompose()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun recompose() {
|
||||||
|
Log.d("Main", "Recomposing...")
|
||||||
|
setContent {
|
||||||
|
MatrixActivityScaffold(
|
||||||
|
onClickLogin = this::onClickLogin,
|
||||||
|
onClickLogout = this::onClickLogout,
|
||||||
|
session = session,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun onClickLogin() {
|
||||||
|
Log.d("Main", "Clicked login, launching login activity...")
|
||||||
|
loginLauncher.launch(Intent(applicationContext, LoginActivity::class.java))
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun handleLoginResult(result: ActivityResult) {
|
||||||
|
when (result.resultCode) {
|
||||||
|
RESULT_OK -> {
|
||||||
|
Log.d(
|
||||||
|
"Main",
|
||||||
|
"Login activity returned a successful result, trying to get session..."
|
||||||
|
)
|
||||||
|
openLastSession()
|
||||||
|
}
|
||||||
|
|
||||||
|
else -> {
|
||||||
|
Log.d("Main", "Login activity was cancelled.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun onClickLogout() {
|
||||||
|
lifecycleScope.launch {
|
||||||
|
Log.d("Main", "Clicked logout, signing out...")
|
||||||
|
session!!.signOutService().signOut(true)
|
||||||
|
session = null
|
||||||
|
Log.d("Main", "Done logging out, recomposing...")
|
||||||
|
recompose()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package eu.steffo.twom.matrix
|
package eu.steffo.twom.main
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
|
@ -11,7 +11,7 @@ import eu.steffo.twom.theme.TwoMPadding
|
||||||
import org.matrix.android.sdk.api.session.Session
|
import org.matrix.android.sdk.api.session.Session
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun MatrixActivityLoggedInControl(
|
fun MainActivityLoggedInControl(
|
||||||
session: Session,
|
session: Session,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
) {
|
) {
|
|
@ -1,4 +1,4 @@
|
||||||
package eu.steffo.twom.matrix
|
package eu.steffo.twom.main
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
|
@ -1,12 +1,8 @@
|
||||||
package eu.steffo.twom.matrix
|
package eu.steffo.twom.main
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.material.icons.Icons
|
|
||||||
import androidx.compose.material.icons.filled.AccountCircle
|
|
||||||
import androidx.compose.material3.CenterAlignedTopAppBar
|
import androidx.compose.material3.CenterAlignedTopAppBar
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
import androidx.compose.material3.Icon
|
|
||||||
import androidx.compose.material3.IconButton
|
|
||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
@ -22,6 +18,7 @@ import org.matrix.android.sdk.api.session.Session
|
||||||
@Preview
|
@Preview
|
||||||
fun MatrixActivityScaffold(
|
fun MatrixActivityScaffold(
|
||||||
onClickLogin: () -> Unit = {},
|
onClickLogin: () -> Unit = {},
|
||||||
|
onClickLogout: () -> Unit = {},
|
||||||
session: Session? = null,
|
session: Session? = null,
|
||||||
) {
|
) {
|
||||||
TwoMTheme {
|
TwoMTheme {
|
||||||
|
@ -32,22 +29,16 @@ fun MatrixActivityScaffold(
|
||||||
Text(LocalContext.current.getString(R.string.app_name))
|
Text(LocalContext.current.getString(R.string.app_name))
|
||||||
},
|
},
|
||||||
actions = {
|
actions = {
|
||||||
if (session != null) {
|
ProfileIconButton(
|
||||||
IconButton(
|
session = session,
|
||||||
onClick = {}
|
onClickLogout = onClickLogout
|
||||||
) {
|
|
||||||
Icon(
|
|
||||||
Icons.Filled.AccountCircle,
|
|
||||||
LocalContext.current.getString(R.string.account_label)
|
|
||||||
)
|
)
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
if (session != null) {
|
if (session != null) {
|
||||||
MatrixActivityLoggedInControl(
|
MainActivityLoggedInControl(
|
||||||
modifier = Modifier.padding(it),
|
modifier = Modifier.padding(it),
|
||||||
session = session,
|
session = session,
|
||||||
)
|
)
|
57
app/src/main/java/eu/steffo/twom/main/ProfileIconButton.kt
Normal file
57
app/src/main/java/eu/steffo/twom/main/ProfileIconButton.kt
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
package eu.steffo.twom.main
|
||||||
|
|
||||||
|
import androidx.compose.foundation.layout.Box
|
||||||
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.filled.AccountCircle
|
||||||
|
import androidx.compose.material3.DropdownMenu
|
||||||
|
import androidx.compose.material3.DropdownMenuItem
|
||||||
|
import androidx.compose.material3.Icon
|
||||||
|
import androidx.compose.material3.IconButton
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.runtime.setValue
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.platform.LocalContext
|
||||||
|
import androidx.compose.ui.res.stringResource
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
import eu.steffo.twom.R
|
||||||
|
import org.matrix.android.sdk.api.session.Session
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
@Preview(showBackground = true)
|
||||||
|
fun ProfileIconButton(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
|
session: Session? = null,
|
||||||
|
onClickLogout: () -> Unit = {},
|
||||||
|
) {
|
||||||
|
var expanded by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
|
Box {
|
||||||
|
IconButton(
|
||||||
|
enabled = (session != null),
|
||||||
|
onClick = { expanded = true },
|
||||||
|
) {
|
||||||
|
Icon(
|
||||||
|
Icons.Filled.AccountCircle,
|
||||||
|
LocalContext.current.getString(R.string.account_label)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
DropdownMenu(
|
||||||
|
expanded = expanded,
|
||||||
|
onDismissRequest = { expanded = false },
|
||||||
|
) {
|
||||||
|
if (session != null) {
|
||||||
|
DropdownMenuItem(
|
||||||
|
text = {
|
||||||
|
Text(stringResource(id = R.string.profile_logout_text))
|
||||||
|
},
|
||||||
|
onClick = onClickLogout
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,62 +0,0 @@
|
||||||
package eu.steffo.twom.matrix
|
|
||||||
|
|
||||||
import android.content.Intent
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.util.Log
|
|
||||||
import androidx.activity.ComponentActivity
|
|
||||||
import androidx.activity.compose.setContent
|
|
||||||
import androidx.activity.result.ActivityResultLauncher
|
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
|
||||||
import eu.steffo.twom.login.LoginActivity
|
|
||||||
import org.matrix.android.sdk.api.session.Session
|
|
||||||
|
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
|
||||||
class MatrixActivity : ComponentActivity() {
|
|
||||||
private lateinit var loginLauncher: ActivityResultLauncher<Intent>
|
|
||||||
|
|
||||||
private var session: Session? = null
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
actionBar?.hide()
|
|
||||||
|
|
||||||
TwoMMatrix.ensureMatrix(applicationContext)
|
|
||||||
|
|
||||||
loginLauncher =
|
|
||||||
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) HandleResult@{
|
|
||||||
Log.d("Matrix", "LoginActivity has returned a result!")
|
|
||||||
|
|
||||||
when (it.resultCode) {
|
|
||||||
RESULT_OK -> {
|
|
||||||
session =
|
|
||||||
TwoMMatrix.matrix.authenticationService().getLastAuthenticatedSession()
|
|
||||||
|
|
||||||
setContent {
|
|
||||||
MatrixActivityScaffold(
|
|
||||||
onClickLogin = this::onClickLogin,
|
|
||||||
session = session,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if there's a session already stored
|
|
||||||
session = TwoMMatrix.matrix.authenticationService().getLastAuthenticatedSession()
|
|
||||||
|
|
||||||
setContent {
|
|
||||||
MatrixActivityScaffold(
|
|
||||||
onClickLogin = this::onClickLogin,
|
|
||||||
session = session,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// No onStart is needed, as session already sets content when it's changed
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun onClickLogin() {
|
|
||||||
loginLauncher.launch(Intent(applicationContext, LoginActivity::class.java))
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -23,4 +23,5 @@
|
||||||
<string name="notloggedin_login_text">Login</string>
|
<string name="notloggedin_login_text">Login</string>
|
||||||
<string name="loggedin_text">You are logged in.</string>
|
<string name="loggedin_text">You are logged in.</string>
|
||||||
<string name="account_label">My account</string>
|
<string name="account_label">My account</string>
|
||||||
|
<string name="profile_logout_text">Logout</string>
|
||||||
</resources>
|
</resources>
|
Loading…
Reference in a new issue