Menu
Close
  • Kategori

  • Halaman

Tekno Haiberita.com

Tekno Haiberita.com

Cara Membuat Widget Android Panduan Lengkap

Cara Membuat Widget Android Panduan Lengkap

Smallest Font
Largest Font

Pengantar Pembuatan Widget Android

Hai, Sobat IDN Times! Pernah nggak kepikiran gimana caranya bikin aplikasi Android yang praktis dan informatif, tapi nggak perlu ribet buka aplikasi terus-terusan? Jawabannya ada di widget! Widget Android adalah mini aplikasi yang bisa kamu taruh di homescreen smartphone, memberikan akses cepat ke informasi atau fungsi tertentu tanpa perlu membuka aplikasi utamanya. Bayangkan, kamu bisa langsung lihat cuaca, berita terkini, atau bahkan kontrol musik langsung dari homescreen, keren kan?

Nah, artikel ini bakal ngebahas seluk-beluk pembuatan widget Android, dari pengertian sampai contoh-contohnya. Siap-siap jadi developer handal!

Perbedaan Widget dan Aplikasi Android

Meskipun sama-sama berjalan di Android, widget dan aplikasi punya perbedaan mendasar. Aplikasi Android adalah program lengkap dengan berbagai fitur dan fungsi yang terintegrasi. Sedangkan widget lebih fokus pada satu atau beberapa fungsi spesifik yang ditampilkan secara ringkas di homescreen. Aplikasi bisa berdiri sendiri, sementara widget selalu bergantung pada aplikasi induknya. Contohnya, widget cuaca hanya menampilkan informasi cuaca, dan untuk melihat detail lebih lanjut, kamu harus membuka aplikasi cuaca utamanya.

Contoh Jenis Widget Android

Ada banyak jenis widget Android yang bisa kamu temukan, masing-masing dengan fungsi dan kompleksitas yang berbeda. Berikut beberapa contohnya:

  • Widget cuaca: Menampilkan suhu, kondisi cuaca, dan prakiraan cuaca.
  • Widget kalender: Menampilkan jadwal kegiatan harian atau mingguan.
  • Widget musik: Mengontrol pemutaran musik, menampilkan lagu yang sedang diputar.
  • Widget catatan: Memberikan akses cepat ke catatan penting.
  • Widget to-do list: Menampilkan daftar tugas yang harus diselesaikan.

Perbandingan Jenis Widget Android

Berikut tabel perbandingan beberapa jenis widget berdasarkan kompleksitas dan fitur yang ditawarkan:

Jenis Widget Kompleksitas Fitur Contoh Implementasi
Widget Cuaca Rendah Suhu, kondisi cuaca, prakiraan Menampilkan suhu dan ikon cuaca terkini
Widget Kalender Sedang Jadwal harian/mingguan, pengingat Menampilkan agenda hari ini dan besok
Widget Musik Sedang Kontrol pemutaran, informasi lagu Tombol play/pause, next/previous, judul lagu
Widget To-Do List Tinggi Daftar tugas, penambahan tugas, centang tugas Menampilkan daftar tugas, memungkinkan penambahan dan penghapusan tugas

Keunggulan dan Kelemahan Menggunakan Widget

Menggunakan widget dalam pengembangan aplikasi Android memiliki beberapa keunggulan dan kelemahan yang perlu dipertimbangkan.

  • Keunggulan: Akses cepat ke informasi penting, peningkatan pengalaman pengguna, tampilan homescreen yang lebih informatif dan personal.
  • Kelemahan: Membutuhkan pengembangan tambahan, potensi konsumsi baterai lebih tinggi jika tidak dioptimalkan dengan baik, tergantung pada aplikasi induknya.

Membuat Widget Android Sederhana: Panduan Lengkap

Hai, Sobat Androider! Pengen aplikasi Android kamu makin kece dan praktis? Coba deh bikin widget! Widget ini kayak pintasan mini aplikasi kamu di homescreen, jadi kamu bisa akses fitur-fitur penting tanpa perlu buka aplikasi dulu. Gak ribet kok, kita bakal bikin widget “Hello World” sederhana sebagai langkah awal. Siap-siap, yuk!

