94 lines
3.2 KiB
Kotlin
94 lines
3.2 KiB
Kotlin
package net.keinekekse.app
|
|
|
|
import androidx.compose.animation.AnimatedVisibility
|
|
import androidx.compose.foundation.Image
|
|
import androidx.compose.foundation.background
|
|
import androidx.compose.foundation.layout.Column
|
|
import androidx.compose.foundation.layout.fillMaxSize
|
|
import androidx.compose.foundation.layout.fillMaxWidth
|
|
import androidx.compose.foundation.layout.safeContentPadding
|
|
import androidx.compose.material3.Button
|
|
import androidx.compose.material3.MaterialTheme
|
|
import androidx.compose.material3.Text
|
|
import androidx.compose.runtime.*
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.tooling.preview.Preview
|
|
import io.github.oshai.kotlinlogging.KotlinLogging
|
|
import io.ktor.client.*
|
|
import io.ktor.client.request.*
|
|
import io.ktor.client.statement.*
|
|
import kotlinx.coroutines.CoroutineScope
|
|
import kotlinx.coroutines.Dispatchers
|
|
import kotlinx.coroutines.launch
|
|
import net.keinekekse.app.books.generated.resources.Res
|
|
import net.keinekekse.app.books.generated.resources.compose_multiplatform
|
|
import org.jetbrains.compose.resources.painterResource
|
|
import org.koin.compose.koinInject
|
|
import org.koin.core.annotation.Single
|
|
|
|
private val logger = KotlinLogging.logger {}
|
|
|
|
@Composable
|
|
@Preview
|
|
fun App() {
|
|
MaterialTheme {
|
|
/*
|
|
eigenes Theme -> https://material-foundation.github.io/material-theme-builder/
|
|
den Download in den source code übernehmen (in Theme.kt sind Anpassungen nötig)
|
|
per default hat die generierte Klasse den Namen AppTheme.
|
|
// AppTheme {
|
|
*/
|
|
val test = koinInject<TestAuth>()
|
|
var showContent by remember { mutableStateOf(false) }
|
|
Column(
|
|
modifier = Modifier
|
|
.background(MaterialTheme.colorScheme.primaryContainer)
|
|
.safeContentPadding()
|
|
.fillMaxSize(),
|
|
horizontalAlignment = Alignment.CenterHorizontally,
|
|
) {
|
|
Button(onClick = { showContent = !showContent }) {
|
|
Text("Click me!")
|
|
|
|
}
|
|
Button(onClick = {
|
|
CoroutineScope(Dispatchers.Default).launch {
|
|
logger.debug { "requesting '/test'" }
|
|
test.request("/test")
|
|
}
|
|
}) {
|
|
Text("Test Token Refresh")
|
|
}
|
|
AnimatedVisibility(showContent) {
|
|
val greeting = remember { Greeting().greet() }
|
|
Column(
|
|
modifier = Modifier.fillMaxWidth(),
|
|
horizontalAlignment = Alignment.CenterHorizontally,
|
|
) {
|
|
Image(painterResource(Res.drawable.compose_multiplatform), null)
|
|
Text("Compose: $greeting")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Single
|
|
class TestAuth(val httpClient: HttpClient) {
|
|
|
|
private val srv = "https://kas.keinekekse.net/"
|
|
suspend fun request(url: String) {
|
|
logger.debug { "connecting" }
|
|
// val response = httpClient.get(srv + "testdb/books")
|
|
// val books: List<Book> = response.body()
|
|
|
|
val response = httpClient.get(srv + url + "testdb/books")
|
|
val body = response.bodyAsText()
|
|
|
|
logger.debug { "call to $url" }
|
|
logger.debug { response.status }
|
|
logger.debug { body }
|
|
}
|
|
}
|