removed all redundant bits (variables and stuff) from Global.kt and converted them into the global struct
This commit is contained in:
@@ -19,44 +19,12 @@ import okhttp3.OkHttpClient
|
|||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
// Global values (dimens, modifiers, ...)
|
|
||||||
|
|
||||||
val roundedCornerDimen = 8.dp
|
|
||||||
val borderWidthDimen = 5.dp
|
|
||||||
|
|
||||||
fun makeStatusBarBlack(window: Window) {
|
|
||||||
window.statusBarColor = Color.Black.toArgb()
|
|
||||||
}
|
|
||||||
|
|
||||||
const val accountDataFilePath: String = "account_data.txt"
|
|
||||||
const val timeTableFilePath: String = "timetable.json"
|
|
||||||
const val userDataFilePath: String = "userdata.json"
|
|
||||||
const val marksFilePath: String = "marks.json"
|
|
||||||
const val settingsDataFilePath: String = "settings.txt"
|
|
||||||
const val lectureNotesFilePath: String = "lecture_notes.csv"
|
|
||||||
var width: Int = 0
|
|
||||||
var height: Int = 0
|
|
||||||
|
|
||||||
var loaded: Boolean = false
|
|
||||||
|
|
||||||
enum class IsShowing {
|
|
||||||
Timetable,
|
|
||||||
Marks,
|
|
||||||
Menu,
|
|
||||||
About,
|
|
||||||
Settings
|
|
||||||
}
|
|
||||||
|
|
||||||
enum class Screen {
|
enum class Screen {
|
||||||
Main,
|
Main,
|
||||||
Splash,
|
Splash,
|
||||||
SignIn
|
SignIn
|
||||||
}
|
}
|
||||||
|
|
||||||
var screenToShow: MutableState<Screen> = mutableStateOf(Screen.Main)
|
|
||||||
|
|
||||||
var isShowing by mutableStateOf(IsShowing.Timetable)
|
|
||||||
|
|
||||||
// default settings (will get overwritten by the saved settings)
|
// default settings (will get overwritten by the saved settings)
|
||||||
class Setting(auxId: SettingsId, auxName: String, auxChecked: Boolean) {
|
class Setting(auxId: SettingsId, auxName: String, auxChecked: Boolean) {
|
||||||
var id: SettingsId = auxId
|
var id: SettingsId = auxId
|
||||||
@@ -100,14 +68,6 @@ class SettingsData {
|
|||||||
override fun toString() = "$useSvobodaMode\n$useAmoledMode\n$showRefreshButton\n$tagNewMarks"
|
override fun toString() = "$useSvobodaMode\n$useAmoledMode\n$showRefreshButton\n$tagNewMarks"
|
||||||
}
|
}
|
||||||
|
|
||||||
var settings : SettingsData = SettingsData()
|
|
||||||
|
|
||||||
var internetAwaitListenerRunning: Boolean = false
|
|
||||||
|
|
||||||
var days = listOf<Day>()
|
|
||||||
|
|
||||||
val client = OkHttpClient()
|
|
||||||
|
|
||||||
enum class LectureNoteType {
|
enum class LectureNoteType {
|
||||||
Normal, // obycejna poznamka
|
Normal, // obycejna poznamka
|
||||||
Writing, // pisemny test
|
Writing, // pisemny test
|
||||||
@@ -125,13 +85,7 @@ fun String.toLectureNoteType(): LectureNoteType {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class LectureNote(
|
class LectureNote(id: Int, note: MutableState<String>, type: MutableState<LectureNoteType>, number: Int, lectureName: String) {
|
||||||
id: Int,
|
|
||||||
note: MutableState<String>,
|
|
||||||
type: MutableState<LectureNoteType>,
|
|
||||||
number: Int,
|
|
||||||
lectureName: String
|
|
||||||
) {
|
|
||||||
var id: Int = 0
|
var id: Int = 0
|
||||||
var note: MutableState<String> =
|
var note: MutableState<String> =
|
||||||
mutableStateOf("")
|
mutableStateOf("")
|
||||||
@@ -248,11 +202,13 @@ class Global {
|
|||||||
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 subjectNameMap: HashMap<String, String> = hashMapOf()
|
||||||
|
var client: OkHttpClient = OkHttpClient()
|
||||||
|
|
||||||
var username: String = ""
|
var username: String = ""
|
||||||
var password: String = ""
|
var password: String = ""
|
||||||
|
|
||||||
var noSignInBackHandle: Boolean = false
|
var noSignInBackHandle: Boolean = false
|
||||||
|
var internetAwaitListenerRunning: Boolean = false
|
||||||
|
|
||||||
var selectedLecture: Int = 0
|
var selectedLecture: Int = 0
|
||||||
var currentLectureNumber: Int = 0
|
var currentLectureNumber: Int = 0
|
||||||
@@ -310,3 +266,5 @@ class Global {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val global = Global()
|
val global = Global()
|
||||||
|
|
||||||
|
var settings = SettingsData()
|
||||||
@@ -20,7 +20,7 @@ fun launchStart(ctx: Context) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
global.noSignInBackHandle = true
|
global.noSignInBackHandle = true
|
||||||
screenToShow.value = Screen.SignIn
|
global.currentScreen = Screen.SignIn
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,7 +55,7 @@ fun localLoad(ctx: Context) {
|
|||||||
global.studentClass = Network.getStudentClass()
|
global.studentClass = Network.getStudentClass()
|
||||||
global.apiEndPoints.marks = "${global.apiEndPoints.apiBase}/v1/students/${global.studentId}/marks/list"
|
global.apiEndPoints.marks = "${global.apiEndPoints.apiBase}/v1/students/${global.studentId}/marks/list"
|
||||||
val localTimetable = JSONObject(Util.fileToString(global.filePaths.timetable))
|
val localTimetable = JSONObject(Util.fileToString(global.filePaths.timetable))
|
||||||
val localMarks = JSONObject(Util.fileToString(marksFilePath))
|
val localMarks = JSONObject(Util.fileToString(global.filePaths.marks))
|
||||||
|
|
||||||
launchContinue(
|
launchContinue(
|
||||||
ctx,
|
ctx,
|
||||||
@@ -80,11 +80,10 @@ fun launchContinue(
|
|||||||
global.settings = settingsData
|
global.settings = settingsData
|
||||||
|
|
||||||
// load the lecture notes
|
// load the lecture notes
|
||||||
val lectureNotes = Util.fileToString(global.filePaths.lectureNotes)
|
Util.csvToLectureNotes()
|
||||||
Parsing.parseLectureNotes(lectureNotes)
|
|
||||||
|
|
||||||
// listen for internet availability in case of disconnection
|
// listen for internet availability in case of disconnection
|
||||||
if (!internetAwaitListenerRunning)
|
if (!global.internetAwaitListenerRunning)
|
||||||
setOnInternetAvailListener(ctx)
|
setOnInternetAvailListener(ctx)
|
||||||
|
|
||||||
if (!global.launched) {
|
if (!global.launched) {
|
||||||
@@ -108,7 +107,7 @@ fun launchContinue(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun setOnInternetAvailListener(ctx: Context) {
|
private fun setOnInternetAvailListener(ctx: Context) {
|
||||||
internetAwaitListenerRunning = true
|
global.internetAwaitListenerRunning = true
|
||||||
var internetAvail = Util.internetAvail(ctx)
|
var internetAvail = Util.internetAvail(ctx)
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
while (true) {
|
while (true) {
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import androidx.compose.runtime.rememberCoroutineScope
|
|||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.graphics.toArgb
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.core.view.WindowCompat
|
import androidx.core.view.WindowCompat
|
||||||
import com.odweta.solon.ui.theme.SolonTheme
|
import com.odweta.solon.ui.theme.SolonTheme
|
||||||
@@ -23,7 +24,7 @@ class MainActivity : ComponentActivity() {
|
|||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
makeStatusBarBlack(window)
|
window.statusBarColor = Color.Black.toArgb()
|
||||||
global.fileDir = applicationContext.filesDir
|
global.fileDir = applicationContext.filesDir
|
||||||
|
|
||||||
launchStart(applicationContext)
|
launchStart(applicationContext)
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ fun MarksAll() {
|
|||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.height(70.dp)
|
.height(70.dp)
|
||||||
.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(global.dimens.roundedCorner)
|
shape = RoundedCornerShape(global.dimens.roundedCorner)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class Network {
|
|||||||
.build()
|
.build()
|
||||||
|
|
||||||
return try {
|
return try {
|
||||||
val resp = client.newCall(request).execute()
|
val resp = global.client.newCall(request).execute()
|
||||||
val respString = resp.body?.string().toString()
|
val respString = resp.body?.string().toString()
|
||||||
if (JSONObject(respString).has("access_token")) {
|
if (JSONObject(respString).has("access_token")) {
|
||||||
JSONObject(respString).getString("access_token")
|
JSONObject(respString).getString("access_token")
|
||||||
@@ -94,7 +94,7 @@ class Network {
|
|||||||
.build()
|
.build()
|
||||||
|
|
||||||
return try {
|
return try {
|
||||||
val resp = client.newCall(request).execute()
|
val resp = global.client.newCall(request).execute()
|
||||||
val respString = resp.body?.string().toString()
|
val respString = resp.body?.string().toString()
|
||||||
JSONObject(respString)
|
JSONObject(respString)
|
||||||
} catch (e: JSONException) {
|
} catch (e: JSONException) {
|
||||||
@@ -117,7 +117,7 @@ class Network {
|
|||||||
.build()
|
.build()
|
||||||
|
|
||||||
return try {
|
return try {
|
||||||
val resp = client.newCall(request).execute()
|
val resp = global.client.newCall(request).execute()
|
||||||
JSONObject(resp.body?.string().toString())
|
JSONObject(resp.body?.string().toString())
|
||||||
} catch (e: JSONException) {
|
} catch (e: JSONException) {
|
||||||
JSONObject("""{"error": "json"}""")
|
JSONObject("""{"error": "json"}""")
|
||||||
@@ -135,7 +135,7 @@ class Network {
|
|||||||
.build()
|
.build()
|
||||||
|
|
||||||
return try {
|
return try {
|
||||||
val resp = client.newCall(request).execute()
|
val resp = global.client.newCall(request).execute()
|
||||||
JSONObject(resp.body?.string().toString())
|
JSONObject(resp.body?.string().toString())
|
||||||
} catch (e: JSONException) {
|
} catch (e: JSONException) {
|
||||||
JSONObject("""{"error": "json"}""")
|
JSONObject("""{"error": "json"}""")
|
||||||
|
|||||||
@@ -385,38 +385,5 @@ class Parsing {
|
|||||||
|
|
||||||
return marks
|
return marks
|
||||||
}
|
}
|
||||||
|
|
||||||
fun parseLectureNotes(lectureNotes: String) {
|
|
||||||
for (day in global.timetable) {
|
|
||||||
for ((subjectIndex, subject) in day.subjects.withIndex()) {
|
|
||||||
val id = getLectureId(day.date, subjectIndex)
|
|
||||||
global.lectureNotes[id] = LectureNote(
|
|
||||||
id = id,
|
|
||||||
type = mutableStateOf(LectureNoteType.Normal),
|
|
||||||
note = mutableStateOf(""),
|
|
||||||
number = subject.number.toInt(),
|
|
||||||
lectureName = subject.name
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
val lines = lectureNotes.lines()
|
|
||||||
for (line in lines) {
|
|
||||||
if (line.isBlank()) continue
|
|
||||||
|
|
||||||
val parts = line.split(",")
|
|
||||||
|
|
||||||
if (parts.size >= 3) {
|
|
||||||
val id = parts[0].trim().toInt()
|
|
||||||
val type = parts[1].trim().toLectureNoteType()
|
|
||||||
var note = parts[2].trim()
|
|
||||||
for (part in 3.until(parts.size)) {
|
|
||||||
note += ",${parts[part]}"
|
|
||||||
}
|
|
||||||
|
|
||||||
global.lectureNotes[id]?.note = mutableStateOf(note)
|
|
||||||
global.lectureNotes[id]?.type = mutableStateOf(type)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -17,23 +17,6 @@ import kotlin.math.abs
|
|||||||
|
|
||||||
class Util {
|
class Util {
|
||||||
companion object {
|
companion object {
|
||||||
private fun getDisplayMetrics(context: Context): DisplayMetrics {
|
|
||||||
val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
|
|
||||||
val displayMetrics = DisplayMetrics()
|
|
||||||
|
|
||||||
windowManager.defaultDisplay.getMetrics(displayMetrics)
|
|
||||||
|
|
||||||
return displayMetrics
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getDisplayHeight(context: Context): Int {
|
|
||||||
return getDisplayMetrics(context).heightPixels
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getDisplayWidth(context: Context): Int {
|
|
||||||
return getDisplayMetrics(context).widthPixels
|
|
||||||
}
|
|
||||||
|
|
||||||
fun saveStringToFile(filePath: String, s: String): Boolean {
|
fun saveStringToFile(filePath: String, s: String): Boolean {
|
||||||
// get a file object with the specified path
|
// get a file object with the specified path
|
||||||
val f = File(global.fileDir, filePath)
|
val f = File(global.fileDir, filePath)
|
||||||
@@ -266,7 +249,7 @@ class Util {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun csvToLectureNotes() {
|
fun csvToLectureNotes() {
|
||||||
val lines = fileToString(lectureNotesFilePath).lines()
|
val lines = fileToString(global.filePaths.lectureNotes).lines()
|
||||||
for (line in lines) {
|
for (line in lines) {
|
||||||
if (line.isBlank()) continue
|
if (line.isBlank()) continue
|
||||||
|
|
||||||
@@ -298,7 +281,7 @@ class Util {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun loadLectureNotes() {
|
fun loadLectureNotes() {
|
||||||
for (day in days) {
|
for (day in global.timetable) {
|
||||||
for ((subjectIndex, subject) in day.subjects.withIndex()) {
|
for ((subjectIndex, subject) in day.subjects.withIndex()) {
|
||||||
val id = getLectureId(day.date, subjectIndex)
|
val id = getLectureId(day.date, subjectIndex)
|
||||||
global.lectureNotes[id] = LectureNote(
|
global.lectureNotes[id] = LectureNote(
|
||||||
|
|||||||
Reference in New Issue
Block a user