Compare commits
10 Commits
15cadb76c6
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
442ef70b8d | ||
|
|
ec3a95fc2d | ||
|
|
b07cd27fce | ||
|
|
39c037a9ab | ||
|
|
f6956349e0 | ||
|
|
a41bd9cbb3 | ||
|
|
0db1e78cd4 | ||
|
|
7bdcb7e3fb | ||
|
|
d36cadeb18 | ||
|
|
1056dc39bf |
@@ -23,6 +23,7 @@ android {
|
||||
buildTypes {
|
||||
release {
|
||||
isMinifyEnabled = false
|
||||
isDebuggable = false
|
||||
proguardFiles(
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-rules.pro"
|
||||
|
||||
@@ -83,7 +83,7 @@ fun AboutContent(activity: ComponentActivity){
|
||||
{
|
||||
AboutTextElement("This Product is published under the\nGNU General Public License\nVersion 3, 29 June 2007", 16.dp)
|
||||
AboutTextElement("Developed by:\n- Paul Posch\n- Matthias Meyer\n- Jakub Szarko\n- Emilian Bührer", 32.dp)
|
||||
AboutTextElement("Fun Facts:\nThis app consists of 2.873 lines of code\nThe repository is 413KB big\nThe development took about 3 month", 64.dp) //TODO: Update before launch
|
||||
AboutTextElement("Fun Facts:\nThis app consists of 4.189 lines of code\nThe repository is 768KB big\nThe development took about 3 months", 64.dp)
|
||||
|
||||
Spacer(modifier = Modifier.height(32.dp))
|
||||
Divider()
|
||||
@@ -98,7 +98,7 @@ fun AboutContent(activity: ComponentActivity){
|
||||
) {
|
||||
Row {
|
||||
Text(
|
||||
text = "Unterstütze die Entwickler",
|
||||
text = "Support the Devs",
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
color = MaterialTheme.colorScheme.onBackground,
|
||||
modifier = Modifier.padding(16.dp)
|
||||
|
||||
@@ -127,7 +127,19 @@ private fun decompressGZIPAndDecodeBase64(compressedData: String): String {
|
||||
private fun downloadImagesTask(jsonResponse: JSONObject, mainDir : File) : Int {
|
||||
clearFolder(mainDir)
|
||||
|
||||
val jsonDaysObject = jsonResponse.getJSONArray("ResultMenuItems").getJSONObject(0).getJSONArray("Childs").getJSONObject(0).getJSONObject("Root").getJSONArray("Childs")
|
||||
var jsonDaysObject = jsonResponse.getJSONArray("ResultMenuItems")
|
||||
for (i in 0 until jsonDaysObject.length()) {
|
||||
if (jsonDaysObject.getJSONObject(i).get("Index") == 0) {
|
||||
jsonDaysObject = jsonDaysObject.getJSONObject(i).getJSONArray("Childs")
|
||||
break
|
||||
}
|
||||
}
|
||||
for (i in 0 until jsonDaysObject.length()) {
|
||||
if (jsonDaysObject.getJSONObject(i).get("Index") == 0) {
|
||||
jsonDaysObject = jsonDaysObject.getJSONObject(i).getJSONObject("Root").getJSONArray("Childs")
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
for (d in 0 until jsonDaysObject.length()) {
|
||||
val jsonDayObject = jsonDaysObject.getJSONObject(d)
|
||||
@@ -201,20 +213,6 @@ private fun createDataFolder(context: Context) : File {
|
||||
return folder
|
||||
}
|
||||
|
||||
private fun clearFolder(directory: File) {
|
||||
if (directory.exists()) {
|
||||
val files = directory.listFiles()
|
||||
if (files != null) {
|
||||
for (file in files) {
|
||||
if (file.isDirectory) {
|
||||
clearFolder(file)
|
||||
}
|
||||
file.delete()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun isInternetAvailable(context: Context): Boolean {
|
||||
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||
val network = connectivityManager.activeNetwork
|
||||
|
||||
@@ -24,6 +24,7 @@ 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.material3.AlertDialog
|
||||
import androidx.compose.material3.Divider
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -35,8 +36,10 @@ 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.unit.dp
|
||||
@@ -64,6 +67,10 @@ fun SettingsContent(activity: ComponentActivity) {
|
||||
val sharedPreferences = activity.getSharedPreferences("Settings", Context.MODE_PRIVATE)
|
||||
val editor = sharedPreferences.edit()
|
||||
|
||||
var showDeleteConfirmation by remember {
|
||||
mutableStateOf(false)
|
||||
}
|
||||
|
||||
Column(modifier = Modifier.fillMaxSize()) {
|
||||
// Top AppBar
|
||||
TopAppBar(
|
||||
@@ -94,14 +101,14 @@ fun SettingsContent(activity: ComponentActivity) {
|
||||
.weight(1f)
|
||||
.verticalScroll(rememberScrollState())
|
||||
.fillMaxWidth()
|
||||
|
||||
) {
|
||||
Setting(text = "Stundenplan", sharedPreferences, editor)
|
||||
Setting(text = "Noten", sharedPreferences, editor)
|
||||
Setting(text = "Periodensystem", sharedPreferences, editor)
|
||||
Setting(text = "Mebis", sharedPreferences, editor)
|
||||
Setting(text = "DSBmobile", sharedPreferences, editor)
|
||||
Setting(text = "Mebis", sharedPreferences, editor)
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
|
||||
Divider()
|
||||
Box(
|
||||
modifier = Modifier
|
||||
@@ -120,6 +127,19 @@ fun SettingsContent(activity: ComponentActivity) {
|
||||
modifier = Modifier.padding(16.dp)
|
||||
)
|
||||
}
|
||||
Divider()
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.clickable { showDeleteConfirmation = true }
|
||||
) {
|
||||
Text(
|
||||
text = "Alle Daten löschen",
|
||||
color = MaterialTheme.colorScheme.onBackground,
|
||||
style = MaterialTheme.typography.labelMedium,
|
||||
modifier = Modifier.padding(16.dp)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// About Button
|
||||
@@ -150,6 +170,43 @@ fun SettingsContent(activity: ComponentActivity) {
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
}
|
||||
}
|
||||
|
||||
if(showDeleteConfirmation){
|
||||
AlertDialog(
|
||||
onDismissRequest = { showDeleteConfirmation = false },
|
||||
text = {
|
||||
Text(
|
||||
text = "Möchten Sie wirklich alle Daten aus dieser App löschen?\n" +
|
||||
"Dieser Vorgang kann nicht rückgängig gemacht werden.",
|
||||
color = MaterialTheme.colorScheme.onPrimaryContainer,
|
||||
style = MaterialTheme.typography.labelMedium
|
||||
)
|
||||
},
|
||||
confirmButton = {
|
||||
Row(modifier = Modifier.fillMaxWidth()){
|
||||
Text(
|
||||
text = "Löschen",
|
||||
color = MaterialTheme.colorScheme.secondary,
|
||||
style = MaterialTheme.typography.labelMedium,
|
||||
modifier = Modifier.clickable {
|
||||
deleteAllData(activity)
|
||||
showDeleteConfirmation = false
|
||||
}
|
||||
)
|
||||
|
||||
Spacer(modifier = Modifier.weight(1f))
|
||||
|
||||
Text(
|
||||
text = "Abbrechen",
|
||||
color = MaterialTheme.colorScheme.secondary,
|
||||
style = MaterialTheme.typography.labelMedium,
|
||||
modifier = Modifier.clickable { showDeleteConfirmation = false }
|
||||
)
|
||||
}
|
||||
},
|
||||
containerColor = MaterialTheme.colorScheme.primaryContainer
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
|
||||
@@ -239,7 +239,7 @@ fun StundenplanContent(activity: ComponentActivity, loadedLessons: List<List<Les
|
||||
text = {
|
||||
Text(
|
||||
text = "Die Breite der Spalten ist auf eine bestimmte Größe festgelegt.\n\n" +
|
||||
"Zu lange eingaben können horizontal gescrollt werden.",
|
||||
"Zu lange Eingaben können horizontal gescrollt werden.",
|
||||
color = MaterialTheme.colorScheme.onPrimaryContainer,
|
||||
style = MaterialTheme.typography.labelMedium)
|
||||
},
|
||||
|
||||
@@ -189,9 +189,18 @@ fun TimeTableSetupContent(activity: ComponentActivity, loadedLessons: List<Lesso
|
||||
IconButton(
|
||||
onClick = {
|
||||
activity.finish()
|
||||
val intent = Intent(activity, StundenplanActivity::class.java)
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
||||
startActivity(activity, intent, null)
|
||||
if (setupDone) {
|
||||
val intent = Intent(activity, StundenplanActivity::class.java)
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
||||
startActivity(activity, intent, null)
|
||||
}
|
||||
else {
|
||||
val intent = Intent(activity, MainActivity::class.java)
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
||||
startActivity(activity, intent, null)
|
||||
}
|
||||
}
|
||||
) {
|
||||
Icon(
|
||||
@@ -383,11 +392,20 @@ fun TimeTableSetupContent(activity: ComponentActivity, loadedLessons: List<Lesso
|
||||
editor.putInt("breakAmnt", breakAmnt.toInt())
|
||||
editor.apply()
|
||||
activity.finish()
|
||||
//Reopen of activity so values will be updated
|
||||
val intent = Intent(activity, StundenplanActivity::class.java)
|
||||
//Remove previous StundenplanActivity from activity stack so when going back later it won't exist twice
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
||||
startActivity(activity, intent, null)
|
||||
if (setupDone) {
|
||||
//Reopen of activity so values will be updated
|
||||
val intent = Intent(activity, StundenplanActivity::class.java)
|
||||
//Remove previous StundenplanActivity from activity stack so when going back later it won't exist twice
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
||||
startActivity(activity, intent, null)
|
||||
}
|
||||
else {
|
||||
val intent = Intent(activity, MainActivity::class.java)
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
||||
startActivity(activity, intent, null)
|
||||
}
|
||||
},
|
||||
modifier = Modifier
|
||||
.padding(5.dp)
|
||||
@@ -605,7 +623,6 @@ fun TimeTableSetupContent(activity: ComponentActivity, loadedLessons: List<Lesso
|
||||
}
|
||||
startActivity(activity, intent, null)
|
||||
}
|
||||
|
||||
},
|
||||
modifier = Modifier
|
||||
.padding(5.dp)
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package com.schoolapp.cleverclass
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
@@ -17,6 +21,10 @@ import androidx.compose.ui.graphics.ColorFilter
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import java.io.File
|
||||
|
||||
|
||||
const val NO_INTERNET_CONNECTION_CODE = -1
|
||||
@@ -63,4 +71,47 @@ fun StaticLoadingScreen(){
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun deleteAllData(activity: ComponentActivity){
|
||||
val sharedPrefs = listOf("Settings", "DSBmobile", "gradeAverages", "TimeTable")
|
||||
for (prefName in sharedPrefs) {
|
||||
val sharedPreferences = activity.getSharedPreferences(prefName, Context.MODE_PRIVATE)
|
||||
val editor = sharedPreferences.edit()
|
||||
editor.clear()
|
||||
editor.apply()
|
||||
}
|
||||
|
||||
clearFolder(activity.filesDir)
|
||||
clearFolder(activity.cacheDir)
|
||||
|
||||
CoroutineScope(Dispatchers.Main).launch {
|
||||
restartApp(activity)
|
||||
}
|
||||
}
|
||||
|
||||
fun clearFolder(directory: File) {
|
||||
if (directory.exists()) {
|
||||
val files = directory.listFiles()
|
||||
if (files != null) {
|
||||
for (file in files) {
|
||||
if (file.isDirectory) {
|
||||
clearFolder(file)
|
||||
}
|
||||
file.delete()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun restartApp(context: Context) {
|
||||
val packageManager = context.packageManager
|
||||
val intent = packageManager.getLaunchIntentForPackage(context.packageName)
|
||||
intent?.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
||||
intent?.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
context.startActivity(intent)
|
||||
if (context is Activity) {
|
||||
context.finish()
|
||||
}
|
||||
Runtime.getRuntime().exit(0)
|
||||
}
|
||||
@@ -8,9 +8,9 @@ val Black80 = Color(0xFF333333)
|
||||
val Black70 = Color(0xFF4B4B4B)
|
||||
|
||||
val White100 = Color(0xFFFFFFFF)
|
||||
val White90 = Color(0xFFEBEBEB)
|
||||
val White90 = Color(0xFFFAFAFA)
|
||||
val White80 = Color(0xFFD3D3D3)
|
||||
val White70 = Color(0xFFBBBBBB)
|
||||
val White70 = Color(0xFFAFAFAF)
|
||||
|
||||
|
||||
val TextOnColouredButton = Color(0xFF121212)
|
||||
|
||||
Reference in New Issue
Block a user