Langkah-langkah Pembuatan Widget “Hello World”

Membuat widget “Hello World” adalah langkah awal yang sempurna untuk memahami konsep dasar pembuatan widget Android. Prosesnya melibatkan beberapa tahapan, dari desain layout hingga pengujian di emulator atau perangkat Android.

  1. Buat Layout XML untuk Widget: File XML ini menentukan tampilan widget. Kita akan membuat layout sederhana yang hanya menampilkan teks “Hello World!”. File XML ini biasanya diletakkan di folder res/layout dengan nama seperti widget_layout.xml. Contohnya:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:textSize="20sp" />

</LinearLayout>
  1. Implementasi Logika Sederhana dengan Java/Kotlin: Selanjutnya, kita perlu membuat kelas yang akan menangani logika widget. Dalam contoh ini, logika kita sangat sederhana, hanya menampilkan teks. Kode ini biasanya berada di dalam kelas yang extends AppWidgetProvider. Berikut contoh implementasi Kotlin:
class HelloWorldWidgetProvider : AppWidgetProvider() 
    override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) 
        for (appWidgetId in appWidgetIds) 
            updateAppWidget(context, appWidgetManager, appWidgetId)
        
    

    fun updateAppWidget(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int) 
        val views = RemoteViews(context.packageName, R.layout.widget_layout)
        appWidgetManager.updateAppWidget(appWidgetId, views)
    

  1. Pengujian Widget pada Emulator atau Perangkat Android: Setelah kode selesai, jalankan aplikasi di emulator atau perangkat Android. Widget belum akan muncul secara otomatis di homescreen. Kita perlu menambahkannya secara manual.

Menambahkan Widget ke Homescreen Android

Setelah berhasil membangun aplikasi, menambahkan widget ke homescreen Android cukup mudah. Prosesnya sedikit berbeda tergantung versi Android, namun intinya sama.

  1. Tekan Lama pada Homescreen: Tekan lama pada area kosong di homescreen Android kamu.
  2. Pilih Widget: Setelah beberapa saat, akan muncul opsi untuk menambahkan widget. Cari widget “Hello World” (atau nama widget kamu) dan pilih.
  3. Letakkan Widget: Seret dan letakkan widget di posisi yang kamu inginkan di homescreen.

Selamat! Widget “Hello World” kamu sekarang sudah terpasang di homescreen. Meskipun sederhana, ini adalah langkah penting untuk memahami dasar-dasar pembuatan widget Android. Dari sini, kamu bisa bereksperimen dengan layout dan fitur yang lebih kompleks untuk membuat widget yang lebih canggih dan bermanfaat!

Penggunaan XML dalam Desain Widget

Nah, setelah kita bahas hal-hal dasar, sekarang saatnya kita menyelami dunia XML untuk mendesain widget Android yang kece badai! XML, singkatan dari Extensible Markup Language, berperan penting banget dalam menentukan tampilan widget kita. Bayangin aja, XML ini layaknya blueprint rumah, dia yang ngatur letak tombol, teks, gambar, dan semua elemen UI lainnya di dalam widget kita. Gak pake XML? Ya, widget-nya bakal jadi… kosong melompong!

Dengan XML, kita bisa mengatur atribut-atribut penting, aplikasi style dan theme untuk tampilan yang konsisten, dan bahkan menangani event seperti klik tombol. Pokoknya, paham XML adalah kunci utama bikin widget Android yang keren dan fungsional!

Atribut XML Penting untuk Desain Widget

Atribut XML itu banyak banget, tapi tenang, kita bakal fokus ke yang paling penting dan sering dipake. Dengan memahami atribut-atribut ini, kita bisa mengontrol ukuran, posisi, warna, dan berbagai aspek visual lainnya dari elemen UI di dalam widget kita. Bayangin aja, kita bisa bikin widget yang minimalis dan elegan, atau sebaliknya, widget yang ramai dan penuh warna, semua tergantung kreatifitas dan pemilihan atribut yang tepat!

