Tugas 6 PPB

💱 Aplikasi Currency Converter

Nama: Revy Pramana

NRP: 5025221252

Deskripsi: Aplikasi Android sederhana untuk mengonversi nilai Dolar (USD) ke Rupiah (IDR) menggunakan Jetpack Compose

🧑‍💻 Cuplikan Kode


package com.example.currencyconverter

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.unit.dp
import androidx.compose.ui.tooling.preview.Preview
import com.example.currencyconverter.ui.theme.CurrencyConverterTheme

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
            CurrencyConverterTheme {
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    CurrencyConverterScreen()
                }
            }
        }
    }
}

@Composable
fun CurrencyConverterScreen() {
    var dollarInput by remember { mutableStateOf("") }
    var resultText by remember { mutableStateOf("") }
    val focusManager = LocalFocusManager.current
    val rate = 16803f

    Column(
        modifier = Modifier
            .fillMaxSize()
            .padding(16.dp),
        verticalArrangement = Arrangement.Center
    ) {
        Text(
            text = "Konversi Dolar ke Rupiah",
            style = MaterialTheme.typography.headlineMedium,
            modifier = Modifier.padding(bottom = 24.dp)
        )

        OutlinedTextField(
            value = dollarInput,
            onValueChange = { input ->
                if (input.matches(Regex("^[0-9]*\\.?[0-9]*$"))) {
                    dollarInput = input
                }
            },
            label = { Text("Masukkan jumlah Dolar") },
            singleLine = true,
            keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
            modifier = Modifier.fillMaxWidth()
        )

        Spacer(modifier = Modifier.height(16.dp))

        Button(
            onClick = {
                focusManager.clearFocus()
                val dollars = dollarInput.toFloatOrNull()
                resultText = if (dollars != null) {
                    val rupiah = dollars * rate
                    "\$${dollars} = Rp ${"%,.2f".format(rupiah)}"
                } else {
                    "Input tidak valid"
                }
            },
            modifier = Modifier.fillMaxWidth()
        ) {
            Text("Konversi")
        }

        Spacer(modifier = Modifier.height(24.dp))

        if (resultText.isNotEmpty()) {
            Text(
                text = resultText,
                style = MaterialTheme.typography.bodyLarge
            )
        }
    }
}

@Preview(showBackground = true)
@Composable
fun CurrencyConverterScreenPreview() {
    CurrencyConverterTheme {
        CurrencyConverterScreen()
    }
}

📸 Hasil Tampilan

Contoh tampilan aplikasi saat dijalankan:

Currency Converter Screenshot

📌 Fitur Utama

  • Input angka Dolar (USD) dengan validasi hanya angka dan titik desimal.
  • Konversi otomatis berdasarkan kurs tetap rate = 16.803 IDR/USD.
  • Hasil konversi ditampilkan dalam format mata uang Rupiah dengan ribuan dan dua desimal (%,.2f).
  • UI responsif menggunakan Jetpack Compose & Material 3.

🔧 Catatan Teknis

  • enableEdgeToEdge() memastikan content area memanfaatkan layar penuh.
  • OutlinedTextField dengan KeyboardOptions(keyboardType = KeyboardType.Number) untuk input numerik.
  • Validasi menggunakan regex ^[0-9]*\\.?[0-9]*$ agar hanya angka dan satu titik desimal.
  • LocalFocusManager digunakan untuk menyembunyikan keyboard setelah tombol ditekan.
  • Gunakan remember & mutableStateOf untuk state Compose yang reaktif.

🔗 Link GitHub Repository

Source code aplikasi ini dapat diakses di:
https://github.com/Revprm/Repo-PPB/tree/main/CurrencyConverter

Comments

Popular posts from this blog

Tugas 14 PPB

Tugas 5 PPB

Tugas 4 PPB