Langsung ke konten utama

PPB A EAS Membuat Aplikasi Starbucks dengan Reward

Nama : Mochammad Irham Maulana
Kelas : PPB A
NRP : 5025221251

 

EAS Membuat Aplikasi Starbucks Reward

 

 

 Link GitHub : https://github.com/kitokato77/ppb-eas-starbucks 

Deskripsi Project

Aplikasi Android yang meniru antarmuka dan fungsionalitas aplikasi Starbucks untuk registrasi pengguna dan sistem reward. Aplikasi ini menyediakan alur lengkap dari splash screen hingga pengelolaan reward dengan QR code.

Arsitektur Aplikasi

Aplikasi menggunakan arsitektur Activity-based dengan 10 Activity utama yang saling terhubung dalam alur yang terstruktur.

Fitur Utama

1. Sistem Onboarding dan Registrasi

  • Splash screen dengan branding Starbucks

  • Welcome screen dengan tombol Get Started

  • Halaman Terms & Conditions

  • Verifikasi nomor telepon

  • Verifikasi OTP (One-Time Password)

  • Input informasi personal (email, password, nama, tanggal lahir)

  • Pengaturan preferensi pengguna (menu favorit, kode referral)

2. Dashboard Utama (Home)

  • Tampilan sambutan personal dengan nama pengguna

  • Notifikasi reward aktif (Rp10.000)

  • Akses ke sistem reward dan terms

3. Sistem Reward

  • Tampilan syarat dan ketentuan reward

  • Generasi QR code untuk reward

  • Fitur berbagi reward

  • Simpan QR code ke galeri

  • Penggunaan reward langsung

Detail Implementasi per Activity


1. SessionManager.kt

Fungsi: Mengelola sesi pengguna menggunakan SharedPreferences

Fitur Utama:

  • Menyimpan data pengguna secara persisten

  • Session validation (login/logout state)

  • Retrieval data pengguna yang tersimpan

  • Auto-login functionality

Implementasi Kelas:

class SessionManager(private val context: Context) {

    private val sharedPref: SharedPreferences =

        context.getSharedPreferences("starbucks_session", Context.MODE_PRIVATE)

    

    fun createSession(fullName: String, email: String, phone: String, 

                     favoriteMenu: String = "", birthDate: String = "") {

        val editor = sharedPref.edit()

        editor.putBoolean(KEY_IS_LOGGED_IN, true)

        editor.putString(KEY_FULL_NAME, fullName)

        // ... menyimpan data lainnya

        editor.apply()

    }

}

Data yang Disimpan:

  • Status login (boolean)

  • Nama lengkap pengguna

  • Email dan nomor telepon

  • Menu favorit dan tanggal lahir

  • Fungsi logout untuk clear semua data


2. SplashActivity.kt

Fungsi: Layar pembuka aplikasi dengan delay 2 detik

Fitur Utama:

  • Auto-redirect ke MainActivity setelah 2 detik

  • Menggunakan Handler dengan Looper untuk timing

Handler(Looper.getMainLooper()).postDelayed({

    startActivity(Intent(this, MainActivity::class.java))

    finish()

}, 2000)


3. MainActivity.kt

Fungsi: Halaman utama dengan auto-login check

Fitur Utama:

  • Auto-login check menggunakan SessionManager

  • Redirect otomatis ke HomeActivity jika sudah login

  • Fullscreen mode (menyembunyikan status bar)

  • Navigasi ke TermsActivity untuk pengguna baru

Auto-Login Implementation:

sessionManager = SessionManager(this)


if (sessionManager.isLoggedIn()) {

    val intent = Intent(this, HomeActivity::class.java)

    val userData = sessionManager.getAllUserData()

    intent.putExtra("full_name", userData["full_name"])

    intent.putExtra("favorite_menu", userData["favorite_menu"])

    startActivity(intent)

    finish()

    return

}


4. TermsActivity.kt

Fungsi: Menampilkan syarat dan ketentuan

Fitur Utama:

  • Tombol "Agree" untuk melanjutkan ke verifikasi phone

  • Layout sederhana dengan satu button click listener

5. PhoneVerificationActivity.kt

Fungsi: Input dan validasi nomor telepon

Fitur Utama:

  • Validasi format nomor telepon (minimal 10 digit)

  • Simulasi pengiriman OTP

  • Error handling untuk input kosong dan format tidak valid

if (phoneNumber.length < 10) {

    Toast.makeText(this, "Nomor telepon tidak valid", Toast.LENGTH_SHORT).show()

    return@setOnClickListener

}


6. OtpVerificationActivity.kt

Fungsi: Verifikasi kode OTP 4 digit

