BAB 2 PERSIAPAN PENGKODINGAN...17 Gambar 2.21. Android Studio Project IDE Membuat Activity 1....

Post on 12-Dec-2020

3 views 0 download

Transcript of BAB 2 PERSIAPAN PENGKODINGAN...17 Gambar 2.21. Android Studio Project IDE Membuat Activity 1....

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