Update DSBmobile

This commit is contained in:
BuildTools
2024-04-21 20:24:22 +02:00
parent 2e1f335a47
commit cd9e26fbe5
8 changed files with 277 additions and 23 deletions

View File

@@ -1,10 +1,14 @@
package com.schoolapp.cleverclass
import android.content.Context
import android.content.Intent
import android.graphics.BitmapFactory
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.Image
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
@@ -15,6 +19,9 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material.icons.filled.Refresh
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.Divider
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
@@ -24,25 +31,29 @@ import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
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.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.unit.dp
import com.schoolapp.cleverclass.ui.theme.CleverClassTheme
import com.schoolapp.cleverclass.ui.theme.MiddleColor
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import org.json.JSONObject
import java.io.File
class DSBActivity : ComponentActivity() {
@OptIn(DelicateCoroutinesApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
GlobalScope.launch(Dispatchers.IO) {
downloadDSB(this@DSBActivity)
}
setContent {
CleverClassTheme {
Surface(
@@ -57,9 +68,19 @@ class DSBActivity : ComponentActivity() {
}
// Content of DSBmobile
@OptIn(ExperimentalMaterial3Api::class)
@OptIn(ExperimentalMaterial3Api::class, DelicateCoroutinesApi::class)
@Composable
fun DSBContent(activity: ComponentActivity){
var loadingState by remember {
mutableStateOf(1)
}
LaunchedEffect(Unit) {
GlobalScope.launch(Dispatchers.IO) {
loadingState = downloadDSB(activity)
}
}
Column {
TopAppBar(
colors = TopAppBarDefaults.centerAlignedTopAppBarColors(MaterialTheme.colorScheme.primaryContainer),
@@ -78,30 +99,120 @@ fun DSBContent(activity: ComponentActivity){
)
}
},
actions = {
if(loadingState != 1) {
IconButton(
onClick = {
loadingState = 1
GlobalScope.launch(Dispatchers.IO) {
loadingState = downloadDSB(activity)
}
}
) {
Icon(
imageVector = Icons.Filled.Refresh,
contentDescription = null,
modifier = Modifier.size(28.dp),
tint = MaterialTheme.colorScheme.onPrimaryContainer
)
}
}
},
modifier = Modifier.fillMaxWidth()
)
Column(modifier = Modifier.verticalScroll(rememberScrollState())) {
val mainFolder = File(activity.filesDir, "dataDSB")
when (loadingState) {
1 -> {
DSBLoading()
}
-1 -> {
DSBNoInternet()
}
else -> {
Column(
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier
.verticalScroll(rememberScrollState())
.fillMaxWidth()
) {
Spacer(modifier = Modifier.height(32.dp))
mainFolder.listFiles()?.forEach { folder ->
DayPrefab(folder = folder)
Spacer(modifier = Modifier.height(48.dp))
val mainFolder = File(activity.filesDir, "dataDSB")
mainFolder.listFiles()?.forEach { folder ->
DayPrefab(folder, activity)
Spacer(modifier = Modifier.height(32.dp))
Divider()
Spacer(modifier = Modifier.height(32.dp))
}
}
}
}
}
}
@Composable
fun DayPrefab(folder: File){
val imageFiles = folder.listFiles { file -> file.extension == "jpg" }?.toList()
fun DSBLoading(){
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
){
CircularProgressIndicator()
}
}
Column {
imageFiles?.forEach {
val imageBitmap = BitmapFactory.decodeFile(it.absolutePath)
@Composable
fun DSBNoInternet(){
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
){
Text(
text = "Keine Internetverbindung",
style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onBackground
)
}
}
@Composable
fun DayPrefab(folder: File, activity: Context){
Box(
contentAlignment = Alignment.Center,
modifier = Modifier
.fillMaxWidth()
.height(300.dp)
.clickable {
val intent = Intent(activity, DSBDayViewActivity::class.java).apply {
putExtra(DSBDayViewActivity.FOLDER_KEY, folder.absolutePath)
}
activity.startActivity(intent)
}
) {
val information = JSONObject(File(folder, "info.json").readText())
val previewImageBitmap = BitmapFactory.decodeFile(File(folder, "0.jpg").absolutePath)
Column(horizontalAlignment = Alignment.CenterHorizontally) {
Text(
text = "${information.get("FormatInfo")} - ${information.get("PlanInfo").toString().removeSuffix(".pdf")}",
style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onBackground
)
Image(bitmap = imageBitmap.asImageBitmap(), contentDescription = null)
Spacer(modifier = Modifier.height(8.dp))
Text(
text = information.get("Date").toString(),
style = MaterialTheme.typography.bodySmall,
color = MiddleColor
)
Spacer(modifier = Modifier.height(8.dp))
Image(
bitmap = previewImageBitmap.asImageBitmap(),
contentDescription = null
)
}
}
}