Fitur Utama:

  • 4 input field terpisah untuk setiap digit OTP

  • Auto-focus ke field berikutnya setelah input

  • Masking nomor telepon untuk keamanan

  • Validasi dengan kode default "1234"

Implementasi Auto-Move Cursor:

private inner class OtpTextWatcher(

    private val currentEditText: EditText,

    private val nextEditText: EditText?

) : TextWatcher {

    override fun afterTextChanged(s: Editable?) {

        if (s?.length == 1) {

            nextEditText?.requestFocus()

        }

    }

}


Phone Number Masking:

private fun maskPhoneNumber(phoneNumber: String): String {

    return if (phoneNumber.length > 4) {

        val prefix = phoneNumber.substring(0, 4)

        val suffix = phoneNumber.takeLast(4)

        "$prefix****$suffix"

    } else {

        phoneNumber

    }

}


7. PersonalInfoActivity.kt

Fungsi: Input informasi personal pengguna

Fitur Utama:

  • Form dengan validasi lengkap (email, password, nama, tanggal lahir)

  • Validasi format email menggunakan Android Patterns

  • Validasi password minimal 8 karakter

  • Error handling dengan toast messages

Validasi Email:

!android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches() -> {

    Toast.makeText(this, "Format email tidak valid", Toast.LENGTH_SHORT).show()

    return false

}


8. PreferencesActivity.kt

Fungsi: Input preferensi opsional dan finalisasi registrasi

Fitur Utama:

  • Input menu favorit dan kode referral (opsional)

  • Integrasi SessionManager untuk menyimpan data pengguna

  • Button selalu enabled karena preferensi bersifat opsional

  • Clear back stack untuk mencegah kembali ke flow registrasi

  • Dynamic button state dengan TextWatcher

Session Creation:

sessionManager.createSession(

    fullName = fullName,

    email = email,

    phone = phoneNumber,

    favoriteMenu = favoriteMenu,

    birthDate = birthDate

)


9. HomeActivity.kt

Fungsi: Dashboard utama aplikasi dengan session management

Fitur Utama:

  • Session validation saat membuka activity

  • Fallback ke data tersimpan jika intent tidak ada

  • Welcome message personal dengan nama pengguna

  • Toast notification dengan informasi menu favorit

  • Akses ke reward section

  • Fungsi logout dengan redirect ke MainActivity

  • Override onBackPressed untuk mencegah kembali ke registrasi

Session Management Implementation:

if (!sessionManager.isLoggedIn()) {

    redirectToMain()

    return

}


private fun setupUserData() {

    val fullName = intent.getStringExtra("full_name")

        ?: sessionManager.getFullName()

    val favoriteMenu = intent.getStringExtra("favorite_menu")

        ?: sessionManager.getFavoriteMenu()

    // Menggunakan data dari session jika intent kosong

}


Logout Functionality:

private fun logout() {

    sessionManager.logout()

    redirectToMain()

}

10. RewardTermsActivity.kt

Fungsi: Tampilan syarat dan ketentuan reward

Fitur Utama:

  • Tombol back untuk navigasi

  • Tombol "Show QR" untuk mengakses QR code reward

  • Layout sederhana dengan dua button utama

11. QRCodeActivity.kt

Fungsi: Manajemen QR code reward

Fitur Utama:

  • Tampilan QR code dengan tanggal kadaluarsa

  • Fitur berbagi reward via Intent

  • Simpan QR code ke galeri device

  • Penggunaan reward dengan instruksi kepada barista

Share Functionality:

private fun shareQRCode() {

    val shareIntent = Intent().apply {

        action = Intent.ACTION_SEND

        type = "text/plain"

        putExtra(Intent.EXTRA_TEXT, "Saya mendapat reward Rp10.000 dari Starbucks! 🎉\nKode: SB-RWD-10K-2024")

        putExtra(Intent.EXTRA_SUBJECT, "Starbucks Reward")

    }

    startActivity(Intent.createChooser(shareIntent, "Bagikan Reward"))

}


Save to Gallery:

private fun saveImageToGallery(bitmap: Bitmap) {

    val values = ContentValues().apply {

        put(MediaStore.Images.Media.DISPLAY_NAME, "Starbucks_QR_${System.currentTimeMillis()}.png")

        put(MediaStore.Images.Media.MIME_TYPE, "image/png")

        put(MediaStore.Images.Media.WIDTH, bitmap.width)

        put(MediaStore.Images.Media.HEIGHT, bitmap.height)

    }

    val uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)

    // ... implementasi save bitmap

}


