package com.schoolapp.cleverclass import android.content.Context import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth 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.material.icons.outlined.Info import androidx.compose.material3.AlertDialog 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.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.Color import androidx.compose.ui.unit.dp import com.schoolapp.cleverclass.ui.theme.CleverClassTheme import org.json.JSONObject import java.io.InputStreamReader class PSEActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { CleverClassTheme { Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background) { PSEContent(activity = this) } } } } } // Content of PSE @OptIn(ExperimentalMaterial3Api::class) @Composable fun PSEContent(activity: ComponentActivity){ var showInfo by remember { mutableStateOf(false) } var dialogChooser by remember { mutableStateOf(-1) } val elementConstructorList = listOf( "H", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "He", "Li", "Be", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn", "Ga", "Ge", "As", "Se", "Br", "Kr", "Rb", "Sr", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Y", "Zr", "Nb", "Mo", "Tc", "Ru", "Rh", "Pd", "Ag", "Cd", "In", "Sn", "Sb", "Te", "I", "Xe", "Cs", "Ba", "La", "Ce", "Pr", "Nd", "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb", "Lu", "Hf", "Ta", "W", "Re", "Os", "Ir", "Pt", "Au", "Hg", "Tl", "Pb", "Bi", "Po", "At", "Rn", "Fr", "Ra", "Ac", "Th", "Pa", "U", "Np", "Pu", "Am", "Cm", "Bk", "Cf", "Es", "Fm", "Md", "No", "Lr", "Rf", "Db", "Sg", "Bh", "Hs", "Mt", "Ds", "Rg", "Cn", "Nh", "Fl", "Mc", "Lv", "Ts", "Og" ) val elementButtonCurrent = listOf( 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, 13, 14, 15, 16, 17, 18, 19, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,33, 34, 35, 36, 37, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117 ) Column { TopAppBar( colors = TopAppBarDefaults.centerAlignedTopAppBarColors(MaterialTheme.colorScheme.primaryContainer), title = { Text( text = "Periodensystem der Elemente", 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 = { IconButton(onClick = { showInfo = true }) { Icon( imageVector = Icons.Outlined.Info, contentDescription = "", modifier = Modifier.size(28.dp), tint = MaterialTheme.colorScheme.onPrimaryContainer ) } }, modifier = Modifier.fillMaxWidth() ) Column( modifier = Modifier .fillMaxHeight() .verticalScroll(rememberScrollState()) .horizontalScroll(rememberScrollState()) ) { Row { for (i in 0 .. 31) { if (elementConstructorList[i] != "") { Box(modifier = Modifier .padding(3.dp) .size(60.dp) .background(color = Color(0xFFBCA76D)) .clickable { dialogChooser = elementButtonCurrent[i] } ) { Text(modifier = Modifier.align(Alignment.Center), text = elementConstructorList[i], color = com.schoolapp.cleverclass.ui.theme.TextOnColouredButton) } } else { Box( modifier = Modifier .padding(3.dp) .size(60.dp) ) } } } Row { for (i in 32 .. 63) if (elementConstructorList[i] != "") { Box(modifier = Modifier .padding(3.dp) .size(60.dp) .background(color = Color(0xFFC65253)) .clickable { dialogChooser = elementButtonCurrent[i] } ) { Text(modifier = Modifier.align(Alignment.Center), text = elementConstructorList[i], color = com.schoolapp.cleverclass.ui.theme.TextOnColouredButton) } } else { Box( modifier = Modifier .padding(3.dp) .size(60.dp) ) } } Row { for (i in 64 .. 95) if (elementConstructorList[i] != "") { Box(modifier = Modifier .padding(3.dp) .size(60.dp) .background(color = Color(0xFF337733)) .clickable { dialogChooser = elementButtonCurrent[i] } ) { Text(modifier = Modifier.align(Alignment.Center), text = elementConstructorList[i], color = com.schoolapp.cleverclass.ui.theme.TextOnColouredButton) } } else { Box( modifier = Modifier .padding(3.dp) .size(60.dp) ) } } Row { for (i in 96 .. 127) if (elementConstructorList[i] != "") { if (i in 112..121) { Box(modifier = Modifier .padding(3.dp) .size(60.dp) .background(color = Color(0xFF337733)) .clickable { dialogChooser = elementButtonCurrent[i] } ) { Text(modifier = Modifier.align(Alignment.Center), text = elementConstructorList[i], color = com.schoolapp.cleverclass.ui.theme.TextOnColouredButton) } } else { Box(modifier = Modifier .padding(3.dp) .size(60.dp) .background(color = Color(0xFFDC2222)) .clickable { dialogChooser = elementButtonCurrent[i] } ) { Text(modifier = Modifier.align(Alignment.Center), text = elementConstructorList[i], color = com.schoolapp.cleverclass.ui.theme.TextOnColouredButton) } } } else { Box( modifier = Modifier .padding(3.dp) .size(60.dp) ) } } Row { for (i in 128..159) if (elementConstructorList[i] != "") { if (i in 144..153) { Box(modifier = Modifier .padding(3.dp) .size(60.dp) .background(color = Color(0xFFDC2222)) .clickable { dialogChooser = elementButtonCurrent[i] } ) { Text(modifier = Modifier.align(Alignment.Center), text = elementConstructorList[i], color = com.schoolapp.cleverclass.ui.theme.TextOnColouredButton) } } else { Box(modifier = Modifier .padding(3.dp) .size(60.dp) .background(color = Color(0xFF129DC3)) .clickable { dialogChooser = elementButtonCurrent[i] } ) { Text(modifier = Modifier.align(Alignment.Center), text = elementConstructorList[i], color = com.schoolapp.cleverclass.ui.theme.TextOnColouredButton) } } } else { Box( modifier = Modifier .padding(3.dp) .size(60.dp) ) } } Row { for (i in 160..191) if (elementConstructorList[i] != "") { when (i) { in 162..175 -> { Box(modifier = Modifier .padding(3.dp) .size(60.dp) .background(color = Color(0xFFDC2222)) .clickable { dialogChooser = elementButtonCurrent[i] } ) { Text(modifier = Modifier.align(Alignment.Center), text = elementConstructorList[i], color = com.schoolapp.cleverclass.ui.theme.TextOnColouredButton) } } in 176..185 -> { Box(modifier = Modifier .padding(3.dp) .size(60.dp) .background(color = Color(0xFF129DC3)) .clickable { dialogChooser = elementButtonCurrent[i] } ) { Text(modifier = Modifier.align(Alignment.Center), text = elementConstructorList[i], color = com.schoolapp.cleverclass.ui.theme.TextOnColouredButton) } } else -> { Box(modifier = Modifier .padding(3.dp) .size(60.dp) .background(color = Color(0xFFDDCC69)) .clickable { dialogChooser = elementButtonCurrent[i] } ) { Text(modifier = Modifier.align(Alignment.Center), text = elementConstructorList[i], color = com.schoolapp.cleverclass.ui.theme.TextOnColouredButton) } } } } else { Box( modifier = Modifier .padding(3.dp) .size(60.dp) ) } } Row { for (i in 192 .. 223) if (elementConstructorList[i] != "") { when (i) { in 194..207 -> { Box(modifier = Modifier .padding(3.dp) .size(60.dp) .background(color = Color(0xFF129DC3)) .clickable { dialogChooser = elementButtonCurrent[i] } ) { Text(modifier = Modifier.align(Alignment.Center), text = elementConstructorList[i], color = com.schoolapp.cleverclass.ui.theme.TextOnColouredButton) } } in 208..217 -> { Box(modifier = Modifier .padding(3.dp) .size(60.dp) .background(color = Color(0xFFDDCC69)) .clickable { dialogChooser = elementButtonCurrent[i] } ) { Text(modifier = Modifier.align(Alignment.Center), text = elementConstructorList[i], color = com.schoolapp.cleverclass.ui.theme.TextOnColouredButton) } } else -> { Box(modifier = Modifier .padding(3.dp) .size(60.dp) .background(color = Color(0xFF7044DD)) .clickable { dialogChooser = elementButtonCurrent[i] } ) { Text(modifier = Modifier.align(Alignment.Center), text = elementConstructorList[i], color = com.schoolapp.cleverclass.ui.theme.TextOnColouredButton) } } } } else { Box( modifier = Modifier .padding(3.dp) .size(60.dp) ) } } } } if (dialogChooser != -1) { val dcValue = dialogChooser AlertDialog( onDismissRequest = { dialogChooser = -1 }, text = { Text( modifier = Modifier .verticalScroll(rememberScrollState()) .horizontalScroll(rememberScrollState()), text = readElementData(activity, dcValue), color = MaterialTheme.colorScheme.onPrimaryContainer, style = MaterialTheme.typography.labelMedium) }, confirmButton = { Text( text = "Schließen", color = MaterialTheme.colorScheme.secondary, style = MaterialTheme.typography.labelMedium, modifier = Modifier.clickable { dialogChooser = -1 } ) }, containerColor = MaterialTheme.colorScheme.primaryContainer, modifier = Modifier .padding(5.dp) ) } if (showInfo) { AlertDialog( onDismissRequest = { showInfo = false }, text = { Text( text = "Verwendung im Querformat empfohlen", color = MaterialTheme.colorScheme.onPrimaryContainer, style = MaterialTheme.typography.labelMedium) }, confirmButton = { Text( text = "Schließen", color = MaterialTheme.colorScheme.secondary, style = MaterialTheme.typography.labelMedium, modifier = Modifier.clickable { showInfo = false } ) }, containerColor = MaterialTheme.colorScheme.primaryContainer, modifier = Modifier .padding(5.dp) ) } } fun readElementData(context: Context, int: Int): String { val file = "elements_data.json" val assetManager = context.assets val inputStream = assetManager.open(file) val rootObj = JSONObject(InputStreamReader(inputStream).readText()) val elementDataArray = rootObj.getJSONArray("elements") val elementData = elementDataArray.getJSONObject(int) return "Name\n >>> ${elementData.get("Name")}\n\n" + "Molare Masse\n >>> ${elementData.get("Molare Masse")}\n\n" + "Dichte\n >>> ${elementData.get("Dichte")}\n\n" + "Elektronegativität\n >>> ${elementData.get("Elektronegativität")}\n\n" + "Schmelztemperatur\n >>> ${elementData.get("Schmelztemperatur")}\n\n" + "Siedetemperatur\n >>> ${elementData.get("Siedetemperatur")}\n\n" + "radioaktiv\n >>> ${elementData.get("radioaktiv")}\n\n" + "Halbwertszeit\n >>> ${elementData.get("Halbwertszeit")}\n\n" + "Strahlungsart\n >>> ${elementData.get("Strahlungsart")}\n\n" + "künstlich\n >>> ${elementData.get("künstlich")}\n\n" + "langlebigstes Isotop\n >>> ${elementData.get("langlebigstes Isotop")}" }