package com.schoolapp.cleverclass import android.content.Context import android.content.Intent import android.content.SharedPreferences import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Settings import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults 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.DisposableEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue 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 com.schoolapp.cleverclass.ui.theme.TextOnColouredButton class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { CleverClassTheme { Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background) { MainContent(activity = this) } } } } } // Content of Main-screen @OptIn(ExperimentalMaterial3Api::class) @Composable fun MainContent(activity: ComponentActivity){ val sharedPreferences = activity.getSharedPreferences("Settings", Context.MODE_PRIVATE) Column{ TopAppBar( colors = TopAppBarDefaults.centerAlignedTopAppBarColors(containerColor = MaterialTheme.colorScheme.primaryContainer), title = { Text(text = "CleverClass", style = MaterialTheme.typography.headlineMedium, color = MaterialTheme.colorScheme.onPrimaryContainer) }, actions = { IconButton( onClick = { switchToActivity(activity, SettingsActivity::class.java) }) { Icon( imageVector = Icons.Filled.Settings, contentDescription = null, modifier = Modifier.size(28.dp), tint = MaterialTheme.colorScheme.onPrimaryContainer) } }, modifier = Modifier.fillMaxWidth() ) Column(modifier = Modifier.verticalScroll(rememberScrollState())) { MainButton(onClick = { switchToActivity(activity, StundenplanActivity::class.java) }, color = Color(0xFFFF4081), text = "Stundenplan", sharedPreferences) MainButton(onClick = { switchToActivity(activity, NotenActivity::class.java) }, color = Color(0xFFE040FB), text = "Noten", sharedPreferences) MainButton(onClick = { switchToActivity(activity, PSEActivity::class.java) }, color = Color(0xFF536DFE), text = "Periodensystem", sharedPreferences) MainButton(onClick = { switchToActivity(activity, MebisActivity::class.java) }, color = Color(0xFF7C4DFF), text = "Mebis", sharedPreferences) MainButton(onClick = { switchToActivity(activity, DSBActivity::class.java) }, color = Color(0xFFFF6E40), text = "DSBmobile", sharedPreferences) } } } // Main-menu Buttons @Composable fun MainButton(onClick: () -> Unit, color : Color, text : String, sharedPreferences: SharedPreferences) { var enabledState by remember(text) { mutableStateOf(getButtonEnabledState(sharedPreferences, text)) } Button( enabled = enabledState, onClick = onClick, shape = RoundedCornerShape(40), colors = ButtonDefaults.outlinedButtonColors(containerColor = color), modifier = Modifier .fillMaxWidth() .height(if (enabledState) 128.dp else 0.dp) .padding(start = 16.dp, end = 16.dp, top = 16.dp) ) { Text(text = text, color = TextOnColouredButton, style = MaterialTheme.typography.labelMedium) } // changes state when Shared Preference is updated val observer = remember { SharedPreferences.OnSharedPreferenceChangeListener { _, key -> if (key == text) { enabledState = getButtonEnabledState(sharedPreferences, text) } } } // handles observer creation and disposal DisposableEffect(Unit) { sharedPreferences.registerOnSharedPreferenceChangeListener(observer) onDispose { sharedPreferences.unregisterOnSharedPreferenceChangeListener(observer) } } } fun getButtonEnabledState(sharedPreferences: SharedPreferences, key: String): Boolean { return sharedPreferences.getBoolean(key, true) } fun switchToActivity(context : Context, activity : Class<*>){ val intent = Intent(context, activity) context.startActivity(intent) }