From 7d14c189888934b379100e332664cb75bbe732db Mon Sep 17 00:00:00 2001
From: Jonathan Sudibya <13512093@std.stei.itb.ac.id>
Date: Mon, 7 Mar 2016 11:21:56 +0700
Subject: [PATCH 01/21] Initial commit
---
README.md | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 100 insertions(+)
create mode 100644 README.md
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5eeefe4
--- /dev/null
+++ b/README.md
@@ -0,0 +1,100 @@
+# Tugas Besar 1 IF3111 Pengembangan Aplikasi pada Platform Khusus
+
+## Latar Belakang
+
+Dalam tugas ini, peserta diminta untuk menemukan beberapa tempat di lingkungan ITB dengan bantuan tools yang dibangun di atas platform Android. Aplikasi tersebut dapat memandu peserta dengan menampilkan peta (Google Maps) dan arah tujuannya. Peserta diminta menemukan 3 lokasi (akan diberikan dari server). Pada setiap lokasi peserta akan diminta untuk foto-diri di lokasinya dan mengirimkan nama lokasi tempat peserta berada.
+
+Daftar kemungkinan jawaban lokasi diberikan oleh asisten. Pastikan anda tidak typo saat mengirimkan jawaban ke server.
+
+Daftar kemungkinan jawaban lokasi adalah
+1. gku_barat
+2. gku_timur
+3. intel
+4. cc_barat
+5. cc_timur
+6. dpr
+7. sunken
+8. perpustakaan
+9. pau
+10. kubus
+
+Sever uji coba akan disediakan pada 167.205.24.132 akan dapat diuji coba mulai tanggal 21 Maret 2016 Pukul 07.00.
+Prosedur uji coba akan dibertahukan lebih lanjut.
+
+## Spesifikasi Aplikasi
+
+Spesifikasi dari aplikasi yang dibangun sebagai berikut
+
+• Aplikasi mampu menerima pesan dari server dengan format JSON berisi lokasi dan token.
+• Aplikasi mampu mengolah data berupa location point (longitude, latitude) dan menampilkan indicator pada peta lokasi yang dimaksud. Peta lokasi menggunakan Google Map API. (Tampilan silahkan lihat Spesifikasi Tampilan).
+• Terdapat sebuah panah navigasi yang berada diatas peta (letak bebas), yang menunjukan arah utara. Anda diminta menggunakan sensor yang ada pada android API (Tampilan silahkan lihat Spesifikasi Tampilan).
+• Aplikasi mampu mengirim intent kamera.
+• Aplikasi mampu mengambil gambar melalui kamera. Gambar tidak perlu diunggah ke server (silakan lihat spesifikasi tanya jawab asisten)
+• Aplikasi mampu mengirimkan pesan ke sever dengan format JSON berisi lokasi (longitude, latitude), nim serta token.
+• Pastikan SDK anda mendukung pengerjaan tugas ini.
+• Perhatikan tata letak tombol. Ketika orientasi layar portrait, tombol berada pada bawah layar. Ketika landscape, tombol berada pada samping kanan layar (lihat contoh tampilan seperti pada mock-up spesifikasi tampilan). Anda dapat menggunakan fragment untuk masalah ini.
+• Tampilan warna, font, style tidak dinilai. Namun tata letak tombol akan dinilai.
+• Hasil reply dari server harus ditampilkan dalam bentuk *toast* atau *alert dialog* (pilih satu).
+• Ketika anda menggunakan activity yang memanggil sensor, sensor tersebut harus dilepas ketika anda berpindah activity agar tidak boros baterai.
+
+## Spesifikasi Tanya-Jawab oleh Asisten
+Pada akhir eksplorasi lokasi oleh peserta, akan ada tanya-jawab dengan asisten. Anda juga diminta memberikan hasil foto yang anda dapat (tidak perlu lewat aplikasi yang dibuat pada tugas ini, dapat melalui gallery bawaan android anda). Asisten akan melakukan cross-check dengan data yang anda kirimkan.
+
+
+## Spesifikasi Pertukaran Pesan
+Keterangan : *Client* pada dokumen ini adalah aplikasi Anda dan *Server* merupakan server milik asisten.
+### Request Location
+Permintaan lokasi (pertama).
+
+**Client Request**
+```sh
+{“com”:”req_loc”,”nim”:”13512999”}
+```
+**Server Response**
+```sh
+{“status”:”ok”,”nim”:”13512999”,”longitude”:”6.234123132”,”latitude”:”0.1234123412”,”token”:”21nu2f2n3rh23diefef23hr23ew”}
+```
+### Send Answer
+Mengirimkan jawaban dan menerima lokasi berikutnya
+
+**Client Request**
+```sh
+{“com”:”answer”,”nim”:”13512999”,”answer”:”labtek_v”, ”longitude”:”6.234123132”,”latitude”:”0.1234123412”,”token”:”21nu2f2n3rh23diefef23hr23ew”}
+```
+**Server Response**
+Jika jawaban Anda **benar**, maka:
+```sh
+{“status”:”ok”,”nim”:”13512999”,”longitude”:”8.13215123214”,”latitude”:”9.1234123412”,”token”:”124fewfm32r32ifmwder42”}
+```
+Jika jawaban Anda **salah**, maka:
+```sh
+{“status”:”wrong_answer”,”nim”:”13512999”,”token”:”124fewfm32r32ifmwder42”}
+```
+Jika jawaban Anda **benar dan sudah berada dilokasi ketiga**, maka:
+```sh
+{“status”:”finish”,”nim”:”13512999”,”token”:”124fewfm32r32ifmwder42”,”check”:1}
+```
+## Spesifikasi Tampilan
+**Tampilan horizontal**
+
+**Tampilan vertikal**
+
+**Tampilan *submit* jawaban**
+
+## Deliverables
+
+Silahkan ikuti langkah pengumpulan berikut :
+
+- Lakukan **fork** terhadap repository ini.
+- Edit file readme ini semenarik mungkin (gunakan panduan [Markdown] langguage), diperbolehkan untuk merubah struktur dari readme ini. (Soal tidak perlu dipertahankan).
+- Pada Readme terdapat tampilan aplikasi.
+- Cantumkan lokasi *source code* dan *binary* dari aplikasi pada Readme.
+
+## Deadline
+Deadline pull request terakhir (termasuk commit) adalah 27 Maret 2016 pukul 23.55.
+
+
+## Keterangan Tambahan
+Bila ada pertanyaan, mengenai tugas ini silahkan lakukan melalui milis IF3111.
+
+[Markdown]:
From 4a96ab4dac1ef9e68a5673545c2d850a91e8fb9e Mon Sep 17 00:00:00 2001
From: Jonathan Sudibya <13512093@std.stei.itb.ac.id>
Date: Mon, 7 Mar 2016 04:28:54 +0000
Subject: [PATCH 02/21] README.md edited online with Bitbucket
---
README.md | 45 +++++++++++++++++++++++----------------------
1 file changed, 23 insertions(+), 22 deletions(-)
diff --git a/README.md b/README.md
index 5eeefe4..10f7f87 100644
--- a/README.md
+++ b/README.md
@@ -7,16 +7,17 @@ Dalam tugas ini, peserta diminta untuk menemukan beberapa tempat di lingkungan I
Daftar kemungkinan jawaban lokasi diberikan oleh asisten. Pastikan anda tidak typo saat mengirimkan jawaban ke server.
Daftar kemungkinan jawaban lokasi adalah
-1. gku_barat
-2. gku_timur
-3. intel
-4. cc_barat
-5. cc_timur
-6. dpr
-7. sunken
-8. perpustakaan
-9. pau
-10. kubus
+
+* gku_barat
+* gku_timur
+* intel
+* cc_barat
+* cc_timur
+* dpr
+* sunken
+* perpustakaan
+* pau
+* kubus
Sever uji coba akan disediakan pada 167.205.24.132 akan dapat diuji coba mulai tanggal 21 Maret 2016 Pukul 07.00.
Prosedur uji coba akan dibertahukan lebih lanjut.
@@ -25,17 +26,17 @@ Prosedur uji coba akan dibertahukan lebih lanjut.
Spesifikasi dari aplikasi yang dibangun sebagai berikut
-• Aplikasi mampu menerima pesan dari server dengan format JSON berisi lokasi dan token.
-• Aplikasi mampu mengolah data berupa location point (longitude, latitude) dan menampilkan indicator pada peta lokasi yang dimaksud. Peta lokasi menggunakan Google Map API. (Tampilan silahkan lihat Spesifikasi Tampilan).
-• Terdapat sebuah panah navigasi yang berada diatas peta (letak bebas), yang menunjukan arah utara. Anda diminta menggunakan sensor yang ada pada android API (Tampilan silahkan lihat Spesifikasi Tampilan).
-• Aplikasi mampu mengirim intent kamera.
-• Aplikasi mampu mengambil gambar melalui kamera. Gambar tidak perlu diunggah ke server (silakan lihat spesifikasi tanya jawab asisten)
-• Aplikasi mampu mengirimkan pesan ke sever dengan format JSON berisi lokasi (longitude, latitude), nim serta token.
-• Pastikan SDK anda mendukung pengerjaan tugas ini.
-• Perhatikan tata letak tombol. Ketika orientasi layar portrait, tombol berada pada bawah layar. Ketika landscape, tombol berada pada samping kanan layar (lihat contoh tampilan seperti pada mock-up spesifikasi tampilan). Anda dapat menggunakan fragment untuk masalah ini.
-• Tampilan warna, font, style tidak dinilai. Namun tata letak tombol akan dinilai.
-• Hasil reply dari server harus ditampilkan dalam bentuk *toast* atau *alert dialog* (pilih satu).
-• Ketika anda menggunakan activity yang memanggil sensor, sensor tersebut harus dilepas ketika anda berpindah activity agar tidak boros baterai.
+* Aplikasi mampu menerima pesan dari server dengan format JSON berisi lokasi dan token.
+* Aplikasi mampu mengolah data berupa location point (longitude, latitude) dan menampilkan indicator pada peta lokasi yang dimaksud. Peta lokasi menggunakan Google Map API. (Tampilan silahkan lihat Spesifikasi Tampilan).
+* Terdapat sebuah panah navigasi yang berada diatas peta (letak bebas), yang menunjukan arah utara. Anda diminta menggunakan sensor yang ada pada android API (Tampilan silahkan lihat Spesifikasi Tampilan).
+* Aplikasi mampu mengirim intent kamera.
+* Aplikasi mampu mengambil gambar melalui kamera. Gambar tidak perlu diunggah ke server (silakan lihat spesifikasi tanya jawab asisten)
+* Aplikasi mampu mengirimkan pesan ke sever dengan format JSON berisi lokasi (longitude, latitude), nim serta token.
+* Pastikan SDK anda mendukung pengerjaan tugas ini.
+* Perhatikan tata letak tombol. Ketika orientasi layar portrait, tombol berada pada bawah layar. Ketika landscape, tombol berada pada samping kanan layar (lihat contoh tampilan seperti pada mock-up spesifikasi tampilan). Anda dapat menggunakan fragment untuk masalah ini.
+* Tampilan warna, font, style tidak dinilai. Namun tata letak tombol akan dinilai.
+* Hasil reply dari server harus ditampilkan dalam bentuk *toast* atau *alert dialog* (pilih satu).
+* Ketika anda menggunakan activity yang memanggil sensor, sensor tersebut harus dilepas ketika anda berpindah activity agar tidak boros baterai.
## Spesifikasi Tanya-Jawab oleh Asisten
Pada akhir eksplorasi lokasi oleh peserta, akan ada tanya-jawab dengan asisten. Anda juga diminta memberikan hasil foto yang anda dapat (tidak perlu lewat aplikasi yang dibuat pada tugas ini, dapat melalui gallery bawaan android anda). Asisten akan melakukan cross-check dengan data yang anda kirimkan.
@@ -97,4 +98,4 @@ Deadline pull request terakhir (termasuk commit) adalah 27 Maret 2016 pukul 23.5
## Keterangan Tambahan
Bila ada pertanyaan, mengenai tugas ini silahkan lakukan melalui milis IF3111.
-[Markdown]:
+[Markdown]:
\ No newline at end of file
From 6da19fdc6cfe19eb229d79184674a3545fc4e380 Mon Sep 17 00:00:00 2001
From: Jonathan Sudibya <13512093@std.stei.itb.ac.id>
Date: Mon, 21 Mar 2016 09:32:13 +0700
Subject: [PATCH 03/21] Update Readme.md
---
README.md | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/README.md b/README.md
index 10f7f87..d3cd63a 100644
--- a/README.md
+++ b/README.md
@@ -52,16 +52,28 @@ Permintaan lokasi (pertama).
{“com”:”req_loc”,”nim”:”13512999”}
```
**Server Response**
+Before :
```sh
{“status”:”ok”,”nim”:”13512999”,”longitude”:”6.234123132”,”latitude”:”0.1234123412”,”token”:”21nu2f2n3rh23diefef23hr23ew”}
```
+After :
+Longitude dan Latitude menggunakan tipe Long.
+```sh
+{“status”:”ok”,”nim”:”13512999”,”longitude”:6.234123132,”latitude”:0.1234123412,”token”:”21nu2f2n3rh23diefef23hr23ew”}
+```
### Send Answer
Mengirimkan jawaban dan menerima lokasi berikutnya
**Client Request**
+Before :
```sh
{“com”:”answer”,”nim”:”13512999”,”answer”:”labtek_v”, ”longitude”:”6.234123132”,”latitude”:”0.1234123412”,”token”:”21nu2f2n3rh23diefef23hr23ew”}
```
+After :
+Longitude dan Latitude menggunakan tipe Long.
+```sh
+{“com”:”answer”,”nim”:”13512999”,”answer”:”labtek_v”, ”longitude”:6.234123132,”latitude”:0.1234123412,”token”:”21nu2f2n3rh23diefef23hr23ew”}
+```
**Server Response**
Jika jawaban Anda **benar**, maka:
```sh
@@ -75,6 +87,16 @@ Jika jawaban Anda **benar dan sudah berada dilokasi ketiga**, maka:
```sh
{“status”:”finish”,”nim”:”13512999”,”token”:”124fewfm32r32ifmwder42”,”check”:1}
```
+
+### Extra
+**No NIM**
+```sh
+{“status”:”err”,”nim”:””,”token”:”124fewfm32r32ifmwder42”}
+```
+**No Com command**
+```sh
+{“status”:”err”,”nim”:”13512999”,”token”:”124fewfm32r32ifmwder42”}
+```
## Spesifikasi Tampilan
**Tampilan horizontal**

