1
Fork 0
mirror of https://github.com/Steffo99/twom.git synced 2024-11-21 23:54:26 +00:00

So close, yet so far away

This commit is contained in:
Steffo 2023-11-29 17:29:00 +01:00
parent 43f4b266aa
commit 38f0ecbf1c
Signed by: steffo
GPG key ID: 2A24051445686895
7 changed files with 99 additions and 46 deletions

View file

@ -50,13 +50,22 @@ class MainActivity : ComponentActivity() {
}
private fun openSession() {
Log.d("Main", "If possible, opening session: $session")
session?.open()
val currentSession = session
Log.d("Main", "If possible, opening session: $currentSession")
if (currentSession != null) {
Log.d("Main", "Opening session: $currentSession")
currentSession.open()
currentSession.syncService().startSync(true)
}
}
private fun closeSession() {
Log.d("Main", "If possible, closing session: $session")
session?.close()
val currentSession = session
Log.d("Main", "If possible, closing session: $currentSession")
if (currentSession != null) {
Log.d("Main", "Closing session: $currentSession")
currentSession.close()
}
}
private fun onClickLogin() {

View file

@ -1,23 +0,0 @@
package eu.steffo.twom.main
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import eu.steffo.twom.R
import eu.steffo.twom.theme.TwoMPadding
import org.matrix.android.sdk.api.session.Session
@Composable
fun MainActivityLoggedInControl(
session: Session,
modifier: Modifier = Modifier,
) {
Column(modifier) {
Row(TwoMPadding.base) {
Text(LocalContext.current.getString(R.string.loggedin_text))
}
}
}

View file

@ -0,0 +1,69 @@
package eu.steffo.twom.main
import android.util.Log
import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Divider
import androidx.compose.material3.ListItem
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
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.res.stringResource
import eu.steffo.twom.R
import eu.steffo.twom.matrix.Avatar
import eu.steffo.twom.theme.TwoMPadding
import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.room.model.RoomSummary
import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
@Composable
fun MainActivityRoomListControl(
session: Session,
modifier: Modifier = Modifier,
) {
var roomSummaries by remember { mutableStateOf<List<RoomSummary>?>(null) }
LaunchedEffect(session) GetRoomSummaries@{
Log.d("RoomList", "Getting room summaries...")
val queryParamsBuilder = roomSummaryQueryParams()
roomSummaries = session.roomService().getRoomSummaries(queryParamsBuilder)
Log.d("RoomList", "Obtained room summaries: $roomSummaries")
val sanityCheck = session.roomService().getRoom("!MdYm4p7umKo4DYX71m:candy.steffo.eu")
Log.d("RoomList", "Sanity check: $sanityCheck")
}
Column(modifier) {
if (roomSummaries == null) {
Text(
modifier = TwoMPadding.base,
text = stringResource(R.string.loading)
)
} else if (roomSummaries!!.isEmpty()) {
Text(
modifier = TwoMPadding.base,
text = stringResource(R.string.room_list_empty_text)
)
} else {
roomSummaries!!.forEach {
ListItem(
headlineContent = {
Text(it.name)
},
leadingContent = {
Avatar(
session = session,
url = it.avatarUrl,
contentDescription = "" // TODO: Is this correct?
)
}
)
Divider()
}
}
}
}

View file

@ -37,16 +37,16 @@ fun MatrixActivityScaffold(
)
}
) {
if (session != null) {
MainActivityLoggedInControl(
modifier = Modifier.padding(it),
session = session,
)
} else {
if (session == null) {
MatrixActivityNotLoggedInControl(
modifier = Modifier.padding(it),
onClickLogin = onClickLogin,
)
} else {
MainActivityRoomListControl(
modifier = Modifier.padding(it),
session = session,
)
}
}
}

View file

@ -18,7 +18,7 @@ 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 eu.steffo.twom.matrix.Avatar
import eu.steffo.twom.matrix.UserAvatar
import org.matrix.android.sdk.api.session.Session
@Composable
@ -41,7 +41,7 @@ fun ProfileIconButton(
contentDescription = LocalContext.current.getString(R.string.account_label),
)
} else {
Avatar(
UserAvatar(
session = session,
userId = session.myUserId,
contentDescription = LocalContext.current.getString(R.string.account_label),

View file

@ -16,32 +16,28 @@ import org.matrix.android.sdk.api.session.Session
@Composable
fun Avatar(
session: Session,
userId: String,
url: String,
contentDescription: String,
) {
var avatar by remember { mutableStateOf<ImageBitmap?>(null) }
var fetched by remember { mutableStateOf(false) }
LaunchedEffect(session, userId) GetAvatar@{
Log.d("Avatar", "Trying to retrieve the avatar url for $userId...")
val avatarUrl = session.profileService().getAvatarUrl(userId)
Log.d("Avatar", "Avatar URL for $userId is: $avatarUrl")
LaunchedEffect(session, url) GetAvatar@{
Log.d("Avatar", "Downloading avatar at: $url")
val avatarFile = session.fileService().downloadFile(
fileName = "avatar",
url = avatarUrl.getOrNull(),
url = url,
mimeType = null,
elementToDecrypt = null,
)
// TODO: Should I check the MIME type? And the size of the image?
Log.d("Avatar", "Avatar file for $userId is: $avatarFile")
Log.d("Avatar", "File for $url is: $avatarFile")
val avatarBitmap = BitmapFactory.decodeFile(avatarFile.absolutePath)
Log.d("Avatar", "Avatar bitmap for $userId is: $avatarBitmap")
Log.d("Avatar", "Bitmap for $url is: $avatarBitmap")
avatar = avatarBitmap.asImageBitmap()
fetched = true
}
Image(
bitmap = if (fetched && avatar != null) avatar!! else TwoMMatrix.defaultAvatar,
bitmap = if (avatar != null) avatar!! else TwoMMatrix.defaultAvatar,
contentDescription = contentDescription
)
}

View file

@ -24,4 +24,6 @@
<string name="loggedin_text">You are logged in.</string>
<string name="account_label">My account</string>
<string name="profile_logout_text">Logout</string>
<string name="room_list_empty_text">There are no rooms.</string>
<string name="loading">Loading...</string>
</resources>