Atribut Fungsi Contoh Penggunaan Keterangan Tambahan
layout_width Menentukan lebar elemen UI. android:layout_width="match_parent" Nilai bisa match_parent, wrap_content, atau nilai numerik (misalnya, 100dp).
layout_height Menentukan tinggi elemen UI. android:layout_height="wrap_content" Sama seperti layout_width, nilai bisa match_parent, wrap_content, atau nilai numerik.
layout_gravity Menentukan posisi elemen UI di dalam container-nya. android:layout_gravity="center" Nilai bisa top, bottom, left, right, center, dll.
text (untuk TextView) Menentukan teks yang ditampilkan pada TextView. android:text="Halo Dunia!" Teks bisa berupa string literal atau string resource.
src (untuk ImageView) Menentukan sumber gambar yang ditampilkan pada ImageView. android:src="@drawable/my_image" Sumber gambar bisa berupa drawable resource.

Penggunaan Style dan Theme untuk Tampilan Konsisten

Bayangin kamu punya banyak widget, tapi tampilannya acak-acakan. Gak banget, kan? Nah, di sinilah style dan theme berperan penting. Dengan style, kita bisa mendefinisikan kumpulan atribut yang bisa kita terapkan ke banyak elemen UI sekaligus. Sedangkan theme, berfungsi untuk menentukan tampilan keseluruhan aplikasi, termasuk widget-nya. Jadi, dengan style dan theme, kita bisa memastikan tampilan widget kita konsisten dan rapih, walau jumlahnya banyak!

Contohnya, kita bisa membuat style untuk tombol dengan warna latar belakang dan teks tertentu. Kemudian, kita bisa menerapkan style tersebut ke semua tombol di dalam widget kita. Hasilnya? Semua tombol akan memiliki tampilan yang seragam dan rapih!

Contoh Kode XML untuk Membuat Widget

Oke, sekarang saatnya kita lihat contoh kode XML yang nyata! Berikut ini contoh kode XML untuk membuat widget sederhana dengan Button, TextView, dan ImageView:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Halo Dunia!" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Klik Saya" />

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon" />

</LinearLayout>

Kode di atas menunjukkan sebuah LinearLayout vertikal yang berisi TextView, Button, dan ImageView. Mudah, kan?

Menangani Event pada Widget Menggunakan XML

Meskipun biasanya event handling dilakukan di Java atau Kotlin, untuk event sederhana, kita bisa memanfaatkan atribut XML tertentu. Misalnya, untuk tombol, kita bisa menggunakan atribut android:onClick untuk menghubungkannya dengan sebuah method di activity atau fragment kita.

Contohnya, jika kita ingin menjalankan method onClickButton saat tombol diklik, kita bisa menambahkan atribut android:onClick="onClickButton" pada tag Button di XML kita.

Penggunaan Java/Kotlin dalam Pemrograman Widget

Nah, setelah kita bahas dasar-dasar pembuatan widget Android, sekarang saatnya kita masuk ke jantungnya: coding! Java dan Kotlin, dua bahasa pemrograman utama di Android, berperan krusial dalam memberi nyawa pada widget kita. Dari menangani klik tombol sampai memperbarui tampilan secara real-time, semuanya bergantung pada bagaimana kita menulis kode. Siap-siap, karena kita akan menjelajahi beberapa teknik penting dalam mengolah Java/Kotlin untuk widget Android yang ciamik!

Menangani Event (Klik Tombol) dalam Java/Kotlin

Bayangkan widget kamu punya tombol. Tentu kamu ingin tombol itu melakukan sesuatu ketika diklik, kan? Di sinilah event handling berperan. Dalam Java/Kotlin, kita bisa menggunakan listener untuk mendeteksi aksi pengguna, seperti klik tombol. Listener ini akan menjalankan kode tertentu ketika event terjadi. Contohnya, jika tombol diklik, kita bisa menampilkan pesan singkat atau bahkan memperbarui data yang ditampilkan di widget.

Sebagai gambaran, kita bisa menggunakan setOnClickListener dalam Kotlin. Kode ini akan dijalankan ketika tombol yang kita tentukan diklik. Dengan metode ini, kita bisa membuat interaksi yang dinamis dan responsif pada widget kita.