Alur Aplikasi (User Flow)

  1. SplashActivityMainActivity (2 detik delay)

  2. MainActivityTermsActivity (Get Started)

  3. TermsActivityPhoneVerificationActivity (Agree)

  4. PhoneVerificationActivityOtpVerificationActivity (Send OTP)

  5. OtpVerificationActivityPersonalInfoActivity (Verify OTP: 1234)

  6. PersonalInfoActivityPreferencesActivity (Next)

  7. PreferencesActivityHomeActivity (Sign Up)

  8. HomeActivityRewardTermsActivity (Reward Section)

  9. RewardTermsActivityQRCodeActivity (Show QR)

Fitur Keamanan dan UX

Keamanan:

  • Phone number masking untuk privasi

  • Validasi input pada setiap form

  • Session management dengan SharedPreferences

  • Auto-logout dan redirect untuk unauthorized access

  • Clear navigation stack untuk mencegah back navigation ke sensitive screens

User Experience:

  • Auto-login untuk returning users

  • Persistent user data tanpa perlu input ulang

  • Auto-focus pada OTP input fields

  • Toast messages untuk feedback kepada user

  • Immersive UI dengan hidden status bar

  • Personal welcome messages

  • Fallback data loading dari session storage

  • Consistent navigation patterns

Session Management Benefits:

  • Pengalaman seamless untuk returning users

  • Data persistence across app restarts

  • Secure logout functionality

  • Automatic session validation

Teknologi dan Library yang Digunakan

  • Language: Kotlin

  • UI Framework: Android Native (Activity-based)

  • Data Persistence: SharedPreferences untuk session management

  • Image Handling: Android Bitmap dan Canvas

  • Storage: MediaStore untuk save ke galeri

  • Date Formatting: SimpleDateFormat dengan locale Indonesia

  • Intent: Untuk sharing dan navigation

  • Session Management: Custom SessionManager class

Kelebihan Aplikasi

  • Alur yang Lengkap: Dari onboarding hingga reward redemption

  • Session Management: Auto-login dan persistent user data

  • Validasi Komprehensif: Setiap input divalidasi dengan proper error handling

  • UX yang Baik: Auto-focus, masking, dan feedback yang jelas

  • Data Persistence: User tidak perlu login berulang kali

  • Fitur Sharing: Integrasi dengan sistem sharing Android

  • Personalisasi: Welcome message berdasarkan input user

  • Security Considerations: Phone masking, session validation, dan navigation stack management

  • Fallback Mechanisms: Data loading dari session jika intent kosong

Kesimpulan

Aplikasi ini merupakan prototype yang baik untuk sistem registrasi dan reward Starbucks dengan implementasi yang solid pada sisi client. Kode terstruktur dengan baik, mengikuti best practices Android development, dan menyediakan user experience yang smooth untuk flow registrasi hingga reward management.

 

Komentar

Postingan populer dari blog ini

PPB A Tugas 5 Membuat Aplikasi Kalkulator

  Nama : Mochammad Irham Maulana Kelas : PPB A NRP   : 5025221251   Tugas 5 Membuat Aplikasi Kalkulator di Android Studio   Link Source Code : https://github.com/kitokato77/ppb-calcubasic   Screenshots Aplikasi :   Video Build :  

PPB A Tugas 1 Sejarah dan Perkembangan Telepon Seluler

Nama     :Mochammad Irham Maulana Kelas      : PPB A NRP        : 5025221251    Resume Sejarah dan Perkembangan Telepon Seluler   Awal Mula (1947-1982): Sebelum ada ponsel seperti sekarang, orang orang menggunakan telepon yang ada pada mobil yang beratnya sekitar 36 kg. Pada tahun 1947, seorang insinyur dari Bell Labs memiliki ide untuk membuat jaringan telepon mobil, tapi teknologinya belum memadai saat itu. Nokia kemudian membuat Mobira Senator pada tahun 1982, yang dianggap sebagai ponsel pertama untuk konsumen, dengan berat 10 kg.   Era Ponsel Pertama (1973-1983): Martin Cooper dari Motorola membuat sejarah dengan melakukan panggilan pertama menggunakan ponsel prototipe pada tahun 1973. Pada tahun 1983, Motorola meluncurkan DynaTAC 8000X, ponsel genggam pertama yang bisa dibawa-bawa. DynaTAC 8000X ini:               - Butuh waktu 10 jam untuk mengisi bate...

PPB A Tugas 3 Membuat Aplikasi Selamat Ulang Tahun menggunakan Android Studio

  Nama : Mochammad Irham Maulana Kelas : PPB A NRP   : 5025221251   Tugas 3 Membuat Aplikasi Selamat Ulang Tahun di Android Studio   Link Source Code : https://github.com/kitokato77/ppb-happybirthday   Screenshots Aplikasi :      Screenshots IDE :