Update DSBmobile
This commit is contained in:
@@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user