diff --git a/app/src/main/java/com/schoolapp/cleverclass/DSBDayViewActivity.kt b/app/src/main/java/com/schoolapp/cleverclass/DSBDayViewActivity.kt index 12858df..bf99be2 100644 --- a/app/src/main/java/com/schoolapp/cleverclass/DSBDayViewActivity.kt +++ b/app/src/main/java/com/schoolapp/cleverclass/DSBDayViewActivity.kt @@ -5,6 +5,7 @@ import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.Image +import androidx.compose.foundation.gestures.detectTransformGestures import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize @@ -12,8 +13,7 @@ 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.foundation.lazy.LazyColumn import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material3.ExperimentalMaterial3Api @@ -25,13 +25,22 @@ import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.asImageBitmap +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.dp +import androidx.compose.ui.zIndex import com.schoolapp.cleverclass.ui.theme.CleverClassTheme import org.json.JSONObject import java.io.File +import java.lang.Float.max +import java.lang.Float.min private lateinit var folder : File private lateinit var information : JSONObject @@ -64,6 +73,10 @@ class DSBDayViewActivity : ComponentActivity() { @OptIn(ExperimentalMaterial3Api::class) @Composable fun DSBDayViewContent(activity: ComponentActivity){ + var scale by remember { mutableStateOf(1f) } + var XOffset by remember { mutableStateOf(0f) } + var YOffset by remember { mutableStateOf(0f) } + Column{ TopAppBar( colors = TopAppBarDefaults.centerAlignedTopAppBarColors(MaterialTheme.colorScheme.primaryContainer), @@ -83,24 +96,43 @@ fun DSBDayViewContent(activity: ComponentActivity){ ) } }, - modifier = Modifier.fillMaxWidth() + modifier = Modifier + .fillMaxWidth() + .zIndex(1f) ) val imageFiles = folder.listFiles { file -> file.extension == "jpg" }?.toList() - Column( + LazyColumn( + userScrollEnabled = true, modifier = Modifier .padding(8.dp) - .verticalScroll(rememberScrollState()) + .pointerInput(Unit) { + detectTransformGestures { _, move, zoom, _ -> + scale = max(min(zoom * scale, 2f), 1f) + val maxXOffset = 520 * (scale - 1) + val maxYOffset = 992 * (scale - 1) + XOffset = max(min(XOffset + move.x, maxXOffset), -maxXOffset) + YOffset = max(min(YOffset + move.y, maxYOffset), -maxYOffset) + } + } + .graphicsLayer( + scaleX = scale, + scaleY = scale, + translationX = XOffset, + translationY = YOffset + ) ) { imageFiles?.forEach { - Image( - bitmap = BitmapFactory.decodeFile(it.absolutePath).asImageBitmap(), - contentDescription = null, - contentScale = ContentScale.FillWidth, - modifier = Modifier.fillMaxWidth() - ) - Spacer(modifier = Modifier.height(8.dp)) + item { + Image( + bitmap = BitmapFactory.decodeFile(it.absolutePath).asImageBitmap(), + contentDescription = null, + contentScale = ContentScale.FillWidth, + modifier = Modifier.fillMaxWidth() + ) + Spacer(modifier = Modifier.height(8.dp)) + } } } } diff --git a/app/src/main/java/com/schoolapp/cleverclass/PSEActivity.kt b/app/src/main/java/com/schoolapp/cleverclass/PSEActivity.kt index 7d02959..8b09fb9 100644 --- a/app/src/main/java/com/schoolapp/cleverclass/PSEActivity.kt +++ b/app/src/main/java/com/schoolapp/cleverclass/PSEActivity.kt @@ -79,6 +79,7 @@ fun PSEContent(activity: ComponentActivity){ } } +private lateinit var rootObj : JSONObject private val colors = listOf( Color(0xFFBCA76D), @@ -117,7 +118,7 @@ private val elementButtonColors = listOf( @Composable fun PSEMainContent(activity: ComponentActivity) { val inputStream = activity.assets.open("elements_data.json") - val rootObj = JSONObject(InputStreamReader(inputStream).readText()) + rootObj = JSONObject(InputStreamReader(inputStream).readText()) var showInfo by remember { mutableStateOf(false) @@ -204,7 +205,7 @@ fun PSEMainContent(activity: ComponentActivity) { modifier = Modifier .verticalScroll(rememberScrollState()) .horizontalScroll(rememberScrollState()), - text = readElementData(rootObj, dcValue), + text = readElementData(dcValue), color = MaterialTheme.colorScheme.onPrimaryContainer, style = MaterialTheme.typography.labelMedium ) @@ -293,8 +294,8 @@ fun InformationBox(text: String, color: Color){ } } -private fun readElementData(jsonObject: JSONObject, int: Int): String { - val elementData = jsonObject.getJSONArray("elements").getJSONObject(int) +private fun readElementData(int: Int): String { + val elementData = rootObj.getJSONArray("elements").getJSONObject(int) return "Name:\n${elementData.get("Name")}\n\n" + "Ordnungszahl:\n${elementData.get("Ordnungszahl")}\n\n" + "Gruppe:\n${elementData.get("Gruppe")}\n\n" +