menu working

This commit is contained in:
Odweta
2024-12-22 11:40:39 +01:00
parent eb8f4796a9
commit 7618535493
6 changed files with 56 additions and 81 deletions
@@ -27,7 +27,7 @@ class Account(val username: String, val password: String, private val error: Int
*/ */
// check if file exists // check if file exists
val file = File(global.fileDir, accountDataFilePath) val file = File(global.fileDir, global.filePaths.accountData)
return if (!file.exists()) { return if (!file.exists()) {
// it does not exist // it does not exist
@@ -44,7 +44,7 @@ class Account(val username: String, val password: String, private val error: Int
fun save(acc: Account): Boolean { fun save(acc: Account): Boolean {
return try { return try {
val file = File(global.fileDir, accountDataFilePath) val file = File(global.fileDir, global.filePaths.accountData)
file.writeText("${acc.username}\n${acc.password}\n", Charset.forName("UTF-8")) file.writeText("${acc.username}\n${acc.password}\n", Charset.forName("UTF-8"))
true true
@@ -24,17 +24,6 @@ import java.io.File
val roundedCornerDimen = 8.dp val roundedCornerDimen = 8.dp
val borderWidthDimen = 5.dp val borderWidthDimen = 5.dp
val barModifier = Modifier
.fillMaxWidth()
.height(100.dp)
.padding(20.dp)
//.background(PastelYellowTransparent)
.border(
width = borderWidthDimen,
color = PastelYellow,
shape = RoundedCornerShape(roundedCornerDimen)
)
fun makeStatusBarBlack(window: Window) { fun makeStatusBarBlack(window: Window) {
window.statusBarColor = Color.Black.toArgb() window.statusBarColor = Color.Black.toArgb()
} }
@@ -50,10 +39,6 @@ var height: Int = 0
var loaded: Boolean = false var loaded: Boolean = false
var studentClass = "1. A"
var currentLectureNumber = 0
enum class IsShowing { enum class IsShowing {
Timetable, Timetable,
Marks, Marks,
@@ -70,8 +55,6 @@ enum class Screen {
var screenToShow: MutableState<Screen> = mutableStateOf(Screen.Main) var screenToShow: MutableState<Screen> = mutableStateOf(Screen.Main)
var signedInAndReadyToLaunch: MutableState<Boolean> = mutableStateOf(false)
var isShowing by mutableStateOf(IsShowing.Timetable) var isShowing by mutableStateOf(IsShowing.Timetable)
// default settings (will get overwritten by the saved settings) // default settings (will get overwritten by the saved settings)
@@ -86,8 +69,7 @@ enum class SettingsId {
Svoboda, Svoboda,
Amoled, Amoled,
RefreshButton, RefreshButton,
TagNewMarks, TagNewMarks
DeleteLocalData
} }
class SettingsData { class SettingsData {
@@ -120,24 +102,10 @@ class SettingsData {
var settings : SettingsData = SettingsData() var settings : SettingsData = SettingsData()
var done: Boolean = false
var internetAwaitListenerRunning: Boolean = false var internetAwaitListenerRunning: Boolean = false
var timeTableAvailOffline: Boolean = false
var marksAvailOffline: Boolean = false
val subjectNameMap = mutableMapOf<String, String>()
val dayMap = mutableMapOf<Int, Day>()
val dayList = mutableListOf<Day>()
var days = listOf<Day>() var days = listOf<Day>()
var marks: MutableMap<String, MutableList<Mark>> = mutableMapOf()
var username: String = ""
var password: String = ""
val client = OkHttpClient() val client = OkHttpClient()
enum class LectureNoteType { enum class LectureNoteType {
@@ -279,6 +247,7 @@ class Global {
var userData: JSONObject = JSONObject() var userData: JSONObject = JSONObject()
var timetable: List<Day> = listOf() var timetable: List<Day> = listOf()
var lectureNotes: HashMap<Int, LectureNote> = hashMapOf() var lectureNotes: HashMap<Int, LectureNote> = hashMapOf()
var subjectNameMap: HashMap<String, String> = hashMapOf()
var username: String = "" var username: String = ""
var password: String = "" var password: String = ""
@@ -108,15 +108,15 @@ fun MarksAll() {
.padding(horizontal = 5.dp) .padding(horizontal = 5.dp)
.verticalScroll(scrollState) .verticalScroll(scrollState)
) { ) {
for ((subject, markList) in marks) { for ((subject, markList) in global.marks) {
val amoledModifier = if (settings.useAmoledMode.checked.value) { val amoledModifier = if (settings.useAmoledMode.checked.value) {
Modifier Modifier
.width(150.dp) .width(150.dp)
.fillMaxHeight() .fillMaxHeight()
.border( .border(
width = borderWidthDimen, width = global.dimens.borderWidth,
color = getAvgColor(Util.avg(markList), true), // decide on the color (transparent) color = getAvgColor(Util.avg(markList), true), // decide on the color (transparent)
shape = RoundedCornerShape(roundedCornerDimen) shape = RoundedCornerShape(global.dimens.roundedCorner)
) )
} else { } else {
Modifier Modifier
@@ -124,7 +124,7 @@ fun MarksAll() {
.fillMaxHeight() .fillMaxHeight()
.background( .background(
color = getAvgColor(Util.avg(markList)), // decide on the color (not transparent) color = getAvgColor(Util.avg(markList)), // decide on the color (not transparent)
shape = RoundedCornerShape(roundedCornerDimen) shape = RoundedCornerShape(global.dimens.roundedCorner)
) )
} }
@@ -135,7 +135,7 @@ fun MarksAll() {
.border( .border(
width = borderWidthDimen, width = borderWidthDimen,
color = getAvgColor(Util.avg(markList), true), // decide on the color (transparent) color = getAvgColor(Util.avg(markList), true), // decide on the color (transparent)
shape = RoundedCornerShape(roundedCornerDimen) shape = RoundedCornerShape(global.dimens.roundedCorner)
) )
.clickable { .clickable {
global.marksDepthLevel = MarksDepthLevel.Subject global.marksDepthLevel = MarksDepthLevel.Subject
@@ -147,7 +147,7 @@ fun MarksAll() {
.height(70.dp) .height(70.dp)
.background( .background(
color = getAvgColor(Util.avg(markList)), // decide on the color (transparent) color = getAvgColor(Util.avg(markList)), // decide on the color (transparent)
shape = RoundedCornerShape(roundedCornerDimen) shape = RoundedCornerShape(global.dimens.roundedCorner)
) )
.clickable { .clickable {
global.marksDepthLevel = MarksDepthLevel.Subject global.marksDepthLevel = MarksDepthLevel.Subject
@@ -175,7 +175,7 @@ fun MarksAll() {
} }
marksString += markList[markList.size-1].grade marksString += markList[markList.size-1].grade
if (marks.keys.indexOf(subject) > 0) { if (global.marks.keys.indexOf(subject) > 0) {
Box(modifier = Modifier.height(10.dp)) Box(modifier = Modifier.height(10.dp))
} }
@@ -260,9 +260,7 @@ fun MarksAll() {
@Composable @Composable
fun MarksSubject() { fun MarksSubject() {
// handle the back gesture (back swipe form side or back button on bottom android navbar) // handle the back gesture (back swipe form side or back button on bottom android navbar)
BackHandler { BackHandler { global.marksDepthLevel = MarksDepthLevel.All }
global.marksDepthLevel = MarksDepthLevel.All
}
val scrollState = rememberScrollState() val scrollState = rememberScrollState()
@@ -285,26 +283,26 @@ fun MarksSubject() {
.width(70.dp) .width(70.dp)
.height(70.dp) .height(70.dp)
.border( .border(
width = 5.dp, width = global.dimens.borderWidth,
color = getAvgColor( color = getAvgColor(
Util.avg(marks[global.subjectToShow]!!), Util.avg(global.marks[global.subjectToShow]!!),
true true
), ),
shape = RoundedCornerShape(roundedCornerDimen) shape = RoundedCornerShape(global.dimens.roundedCorner)
) )
.background(color = if (settings.useAmoledMode.checked.value) { .background(color = if (settings.useAmoledMode.checked.value) {
Color.Black Color.Black
} else { } else {
getAvgColor( getAvgColor(
Util.avg(marks[global.subjectToShow]!!) Util.avg(global.marks[global.subjectToShow]!!)
) )
}, },
shape = RoundedCornerShape(roundedCornerDimen) shape = RoundedCornerShape(global.dimens.roundedCorner)
) )
.padding(vertical = 15.dp), .padding(vertical = 15.dp),
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
val currAvg = Util.avg(marks[global.subjectToShow]!!).replace(".", ",") val currAvg = Util.avg(global.marks[global.subjectToShow]!!).replace(".", ",")
var textToShow = currAvg var textToShow = currAvg
if (currAvg.length == 3 && currAvg[2] == '0') { if (currAvg.length == 3 && currAvg[2] == '0') {
textToShow = currAvg[0].toString() textToShow = currAvg[0].toString()
@@ -321,7 +319,7 @@ fun MarksSubject() {
Spacer(modifier = Modifier.height(20.dp)) Spacer(modifier = Modifier.height(20.dp))
Text( Text(
text = subjectNameMap[global.subjectToShow]!!, text = global.subjectNameMap[global.subjectToShow]!!,
color = Color.White, color = Color.White,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
fontSize = 30.sp, fontSize = 30.sp,
@@ -330,14 +328,14 @@ fun MarksSubject() {
.border( .border(
width = 5.dp, width = 5.dp,
color = PastelYellow, color = PastelYellow,
shape = RoundedCornerShape(roundedCornerDimen) shape = RoundedCornerShape(global.dimens.roundedCorner)
) )
.background(color = if (settings.useAmoledMode.checked.value) { .background(color = if (settings.useAmoledMode.checked.value) {
Color.Black Color.Black
} else { } else {
PastelYellowTransparent PastelYellowTransparent
}, },
shape = RoundedCornerShape(roundedCornerDimen) shape = RoundedCornerShape(global.dimens.roundedCorner)
) )
.padding(vertical = 20.dp, horizontal = 10.dp) .padding(vertical = 20.dp, horizontal = 10.dp)
) // subject ) // subject
@@ -345,7 +343,7 @@ fun MarksSubject() {
Spacer(modifier = Modifier.height(20.dp)) Spacer(modifier = Modifier.height(20.dp))
Column(modifier = Modifier.verticalScroll(scrollState)) { Column(modifier = Modifier.verticalScroll(scrollState)) {
for ((i, mark) in marks[global.subjectToShow]!!.withIndex()) { for ((i, mark) in global.marks[global.subjectToShow]!!.withIndex()) {
if (i > 0) { if (i > 0) {
Spacer(modifier = Modifier.height(10.dp)) Spacer(modifier = Modifier.height(10.dp))
} }
@@ -363,7 +361,7 @@ fun MarksSubject() {
} else { } else {
getAvgColor(mark.grade) getAvgColor(mark.grade)
}, },
shape = RoundedCornerShape(roundedCornerDimen) shape = RoundedCornerShape(global.dimens.roundedCorner)
) )
.padding(vertical = 10.dp) .padding(vertical = 10.dp)
.clickable { .clickable {
@@ -444,12 +442,12 @@ fun MarksDetail() {
.width(70.dp) .width(70.dp)
.height(70.dp) .height(70.dp)
.border( .border(
width = borderWidthDimen, width = global.dimens.borderWidth,
color = getAvgColor( color = getAvgColor(
Util.avg(mutableListOf(global.markToShow)), Util.avg(mutableListOf(global.markToShow)),
true true
), ),
shape = RoundedCornerShape(roundedCornerDimen) shape = RoundedCornerShape(global.dimens.roundedCorner)
) )
.background( .background(
if (settings.useAmoledMode.checked.value) { if (settings.useAmoledMode.checked.value) {
@@ -485,7 +483,7 @@ fun MarksDetail() {
.border( .border(
width = 5.dp, width = 5.dp,
color = PastelYellow, color = PastelYellow,
shape = RoundedCornerShape(roundedCornerDimen) shape = RoundedCornerShape(global.dimens.roundedCorner)
) )
.background( .background(
if (settings.useAmoledMode.checked.value) { if (settings.useAmoledMode.checked.value) {
@@ -510,7 +508,7 @@ fun MarksDetail() {
} else { } else {
PastelYellowTransparent PastelYellowTransparent
}, },
shape = RoundedCornerShape(roundedCornerDimen) shape = RoundedCornerShape(global.dimens.roundedCorner)
) )
.padding(vertical = 20.dp, horizontal = 10.dp) .padding(vertical = 20.dp, horizontal = 10.dp)
) { ) {
@@ -553,7 +551,7 @@ fun MarksDetail() {
} else { } else {
PastelYellowTransparent PastelYellowTransparent
}, },
shape = RoundedCornerShape(roundedCornerDimen) shape = RoundedCornerShape(global.dimens.roundedCorner)
) )
.padding(vertical = 20.dp, horizontal = 10.dp) .padding(vertical = 20.dp, horizontal = 10.dp)
) { ) {
@@ -27,7 +27,7 @@ import com.odweta.solon.ui.theme.PastelYellow
import kotlin.system.exitProcess import kotlin.system.exitProcess
@Composable @Composable
fun MenuScreen(modifier: Modifier = Modifier) { fun MenuScreen() {
var showDialog by remember { mutableStateOf(false) } var showDialog by remember { mutableStateOf(false) }
Column( Column(
@@ -40,15 +40,15 @@ fun MenuScreen(modifier: Modifier = Modifier) {
Spacer(modifier = Modifier.height(80.dp)) Spacer(modifier = Modifier.height(80.dp))
MenuButton({ screenToShow.value = Screen.SignIn }, "Změnit přihlášení") MenuButton({ global.currentScreen = Screen.SignIn }, "Změnit přihlášení")
Spacer(modifier = Modifier.height(80.dp)) Spacer(modifier = Modifier.height(80.dp))
MenuButton({ isShowing = IsShowing.About }, "O aplikaci") MenuButton({ global.currentScreenElement = ScreenElement.About }, "O aplikaci")
Spacer(modifier = Modifier.height(80.dp)) Spacer(modifier = Modifier.height(80.dp))
MenuButton({ isShowing = IsShowing.Settings }, "Nastavení") MenuButton({ global.currentScreenElement = ScreenElement.Settings }, "Nastavení")
} }
// Dialog implementation // Dialog implementation
@@ -63,16 +63,20 @@ fun MenuScreen(modifier: Modifier = Modifier) {
}, },
containerColor = Color.Black, containerColor = Color.Black,
modifier = Modifier modifier = Modifier
.border(width = 5.dp, color = PastelYellow, shape = RoundedCornerShape( .border(
roundedCornerDimen)), // Yellow border width = global.dimens.borderWidth,
color = PastelYellow,
shape = RoundedCornerShape(global.dimens.roundedCorner)), // Yellow border
confirmButton = { confirmButton = {
Button( Button(
onClick = { onClick = {
showDialog = false showDialog = false
Util.deleteFile(userDataFilePath) Util.deleteFile(global.filePaths.userData)
Util.deleteFile(timeTableFilePath) Util.deleteFile(global.filePaths.timetable)
Util.deleteFile(marksFilePath) Util.deleteFile(global.filePaths.marks)
Util.deleteFile(accountDataFilePath) Util.deleteFile(global.filePaths.accountData)
Util.deleteFile(global.filePaths.lectureNotes)
// do not delete settings
exitProcess(0) exitProcess(0)
}, },
colors = ButtonDefaults.buttonColors( colors = ButtonDefaults.buttonColors(
@@ -80,8 +84,10 @@ fun MenuScreen(modifier: Modifier = Modifier) {
contentColor = Color.White // Yellow text for the button contentColor = Color.White // Yellow text for the button
), ),
modifier = Modifier modifier = Modifier
.border(width = 5.dp, color = PastelYellow, shape = RoundedCornerShape( .border(
roundedCornerDimen)) // Yellow border width = global.dimens.borderWidth,
color = PastelYellow,
shape = RoundedCornerShape(global.dimens.roundedCorner)) // Yellow border
) { ) {
Text("Ano") Text("Ano")
} }
@@ -97,8 +103,10 @@ fun MenuScreen(modifier: Modifier = Modifier) {
// Yellow text for the button // Yellow text for the button
), ),
modifier = Modifier modifier = Modifier
.border(width = 5.dp, color = PastelYellow, shape = RoundedCornerShape( .border(
roundedCornerDimen)) // Yellow border width = global.dimens.borderWidth,
color = PastelYellow,
shape = RoundedCornerShape(global.dimens.roundedCorner)) // Yellow border
) { ) {
Text("Ne") Text("Ne")
} }
@@ -117,8 +125,8 @@ fun MenuButton(onClick: () -> Unit, text: String) {
), ),
modifier = Modifier modifier = Modifier
.border( .border(
width = 5.dp, width = global.dimens.borderWidth,
shape = RoundedCornerShape(roundedCornerDimen), shape = RoundedCornerShape(global.dimens.roundedCorner),
color = PastelYellow color = PastelYellow
) )
.width(230.dp) .width(230.dp)
@@ -352,7 +352,7 @@ class Parsing {
subjectMap[subj.getString("id")] = subj.getString("abbrev") subjectMap[subj.getString("id")] = subj.getString("abbrev")
// map names to abbrevs // map names to abbrevs
subjectNameMap[subj.getString("abbrev")] = subj.getString("name") global.subjectNameMap[subj.getString("abbrev")] = subj.getString("name")
} }
for (i in 0..<marksJSONArray.length()) { for (i in 0..<marksJSONArray.length()) {
@@ -48,9 +48,9 @@ private fun changeButtonText(s: String) {
} }
fun signInButtonCallback(ctx: Context, usernameText: String, passwordText: String) { fun signInButtonCallback(ctx: Context, usernameText: String, passwordText: String) {
username = usernameText global.username = usernameText
password = passwordText global.password = passwordText
val acc = Account(username, password, 0) val acc = Account(global.username, global.password, 0)
var checked = false var checked = false
CoroutineScope(Dispatchers.IO).launch { CoroutineScope(Dispatchers.IO).launch {