diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 4cbe039..f0fdb85 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -61,14 +61,11 @@ dependencies {
implementation("androidx.datastore:datastore-preferences:1.0.0")
implementation("com.google.code.gson:gson:2.9.0")
implementation(platform("androidx.compose:compose-bom:2023.03.00"))
- implementation(platform("androidx.compose:compose-bom:2023.03.00"))
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
androidTestImplementation("androidx.compose.ui:ui-test-junit4")
androidTestImplementation(platform("androidx.compose:compose-bom:2023.03.00"))
- androidTestImplementation(platform("androidx.compose:compose-bom:2023.03.00"))
- androidTestImplementation(platform("androidx.compose:compose-bom:2023.03.00"))
debugImplementation("androidx.compose.ui:ui-tooling")
debugImplementation("androidx.compose.ui:ui-test-manifest")
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2c4e7f..5bee986 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools">
+
+
{
+ 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
+ )
}
}
}
diff --git a/app/src/main/java/com/schoolapp/cleverclass/DSBDayViewActivity.kt b/app/src/main/java/com/schoolapp/cleverclass/DSBDayViewActivity.kt
new file mode 100644
index 0000000..9e1d0db
--- /dev/null
+++ b/app/src/main/java/com/schoolapp/cleverclass/DSBDayViewActivity.kt
@@ -0,0 +1,107 @@
+package com.schoolapp.cleverclass
+
+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.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.padding
+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.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.ui.Modifier
+import androidx.compose.ui.graphics.asImageBitmap
+import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.unit.dp
+import com.schoolapp.cleverclass.ui.theme.CleverClassTheme
+import org.json.JSONObject
+import java.io.File
+
+private lateinit var folder : File
+private lateinit var information : JSONObject
+
+class DSBDayViewActivity : ComponentActivity() {
+ companion object{
+ const val FOLDER_KEY = "folder_key"
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ folder = File(intent.getStringExtra(FOLDER_KEY) ?: "")
+ information = JSONObject(File(folder, "info.json").readText())
+
+ setContent {
+ CleverClassTheme {
+ Surface(
+ modifier = Modifier.fillMaxSize(),
+ color = MaterialTheme.colorScheme.background
+ ) {
+ DSBDayViewContent(activity = this)
+ }
+ }
+ }
+ }
+}
+
+// Content of DSBDayView
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun DSBDayViewContent(activity: ComponentActivity){
+ Column{
+ TopAppBar(
+ colors = TopAppBarDefaults.centerAlignedTopAppBarColors(MaterialTheme.colorScheme.primaryContainer),
+ title = {
+ Text(
+ text = information.get("PlanInfo").toString(),
+ 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
+ )
+ }
+ },
+ modifier = Modifier.fillMaxWidth()
+ )
+
+ val imageFiles = folder.listFiles { file -> file.extension == "jpg" }?.toList()
+
+ Column(
+ modifier = Modifier
+ .padding(8.dp)
+ .verticalScroll(rememberScrollState())
+ ) {
+ imageFiles?.forEach {
+ Image(
+ bitmap = BitmapFactory.decodeFile(it.absolutePath).asImageBitmap(),
+ contentDescription = null,
+ contentScale = ContentScale.FillWidth,
+ modifier = Modifier.fillMaxWidth()
+ )
+ Spacer(modifier = Modifier.height(8.dp))
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/schoolapp/cleverclass/DSBDownloader.kt b/app/src/main/java/com/schoolapp/cleverclass/DSBDownloader.kt
index f7089e1..7e2d571 100644
--- a/app/src/main/java/com/schoolapp/cleverclass/DSBDownloader.kt
+++ b/app/src/main/java/com/schoolapp/cleverclass/DSBDownloader.kt
@@ -1,6 +1,8 @@
package com.schoolapp.cleverclass
import android.content.Context
+import android.net.ConnectivityManager
+import android.net.NetworkCapabilities
import android.util.Base64
import android.util.Log
import org.json.JSONObject
@@ -16,12 +18,17 @@ import java.time.LocalDateTime
import java.util.UUID
-suspend fun downloadDSB(context: Context){
+suspend fun downloadDSB(context: Context): Int{
+ if(!isInternetAvailable(context))
+ return -1
+
val mainDir = createDataFolder(context)
val jsonResponse = downloadDataTask()
downloadImagesTask(jsonResponse, mainDir)
+
+ return 0
}
private fun downloadDataTask() : String {
@@ -123,6 +130,7 @@ private fun downloadImagesTask(jsonResponse: String, mainDir : File){
val day = File(mainDir, dayID.toString())
day.mkdir()
+ createDayInformationJson(day, jsonDayObject)
val jsonPagesObject = jsonDayObject.getJSONArray("Childs")
@@ -136,6 +144,20 @@ private fun downloadImagesTask(jsonResponse: String, mainDir : File){
}
}
+private fun createDayInformationJson(folder: File, jsonDayObject: JSONObject){
+ val infoFile = File(folder, "info.json")
+ val date = jsonDayObject.get("Date")
+ val formatInfo = jsonDayObject.get("Title")
+ val planInfo = jsonDayObject.getJSONArray("Childs").getJSONObject(0).get("Title")
+
+ val infoJson = JSONObject()
+ infoJson.put("Date", date)
+ infoJson.put("FormatInfo", formatInfo)
+ infoJson.put("PlanInfo", planInfo)
+
+ infoFile.writeText(infoJson.toString())
+}
+
private fun downloadImage(folder: File, url: URL, fileName: String){
val file = File(folder, fileName)
@@ -176,4 +198,11 @@ private fun clearFolder(directory: File) {
}
}
}
-}
\ No newline at end of file
+}
+
+private fun isInternetAvailable(context: Context): Boolean {
+ val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+ val network = connectivityManager.activeNetwork
+ val networkCapabilities = connectivityManager.getNetworkCapabilities(network)
+ return networkCapabilities?.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) ?: false
+}
diff --git a/app/src/main/java/com/schoolapp/cleverclass/ui/theme/Color.kt b/app/src/main/java/com/schoolapp/cleverclass/ui/theme/Color.kt
index 925099a..37c1510 100644
--- a/app/src/main/java/com/schoolapp/cleverclass/ui/theme/Color.kt
+++ b/app/src/main/java/com/schoolapp/cleverclass/ui/theme/Color.kt
@@ -11,8 +11,9 @@ val White90 = Color(0xFFEBEBEB)
val White70 = Color(0xFFD3D3D3)
val TextOnColouredButton = Color(0xFF121212)
+val MiddleColor = Color(0xFF808080)
val dismissLight = Color(0xFF536DFE)
val dismissDark = Color(0xFF448AFF)
-val testColor = Color(0xFF00FF00)
\ No newline at end of file
+val testColor = Color(0xFF00FF00)
diff --git a/app/src/main/java/com/schoolapp/cleverclass/ui/theme/Theme.kt b/app/src/main/java/com/schoolapp/cleverclass/ui/theme/Theme.kt
index eb1585b..d3a55b0 100644
--- a/app/src/main/java/com/schoolapp/cleverclass/ui/theme/Theme.kt
+++ b/app/src/main/java/com/schoolapp/cleverclass/ui/theme/Theme.kt
@@ -22,6 +22,7 @@ private val DarkColorScheme = darkColorScheme(
onPrimaryContainer = White100,
secondary = dismissDark,
onBackground = White100,
+ outlineVariant = Black70,
primary = Color(0xFF536DFE)
)
@@ -31,6 +32,7 @@ private val LightColorScheme = lightColorScheme(
onPrimaryContainer = Black100,
secondary = dismissLight,
onBackground = Black100,
+ outlineVariant = White70,
primary = Color(0xFF8396FF)
)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e992e50..b0f873a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -9,4 +9,5 @@
Schließen
DSBActivity
MebisActivity
+ DSBDayViewActivity
\ No newline at end of file