407 lines
20 KiB
Kotlin
407 lines
20 KiB
Kotlin
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")}"
|
|
} |