Tugas 9

Nama: Muhamad Faiz Fernanda

Kelas: PPB-A

NRP: 50251211186

Analisis dan Implementasi Aplikasi "Dessert Clicker" dengan Jetpack Compose


Tampilan Antarmuka Aplikasi



1. Analisis Kode Sumber Aplikasi "Dessert Clicker"

Untuk memahami struktur serta fungsionalitas aplikasi, berikut adalah penjabaran dari komponen-komponen penting yang terdapat dalam proyek ini:

2. Struktur Data: Dessert.kt dan Datasource.kt

Aplikasi ini menggunakan pendekatan data sederhana namun efektif dalam merepresentasikan berbagai jenis makanan penutup (dessert), dengan memanfaatkan data class pada Kotlin.

data class Dessert(
    val imageId: Int,
    val price: Int,
    val startProductionAmount: Int
)

Penjelasan atribut:

  • imageId: ID untuk gambar (resource drawable) dari dessert.
  • price: Harga per unit dari dessert.
  • startProductionAmount: Jumlah minimum penjualan sebelum dessert ini mulai muncul di aplikasi.

Data tersebut disediakan secara statis melalui file Datasource.kt dalam bentuk List<Dessert>.


3. Antarmuka Pengguna (UI) dengan Jetpack Compose

Seluruh tampilan dibangun menggunakan pendekatan deklaratif Jetpack Compose. Fokus utama pengembangan UI berada di dalam file MainActivity.kt.

a. Manajemen Status (State Management)

Jetpack Compose menggunakan konsep state untuk menangani data yang berubah. Dengan rememberSaveable, status tetap tersimpan meskipun terjadi perubahan konfigurasi (seperti rotasi layar).

var revenue by rememberSaveable { mutableStateOf(0) }
var dessertsSold by rememberSaveable { mutableStateOf(0) }

b. Fungsi Composable untuk UI

Fungsi utama seperti DessertClickerScreen digunakan untuk menyusun struktur UI: mulai dari gambar latar, dessert yang dapat diklik, hingga informasi transaksi.

Image(
    painter = painterResource(dessertImageId),
    contentDescription = null,
    modifier = Modifier.clickable { onDessertClicked() }
)

Fitur .clickable memungkinkan pengguna berinteraksi langsung dengan gambar dessert.


4. Logika Aplikasi dan Lifecycle Aktivitas

a. Logika Pemilihan Dessert

Fungsi determineDessertToShow() digunakan untuk menentukan dessert mana yang tampil berdasarkan jumlah penjualan saat ini:

fun determineDessertToShow(desserts: List<Dessert>, dessertsSold: Int): Dessert {
    var dessertToShow = desserts.first()
    for (dessert in desserts) {
        if (dessertsSold >= dessert.startProductionAmount) {
            dessertToShow = dessert
        } else {
            break
        }
    }
    return dessertToShow
}

Fungsi ini efisien karena menghentikan iterasi setelah menemukan batas jumlah penjualan.

b. Observasi Siklus Hidup (Activity Lifecycle)

Aplikasi ini juga dirancang untuk menunjukkan bagaimana Android mengelola siklus hidup Activity. Pada MainActivity, beberapa metode lifecycle seperti onCreate(), onStart(), dan onDestroy() di-override untuk mencatat log aktivitas.

override fun onStart() {
    super.onStart()
    Log.d(TAG, "onStart Called")
}

Hal ini membantu pengembang memahami alur siklus hidup saat aplikasi berjalan, dijeda, atau dihentikan.


5. Kesimpulan

Proyek Dessert Clicker merupakan sarana pembelajaran yang efektif untuk mengenal dasar-dasar pengembangan aplikasi Android modern, khususnya dengan Jetpack Compose dan Kotlin. Beberapa poin penting yang dapat dipelajari dari proyek ini:

  • Pembuatan antarmuka secara deklaratif menggunakan fungsi Composable.
  • Pengelolaan status menggunakan rememberSaveable agar data tetap konsisten saat terjadi perubahan konfigurasi.
  • Logika aplikasi sederhana untuk menangani interaksi pengguna.
  • Pengamatan siklus hidup Activity melalui metode lifecycle dan log.

Vidio Demo :
 

Source Code : https://github.com/faizfernanda/PPB-DessertClicker


Komentar

Postingan populer dari blog ini

Low Level Design

Evaluasi Akhir Semester

Estimasi Kapasitas Sistem