bab 2 persiapan pengkodingan...17 gambar 2.21. android studio project ide membuat activity 1....
TRANSCRIPT
8
BAB 2
PERSIAPAN PENGKODINGAN
9
Setelah kita membahas gambaran pengenalan android pada bab sebelumnya, pada bab ini kita akan membahas secara detail hal-hal yang kita perlukan dalam rangka membuat aplikasi Smart Dewan berbasis android. Sebelum kita lanjutkan kebagian pembuatan project, pastikan PC atau laptop kalian terinstall Android Studio dan aplikasi-aplikasi pendukung lainnya seperti :
1. Java, Android SDK & JDK 2. Android Emulator 3. XAMPP 4. Visual Studio Code 5. Chrome
Dan juga download asset gambar dan web server di link berikut : https://github.com/didikirawan153/Project-Smartdewan. download semua file di link tersebut, file tersebut digunakan ketika nanti sudah masuk pengkodingan.
Pembuatan Database
Berisi tentang langkah-langkah pembuatan database dan table yang dibutuhkan. Disini aplikasi yang digunakan adalah XAMPP, sesudah menginstal XAMPP nyalakanlah PHPmyadmin, lalu buka browser dan ketikkan di alamat localhost/phpmyadmin, sehingga muncul tampilan seperti berikut ini.
Pada menu “Databases”, silahkan masukkan nama “sekolahku”, kemudian klik “Create”.
Gambar 2.1. Menu Awal Pembuatan Database
10
Setelah membuat database baru, akan terlihat daftar tabel yang masih kosong .
Gambar 2.2. Kolom Create Tabel
A. Tabel User
Ketika telah masuk kedalam database “sekolahku”, maka kita ketikkan nama tabel beserta jumlah field yang ada pada tabel.
Tabel “user”:
Gambar 2.3. Nama tabel
Gambar 2.4. Kolom field yang harus di isi
Jika sudah mengisi nama tabel dan jumlah field dan tipe datanya klik tombol “Go”
11
Gambar 2.5. Tabel User beserta field dan tipe datanya
Lanjutkan pengerjaan database “sekolahku”, Lalu buat kembali beberapa tabel berikut ini menggunakan phpMyAdmin (lihat contoh pengerjaan pada pembuatan table user).
B. Tabel Absen
Berikut struktur yang terdapat dalam tabel “absen” untuk mengisi field yang akan digunakan:
Tabel “absen”:
Gambar 2.6. Tabel Absen beserta fieldnya
C. Tabel Bulan
Tabel “bulan”:
Gambar 2.7. Tabel Bulan beserta fieldnya
12
D. Tabel Guru
Tabel“guru”:
Gambar 2.8.Tabel Guru beserta fieldnya
E. Tabel Hari
Tabel “hari”:
Gambar 2.9. Tabel Hari beserta fieldnya
F. Tabel Jadwal
Tabel “jadwal”:
Gambar 2.10. Tabel Jadwal beserta fieldnya
13
G. Tabel Jam
Tabel “jam”:
Gambar 2.11. Tabel Jam beserta fieldnya
H. Tabel Kelas
Tabel “kelas”:
Gambar 2.12. Tabel Kelas beserta fieldnya
I. Tabel Pelajaran
Tabel “pelajaran”:
Gambar 2.13. Tabel Pelajaran beserta fieldnya
14
J. Tabel Pengumuman
Tabel “pengumuman”:
Gambar 2.14. Tabel Pengumuman beserta fieldnya
K. Tabel Sekolah
Tabel “sekolah”:
Gambar 2.15. Tabel Sekolah beserta fieldnya
L. Tabel Siswa
Tabel “siswa”:
Gambar 2.16. Tabel Siswa beserta fieldnya
15
M. Tabel Tahun
Tabel “tahun”:
Gambar 2.17. Tabel Tahun beserta fieldnya
N. Tabel Tanggal
Tabel “tanggal”:
Gambar 2.18. Tabel Tanggal beserta fieldnya
Jika semua langkah selesai tahap berikutnya membuat project
Androidnya. Atau jika tidak mau lama dalam pembuatan databasenya
silahkan import database dari file yang telah didownload, didalamnya ada
file database sekolahku.sql yang siap diimport dan digunakan diphp my
admin.
Membuat project Android
Tutorial ini menunjukkan cara membuat project Android baru dengan Android Studio dan menjelaskan beberapa file dalam project.
Membuat projek baru
1. Buka Android Studio dan pilih Start a new Android Studio
project, lalu akan muncul halaman seperti gambar 2.19. Kemudian
memilih activity, pilih saja Empty activity lalu klik next.
16
Gambar 2.19. Memilih activity, pilih saja Empty activity
2. Isikan nama project pada applicationname dan settingpackagename,
save location, language, dan minimum API level seperti gambar 2.20,
kemudian klik tombol finish.
Gambar 2.20. Konfigurasi Project Awal
3. Jika sudah membuat projek baru akan muncul tampilan seperti
gambar 2.21. Dan kemudian kita akan mulai dengan membuat
activity dan mendesain tampilannya.
17
Gambar 2.21. Android Studio Project IDE
Membuat Activity
1. Sebelum mendesain activity kita akan mulai dengan membuat activity
baru, pertama kita klik kanan pada folder Java kemudian klik new dan
pilih Activity lalu klik Empty Activity seperti gambar dibawah ini.
Gambar 2.22. Membuat Activity Baru
2. Kemudian muncul tampilan seperti gambar dibawah ini. Untuk activity yang pertama kita beri nama utamaActivity. Setting seperti gambar dibawah ini. Kemudian klik finish.
18
Gambar 2.23. Konfigurasi Activity Baru
3. Ulangi langkah tersebut untuk membuat activity lainnya. Dimana masing-masing nama activitynya adalah sebagai berikut: about, absensi, input_address, mainjadwal, detailinfo, tampil_semua_info, payment, splash, login,main_ujian. Jika sudah selesai file activitynya seperti gambar dibawah ini.
Gambar 2.24. Hasil Pembuatan Activity
Membuat Fragment
1. Seperti halnya membuat activity untuk pembuatan fragment langkah awalnya hampir sama dengan membuat activity. Yaitu pertama kita klik kanan pada folder Java kemudian klik new dan pilih Fragment lalu klik Blank Fragment seperti gambar 2.25.
19
Gambar 2.25. Pembuatan Fragment Baru
2. Kemudian muncul tampilan form baru untuk konfigurasi fragment. Untuk fragment yang pertama kita beri nama homeFragment. Jangan lupa hilangkan tanda centang pada tanda warna merah seperti gambar 2.26, kemudian klik finish.
Gambar 2.26. Konfigurasi Component Fragment Baru
3. Ulangi langkah tersebut untuk membuat fragment akun. Dimana nama fragmentnya adalah sebagai berikut: akunFragment. Jika sudah selesai file fragmentnya seperti gambar 2.27.
20
Gambar 2.27. Hasil Pembuatan Fragment
Membuat ListItem
Digunakan untuk menampilkan data list untuk pemanggilan activity jadwal dan informasi. Buatlah activity baru dengan nama list_item_jadwal dan listitem_info kemudian untuk file .xml nya isikan kodingan berikut ini:
a. Listitem_jadwal.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tablelayoutid"
android:layout_marginTop="10dp">
<TableRow
android:id="@+id/rowlay"
android:padding="5dp">
<TextView
android:id="@+id/jam"
android:layout_width="100dp"
android:layout_height="wrap_content" />
<TextView
21
android:id="@+id/mapel"
android:layout_width="100dp"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/guru"
android:layout_width="100dp"
android:layout_height="wrap_content" />
</TableRow>
</TableLayout>
</LinearLayout>
b. List_item_info.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold" />
</LinearLayout>
Untuk tahap selanjutnya kita melakukan penambahan library seperti ikon gambar maupun desain layout untuk activity. Dan juga pengaturan lainnya di manifest maupun library. Untuk gambar dan tema tambahan bisa kalian download file assetgambar.rar di link berikut : https://github.com/didikirawan153/Project-Smartdewan.
22
Menambahkan Asset ikon dan gambar
1. Arahkan kursor dan klik kiri kebagian folder res, kemudian klik kanan difolder drawable kemudian klik new – >vector asset seperti gambar dibawah ini.
Gambar 2.28. Pembuatan folder drawable
2. Kemudian langkah selanjutnya muncul tampilan Configure Vector
Asset untuk memilih jenis ikon yang akan dipakai,lalu klik Clip Art dan akan muncul berbagai pilihan ikon. Selanjutnya silahkan pilih ikon yang akan dipakai.
Gambar 2.29. Konsfigurasi Vector Asset
23
3. Berikan nama dikolom Name untuk identifikasi masing-masing ikon. Kemudian klik next dan finish. Untuk ikon-ikon yang akan kita pakai bisa diberkas yang didownload tadi. Hasilnya seperti gambar berikut.
Gambar 2.30. Hasil Pembuatan icon
4. Kemudian untuk menambahkan gambar untuk tampilan formnya bisa dicopy dari folder download tadi kemudian pastekan di folder drawable dan berikan nama pada masing-masing gambar tadi.
Gambar 2.31. Penambahangambar di folder drawable
24
Gambar 2.32. Form Penamaan dalam penambahan gambar
5. Jika sudah file didrawable siap untuk digunakan.
Gambar 2.33. Daftar File di file drawable
25
Menambahkan Library Baru Di Values
Values yaitu tempat untuk menyimpan file seperti colors (deklarasi warna yang akan kita gunakan), string (berisi deklarasi data berupa teks yang akan kita gunakan untuk komponen aplikasi), dan styles (berisi resource tentang tema seperti nama toolbar).
1. Untuk menambahkan deklarasi warna yang digunakan klik folder values kemudian klik dua kali di file colors.xml.
Gambar 2.34. File colors untuk penambahan deklarasi warna
2. Kemudian isikan kodingan di file colors.xml seperti berikut :
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#00BCD4</color>
<color name="colorPrimaryDark">#03A9F4</color>
<color name="colorAccent">#68EFAD</color>
<color name="colorCheck">#ffffff</color>
<color name="colorUncheck">#B2D7D2</color>
<color name="colorNavigationIcon">#dae9f6</color>
<color name="colorNavigationText">#ffffff</color>
<color name="lightgray">#ededed</color>
<color name="deeppurple">#7c4dff</color>
<color name="yello">#ffb300</color>
<color name="green">#00bfa5</color>
<color name="darkblue">#23283a</color>
<color name="testcolorblue">#152b38</color>
<color name="pink">#fe104d</color>
<color name="black_overlay">#66000000</color>
<color name="QRCodeWhiteColor">#ffffff</color>
<color name="QRCodeBlackColor">#000000</color>
</resources>
26
3. Kemudian membuat file resource baru difolder values dengan nama dimens, file ini digunakan untuk mengatur layout margin nanti. Langkah awalnya klik kanan pada folder values kemudian klik new lalu klik Values resource file.
Gambar 2.35. Pembuatan Library baru di values
4. Kemudian berikan nama file dimens di konfigurasinya
Gambar 2.36. Konsfigurasi nama file dimens
27
5. Kemudian isikan kodingan di file dimens.xml seperti berikut :
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
</resources>
6. Kemudian langkah berikutnya mengatur deklarasi string, klik dua kali file strings.xml kemudian isikan kodingan berikut ini :
<resources>
<string name="app_name">Kuncoro Login</string>
<string name="buku">Buku</string>
<string name="musik">Musik</string>
<string name="film">Film</string>
<string name="fragment_buku">Fragment Buku</string>
<string name="fragment_film">Fragment Film</string>
<string name="fragment_musik">Fragment Musik</string>
<string name="search">Search</string>
<string name="type_name">Type Name</string>
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank
fragment</string>
<string name="title_activity_utama">utamaActivity</string>
<string name="title_home">Home</string>
<string name="title_dashboard">Dashboard</string>
<string name="title_notifications">Notifications</string>
<string name="home">Home</string>
<string name="info">Info</string>
<string name="account">Account</string>
<string name="btn_lanjutkan">Lanjutkan</string>
<string name="hint_name">Masukkan IP address/Domain</string>
<string name="err_msg_name">Form IP address/Domain tidak boleh
kosong</string>
<string name="tentang">Tentang</string>
<string name="keluar">Keluar</string>
</resources>
7. Kemudian membuat file styles baru, sama seperti membuat file
dimens untuk membuat file styles baru tinggal isikan namanya style2 kemudian isikan kodingan berikut ini :
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme2"
parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item
name="colorAccent">@color/cardview_dark_background</item>
28
</style>
</resources>
8. Untuk file styles isikan kodingan berikut ini:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Base application theme. -->
<style name="AppTheme"
parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
9. Sehingga di folder values kita mempunyai file-file seperti gambar
2.37
Gambar 2.37. file-file difolder values
Manifes Aplikasi
Setiap aplikasi harus memiliki file AndroidManifest.xml (bernama persis seperti ini) di direktori akar. File manifes menyediakan informasi penting tentang aplikasi ke sistem Android, yang harus dimiliki sistem agar bisa menjalankan setiap kode aplikasi.
Yang dilakukan file manifes di antaranya:
a) Menamai paket Java untuk aplikasi. Nama paket berfungsi sebagai identifier unik untuk aplikasi.
b) Menjelaskan berbagai komponen aplikasi, yang menyertakan aktivitas, layanan, penerima siaran, dan penyedia materi yang membentuk aplikasi. Juga menamai kelas yang mengimplementasikan masing-masing komponen dan menerbitkan kemampuannya, seperti pesan Intent yang dapat
29
mereka tangani. Deklarasi ini menginformasikan sistem Android mengenai komponen dan kondisi yang memungkinkan peluncurannya.
c) Menentukan proses yang menjadi host komponen aplikasi.
d) Mendeklarasikan izin aplikasi yang harus dimiliki aplikasi untuk mengakses bagian yang dilindungi pada API dan berinteraksi dengan aplikasi lain. Juga mendeklarasikan izin lain yang harus dimiliki untuk berinteraksi dengan komponen aplikasi.
e) Mencantumkan daftar kelas Instrumentation yang memberikan profil dan informasi lain saat aplikasi berjalan. Deklarasi ini hanya ada di manifes saat aplikasi dibuat dan dihapus sebelum aplikasi dipublikasikan.
f) Mendeklarasikan level minimum Android API yang diperlukan aplikasi.
g) Mencantumkan daftar pustaka yang harus ditautkan aplikasi.
Menambahkan settingan dimanifest
1. Untuk menambahkan settingan di manifest klik folder manifest lalu klik dua kali file AndroidManifest.xml
Gambar 2.38. Folder manifest dalam menambah settingan
30
2. Kemudian setelah itu isikan kodingan di file manifest seperti berikut
ini :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.smartfix.smartdewan">
<uses-permission
android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission
android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<application
android:name="com.smartfix.smartdewan.app.AppController"
android:allowBackup="true"
android:icon="@drawable/logo_sd"
android:label="Smart Dewan"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".about"></activity>
<activity
android:name="com.smartfix.smartdewan.MainActivityjadwal"
android:theme="@style/AppTheme2" />
<activity
android:name="com.smartfix.smartdewan.paymentActivity" />
<activity
android:name="com.smartfix.smartdewan.detailInfoActivity" />
<activity
android:name="com.smartfix.smartdewan.TampilSemuaInfo"></activity>
<activity
android:name="com.smartfix.smartdewan.utamaActivity"
android:theme="@style/AppTheme2" />
<activity
android:name="com.smartfix.smartdewan.LoginActivity"
android:theme="@style/AppTheme2" />
<activity
android:name="com.smartfix.smartdewan.MainActivity"
android:theme="@style/AppTheme2" />
<activity
android:name="com.smartfix.smartdewan.InputAddress"
android:theme="@style/AppTheme2" />
<activity
android:name="com.smartfix.smartdewan.SplashActivity"
android:theme="@style/AppTheme2">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.smartfix.smartdewan.absensiActivity" />
<meta-data
android:name="android.s192upport.VERSION"
android:value="26.1.0" />
31
<meta-data
android:name="android.arch.lifecycle.VERSION"
android:value="27.0.0-SNAPSHOT" />
<meta-data
android:name="com.android.vending.derived.apk.id"
android:value="1" />
</application>
</manifest>
Menu
Menu adalah komponen antarmuka pengguna yang lazim dalam banyak tipe aplikasi. Untuk menyediakan pengalaman pengguna yang sudah akrab dan konsisten, Kalian harus menggunakan API Menu untuk menyajikan tindakan dan opsi lain dalam aktivitas kepada pengguna.
Mulai dengan Android 3.0 (API level 11), perangkat Android tidak perlu lagi menyediakan tombol Menutersendiri. Dengan perubahan ini, aplikasi Android harus bermigrasi dari dependensi pada panel menu 6 item biasa, dan sebagai gantinya menyediakan bilah aplikasi untuk menyajikan berbagai tindakan pengguna yang lazim.
Walaupun desain dan pengalaman pengguna untuk sebagian item menu telah berubah, semantik untuk mendefinisikan serangkaian tindakan dan opsi masih berdasarkan pada Menu API. Panduan ini menampilkan cara membuat tiga tipe dasar penyajian menu atau aksi pada semua versi Android:
1. Menu opsi dan bilah aplikasi
Menu opsi adalah kumpulan item menu utama untuk suatu aktivitas. Inilah tempat Kalian harus menempatkan tindakan yang berdampak global pada aplikasi, seperti "Cari", "Tulis email", dan "Setelan".
Lihat bagian tentang Membuat Menu Opsi.
2. Menu konteks dan mode aksi kontekstual
Menu konteks adalah menu mengambang yang muncul saat pengguna mengeklik lama pada suatu elemen. Menu ini menyediakan tindakan yang memengaruhi materi atau bingkai konteks yang dipilih.
Mode aksi kontekstual menampilkan item aksi yang memengaruhi materi yang dipilih dalam bilah di bagian atas layar dan memungkinkan pengguna memilih beberapa item sekaligus..
32
3. Menu munculan
Menu munculan menampilkan daftar item secara vertikal yang dipasang pada tampilan yang memanggil menu. Ini cocok untuk menyediakan kelebihan tindakan yang terkait dengan materi tertentu atau untuk menyediakan opsi bagi bagian kedua dari suatu perintah. Tindakan di menu munculan tidak boleh memengaruhi secara langsung materi yang bersangkutan—yang diperuntukkan bagi tindakan kontekstual. Melainkan, menu munculan adalah untuk tindakan tambahan yang terkait dengan region materi dalam aktivitas kalian.
Mendefinisikan Menu dalam XML
Untuk semua tipe menu, Android menyediakan sebuah format XML standar untuk mendefinisikan item menu. Sebagai ganti membangun menu dalam kode aktivitas, kalian harus mendefinisikan menu dan semua itemnya dalam sumber daya menu XML. kalian kemudian bisa memekarkan sumber daya menu (memuatnya sebagai objek Menu) dalam aktivitas atau fragmen.
Menggunakan sumber daya menu adalah praktik yang baik karena beberapa alasan:
a) Memvisualisasikan struktur menu dalam XML menjadi lebih mudah.
b) Cara ini memisahkan materi untuk menu dari kode perilaku aplikasi kalian.
c) Cara ini memungkinkan kalian membuat konfigurasi menu alternatif untuk berbagai versi platform, ukuran layar, dan konfigurasi lainnya dengan memanfaatkan kerangka kerja sumber daya aplikasi.
Untuk mendefinisikan menu, buatlah sebuah file XML dalam direktori res/menu/ proyek dan bangun menu dengan elemen-elemen berikut:
<menu>
Mendefinisikan Menu, yang merupakan sebuah kontainer untuk item menu. Elemen <menu> harus menjadi simpul akar untuk file dan bisa menampung salah satu atau beberapa dari elemen <item> dan <group>.
33
<item>
Membuat MenuItem, yang mewakili satu item menu. Elemen ini bisa berisi elemen <menu> tersarang guna untuk membuat submenu.
<group>
Kontainer opsional tak terlihat untuk elemen-elemen <item>.
Kontainer ini memungkinkan kalian mengelompokkan item menu untuk berbagi properti seperti status aktif dan visibilitas. Untuk informasi selengkapnya, lihat bagian tentang Membuat Grup Menu.
Berikut ini adalah membuat menu bernama main_menujadwal.xml :
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_search"
android:icon="@android:drawable/ic_menu_search"
android:title="@string/search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always" />
</menu>
Selanjutnya membuat menu bernama menu_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/tentang"
app:showAsAction="withText" />
<item
android:id="@+id/action_exit"
android:orderInCategory="100"
android:title="@string/keluar"
app:showAsAction="withText" />
</menu>
Selanjutnya membuat menu bernama menunavigasi.xml :
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/home_menu"
android:title="@string/home"
android:icon="@drawable/ic_home"/>
<item
34
android:id="@+id/info_menu"
android:title="@string/info"
android:icon="@drawable/ic_info"/>
<item
android:id="@+id/account_menu"
android:title="@string/account"
android:icon="@drawable/ic_account"/>
</menu>
Terakhir buatlah menu bernama navigasijadwal.xml :
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/senin"
android:title="Senin"
/>
<item
android:id="@+id/selasa"
android:title="Selasa"
/>
<item
android:id="@+id/rabu"
android:title="Rabu"
/>
<item
android:id="@+id/kamis"
android:title="Kamis"
/>
<item
android:id="@+id/jumat"
android:title="Jumat"
/>
</menu>
Animasi
Dalam beberapa situasi, gambar harus dianimasikan di layar. Ini berguna jika kalian ingin menampilkan animasi pemuatan khusus yang terdiri dari beberapa gambar, atau jika kalian ingin satu ikon berubah menjadi yang lain setelah tindakan pengguna. Android menyediakan beberapa opsi untuk membuat animasi drawable. Opsi pertama adalah menggunakan Animasi Drawable. Ini memungkinkan kalian menentukan beberapa file statis yang dapat ditampilkan yang akan ditampilkan satu per satu untuk membuat
35
animasi. Opsi kedua adalah menggunakan Animated Vector Drawable, yang memungkinkan kalian menganimasikan sifat-sifat drawable vektor.
Untuk membuat file pendukung animasi pertama klik kanan folder res kemudian klik new dan pilih New resource file seperti gambar dibawah ini
Gambar 2.39. Folder res dalam pembuatan file baru
Kemudian isikan File name dan setting seperti gambar dibawah ini. Setelah itu klik ok dan lanjutkan dengan pengkodingan.
Gambar 2.40. Settingan awal file atg
36
Kemudian lakukan langkah seperti diatas, dimana masing-masing file diberi nama atg, atgroket, atgthree, atgtwo,packageimg dan isikan masing-masing file dengan sintak dibawah ini.
a. File atg.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="800"
android:startOffset="150"
android:interpolator="@android:anim/accelerate_interpolator"
>
<translate
android:fromYDelta="200"
android:toYDelta="0"
/>
<alpha
android:fromAlpha="0.0"
android:toAlpha="1.0"
/>
</set>
b. File atgrocket.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:startOffset="250"
android:interpolator="@android:anim/accelerate_interpolator"
>
<translate
android:fromYDelta="0"
android:toYDelta="-1000"
/>
</set>
c. File atgthree.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="800"
android:startOffset="800"
android:interpolator="@android:anim/accelerate_interpolator"
>
<translate
android:fromYDelta="200"
android:toYDelta="0"
/>
<alpha
android:fromAlpha="0.0"
android:toAlpha="1.0"
37
/>
</set>
d. File packageimg.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="800"
android:startOffset="500"
android:interpolator="@android:anim/accelerate_interpolator"
>
<translate
android:fromYDelta="200"
android:toYDelta="0"
/>
<alpha
android:fromAlpha="0.0"
android:toAlpha="1.0"
/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="800"
android:interpolator="@android:anim/bounce_interpolator"
>
<scale
android:fromYScale="0.0"
android:fromXScale="0.0"
android:toYScale="1.0"
android:toXScale="1.0"
android:pivotY="50%"
android:pivotX="50%"
/>
<alpha
android:fromAlpha="0.0"
android:toAlpha="1.0"
/>
</set>
38
Menambahkan Font
1. Langkah pertama buatlah folder font untuk penyimpanan library font, dengan cara yaitu klik kanan folder res kemudian klik new dan pilih New resource file seperti gambar dibawah ini
Gambar 2.41. Pembuatan folder font
2. Kemudian export font dari folder assetgambar.rar yang sudah didowmload dengan cara copykan font ke folder font dengan hasil akhir seperti gambar dibawah ini.
Gambar 2.42. File font dalam folder font
Menambahkan java class baru
1. Untuk mendukung ke server database dan juga untuk mendukung relasi dengan file aktiviti satu dengan yang lainnya, maka kita buat file java class baru dengan nama adapter, app, model, konfigurasi, DetectConection, progressDialogModel, requestHandle.
2. Langkah pertama yaitu membuat folder baru untuk adapter, app, dan model. Untuk membuatnya klik kanan pada package kemudian klik
39
new kemudian klik android resource directory seperti gambar dibawah ini dan berikan nama file foldernya adapter.
Gambar 2.43. Pembuatan Folder baru untuk adapter, app, dan model
3. Kemudian buatlah class baru difolder adapter dengan nama class adapter.java
Gambar 2.44. Pembuatan java class baru di adapter
40
Gambar 2.45. Memberikan nama file java class
4. Kemudian masukan sintak pada file java class adapter dengan kodingan dibawah ini :
package com.smartfix.smartdewan.adapter;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.smartfix.smartdewan.R;
import com.smartfix.smartdewan.model.DataModel;
import java.util.List;
public class Adapter extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;
private List<DataModel>item;
public Adapter(Activity activity, List<DataModel> item) {
this.activity = activity;
this.item = item;
}
@Override
public int getCount() {
return item.size();
}
@Override
public Object getItem(int location) {
41
return item.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup
parent) {
if (inflater == null)
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView = inflater.inflate(R.layout.list_item,
null);
TextView txt_nama = (TextView)
convertView.findViewById(R.id.mapel);
TextView txt_guru = (TextView)
convertView.findViewById(R.id.guru);
TextView txt_jam = (TextView)
convertView.findViewById(R.id.jam);
txt_nama.setText(item.get(position).getNama());
txt_guru.setText(item.get(position).getGuru());
txt_jam.setText(item.get(position).getId());
return convertView;
}
}
5. Kemudian buatlah file java class untuk yang lainnya dengan langkah-langkah seperti diatas. Dengan masing-masing sintak sebagai berikut :
a. File AppController.java
package com.smartfix.smartdewan.app;
import android.app.Application;
import android.text.TextUtils;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;
public class AppController extends Application {
public static final String TAG =
AppController.class.getSimpleName();
private RequestQueue mRequestQueue;
private static AppController mInstance;
@Override
42
public void onCreate() {
super.onCreate();
mInstance = this;
}
public static synchronized AppController getInstance() {
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
}
return mRequestQueue;
}
public <T>void addToRequestQueue(Request<T> req, String tag) {
req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
getRequestQueue().add(req);
}
public <T>void addToRequestQueue(Request<T> req) {
req.setTag(TAG);
getRequestQueue().add(req);
}
public void cancelPendingRequests(Object tag) {
if (mRequestQueue != null) {
mRequestQueue.cancelAll(tag);
}
}
}
b. File konfigurasi.java
package com.smartfix.smartdewan;
public class konfigurasi {
//Dibawah ini merupakan Pengalamatan dimana Lokasi Skrip CRUD
PHP disimpan
//Pada tutorial Kali ini, karena kita membuat localhost maka
alamatnya tertuju ke IP komputer
//dimana File PHP tersebut berada
//PENTING! JANGAN LUPA GANTI IP SESUAI DENGAN IP KOMPUTER DIMANA
DATA PHP BERADA
public static final String URL =
"http://192.168.100.36/SmartDewan/ServerLink/";
public static final String URL_GET_ALL =
"http://192.168.100.36/SmartDewan/ServerLink/view_info/tampilSemuaIn
fo.php";
public static final String URL_GET_EMP =
"http://192.168.100.36/SmartDewan/ServerLink/view_info/tampilDetailI
nfo.php?id=";
public static final String url_data =
"http://192.168.100.36/SmartDewan/ServerLink/data.php";
public static final String url_cari =
43
"http://192.168.100.36/SmartDewan/ServerLink/cari_data.php";
//JSON Tags
public static final String TAG_JSON_ARRAY="result";
public static final String TAG_DIMULAI= "dimulai";
public static final String TAG_ID = "id";
public static final String TAG_NAMA = "name";
public static final String TAG_DESKRIPSI = "desk";
public static final String TAG_SELESAI = "selesai";
//ID pengumuman
public static final String EMP_ID = "emp_id";
}
c. File RequestHandler.java
package com.smartfix.smartdewan;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import javax.net.ssl.HttpsURLConnection;
public class RequestHandler {
//Metode Untuk mengirim httpPostRequest
//Metode ini mengambil 2 Argumen
//Metode Pertama adalah URL dari Skrip yang digunakan untuk
mengirimkan permintaan
//Yang lainnya adalah HashMap dengan nilai pasangan nama yang
berisi data yang akan dikirim dengan permintaan
public String sendPostRequest(String requestURL,
HashMap<String, String>
postDataParams) {
//Membuat URL
URL url;
//Objek StringBuilder untuk menyimpan pesan diambil dari
server
StringBuilder sb = new StringBuilder();
try {
//Inisialisasi URL
url = new URL(requestURL);
//Membuat Koneksi HttpURLConnection
HttpURLConnection conn = (HttpURLConnection)
url.openConnection();
//Konfigurasi koneksi
conn.setReadTimeout(15000);
44
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
//Membuat Keluaran Stream
OutputStream os = conn.getOutputStream();
//Menulis Parameter Untuk Permintaan
//Kita menggunakan metode getPostDataString yang
didefinisikan di bawah ini
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(getPostDataString(postDataParams));
writer.flush();
writer.close();
os.close();
int responseCode = conn.getResponseCode();
if (responseCode == HttpsURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(new
InputStreamReader(conn.getInputStream()));
sb = new StringBuilder();
String response;
//Reading server response
while ((response = br.readLine()) != null){
sb.append(response);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
public String sendGetRequest(String requestURL){
StringBuilder sb =new StringBuilder();
try {
URL url = new URL(requestURL);
HttpURLConnection con = (HttpURLConnection)
url.openConnection();
BufferedReader bufferedReader = new BufferedReader(new
InputStreamReader(con.getInputStream()));
String s;
while((s=bufferedReader.readLine())!=null){
sb.append(s+"\n");
}
}catch(Exception e){
}
return sb.toString();
}
public String sendGetRequestParam(String requestURL, String id){
StringBuilder sb =new StringBuilder();
try {
URL url = new URL(requestURL+id);
HttpURLConnection con = (HttpURLConnection)
url.openConnection();
45
BufferedReader bufferedReader = new BufferedReader(new
InputStreamReader(con.getInputStream()));
String s;
while((s=bufferedReader.readLine())!=null){
sb.append(s+"\n");
}
}catch(Exception e){
}
return sb.toString();
}
private String getPostDataString(HashMap<String, String> params)
throws UnsupportedEncodingException {
StringBuilder result = new StringBuilder();
boolean first = true;
for (Map.Entry<String, String> entry : params.entrySet()) {
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(entry.getKey(), "UTF-
8"));
result.append("=");
result.append(URLEncoder.encode(entry.getValue(), "UTF-
8"));
}
return result.toString();
}
}
d. File DataModel.java
package com.smartfix.smartdewan.model;
public class DataModel {
private String id, nama, guru;
public DataModel() {
}
public DataModel(String id, String nama, String guru) {
this.id = id;
this.nama = nama;
this.nama = guru;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNama() {
46
return nama;
}
public void setNama(String nama) {
this.nama = nama;
}
public String getGuru() {
return guru;
}
public void setGuru(String guru) {
this.guru = guru;
}
}
e. File ProgressDialogModel.java
package com.smartfix.smartdewan;
import android.app.ProgressDialog;
import android.content.Context;
public class progressDialogModel {
static ProgressDialog progressDialog;
public static void pdMenyiapkanDataLogin(Context context){
progressDialog=new ProgressDialog(context,
R.style.AppCompatAlertDialogStyle);
progressDialog.setMessage("Menyiapkan Data....");
progressDialog.setTitle("Silahkan Tunggu");
progressDialog.show();
}
public static void hideProgressDialog(){
if (progressDialog != null) {
progressDialog.dismiss();
progressDialog = null;
}
}
}
47
6. Kemudian untuk file akhirnya seperti gambar berikut ini :
Gambar 2.46. Hasil dari Penambahan Java class yang dibuat
48
Pengaturan Layout XML
Layout mendefinisikan struktur visual untuk antarmuka pengguna, seperti UI sebuah aktivitas atau widget aplikasi. Kalian dapat mendeklarasikan layout dengan dua cara:
1. Deklarasikan elemen UI dalam XML. Android menyediakan sebuah kosakata XML sederhana yang sesuai dengan kelas dan subkelas View, seperti halnya untuk widget dan layout.
2. Buat instance elemen layout saat waktu proses. Aplikasi Kalian bisa membuat objek View dan ViewGroup (dan memanipulasi propertinya) lewat program.
Kerangka kerja Android memberi Kalian fleksibilitas untuk menggunakan salah satu atau kedua metode ini guna mendeklarasikan dan mengelola UI aplikasi Kalian. Misalnya, Kalian bisa mendeklarasikan layout default aplikasi Kalian dalam XML, termasuk elemen-elemen layar yang akan muncul di dalamnya dan di propertinya. Kalian nanti bisa menambahkan kode dalam aplikasi yang akan memodifikasi status objek layar, termasuk yang dideklarasikan dalam XML, saat waktu proses.
Untuk desain layout activity dan fragment kita menggunakan kodingan .xml buka masing-masing file difolder layout kemudian masukan kodingan pada file tersebut. Dimana masing masing sintak untuk disain layoutnya seperti berikut ini :
1. Activity_absensi.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_bulan"
xmlns:app="http://schemas.android.com/apk/res-auto">
<View
android:id="@+id/view2"
android:layout_width="match_parent"
android:layout_height="170dp"
android:background="@drawable/i_bulan"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
49
<TextView
android:visibility="gone"
android:id="@+id/txt_tanggal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:text="tanggal"
android:textColor="#FFFFFF"
android:textSize="18dip"
android:textStyle="bold" />
<TextView
android:visibility="gone"
android:id="@+id/txt_nis"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="30dip"
android:text="nis"
android:textColor="#FFFFFF"
android:textSize="16dip"
android:textStyle="bold" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="46dp"
android:orientation="vertical">
<ImageView
android:id="@+id/btabseni"
android:layout_width="75dp"
android:layout_height="150dp"
android:layout_below="@+id/view2"
android:layout_gravity="center_horizontal"
android:layout_marginTop="400dp"
android:src="@drawable/icon_rocket"
app:layout_constraintTop_toBottomOf="@+id/view2" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tekan Roket Untuk Kehadiran."
android:textStyle="bold"
android:textSize="15dp"
android:textColor="#FFF"
android:layout_gravity="center_horizontal"/>
</LinearLayout>
</ScrollView>
50
</RelativeLayout>
Gambar 2.47. Hasil Desain Layout activity_absensi.xml
2. activity_input_address.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/main1"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:orientation="vertical">
<android.support.design.widget.TextInputLayout
android:id="@+id/input_layout_address"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/zxing_custom_viewfinder_laser"
android:layout_alignParentBottom="true"
android:layout_marginBottom="400px">
<EditText
android:id="@+id/input_address"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_name"
android:maxLines="1"
android:singleLine="true"
android:textColor="@color/zxing_custom_viewfinder_laser"
/>
51
</android.support.design.widget.TextInputLayout>
<Button
android:id="@+id/btn_lanjut"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="200px"
android:background="@color/zxing_custom_viewfinder_laser"
android:text="@string/btn_lanjutkan"
android:textColor="@android:color/white" />
</RelativeLayout>
</android.support.design.widget.CoordinatorLayout>
Gambar 2.48. Hasil Desain Layout activity_input_address.xml
3. activity_main_ujian.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/tab_appbar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
52
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/Theme.AppCompat.Light"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:id="@+id/swipe_refresh_layout">
<WebView
android:id="@+id/activity_main_webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.v4.widget.SwipeRefreshLayout>
</android.support.design.widget.CoordinatorLayout>
Gambar 2.49. Hasil Desain Layout activity_main_ujian.xml
4. activity_mainjadwal.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/swipe_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.smartfix.smartdewan.MainActivityjadwal">
53
<android.support.design.widget.BottomNavigationView
android:id="@+id/bn_mainjadwal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:background="@color/colorPrimary"
app:itemTextColor="@drawable/statebnve"
app:menu="@menu/navigasijadwal" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/txtkelas" />
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent" android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
>
<TextView
android:id="@+id/TextView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="5dp"
android:layout_marginTop="45dp"
android:text="INFO JADWAL PELAJARAN"
android:textSize="18dip"
android:textStyle="bold" />
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tablelayoutid"
android:layout_marginTop="10dp">
<TableRow
android:id="@+id/rowlay"
android:background="@android:color/holo_blue_light"
android:padding="5dp">
<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Jam Ke" />
<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Nama Mapel" />
54
<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Nama Guru" />
</TableRow>
</TableLayout>
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@null" />
<TextView
android:id="@+id/txt_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textColor="@color/cardview_light_background"
android:layout_marginTop="10dp"
/>
</LinearLayout>
</RelativeLayout>
Gambar 2.50. Hasil Desain Layout activity_mainjadwal.xml
5. activity_payment.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
55
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_gravity="center"
tools:context="com.smartfix.smartdewan.paymentActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/gradient">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="123456" />
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginTop="10dp"/>
<TextView
android:id="@+id/TextView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tunjukan pada kasir untuk melakukan pembayaran"
android:textStyle="bold"
android:layout_marginTop="10dp"/>
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Smart Dewan V.0.1"
android:textStyle="bold"
android:layout_marginTop="30dp"/>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
56
Gambar 2.51. Hasil Desain Layout activity_payment.xml
6. activity_splash.xml <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SplashActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/splash"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:orientation="vertical">
<ImageView
android:id="@+id/splashscreen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
</RelativeLayout>
57
Gambar 2.52. Hasil Desain Layout activity_splash.xml
7. activity_tampil_semua_info.xml <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_height="match_parent"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
tools:context="com.smartfix.smartdewan.TampilSemuaInfo">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18dip"
android:textStyle="bold"
android:text="Info Terbaru"
android:layout_gravity="center_horizontal"/>
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/listView" />
</LinearLayout>
58
Gambar 2.53. Hasil Desain Layout activity_tampil_semua_info.xml
8. activity_utama.xml <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.smartfix.smartdewan.utama">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior" >
<FrameLayout
android:id="@+id/fl_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</ScrollView>
<android.support.design.widget.BottomNavigationView
android:id="@+id/bn_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
59
android:background="@color/colorPrimary"
app:itemIconTint="@drawable/statebnve"
app:itemTextColor="@drawable/statebnve"
app:menu="@menu/menunavigasi" />
</RelativeLayout>
Gambar 2.54. Hasil Desain Layout activity_utama.xml
9. fragment_akun.xml <RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="800dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.smartfix.smartdewan.akunFragment">
<!-- TODO: Update blank fragment layout -->
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_alignParentTop="true"
android:layout_marginStart="10dp"
android:layout_marginTop="23dp"
android:layout_marginEnd="10dp"
android:clickable="true"
android:foreground="?android:attr/selectableItemBackground">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
60
android:orientation="vertical">
<ImageView
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="11dp"
android:layout_marginBottom="23dp"
android:background="@drawable/cerclebackgroundbiru"
android:padding="10dp"
android:src="@drawable/icon_account" />
<TextView
android:id="@+id/nama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="99dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="73dp"
android:text="Nama"
android:textStyle="bold" />
<TextView
android:id="@+id/nis"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="94dp"
android:layout_marginTop="76dp"
android:gravity="center"
android:padding="5dp"
android:text="NIS"
android:textColor="@android:color/darker_gray" />
<TextView
android:id="@+id/kelas"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="94dp"
android:layout_marginBottom="20dp"
android:gravity="center"
android:padding="5dp"
android:text="Kelas"
android:textColor="@android:color/darker_gray" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_alignParentBottom="true"
android:layout_marginEnd="0dp"
android:layout_marginBottom="109dp"
android:background="@color/lightgray" />
<TextView
android:layout_width="wrap_content"
61
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="121dp"
android:gravity="center"
android:padding="5dp"
android:text="SMK DEWANTARA 2 CIKARANG"
android:textColor="@android:color/darker_gray" />
</RelativeLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_alignParentTop="true"
android:layout_marginStart="10dp"
android:layout_marginTop="185dp"
android:layout_marginEnd="10dp"
android:clickable="true"
android:foreground="?android:attr/selectableItemBackground">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="14dp"
android:layout_marginBottom="166dp"
android:src="@drawable/ic_tempatlhr" />
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="14dp"
android:layout_marginBottom="116dp"
android:src="@drawable/ic_tgllhr" />
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="14dp"
android:layout_marginBottom="66dp"
android:src="@drawable/ic_kelamin" />
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="14dp"
android:layout_marginBottom="16dp"
android:src="@drawable/ic_agama" />
<TextView
62
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="51dp"
android:layout_marginBottom="163dp"
android:padding="5dp"
android:text="Tempat Lahir"
android:textColor="@android:color/darker_gray" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="51dp"
android:layout_marginBottom="113dp"
android:padding="5dp"
android:text="Tanggal Lahir"
android:textColor="@android:color/darker_gray" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="51dp"
android:layout_marginBottom="63dp"
android:padding="5dp"
android:text="Jenis Kelamin"
android:textColor="@android:color/darker_gray" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="51dp"
android:layout_marginBottom="13dp"
android:padding="5dp"
android:text="Agama"
android:textColor="@android:color/darker_gray" />
<TextView
android:id="@+id/tpt_lhr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginEnd="14dp"
android:layout_marginBottom="163dp"
android:padding="5dp"
android:text="Tempat Lahir"
android:textColor="@android:color/darker_gray" />
<TextView
android:id="@+id/tgl_lhr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginEnd="14dp"
android:layout_marginBottom="113dp"
android:padding="5dp"
63
android:text="Tanggal Lahir"
android:textColor="@android:color/darker_gray" />
<TextView
android:id="@+id/jkelamin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginEnd="14dp"
android:layout_marginBottom="63dp"
android:padding="5dp"
android:text="Jenis Kelamin"
android:textColor="@android:color/darker_gray" />
<TextView
android:id="@+id/agama"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginEnd="14dp"
android:layout_marginBottom="13dp"
android:padding="5dp"
android:text="Agama"
android:textColor="@android:color/darker_gray" />
</RelativeLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_alignParentTop="true"
android:layout_marginStart="10dp"
android:layout_marginTop="405dp"
android:layout_marginEnd="10dp"
android:clickable="true"
android:foreground="?android:attr/selectableItemBackground">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="14dp"
android:layout_marginBottom="166dp"
android:src="@drawable/ic_tempatlhr" />
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="14dp"
64
android:layout_marginBottom="116dp"
android:src="@drawable/ic_phone" />
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="14dp"
android:layout_marginBottom="66dp"
android:src="@drawable/ic_ayah" />
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="14dp"
android:layout_marginBottom="16dp"
android:src="@drawable/ic_ibu" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="51dp"
android:layout_marginBottom="163dp"
android:padding="5dp"
android:text="Alamat"
android:textColor="@android:color/darker_gray" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="51dp"
android:layout_marginBottom="113dp"
android:padding="5dp"
android:text="No Handphone"
android:textColor="@android:color/darker_gray" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="51dp"
android:layout_marginBottom="63dp"
android:padding="5dp"
android:text="Nama Ayah"
android:textColor="@android:color/darker_gray" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="51dp"
android:layout_marginBottom="13dp"
65
android:padding="5dp"
android:text="Nama Ibu"
android:textColor="@android:color/darker_gray" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginEnd="14dp"
android:layout_marginBottom="163dp"
android:padding="5dp"
android:text="alamat"
android:id="@+id/alamat"
android:textColor="@android:color/darker_gray" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginEnd="14dp"
android:layout_marginBottom="113dp"
android:padding="5dp"
android:text="no_hp"
android:id="@+id/no_hp"
android:textColor="@android:color/darker_gray" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginEnd="14dp"
android:layout_marginBottom="63dp"
android:padding="5dp"
android:text="nama_ayah"
android:id="@+id/nm_ayah"
android:textColor="@android:color/darker_gray" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginEnd="14dp"
android:layout_marginBottom="13dp"
android:padding="5dp"
android:text="nama_ibu"
android:id="@+id/nm_ibu"
android:textColor="@android:color/darker_gray" />
</RelativeLayout>
</android.support.v7.widget.CardView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginStart="10dp"
android:layout_marginTop="625dp"
66
android:layout_marginEnd="10dp"
android:clickable="true"
android:foreground="?android:attr/selectableItemBackground">
<Button
android:id="@+id/buttonlgt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#FFF"
android:background="@drawable/bgbtnguide"
android:text="Logout" />
</RelativeLayout>
</RelativeLayout>
Gambar 2.55. Hasil Desain Layout fragment_akun.xml
10. fragment_home.xml <android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="700dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.smartfix.smartdewan.homeutama">
<!-- TODO: Update blank fragment layout -->
67
<View
android:layout_width="match_parent"
android:layout_height="230dp"
android:background="@drawable/bgheader2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="match_parent"
android:layout_height="182dp"
android:layout_marginStart="16dp"
android:layout_marginTop="112dp"
android:layout_marginEnd="16dp"
android:background="@drawable/bgmenus"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/mainmenus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="12dp"
android:fontFamily="@font/mr"
android:text="Menu Utama"
android:textColor="#818181"
android:textSize="16sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="4">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageButton
android:id="@+id/absensi"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginBottom="8dp"
android:background="@drawable/cerclebackgroundkuning"
android:src="@drawable/icon_absen" />
<TextView
android:id="@+id/review"
68
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/mm"
android:text="Absensi"
android:textColor="#172646"
android:textSize="16sp" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageButton
android:id="@+id/jadwalfix"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginBottom="8dp"
android:background="@drawable/cerclebackgroundbiru"
android:src="@drawable/icon_jadwal" />
<TextView
android:id="@+id/network"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/mm"
android:text="Jadwal"
android:textColor="#172646"
android:textSize="16sp" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageButton
android:id="@+id/ujian"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginBottom="8dp"
android:background="@drawable/cerclebackgroundkuning"
android:src="@drawable/icon_ujian" />
<TextView
android:id="@+id/plugins"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/mm"
android:text="Ujian"
android:textColor="#172646"
android:textSize="16sp" />
</LinearLayout>
69
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageButton
android:id="@+id/bayar"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginBottom="8dp"
android:background="@drawable/cerclebackgroundbiru"
android:src="@drawable/icon_payment" />
<TextView
android:id="@+id/myapps"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/mm"
android:text="Payment"
android:textColor="#172646"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
<TextView
android:id="@+id/tukar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFF"/>
<TextView
android:id="@+id/txtkelas"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFF"/>
</LinearLayout>
<ImageView
android:id="@+id/imageView3"
android:layout_width="154dp"
android:layout_height="154dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="12dp"
android:src="@drawable/icon_menu"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout2" />
<TextView
android:id="@+id/pagetitle"
70
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="12dp"
android:text="Smart Dewan"
android:fontFamily="@font/mm"
android:textColor="#172646"
android:textSize="22sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView3" />
<TextView
android:id="@+id/pagesubtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:fontFamily="@font/ml"
android:layout_marginTop="8dp"
android:text="We give easly \nfor attendance."
android:textAlignment="center"
android:textColor="#A1A1A1"
android:textSize="16sp"
android:lineSpacingExtra="6dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/pagetitle" />
<Button
android:id="@+id/btnguide"
android:layout_width="194dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:textSize="20sp"
android:textColor="#FFF"
android:fontFamily="@font/mm"
android:text="About Me"
android:textAllCaps="false"
android:background="@drawable/bgbtnguide"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/pagesubtitle" />
</android.support.constraint.ConstraintLayout>
71
Gambar 2.56. Hasil Desain Layout fragment_home.xml
11. Activity_detail_info.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent" android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:paddingBottom="16dp" tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Judul Pengumuman" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editTextJudul" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Isi Pengumuman" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editTextDeskripsi" />
<TextView
android:layout_width="wrap_content"
72
android:layout_height="wrap_content"
android:text="Berlaku Mulai" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editTextDimulai" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Selesai" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editTextSelesai" />
</LinearLayout>
Gambar 2.57. Hasil Desain Layout activity_detail_info.xml
12. Activity_login.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
73
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:orientation="vertical"
android:background="@drawable/bg_about">
<LinearLayout
android:id="@+id/loginlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView2"
android:layout_centerHorizontal="true"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_above="@+id/txt_username"
android:layout_marginBottom="20dp"
app:srcCompat="@drawable/logo_sd_t"
android:layout_gravity="center_horizontal"/>
<TextView
android:id="@+id/textView2"
android:layout_above="@+id/txt_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Welcome To Smart Dewan"
android:textColor="#FFFFFF"
android:textSize="25sp"
android:textStyle="bold"
android:layout_gravity="center_horizontal"/>
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/txt_username"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="45dp"
android:text="your place for login"
android:textColor="#FFFFFF"
android:textSize="19sp" />
<EditText
android:id="@+id/txt_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="10dp"
android:hint="Username"
android:inputType="textEmailAddress"
android:singleLine="true" />
<EditText
android:id="@+id/txt_password"
74
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="10dp"
android:hint="Password"
android:password="true"
android:singleLine="true" />
<Button
android:id="@+id/btn_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="20dp"
android:background="#00555555"
android:text="Login"
android:textColor="#fff"
android:textStyle="bold" />
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
Gambar 2.58. Hasil Desain Layout Activity_login.xml
13. activity_about.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
75
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.smartfix.smartdewan.aboutActivity">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_about2"/>
</android.support.constraint.ConstraintLayout>
Gambar 2.59. Hasil Desain Layout activity_about.xml
76
Pengkodingan dengan sintak java
Ketika kalian membuat sebuah activity, Android Studio otomatis akan membuat beberapa baris kode pada file XML dan file Java. File java di Android Studio secara default di namakan dengan MainActivity.java.
Java adalah bahasa pemrograman yang berorientasi objek (OOP) dan dapat dijalankan pada berbagai platform sistem operasi. Perkembangan Java tidak hanya terfokus pada satu sistem operasi, tetapi dikembangkan untuk berbagai sistem operasi dan bersifat open source.
Untuk mengintregasikan antara layout dengan server ataupun antar activity lainnya disini menggunakan pengkodingan java. Buka masing-masing file java kemudian isikan masing-masing sintaknya seperti berikut ini:
1. File absensiActivity.java
package com.smartfix.smartdewan;
import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.smartfix.smartdewan.app.AppController;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
public class absensiActivity extends AppCompatActivity {
ProgressDialog pDialog;
77
TextView txt_tanggal, txt_nis;
Intent intent;
ImageView btabsen;
int success,hari, tahun, bulan;
ConnectivityManager conMgr;
Animation atgroket, atgtwo, atgthree;
private String url = konfigurasi.URL + "register.php";
private static final String TAG =
absensiActivity.class.getSimpleName();
private static final String TAG_SUCCESS = "success";
private static final String TAG_MESSAGE = "message";
String tag_json_obj = "json_obj_req";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_absensi);
Bundle b = getIntent().getExtras();
conMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
{
if (conMgr.getActiveNetworkInfo() != null
&&conMgr.getActiveNetworkInfo().isAvailable()
&&conMgr.getActiveNetworkInfo().isConnected()) {
} else {
Toast.makeText(getApplicationContext(), "No Internet
Connection",
Toast.LENGTH_LONG).show();
}
}
atgroket = AnimationUtils.loadAnimation(this, R.anim.atgroket);
atgtwo = AnimationUtils.loadAnimation(this, R.anim.atgtwo);
atgthree = AnimationUtils.loadAnimation(this, R.anim.atgthree);
Calendar calendar = Calendar.getInstance();
hari = calendar.get(Calendar.DAY_OF_MONTH);
bulan = calendar.get(Calendar.MONTH);
tahun = calendar.get(Calendar.YEAR);
String akhirtanggal = hari + "-" + bulan + "-" + tahun;
txt_tanggal = (TextView) findViewById(R.id.txt_tanggal);
txt_nis = (TextView) findViewById(R.id.txt_nis);
btabsen = (ImageView) findViewById(R.id.btabseni);
txt_tanggal.setText(akhirtanggal);
txt_nis.setText(b.getCharSequence("nis"));
btabsen.setOnClickListener(new View.OnClickListener() {
@Override
78
public void onClick(View v) {
// TODO Auto-generated method stub
String tanggal = txt_tanggal.getText().toString();
String nis = txt_nis.getText().toString();
if (conMgr.getActiveNetworkInfo() != null
&&conMgr.getActiveNetworkInfo().isAvailable()
&&conMgr.getActiveNetworkInfo().isConnected()) {
checkRegister(tanggal, nis);
btabsen.startAnimation(atgroket);
} else {
Toast.makeText(getApplicationContext(), "No
Internet Connection", Toast.LENGTH_SHORT).show();
}
}
});
}
private void checkRegister(final String tanggal, final String nis) {
pDialog = new ProgressDialog(this);
pDialog.setCancelable(false);
pDialog.setMessage("absensiActivity ...");
showDialog();
StringRequest strReq = new
StringRequest(Request.Method.POST, url, new
Response.Listener<String>() {
@SuppressLint("LongLogTag")
@Override
public void onResponse(String response) {
Log.e(TAG, "absensiActivity Response: " +
response.toString());
hideDialog();
try {
JSONObject jObj = new JSONObject(response);
success = jObj.getInt(TAG_SUCCESS);
// Check for error node in json
if (success == 1) {
Log.e("Successfully absensiActivity!",
jObj.toString());
Toast.makeText(getApplicationContext(),
jObj.getString(TAG_MESSAGE),
Toast.LENGTH_LONG).show();
txt_tanggal.setText("");
txt_nis.setText("");
} if (success == 2) {
Log.e("Successfully absensiActivity!",
jObj.toString());
Toast.makeText(getApplicationContext(),
jObj.getString(TAG_MESSAGE),
79
Toast.LENGTH_LONG).show();
txt_tanggal.setText("");
txt_nis.setText("");
} else {
Toast.makeText(getApplicationContext(),
jObj.getString(TAG_MESSAGE),
Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
// JSON error
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Login Error: " + error.getMessage());
Toast.makeText(getApplicationContext(),
error.getMessage(),
Toast.LENGTH_LONG).show();
hideDialog();
}
}) {
@Override
protected Map<String, String> getParams() {
// Posting parameters to login url
Map<String, String> params = new HashMap<String, String>();
params.put("tanggal", tanggal);
params.put("nis", nis);
return params;
}
};
// Adding request to request queue
AppController.getInstance().addToRequestQueue(strReq, tag_json_obj);
}
private void showDialog() {
if (!pDialog.isShowing())
pDialog.show();
}
private void hideDialog() {
if (pDialog.isShowing())
pDialog.dismiss();
}
}
80
2. File inputAddress.java
package com.smartfix.smartdewan;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.design.widget.TextInputLayout;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class InputAddress extends Activity {
private Button btnLanjut;
private EditText inputAddress;
private TextInputLayout inputLayoutAddress;
private String s = "online";
private class MyTextWatcher implements TextWatcher {
private View view;
private MyTextWatcher(View view) {
this.view = view;
}
public void beforeTextChanged(CharSequence charSequence, int i, int
i1, int i2) {
}
public void onTextChanged(CharSequence charSequence, int i, int i1,
int i2) {
}
public void afterTextChanged(Editable editable) {
switch (this.view.getId()) {
case R.id.input_address /*2131230805*/:
InputAddress.this.validateAddress();
return;
default:
return;
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_input_address);
try {
81
s = getIntent().getStringExtra("valid");
if (s.equals("offline")){
Toast.makeText(InputAddress.this, "Url tidak
valid/offline", Toast.LENGTH_LONG).show();
}
} catch (Exception e){
e.printStackTrace();
}
this.inputLayoutAddress = findViewById(R.id.input_layout_address);
this.inputAddress = findViewById(R.id.input_address);
this.inputAddress.setOnFocusChangeListener(new
View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
InputAddress.this.inputAddress.setSelection(InputAddress.this.inputA
ddress.getText().length());
}
}
});
this.btnLanjut = findViewById(R.id.btn_lanjut);
this.inputAddress.addTextChangedListener(new
MyTextWatcher(this.inputAddress));
this.btnLanjut.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
InputAddress.this.submitForm();
}
});
if (!isNetworkAvailable()) {
new
AlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_alert
).setTitle("Peringatan").setMessage("Tidak ada
koneksi").setPositiveButton("Close", new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
InputAddress.this.finish();
System.exit(0);
}
}).show();
}
final SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(this);
this.inputAddress.setText(prefs.getString("autoSave",
BuildConfig.FLAVOR));
this.inputAddress.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int
count) {
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void afterTextChanged(Editable s) {
prefs.edit().putString("autoSave", s.toString()).commit();
}
});
this.inputAddress.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == 0) {
switch (keyCode) {
82
case R.styleable.Toolbar_titleMarginEnd /*23*/:
case R.styleable.AppCompatTheme_editTextColor /*66*/:
InputAddress.this.submitForm();
return true;
}
}
return false;
}
});
}
private void submitForm() {
if (validateAddress()) {
Intent intent = new Intent(getBaseContext(),
MainActivity.class);
intent.putExtra("url",
this.inputAddress.getText().toString());
startActivity(intent);
finish();
}
}
private boolean validateAddress() {
if (this.inputAddress.getText().toString().trim().isEmpty()) {
this.inputLayoutAddress.setError(getString(R.string.err_msg_name));
requestFocus(this.inputAddress);
return false;
}
this.inputLayoutAddress.setErrorEnabled(false);
return true;
}
private void requestFocus(View view) {
if (view.requestFocus()) {
getWindow().setSoftInputMode(5);
}
}
public boolean isNetworkAvailable() {
NetworkInfo networkInfo = ((ConnectivityManager)
getSystemService(CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
if (networkInfo == null || !networkInfo.isConnected()) {
return false;
}
return true;
}
public void onBackPressed() {
AlertDialog.Builder alertDialogBuilder = new
AlertDialog.Builder(this);
alertDialogBuilder.setTitle("Keluar");
alertDialogBuilder.setMessage("Yakin keluar dari aplikasi
?").setCancelable(false).setPositiveButton("Ya", new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
System.exit(0);
}
}).setNegativeButton("Tidak", new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
83
}
});
alertDialogBuilder.create().show();
}
}
3. File MainActivity.java
package com.smartfix.smartdewan;
import android.app.AlertDialog;
import android.app.KeyguardManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.WindowManager;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import java.util.Timer;
import java.util.TimerTask;
import static
com.smartfix.smartdewan.DetectConnection.isNetworkStatusAvialable;
public class MainActivity extends AppCompatActivity {
MyTimerTask myTimerTask;
Timer timer;
private SwipeRefreshLayout swipeRefreshLayout;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE);
final String s = getIntent().getStringExtra("url");
final WebView view = findViewById(R.id.activity_main_webview);
view.getSettings().setJavaScriptEnabled(true);
view.getSettings().setUseWideViewPort(true);
view.getSettings().setLoadWithOverviewMode(true);
view.getSettings().setSupportZoom(true);
view.getSettings().setBuiltInZoomControls(true);
view.getSettings().setDisplayZoomControls(false);
84
view.setWebViewClient(new ExamWebView());
view.loadUrl("http://" + s);
swipeRefreshLayout = findViewById(R.id.swipe_refresh_layout);
swipeRefreshLayout.setColorSchemeColors(Color.RED, Color.GREEN,
Color.BLUE, Color.CYAN);
swipeRefreshLayout.setOnRefreshListener(new
SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
if(isNetworkStatusAvialable (MainActivity.this)) {
view.reload();
view.getSettings().setDomStorageEnabled(true);
} else {
Toast.makeText(MainActivity.this, "Url tidak
valid/offline", Toast.LENGTH_LONG).show();
view.loadDataWithBaseURL(null, "<html><body><img width=\"100%\"
height=\"100%\"
src=\"file:///android_res/drawable/offline.png\"></body></html>",
"text/html", "UTF-8", null);
progressDialogModel.hideProgressDialog();
swipeRefreshLayout.setRefreshing(false);
Intent i = new Intent(getBaseContext(),
InputAddress.class);
startActivity(i);
finish();
}
}
});
}
class MyTimerTask extends TimerTask {
@Override
public void run() {
bringApplicationToFront();
}
}
private class ExamWebView extends WebViewClient {
private ExamWebView() {
}
public void onPageStarted(WebView view, String url, Bitmap favicon)
{
super.onPageStarted(view, url, favicon);
}
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(isNetworkStatusAvialable (MainActivity.this)) {
view.loadUrl(url);
progressDialogModel.pdMenyiapkkaliantaLogin(MainActivity.this);
} else {
Toast.makeText(MainActivity.this, "Url tidak
valid/offline", Toast.LENGTH_LONG).show();
view.loadDataWithBaseURL(null, "<html><body><img
width=\"100%\" height=\"100%\"
src=\"file:///android_res/drawable/offline.png\"></body></html>",
"text/html", "UTF-8", null);
progressDialogModel.hideProgressDialog();
swipeRefreshLayout.setRefreshing(false);
Intent i = new Intent(getBaseContext(),
85
InputAddress.class);
startActivity(i);
finish();
}
return true;
}
public void onPageFinished(WebView view, String url) {
progressDialogModel.hideProgressDialog();
swipeRefreshLayout.setRefreshing(false);
super.onPageFinished(view, url);
}
public void onReceivedError(WebView view, int errorCode, String
description, String failingUrl) {
swipeRefreshLayout.setRefreshing(false);
Intent i = new Intent(getBaseContext(),
InputAddress.class);
i.putExtra("valid", "offline");
startActivity(i);
System.exit(0);
}
}
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
new MyDialogFragment().show(getSupportFragmentManager(),
"MyDialogFragmentTag");
}
if (id == R.id.action_exit) {
System.exit(0);
}
return super.onOptionsItemSelected(item);
}
public void onBackPressed() {
AlertDialog.Builder alertDialogBuilder = new
AlertDialog.Builder(this);
alertDialogBuilder.setTitle("Keluar");
alertDialogBuilder.setMessage("Yakin keluar dari aplikasi
?").setCancelable(false).setPositiveButton("Ya", new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
System.exit(0);
}
}).setNegativeButton("Tidak", new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
alertDialogBuilder.create().show();
}
@Override
86
protected void onResume() {
super.onResume();
if (timer != null) {
timer.cancel();
timer = null;
}
}
@Override
protected void onPause() {
if (timer == null) {
myTimerTask = new MyTimerTask();
timer = new Timer();
timer.schedule(myTimerTask, 100, 100);
}
super.onPause();
}
private void bringApplicationToFront() {
KeyguardManager myKeyManager = (KeyguardManager)
getSystemService(Context.KEYGUARD_SERVICE);
if (myKeyManager.inKeyguardRestrictedInputMode())
return;
Log.d("TAG", "====Bringging Application to Front====");
Intent notificationIntent = new Intent(this,
MainActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent =
PendingIntent.getActivity(this, 0, notificationIntent, 0);
try {
pendingIntent.send();
} catch (PendingIntent.CanceledException e) {
e.printStackTrace();
}
}
}
4. File MainActivityJadwal.java
package com.smartfix.smartdewan;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.MenuItem;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.StringRequest;
87
import com.smartfix.smartdewan.adapter.Adapter;
import com.smartfix.smartdewan.app.AppController;
import com.smartfix.smartdewan.model.DataModel;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivityjadwal extends AppCompatActivity implements
BottomNavigationView.OnNavigationItemSelectedListener {
ProgressDialog pDialog;
List<DataModel>listData = new ArrayList<DataModel>();
Adapter adapter;
SwipeRefreshLayout swipe;
ListView list_view;
TextView textkelas;
/* 10.0.2.2 adalah IP Address localhost EMULATOR ANDROID STUDIO,
Ganti IP Address tersebut dengan IP Laptop Apabila di RUN di HP.
HP dan Laptop harus 1 jaringan */
public static final String url_data =
"http://192.168.100.36/kuncoro_search_view/data.php";
public static final String url_cari =
"http://192.168.100.36/kuncoro_search_view/cari_data.php";
private static final String TAG =
MainActivityjadwal.class.getSimpleName();
public static final String TAG_ID = "id";
public static final String TAG_NAMA = "nama";
public static final String TAG_GURU = "guru";
public static final String TAG_RESULTS = "results";
public static final String TAG_MESSAGE = "message";
public static final String TAG_VALUE = "value";
String tag_json_obj = "json_obj_req";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mainjadwal);
Bundle b = getIntent().getExtras();
textkelas =(TextView) findViewById(R.id.txtkelas);
textkelas.setText(b.getCharSequence("kls"));
list_view = (ListView) findViewById(R.id.list_view);
adapter = new Adapter(MainActivityjadwal.this, listData);
list_view.setAdapter(adapter);
String keyword = "Senin";
String kelas = textkelas.getText().toString();
cariData(keyword , kelas);
88
BottomNavigationView bottomNavigationView =
findViewById(R.id.bn_mainjadwal);
// beri listener pada saat item/menu bottomnavigation terpilih
bottomNavigationView.setOnNavigationItemSelectedListener(this);
}
private void callData() {
listData.clear();
adapter.notifyDataSetChanged();
swipe.setRefreshing(true);
// Creating volley request obj
JsonArrayRequest jArr = new JsonArrayRequest(url_data, new
Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.e(TAG, response.toString());
// Parsing json
for (int i = 0; i < response.length(); i++) {
try {
JSONObject obj = response.getJSONObject(i);
DataModel item = new DataModel();
item.setId(obj.getString(TAG_ID));
item.setNama(obj.getString(TAG_NAMA));
item.setGuru(obj.getString(TAG_GURU));
listData.add(item);
} catch (JSONException e) {
e.printStackTrace();
}
}
// notifying list adapter about data changes
// so that it renders the list view with updated
data
adapter.notifyDataSetChanged();
swipe.setRefreshing(false);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.e(TAG, "Error: " + error.getMessage());
Toast.makeText(MainActivityjadwal.this,
error.getMessage(), Toast.LENGTH_LONG).show();
swipe.setRefreshing(false);
}
});
// Adding request to request queue
AppController.getInstance().addToRequestQueue(jArr);
}
89
private void cariData(final String keyword, final String kelas) {
pDialog = new ProgressDialog(MainActivityjadwal.this);
pDialog.setCancelable(false);
pDialog.setMessage("Loading...");
pDialog.show();
StringRequest strReq = new
StringRequest(Request.Method.POST, url_cari, new
Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("Response: ", response.toString());
try {
JSONObject jObj = new JSONObject(response);
int value = jObj.getInt(TAG_VALUE);
if (value == 1) {
listData.clear();
adapter.notifyDataSetChanged();
String getObject =
jObj.getString(TAG_RESULTS);
JSONArray jsonArray = new
JSONArray(getObject);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject obj =
jsonArray.getJSONObject(i);
DataModel data = new DataModel();
data.setId(obj.getString(TAG_ID));
data.setNama(obj.getString(TAG_NAMA));
data.setGuru(obj.getString(TAG_GURU));
listData.add(data);
}
} else {
listData.clear();
Toast.makeText(getApplicationContext(),
jObj.getString(TAG_MESSAGE), Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
// JSON error
e.printStackTrace();
}
adapter.notifyDataSetChanged();
pDialog.dismiss();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.e(TAG, "Error: " + error.getMessage());
Toast.makeText(getApplicationContext(),
90
error.getMessage(), Toast.LENGTH_SHORT).show();
pDialog.dismiss();
}
}) {
@Override
protected Map<String, String> getParams() {
// Posting parameters to login url
Map<String, String> params = new HashMap<String, String>();
params.put("keyword", keyword);
params.put("kelas", kelas);
return params;
}
};
AppController.getInstance().addToRequestQueue(strReq,
tag_json_obj);
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
String kelas = textkelas.getText().toString();;
switch (item.getItemId()){
case R.id.senin:
String keyword = "Senin";
cariData(keyword,kelas);
break;
case R.id.selasa:
keyword = "Selasa";
cariData(keyword,kelas);
break;
case R.id.rabu:
keyword = "Rabu";
cariData(keyword,kelas);
break;
case R.id.kamis:
keyword = "Kamis";
cariData(keyword,kelas);
break;
case R.id.jumat:
keyword = "Jumat";
cariData(keyword,kelas);
break;
}
return true;
}
}
5. File paymentActivity.java
package com.smartfix.smartdewan;
import android.content.SharedPreferences;
91
import android.graphics.Bitmap;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
public class paymentActivity extends AppCompatActivity {
ImageView imageView;
TextView textView, txt_id1;
String EditTextValue ;
String id1;
SharedPreferences sharedpreferences;
Thread thread ;
public final static int QRcodeWidth = 500 ;
Bitmap bitmap ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_payment);
Bundle b = getIntent().getExtras();
imageView = (ImageView)findViewById(R.id.imageView);
textView = (TextView) findViewById(R.id.textview);
textView.setText(b.getCharSequence("nis"));
EditTextValue = textView.getText().toString();
try {
bitmap = TextToImageEncode(EditTextValue);
imageView.setImageBitmap(bitmap);
} catch (WriterException e) {
e.printStackTrace();
}
}
Bitmap TextToImageEncode(String Value) throws WriterException {
BitMatrix bitMatrix;
try {
bitMatrix = new MultiFormatWriter().encode(
Value,
BarcodeFormat.DATA_MATRIX.QR_CODE,
QRcodeWidth, QRcodeWidth, null
);
} catch (IllegalArgumentException Illegalargumentexception)
{
92
return null;
}
int bitMatrixWidth = bitMatrix.getWidth();
int bitMatrixHeight = bitMatrix.getHeight();
int[] pixels = new int[bitMatrixWidth * bitMatrixHeight];
for (int y = 0; y < bitMatrixHeight; y++) {
int offset = y * bitMatrixWidth;
for (int x = 0; x < bitMatrixWidth; x++) {
pixels[offset + x] = bitMatrix.get(x, y) ?
getResources().getColor(R.color.QRCodeBlackColor):getResources().get
Color(R.color.QRCodeWhiteColor);
}
}
Bitmap bitmap = Bitmap.createBitmap(bitMatrixWidth,
bitMatrixHeight, Bitmap.Config.ARGB_4444);
bitmap.setPixels(pixels, 0, 500, 0, 0, bitMatrixWidth,
bitMatrixHeight);
return bitmap;
}
}
6. File SplashActivity.java
package com.smartfix.smartdewan;
import android.support.v7.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
int SPLASH_DISPLAY_LENGTH = 3000;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(SplashActivity.this,
Login.class);
startActivity(intent);
finish();
}
}, SPLASH_DISPLAY_LENGTH);
}
93
protected void onPause() {
super.onPause();
finish();
}
}
7. File detailInfoActivity.java
package com.smartfix.smartdewan;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
public class TampilInfo extends AppCompatActivity implements
View.OnClickListener{
private EditText editTextId;
private EditText editTextName;
private EditText editTextDesg;
private EditText editTextSalary;
private Button buttonUpdate;
private Button buttonDelete;
private String id;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tampil_info);
Intent intent = getIntent();
id = intent.getStringExtra(konfigurasi.EMP_ID);
editTextId = (EditText) findViewById(R.id.editTextJudul);
editTextName = (EditText) findViewById(R.id.editTextDeskripsi);
editTextDesg = (EditText) findViewById(R.id.editTextDimulai);
editTextSalary = (EditText) findViewById(R.id.editTextSelesai);
94
getEmployee();
}
private void getEmployee(){
class GetEmployee extends AsyncTask<Void,Void,String>{
ProgressDialog loading;
@Override
protected void onPreExecute() {
super.onPreExecute();
loading =
ProgressDialog.show(TampilInfo.this,"Mendownload...","Wait...",false
,false);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
loading.dismiss();
showEmployee(s);
}
@Override
protected String doInBackground(Void... params) {
RequestHandler rh = new RequestHandler();
String s =
rh.sendGetRequestParam(konfigurasi.URL_GET_EMP,id);
return s;
}
}
GetEmployee ge = new GetEmployee();
ge.execute();
}
private void showEmployee(String json){
try {
JSONObject jsonObject = new JSONObject(json);
JSONArray result =
jsonObject.getJSONArray(konfigurasi.TAG_JSON_ARRAY);
JSONObject c = result.getJSONObject(0);
String judul = c.getString(konfigurasi.TAG_NAMA);
String deskripsi =
c.getString(konfigurasi.TAG_DESKRIPSI);
String dimulai = c.getString(konfigurasi.TAG_DIMULAI);
String selesai = c.getString(konfigurasi.TAG_SELESAI);
editTextId.setText(judul);
editTextName.setText(deskripsi);
editTextDesg.setText(dimulai);
editTextSalary.setText(selesai);
} catch (JSONException e) {
e.printStackTrace();
}
}
95
@Override
public void onClick(View v) {
}
}
8. File Tampilsemuainfo.java
package com.smartfix.smartdewan;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
public class TampilSemuaInfo extends AppCompatActivity implements
ListView.OnItemClickListener{
private ListView listView;
private String JSON_STRING;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tampil_semua_info);
listView = (ListView) findViewById(R.id.listView);
listView.setOnItemClickListener(this);
getJSON();
}
private void getJSON(){
class GetJSON extends AsyncTask<Void,Void,String>{
ProgressDialog loading;
@Override
96
protected void onPreExecute() {
super.onPreExecute();
loading = ProgressDialog.show(TampilSemuaInfo.this,"Mengambil
Data","Mohon Tunggu...",false,false);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
loading.dismiss();
JSON_STRING = s;
showEmployee();
}
@Override
protected String doInBackground(Void... params) {
RequestHandler rh = new RequestHandler();
String s =
rh.sendGetRequest(konfigurasi.URL_GET_ALL);
return s;
}
}
GetJSON gj = new GetJSON();
gj.execute();
}
private void showEmployee(){
JSONObject jsonObject = null;
ArrayList<HashMap<String,String>> list = new
ArrayList<HashMap<String, String>>();
try {
jsonObject = new JSONObject(JSON_STRING);
JSONArray result =
jsonObject.getJSONArray(konfigurasi.TAG_JSON_ARRAY);
for(int i = 0; i<result.length(); i++){
JSONObject jo = result.getJSONObject(i);
String id = jo.getString(konfigurasi.TAG_ID);
String dimulai=
jo.getString(konfigurasi.TAG_DIMULAI);
String name = jo.getString(konfigurasi.TAG_NAMA);
HashMap<String,String> employees = new HashMap<>();
employees.put(konfigurasi.TAG_ID,id);
employees.put(konfigurasi.TAG_DIMULAI,dimulai);
employees.put(konfigurasi.TAG_NAMA,name);
list.add(employees);
}
} catch (JSONException e) {
e.printStackTrace();
}
ListAdapter adapter = new SimpleAdapter(
TampilSemuaInfo.this, list, R.layout.list_item_info,
new String[]{konfigurasi.TAG_ID,konfigurasi.TAG_NAMA},
new int[]{R.id.id, R.id.name});
listView.setAdapter(adapter);
}
97
@Override
public void onItemClick(AdapterView<?> parent, View view, int
position, long id) {
Intent intent = new Intent(this, TampilInfo.class);
HashMap<String,String> map
=(HashMap)parent.getItemAtPosition(position);
String empId = map.get(konfigurasi.TAG_ID).toString();
intent.putExtra(konfigurasi.EMP_ID,empId);
startActivity(intent);
}
}
9. File utamaActivity.java
package com.smartfix.smartdewan;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import android.widget.ScrollView;
public class utamaActivity extends AppCompatActivity implements
BottomNavigationView.OnNavigationItemSelectedListener {
ScrollView scroll;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_utama);
// kita set default nya Home Fragment
loadFragment(new homeFragment());
// inisialisasi BottomNavigaionView
BottomNavigationView bottomNavigationView =
findViewById(R.id.bn_main);
// beri listener pada saat item/menu bottomnavigation
terpilih
bottomNavigationView.setOnNavigationItemSelectedListener(this);
}
private boolean loadFragment(Fragment fragment){
if (fragment != null) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.fl_container, fragment)
.commit();
return true;
}
return false;
}
98
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem
menuItem) {
Fragment fragment = null;
switch (menuItem.getItemId()){
case R.id.home_menu:
fragment = new homeFragment();
break;
case R.id.info_menu:
Intent intent = new
Intent(this,TampilSemuaInfo.class);
startActivity(intent);
break;
case R.id.account_menu:
fragment = new akunFragment();
break;
}
return loadFragment(fragment);
}
}
10. File akunFragment.java
package com.smartfix.smartdewan;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
/**
* A simple {@link Fragment} subclass.
*/
public class akunFragment extends Fragment {
Button btn_logout;
TextView kelas, txt_id1, txt_username1, tpt_lhr, tgl_lhr, jkel,
agama, alamat, nohp, nmibu,nmayah;
String str_kelas, id1, username1, str_tpt_lhr, str_tgl_lhr,
str_jkel, str_agama, str_alamat, str_nohp, str_nmibu,str_nmayah;
SharedPreferences sharedpreferences;
public static final String TAG_NIS = "id";
public static final String TAG_NAMA = "username";
public static final String TAG_TPT_LHR = "tpt_lahir";
public static final String TAG_TGL_LHR = "tgl_lahir";
public static final String TAG_JKEL = "j_kel";
public static final String TAG_AGAMA = "agama";
public static final String TAG_ALAMAT = "alamat";
99
public static final String TAG_NO_HP = "no_hp";
public static final String TAG_NAMA_IBU = "nm_ibu";
public static final String TAG_NAMA_AYAH = "nm_ayah";
public static final String TAG_KELAS = "kelas";
public akunFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup
container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_akun, container,
false);
txt_id1 = (TextView) view.findViewById(R.id.nis);
txt_username1 = (TextView) view.findViewById(R.id.nama);
tpt_lhr = (TextView) view.findViewById(R.id.tpt_lhr);
tgl_lhr = (TextView) view.findViewById(R.id.tgl_lhr);
agama = (TextView) view.findViewById(R.id.agama);
jkel = (TextView) view.findViewById(R.id.jkelamin);
alamat = (TextView) view.findViewById(R.id.alamat);
nohp = (TextView) view.findViewById(R.id.no_hp);
nmayah = (TextView) view.findViewById(R.id.nm_ayah);
nmibu = (TextView) view.findViewById(R.id.nm_ibu);
btn_logout = (Button) view.findViewById(R.id.buttonlgt);
kelas = (TextView) view.findViewById(R.id.kelas);
sharedpreferences =
getActivity().getSharedPreferences(Login.my_shared_preferences,
Context.MODE_PRIVATE);
id1 = getActivity().getIntent().getStringExtra(TAG_NIS);
username1 = getActivity().getIntent().getStringExtra(TAG_NAMA);
str_tpt_lhr = getActivity().getIntent().getStringExtra(TAG_TPT_LHR);
str_tgl_lhr = getActivity().getIntent().getStringExtra(TAG_TGL_LHR);
str_jkel = getActivity().getIntent().getStringExtra(TAG_JKEL);
str_agama = getActivity().getIntent().getStringExtra(TAG_AGAMA);
str_alamat = getActivity().getIntent().getStringExtra(TAG_ALAMAT);
str_nohp = getActivity().getIntent().getStringExtra(TAG_NO_HP);
str_nmayah =
getActivity().getIntent().getStringExtra(TAG_NAMA_AYAH);
str_nmibu = getActivity().getIntent().getStringExtra(TAG_NAMA_IBU);
str_kelas = getActivity().getIntent().getStringExtra(TAG_KELAS);
txt_id1.setText(id1);
txt_username1.setText(username1);
tpt_lhr.setText(str_tpt_lhr);
tgl_lhr.setText(str_tgl_lhr);
agama.setText(str_agama);
jkel.setText(str_jkel);
alamat.setText(str_alamat);
nohp.setText(str_nohp);
nmayah.setText(str_nmayah);
nmibu.setText(str_nmibu);
kelas.setText(str_kelas);
100
btn_logout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// update login session ke FALSE dan mengosongkan nilai id dan
username
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(Login.session_status, false);
editor.putString(TAG_NIS, null);
editor.putString(TAG_NAMA, null);
editor.commit();
Intent intent = new Intent(getActivity(),
Login.class);
getActivity().finish();
startActivity(intent);
}
});
return view;
}
}
11. File homeFragment.java
package com.smartfix.smartdewan;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
public class homeutama extends Fragment {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
TextView nameuser, walletuser, review, network, plugins, myapps,
mainmenus,
pagetitle, pagesubtitle;
ImageButton bayar,ujian,jadwal,absensi;
101
TextView txt_id1,txt_id2;
String id1,kelas;
SharedPreferences sharedpreferences;
public static final String TAG_NIS1 = "id";
public static final String TAG_KELAS = "kelas";
Button btnguide;
Animation atg, atgtwo, atgthree;
ImageView imageView3;
public homeutama() {
// Required empty public constructor
}
// TODO: Rename and change types and number of parameters
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup
container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_homeutama, container,
false);
txt_id1 = (TextView) view.findViewById(R.id.tukar);
txt_id2 = (TextView) view.findViewById(R.id.txtkelas);
sharedpreferences =
getActivity().getSharedPreferences(Login.my_shared_preferences,
Context.MODE_PRIVATE);
id1 = getActivity().getIntent().getStringExtra(TAG_NIS1);
kelas = getActivity().getIntent().getStringExtra(TAG_KELAS);
txt_id1.setText(id1);
txt_id2.setText(kelas);
bayar = (ImageButton) view.findViewById(R.id.bayar);
ujian = (ImageButton) view.findViewById(R.id.ujian);
absensi = (ImageButton) view.findViewById(R.id.absensi);
jadwal = (ImageButton) view.findViewById(R.id.jadwalfix);
atg = AnimationUtils.loadAnimation(getActivity(), R.anim.atg);
atgtwo = AnimationUtils.loadAnimation(getActivity(), R.anim.atgtwo);
atgthree = AnimationUtils.loadAnimation(getActivity(),
R.anim.atgthree);
review = view.findViewById(R.id.review);
network = view.findViewById(R.id.network);
plugins = view.findViewById(R.id.plugins);
myapps = view.findViewById(R.id.myapps);
mainmenus = view.findViewById(R.id.mainmenus);
pagetitle = view.findViewById(R.id.pagetitle);
pagesubtitle = view.findViewById(R.id.pagesubtitle);
102
btnguide = view.findViewById(R.id.btnguide);
imageView3 = view.findViewById(R.id.imageView3);
// pass an animation
imageView3.startAnimation(atg);
pagetitle.startAnimation(atgtwo);
pagesubtitle.startAnimation(atgtwo);
btnguide.startAnimation(atgthree);
bayar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
Intent intent = new Intent(getActivity(),
paymentActivity.class);
Bundle b = new Bundle();
b.putString("nis", txt_id1.getText().toString());
intent.putExtras(b);
getActivity().startActivity(intent);
}
});
jadwal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
Intent intent = new Intent(getActivity(),
MainActivityjadwal.class);
Bundle b = new Bundle();
b.putString("kls", txt_id2.getText().toString());
intent.putExtras(b);
getActivity().startActivity(intent);
}
});
ujian.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
Intent intent = new Intent(getActivity(),
InputAddress.class);
getActivity().startActivity(intent);
}
});
absensi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
Intent intent = new Intent(getActivity(),
absensiActivity.class);
Bundle b = new Bundle();
b.putString("nis", txt_id1.getText().toString());
intent.putExtras(b);
getActivity().startActivity(intent);
103
}
});
return view;
}
}
12. File LoginActivity.java
package com.smartfix.smartdewan;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.smartfix.smartdewan.app.AppController;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
public class Login extends AppCompatActivity {
ProgressDialog pDialog;
Button btn_login;
EditText txt_username, txt_password;
Intent intent;
int success;
ConnectivityManager conMgr;
private String url = konfigurasi.URL + "login.php";
private static final String TAG = Login.class.getSimpleName();
private static final String TAG_SUCCESS = "success";
private static final String TAG_MESSAGE = "message";
public final static String TAG_USERNAME = "username";
public final static String TAG_ID = "id";
public static final String TAG_TPT_LHR = "tpt_lahir";
public static final String TAG_TGL_LHR = "tgl_lahir";
104
public static final String TAG_JKEL = "j_kel";
public static final String TAG_AGAMA = "agama";
public static final String TAG_ALAMAT = "alamat";
public static final String TAG_NO_HP = "no_hp";
public static final String TAG_NAMA_IBU = "nm_ibu";
public static final String TAG_NAMA_AYAH = "nm_ayah";
public static final String TAG_KELAS = "kelas";
String tag_json_obj = "json_obj_req";
SharedPreferences sharedpreferences;
Boolean session = false;
String id, kelas, username, tpt_lahir, tgl_lahir, j_kel, agama,
alamat, no_hp, nm_ayah, nm_ibu;
public static final String my_shared_preferences =
"my_shared_preferences";
public static final String session_status = "session_status";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
conMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
{
if (conMgr.getActiveNetworkInfo() != null
&&conMgr.getActiveNetworkInfo().isAvailable()
&&conMgr.getActiveNetworkInfo().isConnected()) {
} else {
Toast.makeText(getApplicationContext(), "No Internet
Connection",
Toast.LENGTH_LONG).show();
}
}
btn_login = (Button) findViewById(R.id.btn_login);
txt_username = (EditText) findViewById(R.id.txt_username);
txt_password = (EditText) findViewById(R.id.txt_password);
// Cek session login jika TRUE maka langsung buka MainActivity
sharedpreferences = getSharedPreferences(my_shared_preferences,
Context.MODE_PRIVATE);
session = sharedpreferences.getBoolean(session_status, false);
id = sharedpreferences.getString(TAG_ID, null);
username = sharedpreferences.getString(TAG_USERNAME, null);
tpt_lahir = sharedpreferences.getString(TAG_TPT_LHR, null);
tgl_lahir = sharedpreferences.getString(TAG_TGL_LHR, null);
j_kel = sharedpreferences.getString(TAG_JKEL, null);
agama = sharedpreferences.getString(TAG_AGAMA, null);
alamat = sharedpreferences.getString(TAG_ALAMAT, null);
no_hp = sharedpreferences.getString(TAG_NO_HP, null);
nm_ayah = sharedpreferences.getString(TAG_NAMA_AYAH, null);
nm_ibu = sharedpreferences.getString(TAG_NAMA_IBU, null);
kelas = sharedpreferences.getString(TAG_KELAS, null);
if (session) {
Intent intent = new Intent(Login.this, utama.class);
intent.putExtra(TAG_ID, id);
intent.putExtra(TAG_USERNAME, username);
intent.putExtra(TAG_TPT_LHR, tpt_lahir);
105
intent.putExtra(TAG_TGL_LHR, tgl_lahir);
intent.putExtra(TAG_JKEL, j_kel);
intent.putExtra(TAG_AGAMA, agama);
intent.putExtra(TAG_ALAMAT, alamat);
intent.putExtra(TAG_NO_HP, no_hp);
intent.putExtra(TAG_NAMA_AYAH, nm_ayah);
intent.putExtra(TAG_NAMA_IBU, nm_ibu);
intent.putExtra(TAG_KELAS, kelas);
finish();
startActivity(intent);
}
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String username = txt_username.getText().toString();
String password = txt_password.getText().toString();
// mengecek kolom yang kosong
if (username.trim().length() >0 && password.trim().length() >0) {
if (conMgr.getActiveNetworkInfo() != null
&&conMgr.getActiveNetworkInfo().isAvailable()
&&conMgr.getActiveNetworkInfo().isConnected()) {
checkLogin(username, password);
} else {
Toast.makeText(getApplicationContext() ,"No
Internet Connection", Toast.LENGTH_LONG).show();
}
} else {
// Prompt user to enter credentials
Toast.makeText(getApplicationContext() ,"Kolom tidak boleh kosong",
Toast.LENGTH_LONG).show();
}
}
});
}
private void checkLogin(final String username, final String
password) {
pDialog = new ProgressDialog(this);
pDialog.setCancelable(false);
pDialog.setMessage("Logging in ...");
showDialog();
StringRequest strReq = new
StringRequest(Request.Method.POST, url, new
Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e(TAG, "Login Response: " +
response.toString());
hideDialog();
try {
JSONObject jObj = new JSONObject(response);
106
success = jObj.getInt(TAG_SUCCESS);
// Check for error node in json
if (success == 1) {
String username =
jObj.getString(TAG_USERNAME);
String id = jObj.getString(TAG_ID);
String tpt_lahir =
jObj.getString(TAG_TPT_LHR);
String tgl_lahir =
jObj.getString(TAG_TGL_LHR);
String j_kel = jObj.getString(TAG_JKEL);
String agama = jObj.getString(TAG_AGAMA);
String alamat = jObj.getString(TAG_ALAMAT);
String no_hp = jObj.getString(TAG_NO_HP);
String nm_ayah =
jObj.getString(TAG_NAMA_AYAH);
String nm_ibu =
jObj.getString(TAG_NAMA_IBU);
String kelas = jObj.getString(TAG_KELAS);
Log.e("Successfully Login!",
jObj.toString());
Toast.makeText(getApplicationContext(),
jObj.getString(TAG_MESSAGE), Toast.LENGTH_LONG).show();
// menyimpan login ke session
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(session_status, true);
editor.putString(TAG_ID, id);
editor.putString(TAG_USERNAME, username);
editor.putString(TAG_TPT_LHR, tpt_lahir);
editor.putString(TAG_TGL_LHR, tgl_lahir);
editor.putString(TAG_JKEL, j_kel);
editor.putString(TAG_AGAMA, agama);
editor.putString(TAG_ALAMAT, alamat);
editor.putString(TAG_NO_HP, no_hp);
editor.putString(TAG_NAMA_AYAH, nm_ayah);
editor.putString(TAG_NAMA_IBU, nm_ibu);
editor.putString(TAG_KELAS, kelas);
editor.commit();
// Memanggil main activity
Intent intent = new Intent(Login.this, utama.class);
intent.putExtra(TAG_ID, id);
intent.putExtra(TAG_USERNAME, username);
intent.putExtra(TAG_TPT_LHR, tpt_lahir);
intent.putExtra(TAG_TGL_LHR, tgl_lahir);
intent.putExtra(TAG_JKEL, j_kel);
intent.putExtra(TAG_AGAMA, agama);
intent.putExtra(TAG_ALAMAT, alamat);
intent.putExtra(TAG_NO_HP, no_hp);
intent.putExtra(TAG_NAMA_AYAH, nm_ayah);
intent.putExtra(TAG_NAMA_IBU, nm_ibu);
intent.putExtra(TAG_KELAS, kelas);
finish();
startActivity(intent);
} else {
Toast.makeText(getApplicationContext(),
107
jObj.getString(TAG_MESSAGE),
Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
// JSON error
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Login Error: " + error.getMessage());
Toast.makeText(getApplicationContext(),
error.getMessage(),
Toast.LENGTH_LONG).show();
hideDialog();
}
}) {
@Override
protected Map<String, String> getParams() {
// Posting parameters to login url
Map<String, String>params = new HashMap<String, String>();
params.put("username", username);
params.put("password", password);
return params;
}
};
// Adding request to request queue
AppController.getInstance().addToRequestQueue(strReq, tag_json_obj);
}
private void showDialog() {
if (!pDialog.isShowing())
pDialog.show();
}
private void hideDialog() {
if (pDialog.isShowing())
pDialog.dismiss();
}
}
108
Pengaturan Web Server
Untuk menghubungkan aplikasi android dengan server web
silahkan download file SmartDewan.zip di link berikut:
https://github.com/didikirawan153/Project-Smartdewan kemudian
ekstrak filenya dan taruh di file htdocs ataupun server local di personal
computer masing-masing seperti gambar dibawah ini.
Gambar 2.60. File directory htdocs smart dewan
Hasil akhir project smartdewan
Dari kodingan xml dan java yang telah dibuat berikut ini adalah hasil dari masing-masing layoutnya :
1. Layout Screenshoot Program
109
Gambar 2.61.Splash
Activity
Gambar 2.62.Login
Activity
Gambar 2.63.About
Activity
Gambar2.64.Payment
Activity
110
Gambar 2.65.
Absensi Activity
Gambar2.66. Jadwal
Activity
Gambar2.67.
Info Activity
Gambar2.68.
Detail Info Activity
111
Gambar 2.69.Home
Fragment
Gambar 2.71.Akun
Fragment
Gambar2.70.
Ujian Activity
Ujian Activity