// Contoh sederhana dalam Kotlin
button.setOnClickListener
Toast.makeText(context, "Tombol diklik!", Toast.LENGTH_SHORT).show()

Mengakses dan Memanipulasi Data pada Widget

Widget nggak cuma tampilan statis, lho! Kita bisa membuatnya dinamis dengan mengakses dan memanipulasi data di dalamnya. Misalnya, kita bisa mengambil data dari database, API, atau penyimpanan internal, lalu menampilkannya di widget. Atau, kita bisa mengubah tampilan widget berdasarkan interaksi pengguna.

Bayangkan widget yang menampilkan cuaca terkini. Data cuaca diambil dari API, lalu ditampilkan di widget. Jika ada update data, widget akan otomatis memperbarui tampilannya. Ini memerlukan kode yang bisa mengambil data, memprosesnya, dan kemudian memperbarui UI widget. Proses ini biasanya melibatkan penggunaan objek View untuk mengakses dan memodifikasi elemen UI widget.

Menyimpan dan Mengambil Data dari Penyimpanan Internal

Untuk menyimpan data secara persisten, kita bisa menggunakan penyimpanan internal Android. Data yang disimpan di sini akan tetap ada meskipun aplikasi ditutup. Kita bisa menggunakan SharedPreferences untuk menyimpan data sederhana seperti pengaturan pengguna atau skor game. Untuk data yang lebih kompleks, kita bisa menggunakan database seperti SQLite.

Misalnya, kita ingin menyimpan pengaturan tema widget. Kita bisa menggunakan SharedPreferences untuk menyimpan pilihan tema pengguna (misalnya, terang atau gelap). Ketika widget dijalankan, kita bisa mengambil nilai pengaturan tema dari SharedPreferences dan menerapkannya ke widget.


// Contoh sederhana menyimpan data ke SharedPreferences dalam Kotlin
val sharedPref = context.getSharedPreferences("my_prefs", Context.MODE_PRIVATE)
val editor = sharedPref.edit()
editor.putString("tema", "gelap")
editor.apply()

Memperbarui Tampilan Widget Secara Dinamis

Salah satu kunci widget yang menarik adalah kemampuannya untuk memperbarui tampilan secara real-time. Ini bisa dilakukan dengan menggunakan beberapa teknik, seperti runOnUiThread dalam Java atau fungsi ekstensi post dalam Kotlin untuk memperbarui UI dari thread latar belakang, atau menggunakan observer pattern untuk memantau perubahan data.

Contohnya, jika widget menampilkan data stok saham, kita perlu memperbarui harga saham secara berkala. Ini bisa dilakukan dengan mengambil data dari API secara periodik dan kemudian memperbarui tampilan widget dengan data terbaru. Penggunaan Handler atau Coroutine dalam Kotlin bisa membantu mengelola proses pembaruan ini dengan efisien.

Penggunaan Intent untuk Berkomunikasi Antara Widget dan Aplikasi Lain

Widget tidak hidup dalam isolasi. Mereka bisa berinteraksi dengan aplikasi lain melalui Intent. Intent memungkinkan kita untuk memulai aktivitas di aplikasi lain, mengirim data ke aplikasi lain, atau menerima data dari aplikasi lain. Ini membuka kemungkinan integrasi yang luas antara widget dan aplikasi lain.

Contohnya, widget cuaca bisa menggunakan Intent untuk membuka aplikasi cuaca lengkap ketika pengguna mengklik widget. Atau, widget yang menampilkan pesan baru bisa mengirim Intent ke aplikasi pesan untuk menampilkan pesan tersebut.

Penggunaan Library dan API Tambahan

Nah, setelah kita bahas dasar-dasar pembuatan widget Android, sekarang saatnya naik level! Memanfaatkan library dan API tambahan adalah kunci untuk menciptakan widget yang nggak cuma fungsional, tapi juga keren dan kaya fitur. Bayangkan widget cuaca yang menampilkan animasi hujan yang realistis, atau widget to-do list dengan grafik progress yang kece. Semua itu bisa terwujud dengan bantuan library yang tepat!

Library Android yang Umum Digunakan

