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 import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.size 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 import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface 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() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { CleverClassTheme { Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { DSBContent(activity = this) } } } } } // Content of DSBmobile @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), title = { Text(text = "DSBmobile", style = MaterialTheme.typography.headlineSmall, color = MaterialTheme.colorScheme.onPrimaryContainer )}, navigationIcon = { IconButton(onClick = { activity.finish() }) { Icon( imageVector = Icons.Filled.ArrowBack, contentDescription = null, modifier = Modifier.size(28.dp), tint = MaterialTheme.colorScheme.onPrimaryContainer ) } }, 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() ) when (loadingState) { 1 -> { DSBLoading() } -1 -> { DSBNoInternet() } else -> { Column( horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier .verticalScroll(rememberScrollState()) .fillMaxWidth() ) { Spacer(modifier = Modifier.height(32.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 DSBLoading(){ Box( modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center ){ CircularProgressIndicator() } } @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 ) 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 ) } } }