From 48ff93c0e2beecf286bd9d8d4f7b0aa53e886b30 Mon Sep 17 00:00:00 2001 From: AndAlb Date: Mon, 2 Mar 2026 17:16:19 +0100 Subject: [PATCH] Add launcher screen with two big app buttons --- .../com/example/ichwillheim/MainActivity.kt | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 app/src/main/java/com/example/ichwillheim/MainActivity.kt diff --git a/app/src/main/java/com/example/ichwillheim/MainActivity.kt b/app/src/main/java/com/example/ichwillheim/MainActivity.kt new file mode 100644 index 0000000..6465215 --- /dev/null +++ b/app/src/main/java/com/example/ichwillheim/MainActivity.kt @@ -0,0 +1,108 @@ +package com.example.ichwillheim + +import android.os.Bundle +import android.widget.Toast +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.activity.enableEdgeToEdge +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +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.material3.Button +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.example.ichwillheim.ui.theme.IchWillHeimTheme + +class MainActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContent { + IchWillHeimTheme { + Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> + LauncherScreen(modifier = Modifier.padding(innerPadding)) + } + } + } + } +} + +@Composable +fun LauncherScreen(modifier: Modifier = Modifier) { + val context = LocalContext.current + val apps = listOf( + AppEntry( + label = "Phone", + packageName = "com.android.dialer" + ), + AppEntry( + label = "Messages", + packageName = "com.google.android.apps.messaging" + ) + ) + + Column( + modifier = modifier + .fillMaxSize() + .padding(24.dp), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + text = "Hallo Renate!", + style = MaterialTheme.typography.headlineSmall + ) + Spacer(modifier = Modifier.height(24.dp)) + apps.forEach { app -> + Button( + onClick = { launchApp(context, app) }, + modifier = Modifier + .fillMaxWidth() + .height(96.dp) + ) { + Text(text = app.label, fontSize = 24.sp) + } + Spacer(modifier = Modifier.height(16.dp)) + } + } +} + +@Preview(showBackground = true) +@Composable +fun LauncherPreview() { + IchWillHeimTheme { + LauncherScreen() + } +} + +@Immutable +data class AppEntry( + val label: String, + val packageName: String +) + +private fun launchApp(context: android.content.Context, app: AppEntry) { + val intent = context.packageManager.getLaunchIntentForPackage(app.packageName) + if (intent != null) { + context.startActivity(intent) + } else { + Toast.makeText( + context, + "App not found: ${app.label}", + Toast.LENGTH_SHORT + ).show() + } +}