Dunia pengembangan Android kaya banget dengan library yang siap pakai. Beberapa library populer yang sering digunakan dalam pengembangan widget antara lain adalah:

  • Gson: Untuk parsing dan serialisasi data JSON, super penting kalau widget kamu butuh nge-fetch data dari internet.
  • Retrofit: Memudahkan komunikasi dengan API berbasis REST, cocok banget buat widget yang butuh update data secara berkala.
  • Picasso/Glide: Library untuk handling image loading dan caching. Bayangkan widget kamu menampilkan gambar, library ini bikin loading gambar jadi lebih cepat dan efisien.
  • MPAndroidChart: Buat kamu yang butuh visualisasi data dalam bentuk grafik (bar chart, pie chart, line chart, dll), library ini jawabannya.
  • Lottie: Mau bikin animasi yang ciamik di widget kamu? Lottie bisa jadi pilihan tepat untuk memutar animasi JSON yang dibuat dengan After Effects.

Integrasi Library Pihak Ketiga

Mengintegrasikan library pihak ketiga ke proyek widget Android itu gampang kok. Biasanya, kamu tinggal tambahkan dependensi library tersebut di file build.gradle (Module: app) proyek kamu. Setelah itu, sync project dan library siap digunakan!

Contohnya, untuk menambahkan library Gson, kamu perlu menambahkan baris kode berikut di dalam blok dependencies:

implementation 'com.google.code.gson:gson:2.10.1'

Ganti angka versi dengan versi terbaru yang tersedia. Setelah itu, sync project dan library Gson sudah bisa kamu panggil di kode program kamu.

Contoh Penggunaan Library untuk Menambahkan Fitur

Misalnya, kita mau menambahkan grafik sederhana di widget yang menampilkan data penjualan harian. Dengan MPAndroidChart, kita bisa dengan mudah membuat bar chart yang menampilkan data tersebut. Bayangkan, sumbu X mewakili hari, dan sumbu Y mewakili jumlah penjualan. Library ini akan menangani semua detail rendering grafik, sehingga kita tinggal fokus pada data yang akan ditampilkan.

Atau, jika widget kamu menampilkan informasi cuaca, kamu bisa menggunakan Lottie untuk menampilkan animasi hujan, salju, atau matahari yang sesuai dengan kondisi cuaca. Animasi ini akan membuat widget kamu lebih menarik dan informatif.

Keuntungan menggunakan library pihak ketiga: hemat waktu dan tenaga karena kita nggak perlu bikin fitur dari nol, kualitas kode biasanya lebih terjamin, dan kita bisa fokus pada logika inti aplikasi. Kerugiannya: potensi konflik dependensi, ukuran aplikasi bisa membesar, dan ketergantungan pada pihak ketiga (jika library tersebut berhenti diupdate atau mengalami bug).

Integrasi Widget dengan Fitur Lain di Android

Bayangkan sebuah widget fitness tracker. Widget ini bisa terintegrasi dengan sensor accelerometer dan gyroscope di perangkat Android. Dengan akses ke data sensor ini, widget bisa menghitung langkah kaki pengguna secara real-time dan menampilkannya di layar widget. Prosesnya melibatkan penggunaan API Android untuk mengakses data sensor, kemudian memproses data tersebut dan menampilkannya dalam format yang mudah dipahami pengguna di widget.

Sebagai contoh lain, widget yang menampilkan informasi lokasi bisa terintegrasi dengan layanan lokasi (Location Services) Android. Widget akan meminta izin akses lokasi, kemudian secara berkala mengambil data lokasi pengguna dan menampilkannya pada widget, misalnya menampilkan alamat atau koordinat GPS.

Pengujian dan Optimasi Widget

Setelah widget Android kamu rampung dibuat, jangan langsung di-publish ya, gaes! Tahap pengujian dan optimasi krusial banget untuk memastikan performa dan pengalaman pengguna yang maksimal. Bayangkan, widget kamu kece tapi lemot atau malah error? Wah, bisa-bisa malah bikin pengguna ilfeel. Makanya, ikuti langkah-langkah di bawah ini untuk bikin widget kamu siap tempur!

Langkah-langkah Pengujian Widget

