Pemrograman Perangkat Beregerak - Tugas Pertemuan 6 - Timothy Hosia

Currency Converter

Nama: Timothy Hosia Budianto

NRP: 5025211098

Kelas: PPB - A


Currency Converter

Pada pertemuan kali ini kami mebuat aplikasi untuk menukarkan currency. Mata uang yang bisa di tukar adalah "USD", "IDR", "EUR", "JPY", "GBP", "AUD", "MYR", "SGD", dan "KRW"




Kode
Berikut kode implementasi saya
package com.example.currencyconverter

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.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
CurrencyConverterApp()
}
}
}

// Nilai tukar *dummy* (1 USD = X mata uang target; update sesuai kebutuhan)
val ratesToUSD = mapOf(
"USD" to 1.0,
"IDR" to 16000.0,
"EUR" to 0.93,
"JPY" to 151.5,
"GBP" to 0.80,
"AUD" to 1.5,
"MYR" to 4.7,
"SGD" to 1.36,
"KRW" to 1370.0
)

val currencies = listOf("USD", "IDR", "EUR", "JPY", "GBP", "AUD", "MYR", "SGD", "KRW")

@Composable
fun CurrencyConverterApp() {
var amountInput by remember { mutableStateOf("") }
var fromCurrency by remember { mutableStateOf("USD") }
var toCurrency by remember { mutableStateOf("IDR") }
var convertedAmount by remember { mutableStateOf("") }
val context = LocalContext.current

Surface(
modifier = Modifier
.fillMaxSize()
.padding(24.dp),
color = Color(0xFFF5F5F5)
) {
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(
text = "Currency Converter",
fontSize = 26.sp,
color = Color(0xFF333333),
fontWeight = FontWeight.Bold
)
Spacer(modifier = Modifier.height(22.dp))
OutlinedTextField(
value = amountInput,
onValueChange = { amountInput = it.filter { c -> c.isDigit() || c == '.' } },
label = { Text("Amount") },
modifier = Modifier.fillMaxWidth(0.9f)
)
Spacer(modifier = Modifier.height(14.dp))
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceEvenly
) {
CurrencyDropdown(
selected = fromCurrency,
label = "From",
onSelect = { fromCurrency = it }
)
CurrencyDropdown(
selected = toCurrency,
label = "To",
onSelect = { toCurrency = it }
)
}
Spacer(modifier = Modifier.height(18.dp))
Button(
shape = RoundedCornerShape(10.dp),
onClick = {
val amount = amountInput.toDoubleOrNull()
if (amount == null) {
Toast.makeText(context, "Masukkan nominal angka yang benar", Toast.LENGTH_SHORT).show()
return@Button
}
if (fromCurrency == toCurrency) {
convertedAmount = "%.2f".format(amount)
return@Button
}
val amountInUSD = amount / ratesToUSD[fromCurrency]!!
val result = amountInUSD * ratesToUSD[toCurrency]!!
convertedAmount = "%.2f".format(result)
},
modifier = Modifier.fillMaxWidth(0.7f)
) {
Text("Convert")
}
Spacer(modifier = Modifier.height(30.dp))
Card(
elevation = CardDefaults.cardElevation(defaultElevation = 7.dp),
shape = RoundedCornerShape(12.dp),
colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.primaryContainer)
) {
Box(Modifier.padding(24.dp).fillMaxWidth()) {
Text(
text = if (convertedAmount.isNotEmpty())
"Result: $amountInput $fromCurrency = $convertedAmount $toCurrency"
else
"Conversion result will appear here",
fontSize = 19.sp,
color = MaterialTheme.colorScheme.onPrimaryContainer.copy(alpha = 0.79f),
textAlign = TextAlign.Center
)
}
}
}
}
}

@Composable
fun CurrencyDropdown(selected: String, label: String, onSelect: (String) -> Unit) {
var expanded by remember { mutableStateOf(false) }
Box {
OutlinedButton(onClick = { expanded = true }) {
Text("$label: $selected")
}
DropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false }
) {
currencies.forEach { currency ->
DropdownMenuItem(
text = { Text(currency) },
onClick = {
onSelect(currency)
expanded = false
}
)
}
}
}
}
Github :

Comments

Popular posts from this blog

Pemrograman Perangkat Beregerak - ETS - - Timothy Hosia

ETS PPL A

EAS PPL A - Perancangan Perangkat Lunak Hotel