commit 4a6c483c7249374c4aa97413b7b90b2b1b7ae973 Author: 202310715051 DENDI YOGIA PRATAMA <202310715051@mhs.ubharajaya.ac.id> Date: Thu Oct 16 15:14:41 2025 +0700 TugasKartuNama diff --git a/KarnamMainActivity.kt b/KarnamMainActivity.kt new file mode 100644 index 0000000..f9a0300 --- /dev/null +++ b/KarnamMainActivity.kt @@ -0,0 +1,254 @@ +package com.example.businesscard + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Email +import androidx.compose.material.icons.filled.Phone +import androidx.compose.material.icons.filled.Share +import androidx.compose.material3.* +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.shadow +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + +class MainActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContent { + MaterialTheme { + BusinessCardApp() + } + } + } +} + +@Composable +fun BusinessCardApp() { + Box( + modifier = Modifier + .fillMaxSize() + .background( + Brush.verticalGradient( + colors = listOf( + Color(0xFF0F2027), + Color(0xFF203A43), + Color(0xFF2C5364) + ) + ) + ), + contentAlignment = Alignment.Center + ) { + Card( + modifier = Modifier + .padding(24.dp) + .fillMaxWidth() + .shadow( + elevation = 20.dp, + shape = RoundedCornerShape(24.dp), + spotColor = Color(0xFF00D4FF) + ), + shape = RoundedCornerShape(24.dp), + colors = CardDefaults.cardColors( + containerColor = Color(0xFF1A1A2E).copy(alpha = 0.95f) + ) + ) { + Column( + modifier = Modifier + .padding(32.dp) + .fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + // Avatar Section + Box( + modifier = Modifier + .size(120.dp) + .clip(CircleShape) + .background( + Brush.linearGradient( + colors = listOf( + Color(0xFF00D4FF), + Color(0xFF0094FF) + ) + ) + ) + .padding(4.dp), + contentAlignment = Alignment.Center + ) { + Box( + modifier = Modifier + .fillMaxSize() + .clip(CircleShape) + .background(Color(0xFF16213E)), + contentAlignment = Alignment.Center + ) { + Text( + text = "DP", + fontSize = 48.sp, + fontWeight = FontWeight.Bold, + color = Color(0xFF00D4FF) + ) + } + } + + Spacer(modifier = Modifier.height(24.dp)) + + // Name + Text( + text = "Dendi Yogia Pratama", + fontSize = 26.sp, + fontWeight = FontWeight.Bold, + color = Color.White + ) + + Spacer(modifier = Modifier.height(8.dp)) + + // Title + Text( + text = "Market Analyze", + fontSize = 18.sp, + color = Color(0xFF00D4FF), + fontWeight = FontWeight.Medium + ) + + Spacer(modifier = Modifier.height(4.dp)) + + Text( + text = "Teknikal Specialis", + fontSize = 14.sp, + color = Color(0xFFB0B0B0) + ) + + Spacer(modifier = Modifier.height(32.dp)) + + // Divider + Box( + modifier = Modifier + .fillMaxWidth() + .height(1.dp) + .background( + Brush.horizontalGradient( + colors = listOf( + Color.Transparent, + Color(0xFF00D4FF), + Color.Transparent + ) + ) + ) + ) + + Spacer(modifier = Modifier.height(32.dp)) + + // Contact Info + ContactItem( + icon = Icons.Default.Phone, + text = "+62 812 3456 7890" + ) + + Spacer(modifier = Modifier.height(16.dp)) + + ContactItem( + icon = Icons.Default.Share, + text = "@dendiyogia" + ) + + Spacer(modifier = Modifier.height(16.dp)) + + ContactItem( + icon = Icons.Default.Email, + text = "dendiyogiap@email.com" + ) + + Spacer(modifier = Modifier.height(32.dp)) + + // Action Button + Button( + onClick = { }, + modifier = Modifier + .fillMaxWidth() + .height(56.dp), + shape = RoundedCornerShape(16.dp), + colors = ButtonDefaults.buttonColors( + containerColor = Color.Transparent + ), + contentPadding = PaddingValues(0.dp) + ) { + Box( + modifier = Modifier + .fillMaxSize() + .background( + Brush.horizontalGradient( + colors = listOf( + Color(0xFF00D4FF), + Color(0xFF0094FF) + ) + ) + ), + contentAlignment = Alignment.Center + ) { + Text( + text = "SAVE CONTACT", + fontWeight = FontWeight.Bold, + fontSize = 16.sp, + color = Color.White + ) + } + } + } + } + } +} + +@Composable +fun ContactItem(icon: ImageVector, text: String) { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically + ) { + Box( + modifier = Modifier + .size(48.dp) + .clip(RoundedCornerShape(12.dp)) + .background( + Color(0xFF00D4FF).copy(alpha = 0.1f) + ), + contentAlignment = Alignment.Center + ) { + Icon( + imageVector = icon, + contentDescription = null, + tint = Color(0xFF00D4FF), + modifier = Modifier.size(24.dp) + ) + } + + Spacer(modifier = Modifier.width(16.dp)) + + Text( + text = text, + fontSize = 16.sp, + color = Color.White.copy(alpha = 0.9f) + ) + } +} + +@Preview(showBackground = true) +@Composable +fun PreviewBusinessCard() { + MaterialTheme { + BusinessCardApp() + } +} \ No newline at end of file diff --git a/Screenshot 2025-10-16 at 14.44.08.png b/Screenshot 2025-10-16 at 14.44.08.png new file mode 100644 index 0000000..d276df2 Binary files /dev/null and b/Screenshot 2025-10-16 at 14.44.08.png differ