Pengujian widget Android nggak cuma sekedar jalan atau nggak. Kamu perlu tes berbagai skenario, mulai dari fungsionalitas hingga performa di berbagai perangkat. Jangan sampai widget kamu cuma oke di HP flagship, eh pas di HP kentang malah error!

  • Tes Fungsionalitas: Pastikan semua fitur widget berfungsi dengan semestinya. Tes tombol, input, dan output data. Jangan lupa cek juga respon widget terhadap berbagai input pengguna.
  • Tes Kinerja: Ukur waktu loading widget, konsumsi baterai, dan penggunaan memori. Lakukan pengujian di berbagai perangkat dengan spesifikasi berbeda untuk melihat performanya.
  • Tes Kompatibilitas: Pastikan widget kompatibel dengan berbagai versi Android dan ukuran layar. Jangan sampai widget kamu cuma jalan di Android terbaru, di versi lama malah error.
  • Tes Keamanan: Periksa kerentanan keamanan widget untuk mencegah akses yang tidak sah atau penyalahgunaan data.

Optimasi Kinerja Widget

Widget yang kencang dan responsif itu penting banget untuk memberikan pengalaman pengguna yang menyenangkan. Berikut beberapa tips untuk mengoptimalkan kinerja widget kamu:

  • Minimalkan penggunaan sumber daya: Gunakan library yang efisien dan hindari penggunaan sumber daya yang berlebihan. Jangan sampai widget kamu boros baterai dan memori.
  • Optimalkan layout: Gunakan layout yang efisien dan hindari penggunaan layout yang kompleks. Layout yang sederhana akan membuat widget lebih cepat loading.
  • Gunakan threading: Gunakan threading untuk melakukan tugas-tugas yang berat di background, sehingga tidak mengganggu responsivitas widget.
  • Kompresi gambar: Gunakan gambar dengan ukuran yang optimal untuk mengurangi ukuran widget dan mempercepat loading.

Deteksi dan Perbaikan Bug

Bug itu musuh utama developer! Untungnya, ada beberapa cara untuk mendeteksi dan memperbaiki bug pada widget Android.

  • Logcat: Gunakan Logcat untuk memantau pesan log dan mendeteksi error atau exception.
  • Debugger: Gunakan debugger untuk menelusuri kode dan menemukan penyebab bug.
  • Testing framework: Gunakan testing framework seperti Espresso atau Robolectric untuk melakukan pengujian otomatis.
  • Crashlytics: Gunakan Crashlytics atau layanan pelaporan crash lainnya untuk melacak crash dan error yang terjadi di aplikasi.

Tips & Trik: Prioritaskan kesederhanaan kode. Kode yang bersih dan terstruktur lebih mudah di-debug dan di-maintain. Gunakan tools profiling untuk mengidentifikasi bagian kode yang boros sumber daya. Selalu test widget di berbagai perangkat dan kondisi jaringan.

Checklist Sebelum Publikasi

Sebelum kamu resmi meluncurkan widget Android-mu, pastikan kamu sudah melakukan checklist berikut:

  • Semua fitur berfungsi dengan baik.
  • Widget responsif dan performanya optimal.
  • Widget kompatibel dengan berbagai perangkat dan versi Android.
  • Widget aman dari kerentanan keamanan.
  • Dokumentasi widget lengkap dan mudah dipahami.
  • Semua bug telah diperbaiki.

Akhir Kata

Membuat widget Android bukan hanya sekadar menambahkan fitur, tapi juga tentang mengekspresikan kreativitas dan personalisasi pengalaman pengguna. Dengan panduan ini, kamu telah mempelajari langkah-langkah pembuatan widget, mulai dari konsep dasar hingga pengujian dan optimasi. Jangan ragu untuk bereksperimen dengan berbagai elemen UI, library, dan API untuk menciptakan widget yang unik dan bermanfaat. Selamat berkarya dan tunjukkan widget keren buatanmu!

Editors Team
Daisy Floren
Daisy Floren
admin Author

What's Your Reaction?

  • Like
    0
    Like
  • Dislike
    0
    Dislike
  • Funny
    0
    Funny
  • Angry
    0
    Angry
  • Sad
    0
    Sad
  • Wow
    0
    Wow