From 3dc9f95727126dd88ba24b82f18ac5695954595d Mon Sep 17 00:00:00 2001
From: Calvin Aditya Jonathan
Date: Mon, 21 Mar 2016 15:05:13 +0700
Subject: [PATCH 04/21] Basic layout
---
.gitignore | 8 +
.idea/.name | 1 +
.idea/compiler.xml | 22 ++
.idea/copyright/profiles_settings.xml | 3 +
.idea/encodings.xml | 6 +
.idea/gradle.xml | 19 ++
.idea/misc.xml | 46 +++++
.idea/modules.xml | 9 +
.idea/runConfigurations.xml | 12 ++
.idea/vcs.xml | 6 +
app/.gitignore | 1 +
app/build.gradle | 28 +++
app/proguard-rules.pro | 17 ++
.../example/calvin/pbd/ApplicationTest.java | 13 ++
app/src/debug/res/values/google_maps_api.xml | 19 ++
app/src/main/AndroidManifest.xml | 55 +++++
.../example/calvin/pbd/AnswerActivity.java | 33 +++
.../com/example/calvin/pbd/MapsActivity.java | 188 ++++++++++++++++++
app/src/main/res/drawable/answer.png | Bin 0 -> 2365 bytes
app/src/main/res/drawable/camera.png | Bin 0 -> 6252 bytes
.../main/res/layout-land/activity_maps.xml | 42 ++++
app/src/main/res/layout/activity_answer.xml | 25 +++
app/src/main/res/layout/activity_maps.xml | 50 +++++
app/src/main/res/layout/content_answer.xml | 43 ++++
app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3418 bytes
app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2206 bytes
app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4842 bytes
.../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7718 bytes
.../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10486 bytes
app/src/main/res/values-v21/styles.xml | 9 +
app/src/main/res/values-w820dp/dimens.xml | 6 +
app/src/main/res/values/colors.xml | 6 +
app/src/main/res/values/dimens.xml | 6 +
app/src/main/res/values/strings.xml | 20 ++
app/src/main/res/values/styles.xml | 20 ++
.../release/res/values/google_maps_api.xml | 22 ++
.../example/calvin/pbd/ExampleUnitTest.java | 15 ++
build.gradle | 23 +++
gradle.properties | 18 ++
gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53637 bytes
gradle/wrapper/gradle-wrapper.properties | 6 +
gradlew | 160 +++++++++++++++
gradlew.bat | 90 +++++++++
settings.gradle | 1 +
44 files changed, 1048 insertions(+)
create mode 100644 .gitignore
create mode 100644 .idea/.name
create mode 100644 .idea/compiler.xml
create mode 100644 .idea/copyright/profiles_settings.xml
create mode 100644 .idea/encodings.xml
create mode 100644 .idea/gradle.xml
create mode 100644 .idea/misc.xml
create mode 100644 .idea/modules.xml
create mode 100644 .idea/runConfigurations.xml
create mode 100644 .idea/vcs.xml
create mode 100644 app/.gitignore
create mode 100644 app/build.gradle
create mode 100644 app/proguard-rules.pro
create mode 100644 app/src/androidTest/java/com/example/calvin/pbd/ApplicationTest.java
create mode 100644 app/src/debug/res/values/google_maps_api.xml
create mode 100644 app/src/main/AndroidManifest.xml
create mode 100644 app/src/main/java/com/example/calvin/pbd/AnswerActivity.java
create mode 100644 app/src/main/java/com/example/calvin/pbd/MapsActivity.java
create mode 100644 app/src/main/res/drawable/answer.png
create mode 100644 app/src/main/res/drawable/camera.png
create mode 100644 app/src/main/res/layout-land/activity_maps.xml
create mode 100644 app/src/main/res/layout/activity_answer.xml
create mode 100644 app/src/main/res/layout/activity_maps.xml
create mode 100644 app/src/main/res/layout/content_answer.xml
create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png
create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png
create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png
create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png
create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
create mode 100644 app/src/main/res/values-v21/styles.xml
create mode 100644 app/src/main/res/values-w820dp/dimens.xml
create mode 100644 app/src/main/res/values/colors.xml
create mode 100644 app/src/main/res/values/dimens.xml
create mode 100644 app/src/main/res/values/strings.xml
create mode 100644 app/src/main/res/values/styles.xml
create mode 100644 app/src/release/res/values/google_maps_api.xml
create mode 100644 app/src/test/java/com/example/calvin/pbd/ExampleUnitTest.java
create mode 100644 build.gradle
create mode 100644 gradle.properties
create mode 100644 gradle/wrapper/gradle-wrapper.jar
create mode 100644 gradle/wrapper/gradle-wrapper.properties
create mode 100644 gradlew
create mode 100644 gradlew.bat
create mode 100644 settings.gradle
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c6cbe56
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,8 @@
+*.iml
+.gradle
+/local.properties
+/.idea/workspace.xml
+/.idea/libraries
+.DS_Store
+/build
+/captures
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..79ff8cd
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+PBD
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..96cc43e
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml
new file mode 100644
index 0000000..e7bedf3
--- /dev/null
+++ b/.idea/copyright/profiles_settings.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..97626ba
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 0000000..fc132b2
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..5d19981
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..9f5e227
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 0000000..7f68460
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..6564d52
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 0000000..2bdb5f0
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,28 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 23
+ buildToolsVersion "23.0.2"
+
+ defaultConfig {
+ applicationId "com.example.calvin.pbd"
+ minSdkVersion 21
+ targetSdkVersion 23
+ versionCode 1
+ versionName "1.0"
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+dependencies {
+ compile fileTree(dir: 'libs', include: ['*.jar'])
+ testCompile 'junit:junit:4.12'
+ compile 'com.android.support:appcompat-v7:23.2.1'
+ compile 'com.google.android.gms:play-services:8.4.0'
+ compile 'com.android.support:design:23.2.1'
+}
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 0000000..4fb0e5a
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,17 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in C:\Users\Calvin\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/app/src/androidTest/java/com/example/calvin/pbd/ApplicationTest.java b/app/src/androidTest/java/com/example/calvin/pbd/ApplicationTest.java
new file mode 100644
index 0000000..74f73de
--- /dev/null
+++ b/app/src/androidTest/java/com/example/calvin/pbd/ApplicationTest.java
@@ -0,0 +1,13 @@
+package com.example.calvin.pbd;
+
+import android.app.Application;
+import android.test.ApplicationTestCase;
+
+/**
+ * Testing Fundamentals
+ */
+public class ApplicationTest extends ApplicationTestCase {
+ public ApplicationTest() {
+ super(Application.class);
+ }
+}
\ No newline at end of file
diff --git a/app/src/debug/res/values/google_maps_api.xml b/app/src/debug/res/values/google_maps_api.xml
new file mode 100644
index 0000000..6b275e5
--- /dev/null
+++ b/app/src/debug/res/values/google_maps_api.xml
@@ -0,0 +1,19 @@
+
+
+ AIzaSyCxJWcNKZqNKxbq4sQffmBaxHogZSaapCQ
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..d4cad26
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/example/calvin/pbd/AnswerActivity.java b/app/src/main/java/com/example/calvin/pbd/AnswerActivity.java
new file mode 100644
index 0000000..728053e
--- /dev/null
+++ b/app/src/main/java/com/example/calvin/pbd/AnswerActivity.java
@@ -0,0 +1,33 @@
+package com.example.calvin.pbd;
+
+import android.os.Bundle;
+import android.support.design.widget.FloatingActionButton;
+import android.support.design.widget.Snackbar;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
+import android.view.View;
+import android.widget.ArrayAdapter;
+import android.widget.Spinner;
+
+public class AnswerActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_answer);
+ Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ setSupportActionBar(toolbar);
+
+ Spinner spinner = (Spinner) findViewById(R.id.spinner);
+ // Create an ArrayAdapter using the string array and a default spinner layout
+ ArrayAdapter adapter = ArrayAdapter.createFromResource(this,
+ R.array.answer_array, android.R.layout.simple_spinner_item);
+ // Specify the layout to use when the list of choices appears
+ adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ // Apply the adapter to the spinner
+ spinner.setAdapter(adapter);
+
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ }
+
+}
diff --git a/app/src/main/java/com/example/calvin/pbd/MapsActivity.java b/app/src/main/java/com/example/calvin/pbd/MapsActivity.java
new file mode 100644
index 0000000..94287b0
--- /dev/null
+++ b/app/src/main/java/com/example/calvin/pbd/MapsActivity.java
@@ -0,0 +1,188 @@
+package com.example.calvin.pbd;
+
+import android.content.Intent;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Environment;
+import android.provider.MediaStore;
+import android.support.v4.app.FragmentActivity;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageButton;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.google.android.gms.maps.CameraUpdate;
+import com.google.android.gms.maps.CameraUpdateFactory;
+import com.google.android.gms.maps.GoogleMap;
+import com.google.android.gms.maps.OnMapReadyCallback;
+import com.google.android.gms.maps.SupportMapFragment;
+import com.google.android.gms.maps.model.LatLng;
+import com.google.android.gms.maps.model.MarkerOptions;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.w3c.dom.Text;
+
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.net.Socket;
+import java.net.UnknownHostException;
+import java.nio.charset.StandardCharsets;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
+
+ private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
+ public static final int MEDIA_TYPE_IMAGE = 1;
+ private GoogleMap mMap;
+ private Uri fileUri;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_maps);
+ // Obtain the SupportMapFragment and get notified when the map is ready to be used.
+ SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
+ .findFragmentById(R.id.map);
+ mapFragment.getMapAsync(this);
+ new SocketTask().execute();
+
+ /*
+ ((Button)findViewById(R.id.requestButton)).setOnClickListener(
+ new Button.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Log.d("MyApp", "requesting");
+ }
+ }
+ );
+ */
+
+ ((ImageButton)findViewById(R.id.cameraButton)).setOnClickListener(
+ new ImageButton.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
+ fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
+ intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
+
+ startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
+ }
+ }
+ );
+
+ ((ImageButton)findViewById(R.id.answerButton)).setOnClickListener(
+ new ImageButton.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Intent intent = new Intent(MapsActivity.this, AnswerActivity.class);
+ startActivity(intent);
+ }
+ }
+ );
+ }
+
+ private class SocketTask extends AsyncTask {
+ protected String doInBackground(Void... args) {
+ try {
+ Socket socket = new Socket("167.205.34.132", 3111);
+
+ JSONObject request = new JSONObject();
+ request.put("com", "req_loc");
+ request.put("nim", "13513077");
+
+ InputStream inputStream = socket.getInputStream();
+ OutputStream outputStream = socket.getOutputStream();
+
+ PrintWriter out = new PrintWriter(outputStream);
+ BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
+
+ out.println(request.toString());
+ out.flush();
+ String response = in.readLine();
+ return response;
+ }
+ catch (UnknownHostException e) {
+ Log.d("MyApp", e.toString());
+ }
+ catch (IOException e) {
+ Log.d("MyApp", e.toString());
+ }
+ catch (JSONException e) {
+ Log.d("MyApp", e.toString());
+ }
+ return null;
+ }
+
+ protected void onPostExecute(String response) {
+ try {
+ JSONObject responseJSON = new JSONObject(response);
+ }
+ catch (JSONException e) {
+ Log.d("MyApp", e.toString());
+ }
+ }
+ }
+
+ private static Uri getOutputMediaFileUri(int type){
+ return Uri.fromFile(getOutputMediaFile(type));
+ }
+
+ private static File getOutputMediaFile(int type) {
+ File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
+ Environment.DIRECTORY_PICTURES), "PBD");
+
+ if (!mediaStorageDir.exists()) {
+ if (!mediaStorageDir.mkdirs()) {
+ Log.d("PBD", "failed to create directory");
+ return null;
+ }
+ }
+
+ String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
+ File mediaFile;
+ if (type == MEDIA_TYPE_IMAGE) {
+ mediaFile = new File(mediaStorageDir.getPath() + File.separator +
+ "IMG_" + timeStamp + ".jpg");
+ } else {
+ return null;
+ }
+
+ return mediaFile;
+ }
+
+ @Override
+ public void onMapReady(GoogleMap googleMap) {
+ mMap = googleMap;
+
+ LatLng itb = new LatLng(-6.8899, 107.6100);
+ mMap.addMarker(new MarkerOptions().position(itb).title("Institut Teknologi Bandung"));
+ mMap.moveCamera(CameraUpdateFactory.newLatLng(itb));
+ mMap.moveCamera(CameraUpdateFactory.zoomTo(17));
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
+ if (resultCode == RESULT_OK) {
+ Toast.makeText(this, "Image saved\n", Toast.LENGTH_SHORT).show();
+ } else if (resultCode == RESULT_CANCELED) {
+ //
+ } else {
+ Toast.makeText(this, "Image capture failed\n", Toast.LENGTH_SHORT).show();
+ }
+ }
+ }
+}
diff --git a/app/src/main/res/drawable/answer.png b/app/src/main/res/drawable/answer.png
new file mode 100644
index 0000000000000000000000000000000000000000..792269032ace63bd1b41e17351df7651ed58204a
GIT binary patch
literal 2365
zcmai0dpMNq7Jp}kTyh(fLK>7DWg6Gq(qM$PP)auA7L$!(MuW(0#+D3qTndd_sO%y}
zD!Gk&h%l!u?W4gox$K?G)TrD!pIuKq=XuWF=Xt*8UB9*7cfG&0zTf)er8_y;NQx_p
z0{|rLY;h+6fI$!jM1>&pIof*`GD7|q$1MPOkhXQzM;P)^zP2Zi18`9T0BRxt%TS2=
zI{@Jr0N!~6U~&Th1#*7<2{UK|e)b0&8~|lk)pY?7`NIxpaVm0ncEmB+!+%%j2mVT7
zo{^pY(X+w&DXtkMw1n-q^RkB&B~B5=0u{oGO;hWUXYO!&E^V`JWubAWPQBpm#%$Nl
z{^^nCu^$wMxut5>S2V8qotujqd-ar|6R&Y?G>@?|8r?r1GZ)zAH&?K9cVpnnv!hn<+^7wW
z8f}LC9)Ve!U}jPj?>>s8x36Be(UezAi)JYd{ZeNYlQN%QU&A{SZ(K65wwj>+2)#}v
zO3=C@MUJQ=4_=_{zW|e@uNbw)Wh!leZL;bP0#uHu60%mAn$)qfxR*p;5+OcE7mll{
z-AQdZdQY9vzM9yM-Y7D-5+xmNY)1(Ppm5y5?dW{mRYPYGH+2hq!4$>W&QK{>#twN02;^d^IO!
zu#=uNMjq&tc(2*|y7_ui+lcar(dx<$^C_kVA}wqeSM_sx<60`c`AHbew3*E)cmI#m9mJ
zg#M`D17HA|6+r$r<2-sqfKsb+Hg&QYIVT5Td%^t
zcu=dyvz~CbCn7#QvHM1Bc=l}BAtB3>ijTzDS0i(GQgUxGo~#Rx%USSZ$QoZtorZIb
zvDufgp`*f^Wg7#YG6+?HKdnRj5BFu`$wSK}Rbs+rEGyHpkGP$h>-d&Lwe)vH^kb72
z6)AGnP*x>N!S(Hso8u=l8!e7eT;GC5{z;#EonH4{MD7Yy_vLxARM`mbqq4B)ZdOH1
zQ@oS8^!LBCG=dGC1H2d&@6gjG(wMtmU8Sd|acsr%f40brXRxfI4i*tQo-9g;u#U15
z)%J5b1G3L;7Q>Te-E8AtTgiANNDJuI#
zo2V@^f2GB|1gd`*_M4F9#zGf4c#t?BZ)cq2HN3?j^5E~QGT{<`znR)T1gaFj0(g7Zu8+mjS;S-Ed=iw3$i6Lu;SkD|FYlgU|&MVHxtSZ3iN6ai}`N#!DITu{jd#_9SpygBlF4nc(
zeIu-m9kQGM_Ufha>dnDfVu4K|p;>|&7QyC21NO}w06Y%t>!cOJ{=P=Gi!umq)uYyI
zodfl<p{)UMh*xpTpF_S8s-7IIVBr;P=G1#2ze92
zhhKkm#i-q8QKYZ4r$UOFV%eLlVAL~K&x-GYvD3S+L?%TWQwU43$BPnhC9tOM6YJKE
z)vE>ysWr>ublW}eP0hO~`W-=Mf|&|n>_BO$eW~gTnZ>PMJexg=f=R7GF>G<<@ZGXv
zSpNt4u{Qy3yqD4Iy@4D|$^K?jtRy45W3R(J{Flh2huGiB7M*S({NM~nN^WdZQ1|nz
zKTbB|y`$EqlR`urX_V_b&1LD&Z9c&KJ!r_jJtMI-yHE&P+PqanhBED#_(;G_u>xk*
zCw}h2SVxUvIjCJdtdj?=ES=O%TsHdiW4VUW)eLhu{hp*uptpuN{P2CiwRX
z#HhVv?xskP)7*uwUmdPdg3wfr0<!BBh4a;ZEr2
zgI;Du_|oIY5FDC#H3ZRT_A<30zOSYl@~(Nr5$H35{rev&cRfkVJiRD1x=dJ;b`<4(
zDj76?3q1k$hFQCY`T2wqOnlE1AOmzUItJPpU2PrxQ#yJky3nVujWIOAU|O~r^ZzR$
znB*65F6yrn9@x^Hp#MP&R}R!g-%C(s>hM92H
Vpiq~!>pnqrz|PtMS83^;@E_UiC|v*m
literal 0
HcmV?d00001
diff --git a/app/src/main/res/drawable/camera.png b/app/src/main/res/drawable/camera.png
new file mode 100644
index 0000000000000000000000000000000000000000..36e3bedadc8d8cd0161c8aba988f5c7a74e2239d
GIT binary patch
literal 6252
zcma)9c{tQ>*FUqE8T&}qN!CiTrbyXGmQ+#-sSILTE$J6ozp|E!QueJ?A*m@#l(8!r
zr9InZZL@?zw)dvz`aRe4yzh0rzdu~}ckXlUvwZGzKIe9N+g1xfK50Gx5VW#1+YW$7
zpLn2<&@$%#`Zrp5y)7Mm0r*Ad|8S6+E(ySAbC6Eow(Wq|aWCHkUfyz6bh@1PF)xpU
zN8ADYKW6M;+U@uvZZO_4W@;USU9$GtE=G~tZW@a%zOYc(MwO5Q-Fu=dOQ&M4wwB1B(*l>(dm1aSVZ_$k2NlE&6t
z52y#g#_
zA|((9PM74xaM>3?PSicd3=V97{N`O}HiCmDEcURj(S!GDplN0AVF`uBz~)f-?*l~u
zG;L!dR{}8*7!8Vw{t%G@i_J&u^?$4?p!TaEq*Ctdmn!LP40EEW`H=1H)t4%BtRz+~
z)^WkRq#CPNolKEh9kxc8JNg_T`+^wCc67#{BUHfQ=$tPSa#s6VL7G!=b?u(*ZO-#H
z2KaP5-K*EmBUR^dwJg|>H`>*j>kNd*L4G7Z3CtXTmtM`Uk5GS}*&&M|3SkiovH^Q~8FV14R
zn160s=9NN?m20Vk%HnR@MLy@vQqPXAzM*j1^y13eWi502yE;{;2!@?&q41C)F7Sfd
zt-Wr9U)C$A4#(MD;{YRNUX`zvDFp05_@`#Sxgnz&i|l29d01Wa0oZ4zq;B_&WmHcA
zFv|{8DKw#tRZ6O|NlPku+A8^{89EWBN;OrcR8zkF*pg$6mHDSkm7|&pWmFg%uZ?Ba
zux$@SC3p*|SM4kjGVm7u?Lx_{R4xzWC7Lu)L|x=R#^7AfI4GW{NTftg$X8kt7sV>c
zJ&jpxt6+U$t)@(u`pj5DOyYqCE}lC^7&XsXv$o8DWe%A4TU
zcuyf;Ag@lka92K|?DS8!=6im`MPVD+ygEcbQ#qHVCYBDH9k#x=yd}3pX^qH7UR_>7
zgl*Ldg@jwy50*a?nXHj?U9A=EV5zG3c2S(D1~o8-UZbnD=rn!xiqd$z)xGO>EsI*r
zTRgWbeo?)hw#HIgG2!XQ{fF<9^)9K(t!jwu$>^!>(e9!3$d5SjWw;vqT%Xv{rM&&w
zp-ob~)ZR6{B=_XiCOfaCZg0PJ#ZF{x+-}o5SBkdZwT-?dy5_G`y{2$+E9)C~u3mm6
zeL&*C_`$oMk3SM=zr1v7(hK{R#xEA1lRgv1`~(D}#KP-in95RVl4MDyl%M3?i>7Y`i5+ruv8Qy}8gQ?rMl-^uY|Gjg|{;|+(MyZ5rp?_}Ir
z_O|R!S&m3f>DGj;d6{pS)rCKbo)+CMmMZLhPiieFI$9L$!gQ5j7S|S34<IE)s2AS#vOBN7^e3
zrUbLpH+(cE_O$h>M)f2^^)y;td&A?NO~-%w?EMtb@-riil~y%ytM%@n&fvkp=(eoq
zYqC~mI%@mAsBWNhZF^rD@n>DuJlvTdVneqHV?OLx)Ns?dV1MUbVet*W+;Nv73BzB8
z$FjN&yY+QDR(Ci$Ki6d!HxxJ8RC{GQM|RRf73cQP12fzn5)v-%hjNW{GAUX-q8}y}N3g)~Xohsvpw-sQYNm
zBcnQX569DCcTl`R1mzh5X{
zds3-Z`-W<7X~c@#@#UKZH@By)&lFERA$N4O!TQHq;TJE&`ls_DvGg+e>0wrUK98dsUy