diff --git a/.classpath b/.classpath
new file mode 100755
index 0000000..3c817fc
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/.gitignore b/.gitignore
new file mode 100755
index 0000000..fa9ed6d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,88 @@
+# Created by http://www.gitignore.io
+
+### OSX ###
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+# Thumbnails
+._*
+
+# Files that might appear on external disk
+.Spotlight-V100
+.Trashes
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+
+### Android ###
+# Built application files
+*.apk
+*.ap_
+
+# Files for the Dalvik VM
+*.dex
+
+# Java class files
+*.class
+
+# Generated files
+bin/
+gen/
+
+# Gradle files
+.gradle/
+build/
+
+# Local configuration file (sdk path, etc)
+local.properties
+
+# Proguard folder generated by Eclipse
+proguard/
+
+#Log Files
+*.log
+
+
+### Eclipse ###
+*.pydevproject
+.metadata
+.gradle
+bin/
+tmp/
+*.tmp
+*.bak
+*.swp
+*~.nib
+local.properties
+.settings/
+.loadpath
+proguard-project.txt
+project.properties
+
+# External tool builders
+.externalToolBuilders/
+
+# Locally stored "Eclipse launch configurations"
+*.launch
+
+# CDT-specific
+.cproject
+
+# PDT-specific
+.buildpath
+
+# sbteclipse plugin
+.target
+
+# TeXlipse plugin
+.texlipse
+
diff --git a/.project b/.project
new file mode 100755
index 0000000..3e2d686
--- /dev/null
+++ b/.project
@@ -0,0 +1,33 @@
+
+
+ ChildCare
+
+
+
+
+
+ com.android.ide.eclipse.adt.ResourceManagerBuilder
+
+
+
+
+ com.android.ide.eclipse.adt.PreCompilerBuilder
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ com.android.ide.eclipse.adt.ApkBuilder
+
+
+
+
+
+ com.android.ide.eclipse.adt.AndroidNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
new file mode 100755
index 0000000..a996265
--- /dev/null
+++ b/AndroidManifest.xml
@@ -0,0 +1,312 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/RouteData b/assets/RouteData
new file mode 100755
index 0000000..9f1ac1d
--- /dev/null
+++ b/assets/RouteData
@@ -0,0 +1,214 @@
+{
+ "routes" : [
+ {
+ "bounds" : {
+ "northeast" : {
+ "lat" : 22.3401074,
+ "lng" : 114.1826525
+ },
+ "southwest" : {
+ "lat" : 22.3339707,
+ "lng" : 114.1759087
+ }
+ },
+ "copyrights" : "地图数据 ©2014 GS(2011)6020 Google",
+ "legs" : [
+ {
+ "distance" : {
+ "text" : "1.8 公里",
+ "value" : 1776
+ },
+ "duration" : {
+ "text" : "4 分钟",
+ "value" : 227
+ },
+ "end_address" : "香港九龙塘九龙塘站",
+ "end_location" : {
+ "lat" : 22.3369043,
+ "lng" : 114.1763334
+ },
+ "start_address" : "香港九龙塘浸会大学道校园香港浸會學院",
+ "start_location" : {
+ "lat" : 22.3340497,
+ "lng" : 114.1826525
+ },
+ "steps" : [
+ {
+ "distance" : {
+ "text" : "60 米",
+ "value" : 60
+ },
+ "duration" : {
+ "text" : "1 分钟",
+ "value" : 7
+ },
+ "end_location" : {
+ "lat" : 22.3339707,
+ "lng" : 114.1820822
+ },
+ "html_instructions" : "从\u003cb\u003eBaptist University Road/浸會大學道\u003c/b\u003e向\u003cb\u003e西\u003c/b\u003e行驶,到\u003cb\u003eLa Salle Road/喇沙利道\u003c/b\u003e",
+ "polyline" : {
+ "points" : "ybigCqh|wTJf@BT?\\?T"
+ },
+ "start_location" : {
+ "lat" : 22.3340497,
+ "lng" : 114.1826525
+ },
+ "travel_mode" : "DRIVING"
+ },
+ {
+ "distance" : {
+ "text" : "52 米",
+ "value" : 52
+ },
+ "duration" : {
+ "text" : "1 分钟",
+ "value" : 17
+ },
+ "end_location" : {
+ "lat" : 22.3340325,
+ "lng" : 114.1815783
+ },
+ "html_instructions" : "继续前行,上\u003cb\u003eHereford Road/禧福道\u003c/b\u003e",
+ "polyline" : {
+ "points" : "ibigC_e|wTCl@Gt@"
+ },
+ "start_location" : {
+ "lat" : 22.3339707,
+ "lng" : 114.1820822
+ },
+ "travel_mode" : "DRIVING"
+ },
+ {
+ "distance" : {
+ "text" : "0.6 公里",
+ "value" : 594
+ },
+ "duration" : {
+ "text" : "1 分钟",
+ "value" : 70
+ },
+ "end_location" : {
+ "lat" : 22.339092,
+ "lng" : 114.181819
+ },
+ "html_instructions" : "从环岛的\u003cb\u003e2\u003c/b\u003e出口上\u003cb\u003eRenfrew Road/聯福道\u003c/b\u003e",
+ "maneuver" : "roundabout-left",
+ "polyline" : {
+ "points" : "ubigC{a|wTB@@@@B@@@B?D?@?@ABABA@A@A@A?A@C?A?A?A?CAAACC?AUJE@E@yISiAC_BI_AGqDW}@EgCU"
+ },
+ "start_location" : {
+ "lat" : 22.3340325,
+ "lng" : 114.1815783
+ },
+ "travel_mode" : "DRIVING"
+ },
+ {
+ "distance" : {
+ "text" : "0.3 公里",
+ "value" : 283
+ },
+ "duration" : {
+ "text" : "1 分钟",
+ "value" : 43
+ },
+ "end_location" : {
+ "lat" : 22.3391689,
+ "lng" : 114.179077
+ },
+ "html_instructions" : "向\u003cb\u003e左\u003c/b\u003e转,进入\u003cb\u003eJunction Road/聯合道\u003c/b\u003e",
+ "maneuver" : "turn-left",
+ "polyline" : {
+ "points" : "ibjgCkc|wTAr@?BAhEBt@?LA~@CTC`@Cz@Ah@"
+ },
+ "start_location" : {
+ "lat" : 22.339092,
+ "lng" : 114.181819
+ },
+ "travel_mode" : "DRIVING"
+ },
+ {
+ "distance" : {
+ "text" : "84 米",
+ "value" : 84
+ },
+ "duration" : {
+ "text" : "1 分钟",
+ "value" : 8
+ },
+ "end_location" : {
+ "lat" : 22.339925,
+ "lng" : 114.179118
+ },
+ "html_instructions" : "向\u003cb\u003e右\u003c/b\u003e转,前往\u003cb\u003eCornwall Street/歌和老街\u003c/b\u003e",
+ "maneuver" : "turn-right",
+ "polyline" : {
+ "points" : "ybjgCgr{wTG?mCG"
+ },
+ "start_location" : {
+ "lat" : 22.3391689,
+ "lng" : 114.179077
+ },
+ "travel_mode" : "DRIVING"
+ },
+ {
+ "distance" : {
+ "text" : "0.3 公里",
+ "value" : 331
+ },
+ "duration" : {
+ "text" : "1 分钟",
+ "value" : 30
+ },
+ "end_location" : {
+ "lat" : 22.3401094,
+ "lng" : 114.1759031
+ },
+ "html_instructions" : "在第 1 个路口向\u003cb\u003e左\u003c/b\u003e转,进入\u003cb\u003eCornwall Street/歌和老街\u003c/b\u003e",
+ "polyline" : {
+ "points" : "ogjgCor{wTI`BKrBA`A?@E~AEjB?d@AfB?N"
+ },
+ "start_location" : {
+ "lat" : 22.339925,
+ "lng" : 114.179118
+ },
+ "travel_mode" : "DRIVING"
+ },
+ {
+ "distance" : {
+ "text" : "0.4 公里",
+ "value" : 372
+ },
+ "duration" : {
+ "text" : "1 分钟",
+ "value" : 52
+ },
+ "end_location" : {
+ "lat" : 22.3369043,
+ "lng" : 114.1763334
+ },
+ "html_instructions" : "向\u003cb\u003e左\u003c/b\u003e转,进入\u003cb\u003eKent Road/根德道\u003c/b\u003e",
+ "maneuver" : "turn-left",
+ "polyline" : {
+ "points" : "uhjgCk~zwT@AVGrGwA`B_@b@KJAH?J@`AVTF^JJBLBXB"
+ },
+ "start_location" : {
+ "lat" : 22.3401094,
+ "lng" : 114.1759031
+ },
+ "travel_mode" : "DRIVING"
+ }
+ ],
+ "via_waypoint" : []
+ }
+ ],
+ "overview_polyline" : {
+ "points" : "ybigCqh|wTN|@?r@KbBB@FJALGHI@ICCE[L_JQiDMwL{@Av@@~FAlAGv@EdBuCGWxGKjEAlC@LjH_BdCk@TAbCl@r@J"
+ },
+ "summary" : "Renfrew Road/聯福道",
+ "warnings" : [],
+ "waypoint_order" : []
+ }
+ ],
+ "status" : "OK"
+}
\ No newline at end of file
diff --git a/libs/android-support-v13.jar b/libs/android-support-v13.jar
new file mode 100755
index 0000000..e2ea95a
Binary files /dev/null and b/libs/android-support-v13.jar differ
diff --git a/libs/android-support-v4.jar b/libs/android-support-v4.jar
new file mode 100755
index 0000000..c31cede
Binary files /dev/null and b/libs/android-support-v4.jar differ
diff --git a/libs/universal-image-loader-1.9.3-SNAPSHOT.jar b/libs/universal-image-loader-1.9.3-SNAPSHOT.jar
new file mode 100755
index 0000000..2d5e17d
Binary files /dev/null and b/libs/universal-image-loader-1.9.3-SNAPSHOT.jar differ
diff --git a/lint.xml b/lint.xml
new file mode 100755
index 0000000..ee0eead
--- /dev/null
+++ b/lint.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/res/anim/in_leftright.xml b/res/anim/in_leftright.xml
new file mode 100755
index 0000000..a0803b1
--- /dev/null
+++ b/res/anim/in_leftright.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/res/anim/in_rightleft.xml b/res/anim/in_rightleft.xml
new file mode 100755
index 0000000..319fbac
--- /dev/null
+++ b/res/anim/in_rightleft.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/res/anim/out_leftright.xml b/res/anim/out_leftright.xml
new file mode 100755
index 0000000..96a4d44
--- /dev/null
+++ b/res/anim/out_leftright.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/res/anim/out_rightleft.xml b/res/anim/out_rightleft.xml
new file mode 100755
index 0000000..05a0d1b
--- /dev/null
+++ b/res/anim/out_rightleft.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/res/anim/rotate_anim.xml b/res/anim/rotate_anim.xml
new file mode 100755
index 0000000..90ad936
--- /dev/null
+++ b/res/anim/rotate_anim.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable-hdpi/ani_connecting_01.png b/res/drawable-hdpi/ani_connecting_01.png
new file mode 100755
index 0000000..cc7ab74
Binary files /dev/null and b/res/drawable-hdpi/ani_connecting_01.png differ
diff --git a/res/drawable-hdpi/ani_connecting_02.png b/res/drawable-hdpi/ani_connecting_02.png
new file mode 100755
index 0000000..64b2b11
Binary files /dev/null and b/res/drawable-hdpi/ani_connecting_02.png differ
diff --git a/res/drawable-hdpi/ani_connecting_03.png b/res/drawable-hdpi/ani_connecting_03.png
new file mode 100755
index 0000000..3620159
Binary files /dev/null and b/res/drawable-hdpi/ani_connecting_03.png differ
diff --git a/res/drawable-hdpi/ani_connecting_04.png b/res/drawable-hdpi/ani_connecting_04.png
new file mode 100755
index 0000000..758e966
Binary files /dev/null and b/res/drawable-hdpi/ani_connecting_04.png differ
diff --git a/res/drawable-hdpi/ani_connecting_05.png b/res/drawable-hdpi/ani_connecting_05.png
new file mode 100755
index 0000000..92b91c8
Binary files /dev/null and b/res/drawable-hdpi/ani_connecting_05.png differ
diff --git a/res/drawable-hdpi/ani_connecting_06.png b/res/drawable-hdpi/ani_connecting_06.png
new file mode 100755
index 0000000..818ef9e
Binary files /dev/null and b/res/drawable-hdpi/ani_connecting_06.png differ
diff --git a/res/drawable-hdpi/ani_connecting_07.png b/res/drawable-hdpi/ani_connecting_07.png
new file mode 100755
index 0000000..718a75f
Binary files /dev/null and b/res/drawable-hdpi/ani_connecting_07.png differ
diff --git a/res/drawable-hdpi/ani_connecting_08.png b/res/drawable-hdpi/ani_connecting_08.png
new file mode 100755
index 0000000..fbd4172
Binary files /dev/null and b/res/drawable-hdpi/ani_connecting_08.png differ
diff --git a/res/drawable-hdpi/ani_connecting_09.png b/res/drawable-hdpi/ani_connecting_09.png
new file mode 100755
index 0000000..8680de2
Binary files /dev/null and b/res/drawable-hdpi/ani_connecting_09.png differ
diff --git a/res/drawable-hdpi/ani_connecting_10.png b/res/drawable-hdpi/ani_connecting_10.png
new file mode 100755
index 0000000..47bd71e
Binary files /dev/null and b/res/drawable-hdpi/ani_connecting_10.png differ
diff --git a/res/drawable-hdpi/ani_connecting_11.png b/res/drawable-hdpi/ani_connecting_11.png
new file mode 100755
index 0000000..635902c
Binary files /dev/null and b/res/drawable-hdpi/ani_connecting_11.png differ
diff --git a/res/drawable-hdpi/ani_connecting_done.png b/res/drawable-hdpi/ani_connecting_done.png
new file mode 100755
index 0000000..0cec6a1
Binary files /dev/null and b/res/drawable-hdpi/ani_connecting_done.png differ
diff --git a/res/drawable-hdpi/ani_connecting_fail.png b/res/drawable-hdpi/ani_connecting_fail.png
new file mode 100755
index 0000000..a24ab98
Binary files /dev/null and b/res/drawable-hdpi/ani_connecting_fail.png differ
diff --git a/res/drawable-hdpi/bg_actbar_red.png b/res/drawable-hdpi/bg_actbar_red.png
new file mode 100755
index 0000000..9c0064c
Binary files /dev/null and b/res/drawable-hdpi/bg_actbar_red.png differ
diff --git a/res/drawable-hdpi/bg_actbar_white.png b/res/drawable-hdpi/bg_actbar_white.png
new file mode 100755
index 0000000..0597ce8
Binary files /dev/null and b/res/drawable-hdpi/bg_actbar_white.png differ
diff --git a/res/drawable-hdpi/bg_funcbar_red.png b/res/drawable-hdpi/bg_funcbar_red.png
new file mode 100755
index 0000000..b42703c
Binary files /dev/null and b/res/drawable-hdpi/bg_funcbar_red.png differ
diff --git a/res/drawable-hdpi/bg_home_blue01.9.png b/res/drawable-hdpi/bg_home_blue01.9.png
new file mode 100755
index 0000000..ed859db
Binary files /dev/null and b/res/drawable-hdpi/bg_home_blue01.9.png differ
diff --git a/res/drawable-hdpi/bg_home_blue02.9.png b/res/drawable-hdpi/bg_home_blue02.9.png
new file mode 100755
index 0000000..21e5953
Binary files /dev/null and b/res/drawable-hdpi/bg_home_blue02.9.png differ
diff --git a/res/drawable-hdpi/bg_home_green01.9.png b/res/drawable-hdpi/bg_home_green01.9.png
new file mode 100755
index 0000000..af595f7
Binary files /dev/null and b/res/drawable-hdpi/bg_home_green01.9.png differ
diff --git a/res/drawable-hdpi/bg_home_green02.9.png b/res/drawable-hdpi/bg_home_green02.9.png
new file mode 100755
index 0000000..afe25f2
Binary files /dev/null and b/res/drawable-hdpi/bg_home_green02.9.png differ
diff --git a/res/drawable-hdpi/bg_home_megenta.9.png b/res/drawable-hdpi/bg_home_megenta.9.png
new file mode 100755
index 0000000..9772b28
Binary files /dev/null and b/res/drawable-hdpi/bg_home_megenta.9.png differ
diff --git a/res/drawable-hdpi/bg_home_orange.9.png b/res/drawable-hdpi/bg_home_orange.9.png
new file mode 100755
index 0000000..ea3e62e
Binary files /dev/null and b/res/drawable-hdpi/bg_home_orange.9.png differ
diff --git a/res/drawable-hdpi/bg_home_pink.9.png b/res/drawable-hdpi/bg_home_pink.9.png
new file mode 100755
index 0000000..e7003aa
Binary files /dev/null and b/res/drawable-hdpi/bg_home_pink.9.png differ
diff --git a/res/drawable-hdpi/bg_home_purple.9.png b/res/drawable-hdpi/bg_home_purple.9.png
new file mode 100755
index 0000000..b48611e
Binary files /dev/null and b/res/drawable-hdpi/bg_home_purple.9.png differ
diff --git a/res/drawable-hdpi/bg_home_yellow01.9.png b/res/drawable-hdpi/bg_home_yellow01.9.png
new file mode 100755
index 0000000..35549a4
Binary files /dev/null and b/res/drawable-hdpi/bg_home_yellow01.9.png differ
diff --git a/res/drawable-hdpi/bg_home_yellow02.9.png b/res/drawable-hdpi/bg_home_yellow02.9.png
new file mode 100755
index 0000000..4c6f5f3
Binary files /dev/null and b/res/drawable-hdpi/bg_home_yellow02.9.png differ
diff --git a/res/drawable-hdpi/bg_radar_circle.png b/res/drawable-hdpi/bg_radar_circle.png
new file mode 100755
index 0000000..83d7be6
Binary files /dev/null and b/res/drawable-hdpi/bg_radar_circle.png differ
diff --git a/res/drawable-hdpi/bg_radar_rotate.png b/res/drawable-hdpi/bg_radar_rotate.png
new file mode 100755
index 0000000..c2330c7
Binary files /dev/null and b/res/drawable-hdpi/bg_radar_rotate.png differ
diff --git a/res/drawable-hdpi/bg_report_average.png b/res/drawable-hdpi/bg_report_average.png
new file mode 100755
index 0000000..3cec929
Binary files /dev/null and b/res/drawable-hdpi/bg_report_average.png differ
diff --git a/res/drawable-hdpi/bg_report_bar_base.png b/res/drawable-hdpi/bg_report_bar_base.png
new file mode 100755
index 0000000..336f353
Binary files /dev/null and b/res/drawable-hdpi/bg_report_bar_base.png differ
diff --git a/res/drawable-hdpi/bg_report_daily.png b/res/drawable-hdpi/bg_report_daily.png
new file mode 100755
index 0000000..460e74c
Binary files /dev/null and b/res/drawable-hdpi/bg_report_daily.png differ
diff --git a/res/drawable-hdpi/bg_report_weekly.png b/res/drawable-hdpi/bg_report_weekly.png
new file mode 100755
index 0000000..c758b1a
Binary files /dev/null and b/res/drawable-hdpi/bg_report_weekly.png differ
diff --git a/res/drawable-hdpi/bg_white.9.png b/res/drawable-hdpi/bg_white.9.png
new file mode 100755
index 0000000..d83447a
Binary files /dev/null and b/res/drawable-hdpi/bg_white.9.png differ
diff --git a/res/drawable-hdpi/ble_icon.png b/res/drawable-hdpi/ble_icon.png
new file mode 100755
index 0000000..0a5e463
Binary files /dev/null and b/res/drawable-hdpi/ble_icon.png differ
diff --git a/res/drawable-hdpi/box_fill_frame.png b/res/drawable-hdpi/box_fill_frame.png
new file mode 100755
index 0000000..3680579
Binary files /dev/null and b/res/drawable-hdpi/box_fill_frame.png differ
diff --git a/res/drawable-hdpi/btn_actbar_back.png b/res/drawable-hdpi/btn_actbar_back.png
new file mode 100755
index 0000000..62c9ad4
Binary files /dev/null and b/res/drawable-hdpi/btn_actbar_back.png differ
diff --git a/res/drawable-hdpi/btn_actbar_home.png b/res/drawable-hdpi/btn_actbar_home.png
new file mode 100755
index 0000000..1ebf97c
Binary files /dev/null and b/res/drawable-hdpi/btn_actbar_home.png differ
diff --git a/res/drawable-hdpi/btn_actbar_home_on.png b/res/drawable-hdpi/btn_actbar_home_on.png
new file mode 100755
index 0000000..6df26e3
Binary files /dev/null and b/res/drawable-hdpi/btn_actbar_home_on.png differ
diff --git a/res/drawable-hdpi/btn_actbar_profile.png b/res/drawable-hdpi/btn_actbar_profile.png
new file mode 100755
index 0000000..a5def8c
Binary files /dev/null and b/res/drawable-hdpi/btn_actbar_profile.png differ
diff --git a/res/drawable-hdpi/btn_actbar_profile_on.png b/res/drawable-hdpi/btn_actbar_profile_on.png
new file mode 100755
index 0000000..cc1f6a2
Binary files /dev/null and b/res/drawable-hdpi/btn_actbar_profile_on.png differ
diff --git a/res/drawable-hdpi/btn_actbar_report.png b/res/drawable-hdpi/btn_actbar_report.png
new file mode 100755
index 0000000..0f0c3e5
Binary files /dev/null and b/res/drawable-hdpi/btn_actbar_report.png differ
diff --git a/res/drawable-hdpi/btn_actbar_report_on.png b/res/drawable-hdpi/btn_actbar_report_on.png
new file mode 100755
index 0000000..fc602e7
Binary files /dev/null and b/res/drawable-hdpi/btn_actbar_report_on.png differ
diff --git a/res/drawable-hdpi/btn_actbar_share.png b/res/drawable-hdpi/btn_actbar_share.png
new file mode 100755
index 0000000..1d9bbb1
Binary files /dev/null and b/res/drawable-hdpi/btn_actbar_share.png differ
diff --git a/res/drawable-hdpi/btn_actbar_tracking.png b/res/drawable-hdpi/btn_actbar_tracking.png
new file mode 100755
index 0000000..f67335d
Binary files /dev/null and b/res/drawable-hdpi/btn_actbar_tracking.png differ
diff --git a/res/drawable-hdpi/btn_actbar_tracking_on.png b/res/drawable-hdpi/btn_actbar_tracking_on.png
new file mode 100755
index 0000000..dedb777
Binary files /dev/null and b/res/drawable-hdpi/btn_actbar_tracking_on.png differ
diff --git a/res/drawable-hdpi/btn_arrow_down.png b/res/drawable-hdpi/btn_arrow_down.png
new file mode 100755
index 0000000..3394b44
Binary files /dev/null and b/res/drawable-hdpi/btn_arrow_down.png differ
diff --git a/res/drawable-hdpi/btn_arrow_down_small.png b/res/drawable-hdpi/btn_arrow_down_small.png
new file mode 100755
index 0000000..71cd1a0
Binary files /dev/null and b/res/drawable-hdpi/btn_arrow_down_small.png differ
diff --git a/res/drawable-hdpi/btn_arrow_go.png b/res/drawable-hdpi/btn_arrow_go.png
new file mode 100755
index 0000000..cd82d00
Binary files /dev/null and b/res/drawable-hdpi/btn_arrow_go.png differ
diff --git a/res/drawable-hdpi/btn_arrow_go_big.png b/res/drawable-hdpi/btn_arrow_go_big.png
new file mode 100755
index 0000000..e65e80e
Binary files /dev/null and b/res/drawable-hdpi/btn_arrow_go_big.png differ
diff --git a/res/drawable-hdpi/btn_arrow_up.png b/res/drawable-hdpi/btn_arrow_up.png
new file mode 100755
index 0000000..30e3f1e
Binary files /dev/null and b/res/drawable-hdpi/btn_arrow_up.png differ
diff --git a/res/drawable-hdpi/btn_bg_green.9.png b/res/drawable-hdpi/btn_bg_green.9.png
new file mode 100755
index 0000000..06ac504
Binary files /dev/null and b/res/drawable-hdpi/btn_bg_green.9.png differ
diff --git a/res/drawable-hdpi/btn_bg_red.9.png b/res/drawable-hdpi/btn_bg_red.9.png
new file mode 100755
index 0000000..47cc443
Binary files /dev/null and b/res/drawable-hdpi/btn_bg_red.9.png differ
diff --git a/res/drawable-hdpi/btn_bg_red_frame.9.png b/res/drawable-hdpi/btn_bg_red_frame.9.png
new file mode 100755
index 0000000..abf6daf
Binary files /dev/null and b/res/drawable-hdpi/btn_bg_red_frame.9.png differ
diff --git a/res/drawable-hdpi/btn_bg_red_frame_half_left.9.png b/res/drawable-hdpi/btn_bg_red_frame_half_left.9.png
new file mode 100755
index 0000000..a63f4bc
Binary files /dev/null and b/res/drawable-hdpi/btn_bg_red_frame_half_left.9.png differ
diff --git a/res/drawable-hdpi/btn_bg_red_frame_half_right.9.png b/res/drawable-hdpi/btn_bg_red_frame_half_right.9.png
new file mode 100755
index 0000000..688aa6b
Binary files /dev/null and b/res/drawable-hdpi/btn_bg_red_frame_half_right.9.png differ
diff --git a/res/drawable-hdpi/btn_bg_red_half_left.9.png b/res/drawable-hdpi/btn_bg_red_half_left.9.png
new file mode 100755
index 0000000..3fe48be
Binary files /dev/null and b/res/drawable-hdpi/btn_bg_red_half_left.9.png differ
diff --git a/res/drawable-hdpi/btn_bg_red_half_right.9.png b/res/drawable-hdpi/btn_bg_red_half_right.9.png
new file mode 100755
index 0000000..3f67ae0
Binary files /dev/null and b/res/drawable-hdpi/btn_bg_red_half_right.9.png differ
diff --git a/res/drawable-hdpi/btn_bg_white.9.png b/res/drawable-hdpi/btn_bg_white.9.png
new file mode 100755
index 0000000..8c479b1
Binary files /dev/null and b/res/drawable-hdpi/btn_bg_white.9.png differ
diff --git a/res/drawable-hdpi/btn_bg_white_frame.9.png b/res/drawable-hdpi/btn_bg_white_frame.9.png
new file mode 100755
index 0000000..b8edd9e
Binary files /dev/null and b/res/drawable-hdpi/btn_bg_white_frame.9.png differ
diff --git a/res/drawable-hdpi/btn_funcbar_beep.png b/res/drawable-hdpi/btn_funcbar_beep.png
new file mode 100755
index 0000000..a4862dd
Binary files /dev/null and b/res/drawable-hdpi/btn_funcbar_beep.png differ
diff --git a/res/drawable-hdpi/btn_funcbar_beep_red.png b/res/drawable-hdpi/btn_funcbar_beep_red.png
new file mode 100755
index 0000000..d5e5284
Binary files /dev/null and b/res/drawable-hdpi/btn_funcbar_beep_red.png differ
diff --git a/res/drawable-hdpi/btn_funcbar_list.png b/res/drawable-hdpi/btn_funcbar_list.png
new file mode 100755
index 0000000..18bc9d4
Binary files /dev/null and b/res/drawable-hdpi/btn_funcbar_list.png differ
diff --git a/res/drawable-hdpi/btn_list_beep.png b/res/drawable-hdpi/btn_list_beep.png
new file mode 100755
index 0000000..7a705e8
Binary files /dev/null and b/res/drawable-hdpi/btn_list_beep.png differ
diff --git a/res/drawable-hdpi/btn_list_call.png b/res/drawable-hdpi/btn_list_call.png
new file mode 100755
index 0000000..a80299c
Binary files /dev/null and b/res/drawable-hdpi/btn_list_call.png differ
diff --git a/res/drawable-hdpi/btn_option.png b/res/drawable-hdpi/btn_option.png
new file mode 100755
index 0000000..e4e6891
Binary files /dev/null and b/res/drawable-hdpi/btn_option.png differ
diff --git a/res/drawable-hdpi/btn_option_actionbar.png b/res/drawable-hdpi/btn_option_actionbar.png
new file mode 100755
index 0000000..6f72b57
Binary files /dev/null and b/res/drawable-hdpi/btn_option_actionbar.png differ
diff --git a/res/drawable-hdpi/btn_settings.png b/res/drawable-hdpi/btn_settings.png
new file mode 100755
index 0000000..d9044fd
Binary files /dev/null and b/res/drawable-hdpi/btn_settings.png differ
diff --git a/res/drawable-hdpi/btn_switch_off.png b/res/drawable-hdpi/btn_switch_off.png
new file mode 100755
index 0000000..1b3da34
Binary files /dev/null and b/res/drawable-hdpi/btn_switch_off.png differ
diff --git a/res/drawable-hdpi/btn_switch_on.png b/res/drawable-hdpi/btn_switch_on.png
new file mode 100755
index 0000000..fc47f7b
Binary files /dev/null and b/res/drawable-hdpi/btn_switch_on.png differ
diff --git a/res/drawable-hdpi/ic_actbar_notice_no.png b/res/drawable-hdpi/ic_actbar_notice_no.png
new file mode 100755
index 0000000..5485ee9
Binary files /dev/null and b/res/drawable-hdpi/ic_actbar_notice_no.png differ
diff --git a/res/drawable-hdpi/ic_cross.png b/res/drawable-hdpi/ic_cross.png
new file mode 100755
index 0000000..5bed8e4
Binary files /dev/null and b/res/drawable-hdpi/ic_cross.png differ
diff --git a/res/drawable-hdpi/ic_home_art.png b/res/drawable-hdpi/ic_home_art.png
new file mode 100755
index 0000000..b9e51f1
Binary files /dev/null and b/res/drawable-hdpi/ic_home_art.png differ
diff --git a/res/drawable-hdpi/ic_home_classroom.png b/res/drawable-hdpi/ic_home_classroom.png
new file mode 100755
index 0000000..4d235f2
Binary files /dev/null and b/res/drawable-hdpi/ic_home_classroom.png differ
diff --git a/res/drawable-hdpi/ic_home_food.png b/res/drawable-hdpi/ic_home_food.png
new file mode 100755
index 0000000..eabbec9
Binary files /dev/null and b/res/drawable-hdpi/ic_home_food.png differ
diff --git a/res/drawable-hdpi/ic_home_music.png b/res/drawable-hdpi/ic_home_music.png
new file mode 100755
index 0000000..f2d8dbe
Binary files /dev/null and b/res/drawable-hdpi/ic_home_music.png differ
diff --git a/res/drawable-hdpi/ic_home_no_bg.9.png b/res/drawable-hdpi/ic_home_no_bg.9.png
new file mode 100755
index 0000000..368424c
Binary files /dev/null and b/res/drawable-hdpi/ic_home_no_bg.9.png differ
diff --git a/res/drawable-hdpi/ic_home_no_man.png b/res/drawable-hdpi/ic_home_no_man.png
new file mode 100755
index 0000000..c7151d1
Binary files /dev/null and b/res/drawable-hdpi/ic_home_no_man.png differ
diff --git a/res/drawable-hdpi/ic_home_pc.png b/res/drawable-hdpi/ic_home_pc.png
new file mode 100755
index 0000000..1a82583
Binary files /dev/null and b/res/drawable-hdpi/ic_home_pc.png differ
diff --git a/res/drawable-hdpi/ic_home_play.png b/res/drawable-hdpi/ic_home_play.png
new file mode 100755
index 0000000..d1c509a
Binary files /dev/null and b/res/drawable-hdpi/ic_home_play.png differ
diff --git a/res/drawable-hdpi/ic_home_schoolbus.png b/res/drawable-hdpi/ic_home_schoolbus.png
new file mode 100755
index 0000000..9444f6e
Binary files /dev/null and b/res/drawable-hdpi/ic_home_schoolbus.png differ
diff --git a/res/drawable-hdpi/ic_home_sleep.png b/res/drawable-hdpi/ic_home_sleep.png
new file mode 100755
index 0000000..40f04e3
Binary files /dev/null and b/res/drawable-hdpi/ic_home_sleep.png differ
diff --git a/res/drawable-hdpi/ic_launcher.png b/res/drawable-hdpi/ic_launcher.png
new file mode 100755
index 0000000..83a1a31
Binary files /dev/null and b/res/drawable-hdpi/ic_launcher.png differ
diff --git a/res/drawable-hdpi/ic_list_unread.png b/res/drawable-hdpi/ic_list_unread.png
new file mode 100755
index 0000000..1d299f1
Binary files /dev/null and b/res/drawable-hdpi/ic_list_unread.png differ
diff --git a/res/drawable-hdpi/ic_location_default.png b/res/drawable-hdpi/ic_location_default.png
new file mode 100755
index 0000000..ee880a5
Binary files /dev/null and b/res/drawable-hdpi/ic_location_default.png differ
diff --git a/res/drawable-hdpi/ic_login_bday.png b/res/drawable-hdpi/ic_login_bday.png
new file mode 100755
index 0000000..f4ed9a6
Binary files /dev/null and b/res/drawable-hdpi/ic_login_bday.png differ
diff --git a/res/drawable-hdpi/ic_login_email.png b/res/drawable-hdpi/ic_login_email.png
new file mode 100755
index 0000000..07b22c6
Binary files /dev/null and b/res/drawable-hdpi/ic_login_email.png differ
diff --git a/res/drawable-hdpi/ic_login_name.png b/res/drawable-hdpi/ic_login_name.png
new file mode 100755
index 0000000..badb38e
Binary files /dev/null and b/res/drawable-hdpi/ic_login_name.png differ
diff --git a/res/drawable-hdpi/ic_login_phone.png b/res/drawable-hdpi/ic_login_phone.png
new file mode 100755
index 0000000..2e42a69
Binary files /dev/null and b/res/drawable-hdpi/ic_login_phone.png differ
diff --git a/res/drawable-hdpi/ic_login_pw.png b/res/drawable-hdpi/ic_login_pw.png
new file mode 100755
index 0000000..2db3f9c
Binary files /dev/null and b/res/drawable-hdpi/ic_login_pw.png differ
diff --git a/res/drawable-hdpi/ic_notice_dot.png b/res/drawable-hdpi/ic_notice_dot.png
new file mode 100755
index 0000000..58eb5a2
Binary files /dev/null and b/res/drawable-hdpi/ic_notice_dot.png differ
diff --git a/res/drawable-hdpi/ic_paging_black.png b/res/drawable-hdpi/ic_paging_black.png
new file mode 100755
index 0000000..e79b3c0
Binary files /dev/null and b/res/drawable-hdpi/ic_paging_black.png differ
diff --git a/res/drawable-hdpi/ic_paging_red.png b/res/drawable-hdpi/ic_paging_red.png
new file mode 100755
index 0000000..1c7460d
Binary files /dev/null and b/res/drawable-hdpi/ic_paging_red.png differ
diff --git a/res/drawable-hdpi/ic_popover_alert.png b/res/drawable-hdpi/ic_popover_alert.png
new file mode 100755
index 0000000..7573c0a
Binary files /dev/null and b/res/drawable-hdpi/ic_popover_alert.png differ
diff --git a/res/drawable-hdpi/ic_popover_beep.png b/res/drawable-hdpi/ic_popover_beep.png
new file mode 100755
index 0000000..546a1d2
Binary files /dev/null and b/res/drawable-hdpi/ic_popover_beep.png differ
diff --git a/res/drawable-hdpi/ic_radar_dot.png b/res/drawable-hdpi/ic_radar_dot.png
new file mode 100755
index 0000000..19a587a
Binary files /dev/null and b/res/drawable-hdpi/ic_radar_dot.png differ
diff --git a/res/drawable-hdpi/ic_search.png b/res/drawable-hdpi/ic_search.png
new file mode 100755
index 0000000..59de344
Binary files /dev/null and b/res/drawable-hdpi/ic_search.png differ
diff --git a/res/drawable-hdpi/ic_search_red.png b/res/drawable-hdpi/ic_search_red.png
new file mode 100755
index 0000000..fd121f6
Binary files /dev/null and b/res/drawable-hdpi/ic_search_red.png differ
diff --git a/res/drawable-hdpi/ic_selected.png b/res/drawable-hdpi/ic_selected.png
new file mode 100755
index 0000000..b908661
Binary files /dev/null and b/res/drawable-hdpi/ic_selected.png differ
diff --git a/res/drawable-hdpi/ic_selected_off.png b/res/drawable-hdpi/ic_selected_off.png
new file mode 100755
index 0000000..bdc8b08
Binary files /dev/null and b/res/drawable-hdpi/ic_selected_off.png differ
diff --git a/res/drawable-hdpi/ic_shield_mode.png b/res/drawable-hdpi/ic_shield_mode.png
new file mode 100755
index 0000000..5d4ed13
Binary files /dev/null and b/res/drawable-hdpi/ic_shield_mode.png differ
diff --git a/res/drawable-hdpi/ic_stub.png b/res/drawable-hdpi/ic_stub.png
new file mode 100755
index 0000000..99bb7eb
Binary files /dev/null and b/res/drawable-hdpi/ic_stub.png differ
diff --git a/res/drawable-hdpi/ic_tick.png b/res/drawable-hdpi/ic_tick.png
new file mode 100755
index 0000000..c4c823e
Binary files /dev/null and b/res/drawable-hdpi/ic_tick.png differ
diff --git a/res/drawable-hdpi/ic_verify_cross.png b/res/drawable-hdpi/ic_verify_cross.png
new file mode 100755
index 0000000..d55a326
Binary files /dev/null and b/res/drawable-hdpi/ic_verify_cross.png differ
diff --git a/res/drawable-hdpi/ic_verify_tick.png b/res/drawable-hdpi/ic_verify_tick.png
new file mode 100755
index 0000000..c4208d5
Binary files /dev/null and b/res/drawable-hdpi/ic_verify_tick.png differ
diff --git a/res/drawable-hdpi/icon_avatar_dark.png b/res/drawable-hdpi/icon_avatar_dark.png
new file mode 100755
index 0000000..357229b
Binary files /dev/null and b/res/drawable-hdpi/icon_avatar_dark.png differ
diff --git a/res/drawable-hdpi/loading_bg.9.png b/res/drawable-hdpi/loading_bg.9.png
new file mode 100755
index 0000000..aa325e1
Binary files /dev/null and b/res/drawable-hdpi/loading_bg.9.png differ
diff --git a/res/drawable-hdpi/logo_cht.png b/res/drawable-hdpi/logo_cht.png
new file mode 100755
index 0000000..8293996
Binary files /dev/null and b/res/drawable-hdpi/logo_cht.png differ
diff --git a/res/drawable-hdpi/logo_en.png b/res/drawable-hdpi/logo_en.png
new file mode 100755
index 0000000..726e644
Binary files /dev/null and b/res/drawable-hdpi/logo_en.png differ
diff --git a/res/drawable-hdpi/logo_tmp.png b/res/drawable-hdpi/logo_tmp.png
new file mode 100755
index 0000000..4d39280
Binary files /dev/null and b/res/drawable-hdpi/logo_tmp.png differ
diff --git a/res/drawable-mdpi/ani_connecting_01.png b/res/drawable-mdpi/ani_connecting_01.png
new file mode 100755
index 0000000..81daec1
Binary files /dev/null and b/res/drawable-mdpi/ani_connecting_01.png differ
diff --git a/res/drawable-mdpi/ani_connecting_02.png b/res/drawable-mdpi/ani_connecting_02.png
new file mode 100755
index 0000000..2f9486a
Binary files /dev/null and b/res/drawable-mdpi/ani_connecting_02.png differ
diff --git a/res/drawable-mdpi/ani_connecting_03.png b/res/drawable-mdpi/ani_connecting_03.png
new file mode 100755
index 0000000..c8c0099
Binary files /dev/null and b/res/drawable-mdpi/ani_connecting_03.png differ
diff --git a/res/drawable-mdpi/ani_connecting_04.png b/res/drawable-mdpi/ani_connecting_04.png
new file mode 100755
index 0000000..8b09816
Binary files /dev/null and b/res/drawable-mdpi/ani_connecting_04.png differ
diff --git a/res/drawable-mdpi/ani_connecting_05.png b/res/drawable-mdpi/ani_connecting_05.png
new file mode 100755
index 0000000..f654791
Binary files /dev/null and b/res/drawable-mdpi/ani_connecting_05.png differ
diff --git a/res/drawable-mdpi/ani_connecting_06.png b/res/drawable-mdpi/ani_connecting_06.png
new file mode 100755
index 0000000..103b791
Binary files /dev/null and b/res/drawable-mdpi/ani_connecting_06.png differ
diff --git a/res/drawable-mdpi/ani_connecting_07.png b/res/drawable-mdpi/ani_connecting_07.png
new file mode 100755
index 0000000..e86edfd
Binary files /dev/null and b/res/drawable-mdpi/ani_connecting_07.png differ
diff --git a/res/drawable-mdpi/ani_connecting_08.png b/res/drawable-mdpi/ani_connecting_08.png
new file mode 100755
index 0000000..1f92929
Binary files /dev/null and b/res/drawable-mdpi/ani_connecting_08.png differ
diff --git a/res/drawable-mdpi/ani_connecting_09.png b/res/drawable-mdpi/ani_connecting_09.png
new file mode 100755
index 0000000..1d392b6
Binary files /dev/null and b/res/drawable-mdpi/ani_connecting_09.png differ
diff --git a/res/drawable-mdpi/ani_connecting_10.png b/res/drawable-mdpi/ani_connecting_10.png
new file mode 100755
index 0000000..4b1ec91
Binary files /dev/null and b/res/drawable-mdpi/ani_connecting_10.png differ
diff --git a/res/drawable-mdpi/ani_connecting_11.png b/res/drawable-mdpi/ani_connecting_11.png
new file mode 100755
index 0000000..ca8e71d
Binary files /dev/null and b/res/drawable-mdpi/ani_connecting_11.png differ
diff --git a/res/drawable-mdpi/ani_connecting_done.png b/res/drawable-mdpi/ani_connecting_done.png
new file mode 100755
index 0000000..fd7b9e3
Binary files /dev/null and b/res/drawable-mdpi/ani_connecting_done.png differ
diff --git a/res/drawable-mdpi/ani_connecting_fail.png b/res/drawable-mdpi/ani_connecting_fail.png
new file mode 100755
index 0000000..4d34371
Binary files /dev/null and b/res/drawable-mdpi/ani_connecting_fail.png differ
diff --git a/res/drawable-mdpi/bg_actbar_red.png b/res/drawable-mdpi/bg_actbar_red.png
new file mode 100755
index 0000000..48c9698
Binary files /dev/null and b/res/drawable-mdpi/bg_actbar_red.png differ
diff --git a/res/drawable-mdpi/bg_actbar_white.png b/res/drawable-mdpi/bg_actbar_white.png
new file mode 100755
index 0000000..0014391
Binary files /dev/null and b/res/drawable-mdpi/bg_actbar_white.png differ
diff --git a/res/drawable-mdpi/bg_funcbar_red.png b/res/drawable-mdpi/bg_funcbar_red.png
new file mode 100755
index 0000000..e26f61b
Binary files /dev/null and b/res/drawable-mdpi/bg_funcbar_red.png differ
diff --git a/res/drawable-mdpi/bg_radar_circle.png b/res/drawable-mdpi/bg_radar_circle.png
new file mode 100755
index 0000000..0243901
Binary files /dev/null and b/res/drawable-mdpi/bg_radar_circle.png differ
diff --git a/res/drawable-mdpi/bg_radar_rotate.png b/res/drawable-mdpi/bg_radar_rotate.png
new file mode 100755
index 0000000..d606d85
Binary files /dev/null and b/res/drawable-mdpi/bg_radar_rotate.png differ
diff --git a/res/drawable-mdpi/bg_report_average.png b/res/drawable-mdpi/bg_report_average.png
new file mode 100755
index 0000000..5aaa111
Binary files /dev/null and b/res/drawable-mdpi/bg_report_average.png differ
diff --git a/res/drawable-mdpi/bg_report_bar_base.png b/res/drawable-mdpi/bg_report_bar_base.png
new file mode 100755
index 0000000..be8cd29
Binary files /dev/null and b/res/drawable-mdpi/bg_report_bar_base.png differ
diff --git a/res/drawable-mdpi/bg_report_daily.png b/res/drawable-mdpi/bg_report_daily.png
new file mode 100755
index 0000000..4bea3bc
Binary files /dev/null and b/res/drawable-mdpi/bg_report_daily.png differ
diff --git a/res/drawable-mdpi/bg_report_weekly.png b/res/drawable-mdpi/bg_report_weekly.png
new file mode 100755
index 0000000..d21483a
Binary files /dev/null and b/res/drawable-mdpi/bg_report_weekly.png differ
diff --git a/res/drawable-mdpi/bg_white.9.png b/res/drawable-mdpi/bg_white.9.png
new file mode 100755
index 0000000..e88b876
Binary files /dev/null and b/res/drawable-mdpi/bg_white.9.png differ
diff --git a/res/drawable-mdpi/ble_icon.png b/res/drawable-mdpi/ble_icon.png
new file mode 100755
index 0000000..14166dd
Binary files /dev/null and b/res/drawable-mdpi/ble_icon.png differ
diff --git a/res/drawable-mdpi/box_fill_frame.png b/res/drawable-mdpi/box_fill_frame.png
new file mode 100755
index 0000000..2a2bbab
Binary files /dev/null and b/res/drawable-mdpi/box_fill_frame.png differ
diff --git a/res/drawable-mdpi/btn_actbar_back.png b/res/drawable-mdpi/btn_actbar_back.png
new file mode 100755
index 0000000..b99af51
Binary files /dev/null and b/res/drawable-mdpi/btn_actbar_back.png differ
diff --git a/res/drawable-mdpi/btn_actbar_home.png b/res/drawable-mdpi/btn_actbar_home.png
new file mode 100755
index 0000000..3068858
Binary files /dev/null and b/res/drawable-mdpi/btn_actbar_home.png differ
diff --git a/res/drawable-mdpi/btn_actbar_home_on.png b/res/drawable-mdpi/btn_actbar_home_on.png
new file mode 100755
index 0000000..a239b13
Binary files /dev/null and b/res/drawable-mdpi/btn_actbar_home_on.png differ
diff --git a/res/drawable-mdpi/btn_actbar_profile.png b/res/drawable-mdpi/btn_actbar_profile.png
new file mode 100755
index 0000000..6759877
Binary files /dev/null and b/res/drawable-mdpi/btn_actbar_profile.png differ
diff --git a/res/drawable-mdpi/btn_actbar_profile_on.png b/res/drawable-mdpi/btn_actbar_profile_on.png
new file mode 100755
index 0000000..054b186
Binary files /dev/null and b/res/drawable-mdpi/btn_actbar_profile_on.png differ
diff --git a/res/drawable-mdpi/btn_actbar_report.png b/res/drawable-mdpi/btn_actbar_report.png
new file mode 100755
index 0000000..abdaf57
Binary files /dev/null and b/res/drawable-mdpi/btn_actbar_report.png differ
diff --git a/res/drawable-mdpi/btn_actbar_report_on.png b/res/drawable-mdpi/btn_actbar_report_on.png
new file mode 100755
index 0000000..6d894b9
Binary files /dev/null and b/res/drawable-mdpi/btn_actbar_report_on.png differ
diff --git a/res/drawable-mdpi/btn_actbar_share.png b/res/drawable-mdpi/btn_actbar_share.png
new file mode 100755
index 0000000..2a6eea0
Binary files /dev/null and b/res/drawable-mdpi/btn_actbar_share.png differ
diff --git a/res/drawable-mdpi/btn_actbar_tracking.png b/res/drawable-mdpi/btn_actbar_tracking.png
new file mode 100755
index 0000000..fc7ec6a
Binary files /dev/null and b/res/drawable-mdpi/btn_actbar_tracking.png differ
diff --git a/res/drawable-mdpi/btn_actbar_tracking_on.png b/res/drawable-mdpi/btn_actbar_tracking_on.png
new file mode 100755
index 0000000..551ae88
Binary files /dev/null and b/res/drawable-mdpi/btn_actbar_tracking_on.png differ
diff --git a/res/drawable-mdpi/btn_arrow_down.png b/res/drawable-mdpi/btn_arrow_down.png
new file mode 100755
index 0000000..6219043
Binary files /dev/null and b/res/drawable-mdpi/btn_arrow_down.png differ
diff --git a/res/drawable-mdpi/btn_arrow_down_small.png b/res/drawable-mdpi/btn_arrow_down_small.png
new file mode 100755
index 0000000..337168b
Binary files /dev/null and b/res/drawable-mdpi/btn_arrow_down_small.png differ
diff --git a/res/drawable-mdpi/btn_arrow_go.png b/res/drawable-mdpi/btn_arrow_go.png
new file mode 100755
index 0000000..81c1905
Binary files /dev/null and b/res/drawable-mdpi/btn_arrow_go.png differ
diff --git a/res/drawable-mdpi/btn_arrow_go_big.png b/res/drawable-mdpi/btn_arrow_go_big.png
new file mode 100755
index 0000000..6152acd
Binary files /dev/null and b/res/drawable-mdpi/btn_arrow_go_big.png differ
diff --git a/res/drawable-mdpi/btn_arrow_go_big_left.png b/res/drawable-mdpi/btn_arrow_go_big_left.png
new file mode 100755
index 0000000..1449c90
Binary files /dev/null and b/res/drawable-mdpi/btn_arrow_go_big_left.png differ
diff --git a/res/drawable-mdpi/btn_arrow_up.png b/res/drawable-mdpi/btn_arrow_up.png
new file mode 100755
index 0000000..f65f210
Binary files /dev/null and b/res/drawable-mdpi/btn_arrow_up.png differ
diff --git a/res/drawable-mdpi/btn_bg_green.9.png b/res/drawable-mdpi/btn_bg_green.9.png
new file mode 100755
index 0000000..798a0c1
Binary files /dev/null and b/res/drawable-mdpi/btn_bg_green.9.png differ
diff --git a/res/drawable-mdpi/btn_bg_red.9.png b/res/drawable-mdpi/btn_bg_red.9.png
new file mode 100755
index 0000000..8acf9cc
Binary files /dev/null and b/res/drawable-mdpi/btn_bg_red.9.png differ
diff --git a/res/drawable-mdpi/btn_bg_red_frame.9.png b/res/drawable-mdpi/btn_bg_red_frame.9.png
new file mode 100755
index 0000000..446d867
Binary files /dev/null and b/res/drawable-mdpi/btn_bg_red_frame.9.png differ
diff --git a/res/drawable-mdpi/btn_bg_red_frame_half_left.9.png b/res/drawable-mdpi/btn_bg_red_frame_half_left.9.png
new file mode 100755
index 0000000..88770a3
Binary files /dev/null and b/res/drawable-mdpi/btn_bg_red_frame_half_left.9.png differ
diff --git a/res/drawable-mdpi/btn_bg_red_frame_half_right.9.png b/res/drawable-mdpi/btn_bg_red_frame_half_right.9.png
new file mode 100755
index 0000000..dfe309a
Binary files /dev/null and b/res/drawable-mdpi/btn_bg_red_frame_half_right.9.png differ
diff --git a/res/drawable-mdpi/btn_bg_red_half_left.9.png b/res/drawable-mdpi/btn_bg_red_half_left.9.png
new file mode 100755
index 0000000..8697397
Binary files /dev/null and b/res/drawable-mdpi/btn_bg_red_half_left.9.png differ
diff --git a/res/drawable-mdpi/btn_bg_red_half_right.9.png b/res/drawable-mdpi/btn_bg_red_half_right.9.png
new file mode 100755
index 0000000..e271bb0
Binary files /dev/null and b/res/drawable-mdpi/btn_bg_red_half_right.9.png differ
diff --git a/res/drawable-mdpi/btn_bg_white.9.png b/res/drawable-mdpi/btn_bg_white.9.png
new file mode 100755
index 0000000..e1d6cb6
Binary files /dev/null and b/res/drawable-mdpi/btn_bg_white.9.png differ
diff --git a/res/drawable-mdpi/btn_bg_white_frame.9.png b/res/drawable-mdpi/btn_bg_white_frame.9.png
new file mode 100755
index 0000000..659bffb
Binary files /dev/null and b/res/drawable-mdpi/btn_bg_white_frame.9.png differ
diff --git a/res/drawable-mdpi/btn_funcbar_beep.png b/res/drawable-mdpi/btn_funcbar_beep.png
new file mode 100755
index 0000000..fec02c5
Binary files /dev/null and b/res/drawable-mdpi/btn_funcbar_beep.png differ
diff --git a/res/drawable-mdpi/btn_funcbar_beep_red.png b/res/drawable-mdpi/btn_funcbar_beep_red.png
new file mode 100755
index 0000000..76f8d52
Binary files /dev/null and b/res/drawable-mdpi/btn_funcbar_beep_red.png differ
diff --git a/res/drawable-mdpi/btn_funcbar_list.png b/res/drawable-mdpi/btn_funcbar_list.png
new file mode 100755
index 0000000..3f25ccd
Binary files /dev/null and b/res/drawable-mdpi/btn_funcbar_list.png differ
diff --git a/res/drawable-mdpi/btn_list_beep.png b/res/drawable-mdpi/btn_list_beep.png
new file mode 100755
index 0000000..7888eb4
Binary files /dev/null and b/res/drawable-mdpi/btn_list_beep.png differ
diff --git a/res/drawable-mdpi/btn_list_call.png b/res/drawable-mdpi/btn_list_call.png
new file mode 100755
index 0000000..1d7c201
Binary files /dev/null and b/res/drawable-mdpi/btn_list_call.png differ
diff --git a/res/drawable-mdpi/btn_option.png b/res/drawable-mdpi/btn_option.png
new file mode 100755
index 0000000..73843b8
Binary files /dev/null and b/res/drawable-mdpi/btn_option.png differ
diff --git a/res/drawable-mdpi/btn_option_actionbar.png b/res/drawable-mdpi/btn_option_actionbar.png
new file mode 100755
index 0000000..9942848
Binary files /dev/null and b/res/drawable-mdpi/btn_option_actionbar.png differ
diff --git a/res/drawable-mdpi/btn_settings.png b/res/drawable-mdpi/btn_settings.png
new file mode 100755
index 0000000..7574ff5
Binary files /dev/null and b/res/drawable-mdpi/btn_settings.png differ
diff --git a/res/drawable-mdpi/btn_switch_off.png b/res/drawable-mdpi/btn_switch_off.png
new file mode 100755
index 0000000..b84c0fe
Binary files /dev/null and b/res/drawable-mdpi/btn_switch_off.png differ
diff --git a/res/drawable-mdpi/btn_switch_on.png b/res/drawable-mdpi/btn_switch_on.png
new file mode 100755
index 0000000..6b0d150
Binary files /dev/null and b/res/drawable-mdpi/btn_switch_on.png differ
diff --git a/res/drawable-mdpi/ic_actbar_notice_no.png b/res/drawable-mdpi/ic_actbar_notice_no.png
new file mode 100755
index 0000000..a892ff5
Binary files /dev/null and b/res/drawable-mdpi/ic_actbar_notice_no.png differ
diff --git a/res/drawable-mdpi/ic_cross.png b/res/drawable-mdpi/ic_cross.png
new file mode 100755
index 0000000..e8cee6a
Binary files /dev/null and b/res/drawable-mdpi/ic_cross.png differ
diff --git a/res/drawable-mdpi/ic_home_art.png b/res/drawable-mdpi/ic_home_art.png
new file mode 100755
index 0000000..e991e6f
Binary files /dev/null and b/res/drawable-mdpi/ic_home_art.png differ
diff --git a/res/drawable-mdpi/ic_home_classroom.png b/res/drawable-mdpi/ic_home_classroom.png
new file mode 100755
index 0000000..6217b6b
Binary files /dev/null and b/res/drawable-mdpi/ic_home_classroom.png differ
diff --git a/res/drawable-mdpi/ic_home_food.png b/res/drawable-mdpi/ic_home_food.png
new file mode 100755
index 0000000..5f4ff3d
Binary files /dev/null and b/res/drawable-mdpi/ic_home_food.png differ
diff --git a/res/drawable-mdpi/ic_home_music.png b/res/drawable-mdpi/ic_home_music.png
new file mode 100755
index 0000000..db16acb
Binary files /dev/null and b/res/drawable-mdpi/ic_home_music.png differ
diff --git a/res/drawable-mdpi/ic_home_no_man.png b/res/drawable-mdpi/ic_home_no_man.png
new file mode 100755
index 0000000..4dc1bf7
Binary files /dev/null and b/res/drawable-mdpi/ic_home_no_man.png differ
diff --git a/res/drawable-mdpi/ic_home_pc.png b/res/drawable-mdpi/ic_home_pc.png
new file mode 100755
index 0000000..df41c86
Binary files /dev/null and b/res/drawable-mdpi/ic_home_pc.png differ
diff --git a/res/drawable-mdpi/ic_home_play.png b/res/drawable-mdpi/ic_home_play.png
new file mode 100755
index 0000000..d679cd5
Binary files /dev/null and b/res/drawable-mdpi/ic_home_play.png differ
diff --git a/res/drawable-mdpi/ic_home_schoolbus.png b/res/drawable-mdpi/ic_home_schoolbus.png
new file mode 100755
index 0000000..a09ff01
Binary files /dev/null and b/res/drawable-mdpi/ic_home_schoolbus.png differ
diff --git a/res/drawable-mdpi/ic_home_sleep.png b/res/drawable-mdpi/ic_home_sleep.png
new file mode 100755
index 0000000..61f8854
Binary files /dev/null and b/res/drawable-mdpi/ic_home_sleep.png differ
diff --git a/res/drawable-mdpi/ic_launcher.png b/res/drawable-mdpi/ic_launcher.png
new file mode 100755
index 0000000..5952e78
Binary files /dev/null and b/res/drawable-mdpi/ic_launcher.png differ
diff --git a/res/drawable-mdpi/ic_list_unread.png b/res/drawable-mdpi/ic_list_unread.png
new file mode 100755
index 0000000..cbccfaa
Binary files /dev/null and b/res/drawable-mdpi/ic_list_unread.png differ
diff --git a/res/drawable-mdpi/ic_location_default.png b/res/drawable-mdpi/ic_location_default.png
new file mode 100755
index 0000000..740de99
Binary files /dev/null and b/res/drawable-mdpi/ic_location_default.png differ
diff --git a/res/drawable-mdpi/ic_login_bday.png b/res/drawable-mdpi/ic_login_bday.png
new file mode 100755
index 0000000..756d626
Binary files /dev/null and b/res/drawable-mdpi/ic_login_bday.png differ
diff --git a/res/drawable-mdpi/ic_login_email.png b/res/drawable-mdpi/ic_login_email.png
new file mode 100755
index 0000000..e48aed9
Binary files /dev/null and b/res/drawable-mdpi/ic_login_email.png differ
diff --git a/res/drawable-mdpi/ic_login_name.png b/res/drawable-mdpi/ic_login_name.png
new file mode 100755
index 0000000..ee337d0
Binary files /dev/null and b/res/drawable-mdpi/ic_login_name.png differ
diff --git a/res/drawable-mdpi/ic_login_phone.png b/res/drawable-mdpi/ic_login_phone.png
new file mode 100755
index 0000000..06a6c06
Binary files /dev/null and b/res/drawable-mdpi/ic_login_phone.png differ
diff --git a/res/drawable-mdpi/ic_login_pw.png b/res/drawable-mdpi/ic_login_pw.png
new file mode 100755
index 0000000..d70e46d
Binary files /dev/null and b/res/drawable-mdpi/ic_login_pw.png differ
diff --git a/res/drawable-mdpi/ic_notice_dot.png b/res/drawable-mdpi/ic_notice_dot.png
new file mode 100755
index 0000000..5bd7cb3
Binary files /dev/null and b/res/drawable-mdpi/ic_notice_dot.png differ
diff --git a/res/drawable-mdpi/ic_paging_black.png b/res/drawable-mdpi/ic_paging_black.png
new file mode 100755
index 0000000..1038de0
Binary files /dev/null and b/res/drawable-mdpi/ic_paging_black.png differ
diff --git a/res/drawable-mdpi/ic_paging_red.png b/res/drawable-mdpi/ic_paging_red.png
new file mode 100755
index 0000000..857951a
Binary files /dev/null and b/res/drawable-mdpi/ic_paging_red.png differ
diff --git a/res/drawable-mdpi/ic_popover_alert.png b/res/drawable-mdpi/ic_popover_alert.png
new file mode 100755
index 0000000..669ee73
Binary files /dev/null and b/res/drawable-mdpi/ic_popover_alert.png differ
diff --git a/res/drawable-mdpi/ic_popover_beep.png b/res/drawable-mdpi/ic_popover_beep.png
new file mode 100755
index 0000000..5f5b125
Binary files /dev/null and b/res/drawable-mdpi/ic_popover_beep.png differ
diff --git a/res/drawable-mdpi/ic_radar_dot.png b/res/drawable-mdpi/ic_radar_dot.png
new file mode 100755
index 0000000..861ffa3
Binary files /dev/null and b/res/drawable-mdpi/ic_radar_dot.png differ
diff --git a/res/drawable-mdpi/ic_search_red.png b/res/drawable-mdpi/ic_search_red.png
new file mode 100755
index 0000000..8c7df2c
Binary files /dev/null and b/res/drawable-mdpi/ic_search_red.png differ
diff --git a/res/drawable-mdpi/ic_selected.png b/res/drawable-mdpi/ic_selected.png
new file mode 100755
index 0000000..656c6ab
Binary files /dev/null and b/res/drawable-mdpi/ic_selected.png differ
diff --git a/res/drawable-mdpi/ic_selected_off.png b/res/drawable-mdpi/ic_selected_off.png
new file mode 100755
index 0000000..adc38f9
Binary files /dev/null and b/res/drawable-mdpi/ic_selected_off.png differ
diff --git a/res/drawable-mdpi/ic_shield_mode.png b/res/drawable-mdpi/ic_shield_mode.png
new file mode 100755
index 0000000..82a917c
Binary files /dev/null and b/res/drawable-mdpi/ic_shield_mode.png differ
diff --git a/res/drawable-mdpi/ic_tick.png b/res/drawable-mdpi/ic_tick.png
new file mode 100755
index 0000000..3d6e683
Binary files /dev/null and b/res/drawable-mdpi/ic_tick.png differ
diff --git a/res/drawable-mdpi/ic_verify_cross.png b/res/drawable-mdpi/ic_verify_cross.png
new file mode 100755
index 0000000..7533cc7
Binary files /dev/null and b/res/drawable-mdpi/ic_verify_cross.png differ
diff --git a/res/drawable-mdpi/ic_verify_tick.png b/res/drawable-mdpi/ic_verify_tick.png
new file mode 100755
index 0000000..7ea7b61
Binary files /dev/null and b/res/drawable-mdpi/ic_verify_tick.png differ
diff --git a/res/drawable-mdpi/logo_cht.png b/res/drawable-mdpi/logo_cht.png
new file mode 100755
index 0000000..8640512
Binary files /dev/null and b/res/drawable-mdpi/logo_cht.png differ
diff --git a/res/drawable-mdpi/logo_en.png b/res/drawable-mdpi/logo_en.png
new file mode 100755
index 0000000..3cab011
Binary files /dev/null and b/res/drawable-mdpi/logo_en.png differ
diff --git a/res/drawable-mdpi/notification_details1.jpg b/res/drawable-mdpi/notification_details1.jpg
new file mode 100755
index 0000000..6be29f3
Binary files /dev/null and b/res/drawable-mdpi/notification_details1.jpg differ
diff --git a/res/drawable-mdpi/notification_details2.jpg b/res/drawable-mdpi/notification_details2.jpg
new file mode 100755
index 0000000..d532934
Binary files /dev/null and b/res/drawable-mdpi/notification_details2.jpg differ
diff --git a/res/drawable-mdpi/notification_details3.jpg b/res/drawable-mdpi/notification_details3.jpg
new file mode 100755
index 0000000..2de3750
Binary files /dev/null and b/res/drawable-mdpi/notification_details3.jpg differ
diff --git a/res/drawable-nodpi/activity_details_img1.png b/res/drawable-nodpi/activity_details_img1.png
new file mode 100755
index 0000000..21dbe95
Binary files /dev/null and b/res/drawable-nodpi/activity_details_img1.png differ
diff --git a/res/drawable-nodpi/activity_details_img2.jpg b/res/drawable-nodpi/activity_details_img2.jpg
new file mode 100755
index 0000000..4bd7b30
Binary files /dev/null and b/res/drawable-nodpi/activity_details_img2.jpg differ
diff --git a/res/drawable-nodpi/activity_details_img3.jpg b/res/drawable-nodpi/activity_details_img3.jpg
new file mode 100755
index 0000000..0cf07c3
Binary files /dev/null and b/res/drawable-nodpi/activity_details_img3.jpg differ
diff --git a/res/drawable-nodpi/head_img2.jpeg b/res/drawable-nodpi/head_img2.jpeg
new file mode 100755
index 0000000..43e195e
Binary files /dev/null and b/res/drawable-nodpi/head_img2.jpeg differ
diff --git a/res/drawable-nodpi/head_img3.jpg b/res/drawable-nodpi/head_img3.jpg
new file mode 100755
index 0000000..0383fc3
Binary files /dev/null and b/res/drawable-nodpi/head_img3.jpg differ
diff --git a/res/drawable-xhdpi/ani_connecting_01.png b/res/drawable-xhdpi/ani_connecting_01.png
new file mode 100755
index 0000000..8c16d16
Binary files /dev/null and b/res/drawable-xhdpi/ani_connecting_01.png differ
diff --git a/res/drawable-xhdpi/ani_connecting_02.png b/res/drawable-xhdpi/ani_connecting_02.png
new file mode 100755
index 0000000..8a415d8
Binary files /dev/null and b/res/drawable-xhdpi/ani_connecting_02.png differ
diff --git a/res/drawable-xhdpi/ani_connecting_03.png b/res/drawable-xhdpi/ani_connecting_03.png
new file mode 100755
index 0000000..a0f0f57
Binary files /dev/null and b/res/drawable-xhdpi/ani_connecting_03.png differ
diff --git a/res/drawable-xhdpi/ani_connecting_04.png b/res/drawable-xhdpi/ani_connecting_04.png
new file mode 100755
index 0000000..6bcee81
Binary files /dev/null and b/res/drawable-xhdpi/ani_connecting_04.png differ
diff --git a/res/drawable-xhdpi/ani_connecting_05.png b/res/drawable-xhdpi/ani_connecting_05.png
new file mode 100755
index 0000000..ae3215e
Binary files /dev/null and b/res/drawable-xhdpi/ani_connecting_05.png differ
diff --git a/res/drawable-xhdpi/ani_connecting_06.png b/res/drawable-xhdpi/ani_connecting_06.png
new file mode 100755
index 0000000..b74e217
Binary files /dev/null and b/res/drawable-xhdpi/ani_connecting_06.png differ
diff --git a/res/drawable-xhdpi/ani_connecting_07.png b/res/drawable-xhdpi/ani_connecting_07.png
new file mode 100755
index 0000000..434a091
Binary files /dev/null and b/res/drawable-xhdpi/ani_connecting_07.png differ
diff --git a/res/drawable-xhdpi/ani_connecting_08.png b/res/drawable-xhdpi/ani_connecting_08.png
new file mode 100755
index 0000000..fcc61e7
Binary files /dev/null and b/res/drawable-xhdpi/ani_connecting_08.png differ
diff --git a/res/drawable-xhdpi/ani_connecting_09.png b/res/drawable-xhdpi/ani_connecting_09.png
new file mode 100755
index 0000000..3e17d9d
Binary files /dev/null and b/res/drawable-xhdpi/ani_connecting_09.png differ
diff --git a/res/drawable-xhdpi/ani_connecting_10.png b/res/drawable-xhdpi/ani_connecting_10.png
new file mode 100755
index 0000000..36d6875
Binary files /dev/null and b/res/drawable-xhdpi/ani_connecting_10.png differ
diff --git a/res/drawable-xhdpi/ani_connecting_11.png b/res/drawable-xhdpi/ani_connecting_11.png
new file mode 100755
index 0000000..2fad3ef
Binary files /dev/null and b/res/drawable-xhdpi/ani_connecting_11.png differ
diff --git a/res/drawable-xhdpi/ani_connecting_done.png b/res/drawable-xhdpi/ani_connecting_done.png
new file mode 100755
index 0000000..bbf9c3d
Binary files /dev/null and b/res/drawable-xhdpi/ani_connecting_done.png differ
diff --git a/res/drawable-xhdpi/ani_connecting_fail.png b/res/drawable-xhdpi/ani_connecting_fail.png
new file mode 100755
index 0000000..ec69866
Binary files /dev/null and b/res/drawable-xhdpi/ani_connecting_fail.png differ
diff --git a/res/drawable-xhdpi/bg_actbar_red.png b/res/drawable-xhdpi/bg_actbar_red.png
new file mode 100755
index 0000000..3ed3636
Binary files /dev/null and b/res/drawable-xhdpi/bg_actbar_red.png differ
diff --git a/res/drawable-xhdpi/bg_actbar_white.png b/res/drawable-xhdpi/bg_actbar_white.png
new file mode 100755
index 0000000..d36d09d
Binary files /dev/null and b/res/drawable-xhdpi/bg_actbar_white.png differ
diff --git a/res/drawable-xhdpi/bg_funcbar_red.png b/res/drawable-xhdpi/bg_funcbar_red.png
new file mode 100755
index 0000000..cd496fd
Binary files /dev/null and b/res/drawable-xhdpi/bg_funcbar_red.png differ
diff --git a/res/drawable-xhdpi/bg_radar_circle.png b/res/drawable-xhdpi/bg_radar_circle.png
new file mode 100755
index 0000000..f884c34
Binary files /dev/null and b/res/drawable-xhdpi/bg_radar_circle.png differ
diff --git a/res/drawable-xhdpi/bg_radar_rotate.png b/res/drawable-xhdpi/bg_radar_rotate.png
new file mode 100755
index 0000000..a87ae95
Binary files /dev/null and b/res/drawable-xhdpi/bg_radar_rotate.png differ
diff --git a/res/drawable-xhdpi/bg_report_average.png b/res/drawable-xhdpi/bg_report_average.png
new file mode 100755
index 0000000..1a5093c
Binary files /dev/null and b/res/drawable-xhdpi/bg_report_average.png differ
diff --git a/res/drawable-xhdpi/bg_report_bar_base.png b/res/drawable-xhdpi/bg_report_bar_base.png
new file mode 100755
index 0000000..f24c54e
Binary files /dev/null and b/res/drawable-xhdpi/bg_report_bar_base.png differ
diff --git a/res/drawable-xhdpi/bg_report_daily.png b/res/drawable-xhdpi/bg_report_daily.png
new file mode 100755
index 0000000..44fae9f
Binary files /dev/null and b/res/drawable-xhdpi/bg_report_daily.png differ
diff --git a/res/drawable-xhdpi/bg_report_weekly.png b/res/drawable-xhdpi/bg_report_weekly.png
new file mode 100755
index 0000000..791adf6
Binary files /dev/null and b/res/drawable-xhdpi/bg_report_weekly.png differ
diff --git a/res/drawable-xhdpi/bg_white.9.png b/res/drawable-xhdpi/bg_white.9.png
new file mode 100755
index 0000000..9105f73
Binary files /dev/null and b/res/drawable-xhdpi/bg_white.9.png differ
diff --git a/res/drawable-xhdpi/ble_icon.png b/res/drawable-xhdpi/ble_icon.png
new file mode 100755
index 0000000..9ed97ae
Binary files /dev/null and b/res/drawable-xhdpi/ble_icon.png differ
diff --git a/res/drawable-xhdpi/box_fill_frame.png b/res/drawable-xhdpi/box_fill_frame.png
new file mode 100755
index 0000000..5bb541b
Binary files /dev/null and b/res/drawable-xhdpi/box_fill_frame.png differ
diff --git a/res/drawable-xhdpi/btn_actbar_back.png b/res/drawable-xhdpi/btn_actbar_back.png
new file mode 100755
index 0000000..b2f72ba
Binary files /dev/null and b/res/drawable-xhdpi/btn_actbar_back.png differ
diff --git a/res/drawable-xhdpi/btn_actbar_home.png b/res/drawable-xhdpi/btn_actbar_home.png
new file mode 100755
index 0000000..1dfe0ab
Binary files /dev/null and b/res/drawable-xhdpi/btn_actbar_home.png differ
diff --git a/res/drawable-xhdpi/btn_actbar_home_on.png b/res/drawable-xhdpi/btn_actbar_home_on.png
new file mode 100755
index 0000000..9e7e08d
Binary files /dev/null and b/res/drawable-xhdpi/btn_actbar_home_on.png differ
diff --git a/res/drawable-xhdpi/btn_actbar_profile.png b/res/drawable-xhdpi/btn_actbar_profile.png
new file mode 100755
index 0000000..3d95379
Binary files /dev/null and b/res/drawable-xhdpi/btn_actbar_profile.png differ
diff --git a/res/drawable-xhdpi/btn_actbar_profile_on.png b/res/drawable-xhdpi/btn_actbar_profile_on.png
new file mode 100755
index 0000000..487082f
Binary files /dev/null and b/res/drawable-xhdpi/btn_actbar_profile_on.png differ
diff --git a/res/drawable-xhdpi/btn_actbar_report.png b/res/drawable-xhdpi/btn_actbar_report.png
new file mode 100755
index 0000000..bbb5060
Binary files /dev/null and b/res/drawable-xhdpi/btn_actbar_report.png differ
diff --git a/res/drawable-xhdpi/btn_actbar_report_on.png b/res/drawable-xhdpi/btn_actbar_report_on.png
new file mode 100755
index 0000000..db5f152
Binary files /dev/null and b/res/drawable-xhdpi/btn_actbar_report_on.png differ
diff --git a/res/drawable-xhdpi/btn_actbar_share.png b/res/drawable-xhdpi/btn_actbar_share.png
new file mode 100755
index 0000000..63671bf
Binary files /dev/null and b/res/drawable-xhdpi/btn_actbar_share.png differ
diff --git a/res/drawable-xhdpi/btn_actbar_tracking.png b/res/drawable-xhdpi/btn_actbar_tracking.png
new file mode 100755
index 0000000..439895c
Binary files /dev/null and b/res/drawable-xhdpi/btn_actbar_tracking.png differ
diff --git a/res/drawable-xhdpi/btn_actbar_tracking_on.png b/res/drawable-xhdpi/btn_actbar_tracking_on.png
new file mode 100755
index 0000000..68918ef
Binary files /dev/null and b/res/drawable-xhdpi/btn_actbar_tracking_on.png differ
diff --git a/res/drawable-xhdpi/btn_arrow_down.png b/res/drawable-xhdpi/btn_arrow_down.png
new file mode 100755
index 0000000..22d421f
Binary files /dev/null and b/res/drawable-xhdpi/btn_arrow_down.png differ
diff --git a/res/drawable-xhdpi/btn_arrow_down_small.png b/res/drawable-xhdpi/btn_arrow_down_small.png
new file mode 100755
index 0000000..9f8236a
Binary files /dev/null and b/res/drawable-xhdpi/btn_arrow_down_small.png differ
diff --git a/res/drawable-xhdpi/btn_arrow_go.png b/res/drawable-xhdpi/btn_arrow_go.png
new file mode 100755
index 0000000..f601c37
Binary files /dev/null and b/res/drawable-xhdpi/btn_arrow_go.png differ
diff --git a/res/drawable-xhdpi/btn_arrow_go_big.png b/res/drawable-xhdpi/btn_arrow_go_big.png
new file mode 100755
index 0000000..72fbf48
Binary files /dev/null and b/res/drawable-xhdpi/btn_arrow_go_big.png differ
diff --git a/res/drawable-xhdpi/btn_arrow_up.png b/res/drawable-xhdpi/btn_arrow_up.png
new file mode 100755
index 0000000..d0160b7
Binary files /dev/null and b/res/drawable-xhdpi/btn_arrow_up.png differ
diff --git a/res/drawable-xhdpi/btn_bg_green.9.png b/res/drawable-xhdpi/btn_bg_green.9.png
new file mode 100755
index 0000000..540890e
Binary files /dev/null and b/res/drawable-xhdpi/btn_bg_green.9.png differ
diff --git a/res/drawable-xhdpi/btn_bg_red.9.png b/res/drawable-xhdpi/btn_bg_red.9.png
new file mode 100755
index 0000000..8fab10c
Binary files /dev/null and b/res/drawable-xhdpi/btn_bg_red.9.png differ
diff --git a/res/drawable-xhdpi/btn_bg_red_frame.9.png b/res/drawable-xhdpi/btn_bg_red_frame.9.png
new file mode 100755
index 0000000..8599a7b
Binary files /dev/null and b/res/drawable-xhdpi/btn_bg_red_frame.9.png differ
diff --git a/res/drawable-xhdpi/btn_bg_red_frame_half_left.9.png b/res/drawable-xhdpi/btn_bg_red_frame_half_left.9.png
new file mode 100755
index 0000000..45149e0
Binary files /dev/null and b/res/drawable-xhdpi/btn_bg_red_frame_half_left.9.png differ
diff --git a/res/drawable-xhdpi/btn_bg_red_frame_half_right.9.png b/res/drawable-xhdpi/btn_bg_red_frame_half_right.9.png
new file mode 100755
index 0000000..0252fd6
Binary files /dev/null and b/res/drawable-xhdpi/btn_bg_red_frame_half_right.9.png differ
diff --git a/res/drawable-xhdpi/btn_bg_red_half_left.9.png b/res/drawable-xhdpi/btn_bg_red_half_left.9.png
new file mode 100755
index 0000000..3f1fcc1
Binary files /dev/null and b/res/drawable-xhdpi/btn_bg_red_half_left.9.png differ
diff --git a/res/drawable-xhdpi/btn_bg_red_half_right.9.png b/res/drawable-xhdpi/btn_bg_red_half_right.9.png
new file mode 100755
index 0000000..a45c509
Binary files /dev/null and b/res/drawable-xhdpi/btn_bg_red_half_right.9.png differ
diff --git a/res/drawable-xhdpi/btn_bg_white.9.png b/res/drawable-xhdpi/btn_bg_white.9.png
new file mode 100755
index 0000000..e40c203
Binary files /dev/null and b/res/drawable-xhdpi/btn_bg_white.9.png differ
diff --git a/res/drawable-xhdpi/btn_bg_white_frame.9.png b/res/drawable-xhdpi/btn_bg_white_frame.9.png
new file mode 100755
index 0000000..dd77f01
Binary files /dev/null and b/res/drawable-xhdpi/btn_bg_white_frame.9.png differ
diff --git a/res/drawable-xhdpi/btn_funcbar_beep.png b/res/drawable-xhdpi/btn_funcbar_beep.png
new file mode 100755
index 0000000..fff8edd
Binary files /dev/null and b/res/drawable-xhdpi/btn_funcbar_beep.png differ
diff --git a/res/drawable-xhdpi/btn_funcbar_beep_red.png b/res/drawable-xhdpi/btn_funcbar_beep_red.png
new file mode 100755
index 0000000..a2c7d14
Binary files /dev/null and b/res/drawable-xhdpi/btn_funcbar_beep_red.png differ
diff --git a/res/drawable-xhdpi/btn_funcbar_list.png b/res/drawable-xhdpi/btn_funcbar_list.png
new file mode 100755
index 0000000..06c7a5a
Binary files /dev/null and b/res/drawable-xhdpi/btn_funcbar_list.png differ
diff --git a/res/drawable-xhdpi/btn_list_beep.png b/res/drawable-xhdpi/btn_list_beep.png
new file mode 100755
index 0000000..48fa4a4
Binary files /dev/null and b/res/drawable-xhdpi/btn_list_beep.png differ
diff --git a/res/drawable-xhdpi/btn_list_call.png b/res/drawable-xhdpi/btn_list_call.png
new file mode 100755
index 0000000..3bdd277
Binary files /dev/null and b/res/drawable-xhdpi/btn_list_call.png differ
diff --git a/res/drawable-xhdpi/btn_option.png b/res/drawable-xhdpi/btn_option.png
new file mode 100755
index 0000000..c14a7b2
Binary files /dev/null and b/res/drawable-xhdpi/btn_option.png differ
diff --git a/res/drawable-xhdpi/btn_option_actionbar.png b/res/drawable-xhdpi/btn_option_actionbar.png
new file mode 100755
index 0000000..1fdec9b
Binary files /dev/null and b/res/drawable-xhdpi/btn_option_actionbar.png differ
diff --git a/res/drawable-xhdpi/btn_settings.png b/res/drawable-xhdpi/btn_settings.png
new file mode 100755
index 0000000..391f6c7
Binary files /dev/null and b/res/drawable-xhdpi/btn_settings.png differ
diff --git a/res/drawable-xhdpi/btn_switch_off.png b/res/drawable-xhdpi/btn_switch_off.png
new file mode 100755
index 0000000..7874bfb
Binary files /dev/null and b/res/drawable-xhdpi/btn_switch_off.png differ
diff --git a/res/drawable-xhdpi/btn_switch_on.png b/res/drawable-xhdpi/btn_switch_on.png
new file mode 100755
index 0000000..4bf3637
Binary files /dev/null and b/res/drawable-xhdpi/btn_switch_on.png differ
diff --git a/res/drawable-xhdpi/ic_actbar_notice_no.png b/res/drawable-xhdpi/ic_actbar_notice_no.png
new file mode 100755
index 0000000..b29df07
Binary files /dev/null and b/res/drawable-xhdpi/ic_actbar_notice_no.png differ
diff --git a/res/drawable-xhdpi/ic_cross.png b/res/drawable-xhdpi/ic_cross.png
new file mode 100755
index 0000000..ee367dc
Binary files /dev/null and b/res/drawable-xhdpi/ic_cross.png differ
diff --git a/res/drawable-xhdpi/ic_home_art.png b/res/drawable-xhdpi/ic_home_art.png
new file mode 100755
index 0000000..27f2b8e
Binary files /dev/null and b/res/drawable-xhdpi/ic_home_art.png differ
diff --git a/res/drawable-xhdpi/ic_home_classroom.png b/res/drawable-xhdpi/ic_home_classroom.png
new file mode 100755
index 0000000..c0c09e6
Binary files /dev/null and b/res/drawable-xhdpi/ic_home_classroom.png differ
diff --git a/res/drawable-xhdpi/ic_home_food.png b/res/drawable-xhdpi/ic_home_food.png
new file mode 100755
index 0000000..4ca0271
Binary files /dev/null and b/res/drawable-xhdpi/ic_home_food.png differ
diff --git a/res/drawable-xhdpi/ic_home_music.png b/res/drawable-xhdpi/ic_home_music.png
new file mode 100755
index 0000000..c62fcc0
Binary files /dev/null and b/res/drawable-xhdpi/ic_home_music.png differ
diff --git a/res/drawable-xhdpi/ic_home_no_man.png b/res/drawable-xhdpi/ic_home_no_man.png
new file mode 100755
index 0000000..5bdeaa1
Binary files /dev/null and b/res/drawable-xhdpi/ic_home_no_man.png differ
diff --git a/res/drawable-xhdpi/ic_home_pc.png b/res/drawable-xhdpi/ic_home_pc.png
new file mode 100755
index 0000000..c594c07
Binary files /dev/null and b/res/drawable-xhdpi/ic_home_pc.png differ
diff --git a/res/drawable-xhdpi/ic_home_play.png b/res/drawable-xhdpi/ic_home_play.png
new file mode 100755
index 0000000..1c88a27
Binary files /dev/null and b/res/drawable-xhdpi/ic_home_play.png differ
diff --git a/res/drawable-xhdpi/ic_home_schoolbus.png b/res/drawable-xhdpi/ic_home_schoolbus.png
new file mode 100755
index 0000000..f1ce128
Binary files /dev/null and b/res/drawable-xhdpi/ic_home_schoolbus.png differ
diff --git a/res/drawable-xhdpi/ic_home_sleep.png b/res/drawable-xhdpi/ic_home_sleep.png
new file mode 100755
index 0000000..158e55d
Binary files /dev/null and b/res/drawable-xhdpi/ic_home_sleep.png differ
diff --git a/res/drawable-xhdpi/ic_launcher.png b/res/drawable-xhdpi/ic_launcher.png
new file mode 100755
index 0000000..d8b52cd
Binary files /dev/null and b/res/drawable-xhdpi/ic_launcher.png differ
diff --git a/res/drawable-xhdpi/ic_list_unread.png b/res/drawable-xhdpi/ic_list_unread.png
new file mode 100755
index 0000000..a31927f
Binary files /dev/null and b/res/drawable-xhdpi/ic_list_unread.png differ
diff --git a/res/drawable-xhdpi/ic_location_default.png b/res/drawable-xhdpi/ic_location_default.png
new file mode 100755
index 0000000..cedd1b2
Binary files /dev/null and b/res/drawable-xhdpi/ic_location_default.png differ
diff --git a/res/drawable-xhdpi/ic_login_bday.png b/res/drawable-xhdpi/ic_login_bday.png
new file mode 100755
index 0000000..cf0e222
Binary files /dev/null and b/res/drawable-xhdpi/ic_login_bday.png differ
diff --git a/res/drawable-xhdpi/ic_login_email.png b/res/drawable-xhdpi/ic_login_email.png
new file mode 100755
index 0000000..a0e047a
Binary files /dev/null and b/res/drawable-xhdpi/ic_login_email.png differ
diff --git a/res/drawable-xhdpi/ic_login_name.png b/res/drawable-xhdpi/ic_login_name.png
new file mode 100755
index 0000000..9331455
Binary files /dev/null and b/res/drawable-xhdpi/ic_login_name.png differ
diff --git a/res/drawable-xhdpi/ic_login_phone.png b/res/drawable-xhdpi/ic_login_phone.png
new file mode 100755
index 0000000..cab05d8
Binary files /dev/null and b/res/drawable-xhdpi/ic_login_phone.png differ
diff --git a/res/drawable-xhdpi/ic_login_pw.png b/res/drawable-xhdpi/ic_login_pw.png
new file mode 100755
index 0000000..9bea67c
Binary files /dev/null and b/res/drawable-xhdpi/ic_login_pw.png differ
diff --git a/res/drawable-xhdpi/ic_notice_dot.png b/res/drawable-xhdpi/ic_notice_dot.png
new file mode 100755
index 0000000..71b5d49
Binary files /dev/null and b/res/drawable-xhdpi/ic_notice_dot.png differ
diff --git a/res/drawable-xhdpi/ic_paging_black.png b/res/drawable-xhdpi/ic_paging_black.png
new file mode 100755
index 0000000..610ccbe
Binary files /dev/null and b/res/drawable-xhdpi/ic_paging_black.png differ
diff --git a/res/drawable-xhdpi/ic_paging_red.png b/res/drawable-xhdpi/ic_paging_red.png
new file mode 100755
index 0000000..930215c
Binary files /dev/null and b/res/drawable-xhdpi/ic_paging_red.png differ
diff --git a/res/drawable-xhdpi/ic_popover_alert.png b/res/drawable-xhdpi/ic_popover_alert.png
new file mode 100755
index 0000000..75a3afe
Binary files /dev/null and b/res/drawable-xhdpi/ic_popover_alert.png differ
diff --git a/res/drawable-xhdpi/ic_popover_beep.png b/res/drawable-xhdpi/ic_popover_beep.png
new file mode 100755
index 0000000..0ee5ec2
Binary files /dev/null and b/res/drawable-xhdpi/ic_popover_beep.png differ
diff --git a/res/drawable-xhdpi/ic_radar_dot.png b/res/drawable-xhdpi/ic_radar_dot.png
new file mode 100755
index 0000000..294b583
Binary files /dev/null and b/res/drawable-xhdpi/ic_radar_dot.png differ
diff --git a/res/drawable-xhdpi/ic_search_red.png b/res/drawable-xhdpi/ic_search_red.png
new file mode 100755
index 0000000..943590f
Binary files /dev/null and b/res/drawable-xhdpi/ic_search_red.png differ
diff --git a/res/drawable-xhdpi/ic_selected.png b/res/drawable-xhdpi/ic_selected.png
new file mode 100755
index 0000000..a70a305
Binary files /dev/null and b/res/drawable-xhdpi/ic_selected.png differ
diff --git a/res/drawable-xhdpi/ic_selected_off.png b/res/drawable-xhdpi/ic_selected_off.png
new file mode 100755
index 0000000..d4594c0
Binary files /dev/null and b/res/drawable-xhdpi/ic_selected_off.png differ
diff --git a/res/drawable-xhdpi/ic_shield_mode.png b/res/drawable-xhdpi/ic_shield_mode.png
new file mode 100755
index 0000000..b314fe3
Binary files /dev/null and b/res/drawable-xhdpi/ic_shield_mode.png differ
diff --git a/res/drawable-xhdpi/ic_tick.png b/res/drawable-xhdpi/ic_tick.png
new file mode 100755
index 0000000..6758ea2
Binary files /dev/null and b/res/drawable-xhdpi/ic_tick.png differ
diff --git a/res/drawable-xhdpi/ic_verify_cross.png b/res/drawable-xhdpi/ic_verify_cross.png
new file mode 100755
index 0000000..6dda6c3
Binary files /dev/null and b/res/drawable-xhdpi/ic_verify_cross.png differ
diff --git a/res/drawable-xhdpi/ic_verify_tick.png b/res/drawable-xhdpi/ic_verify_tick.png
new file mode 100755
index 0000000..dca0ee7
Binary files /dev/null and b/res/drawable-xhdpi/ic_verify_tick.png differ
diff --git a/res/drawable-xhdpi/logo_cht.png b/res/drawable-xhdpi/logo_cht.png
new file mode 100755
index 0000000..c1f7e21
Binary files /dev/null and b/res/drawable-xhdpi/logo_cht.png differ
diff --git a/res/drawable-xhdpi/logo_en.png b/res/drawable-xhdpi/logo_en.png
new file mode 100755
index 0000000..5eb5972
Binary files /dev/null and b/res/drawable-xhdpi/logo_en.png differ
diff --git a/res/drawable-xxhdpi/ani_connecting_01.png b/res/drawable-xxhdpi/ani_connecting_01.png
new file mode 100755
index 0000000..64d0e37
Binary files /dev/null and b/res/drawable-xxhdpi/ani_connecting_01.png differ
diff --git a/res/drawable-xxhdpi/ani_connecting_02.png b/res/drawable-xxhdpi/ani_connecting_02.png
new file mode 100755
index 0000000..bde0c5f
Binary files /dev/null and b/res/drawable-xxhdpi/ani_connecting_02.png differ
diff --git a/res/drawable-xxhdpi/ani_connecting_03.png b/res/drawable-xxhdpi/ani_connecting_03.png
new file mode 100755
index 0000000..86d73b6
Binary files /dev/null and b/res/drawable-xxhdpi/ani_connecting_03.png differ
diff --git a/res/drawable-xxhdpi/ani_connecting_04.png b/res/drawable-xxhdpi/ani_connecting_04.png
new file mode 100755
index 0000000..08e163a
Binary files /dev/null and b/res/drawable-xxhdpi/ani_connecting_04.png differ
diff --git a/res/drawable-xxhdpi/ani_connecting_05.png b/res/drawable-xxhdpi/ani_connecting_05.png
new file mode 100755
index 0000000..2a6c564
Binary files /dev/null and b/res/drawable-xxhdpi/ani_connecting_05.png differ
diff --git a/res/drawable-xxhdpi/ani_connecting_06.png b/res/drawable-xxhdpi/ani_connecting_06.png
new file mode 100755
index 0000000..27c7b8d
Binary files /dev/null and b/res/drawable-xxhdpi/ani_connecting_06.png differ
diff --git a/res/drawable-xxhdpi/ani_connecting_07.png b/res/drawable-xxhdpi/ani_connecting_07.png
new file mode 100755
index 0000000..0c895b9
Binary files /dev/null and b/res/drawable-xxhdpi/ani_connecting_07.png differ
diff --git a/res/drawable-xxhdpi/ani_connecting_08.png b/res/drawable-xxhdpi/ani_connecting_08.png
new file mode 100755
index 0000000..8ab1bc3
Binary files /dev/null and b/res/drawable-xxhdpi/ani_connecting_08.png differ
diff --git a/res/drawable-xxhdpi/ani_connecting_09.png b/res/drawable-xxhdpi/ani_connecting_09.png
new file mode 100755
index 0000000..ebbf0cd
Binary files /dev/null and b/res/drawable-xxhdpi/ani_connecting_09.png differ
diff --git a/res/drawable-xxhdpi/ani_connecting_10.png b/res/drawable-xxhdpi/ani_connecting_10.png
new file mode 100755
index 0000000..f6e1425
Binary files /dev/null and b/res/drawable-xxhdpi/ani_connecting_10.png differ
diff --git a/res/drawable-xxhdpi/ani_connecting_11.png b/res/drawable-xxhdpi/ani_connecting_11.png
new file mode 100755
index 0000000..6cb68c7
Binary files /dev/null and b/res/drawable-xxhdpi/ani_connecting_11.png differ
diff --git a/res/drawable-xxhdpi/ani_connecting_done.png b/res/drawable-xxhdpi/ani_connecting_done.png
new file mode 100755
index 0000000..748a93e
Binary files /dev/null and b/res/drawable-xxhdpi/ani_connecting_done.png differ
diff --git a/res/drawable-xxhdpi/ani_connecting_fail.png b/res/drawable-xxhdpi/ani_connecting_fail.png
new file mode 100755
index 0000000..2bcdb2b
Binary files /dev/null and b/res/drawable-xxhdpi/ani_connecting_fail.png differ
diff --git a/res/drawable-xxhdpi/bg_actbar_red.png b/res/drawable-xxhdpi/bg_actbar_red.png
new file mode 100755
index 0000000..713e9fd
Binary files /dev/null and b/res/drawable-xxhdpi/bg_actbar_red.png differ
diff --git a/res/drawable-xxhdpi/bg_actbar_white.png b/res/drawable-xxhdpi/bg_actbar_white.png
new file mode 100755
index 0000000..b6e922a
Binary files /dev/null and b/res/drawable-xxhdpi/bg_actbar_white.png differ
diff --git a/res/drawable-xxhdpi/bg_funcbar_red.png b/res/drawable-xxhdpi/bg_funcbar_red.png
new file mode 100755
index 0000000..7508303
Binary files /dev/null and b/res/drawable-xxhdpi/bg_funcbar_red.png differ
diff --git a/res/drawable-xxhdpi/bg_radar_circle.png b/res/drawable-xxhdpi/bg_radar_circle.png
new file mode 100755
index 0000000..15a2246
Binary files /dev/null and b/res/drawable-xxhdpi/bg_radar_circle.png differ
diff --git a/res/drawable-xxhdpi/bg_radar_rotate.png b/res/drawable-xxhdpi/bg_radar_rotate.png
new file mode 100755
index 0000000..fbec862
Binary files /dev/null and b/res/drawable-xxhdpi/bg_radar_rotate.png differ
diff --git a/res/drawable-xxhdpi/bg_report_average.png b/res/drawable-xxhdpi/bg_report_average.png
new file mode 100755
index 0000000..c231a8e
Binary files /dev/null and b/res/drawable-xxhdpi/bg_report_average.png differ
diff --git a/res/drawable-xxhdpi/bg_report_bar_base.png b/res/drawable-xxhdpi/bg_report_bar_base.png
new file mode 100755
index 0000000..a1e026f
Binary files /dev/null and b/res/drawable-xxhdpi/bg_report_bar_base.png differ
diff --git a/res/drawable-xxhdpi/bg_report_daily.png b/res/drawable-xxhdpi/bg_report_daily.png
new file mode 100755
index 0000000..5241f62
Binary files /dev/null and b/res/drawable-xxhdpi/bg_report_daily.png differ
diff --git a/res/drawable-xxhdpi/bg_report_weekly.png b/res/drawable-xxhdpi/bg_report_weekly.png
new file mode 100755
index 0000000..b79dc71
Binary files /dev/null and b/res/drawable-xxhdpi/bg_report_weekly.png differ
diff --git a/res/drawable-xxhdpi/bg_white.9.png b/res/drawable-xxhdpi/bg_white.9.png
new file mode 100755
index 0000000..e66a6b0
Binary files /dev/null and b/res/drawable-xxhdpi/bg_white.9.png differ
diff --git a/res/drawable-xxhdpi/box_fill_frame.png b/res/drawable-xxhdpi/box_fill_frame.png
new file mode 100755
index 0000000..a31c56f
Binary files /dev/null and b/res/drawable-xxhdpi/box_fill_frame.png differ
diff --git a/res/drawable-xxhdpi/btn_actbar_back.png b/res/drawable-xxhdpi/btn_actbar_back.png
new file mode 100755
index 0000000..c9bb227
Binary files /dev/null and b/res/drawable-xxhdpi/btn_actbar_back.png differ
diff --git a/res/drawable-xxhdpi/btn_actbar_home.png b/res/drawable-xxhdpi/btn_actbar_home.png
new file mode 100755
index 0000000..168a996
Binary files /dev/null and b/res/drawable-xxhdpi/btn_actbar_home.png differ
diff --git a/res/drawable-xxhdpi/btn_actbar_home_on.png b/res/drawable-xxhdpi/btn_actbar_home_on.png
new file mode 100755
index 0000000..85bbf2c
Binary files /dev/null and b/res/drawable-xxhdpi/btn_actbar_home_on.png differ
diff --git a/res/drawable-xxhdpi/btn_actbar_profile.png b/res/drawable-xxhdpi/btn_actbar_profile.png
new file mode 100755
index 0000000..7c96f40
Binary files /dev/null and b/res/drawable-xxhdpi/btn_actbar_profile.png differ
diff --git a/res/drawable-xxhdpi/btn_actbar_profile_on.png b/res/drawable-xxhdpi/btn_actbar_profile_on.png
new file mode 100755
index 0000000..fb054a0
Binary files /dev/null and b/res/drawable-xxhdpi/btn_actbar_profile_on.png differ
diff --git a/res/drawable-xxhdpi/btn_actbar_report.png b/res/drawable-xxhdpi/btn_actbar_report.png
new file mode 100755
index 0000000..b72c905
Binary files /dev/null and b/res/drawable-xxhdpi/btn_actbar_report.png differ
diff --git a/res/drawable-xxhdpi/btn_actbar_report_on.png b/res/drawable-xxhdpi/btn_actbar_report_on.png
new file mode 100755
index 0000000..efe4256
Binary files /dev/null and b/res/drawable-xxhdpi/btn_actbar_report_on.png differ
diff --git a/res/drawable-xxhdpi/btn_actbar_share.png b/res/drawable-xxhdpi/btn_actbar_share.png
new file mode 100755
index 0000000..3c99680
Binary files /dev/null and b/res/drawable-xxhdpi/btn_actbar_share.png differ
diff --git a/res/drawable-xxhdpi/btn_actbar_tracking.png b/res/drawable-xxhdpi/btn_actbar_tracking.png
new file mode 100755
index 0000000..d5d3e9f
Binary files /dev/null and b/res/drawable-xxhdpi/btn_actbar_tracking.png differ
diff --git a/res/drawable-xxhdpi/btn_actbar_tracking_on.png b/res/drawable-xxhdpi/btn_actbar_tracking_on.png
new file mode 100755
index 0000000..46c3e2a
Binary files /dev/null and b/res/drawable-xxhdpi/btn_actbar_tracking_on.png differ
diff --git a/res/drawable-xxhdpi/btn_arrow_down.png b/res/drawable-xxhdpi/btn_arrow_down.png
new file mode 100755
index 0000000..0ffe187
Binary files /dev/null and b/res/drawable-xxhdpi/btn_arrow_down.png differ
diff --git a/res/drawable-xxhdpi/btn_arrow_down_small.png b/res/drawable-xxhdpi/btn_arrow_down_small.png
new file mode 100755
index 0000000..9e829ba
Binary files /dev/null and b/res/drawable-xxhdpi/btn_arrow_down_small.png differ
diff --git a/res/drawable-xxhdpi/btn_arrow_go.png b/res/drawable-xxhdpi/btn_arrow_go.png
new file mode 100755
index 0000000..c968113
Binary files /dev/null and b/res/drawable-xxhdpi/btn_arrow_go.png differ
diff --git a/res/drawable-xxhdpi/btn_arrow_go_big.png b/res/drawable-xxhdpi/btn_arrow_go_big.png
new file mode 100755
index 0000000..b89cc53
Binary files /dev/null and b/res/drawable-xxhdpi/btn_arrow_go_big.png differ
diff --git a/res/drawable-xxhdpi/btn_arrow_up.png b/res/drawable-xxhdpi/btn_arrow_up.png
new file mode 100755
index 0000000..d12183f
Binary files /dev/null and b/res/drawable-xxhdpi/btn_arrow_up.png differ
diff --git a/res/drawable-xxhdpi/btn_bg_green.9.png b/res/drawable-xxhdpi/btn_bg_green.9.png
new file mode 100755
index 0000000..f8094a8
Binary files /dev/null and b/res/drawable-xxhdpi/btn_bg_green.9.png differ
diff --git a/res/drawable-xxhdpi/btn_bg_red.9.png b/res/drawable-xxhdpi/btn_bg_red.9.png
new file mode 100755
index 0000000..25ce883
Binary files /dev/null and b/res/drawable-xxhdpi/btn_bg_red.9.png differ
diff --git a/res/drawable-xxhdpi/btn_bg_red_frame.9.png b/res/drawable-xxhdpi/btn_bg_red_frame.9.png
new file mode 100755
index 0000000..75b40d4
Binary files /dev/null and b/res/drawable-xxhdpi/btn_bg_red_frame.9.png differ
diff --git a/res/drawable-xxhdpi/btn_bg_red_frame_half_left.9.png b/res/drawable-xxhdpi/btn_bg_red_frame_half_left.9.png
new file mode 100755
index 0000000..744134e
Binary files /dev/null and b/res/drawable-xxhdpi/btn_bg_red_frame_half_left.9.png differ
diff --git a/res/drawable-xxhdpi/btn_bg_red_frame_half_right.9.png b/res/drawable-xxhdpi/btn_bg_red_frame_half_right.9.png
new file mode 100755
index 0000000..cedf139
Binary files /dev/null and b/res/drawable-xxhdpi/btn_bg_red_frame_half_right.9.png differ
diff --git a/res/drawable-xxhdpi/btn_bg_red_half_left.9.png b/res/drawable-xxhdpi/btn_bg_red_half_left.9.png
new file mode 100755
index 0000000..c9eacf7
Binary files /dev/null and b/res/drawable-xxhdpi/btn_bg_red_half_left.9.png differ
diff --git a/res/drawable-xxhdpi/btn_bg_red_half_right.9.png b/res/drawable-xxhdpi/btn_bg_red_half_right.9.png
new file mode 100755
index 0000000..4191c70
Binary files /dev/null and b/res/drawable-xxhdpi/btn_bg_red_half_right.9.png differ
diff --git a/res/drawable-xxhdpi/btn_bg_white.9.png b/res/drawable-xxhdpi/btn_bg_white.9.png
new file mode 100755
index 0000000..83288bd
Binary files /dev/null and b/res/drawable-xxhdpi/btn_bg_white.9.png differ
diff --git a/res/drawable-xxhdpi/btn_bg_white_frame.9.png b/res/drawable-xxhdpi/btn_bg_white_frame.9.png
new file mode 100755
index 0000000..fef6d82
Binary files /dev/null and b/res/drawable-xxhdpi/btn_bg_white_frame.9.png differ
diff --git a/res/drawable-xxhdpi/btn_funcbar_beep.png b/res/drawable-xxhdpi/btn_funcbar_beep.png
new file mode 100755
index 0000000..5e5994e
Binary files /dev/null and b/res/drawable-xxhdpi/btn_funcbar_beep.png differ
diff --git a/res/drawable-xxhdpi/btn_funcbar_beep_red.png b/res/drawable-xxhdpi/btn_funcbar_beep_red.png
new file mode 100755
index 0000000..9f5e5be
Binary files /dev/null and b/res/drawable-xxhdpi/btn_funcbar_beep_red.png differ
diff --git a/res/drawable-xxhdpi/btn_funcbar_list.png b/res/drawable-xxhdpi/btn_funcbar_list.png
new file mode 100755
index 0000000..05827da
Binary files /dev/null and b/res/drawable-xxhdpi/btn_funcbar_list.png differ
diff --git a/res/drawable-xxhdpi/btn_list_beep.png b/res/drawable-xxhdpi/btn_list_beep.png
new file mode 100755
index 0000000..9caca5a
Binary files /dev/null and b/res/drawable-xxhdpi/btn_list_beep.png differ
diff --git a/res/drawable-xxhdpi/btn_list_call.png b/res/drawable-xxhdpi/btn_list_call.png
new file mode 100755
index 0000000..4b1d52c
Binary files /dev/null and b/res/drawable-xxhdpi/btn_list_call.png differ
diff --git a/res/drawable-xxhdpi/btn_option.png b/res/drawable-xxhdpi/btn_option.png
new file mode 100755
index 0000000..118c793
Binary files /dev/null and b/res/drawable-xxhdpi/btn_option.png differ
diff --git a/res/drawable-xxhdpi/btn_option_actionbar.png b/res/drawable-xxhdpi/btn_option_actionbar.png
new file mode 100755
index 0000000..cb90025
Binary files /dev/null and b/res/drawable-xxhdpi/btn_option_actionbar.png differ
diff --git a/res/drawable-xxhdpi/btn_settings.png b/res/drawable-xxhdpi/btn_settings.png
new file mode 100755
index 0000000..f24e6e9
Binary files /dev/null and b/res/drawable-xxhdpi/btn_settings.png differ
diff --git a/res/drawable-xxhdpi/btn_switch_off.png b/res/drawable-xxhdpi/btn_switch_off.png
new file mode 100755
index 0000000..3ef77b9
Binary files /dev/null and b/res/drawable-xxhdpi/btn_switch_off.png differ
diff --git a/res/drawable-xxhdpi/btn_switch_on.png b/res/drawable-xxhdpi/btn_switch_on.png
new file mode 100755
index 0000000..1402b55
Binary files /dev/null and b/res/drawable-xxhdpi/btn_switch_on.png differ
diff --git a/res/drawable-xxhdpi/ic_actbar_notice_no.png b/res/drawable-xxhdpi/ic_actbar_notice_no.png
new file mode 100755
index 0000000..48e3e60
Binary files /dev/null and b/res/drawable-xxhdpi/ic_actbar_notice_no.png differ
diff --git a/res/drawable-xxhdpi/ic_cross.png b/res/drawable-xxhdpi/ic_cross.png
new file mode 100755
index 0000000..8c0b65b
Binary files /dev/null and b/res/drawable-xxhdpi/ic_cross.png differ
diff --git a/res/drawable-xxhdpi/ic_home_art.png b/res/drawable-xxhdpi/ic_home_art.png
new file mode 100755
index 0000000..704db46
Binary files /dev/null and b/res/drawable-xxhdpi/ic_home_art.png differ
diff --git a/res/drawable-xxhdpi/ic_home_classroom.png b/res/drawable-xxhdpi/ic_home_classroom.png
new file mode 100755
index 0000000..726d6e9
Binary files /dev/null and b/res/drawable-xxhdpi/ic_home_classroom.png differ
diff --git a/res/drawable-xxhdpi/ic_home_food.png b/res/drawable-xxhdpi/ic_home_food.png
new file mode 100755
index 0000000..d1ea642
Binary files /dev/null and b/res/drawable-xxhdpi/ic_home_food.png differ
diff --git a/res/drawable-xxhdpi/ic_home_music.png b/res/drawable-xxhdpi/ic_home_music.png
new file mode 100755
index 0000000..e0a3693
Binary files /dev/null and b/res/drawable-xxhdpi/ic_home_music.png differ
diff --git a/res/drawable-xxhdpi/ic_home_no_man.png b/res/drawable-xxhdpi/ic_home_no_man.png
new file mode 100755
index 0000000..6445b73
Binary files /dev/null and b/res/drawable-xxhdpi/ic_home_no_man.png differ
diff --git a/res/drawable-xxhdpi/ic_home_pc.png b/res/drawable-xxhdpi/ic_home_pc.png
new file mode 100755
index 0000000..17527e4
Binary files /dev/null and b/res/drawable-xxhdpi/ic_home_pc.png differ
diff --git a/res/drawable-xxhdpi/ic_home_play.png b/res/drawable-xxhdpi/ic_home_play.png
new file mode 100755
index 0000000..8e0425b
Binary files /dev/null and b/res/drawable-xxhdpi/ic_home_play.png differ
diff --git a/res/drawable-xxhdpi/ic_home_schoolbus.png b/res/drawable-xxhdpi/ic_home_schoolbus.png
new file mode 100755
index 0000000..0469dbb
Binary files /dev/null and b/res/drawable-xxhdpi/ic_home_schoolbus.png differ
diff --git a/res/drawable-xxhdpi/ic_home_sleep.png b/res/drawable-xxhdpi/ic_home_sleep.png
new file mode 100755
index 0000000..84b9fa6
Binary files /dev/null and b/res/drawable-xxhdpi/ic_home_sleep.png differ
diff --git a/res/drawable-xxhdpi/ic_launcher.png b/res/drawable-xxhdpi/ic_launcher.png
new file mode 100755
index 0000000..b2aa1b4
Binary files /dev/null and b/res/drawable-xxhdpi/ic_launcher.png differ
diff --git a/res/drawable-xxhdpi/ic_list_unread.png b/res/drawable-xxhdpi/ic_list_unread.png
new file mode 100755
index 0000000..3462534
Binary files /dev/null and b/res/drawable-xxhdpi/ic_list_unread.png differ
diff --git a/res/drawable-xxhdpi/ic_location_default.png b/res/drawable-xxhdpi/ic_location_default.png
new file mode 100755
index 0000000..6bc46fd
Binary files /dev/null and b/res/drawable-xxhdpi/ic_location_default.png differ
diff --git a/res/drawable-xxhdpi/ic_login_bday.png b/res/drawable-xxhdpi/ic_login_bday.png
new file mode 100755
index 0000000..800785b
Binary files /dev/null and b/res/drawable-xxhdpi/ic_login_bday.png differ
diff --git a/res/drawable-xxhdpi/ic_login_email.png b/res/drawable-xxhdpi/ic_login_email.png
new file mode 100755
index 0000000..593a92e
Binary files /dev/null and b/res/drawable-xxhdpi/ic_login_email.png differ
diff --git a/res/drawable-xxhdpi/ic_login_name.png b/res/drawable-xxhdpi/ic_login_name.png
new file mode 100755
index 0000000..01f04a3
Binary files /dev/null and b/res/drawable-xxhdpi/ic_login_name.png differ
diff --git a/res/drawable-xxhdpi/ic_login_phone.png b/res/drawable-xxhdpi/ic_login_phone.png
new file mode 100755
index 0000000..a86b8cc
Binary files /dev/null and b/res/drawable-xxhdpi/ic_login_phone.png differ
diff --git a/res/drawable-xxhdpi/ic_login_pw.png b/res/drawable-xxhdpi/ic_login_pw.png
new file mode 100755
index 0000000..77c6509
Binary files /dev/null and b/res/drawable-xxhdpi/ic_login_pw.png differ
diff --git a/res/drawable-xxhdpi/ic_notice_dot.png b/res/drawable-xxhdpi/ic_notice_dot.png
new file mode 100755
index 0000000..843555f
Binary files /dev/null and b/res/drawable-xxhdpi/ic_notice_dot.png differ
diff --git a/res/drawable-xxhdpi/ic_paging_black.png b/res/drawable-xxhdpi/ic_paging_black.png
new file mode 100755
index 0000000..7577ecd
Binary files /dev/null and b/res/drawable-xxhdpi/ic_paging_black.png differ
diff --git a/res/drawable-xxhdpi/ic_paging_red.png b/res/drawable-xxhdpi/ic_paging_red.png
new file mode 100755
index 0000000..717df71
Binary files /dev/null and b/res/drawable-xxhdpi/ic_paging_red.png differ
diff --git a/res/drawable-xxhdpi/ic_popover_alert.png b/res/drawable-xxhdpi/ic_popover_alert.png
new file mode 100755
index 0000000..7f97992
Binary files /dev/null and b/res/drawable-xxhdpi/ic_popover_alert.png differ
diff --git a/res/drawable-xxhdpi/ic_popover_beep.png b/res/drawable-xxhdpi/ic_popover_beep.png
new file mode 100755
index 0000000..273ede0
Binary files /dev/null and b/res/drawable-xxhdpi/ic_popover_beep.png differ
diff --git a/res/drawable-xxhdpi/ic_radar_dot.png b/res/drawable-xxhdpi/ic_radar_dot.png
new file mode 100755
index 0000000..bb5ff2d
Binary files /dev/null and b/res/drawable-xxhdpi/ic_radar_dot.png differ
diff --git a/res/drawable-xxhdpi/ic_search_red.png b/res/drawable-xxhdpi/ic_search_red.png
new file mode 100755
index 0000000..03a7970
Binary files /dev/null and b/res/drawable-xxhdpi/ic_search_red.png differ
diff --git a/res/drawable-xxhdpi/ic_selected.png b/res/drawable-xxhdpi/ic_selected.png
new file mode 100755
index 0000000..367702c
Binary files /dev/null and b/res/drawable-xxhdpi/ic_selected.png differ
diff --git a/res/drawable-xxhdpi/ic_selected_off.png b/res/drawable-xxhdpi/ic_selected_off.png
new file mode 100755
index 0000000..6c17d5c
Binary files /dev/null and b/res/drawable-xxhdpi/ic_selected_off.png differ
diff --git a/res/drawable-xxhdpi/ic_shield_mode.png b/res/drawable-xxhdpi/ic_shield_mode.png
new file mode 100755
index 0000000..d4b236a
Binary files /dev/null and b/res/drawable-xxhdpi/ic_shield_mode.png differ
diff --git a/res/drawable-xxhdpi/ic_tick.png b/res/drawable-xxhdpi/ic_tick.png
new file mode 100755
index 0000000..ef281c3
Binary files /dev/null and b/res/drawable-xxhdpi/ic_tick.png differ
diff --git a/res/drawable-xxhdpi/ic_verify_cross.png b/res/drawable-xxhdpi/ic_verify_cross.png
new file mode 100755
index 0000000..75593ca
Binary files /dev/null and b/res/drawable-xxhdpi/ic_verify_cross.png differ
diff --git a/res/drawable-xxhdpi/ic_verify_tick.png b/res/drawable-xxhdpi/ic_verify_tick.png
new file mode 100755
index 0000000..f4a0849
Binary files /dev/null and b/res/drawable-xxhdpi/ic_verify_tick.png differ
diff --git a/res/drawable-xxhdpi/logo_cht.png b/res/drawable-xxhdpi/logo_cht.png
new file mode 100755
index 0000000..859a9fb
Binary files /dev/null and b/res/drawable-xxhdpi/logo_cht.png differ
diff --git a/res/drawable-xxhdpi/logo_en.png b/res/drawable-xxhdpi/logo_en.png
new file mode 100755
index 0000000..f0bd2d1
Binary files /dev/null and b/res/drawable-xxhdpi/logo_en.png differ
diff --git a/res/drawable/bg_actionbar_selector.xml b/res/drawable/bg_actionbar_selector.xml
new file mode 100755
index 0000000..c8dec37
--- /dev/null
+++ b/res/drawable/bg_actionbar_selector.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/btn_actbar_home_selector.xml b/res/drawable/btn_actbar_home_selector.xml
new file mode 100755
index 0000000..ec8b814
--- /dev/null
+++ b/res/drawable/btn_actbar_home_selector.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/btn_actbar_profile_selector.xml b/res/drawable/btn_actbar_profile_selector.xml
new file mode 100755
index 0000000..7ddb503
--- /dev/null
+++ b/res/drawable/btn_actbar_profile_selector.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/btn_actbar_report_selector.xml b/res/drawable/btn_actbar_report_selector.xml
new file mode 100755
index 0000000..4344e89
--- /dev/null
+++ b/res/drawable/btn_actbar_report_selector.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/btn_actbar_tracking_selector.xml b/res/drawable/btn_actbar_tracking_selector.xml
new file mode 100755
index 0000000..81aa7bd
--- /dev/null
+++ b/res/drawable/btn_actbar_tracking_selector.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/btn_red_half_left_selector.xml b/res/drawable/btn_red_half_left_selector.xml
new file mode 100755
index 0000000..9596f30
--- /dev/null
+++ b/res/drawable/btn_red_half_left_selector.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/btn_red_half_right_selector.xml b/res/drawable/btn_red_half_right_selector.xml
new file mode 100755
index 0000000..41db580
--- /dev/null
+++ b/res/drawable/btn_red_half_right_selector.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/btn_text_selector.xml b/res/drawable/btn_text_selector.xml
new file mode 100755
index 0000000..d716085
--- /dev/null
+++ b/res/drawable/btn_text_selector.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/checkable_text_selector.xml b/res/drawable/checkable_text_selector.xml
new file mode 100755
index 0000000..2a3e2de
--- /dev/null
+++ b/res/drawable/checkable_text_selector.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/dialog_forget_password.xml b/res/drawable/dialog_forget_password.xml
new file mode 100755
index 0000000..21e76e6
--- /dev/null
+++ b/res/drawable/dialog_forget_password.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/list_item_selector.xml b/res/drawable/list_item_selector.xml
new file mode 100755
index 0000000..7d5f4fe
--- /dev/null
+++ b/res/drawable/list_item_selector.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/list_selector.xml b/res/drawable/list_selector.xml
new file mode 100755
index 0000000..a8b409b
--- /dev/null
+++ b/res/drawable/list_selector.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/my_progress_blue.xml b/res/drawable/my_progress_blue.xml
new file mode 100755
index 0000000..b0ad76c
--- /dev/null
+++ b/res/drawable/my_progress_blue.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/my_progress_yellow.xml b/res/drawable/my_progress_yellow.xml
new file mode 100755
index 0000000..54d5af5
--- /dev/null
+++ b/res/drawable/my_progress_yellow.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/settings_column_bottom.xml b/res/drawable/settings_column_bottom.xml
new file mode 100755
index 0000000..4687e6d
--- /dev/null
+++ b/res/drawable/settings_column_bottom.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/settings_column_center.xml b/res/drawable/settings_column_center.xml
new file mode 100755
index 0000000..0d068bc
--- /dev/null
+++ b/res/drawable/settings_column_center.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/settings_column_top.xml b/res/drawable/settings_column_top.xml
new file mode 100755
index 0000000..d954d22
--- /dev/null
+++ b/res/drawable/settings_column_top.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/sipnner_text_selector.xml b/res/drawable/sipnner_text_selector.xml
new file mode 100755
index 0000000..83890d4
--- /dev/null
+++ b/res/drawable/sipnner_text_selector.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/actionbar_search.xml b/res/layout/actionbar_search.xml
new file mode 100755
index 0000000..81032c5
--- /dev/null
+++ b/res/layout/actionbar_search.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/res/layout/actionbar_search_device.xml b/res/layout/actionbar_search_device.xml
new file mode 100755
index 0000000..2284e9e
--- /dev/null
+++ b/res/layout/actionbar_search_device.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/res/layout/actionbar_textview.xml b/res/layout/actionbar_textview.xml
new file mode 100755
index 0000000..03a65a8
--- /dev/null
+++ b/res/layout/actionbar_textview.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_about.xml b/res/layout/activity_about.xml
new file mode 100755
index 0000000..c498bd3
--- /dev/null
+++ b/res/layout/activity_about.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_authorize_guest_list.xml b/res/layout/activity_authorize_guest_list.xml
new file mode 100755
index 0000000..12bb129
--- /dev/null
+++ b/res/layout/activity_authorize_guest_list.xml
@@ -0,0 +1,183 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_binding_child_macaron.xml b/res/layout/activity_binding_child_macaron.xml
new file mode 100755
index 0000000..3377ea1
--- /dev/null
+++ b/res/layout/activity_binding_child_macaron.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_child_information_matching.xml b/res/layout/activity_child_information_matching.xml
new file mode 100755
index 0000000..986b132
--- /dev/null
+++ b/res/layout/activity_child_information_matching.xml
@@ -0,0 +1,163 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_fwupdate.xml b/res/layout/activity_fwupdate.xml
new file mode 100755
index 0000000..07f8c19
--- /dev/null
+++ b/res/layout/activity_fwupdate.xml
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_kid_profile_temp.xml b/res/layout/activity_kid_profile_temp.xml
new file mode 100755
index 0000000..4fd62d5
--- /dev/null
+++ b/res/layout/activity_kid_profile_temp.xml
@@ -0,0 +1,314 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/activity_kids_list.xml b/res/layout/activity_kids_list.xml
new file mode 100755
index 0000000..fca0a95
--- /dev/null
+++ b/res/layout/activity_kids_list.xml
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_kindergarten.xml b/res/layout/activity_kindergarten.xml
new file mode 100755
index 0000000..ea9d678
--- /dev/null
+++ b/res/layout/activity_kindergarten.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_lancher.xml b/res/layout/activity_lancher.xml
new file mode 100755
index 0000000..6cd4afa
--- /dev/null
+++ b/res/layout/activity_lancher.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_login.xml b/res/layout/activity_login.xml
new file mode 100755
index 0000000..ddfb2a3
--- /dev/null
+++ b/res/layout/activity_login.xml
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_main.xml b/res/layout/activity_main.xml
new file mode 100755
index 0000000..4f29ca8
--- /dev/null
+++ b/res/layout/activity_main.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_my_kids.xml b/res/layout/activity_my_kids.xml
new file mode 100755
index 0000000..8f95625
--- /dev/null
+++ b/res/layout/activity_my_kids.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_school_bus.xml b/res/layout/activity_school_bus.xml
new file mode 100755
index 0000000..9d24e3e
--- /dev/null
+++ b/res/layout/activity_school_bus.xml
@@ -0,0 +1,22 @@
+
+
+
+
diff --git a/res/layout/activity_search_guest_list.xml b/res/layout/activity_search_guest_list.xml
new file mode 100755
index 0000000..9406075
--- /dev/null
+++ b/res/layout/activity_search_guest_list.xml
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_select_kids.xml b/res/layout/activity_select_kids.xml
new file mode 100755
index 0000000..7081106
--- /dev/null
+++ b/res/layout/activity_select_kids.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_settings.xml b/res/layout/activity_settings.xml
new file mode 100755
index 0000000..798d830
--- /dev/null
+++ b/res/layout/activity_settings.xml
@@ -0,0 +1,469 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_sign_up.xml b/res/layout/activity_sign_up.xml
new file mode 100755
index 0000000..4141d04
--- /dev/null
+++ b/res/layout/activity_sign_up.xml
@@ -0,0 +1,197 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_test.xml b/res/layout/activity_test.xml
new file mode 100755
index 0000000..4e46de0
--- /dev/null
+++ b/res/layout/activity_test.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_update_nickname.xml b/res/layout/activity_update_nickname.xml
new file mode 100755
index 0000000..5c0aa8d
--- /dev/null
+++ b/res/layout/activity_update_nickname.xml
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_update_password.xml b/res/layout/activity_update_password.xml
new file mode 100755
index 0000000..ee24b8f
--- /dev/null
+++ b/res/layout/activity_update_password.xml
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_web_view.xml b/res/layout/activity_web_view.xml
new file mode 100755
index 0000000..c19e2e5
--- /dev/null
+++ b/res/layout/activity_web_view.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/activity_welcome.xml b/res/layout/activity_welcome.xml
new file mode 100755
index 0000000..3d403f4
--- /dev/null
+++ b/res/layout/activity_welcome.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_beep.xml b/res/layout/dialog_beep.xml
new file mode 100755
index 0000000..65df49b
--- /dev/null
+++ b/res/layout/dialog_beep.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_check_child_to_bind_list.xml b/res/layout/dialog_check_child_to_bind_list.xml
new file mode 100755
index 0000000..c78774f
--- /dev/null
+++ b/res/layout/dialog_check_child_to_bind_list.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_check_child_to_bind_list_listitem.xml b/res/layout/dialog_check_child_to_bind_list_listitem.xml
new file mode 100755
index 0000000..3fba13e
--- /dev/null
+++ b/res/layout/dialog_check_child_to_bind_list_listitem.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_child.xml b/res/layout/dialog_child.xml
new file mode 100755
index 0000000..51ee173
--- /dev/null
+++ b/res/layout/dialog_child.xml
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_child_birthday.xml b/res/layout/dialog_child_birthday.xml
new file mode 100755
index 0000000..746eddc
--- /dev/null
+++ b/res/layout/dialog_child_birthday.xml
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_feedback.xml b/res/layout/dialog_feedback.xml
new file mode 100755
index 0000000..54a0e1d
--- /dev/null
+++ b/res/layout/dialog_feedback.xml
@@ -0,0 +1,207 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_forget_password.xml b/res/layout/dialog_forget_password.xml
new file mode 100755
index 0000000..f186273
--- /dev/null
+++ b/res/layout/dialog_forget_password.xml
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_fragment_radar_tracking_beep_all.xml b/res/layout/dialog_fragment_radar_tracking_beep_all.xml
new file mode 100755
index 0000000..9c69d3a
--- /dev/null
+++ b/res/layout/dialog_fragment_radar_tracking_beep_all.xml
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_grant_kids_list.xml b/res/layout/dialog_grant_kids_list.xml
new file mode 100755
index 0000000..3e6c18f
--- /dev/null
+++ b/res/layout/dialog_grant_kids_list.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_indoor_locator_options.xml b/res/layout/dialog_indoor_locator_options.xml
new file mode 100755
index 0000000..26a7249
--- /dev/null
+++ b/res/layout/dialog_indoor_locator_options.xml
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_kids_list_options.xml b/res/layout/dialog_kids_list_options.xml
new file mode 100755
index 0000000..eb8d217
--- /dev/null
+++ b/res/layout/dialog_kids_list_options.xml
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_loading.xml b/res/layout/dialog_loading.xml
new file mode 100755
index 0000000..7e855dc
--- /dev/null
+++ b/res/layout/dialog_loading.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_old_password_error.xml b/res/layout/dialog_old_password_error.xml
new file mode 100755
index 0000000..151f718
--- /dev/null
+++ b/res/layout/dialog_old_password_error.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_radar_all_child_image_item.xml b/res/layout/dialog_radar_all_child_image_item.xml
new file mode 100755
index 0000000..9bfcb9b
--- /dev/null
+++ b/res/layout/dialog_radar_all_child_image_item.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_radar_all_miss_child_image.xml b/res/layout/dialog_radar_all_miss_child_image.xml
new file mode 100755
index 0000000..99b0792
--- /dev/null
+++ b/res/layout/dialog_radar_all_miss_child_image.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_radar_all_scan_child_image.xml b/res/layout/dialog_radar_all_scan_child_image.xml
new file mode 100755
index 0000000..66a20e4
--- /dev/null
+++ b/res/layout/dialog_radar_all_scan_child_image.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_refresh_time.xml b/res/layout/dialog_refresh_time.xml
new file mode 100755
index 0000000..e330c3e
--- /dev/null
+++ b/res/layout/dialog_refresh_time.xml
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_require_qr_code.xml b/res/layout/dialog_require_qr_code.xml
new file mode 100755
index 0000000..a7e7998
--- /dev/null
+++ b/res/layout/dialog_require_qr_code.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_sign_up_ask_bind.xml b/res/layout/dialog_sign_up_ask_bind.xml
new file mode 100755
index 0000000..ef502a1
--- /dev/null
+++ b/res/layout/dialog_sign_up_ask_bind.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_unbind_device.xml b/res/layout/dialog_unbind_device.xml
new file mode 100755
index 0000000..4f9a19a
--- /dev/null
+++ b/res/layout/dialog_unbind_device.xml
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/dialog_write_to_beacon.xml b/res/layout/dialog_write_to_beacon.xml
new file mode 100755
index 0000000..7d27419
--- /dev/null
+++ b/res/layout/dialog_write_to_beacon.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/fragment_anti_lost.xml b/res/layout/fragment_anti_lost.xml
new file mode 100755
index 0000000..fd7df45
--- /dev/null
+++ b/res/layout/fragment_anti_lost.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/fragment_indoor_locator.xml b/res/layout/fragment_indoor_locator.xml
new file mode 100755
index 0000000..d7127c0
--- /dev/null
+++ b/res/layout/fragment_indoor_locator.xml
@@ -0,0 +1,204 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/fragment_profile.xml b/res/layout/fragment_profile.xml
new file mode 100755
index 0000000..76c4633
--- /dev/null
+++ b/res/layout/fragment_profile.xml
@@ -0,0 +1,157 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/fragment_radar.xml b/res/layout/fragment_radar.xml
new file mode 100755
index 0000000..905f8f0
--- /dev/null
+++ b/res/layout/fragment_radar.xml
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/fragment_radar_tracking.xml b/res/layout/fragment_radar_tracking.xml
new file mode 100755
index 0000000..5cbc427
--- /dev/null
+++ b/res/layout/fragment_radar_tracking.xml
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/fragment_radar_tracking_kids_listitem.xml b/res/layout/fragment_radar_tracking_kids_listitem.xml
new file mode 100755
index 0000000..4c9649b
--- /dev/null
+++ b/res/layout/fragment_radar_tracking_kids_listitem.xml
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/fragment_radar_view.xml b/res/layout/fragment_radar_view.xml
new file mode 100755
index 0000000..18760a0
--- /dev/null
+++ b/res/layout/fragment_radar_view.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/fragment_report.xml b/res/layout/fragment_report.xml
new file mode 100755
index 0000000..018bfe4
--- /dev/null
+++ b/res/layout/fragment_report.xml
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/fragment_report_activities.xml b/res/layout/fragment_report_activities.xml
new file mode 100755
index 0000000..7fdedef
--- /dev/null
+++ b/res/layout/fragment_report_activities.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/fragment_report_performance.xml b/res/layout/fragment_report_performance.xml
new file mode 100755
index 0000000..481b408
--- /dev/null
+++ b/res/layout/fragment_report_performance.xml
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/item_avatar.xml b/res/layout/item_avatar.xml
new file mode 100755
index 0000000..2d0f26e
--- /dev/null
+++ b/res/layout/item_avatar.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/item_spinner.xml b/res/layout/item_spinner.xml
new file mode 100755
index 0000000..d34f756
--- /dev/null
+++ b/res/layout/item_spinner.xml
@@ -0,0 +1,6 @@
+
+
diff --git a/res/layout/item_spinner_dropdown.xml b/res/layout/item_spinner_dropdown.xml
new file mode 100755
index 0000000..6f83038
--- /dev/null
+++ b/res/layout/item_spinner_dropdown.xml
@@ -0,0 +1,11 @@
+
+
diff --git a/res/layout/list_item_activity_info.xml b/res/layout/list_item_activity_info.xml
new file mode 100755
index 0000000..8c841b2
--- /dev/null
+++ b/res/layout/list_item_activity_info.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/list_item_grant_kid.xml b/res/layout/list_item_grant_kid.xml
new file mode 100755
index 0000000..8e03392
--- /dev/null
+++ b/res/layout/list_item_grant_kid.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/list_item_grant_kid_new.xml b/res/layout/list_item_grant_kid_new.xml
new file mode 100755
index 0000000..0e707cc
--- /dev/null
+++ b/res/layout/list_item_grant_kid_new.xml
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/list_item_grant_kid_new_child_item.xml b/res/layout/list_item_grant_kid_new_child_item.xml
new file mode 100755
index 0000000..ba43e90
--- /dev/null
+++ b/res/layout/list_item_grant_kid_new_child_item.xml
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/list_item_group_title.xml b/res/layout/list_item_group_title.xml
new file mode 100755
index 0000000..b874d12
--- /dev/null
+++ b/res/layout/list_item_group_title.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/list_item_guest.xml b/res/layout/list_item_guest.xml
new file mode 100755
index 0000000..d5714ab
--- /dev/null
+++ b/res/layout/list_item_guest.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/list_item_indoor_locator.xml b/res/layout/list_item_indoor_locator.xml
new file mode 100755
index 0000000..d8612f9
--- /dev/null
+++ b/res/layout/list_item_indoor_locator.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/list_item_kid.xml b/res/layout/list_item_kid.xml
new file mode 100755
index 0000000..3c6d7be
--- /dev/null
+++ b/res/layout/list_item_kid.xml
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/list_item_kid_simple.xml b/res/layout/list_item_kid_simple.xml
new file mode 100755
index 0000000..eac53f4
--- /dev/null
+++ b/res/layout/list_item_kid_simple.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/list_item_kindergarten.xml b/res/layout/list_item_kindergarten.xml
new file mode 100755
index 0000000..d430480
--- /dev/null
+++ b/res/layout/list_item_kindergarten.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/list_item_master.xml b/res/layout/list_item_master.xml
new file mode 100755
index 0000000..30ab0ca
--- /dev/null
+++ b/res/layout/list_item_master.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/list_item_my_kids_list_first_layer.xml b/res/layout/list_item_my_kids_list_first_layer.xml
new file mode 100755
index 0000000..9a0d8ac
--- /dev/null
+++ b/res/layout/list_item_my_kids_list_first_layer.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/list_item_performance.xml b/res/layout/list_item_performance.xml
new file mode 100755
index 0000000..6c128b5
--- /dev/null
+++ b/res/layout/list_item_performance.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/list_item_radar_tracking_kid.xml b/res/layout/list_item_radar_tracking_kid.xml
new file mode 100755
index 0000000..2374dd6
--- /dev/null
+++ b/res/layout/list_item_radar_tracking_kid.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/list_item_search_guest.xml b/res/layout/list_item_search_guest.xml
new file mode 100755
index 0000000..d5714ab
--- /dev/null
+++ b/res/layout/list_item_search_guest.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/tab_label.xml b/res/layout/tab_label.xml
new file mode 100755
index 0000000..3ef93e0
--- /dev/null
+++ b/res/layout/tab_label.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/menu/activity_beacon_list.xml b/res/menu/activity_beacon_list.xml
new file mode 100755
index 0000000..9be553e
--- /dev/null
+++ b/res/menu/activity_beacon_list.xml
@@ -0,0 +1,31 @@
+
+
+
\ No newline at end of file
diff --git a/res/menu/activity_kids_list.xml b/res/menu/activity_kids_list.xml
new file mode 100755
index 0000000..e65267d
--- /dev/null
+++ b/res/menu/activity_kids_list.xml
@@ -0,0 +1,26 @@
+
+
+
\ No newline at end of file
diff --git a/res/menu/share_action_provider.xml b/res/menu/share_action_provider.xml
new file mode 100755
index 0000000..4718d3f
--- /dev/null
+++ b/res/menu/share_action_provider.xml
@@ -0,0 +1,29 @@
+
+
+
diff --git a/res/raw/antibeep.mp3 b/res/raw/antibeep.mp3
new file mode 100755
index 0000000..415ca7b
Binary files /dev/null and b/res/raw/antibeep.mp3 differ
diff --git a/res/values-v14/styles.xml b/res/values-v14/styles.xml
new file mode 100755
index 0000000..ae29895
--- /dev/null
+++ b/res/values-v14/styles.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
diff --git a/res/values-zh-rCN/string.xml b/res/values-zh-rCN/string.xml
new file mode 100755
index 0000000..443ea13
--- /dev/null
+++ b/res/values-zh-rCN/string.xml
@@ -0,0 +1,211 @@
+
+
+
+
+ 宝宝安
+ By Continuing, you agree to our Terms and Privacy Policy.
+ 用户名
+ 电邮 (可选)
+ 电话 (用户名)
+ 密码
+ 用户名
+ 选择幼稚园
+ 忘记密码 ?
+ 室内定位
+ 雷达追踪
+ 简报
+ 儿童列表
+ 全部蜂鸣
+ 蜂鸣全部的设备?
+ 修改
+ 本日
+ 自定义:\
+ 天
+ 蜂鸣
+ 校车轨迹
+ 通告
+ 设定
+ 宝宝安APP功能
+ 开启声音
+ 开启震动
+ 语言
+ English
+ 繁体中文
+ 简体中文
+ 其他
+ 关于
+ 服务条款
+ 隐私政策
+ 忘记密码
+ 请输入您注册的用户名(电话)还有一个孩子的信息,以便获取密码. (注意:测试功能,密码恢复为00000000,8个0)
+ 输入用户名(电话)
+ 输入电邮地址
+ 输入孩子姓名
+ 选择孩子生日
+ 活动详情
+ 通告详情
+ 秒.
+ 对不起,你的手机不支持bluetooth4.0
+ 不支持bluetooth
+ 宝宝安 (EyeBB) 是一个智能儿童行为安全监控软件。配合我们开发的基于蓝牙4.0 BLE的专用智能设备 Macaron,宝宝安能为您监视儿童在家居、校车及幼稚园范围内行为安全,并提供智能行为分析数据。
+ 版本
+ 欢迎访问 www.eyebb.com
+ 选择幼稚园
+ 选择儿童
+ 意见回馈
+ 用户名格式错误!
+ 邮件地址格式错误!
+ 暱称格式错误!
+ 密码格式错误! \n(例如:A-Z a-z 0-9) 长度:6-20
+ 加载中…
+ 自动刷新时间 (秒):
+ 请输入更新时间
+ 没有记录
+ 信息匹配
+ 请输入孩子的姓名
+ 请选择孩子的生日
+ 孩子姓名
+ 孩子生日
+ 选择您的身份
+ 主用户
+ 一般用户
+ 请选择一个身份!
+ 请填入完整信息!
+ 查看所有房间
+ 自动刷新
+ 绑定宝宝安?
+ 防丢模式
+ 授权
+ 宝宝安设备功能
+ 暱称
+ 请提出您宝贵的建议或者告诉我们您的不满:
+ 您的意见
+ 错误
+ 建议
+ 问题
+ 没有过往活动
+ 请填入内容!
+ 联繫信息
+ 用户信息
+ 填入电子邮件或者电话号码信息
+ 此用户名已经使用
+ 网络错误,请检查网路!
+ 注册成功!
+ 暂时没有这个孩子的信息
+ 错误!这个孩子信息已经被用户绑定
+ 错误!此宝宝安设备已经被绑定过,请更换.
+ 提交成功,谢谢!
+ 请先邀请他安装宝宝安,再重试。
+ 确定解除绑定设备吗?
+ 宝宝安解除绑定!
+ 出错!宝宝安解除绑定失败!
+ 没有监护的宝宝
+ 无监护人...
+ 请选择孩子.
+ 授权成功!
+ 修改密码
+ 原密码
+ 新密码
+ 重複新密码
+ 两次输入的密码不一致!
+ 修改密码成功,谢谢!
+ 修改暱称成功,谢谢!
+ 温馨提示
+ 原始密码不正确.
+ 此用户不存在.
+ 已授权的亲友:
+ 被哪些亲友授权:
+ 头像
+ 幼稚园
+ eyebb电量:
+ eyebb未连接,电量未知
+ 错误,只有父母账号才可以进行绑定.
+ 此孩子已经拥有监护人.
+ 设备扫描中
+ 链接设备中
+ 扫描不到设备
+ 更新设备信息
+ 链接设备失败
+ 更新云端数据
+ 更新云端数据失败
+ 设备绑定成功
+ 使用者账户
+ 修改暱称
+ 授权给用户:
+ 失败,这个用户并不拥有这个孩子.
+ 修改暱称
+ 新暱称
+ 已绑定
+ 未绑定 (没有监护的宝宝)
+ 已被授权
+ 信号强
+ 信号中
+ 信号差
+ 请填入密码!
+ 请填入暱称!
+ 请填入新密码!
+ 请重複填入新密码!
+ 请选择你的回馈类型!
+ 点击查询
+ 排序为
+ 姓名
+ 区域
+ 查找孩子…
+ 请先关闭雷达追踪
+ (点击邀请
+ 更新宝宝安设备固件
+ 申请宝宝安设备二维码
+ 申请最近一次绑定的宝宝安设备二维码
+ 无法连接到服务器(点击连接)
+ 连接中…
+
+ 注册
+ 登录
+ 登出
+ 继续
+ 表现
+ 活动
+ 返回
+ 确定
+ 确定
+ 取消
+ 开啓
+ 确认
+ 我要绑定
+ 解除绑定
+ 下次再说
+ 下一步
+ 查找孩子
+ 增加副监管人
+ 搜索副监管人
+ 搜索
+ 搜索Mac地址
+ 添加
+ 孩子列表
+ 授权列表
+ 影相
+ 从相册选择
+ 重新扫描
+ 重新连接
+ 重新更新
+ 完成
+ 连接
+ 未连接
+ 解绑
+ 设定
+
+ 登录中…
+ 注册中…
+ 读取中…
+ 请选择幼稚园
+ 帐号,密码错误或者请检查您的网路
+ 登录失败, 请重新登录
+ 读取设备服务中…
+ 获取注册id失败,重试…
+ 连接服务器失败,请稍候再试
+
+ Bluetooth Low Energy technology is not supported on your device.
+ Bluetooth is not supported on your device.
+ Please turn on Bluetooth to scan for SensorTag devices around you.
+
+
\ No newline at end of file
diff --git a/res/values-zh-rHK/string.xml b/res/values-zh-rHK/string.xml
new file mode 100755
index 0000000..379d05b
--- /dev/null
+++ b/res/values-zh-rHK/string.xml
@@ -0,0 +1,213 @@
+
+
+
+
+ 寶寶安
+ By Continuing, you agree to our Terms and Privacy Policy.
+ 用戶名
+ 電郵 (可選)
+ 電話 (用戶名)
+ 密碼
+ 用戶名
+ 選擇幼稚園
+ 忘記密碼 ?
+ 室內定位
+ 雷達追踪
+ 簡報
+ 兒童列表
+ 全部蜂鳴
+ 蜂鳴全部的設備?
+ 修改
+ 本日
+ 自定義:\
+ 天
+ 蜂鳴
+ 校車軌跡
+ 通告
+ 設定
+ 寶寶安APP功能
+ 開啟聲音
+ 開啟震動
+ 語言
+ English
+ 繁體中文
+ 简体中文
+ 其他
+ 關於
+ 服務條款
+ 隱私政策
+ 忘記密碼
+ 請輸入您註冊的用戶名(電話)還有一個孩子的信息,以便獲取密碼. (注意:測試功能,密碼恢復為00000000,8個0)
+ 輸入用戶名(電話)
+ 輸入電郵地址
+ 輸入孩子姓名
+ 選擇孩子生日
+ 活動詳情
+ 通告詳情
+ 秒.
+ 對不起,你的手機不支持bluetooth4.0
+ 不支持bluetooth
+ 寶寶安 (EyeBB) 是一個智能兒童行為安全監控軟件。配合我們開發的基於藍牙4.0 BLE的專用智能設備 Macaron,寶寶安能為您監視兒童在家居、校車及幼稚園範圍內行為安全,並提供智能行為分析數據。
+ 版本
+ 歡迎訪問 www.eyebb.com
+ 選擇幼稚園
+ 選擇兒童
+ 意見回饋
+ 用戶名格式錯誤!
+ 郵件地址格式錯誤!
+ 暱稱格式錯誤!
+ 密碼格式錯誤! \n(例如:A-Z a-z 0-9) 長度:6-20
+ 加載中…
+ 自動刷新時間 (秒):
+ 請輸入更新時間
+ 沒有記錄
+ 信息匹配
+ 請輸入孩子的姓名
+ 請選擇孩子的生日
+ 孩子姓名
+ 孩子生日
+ 選擇您的身份
+ 主用戶
+ 一般用戶
+ 請選擇一個身份!
+ 請填入完整信息!
+ 查看所有房間
+ 自動刷新
+ 绑定寶寶安?
+ 防丟模式
+ 授權
+ 寶寶安設備功能
+ 暱稱
+ 請提出您寶貴的建議或者告訴我們您的不滿:
+ 您的意見
+ 錯誤
+ 建議
+ 問題
+ 沒有過往活動
+ 請填入內容!
+ 聯繫信息
+ 用戶信息
+ 填入電子郵件或者電話號碼信息
+ 此用戶名已經使用
+ 網絡錯誤,請檢查網路!
+ 註冊成功!
+ 暫時沒有這個孩子的信息
+ 錯誤!這個孩子信息已經被用戶綁定
+ 錯誤!此寶寶安設備已經被綁定過,請更換.
+ 提交成功,謝謝!
+ 請先邀請他安裝寶寶安,再重試。
+ 確定解除綁定设备嗎?
+ 寶寶安解除綁定!
+ 出錯!寶寶安解除綁定失敗!
+ 沒有監護的寶寶
+ 無監護人...
+ 請選擇孩子.
+ 授權成功!
+ 修改密碼
+ 原密碼
+ 新密碼
+ 重複新密碼
+ 两次输入的密码不一致!
+ 修改密碼成功,謝謝!
+ 修改暱稱成功,謝謝!
+ 溫馨提示
+ 原始密碼不正確.
+ 此用戶不存在.
+ 已授權的親友:
+ 被哪些親友授權:
+ 头像
+ 幼稚園
+ eyebb電量:
+ eyebb未連接,電量未知
+ 錯誤,只有父母賬號才可以進行綁定.
+ 此孩子已經擁有監護人.
+ 設備掃描中
+ 鏈接設備中
+ 掃描不到設備
+ 更新設備信息
+ 鏈接設備失敗
+ 更新雲端數據
+ 更新雲端數據失敗
+ 設備綁定成功
+ 使用者賬戶
+ 修改暱稱
+ 授權給用戶:
+ 失敗,這個用戶並不擁有這個孩子.
+ 修改暱稱
+ 新暱稱
+ 已綁定
+ 未綁定 (沒有監護的寶寶)
+ 已被授權
+ 信號強
+ 信號中
+ 信號差
+ 請填入密碼!
+ 請填入暱稱!
+ 請填入新密碼!
+ 請重複填入新密碼!
+ 請選擇你的回饋類型!
+ 點擊查詢
+ 排序為
+ 姓名
+ 區域
+ 查找孩子…
+ 請先關閉雷達追踪
+ (點擊邀請
+ 更新寶寶安設備固件
+ 申請寶寶安設備二維碼
+ 申請最近一次綁定的寶寶安設備二維碼
+ 申請設備二維碼失敗,請使用監護人賬號
+ 無法連接到服務器(點擊連接)
+ 連接中…
+ 我想授權你觀看我的孩子情況,請你在完成安裝寶寶安後通知我,我會再次授權給你。連結:play.google.com/xxxxxxxx
+
+ 註冊
+ 登錄
+ 登出
+ 繼續
+ 表現
+ 活動
+ 返回
+ 確定
+ 確定
+ 取消
+ 開啓
+ 確認
+ 我要綁定
+ 解除綁定
+ 下次再說
+ 下一步
+ 查找孩子
+ 增加副監管人
+ 搜索副監管人
+ 搜索
+ 搜索Mac地址
+ 添加
+ 孩子列表
+ 授權列表
+ 影相
+ 從相冊選擇
+ 重新扫描
+ 重新连接
+ 重新更新
+ 完成
+ 連接
+ 未連接
+ 解綁
+ 設定
+
+ 登錄中…
+ 註冊中…
+ 讀取中…
+ 請選擇幼稚園
+ 帳號,密碼錯誤或者請檢查您的網路
+ 登錄失敗, 請重新登錄
+ 讀取設備服務中…
+ 获取注册id失败,重试…
+ 連接服務器失敗,請稍候再試
+
+ Bluetooth Low Energy technology is not supported on your device.
+ Bluetooth is not supported on your device.
+ Please turn on Bluetooth to scan for SensorTag devices around you.
+
+
\ No newline at end of file
diff --git a/res/values-zh-rTW/string.xml b/res/values-zh-rTW/string.xml
new file mode 100755
index 0000000..379d05b
--- /dev/null
+++ b/res/values-zh-rTW/string.xml
@@ -0,0 +1,213 @@
+
+
+
+
+ 寶寶安
+ By Continuing, you agree to our Terms and Privacy Policy.
+ 用戶名
+ 電郵 (可選)
+ 電話 (用戶名)
+ 密碼
+ 用戶名
+ 選擇幼稚園
+ 忘記密碼 ?
+ 室內定位
+ 雷達追踪
+ 簡報
+ 兒童列表
+ 全部蜂鳴
+ 蜂鳴全部的設備?
+ 修改
+ 本日
+ 自定義:\
+ 天
+ 蜂鳴
+ 校車軌跡
+ 通告
+ 設定
+ 寶寶安APP功能
+ 開啟聲音
+ 開啟震動
+ 語言
+ English
+ 繁體中文
+ 简体中文
+ 其他
+ 關於
+ 服務條款
+ 隱私政策
+ 忘記密碼
+ 請輸入您註冊的用戶名(電話)還有一個孩子的信息,以便獲取密碼. (注意:測試功能,密碼恢復為00000000,8個0)
+ 輸入用戶名(電話)
+ 輸入電郵地址
+ 輸入孩子姓名
+ 選擇孩子生日
+ 活動詳情
+ 通告詳情
+ 秒.
+ 對不起,你的手機不支持bluetooth4.0
+ 不支持bluetooth
+ 寶寶安 (EyeBB) 是一個智能兒童行為安全監控軟件。配合我們開發的基於藍牙4.0 BLE的專用智能設備 Macaron,寶寶安能為您監視兒童在家居、校車及幼稚園範圍內行為安全,並提供智能行為分析數據。
+ 版本
+ 歡迎訪問 www.eyebb.com
+ 選擇幼稚園
+ 選擇兒童
+ 意見回饋
+ 用戶名格式錯誤!
+ 郵件地址格式錯誤!
+ 暱稱格式錯誤!
+ 密碼格式錯誤! \n(例如:A-Z a-z 0-9) 長度:6-20
+ 加載中…
+ 自動刷新時間 (秒):
+ 請輸入更新時間
+ 沒有記錄
+ 信息匹配
+ 請輸入孩子的姓名
+ 請選擇孩子的生日
+ 孩子姓名
+ 孩子生日
+ 選擇您的身份
+ 主用戶
+ 一般用戶
+ 請選擇一個身份!
+ 請填入完整信息!
+ 查看所有房間
+ 自動刷新
+ 绑定寶寶安?
+ 防丟模式
+ 授權
+ 寶寶安設備功能
+ 暱稱
+ 請提出您寶貴的建議或者告訴我們您的不滿:
+ 您的意見
+ 錯誤
+ 建議
+ 問題
+ 沒有過往活動
+ 請填入內容!
+ 聯繫信息
+ 用戶信息
+ 填入電子郵件或者電話號碼信息
+ 此用戶名已經使用
+ 網絡錯誤,請檢查網路!
+ 註冊成功!
+ 暫時沒有這個孩子的信息
+ 錯誤!這個孩子信息已經被用戶綁定
+ 錯誤!此寶寶安設備已經被綁定過,請更換.
+ 提交成功,謝謝!
+ 請先邀請他安裝寶寶安,再重試。
+ 確定解除綁定设备嗎?
+ 寶寶安解除綁定!
+ 出錯!寶寶安解除綁定失敗!
+ 沒有監護的寶寶
+ 無監護人...
+ 請選擇孩子.
+ 授權成功!
+ 修改密碼
+ 原密碼
+ 新密碼
+ 重複新密碼
+ 两次输入的密码不一致!
+ 修改密碼成功,謝謝!
+ 修改暱稱成功,謝謝!
+ 溫馨提示
+ 原始密碼不正確.
+ 此用戶不存在.
+ 已授權的親友:
+ 被哪些親友授權:
+ 头像
+ 幼稚園
+ eyebb電量:
+ eyebb未連接,電量未知
+ 錯誤,只有父母賬號才可以進行綁定.
+ 此孩子已經擁有監護人.
+ 設備掃描中
+ 鏈接設備中
+ 掃描不到設備
+ 更新設備信息
+ 鏈接設備失敗
+ 更新雲端數據
+ 更新雲端數據失敗
+ 設備綁定成功
+ 使用者賬戶
+ 修改暱稱
+ 授權給用戶:
+ 失敗,這個用戶並不擁有這個孩子.
+ 修改暱稱
+ 新暱稱
+ 已綁定
+ 未綁定 (沒有監護的寶寶)
+ 已被授權
+ 信號強
+ 信號中
+ 信號差
+ 請填入密碼!
+ 請填入暱稱!
+ 請填入新密碼!
+ 請重複填入新密碼!
+ 請選擇你的回饋類型!
+ 點擊查詢
+ 排序為
+ 姓名
+ 區域
+ 查找孩子…
+ 請先關閉雷達追踪
+ (點擊邀請
+ 更新寶寶安設備固件
+ 申請寶寶安設備二維碼
+ 申請最近一次綁定的寶寶安設備二維碼
+ 申請設備二維碼失敗,請使用監護人賬號
+ 無法連接到服務器(點擊連接)
+ 連接中…
+ 我想授權你觀看我的孩子情況,請你在完成安裝寶寶安後通知我,我會再次授權給你。連結:play.google.com/xxxxxxxx
+
+ 註冊
+ 登錄
+ 登出
+ 繼續
+ 表現
+ 活動
+ 返回
+ 確定
+ 確定
+ 取消
+ 開啓
+ 確認
+ 我要綁定
+ 解除綁定
+ 下次再說
+ 下一步
+ 查找孩子
+ 增加副監管人
+ 搜索副監管人
+ 搜索
+ 搜索Mac地址
+ 添加
+ 孩子列表
+ 授權列表
+ 影相
+ 從相冊選擇
+ 重新扫描
+ 重新连接
+ 重新更新
+ 完成
+ 連接
+ 未連接
+ 解綁
+ 設定
+
+ 登錄中…
+ 註冊中…
+ 讀取中…
+ 請選擇幼稚園
+ 帳號,密碼錯誤或者請檢查您的網路
+ 登錄失敗, 請重新登錄
+ 讀取設備服務中…
+ 获取注册id失败,重试…
+ 連接服務器失敗,請稍候再試
+
+ Bluetooth Low Energy technology is not supported on your device.
+ Bluetooth is not supported on your device.
+ Please turn on Bluetooth to scan for SensorTag devices around you.
+
+
\ No newline at end of file
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
new file mode 100755
index 0000000..b5bbb89
--- /dev/null
+++ b/res/values/attrs.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/values/drawable.xml b/res/values/drawable.xml
new file mode 100755
index 0000000..ecadc8d
--- /dev/null
+++ b/res/values/drawable.xml
@@ -0,0 +1,36 @@
+
+
+
+ #FFEC4235
+ #FFFFFFFF
+ #FFF0F0F0
+ #FFEC4235
+ #00000000
+ #FF000000
+ #FFFFFFFF
+ #FFEC4235
+ #FF10B55D
+ #FF585854
+ #FF31b4f6
+ #FFBABABA
+ #FFFFC342
+ #FF1CD7FF
+ #33b5e5
+
+
+ - @color/gplus_color_1
+ - @color/gplus_color_2
+ - @color/gplus_color_3
+ - @color/gplus_color_4
+
+
+ #3e802f
+ #f4b400
+ #427fed
+ #b23424
+ #FFFFFFFF
+ #fff2f2f2
+ #FFe3e3e3
+ #FFADADAD
+
+
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
new file mode 100755
index 0000000..b1e67b0
--- /dev/null
+++ b/res/values/strings.xml
@@ -0,0 +1,212 @@
+
+
+
+
+ - This week
+ - Last 14 days
+ - 50 days
+
+
+ EyeBB
+ By Continuing, you agree to our Terms and Privacy Policy.
+ User Name
+ Nick Name
+ Email (optional)
+ Phone Number (User Name)
+ Password
+ User Name
+ Select your kid\'s kindergarten
+ Fill in your kid\'s name
+ Kid\'s name
+ Kid\'s birthday
+ Select your kid\'s birthday
+ Forgot your password ?
+ Indoor Locator
+ Radar Tracking
+ Report
+ Kids-List
+ Change Kids
+ Beep all
+ Beep all devices?
+ Change
+ Today
+ Customized:\
+ days
+ Beep
+ School Bus Tracking
+ Notifications
+ Settings
+ Eyebb app function
+ Enable Sound
+ Auto-Refresh Time (Second):
+ 5
+ Enable Vibration
+ Language
+ English
+ 繁體中文
+ 简体中文
+ Others
+ About
+ Terms of Service
+ Update Password
+ Update Nickname
+ Privacy Policy
+ Forget Password
+ Please enter your user name (phone number) and child information to received details for your new password. (this is testing function. the new password is 00000000)
+ Enter your email address
+ Enter your user name (phone number)
+ Enter your child name
+ Choose your child birthday
+ Enter the refresh time
+ Activity Details
+ Sec.
+ Bluetooth not supported
+ Notification Details
+ EyeBB is a smart kid bahavior analysis and monitoring application. It works with our developed Bluetooth Low Energy-based smart device "Macaron",EyeBB can help you monitor the safety of kids at home, in the school bus, and in the kindergarten. It also provides accurate behavior analysis for your kids.
+ Version
+ Welcome to www.eyebb.com
+ Invalid kindergarten
+ The User Name is not in the correct format!
+ The Email is not in the correct format!
+ The Nickname is not in the correct format!
+ The Password is not in the correct format! \n(eg.A-Z a-z 0-9) Length:6-20
+ Loading…
+ No record
+ View All Rooms
+ Oops, Something has gone wrong!
+ Auto-Refresh
+ Binding Eyebb Device?
+ Anti lost
+ Authorization
+ Eyebb device function
+ More
+ Feedback
+ Love it? Hate it? Would you like to suggest a new feature or report a bug? We would love to hear from you:
+ Your comments
+ bug
+ idea
+ question
+ No content...
+ Please, fill in something!!
+ Contact information
+ User information
+ Fill in the email or phone information.
+ Sorry, the username is already used
+ error! Please check your network.
+ Successfully register!
+ This child does not exist
+ Error! This child has already binded.
+ Error! This EYEBB has already binded. Please change others.
+ Successful! Thank you.
+ Sorry,this guest is not exist.
+ Do you want to unbind the device?
+ Eyebb unbind successfully!
+ Oops! Eyebb unbind Unsuccessfully!
+ No data, no bind child
+ No Guest
+ Sorry,Please select the children.
+ Grant Successfully!
+ Old Password
+ New Nickname
+ New Password
+ Repeat New Password
+ Sorry! The two new passwords do not match.
+ Updaate password successfully! Thank you.
+ Updaate nickname successfully! Thank you.
+ Tips.
+ The original password is not correct.
+ Sorry. This user may not exist.
+ Authorized to
+ Authorization from
+ Avatar
+ Kindergarten
+ eyeBB Battery Usage:
+ eyebb is not connected
+ Wrong login, only parents account can register binding.
+ Master of the child already exists.
+ Scanning Macaron
+ Connecting Macaron
+ Cannot scan Macaron
+ Update Macaron data
+ Cannot connect Macaron
+ Update server data
+ Update server data fail
+ Eyebb binding successfully
+ User account
+ Update nickname
+ Authorize to user:
+ Sorry! Account user does not have this child.
+ Binding children
+ unBinding children
+ Children has been granted
+ Strong Signal
+ Good Signal
+ Weak Signal
+ Please, enter your password!
+ Please, enter your nickname!
+ Please, enter your new password!
+ Please, repeat to enter your new password!
+ Please, choose your feedback type.
+ Click here
+ Sorry, Your phone is not supported.
+ Sort by
+ Name
+ Location
+ Search kids…
+ Please, turn off the radar function.
+ (Click here to share
+ Update the eyebb device firmware
+ Apply for QR code
+ Apply for the latest QR code
+ Fail to get the QR code
+ Network unavailable (Click to connect)
+ Connecting…
+ Invite him/her?。Link:play.google.com/xxxxxxxx
+
+ Sign Up
+ Login
+ Add guest
+ Serach guest
+ Binding
+ Unbind
+ Search child
+ Logout
+ Continue
+ Next step
+ Performance
+ Activities
+ Back
+ Cancel
+ Turn on
+ Confirm
+ OK
+ Skip
+ Share
+ Verify
+ Search
+ Search mac addresss
+ Add
+ Children list
+ Authorization list
+ Take Photo
+ Choose Photo
+ re-scan
+ re-connect
+ re-update
+ Finish
+ Supervised
+ Missed
+ Disconnect
+ Setting
+
+ Login…
+ Sign up…
+ Loading…
+ Please select your kid\'s kindergarten
+ Invalid username and password, or check your network.
+ Login failed, please try again
+ Reading Service…
+ Failed to get register id, retrying…
+ Failed to connect to server, please try again later
+
+
\ No newline at end of file
diff --git a/res/values/styles.xml b/res/values/styles.xml
new file mode 100755
index 0000000..decc585
--- /dev/null
+++ b/res/values/styles.xml
@@ -0,0 +1,227 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/values/themes.xml b/res/values/themes.xml
new file mode 100755
index 0000000..58006f1
--- /dev/null
+++ b/res/values/themes.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/com/twinly/eyebb/activity/AboutActivity.java b/src/com/twinly/eyebb/activity/AboutActivity.java
new file mode 100755
index 0000000..7fa23c3
--- /dev/null
+++ b/src/com/twinly/eyebb/activity/AboutActivity.java
@@ -0,0 +1,90 @@
+package com.twinly.eyebb.activity;
+
+import android.app.Activity;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import android.view.MenuItem;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.twinly.eyebb.R;
+import com.twinly.eyebb.constant.Constants;
+import com.twinly.eyebb.utils.SharePrefsUtils;
+
+/**
+ * @author eyebb team
+ *
+ * @category AboutActivity
+ *
+ * this activity is in options activity (The eleventh layer), changing
+ * the password whit is its main function.
+ */
+public class AboutActivity extends Activity {
+ private ImageView logo;
+ private String version;
+ private TextView versionTxt;
+
+ protected void onCreate(Bundle savedInstanceState) {
+
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_about);
+
+ // check logo
+ logo = (ImageView) findViewById(R.id.logo_img);
+ // version
+ try {
+ version = getVersionName();
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ versionTxt = (TextView) findViewById(R.id.version);
+ versionTxt.setText(version);
+ setLogo();
+
+ setTitle(getString(R.string.text_about));
+
+ getActionBar().setDisplayHomeAsUpEnabled(true);
+ getActionBar().setIcon(android.R.color.transparent);
+
+ }
+
+ private void setLogo() {
+ switch (SharePrefsUtils.getLanguage(this)) {
+ case Constants.LOCALE_TW:
+ case Constants.LOCALE_HK:
+ case Constants.LOCALE_CN:
+ logo.setBackground(getResources().getDrawable(R.drawable.logo_cht));
+ break;
+ default:
+ logo.setBackground(getResources().getDrawable(R.drawable.logo_en));
+ break;
+ }
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ finish();
+ return true;
+ } else if (item.getItemId() == 0) {
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ /**
+ * version
+ */
+ private String getVersionName() throws Exception {
+ // get package
+ PackageManager packageManager = getPackageManager();
+ // get package name
+ PackageInfo packInfo = packageManager.getPackageInfo(getPackageName(),
+ 0);
+ String version = packInfo.versionName;
+ return version;
+ }
+}
diff --git a/src/com/twinly/eyebb/activity/AuthorizeKidsActivity.java b/src/com/twinly/eyebb/activity/AuthorizeKidsActivity.java
new file mode 100755
index 0000000..577590a
--- /dev/null
+++ b/src/com/twinly/eyebb/activity/AuthorizeKidsActivity.java
@@ -0,0 +1,322 @@
+package com.twinly.eyebb.activity;
+
+import java.util.ArrayList;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.view.KeyEvent;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.twinly.eyebb.R;
+import com.twinly.eyebb.adapter.GuestListViewAdapter;
+import com.twinly.eyebb.constant.ActivityConstants;
+import com.twinly.eyebb.constant.Constants;
+import com.twinly.eyebb.constant.HttpConstants;
+import com.twinly.eyebb.customview.CircleImageView;
+import com.twinly.eyebb.customview.LinearLayoutForListView;
+import com.twinly.eyebb.customview.LoadingDialog;
+import com.twinly.eyebb.model.Child;
+import com.twinly.eyebb.model.User;
+import com.twinly.eyebb.utils.HttpRequestUtils;
+
+/**
+ * @author eyebb team
+ *
+ * @category AuthorizeKidsActivity
+ *
+ * this activity is in options activity (The fifth layer), it shows
+ * the list of other users who are authorized by master. you also can
+ * find which master people authorizes you on list.
+ */
+
+public class AuthorizeKidsActivity extends Activity {
+ // private LinearLayoutForListView guest_listView;
+ // private LinearLayoutForListView master_listView;
+ private LinearLayoutForListView listView;
+ private GuestListViewAdapter guestAdapter;
+
+ // private Button btnAddNewGuest;
+ private ArrayList authToGuestData;
+ private ArrayList authFromMasterData;
+ private ArrayList authFromMasterChildrenData;
+
+ private String retStr;
+
+ public static final int UPDATE_VIEW = 11111;
+ private Dialog authDialog;
+ private Runnable postFindGuestsToServerRunnable;
+ public CircleImageView avatar;
+ public TextView name;
+ public TextView phone;
+ public RelativeLayout btn_guest_view;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setTitle(getString(R.string.btn_auth_list));
+ getActionBar().setDisplayHomeAsUpEnabled(true);
+ getActionBar().setIcon(android.R.color.transparent);
+
+ setContentView(R.layout.activity_authorize_guest_list);
+
+ authDialog = LoadingDialog.createLoadingDialog(
+ AuthorizeKidsActivity.this, getString(R.string.toast_loading));
+ authDialog.show();
+ postFindGuestsToServerRunnable = new Runnable() {
+
+ @Override
+ public void run() {
+ postFindGuestsToServer();
+ }
+ };
+ new Thread(postFindGuestsToServerRunnable).start();
+
+ listView = (LinearLayoutForListView) findViewById(R.id.listView_authorization_from_others);
+
+ authToGuestData = new ArrayList();
+ authFromMasterData = new ArrayList();
+ authFromMasterChildrenData = new ArrayList();
+
+ }
+
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
+ finish();
+ System.out.println("=========>onKeyDown");
+ return true;
+ }
+ return super.onKeyDown(keyCode, event);
+ }
+
+ private void postFindGuestsToServer() {
+ try {
+ retStr = HttpRequestUtils.get(HttpConstants.AUTH_FIND_GUESTS, null);
+ // System.out.println("retStrpost======>" + retStr);
+ if (retStr.equals(HttpConstants.HTTP_POST_RESPONSE_EXCEPTION)
+ || retStr.equals("") || retStr.length() == 0) {
+ System.out.println("connect error");
+
+ Message msg = handler.obtainMessage();
+ msg.what = Constants.CONNECT_ERROR;
+ handler.sendMessage(msg);
+ } else {
+ if (retStr.length() > 0) {
+ Message msg = handler.obtainMessage();
+ msg.what = UPDATE_VIEW;
+ handler.sendMessage(msg);
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ private ArrayList parseGuestJson(String getData) {
+ try {
+ authToGuestData.clear();
+ if (!JSONObject.NULL.equals(getData)) {
+ // guest_data.clear();
+ boolean isGusetNull = new JSONObject(getData)
+ .isNull(HttpConstants.JSON_KEY_GUESTS);
+ if (!isGusetNull) {
+ JSONArray guests = new JSONObject(getData)
+ .getJSONArray(HttpConstants.JSON_KEY_GUESTS);
+ if (guests.length() > 0) {
+ for (int i = 0; i < guests.length(); i++) {
+ JSONObject guest = ((JSONObject) guests.opt(i))
+ .getJSONObject(HttpConstants.JSON_KEY_USER);
+
+ User guestMode = new User();
+
+ guestMode.setGuardianId(guest
+ .getString(HttpConstants.JSON_KEY_USER_ID));
+ guestMode
+ .setName(guest
+ .getString(HttpConstants.JSON_KEY_USER_NAME));
+ guestMode
+ .setPhoneNumber(guest
+ .getString(HttpConstants.JSON_KEY_USER_PHONE));
+ guestMode
+ .setType(guest
+ .getString(HttpConstants.JSON_KEY_USER_TYPE));
+
+ authToGuestData.add(guestMode);
+ }
+ }
+ }
+ }
+
+ // System.out.println("guest_data>" + authToGuestData.size());
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ return authToGuestData;
+ }
+
+ private ArrayList parseMasterJson(String getData) {
+ try {
+ authFromMasterData.clear();
+ authFromMasterChildrenData.clear();
+ if (!JSONObject.NULL.equals(getData)) {
+ boolean isMasterNull = new JSONObject(getData)
+ .isNull(HttpConstants.JSON_KEY_MASTERS);
+ if (!isMasterNull) {
+ JSONArray masters = new JSONObject(getData)
+ .getJSONArray(HttpConstants.JSON_KEY_MASTERS);
+
+ if (masters.length() > 0) {
+ for (int i = 0; i < masters.length(); i++) {
+ JSONObject master = ((JSONObject) masters.opt(i))
+ .getJSONObject(HttpConstants.JSON_KEY_USER);
+
+ User masterMode = new User();
+
+ masterMode.setGuardianId(master
+ .getString(HttpConstants.JSON_KEY_USER_ID));
+ masterMode
+ .setName(master
+ .getString(HttpConstants.JSON_KEY_USER_NAME));
+ masterMode
+ .setPhoneNumber(master
+ .getString(HttpConstants.JSON_KEY_USER_PHONE));
+ masterMode
+ .setType(master
+ .getString(HttpConstants.JSON_KEY_USER_TYPE));
+
+ authFromMasterData.add(masterMode);
+
+ JSONArray master_children = ((JSONObject) masters
+ .opt(i))
+ .getJSONArray(HttpConstants.JSON_KEY_CHILDREN_BY_GUARDIAN);
+
+ for (int j = 0; j < master_children.length(); j++) {
+ JSONObject master_child_json = master_children
+ .getJSONObject(j);
+
+ Child master_child = new Child();
+
+ master_child
+ .setChildId(master_child_json
+ .getLong(HttpConstants.JSON_KEY_CHILD_ID));
+ master_child
+ .setName(master_child_json
+ .getString(HttpConstants.JSON_KEY_CHILD_NAME));
+ master_child
+ .setIcon(master_child_json
+ .getString(HttpConstants.JSON_KEY_CHILD_ICON));
+
+ /**
+ * keep USER id
+ */
+ master_child
+ .setPhone(master
+ .getString(HttpConstants.JSON_KEY_USER_ID));
+
+ authFromMasterChildrenData.add(master_child);
+ }
+ }
+ }
+ }
+ }
+
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ return authFromMasterData;
+ }
+
+ @SuppressLint("HandlerLeak")
+ Handler handler = new Handler() {
+
+ @SuppressLint("ShowToast")
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+
+ case Constants.CONNECT_ERROR:
+ Toast.makeText(AuthorizeKidsActivity.this,
+ R.string.text_network_error, Toast.LENGTH_LONG).show();
+
+ if (authDialog.isShowing() && authDialog != null) {
+ authDialog.dismiss();
+ }
+ break;
+
+ case Constants.UNBIND_SUCCESS:
+ Toast.makeText(AuthorizeKidsActivity.this,
+ R.string.text_unbind_success, Toast.LENGTH_LONG).show();
+
+ break;
+
+ case Constants.UNBIND_FAIL:
+
+ Toast.makeText(AuthorizeKidsActivity.this,
+ R.string.text_unbind_fail, Toast.LENGTH_LONG).show();
+
+ // parseJson(getData).clear();
+ break;
+
+ case UPDATE_VIEW:
+ if (authDialog.isShowing() && authDialog != null) {
+ authDialog.dismiss();
+ }
+
+ guestAdapter = new GuestListViewAdapter(
+ AuthorizeKidsActivity.this, parseGuestJson(retStr),
+ parseMasterJson(retStr), authFromMasterChildrenData);
+ listView.setAdapter(guestAdapter);
+
+ break;
+ }
+
+ }
+ };
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ menu.add(0, 0, 0, R.string.btn_add).setShowAsAction(
+ MenuItem.SHOW_AS_ACTION_IF_ROOM
+ | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ finish();
+ return true;
+ } else if (item.getItemId() == 0) {
+ // Toast.makeText(this, "hello", Toast.LENGTH_SHORT).show();
+ Intent intent = new Intent(AuthorizeKidsActivity.this,
+ SearchGuestActivity.class);
+ startActivityForResult(intent,
+ ActivityConstants.REQUEST_GO_TO_SEARCH_GUEST_ACTIVITY);
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (requestCode == ActivityConstants.REQUEST_GO_TO_SEARCH_GUEST_ACTIVITY) {
+ if (resultCode == ActivityConstants.RESULT_RESULT_OK) {
+ finish();
+ }
+ }
+ }
+
+}
diff --git a/src/com/twinly/eyebb/activity/BindingChildMacaronActivity.java b/src/com/twinly/eyebb/activity/BindingChildMacaronActivity.java
new file mode 100755
index 0000000..bb706cc
--- /dev/null
+++ b/src/com/twinly/eyebb/activity/BindingChildMacaronActivity.java
@@ -0,0 +1,370 @@
+package com.twinly.eyebb.activity;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.Handler;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.nostra13.universalimageloader.core.ImageLoader;
+import com.twinly.eyebb.R;
+import com.twinly.eyebb.bluetooth.BluetoothUtils;
+import com.twinly.eyebb.constant.ActivityConstants;
+import com.twinly.eyebb.constant.HttpConstants;
+import com.twinly.eyebb.customview.CircleImageView;
+import com.twinly.eyebb.database.DBChildren;
+import com.twinly.eyebb.utils.HttpRequestUtils;
+import com.twinly.eyebb.utils.ImageUtils;
+
+/**
+ * @author eyebb team
+ *
+ * @category BindingChildMacaronActivity
+ *
+ * this activity is used when get the qrcode and bind the device
+ * (qrcode) to the child
+ */
+public class BindingChildMacaronActivity extends Activity implements
+ BluetoothUtils.BleConnectCallback {
+ private final static int BIND_STEP_CONNECTING = 1;
+ private final static int BIND_STEP_CONNECT_FAIL = 2;
+ private final static int BIND_STEP_DISCOVERED = 3;
+ private final static int BIND_STEP_MAJOR_WRITEN = 4;
+ private final static int BIND_STEP_MINOR_WRITEN = 5;
+ private final static int BIND_STEP_UPLOADING = 6;
+ private final static int BIND_STEP_UPLOAD_FAIL = 7;
+ private final static int BIND_STEP_BIND_FINISH = 8;
+ private final int[] images = new int[] { R.drawable.ani_connecting_01,
+ R.drawable.ani_connecting_02, R.drawable.ani_connecting_03,
+ R.drawable.ani_connecting_04, R.drawable.ani_connecting_05,
+ R.drawable.ani_connecting_06, R.drawable.ani_connecting_07,
+ R.drawable.ani_connecting_08, R.drawable.ani_connecting_09,
+ R.drawable.ani_connecting_10, R.drawable.ani_connecting_11 };
+
+ private CircleImageView avatar;
+ private TextView tvAnimation;
+ private TextView tvMessage;
+ private TextView tvAddress;
+ private Button btnEvent;
+ private Handler mHandler;
+ private int index;
+ private ImageLoader imageLoader;
+
+ private int from;
+ private String mDeviceAddress;
+ private long childId;
+ private String childIcon;
+ private long guardianId;
+ private String major;
+ private String minor;
+ private int bindStep;
+
+ private BluetoothUtils mBluetoothUtils;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_binding_child_macaron);
+
+ from = getIntent().getIntExtra(ActivityConstants.EXTRA_FROM, -1);
+ mDeviceAddress = getIntent().getStringExtra(
+ ActivityConstants.EXTRA_MAC_ADDRESS);
+ guardianId = getIntent().getLongExtra(
+ ActivityConstants.EXTRA_GUARDIAN_ID, -1L);
+ childId = getIntent().getLongExtra(ActivityConstants.EXTRA_CHILD_ID, 0);
+ childIcon = getIntent().getStringExtra(
+ ActivityConstants.EXTRA_CHILD_ICON);
+
+ avatar = (CircleImageView) findViewById(R.id.avatar);
+ tvAnimation = (TextView) findViewById(R.id.tv_animation);
+ tvMessage = (TextView) findViewById(R.id.message);
+ btnEvent = (Button) findViewById(R.id.btn_event);
+ tvAddress = (TextView) findViewById(R.id.tv_address);
+
+ tvAddress.setText(mDeviceAddress);
+
+ if (TextUtils.isEmpty(childIcon) == false) {
+ if (ImageUtils.isLocalImage(childIcon)) {
+ avatar.setImageBitmap(ImageUtils.getBitmapFromLocal(childIcon));
+ } else {
+ imageLoader = ImageLoader.getInstance();
+ imageLoader.displayImage(childIcon, avatar,
+ ImageUtils.avatarOpitons, null);
+ }
+ }
+
+ mHandler = new Handler();
+ mHandler.postDelayed(new UpdateAnimation(), 500);
+
+ mBluetoothUtils = new BluetoothUtils(BindingChildMacaronActivity.this,
+ getFragmentManager(), BindingChildMacaronActivity.this);
+ new GetMajorMinorTask().execute();
+
+ btnEvent.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ switch (bindStep) {
+ case BIND_STEP_CONNECTING:
+ finish();
+ break;
+ case BIND_STEP_CONNECT_FAIL:
+ mBluetoothUtils.writeMajor(mDeviceAddress, 15000L, major);
+ break;
+ case BIND_STEP_UPLOAD_FAIL:
+ new PostToServerTask().execute();
+ break;
+ case BIND_STEP_BIND_FINISH:
+ switch (from) {
+ case ActivityConstants.ACTIVITY_CHECK_CHILD_TO_BIND:
+ Intent intent = new Intent(
+ BindingChildMacaronActivity.this,
+ LancherActivity.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ startActivity(intent);
+ break;
+ case ActivityConstants.ACTIVITY_KID_PROFILE:
+ setResult(ActivityConstants.RESULT_WRITE_MAJOR_MINOR_SUCCESS);
+ break;
+ }
+ finish();
+ break;
+ }
+ }
+ });
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ mBluetoothUtils.registerReceiver();
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ mBluetoothUtils.unregisterReceiver();
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ mBluetoothUtils.disconnect();
+ }
+
+ private class UpdateAnimation implements Runnable {
+
+ @Override
+ public void run() {
+ if (bindStep == BIND_STEP_CONNECTING
+ || bindStep == BIND_STEP_UPLOADING
+ || bindStep == BIND_STEP_DISCOVERED) {
+ if (index == 10) {
+ index = 0;
+ } else {
+ index++;
+ }
+ tvAnimation.setBackgroundResource(images[index]);
+ mHandler.postDelayed(new UpdateAnimation(), 500);
+ }
+ }
+ }
+
+ /**
+ * To get major & minor from server by child_id and mac address
+ *
+ * @author derek
+ *
+ */
+ private class GetMajorMinorTask extends AsyncTask {
+ @Override
+ protected String doInBackground(Void... params) {
+ Map map = new HashMap();
+ map.put("childId", String.valueOf(childId));
+ map.put("macAddress", mDeviceAddress);
+
+ return HttpRequestUtils.post(HttpConstants.CHECK_BEACON, map);
+ }
+
+ @Override
+ protected void onPostExecute(String result) {
+ System.out.println(HttpConstants.CHECK_BEACON + " = " + result);
+
+ if (result.length() > 0) {
+ if (result.equals(HttpConstants.HTTP_POST_RESPONSE_EXCEPTION)) {
+ return;
+ } else if (result.equals(HttpConstants.SERVER_RETURN_NC)) {
+ return;
+ }
+ if (result.equals(HttpConstants.SERVER_RETURN_USED)) {
+ Toast.makeText(BindingChildMacaronActivity.this,
+ R.string.text_device_already_binded,
+ Toast.LENGTH_LONG).show();
+ finish();
+ return;
+ } else {
+ major = result.substring(0, result.indexOf(":"));
+ minor = result.substring(result.indexOf(":") + 1,
+ result.length());
+ System.out.println("major = " + major + " minor = "
+ + minor);
+ mBluetoothUtils.writeMajor(mDeviceAddress, 15000L, major);
+ }
+ }
+ }
+ }
+
+ /**
+ * To upload the data to server when bind target device succeed
+ *
+ * @author derek
+ *
+ */
+ private class PostToServerTask extends AsyncTask {
+
+ @Override
+ protected void onPreExecute() {
+ bindStep = BIND_STEP_UPLOADING;
+ tvMessage.setText(R.string.text_update_server_data);
+ btnEvent.setEnabled(false);
+ }
+
+ @Override
+ protected String doInBackground(Void... params) {
+ Map map = new HashMap();
+ map.put("childId", String.valueOf(childId));
+ map.put("macAddress", mDeviceAddress);
+ map.put("major", major);
+ map.put("minor", minor);
+ map.put("guardianId",
+ guardianId == -1 ? "" : String.valueOf(guardianId));
+ return HttpRequestUtils.post(HttpConstants.DEVICE_TO_CHILD, map);
+ }
+
+ @Override
+ protected void onPostExecute(String result) {
+ System.out.println(HttpConstants.DEVICE_TO_CHILD + " = " + result);
+ if (result.length() > 0) {
+ btnEvent.setText(R.string.btn_finish);
+ btnEvent.setEnabled(true);
+ if (result.equals(HttpConstants.HTTP_POST_RESPONSE_EXCEPTION)) {
+ uploadFailed();
+ return;
+ }
+ if (result.equals("T")) {
+ bindStep = BIND_STEP_BIND_FINISH;
+ tvAnimation
+ .setBackgroundResource(R.drawable.ani_connecting_done);
+ tvMessage.setText(R.string.text_bind_success);
+ DBChildren.updateMacAddressByChildId(
+ BindingChildMacaronActivity.this, childId,
+ mDeviceAddress);
+ } else {
+ uploadFailed();
+ setResult(ActivityConstants.RESULT_WRITE_MAJOR_MINOR_FAIL);
+ }
+ } else {
+ uploadFailed();
+ }
+
+ }
+ }
+
+ private void writeFailed() {
+ bindStep = BIND_STEP_CONNECT_FAIL;
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ tvAnimation
+ .setBackgroundResource(R.drawable.ani_connecting_fail);
+ tvMessage.setText(R.string.text_connect_device_failed);
+ btnEvent.setText(R.string.btn_re_connect);
+ }
+ });
+
+ }
+
+ private void uploadFailed() {
+ bindStep = BIND_STEP_UPLOAD_FAIL;
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ tvAnimation
+ .setBackgroundResource(R.drawable.ani_connecting_fail);
+ tvMessage.setText(R.string.text_update_server_data_fail);
+ }
+ });
+ }
+
+ @Override
+ public void onPreConnect() {
+ bindStep = BIND_STEP_CONNECTING;
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ tvMessage.setText(R.string.text_connecting);
+ btnEvent.setText(R.string.btn_cancel);
+ }
+ });
+ }
+
+ @Override
+ public void onConnectCanceled() {
+ writeFailed();
+ }
+
+ @Override
+ public void onConnected() {
+ // do nothing
+ }
+
+ @Override
+ public void onDisConnected() {
+ writeFailed();
+ }
+
+ @Override
+ public void onDiscovered() {
+ bindStep = BIND_STEP_DISCOVERED;
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ tvMessage.setText(R.string.text_update_device_data);
+ btnEvent.setText(R.string.btn_cancel);
+ }
+ });
+ }
+
+ @Override
+ public void onDataAvailable(String value) {
+ // do nothing
+
+ }
+
+ @Override
+ public void onResult(boolean result) {
+ if (result) {
+ if (bindStep == BIND_STEP_DISCOVERED) {
+ bindStep = BIND_STEP_MAJOR_WRITEN;
+ mBluetoothUtils.writeMajor(mDeviceAddress, 15000L, major);
+ } else if (bindStep == BIND_STEP_MAJOR_WRITEN) {
+ bindStep = BIND_STEP_MINOR_WRITEN;
+ mBluetoothUtils.writeMinor(mDeviceAddress, 15000L, minor);
+ } else {
+ new PostToServerTask().execute();
+ }
+ } else {
+ writeFailed();
+ }
+
+ }
+}
diff --git a/src/com/twinly/eyebb/activity/ChangeKidsActivity.java b/src/com/twinly/eyebb/activity/ChangeKidsActivity.java
new file mode 100755
index 0000000..9f7f95e
--- /dev/null
+++ b/src/com/twinly/eyebb/activity/ChangeKidsActivity.java
@@ -0,0 +1,119 @@
+package com.twinly.eyebb.activity;
+
+import java.util.ArrayList;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.EditText;
+
+import com.twinly.eyebb.R;
+import com.twinly.eyebb.adapter.KidsListViewSimpleAdapter;
+import com.twinly.eyebb.constant.ActivityConstants;
+import com.twinly.eyebb.database.DBChildren;
+import com.twinly.eyebb.model.ChildSelectable;
+import com.woozzu.android.widget.IndexableListView;
+
+/**
+ * @author eyebb team
+ *
+ * @category BindingChildMacaronActivity
+ *
+ * this activity is on the third fragment activity (change button). It
+ * can let user choose their child and show the performance and
+ * activities
+ *
+ */
+public class ChangeKidsActivity extends Activity {
+ private IndexableListView listView;
+ private EditText etSearch;
+ private KidsListViewSimpleAdapter adapter;
+ private ArrayList mList;
+ private ArrayList searchList;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setTitle(getString(R.string.text_change_kids));
+ getActionBar().setDisplayHomeAsUpEnabled(true);
+ getActionBar().setIcon(android.R.color.transparent);
+
+ setContentView(R.layout.activity_kids_list);
+
+ etSearch = (EditText) findViewById(R.id.et_search);
+ listView = (IndexableListView) findViewById(R.id.listView);
+ mList = DBChildren.getChildrenListWithAddress(this);
+ searchList = new ArrayList();
+
+ adapter = new KidsListViewSimpleAdapter(this, mList, false);
+ listView.setAdapter(adapter);
+ listView.setFastScrollEnabled(true);
+
+ listView.setOnItemClickListener(new OnItemClickListener() {
+ public void onItemClick(AdapterView> arg0, View arg1,
+ int position, long arg3) {
+ Intent data = new Intent();
+ Bundle bundle = new Bundle();
+ bundle.putSerializable("child", adapter.getItem(position));
+ data.putExtras(bundle);
+ setResult(ActivityConstants.RESULT_RESULT_OK, data);
+ finish();
+ }
+ });
+
+ etSearch.addTextChangedListener(new TextWatcher() {
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before,
+ int count) {
+
+ }
+
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count,
+ int after) {
+
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ search(etSearch.getText().toString());
+ }
+ });
+
+ }
+
+ private void search(String keyword) {
+ if (!TextUtils.isEmpty(keyword)) {
+ searchList.clear();
+ for (int i = 0; i < mList.size(); i++) {
+ if (mList.get(i).getName().contains(keyword)) {
+ searchList.add(mList.get(i));
+ }
+ }
+ adapter = new KidsListViewSimpleAdapter(ChangeKidsActivity.this,
+ searchList, false);
+ listView.setAdapter(adapter);
+ } else {
+ adapter = new KidsListViewSimpleAdapter(ChangeKidsActivity.this,
+ mList, false);
+ listView.setAdapter(adapter);
+ }
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ finish();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+}
diff --git a/src/com/twinly/eyebb/activity/CheckChildToBindDialog.java b/src/com/twinly/eyebb/activity/CheckChildToBindDialog.java
new file mode 100755
index 0000000..c06e3eb
--- /dev/null
+++ b/src/com/twinly/eyebb/activity/CheckChildToBindDialog.java
@@ -0,0 +1,228 @@
+package com.twinly.eyebb.activity;
+
+import java.util.ArrayList;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ListView;
+import android.widget.Toast;
+
+import com.example.qr_codescan.MipcaActivityCapture;
+import com.twinly.eyebb.R;
+import com.twinly.eyebb.adapter.CheckChildToBindAdapter;
+import com.twinly.eyebb.constant.ActivityConstants;
+import com.twinly.eyebb.constant.Constants;
+import com.twinly.eyebb.constant.HttpConstants;
+import com.twinly.eyebb.model.Child;
+import com.twinly.eyebb.utils.HttpRequestUtils;
+import com.twinly.eyebb.utils.RegularExpression;
+
+/**
+ * @author eyebb team
+ *
+ * @category CheckChildToBindDialog
+ *
+ * this activity is used for when you sign up your account and you
+ * want to bind a device. So you should select a child, after you fill
+ * in the child`s information. Then, this child dialog will be
+ * displayed
+ *
+ */
+public class CheckChildToBindDialog extends Activity {
+ private final static int SCANNIN_GREQUEST_CODE = 1;
+ public static String EXTRA_CHILDREN_LIST = "CHILDREN_LIST";
+
+ private ListView listView;
+ private CheckChildToBindAdapter adapter;
+ private String childrenListJSON;
+ private ArrayList childList;
+ private long childIdToPost;
+ private String childIcon;
+ private long guardianId;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.dialog_check_child_to_bind_list);
+ Intent intent = getIntent();
+
+ childrenListJSON = intent.getStringExtra(EXTRA_CHILDREN_LIST);
+ guardianId = intent.getLongExtra(ActivityConstants.EXTRA_GUARDIAN_ID,
+ -1L);
+
+ listView = (ListView) findViewById(R.id.listView);
+ parseJson(childrenListJSON);
+ adapter = new CheckChildToBindAdapter(this, childList);
+ listView.setAdapter(adapter);
+
+ listView.setOnItemClickListener(new OnItemClickListener() {
+ public void onItemClick(AdapterView> arg0, View arg1,
+ int position, long arg3) {
+ childIdToPost = childList.get(position).getChildId();
+ childIcon = childList.get(position).getIcon();
+ new Thread(postCheckChildIsBindToServerRunnable).start();
+ }
+ });
+
+ }
+
+ private void parseJson(String getData) {
+ childList = new ArrayList();
+ try {
+ childList.clear();
+ JSONArray arr = new JSONArray(getData);
+ for (int i = 0; i < arr.length(); i++) {
+ JSONObject object = (JSONObject) arr.get(i);
+ Child child = new Child(
+ object.getInt(HttpConstants.JSON_KEY_CHILD_ID),
+ object.getString(HttpConstants.JSON_KEY_CHILD_NAME),
+ object.getString(HttpConstants.JSON_KEY_CHILD_ICON));
+ childList.add(child);
+ }
+
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ finish();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ Runnable postCheckChildIsBindToServerRunnable = new Runnable() {
+ @Override
+ public void run() {
+ postCheckChildIsBindToServer();
+ }
+ };
+
+ private void postCheckChildIsBindToServer() {
+ Map map = new HashMap();
+ System.out.println("childId = " + childIdToPost + " guardianId = "
+ + guardianId);
+
+ map.put("childId", String.valueOf(childIdToPost));
+ map.put("guardianId",
+ guardianId == -1L ? "" : String.valueOf(guardianId));
+
+ try {
+ String retStr = HttpRequestUtils.post(HttpConstants.CHILD_GUA_REL,
+ map);
+ System.out.println("retStrpost======>" + retStr);
+ if (retStr.equals(HttpConstants.HTTP_POST_RESPONSE_EXCEPTION)
+ || retStr.equals("") || retStr.length() == 0) {
+ System.out.println("connect error");
+
+ Message msg = handler.obtainMessage();
+ msg.what = Constants.CONNECT_ERROR;
+ handler.sendMessage(msg);
+ } else {
+ if (retStr.equals(HttpConstants.SERVER_RETURN_T)) {
+ Intent intent = new Intent(CheckChildToBindDialog.this,
+ MipcaActivityCapture.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ startActivityForResult(intent, SCANNIN_GREQUEST_CODE);
+ } else if (retStr.equals(HttpConstants.SERVER_RETURN_F)) {
+ Message msg = handler.obtainMessage();
+ msg.what = Constants.MASTER_OF_CHILD_ALREAD_EXIST;
+ handler.sendMessage(msg);
+ } else if (retStr.equals(HttpConstants.SERVER_RETURN_WG)) {
+ Message msg = handler.obtainMessage();
+ msg.what = Constants.WRONG_LOGIN;
+ handler.sendMessage(msg);
+ } else if (retStr.substring(0, 1).equals(
+ HttpConstants.SERVER_RETURN_E)) {
+ Message msg = handler.obtainMessage();
+ msg.what = Constants.ALREADY_RELATIONSHIP;
+ handler.sendMessage(msg);
+ }
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @SuppressLint("HandlerLeak")
+ Handler handler = new Handler() {
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case Constants.CONNECT_ERROR:
+ Toast.makeText(CheckChildToBindDialog.this,
+ R.string.text_network_error, Toast.LENGTH_LONG).show();
+ break;
+ case Constants.ALREADY_RELATIONSHIP:
+ Toast.makeText(CheckChildToBindDialog.this,
+ R.string.text_already_relationship, Toast.LENGTH_LONG)
+ .show();
+ adapter.notifyDataSetChanged();
+ break;
+ case Constants.WRONG_LOGIN:
+ Toast.makeText(CheckChildToBindDialog.this,
+ R.string.text_wrong_login_for_binding,
+ Toast.LENGTH_LONG).show();
+ adapter.notifyDataSetChanged();
+ break;
+ case Constants.MASTER_OF_CHILD_ALREAD_EXIST:
+ Toast.makeText(CheckChildToBindDialog.this,
+ R.string.text_master_of_the_child_exist_already,
+ Toast.LENGTH_LONG).show();
+ adapter.notifyDataSetChanged();
+ break;
+ }
+ }
+ };
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ switch (requestCode) {
+ case SCANNIN_GREQUEST_CODE:
+ if (resultCode == RESULT_OK) {
+ Bundle bundle = data.getExtras();
+ System.out.println("qrcode------->"
+ + bundle.getString("result"));
+ String macAddress = bundle.getString("result");
+ macAddress = RegularExpression.getValidMacAddress(this,
+ macAddress);
+ if (macAddress != null) {
+ Intent intent = new Intent();
+ intent.setClass(this, BindingChildMacaronActivity.class);
+ intent.putExtra(ActivityConstants.EXTRA_FROM,
+ ActivityConstants.ACTIVITY_CHECK_CHILD_TO_BIND);
+ intent.putExtra(ActivityConstants.EXTRA_GUARDIAN_ID,
+ guardianId);
+ intent.putExtra(ActivityConstants.EXTRA_CHILD_ID,
+ childIdToPost);
+ intent.putExtra(ActivityConstants.EXTRA_CHILD_ICON,
+ childIcon);
+ intent.putExtra(ActivityConstants.EXTRA_MAC_ADDRESS,
+ macAddress);
+ startActivity(intent);
+ }
+
+ }
+ break;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/com/twinly/eyebb/activity/ChildBirthdayDialog.java b/src/com/twinly/eyebb/activity/ChildBirthdayDialog.java
new file mode 100755
index 0000000..a8410f7
--- /dev/null
+++ b/src/com/twinly/eyebb/activity/ChildBirthdayDialog.java
@@ -0,0 +1,116 @@
+package com.twinly.eyebb.activity;
+
+import java.util.Calendar;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.DatePicker;
+import android.widget.DatePicker.OnDateChangedListener;
+import android.widget.LinearLayout;
+
+import com.twinly.eyebb.R;
+import com.twinly.eyebb.constant.ActivityConstants;
+
+/**
+ * @author eyebb team
+ *
+ * @category ChildBirthdayDialog
+ *
+ * this activity is used when you fill in the child`s information
+ * (during the sign-up time). you should finish 3 parts. The first is
+ * child`s name. The second is child`s birthday. The third is child`s
+ * kindergarten.
+ *
+ */
+public class ChildBirthdayDialog extends Activity {
+ private DatePicker childBirthdayDatePicker;
+
+ private Calendar calendar;
+ private int year;
+ private int monthOfYear;
+ private int dayOfMonth;
+ private String dateOfBirth;
+
+ private LinearLayout btnConfirm;
+ private LinearLayout btnCancel;
+
+ private String getBirthday;
+
+ private boolean datePickerChangeFlag = false;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.dialog_child_birthday);
+ btnConfirm = (LinearLayout) findViewById(R.id.btn_confirm);
+ btnCancel = (LinearLayout) findViewById(R.id.btn_cancel);
+
+ Intent intent = getIntent();
+ getBirthday = intent.getStringExtra("birthday");
+
+ btnConfirm.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ if (dateOfBirth != null && dateOfBirth.length() > 0) {
+ Intent data = new Intent();
+ data.putExtra("childBirthday", dateOfBirth);
+ setResult(ActivityConstants.RESULT_RESULT_BIRTHDAY_OK, data);
+ finish();
+ }
+
+ }
+ });
+
+ btnCancel.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
+
+ System.out.println("birthday--child---dialog-->" + getBirthday);
+ if (getBirthday != null && getBirthday.length() > 0) {
+ String[] sGetBirthday = getBirthday.split("/");
+ dayOfMonth = Integer.parseInt(sGetBirthday[0]);
+ monthOfYear = Integer.parseInt(sGetBirthday[1]) - 1;
+ year = Integer.parseInt(sGetBirthday[2]);
+ } else {
+ calendar = Calendar.getInstance();
+ year = calendar.get(Calendar.YEAR);
+ monthOfYear = calendar.get(Calendar.MONTH);
+ dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
+ }
+
+ childBirthdayDatePicker = (DatePicker) findViewById(R.id.datePicker);
+
+ // initial data for date
+ dateOfBirth = dayOfMonth + "/" + monthOfYear + "/" + year;
+
+ childBirthdayDatePicker.init(year, monthOfYear, dayOfMonth,
+ new OnDateChangedListener() {
+ public void onDateChanged(DatePicker view, int year,
+ int monthOfYear, int dayOfMonth) {
+ datePickerChangeFlag = true;
+ monthOfYear = monthOfYear + 1;
+ dateOfBirth = dayOfMonth + "/" + monthOfYear + "/"
+ + year;
+ System.out.println("dateOfBirth==>" + dateOfBirth);
+
+ }
+ });
+
+ if (!datePickerChangeFlag) {
+ monthOfYear = monthOfYear + 1;
+ dateOfBirth = dayOfMonth + "/" + monthOfYear + "/" + year;
+ System.out.println("dateOfBirth==>" + dateOfBirth);
+ }
+
+ }
+
+}
diff --git a/src/com/twinly/eyebb/activity/ChildInformationMatchingActivity.java b/src/com/twinly/eyebb/activity/ChildInformationMatchingActivity.java
new file mode 100755
index 0000000..a34afe8
--- /dev/null
+++ b/src/com/twinly/eyebb/activity/ChildInformationMatchingActivity.java
@@ -0,0 +1,266 @@
+package com.twinly.eyebb.activity;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.twinly.eyebb.R;
+import com.twinly.eyebb.constant.ActivityConstants;
+import com.twinly.eyebb.constant.HttpConstants;
+import com.twinly.eyebb.utils.CommonUtils;
+import com.twinly.eyebb.utils.HttpRequestUtils;
+
+public class ChildInformationMatchingActivity extends Activity {
+ private EditText userName;
+ private LinearLayout childBirthdayLayout;
+ private RelativeLayout kindergartenItem;
+ private TextView childBirthday;
+ private TextView kindergarten;
+ private Button binding;
+
+ private int kindergartenId = -1;
+ private String childName;
+ private String birthday;
+
+ private boolean childNameFlag = false;
+ private boolean birthdayFlag = false;
+ private boolean kindergartenFlag = false;
+
+ private ImageView icKindergarten;
+ private TextView icChildName;
+ private TextView icBirthday;
+
+ public static final int CONNECT_ERROR = 1;
+ public static final int CHILD_EXIST = 2;
+ public static final int CHILD_NOT_EXIST = 3;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_child_information_matching);
+ setTitle(getString(R.string.text_child_information_matching));
+
+ getActionBar().setDisplayHomeAsUpEnabled(true);
+ getActionBar().setIcon(android.R.color.transparent);
+
+ initView();
+ }
+
+ private void initView() {
+ userName = (EditText) findViewById(R.id.ed_username);
+ childBirthdayLayout = (LinearLayout) findViewById(R.id.child_birthday_layout);
+ kindergartenItem = (RelativeLayout) findViewById(R.id.kindergartenItem);
+ kindergarten = (TextView) findViewById(R.id.kindergarten);
+ childBirthday = (TextView) findViewById(R.id.birthday);
+ binding = (Button) findViewById(R.id.btn_confirm);
+ icKindergarten = (ImageView) findViewById(R.id.ic_kindergarten);
+ icChildName = (TextView) findViewById(R.id.ic_child_name);
+ icBirthday = (TextView) findViewById(R.id.ic_birthday);
+
+ kindergartenItem.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(
+ ChildInformationMatchingActivity.this,
+ KindergartenListActivity.class);
+ startActivityForResult(intent,
+ ActivityConstants.REQUEST_GO_TO_KINDERGARTEN_ACTIVITY);
+ }
+ });
+
+ childBirthdayLayout.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ if (CommonUtils.isFastDoubleClick()) {
+ return;
+ } else {
+ /**
+ * hide keyboard
+ */
+
+ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+ imm.hideSoftInputFromWindow(
+ childBirthdayLayout.getWindowToken(), 0);
+
+ Intent intent = new Intent(
+ ChildInformationMatchingActivity.this,
+ ChildBirthdayDialog.class);
+ if (birthday != null) {
+ intent.putExtra("birthday", birthday);
+ System.out.println("birthday--child-->" + birthday);
+ }
+ startActivityForResult(intent,
+ ActivityConstants.REQUEST_GO_TO_BIRTHDAY_ACTIVITY);
+ }
+ }
+ });
+
+ binding.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ childName = userName.getText().toString();
+ if (childName != null && childName.length() > 0) {
+ childNameFlag = true;
+ icChildName.setBackground(getResources().getDrawable(
+ R.drawable.ic_login_name));
+ } else {
+ childNameFlag = false;
+ setTitle(getString(R.string.text_something_has_gone_wrong));
+ icChildName.setBackground(getResources().getDrawable(
+ R.drawable.ic_cross));
+ }
+
+ if (birthday != null && birthday.length() > 0) {
+ birthdayFlag = true;
+ icBirthday.setBackground(getResources().getDrawable(
+ R.drawable.ic_login_email));
+ } else {
+ birthdayFlag = false;
+ setTitle(getString(R.string.text_something_has_gone_wrong));
+ icBirthday.setBackground(getResources().getDrawable(
+ R.drawable.ic_cross));
+ }
+
+ if (kindergartenId >= 0) {
+ kindergartenFlag = true;
+ //setTitle(getString(R.string.text_something_has_gone_wrong));
+ icKindergarten.setVisibility(View.INVISIBLE);
+ } else {
+ kindergartenFlag = false;
+ setTitle(getString(R.string.text_something_has_gone_wrong));
+ icKindergarten.setVisibility(View.VISIBLE);
+
+ }
+
+ if (kindergartenFlag && birthdayFlag && childNameFlag) {
+ new Thread(postRegParentsCheckToServerRunnable).start();
+ // startActivity(intent);
+ }
+
+ }
+ });
+
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ finish();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == ActivityConstants.REQUEST_GO_TO_KINDERGARTEN_ACTIVITY) {
+ if (resultCode == ActivityConstants.RESULT_RESULT_OK) {
+ kindergarten.setText(data.getStringExtra("displayName"));
+ kindergartenId = data.getIntExtra("kindergartenId", -1);
+ }
+ }
+ if (requestCode == ActivityConstants.REQUEST_GO_TO_BIRTHDAY_ACTIVITY) {
+ if (resultCode == ActivityConstants.RESULT_RESULT_BIRTHDAY_OK) {
+ childBirthday.setText(data.getStringExtra("childBirthday"));
+ birthday = data.getStringExtra("childBirthday");
+ }
+ }
+ }
+
+ Runnable postRegParentsCheckToServerRunnable = new Runnable() {
+ @Override
+ public void run() {
+ postChildInformationToServer();
+ }
+ };
+
+ private void postChildInformationToServer() {
+ Map map = new HashMap();
+ System.out.println("username=>" + childName + " " + birthday + " "
+ + kindergartenId);
+
+ map.put("childName", childName);
+ map.put("dateOfBirth", birthday);
+ map.put("kId", String.valueOf(kindergartenId));
+
+ try {
+ String retStr = HttpRequestUtils.post(HttpConstants.CHILD_CHECKING,
+ map);
+ System.out.println("retStrpost======>" + retStr);
+ if (retStr.equals(HttpConstants.HTTP_POST_RESPONSE_EXCEPTION)
+ || retStr.equals("") || retStr.length() == 0) {
+ System.out.println("connect error");
+
+ Message msg = handler.obtainMessage();
+ msg.what = CONNECT_ERROR;
+ handler.sendMessage(msg);
+ } else {
+ if (retStr.equals("[]")) {
+ Message msg = handler.obtainMessage();
+ msg.what = CHILD_NOT_EXIST;
+ handler.sendMessage(msg);
+ } else {
+ Intent intent = new Intent(
+ ChildInformationMatchingActivity.this,
+ CheckChildToBindDialog.class);
+ intent.putExtra(
+ ActivityConstants.EXTRA_GUARDIAN_ID,
+ getIntent().getLongExtra(
+ ActivityConstants.EXTRA_GUARDIAN_ID, -1L));
+ intent.putExtra(CheckChildToBindDialog.EXTRA_CHILDREN_LIST,
+ retStr);
+ startActivity(intent);
+ }
+ }
+
+ } catch (Exception e) {
+
+ e.printStackTrace();
+
+ }
+
+ }
+
+ @SuppressLint("HandlerLeak")
+ Handler handler = new Handler() {
+
+ @SuppressLint("ShowToast")
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case CHILD_EXIST:
+ break;
+ case CONNECT_ERROR:
+ Toast.makeText(ChildInformationMatchingActivity.this,
+ R.string.text_network_error, Toast.LENGTH_LONG).show();
+ break;
+ case CHILD_NOT_EXIST:
+ Toast.makeText(ChildInformationMatchingActivity.this,
+ R.string.text_child_not_exist, Toast.LENGTH_LONG)
+ .show();
+ break;
+ }
+ }
+ };
+
+}
diff --git a/src/com/twinly/eyebb/activity/ForgetPasswordDialog.java b/src/com/twinly/eyebb/activity/ForgetPasswordDialog.java
new file mode 100755
index 0000000..45cc8a1
--- /dev/null
+++ b/src/com/twinly/eyebb/activity/ForgetPasswordDialog.java
@@ -0,0 +1,243 @@
+package com.twinly.eyebb.activity;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.view.Gravity;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.twinly.eyebb.R;
+import com.twinly.eyebb.constant.ActivityConstants;
+import com.twinly.eyebb.constant.Constants;
+import com.twinly.eyebb.constant.HttpConstants;
+import com.twinly.eyebb.utils.CommonUtils;
+import com.twinly.eyebb.utils.HttpRequestUtils;
+/**
+ * @author eyebb team
+ *
+ * @category ForgetPasswordDialog
+ *
+ * this activity is used when you fill in the child`s information
+ * (during the sign-up time). you should finish 3 parts. The first is
+ * child`s name. The second is child`s birthday. The third is child`s
+ * kindergarten.
+ *
+ */
+public class ForgetPasswordDialog extends Activity {
+
+ private String userAccout = "";
+ private String birthday = "";
+ private String child_name = "";
+ private LinearLayout btn_confirm;
+ private LinearLayout btn_cancel;
+ private EditText edAccount;
+ private EditText edchild_name;
+ private TextView txchild_birthday;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ // TODO Auto-generated method stub
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.dialog_forget_password);
+
+ edAccount = (EditText) findViewById(R.id.enter_account);
+ edchild_name = (EditText) findViewById(R.id.enter_child_name);
+
+ txchild_birthday = (TextView) findViewById(R.id.enter_child_birthday);
+ edAccount.setFocusable(true);
+ edAccount.setFocusableInTouchMode(true);
+ edAccount.requestFocus();
+
+ // get child birthday
+ txchild_birthday.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ // TODO Auto-generated method stub
+ if (CommonUtils.isFastDoubleClick()) {
+ return;
+ } else {
+ /**
+ * hide keyboard
+ */
+
+ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+ imm.hideSoftInputFromWindow(
+ txchild_birthday.getWindowToken(), 0);
+
+ Intent intent = new Intent(ForgetPasswordDialog.this,
+ ChildBirthdayDialog.class);
+ if (birthday != null) {
+ intent.putExtra("birthday", birthday);
+ }
+ startActivityForResult(intent,
+ ActivityConstants.REQUEST_GO_TO_BIRTHDAY_ACTIVITY);
+ }
+ }
+ });
+
+ btn_confirm = (LinearLayout) findViewById(R.id.btn_confirm);
+
+ btn_confirm.setOnClickListener(new android.view.View.OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+
+ child_name = edchild_name.getText().toString();
+ userAccout = edAccount.getText().toString();
+ if (birthday.length() > 0 && child_name.length() > 0
+ && userAccout.length() > 0) {
+ new Thread(postResetPasswordToServerRunnable).start();
+ } else {
+ Message msg = handler.obtainMessage();
+ msg.what = Constants.NULL_FEEDBAKC_CONTENT;
+ handler.sendMessage(msg);
+ }
+
+ }
+ });
+
+ btn_cancel = (LinearLayout) findViewById(R.id.btn_cancel);
+ btn_cancel.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ // TODO Auto-generated method stub
+ finish();
+ }
+ });
+
+ }
+
+ Runnable postResetPasswordToServerRunnable = new Runnable() {
+ @Override
+ public void run() {
+
+ postResetPasswordToServer();
+ }
+
+ };
+
+ @SuppressLint("ShowToast")
+ private void postResetPasswordToServer() {
+ // TODO Auto-generated method stub
+
+ Map map = new HashMap();
+ System.out.println("ResetPassword=>" + userAccout + " " + child_name
+ + " " + birthday);
+
+ map.put("accName", userAccout);
+ map.put("childName", child_name);
+ map.put("dob", birthday);
+
+ try {
+ String retStr = HttpRequestUtils.post(HttpConstants.RESET_PASSWORD,
+ map);
+ System.out.println("retStrpost======>" + retStr);
+ if (retStr.equals(HttpConstants.HTTP_POST_RESPONSE_EXCEPTION)
+ || retStr.equals("") || retStr.length() == 0) {
+ System.out.println("connect error");
+
+ Message msg = handler.obtainMessage();
+ msg.what = Constants.CONNECT_ERROR;
+ handler.sendMessage(msg);
+ } else {
+ if (retStr.equals(HttpConstants.SERVER_RETURN_T)) {
+ Message msg = handler.obtainMessage();
+ msg.what = Constants.PASSWORD_RESET_SUCCESS;
+ handler.sendMessage(msg);
+
+ } else if (retStr.equals(HttpConstants.SERVER_RETURN_F)) {
+ Message msg = handler.obtainMessage();
+ msg.what = Constants.ACCOUNT_NOT_EXIST;
+ handler.sendMessage(msg);
+ } else if (retStr.equals(HttpConstants.SERVER_RETURN_NC)) {
+ Message msg = handler.obtainMessage();
+ msg.what = Constants.ACCOUNT_DO_NOT_HAS_THIS_CHILD;
+ handler.sendMessage(msg);
+ }
+
+ }
+
+ } catch (Exception e) {
+
+ e.printStackTrace();
+
+ }
+
+ }
+
+ @SuppressLint("HandlerLeak")
+ Handler handler = new Handler() {
+
+ @SuppressLint("ShowToast")
+ public void handleMessage(Message msg) {
+ Toast toast = null;
+ switch (msg.what) {
+
+ case Constants.CONNECT_ERROR:
+ toast = Toast.makeText(getApplicationContext(),
+ R.string.text_network_error, Toast.LENGTH_LONG);
+ toast.setGravity(Gravity.CENTER, 0, 0);
+ toast.show();
+ break;
+ case Constants.PASSWORD_RESET_SUCCESS:
+ toast = Toast.makeText(getApplicationContext(),
+ R.string.text_feed_back_successful, Toast.LENGTH_LONG);
+ toast.setGravity(Gravity.CENTER, 0, 0);
+ toast.show();
+ break;
+
+ case Constants.NULL_FEEDBAKC_CONTENT:
+ toast = Toast.makeText(getApplicationContext(),
+ R.string.text_fill_in_something, Toast.LENGTH_LONG);
+ toast.setGravity(Gravity.CENTER, 0, 0);
+ toast.show();
+ break;
+
+ case Constants.ACCOUNT_NOT_EXIST:
+ toast = Toast.makeText(getApplicationContext(),
+ R.string.text_user_do_not_exist, Toast.LENGTH_LONG);
+ toast.setGravity(Gravity.CENTER, 0, 0);
+ toast.show();
+
+ break;
+
+ case Constants.ACCOUNT_DO_NOT_HAS_THIS_CHILD:
+ toast = Toast.makeText(getApplicationContext(),
+ R.string.text_account_user_do_not_have_this_child,
+ Toast.LENGTH_LONG);
+ toast.setGravity(Gravity.CENTER, 0, 0);
+ toast.show();
+ break;
+ }
+
+ }
+ };
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+
+ if (requestCode == ActivityConstants.REQUEST_GO_TO_BIRTHDAY_ACTIVITY) {
+ if (resultCode == ActivityConstants.RESULT_RESULT_BIRTHDAY_OK) {
+ txchild_birthday.setText(data.getStringExtra("childBirthday"));
+ birthday = data.getStringExtra("childBirthday");
+ }
+ }
+ }
+
+}
diff --git a/src/com/twinly/eyebb/activity/FwUpdateActivity.java b/src/com/twinly/eyebb/activity/FwUpdateActivity.java
new file mode 100755
index 0000000..7c7b2ac
--- /dev/null
+++ b/src/com/twinly/eyebb/activity/FwUpdateActivity.java
@@ -0,0 +1,499 @@
+package com.twinly.eyebb.activity;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import android.app.Activity;
+import android.bluetooth.BluetoothGattCharacteristic;
+import android.bluetooth.BluetoothGattService;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Bundle;
+import android.os.Environment;
+import android.text.Html;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.twinly.eyebb.R;
+import com.twinly.eyebb.bluetooth.BLEUtils;
+import com.twinly.eyebb.bluetooth.BluetoothLeService;
+import com.twinly.eyebb.utils.Conversion;
+
+public class FwUpdateActivity extends Activity {
+ public final static String EXTRA_MESSAGE = "ti.android.ble.sensortag.MESSAGE";
+ // Log
+ private static String TAG = "FwUpdateActivity";
+
+ // Activity
+
+ // Programming parameters
+ private static final short OAD_CONN_INTERVAL = 10; // 12.5 msec
+ private static final short OAD_SUPERVISION_TIMEOUT = 100; // 1 second
+ private static final int PKT_INTERVAL = 20; // Milliseconds
+ private static final int GATT_WRITE_TIMEOUT = 100; // Milliseconds
+
+ private static final int FILE_BUFFER_SIZE = 0x40000;
+ private static final String FW_CUSTOM_DIRECTORY = Environment.DIRECTORY_DOWNLOADS;
+ private static final String FW_FILE_A = "SensorTagImgA.bin";
+ private static final String FW_FILE_B = "SensorTagImgB.bin";
+
+ private static final int OAD_BLOCK_SIZE = 16;
+ private static final int HAL_FLASH_WORD_SIZE = 4;
+ private static final int OAD_BUFFER_SIZE = 2 + OAD_BLOCK_SIZE;
+ private static final int OAD_IMG_HDR_SIZE = 8;
+
+ // GUI
+ private TextView mTargImage;
+ private TextView mFileImage;
+ private TextView mProgressInfo;
+ private TextView mLog;
+ private ProgressBar mProgressBar;
+ private Button mBtnLoadA;
+ private Button mBtnLoadB;
+ private Button mBtnLoadC;
+ private Button mBtnStart;
+
+ // BLE
+ private BluetoothGattService mOadService;
+ // private BluetoothGattService mConnControlService;
+ private List mCharListOad;
+ // private List mCharListCc;
+ private BluetoothGattCharacteristic mCharIdentify = null;
+ private BluetoothGattCharacteristic mCharBlock = null;
+ private BluetoothGattCharacteristic mCharConnReq = null;
+ private BluetoothLeService mLeService;
+
+ // Programming
+ private final byte[] mFileBuffer = new byte[FILE_BUFFER_SIZE];
+ private final byte[] mOadBuffer = new byte[OAD_BUFFER_SIZE];
+ private ImgHdr mFileImgHdr = new ImgHdr();
+ private ImgHdr mTargImgHdr = new ImgHdr();
+ private Timer mTimer = null;
+ private ProgInfo mProgInfo = new ProgInfo();
+ private TimerTask mTimerTask = null;
+
+ // Housekeeping
+ private boolean mServiceOk = false;
+ private boolean mProgramming = false;
+ private int mEstDuration = 0;
+ private IntentFilter mIntentFilter;
+
+ public FwUpdateActivity() {
+
+ // BLE Gatt Service
+
+ // Service information
+ // mOadService =
+ // mConnControlService = mDeviceActivity.getConnControlService();
+
+ // Characteristics list
+ mCharListOad = mOadService.getCharacteristics();
+ // mCharListCc = mConnControlService.getCharacteristics();
+
+ mServiceOk = mCharListOad.size() == 2;
+ if (mServiceOk) {
+ mCharIdentify = mCharListOad.get(0);
+ mCharBlock = mCharListOad.get(1);
+ // mCharConnReq = mCharListCc.get(1);
+ }
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ Log.d(TAG, "onCreate");
+
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_fwupdate);
+
+ // Icon padding
+ ImageView view = (ImageView) findViewById(android.R.id.home);
+ view.setPadding(10, 0, 20, 10);
+
+ // Context title
+ setTitle("Firmware update (OAD)");
+
+ // Initialize widgets
+ mProgressInfo = (TextView) findViewById(R.id.tw_info);
+ mTargImage = (TextView) findViewById(R.id.tw_target);
+ mFileImage = (TextView) findViewById(R.id.tw_file);
+ mLog = (TextView) findViewById(R.id.tw_log);
+ mProgressBar = (ProgressBar) findViewById(R.id.pb_progress);
+ mBtnStart = (Button) findViewById(R.id.btn_start);
+ mBtnStart.setEnabled(false);
+ mBtnLoadA = (Button) findViewById(R.id.btn_load_a);
+ mBtnLoadB = (Button) findViewById(R.id.btn_load_b);
+
+ // Sanity check
+ mBtnLoadA.setEnabled(mServiceOk);
+ mBtnLoadB.setEnabled(mServiceOk);
+ mBtnLoadC.setEnabled(mServiceOk);
+ initIntentFilter();
+ }
+
+ @Override
+ public void onDestroy() {
+ Log.d(TAG, "onDestroy");
+ super.onDestroy();
+ if (mTimerTask != null)
+ mTimerTask.cancel();
+ mTimer = null;
+ }
+
+ @Override
+ public void onBackPressed() {
+ Log.d(TAG, "onBackPressed");
+ if (mProgramming) {
+ Toast.makeText(this, "ongoing", Toast.LENGTH_LONG).show();
+ } else
+ super.onBackPressed();
+ }
+
+ @Override
+ protected void onResume() {
+ Log.d(TAG, "onResume");
+ super.onResume();
+ if (mServiceOk) {
+ registerReceiver(mGattUpdateReceiver, mIntentFilter);
+
+ // Read target image info
+ getTargetImageInfo();
+
+ // Change connection parameters for OAD
+ // setConnectionParameters();
+ } else {
+ Toast.makeText(this, "OAD service initialisation failed",
+ Toast.LENGTH_LONG).show();
+ }
+ }
+
+ @Override
+ protected void onPause() {
+ Log.d(TAG, "onPause");
+ super.onPause();
+ unregisterReceiver(mGattUpdateReceiver);
+ }
+
+ private final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+
+ final String action = intent.getAction();
+ Log.d(TAG, "action: " + action);
+
+ if (BLEUtils.ACTION_GATT_READ_SUCCESS.equals(action)) {
+ byte[] value = intent.getByteArrayExtra(BLEUtils.EXTRA_DATA);
+ String uuidStr = intent.getStringExtra(BLEUtils.EXTRA_UUID);
+ if (uuidStr.equals(mCharIdentify.getUuid().toString())) {
+ // Image info notification
+ mTargImgHdr.ver = Conversion
+ .buildUint16(value[1], value[0]);
+ mTargImgHdr.imgType = ((mTargImgHdr.ver & 1) == 1) ? 'B'
+ : 'A';
+ mTargImgHdr.len = Conversion
+ .buildUint16(value[3], value[2]);
+ displayImageInfo(mTargImage, mTargImgHdr);
+ }
+ } else if (BLEUtils.ACTION_GATT_WRITE_FAILURE.equals(action)) {
+ // handle exception
+ }
+ }
+ };
+
+ private void initIntentFilter() {
+ mIntentFilter = new IntentFilter();
+ mIntentFilter.addAction(BLEUtils.ACTION_GATT_READ_SUCCESS);
+ mIntentFilter.addAction(BLEUtils.ACTION_GATT_WRITE_SUCCESS);
+ mIntentFilter.addAction(BLEUtils.ACTION_GATT_WRITE_FAILURE);
+ }
+
+ public void onStart(View v) {
+ if (mProgramming) {
+ stopProgramming();
+ } else {
+ startProgramming();
+ }
+ }
+
+ public void onLoad(View v) {
+ if (v.getId() == R.id.btn_load_a)
+ loadFile(FW_FILE_A, true);
+ else
+ loadFile(FW_FILE_B, true);
+ updateGui();
+ }
+
+ private void startProgramming() {
+ mLog.append("Programming started\n");
+ mProgramming = true;
+ updateGui();
+
+ // Prepare image notification
+ byte[] buf = new byte[OAD_IMG_HDR_SIZE + 2 + 2];
+ buf[0] = Conversion.loUint16(mFileImgHdr.ver);
+ buf[1] = Conversion.hiUint16(mFileImgHdr.ver);
+ buf[2] = Conversion.loUint16(mFileImgHdr.len);
+ buf[3] = Conversion.hiUint16(mFileImgHdr.len);
+ System.arraycopy(mFileImgHdr.uid, 0, buf, 4, 4);
+
+ // Send image notification
+ mCharIdentify.setValue(buf);
+ mLeService.writeCharacteristic(mCharIdentify);
+
+ // Initialize stats
+ mProgInfo.reset();
+
+ // Start the packet timer
+ mTimer = null;
+ mTimer = new Timer();
+ mTimerTask = new ProgTimerTask();
+ mTimer.scheduleAtFixedRate(mTimerTask, 0, PKT_INTERVAL);
+ }
+
+ private void stopProgramming() {
+ mTimer.cancel();
+ mTimer.purge();
+ mTimerTask.cancel();
+ mTimerTask = null;
+
+ mProgramming = false;
+ mProgressInfo.setText("");
+ mProgressBar.setProgress(0);
+ updateGui();
+
+ if (mProgInfo.iBlocks == mProgInfo.nBlocks) {
+ mLog.setText("Programming complete!\n");
+ } else {
+ mLog.append("Programming cancelled\n");
+ }
+ }
+
+ private void updateGui() {
+ if (mProgramming) {
+ // Busy: stop label, progress bar, disabled file selector
+
+ } else {
+ // Idle: program label, enable file selector
+
+ if (mFileImgHdr.imgType == 'A') {
+
+ } else if (mFileImgHdr.imgType == 'B') {
+
+ }
+ }
+ }
+
+ private boolean loadFile(String filepath, boolean isAsset) {
+ boolean fSuccess = false;
+
+ // Load binary file
+ try {
+ // Read the file raw into a buffer
+ InputStream stream;
+ if (isAsset) {
+ stream = getAssets().open(filepath);
+ } else {
+ File f = new File(filepath);
+ stream = new FileInputStream(f);
+ }
+ stream.read(mFileBuffer, 0, mFileBuffer.length);
+ stream.close();
+ } catch (IOException e) {
+ // Handle exceptions here
+ mLog.setText("File open failed: " + filepath + "\n");
+ return false;
+ }
+
+ // Show image info
+ mFileImgHdr.ver = Conversion
+ .buildUint16(mFileBuffer[5], mFileBuffer[4]);
+ mFileImgHdr.len = Conversion
+ .buildUint16(mFileBuffer[7], mFileBuffer[6]);
+ mFileImgHdr.imgType = ((mFileImgHdr.ver & 1) == 1) ? 'B' : 'A';
+ System.arraycopy(mFileBuffer, 8, mFileImgHdr.uid, 0, 4);
+ displayImageInfo(mFileImage, mFileImgHdr);
+
+ // Verify image types
+ boolean ready = mFileImgHdr.imgType != mTargImgHdr.imgType;
+
+ // Enable programming button only if image types differ
+ mBtnStart.setEnabled(ready);
+
+ // Expected duration
+ mEstDuration = ((PKT_INTERVAL * mFileImgHdr.len * 4) / OAD_BLOCK_SIZE) / 1000;
+ displayStats();
+
+ // Log
+ mLog.setText("Image " + mFileImgHdr.imgType + " selected.\n");
+ mLog.append(ready ? "Ready to program device!\n"
+ : "Incompatible image, select alternative!\n");
+
+ updateGui();
+
+ return fSuccess;
+ }
+
+ private void displayImageInfo(TextView v, ImgHdr h) {
+ int imgVer = (h.ver) >> 1;
+ int imgSize = h.len * 4;
+ String s = String.format("Type: %c Ver.: %d Size: %d", h.imgType,
+ imgVer, imgSize);
+ v.setText(Html.fromHtml(s));
+ }
+
+ private void displayStats() {
+ String txt;
+ int byteRate;
+ int sec = mProgInfo.iTimeElapsed / 1000;
+ if (sec > 0) {
+ byteRate = mProgInfo.iBytes / sec;
+ } else {
+ byteRate = 0;
+ }
+
+ txt = String.format("Time: %d / %d sec", sec, mEstDuration);
+ txt += String.format(" Bytes: %d (%d/sec)", mProgInfo.iBytes,
+ byteRate);
+ mProgressInfo.setText(txt);
+ }
+
+ private void getTargetImageInfo() {
+ // Enable notification
+ boolean ok = enableNotification(mCharIdentify, true);
+ // Prepare data for request (try image A and B respectively, only one of
+ // them will give a notification with the image info)
+ if (ok)
+ ok = writeCharacteristic(mCharIdentify, (byte) 0);
+ if (ok)
+ ok = writeCharacteristic(mCharIdentify, (byte) 1);
+ if (!ok)
+ Toast.makeText(this, "Failed to get target info", Toast.LENGTH_LONG)
+ .show();
+ }
+
+ private boolean writeCharacteristic(BluetoothGattCharacteristic c, byte v) {
+ boolean ok = mLeService.writeCharacteristic(c, v);
+ if (ok)
+ ok = mLeService.waitIdle(GATT_WRITE_TIMEOUT);
+ return ok;
+ }
+
+ private boolean enableNotification(BluetoothGattCharacteristic c,
+ boolean enable) {
+ boolean ok = mLeService.setCharacteristicNotification(c, enable);
+ if (ok)
+ ok = mLeService.waitIdle(GATT_WRITE_TIMEOUT);
+ return ok;
+ }
+
+ private void setConnectionParameters() {
+ // Make sure connection interval is long enough for OAD
+ byte[] value = { Conversion.loUint16(OAD_CONN_INTERVAL),
+ Conversion.hiUint16(OAD_CONN_INTERVAL),
+ Conversion.loUint16(OAD_CONN_INTERVAL),
+ Conversion.hiUint16(OAD_CONN_INTERVAL), 0, 0,
+ Conversion.loUint16(OAD_SUPERVISION_TIMEOUT),
+ Conversion.hiUint16(OAD_SUPERVISION_TIMEOUT) };
+ mCharConnReq.setValue(value);
+ boolean ok = mLeService.writeCharacteristic(mCharConnReq);
+ if (ok)
+ ok = mLeService.waitIdle(GATT_WRITE_TIMEOUT);
+ }
+
+ /*
+ * Called when a notification with the current image info has been received
+ */
+
+ private void onBlockTimer() {
+
+ if (mProgInfo.iBlocks < mProgInfo.nBlocks) {
+ mProgramming = true;
+
+ // Prepare block
+ mOadBuffer[0] = Conversion.loUint16(mProgInfo.iBlocks);
+ mOadBuffer[1] = Conversion.hiUint16(mProgInfo.iBlocks);
+ System.arraycopy(mFileBuffer, mProgInfo.iBytes, mOadBuffer, 2,
+ OAD_BLOCK_SIZE);
+
+ // Send block
+ mCharBlock.setValue(mOadBuffer);
+ boolean success = mLeService.writeCharacteristic(mCharBlock);
+
+ if (success) {
+ // Update stats
+ mProgInfo.iBlocks++;
+ mProgInfo.iBytes += OAD_BLOCK_SIZE;
+ mProgressBar.setProgress((mProgInfo.iBlocks * 100)
+ / mProgInfo.nBlocks);
+ } else {
+ // Check if the device has been prematurely disconnected
+ if (BluetoothLeService.getBtGatt() == null)
+ mProgramming = false;
+ }
+ } else {
+ mProgramming = false;
+ }
+ mProgInfo.iTimeElapsed += PKT_INTERVAL;
+
+ if (!mProgramming) {
+ runOnUiThread(new Runnable() {
+ public void run() {
+ displayStats();
+ stopProgramming();
+ }
+ });
+ }
+ }
+
+ private class ProgTimerTask extends TimerTask {
+ @Override
+ public void run() {
+ mProgInfo.mTick++;
+ if (mProgramming) {
+ onBlockTimer();
+ if ((mProgInfo.mTick % PKT_INTERVAL) == 0) {
+ runOnUiThread(new Runnable() {
+ public void run() {
+ displayStats();
+ }
+ });
+ }
+ }
+ }
+ }
+
+ private class ImgHdr {
+ short ver;
+ short len;
+ Character imgType;
+ byte[] uid = new byte[4];
+ }
+
+ private class ProgInfo {
+ int iBytes = 0; // Number of bytes programmed
+ short iBlocks = 0; // Number of blocks programmed
+ short nBlocks = 0; // Total number of blocks
+ int iTimeElapsed = 0; // Time elapsed in milliseconds
+ int mTick = 0;
+
+ void reset() {
+ iBytes = 0;
+ iBlocks = 0;
+ iTimeElapsed = 0;
+ mTick = 0;
+ nBlocks = (short) (mFileImgHdr.len / (OAD_BLOCK_SIZE / HAL_FLASH_WORD_SIZE));
+ }
+ }
+
+}
diff --git a/src/com/twinly/eyebb/activity/GrantKidsActivity.java b/src/com/twinly/eyebb/activity/GrantKidsActivity.java
new file mode 100755
index 0000000..512227c
--- /dev/null
+++ b/src/com/twinly/eyebb/activity/GrantKidsActivity.java
@@ -0,0 +1,401 @@
+package com.twinly.eyebb.activity;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.view.KeyEvent;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.widget.Toast;
+
+import com.twinly.eyebb.R;
+import com.twinly.eyebb.adapter.GrantKidsListViewFromGuestAdapter;
+import com.twinly.eyebb.adapter.GrantKidsListViewFromMasterAdapter;
+import com.twinly.eyebb.constant.ActivityConstants;
+import com.twinly.eyebb.constant.Constants;
+import com.twinly.eyebb.constant.HttpConstants;
+import com.twinly.eyebb.model.ChildForGrant;
+import com.twinly.eyebb.utils.HttpRequestUtils;
+import com.woozzu.android.widget.IndexableListView;
+
+public class GrantKidsActivity extends Activity {
+ private IndexableListView listView;
+ private GrantKidsListViewFromGuestAdapter guest_adapter;
+ private GrantKidsListViewFromMasterAdapter master_adapter;
+ private ArrayList returnList;
+ private ArrayList childList;
+ private String guestChildrenRetStr;
+
+ private String guestdId;
+ private String guestName;
+ private String grantChildId;
+ private String from_master_or_guest;
+ private String noAccessGrantChildId;
+ private boolean from_where = false;
+ public static final int UPDATE_VIEW = 11111;
+ private ArrayList new_children_data;
+
+ /**
+ * @author eyebb team
+ *
+ * @category GrantKidsActivity
+ *
+ * this activity is used to grant child (in options, fifth layer-
+ * authorization list). It shows a list that can be chosen. Then
+ * showing which child is be granted.
+ */
+
+ @SuppressWarnings("unchecked")
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ /**
+ *
+ * from_where comes form which search activity
+ *
+ */
+ Intent intent = getIntent();
+ new_children_data = new ArrayList();
+ guestdId = intent.getStringExtra("guestId");
+ guestName = intent.getStringExtra("guestName");
+
+ from_where = intent
+ .getBooleanExtra("from_search_guest_activity", false);
+
+ if (!from_where) {
+ from_master_or_guest = intent.getStringExtra("from_where");
+ if (from_master_or_guest.equals("master")) {
+ new_children_data = (ArrayList) intent
+ .getSerializableExtra("child_data");
+ }
+ }
+
+ setTitle(getString(R.string.text_auth_to_user) + guestName);
+ getActionBar().setDisplayHomeAsUpEnabled(true);
+ getActionBar().setIcon(android.R.color.transparent);
+
+ setContentView(R.layout.dialog_grant_kids_list);
+
+ listView = (IndexableListView) findViewById(R.id.listView);
+ listView.setFastScrollEnabled(true);
+ childList = new ArrayList();
+ returnList = new ArrayList();
+ new Thread(postGuestChildrenToServerRunnable).start();
+
+ }
+
+ Runnable postGuestChildrenToServerRunnable = new Runnable() {
+ @Override
+ public void run() {
+ postGuestChildrenToServer();
+
+ }
+ };
+
+ private ArrayList parseChildJson(String getData) {
+ try {
+ childList.clear();
+ if (!JSONObject.NULL.equals(getData)) {
+ // guest_data.clear();
+ boolean isChildNull = new JSONObject(getData)
+ .isNull(HttpConstants.JSON_KEY_CHILDREN_QUOTA);
+ if (!isChildNull) {
+ JSONArray children = new JSONObject(getData)
+ .getJSONArray(HttpConstants.JSON_KEY_CHILDREN_QUOTA);
+ if (children.length() > 0) {
+ for (int i = 0; i < children.length(); i++) {
+ JSONObject child = ((JSONObject) children.opt(i))
+ .getJSONObject(HttpConstants.JSON_KEY_CHILD);
+
+ ChildForGrant childForGrant = new ChildForGrant();
+ System.out
+ .println("--->"
+ + child.getString(HttpConstants.JSON_KEY_CHILD_ID));
+ System.out
+ .println("--->"
+ + child.getString(HttpConstants.JSON_KEY_CHILD_NAME));
+ System.out
+ .println("--->"
+ + child.getString(HttpConstants.JSON_KEY_CHILD_ICON));
+
+ System.out
+ .println("--->"
+ + ((JSONObject) children.opt(i))
+ .getBoolean(HttpConstants.JSON_KEY_WITH_ACCESS));
+ System.out
+ .println("--->"
+ + ((JSONObject) children.opt(i))
+ .getString(HttpConstants.JSON_KEY_TOTAL_QUOTA));
+ System.out
+ .println("--->"
+ + ((JSONObject) children.opt(i))
+ .getString(HttpConstants.JSON_KEY_QUOTA_LEFT));
+ System.out
+ .println("--------------------------------------");
+
+ childForGrant
+ .setChildId(Long.valueOf(child
+ .getString(HttpConstants.JSON_KEY_CHILD_ID)));
+ childForGrant
+ .setName(child
+ .getString(HttpConstants.JSON_KEY_CHILD_NAME));
+ childForGrant
+ .setIcon(child
+ .getString(HttpConstants.JSON_KEY_CHILD_ICON));
+ childForGrant
+ .setWithAccess(((JSONObject) children
+ .opt(i))
+ .getBoolean(HttpConstants.JSON_KEY_WITH_ACCESS));
+ childForGrant
+ .setTotalQuota(((JSONObject) children
+ .opt(i))
+ .getString(HttpConstants.JSON_KEY_TOTAL_QUOTA));
+
+ childForGrant
+ .setQuotaLeft(((JSONObject) children.opt(i))
+ .getString(HttpConstants.JSON_KEY_QUOTA_LEFT));
+
+ childList.add(childForGrant);
+ }
+ }
+ }
+ }
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ return childList;
+ }
+
+ @SuppressLint("ShowToast")
+ private void postGuestChildrenToServer() {
+ Map map = new HashMap();
+
+ map.put("guestId", guestdId);
+
+ try {
+ guestChildrenRetStr = HttpRequestUtils.post(
+ HttpConstants.GUEST_CHILDREN, map);
+ System.out.println("guestchildren======>" + guestChildrenRetStr);
+ if (guestChildrenRetStr
+ .equals(HttpConstants.HTTP_POST_RESPONSE_EXCEPTION)
+ || guestChildrenRetStr.equals("")
+ || guestChildrenRetStr.length() == 0) {
+ System.out.println("connect error");
+
+ Message msg = handler.obtainMessage();
+ msg.what = Constants.CONNECT_ERROR;
+ handler.sendMessage(msg);
+ } else {
+ if (guestChildrenRetStr.length() > 0) {
+ Message msg = handler.obtainMessage();
+ msg.what = UPDATE_VIEW;
+ handler.sendMessage(msg);
+
+ }
+ }
+
+ } catch (Exception e) {
+
+ e.printStackTrace();
+
+ }
+
+ }
+
+ Runnable postGrantToServerRunnable = new Runnable() {
+ @Override
+ public void run() {
+ postGrantToServer();
+
+ }
+ };
+
+ @SuppressLint("ShowToast")
+ private void postGrantToServer() {
+ Map map = new HashMap();
+ System.out.println("info=>" + guestdId + " ");
+
+ map.put("guestId", guestdId);
+ if (grantChildId.length() > 0) {
+ map.put("accessChildIds",
+ grantChildId.substring(0, grantChildId.length() - 1));
+
+ } else {
+ map.put("accessChildIds", "");
+ }
+
+ if (noAccessGrantChildId.length() > 0) {
+ map.put("noAccessChildIds",
+ noAccessGrantChildId.substring(0,
+ noAccessGrantChildId.length() - 1));
+ } else {
+ map.put("noAccessChildIds", "");
+ }
+
+ try {
+ String retStr = HttpRequestUtils.post(HttpConstants.GRANT_GUESTS,
+ map);
+ System.out.println("grant======>" + retStr);
+ if (retStr.equals(HttpConstants.HTTP_POST_RESPONSE_EXCEPTION)
+ || retStr.equals("") || retStr.length() == 0) {
+ System.out.println("connect error");
+
+ Message msg = handler.obtainMessage();
+ msg.what = Constants.CONNECT_ERROR;
+ handler.sendMessage(msg);
+ } else {
+ if (retStr.equals(HttpConstants.SERVER_RETURN_T)) {
+ Message msg = handler.obtainMessage();
+ msg.what = Constants.GRANT_SUCCESS;
+ handler.sendMessage(msg);
+
+ } else if (retStr.equals(HttpConstants.SERVER_RETURN_F)) {
+ Message msg = handler.obtainMessage();
+ msg.what = Constants.CONNECT_ERROR;
+ handler.sendMessage(msg);
+ }
+ }
+
+ } catch (Exception e) {
+
+ e.printStackTrace();
+
+ }
+
+ }
+
+ @SuppressLint("HandlerLeak")
+ Handler handler = new Handler() {
+
+ @SuppressLint("ShowToast")
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+
+ case Constants.CONNECT_ERROR:
+ Toast.makeText(GrantKidsActivity.this,
+ R.string.text_network_error, Toast.LENGTH_LONG).show();
+
+ break;
+
+ case Constants.GRANT_SUCCESS:
+ Toast.makeText(GrantKidsActivity.this,
+ R.string.text_grant_success, Toast.LENGTH_LONG).show();
+ Intent intent = new Intent(GrantKidsActivity.this,
+ AuthorizeKidsActivity.class);
+ startActivity(intent);
+ setResult(ActivityConstants.RESULT_RESULT_OK);
+ finish();
+ break;
+
+ case Constants.NO_SELECT_CHILDREN:
+ Toast.makeText(GrantKidsActivity.this,
+ R.string.text_select_child, Toast.LENGTH_LONG).show();
+
+ break;
+
+ case UPDATE_VIEW:
+ if (!from_where) {
+ if (from_master_or_guest.equals("master")) {
+ master_adapter = new GrantKidsListViewFromMasterAdapter(
+ GrantKidsActivity.this, new_children_data);
+ listView.setAdapter(master_adapter);
+ } else if (from_master_or_guest.equals("guest")) {
+ returnList = parseChildJson(guestChildrenRetStr);
+ guest_adapter = new GrantKidsListViewFromGuestAdapter(
+ GrantKidsActivity.this, returnList);
+ listView.setAdapter(guest_adapter);
+ }
+ } else {
+ returnList = parseChildJson(guestChildrenRetStr);
+ guest_adapter = new GrantKidsListViewFromGuestAdapter(
+ GrantKidsActivity.this, returnList);
+ listView.setAdapter(guest_adapter);
+ }
+
+ break;
+
+ }
+
+ }
+ };
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ if (!from_where) {
+ if (from_master_or_guest.equals("guest")) {
+ menu.add(0, 0, 0, R.string.btn_confirm).setShowAsAction(
+ MenuItem.SHOW_AS_ACTION_IF_ROOM
+ | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
+ }
+ } else {
+ menu.add(0, 0, 0, R.string.btn_confirm).setShowAsAction(
+ MenuItem.SHOW_AS_ACTION_IF_ROOM
+ | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
+ }
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ if (from_where) {
+ finish();
+ } else {
+ Intent intent = new Intent(GrantKidsActivity.this,
+ AuthorizeKidsActivity.class);
+ startActivity(intent);
+ finish();
+ }
+
+ return true;
+ } else if (item.getItemId() == 0) {
+ grantChildId = "";
+ noAccessGrantChildId = "";
+ for (int i = 0; i < GrantKidsListViewFromGuestAdapter.grantkidId
+ .size(); i++) {
+ grantChildId += GrantKidsListViewFromGuestAdapter.grantkidId
+ .get(i).toString() + ",";
+ }
+ for (int i = 0; i < GrantKidsListViewFromGuestAdapter.noAccessGrantkidId
+ .size(); i++) {
+ noAccessGrantChildId += GrantKidsListViewFromGuestAdapter.noAccessGrantkidId
+ .get(i).toString() + ",";
+ }
+
+ System.out.println("grantChildId-->" + grantChildId
+ + " nograntChildId--->" + noAccessGrantChildId);
+
+ new Thread(postGrantToServerRunnable).start();
+
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
+ if (from_where) {
+ finish();
+ } else {
+ Intent intent = new Intent(GrantKidsActivity.this,
+ AuthorizeKidsActivity.class);
+ startActivity(intent);
+ finish();
+ }
+
+ return true;
+ }
+ return super.onKeyDown(keyCode, event);
+ }
+}
diff --git a/src/com/twinly/eyebb/activity/KidProfileActivity.java b/src/com/twinly/eyebb/activity/KidProfileActivity.java
new file mode 100755
index 0000000..93d4f85
--- /dev/null
+++ b/src/com/twinly/eyebb/activity/KidProfileActivity.java
@@ -0,0 +1,672 @@
+package com.twinly.eyebb.activity;
+
+import java.io.File;
+import java.util.List;
+
+import android.animation.Animator;
+import android.animation.Animator.AnimatorListener;
+import android.animation.ObjectAnimator;
+import android.animation.ValueAnimator;
+import android.animation.ValueAnimator.AnimatorUpdateListener;
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.app.Dialog;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothManager;
+import android.content.ActivityNotFoundException;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.ResolveInfo;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.MediaStore;
+import android.view.ContextMenu;
+import android.view.ContextMenu.ContextMenuInfo;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.example.qr_codescan.MipcaActivityCapture;
+import com.nostra13.universalimageloader.core.ImageLoader;
+import com.twinly.eyebb.R;
+import com.twinly.eyebb.bluetooth.BluetoothUtils;
+import com.twinly.eyebb.constant.ActivityConstants;
+import com.twinly.eyebb.constant.Constants;
+import com.twinly.eyebb.customview.HoloCircularProgressBar;
+import com.twinly.eyebb.customview.LoadingDialog;
+import com.twinly.eyebb.database.DBChildren;
+import com.twinly.eyebb.model.Child;
+import com.twinly.eyebb.utils.CommonUtils;
+import com.twinly.eyebb.utils.ImageUtils;
+import com.twinly.eyebb.utils.RegularExpression;
+
+/**
+ * @author eyebb team
+ *
+ * @category KidProfileActivity
+ *
+ * this activity is used to show one child`s detailed information.
+ * (contains eyeBB Battery Usage, Beep, Update the eyebb device
+ * firmware, Apply for the lastest qr code and binding(unbind))
+ */
+public class KidProfileActivity extends Activity implements
+ BluetoothUtils.BleConnectCallback, OnClickListener {
+ private final static int SCANNIN_GREQUEST_CODE = 500;
+
+ private Child child;
+ private ImageView avatar;
+ private TextView kidName;
+ private TextView txtDeviceQr;
+ private TextView txtBinding;
+ private TextView deviceBatteryResult;
+ private ImageLoader imageLoader;
+ private LinearLayout avatarItemLayout;
+ private Uri mImageCaptureUri;
+ private static final int PICK_FROM_CAMERA = 100;
+ private static final int CROP_PHOTO = 200;
+ private static final int PICK_FROM_FILE = 300;
+
+ private LinearLayout layoutDeviceBeep;
+ private LinearLayout layoutDeviceOta;
+ private LinearLayout layoutDeviceRequireQrCode;
+ private LinearLayout layoutDeviceUnbind;
+
+ private BluetoothUtils mBluetoothUtils;
+ private BluetoothAdapter mBluetoothAdapter;
+
+ private HoloCircularProgressBar mHoloCircularProgressBar;
+ private ObjectAnimator mProgressBarAnimator;
+
+ private String getDeviceBattery;
+
+ private Dialog dialog;
+
+ @SuppressLint("NewApi")
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_kid_profile_temp);
+ getActionBar().setDisplayHomeAsUpEnabled(true);
+ getActionBar().setIcon(android.R.color.transparent);
+ registerForContextMenu(findViewById(R.id.avatarItem));
+
+ child = DBChildren
+ .getChildById(
+ this,
+ getIntent().getLongExtra(
+ ActivityConstants.EXTRA_CHILD_ID, -1L));
+ setTitle(child.getName());
+
+ avatar = (ImageView) findViewById(R.id.avatar);
+ kidName = (TextView) findViewById(R.id.kidname);
+ txtBinding = (TextView) findViewById(R.id.device_unbind);
+ txtDeviceQr = (TextView) findViewById(R.id.device_qr);
+ layoutDeviceBeep = (LinearLayout) findViewById(R.id.layout_device_beep);
+ layoutDeviceOta = (LinearLayout) findViewById(R.id.layout_device_ota);
+ layoutDeviceRequireQrCode = (LinearLayout) findViewById(R.id.layout_device_require_qr_code);
+ layoutDeviceUnbind = (LinearLayout) findViewById(R.id.layout_device_unbind);
+ layoutDeviceRequireQrCode.setOnClickListener(this);
+ layoutDeviceBeep.setOnClickListener(this);
+ layoutDeviceOta.setOnClickListener(this);
+ avatarItemLayout = (LinearLayout) findViewById(R.id.avatarItem);
+ deviceBatteryResult = (TextView) findViewById(R.id.device_battery_result);
+
+ mBluetoothUtils = new BluetoothUtils(KidProfileActivity.this,
+ getFragmentManager(), this);
+ // deviceAddress.setText(child.getMacAddress());
+
+ kidName.setText(child.getName());
+ imageLoader = ImageLoader.getInstance();
+ if (ImageUtils.isLocalImage(child.getIcon())) {
+ avatar.setImageBitmap(ImageUtils.getBitmapFromLocal(child.getIcon()));
+ } else {
+ imageLoader.displayImage(child.getIcon(), avatar,
+ ImageUtils.avatarOpitons, null);
+ }
+
+ // NO address
+ if (CommonUtils.isNull(child.getMacAddress())) {
+ txtBinding.setText(getString(R.string.btn_binding));
+ txtDeviceQr
+ .setText(getString(R.string.text_get_the_lastest_eyebb_device_qr_code));
+ layoutDeviceBeep.setVisibility(View.GONE);
+ layoutDeviceOta.setVisibility(View.GONE);
+
+ } else {
+ txtBinding.setText(getString(R.string.btn_unbind));
+ layoutDeviceBeep.setVisibility(View.GONE);
+ }
+
+ // if the child belongs to other parent
+ if (child.getRelationWithUser().equals("P") == false) {
+ layoutDeviceBeep.setVisibility(View.INVISIBLE);
+ layoutDeviceOta.setVisibility(View.INVISIBLE);
+ layoutDeviceRequireQrCode.setVisibility(View.INVISIBLE);
+ layoutDeviceUnbind.setVisibility(View.INVISIBLE);
+ }
+
+ mImageCaptureUri = Uri.fromFile(new File(Constants.EYEBB_FOLDER
+ + "temp.jpg"));
+
+ mHoloCircularProgressBar = (HoloCircularProgressBar) findViewById(R.id.holoCircularProgressBar);
+
+ // deviceBattery.setText(getResources().getString(
+ // R.string.text_check_battery_life));
+ final BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
+ mBluetoothAdapter = bluetoothManager.getAdapter();
+
+ if (CommonUtils.isNotNull(child.getMacAddress())) {
+ initToReadBattery();
+ } else {
+ bluetoothNotOpenCancelReadBattery();
+ }
+
+ }
+
+ /**
+ * when start this activity, we should read the battery first
+ *
+ */
+ @SuppressLint("NewApi")
+ private void initToReadBattery() {
+
+ if (!mBluetoothAdapter.isEnabled()) {
+ bluetoothNotOpenCancelReadBattery();
+ } else {
+ avatarItemLayout.setBackgroundColor(getResources().getColor(
+ R.color.activity_background_red));
+
+ if (getDeviceBattery == null) {
+ // System.out.println("start to read battery");
+ if (child.getMacAddress() != null) {
+ mBluetoothUtils.readBattery(child.getMacAddress(), 10000);
+ }
+ // mHoloCircularProgressBar.setMarkerEnabled(true);
+
+ // mBluetoothUtils.readBattery(child.getMacAddress(), 10000);
+ mHoloCircularProgressBar.setMarkerEnabled(false);
+ mHoloCircularProgressBar.setProgress(1.0f);
+ } else {
+ mHoloCircularProgressBar.setProgress(1f);
+
+ if (mProgressBarAnimator != null) {
+ mProgressBarAnimator.cancel();
+ }
+
+ animate(mHoloCircularProgressBar, null,
+ Float.valueOf(getDeviceBattery), 2000);
+ mHoloCircularProgressBar.setMarkerProgress(Float
+ .valueOf(getDeviceBattery));
+
+ if (getDeviceBattery.equals("0")) {
+ deviceBatteryResult.setText("100%");
+
+ } else {
+ deviceBatteryResult.setText((1 - Float
+ .valueOf(getDeviceBattery) + "").substring(2, 4)
+ + "%");
+ }
+
+ }
+ }
+
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ if (mBluetoothUtils != null) {
+ mBluetoothUtils.registerReceiver();
+ }
+
+ registerReceiver(bluetoothState, new IntentFilter(
+ BluetoothAdapter.ACTION_STATE_CHANGED));
+
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ if (mBluetoothUtils != null) {
+ mBluetoothUtils.unregisterReceiver();
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ if (mBluetoothUtils != null) {
+ mBluetoothUtils.disconnect();
+ }
+
+ try {
+ unregisterReceiver(bluetoothState);
+ } catch (IllegalArgumentException e) {
+ if (e.getMessage().contains("Receiver not registered")) {
+ // Ignore this exception. This is exactly what is desired
+ } else {
+ // unexpected, re-throw
+ throw e;
+ }
+ }
+
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ finish();
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ public void onCreateContextMenu(ContextMenu menu, View v,
+ ContextMenuInfo menuInfo) {
+ super.onCreateContextMenu(menu, v, menuInfo);
+ menu.add(0, 0, 0, getString(R.string.btn_take_photo));
+ menu.add(0, 1, 1, getString(R.string.btn_choose_photo));
+ }
+
+ @Override
+ public boolean onContextItemSelected(android.view.MenuItem item) {
+ switch (item.getItemId()) {
+ case 0:
+ onCameraClicked();
+ break;
+ case 1:
+ onGalleryClicked();
+ break;
+ }
+ return super.onContextItemSelected(item);
+ }
+
+ public void onAvatarItemCliked(View view) {
+ this.openContextMenu(view);
+ }
+
+ public void onBindClicked(View view) {
+ if (CommonUtils.isNull(child.getMacAddress())) {
+ Intent intent = new Intent(this, MipcaActivityCapture.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ startActivityForResult(intent, SCANNIN_GREQUEST_CODE);
+ } else {
+ Intent intent = new Intent();
+ intent.putExtra(ActivityConstants.EXTRA_CHILD_ID,
+ child.getChildId());
+ intent.setClass(this, UnbindDeviceDialog.class);
+ startActivityForResult(intent,
+ ActivityConstants.REQUEST_GO_TO_UNBIND_ACTIVITY);
+ }
+ }
+
+ private void onCameraClicked() {
+ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
+ intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,
+ mImageCaptureUri);
+ try {
+ intent.putExtra("return-data", true);
+
+ startActivityForResult(intent, PICK_FROM_CAMERA);
+ } catch (ActivityNotFoundException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void onGalleryClicked() {
+ Intent intent = new Intent(Intent.ACTION_PICK,
+ android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
+
+ startActivityForResult(
+ Intent.createChooser(intent, "Complete action using"),
+ PICK_FROM_FILE);
+ }
+
+ private void doCrop() {
+ Intent intent = new Intent("com.android.camera.action.CROP");
+ intent.setType("image/*");
+
+ List list = getPackageManager().queryIntentActivities(
+ intent, 0);
+
+ int size = list.size();
+
+ if (size == 0) {
+ Toast.makeText(this, "Can not find image crop app",
+ Toast.LENGTH_SHORT).show();
+ return;
+ } else {
+ intent.setData(mImageCaptureUri);
+
+ intent.putExtra("outputX", 200);
+ intent.putExtra("outputY", 200);
+ intent.putExtra("aspectX", 1);
+ intent.putExtra("aspectY", 1);
+ intent.putExtra("scale", true);
+ intent.putExtra("return-data", true);
+
+ Intent i = new Intent(intent);
+ ResolveInfo res = list.get(0);
+
+ i.setComponent(new ComponentName(res.activityInfo.packageName,
+ res.activityInfo.name));
+
+ startActivityForResult(i, CROP_PHOTO);
+ }
+ }
+
+ private void saveAvatar(Bitmap bitmap) {
+ String path = Constants.EYEBB_FOLDER + "avatar" + child.getChildId()
+ + ".jpg";
+ if (ImageUtils.saveBitmap(bitmap, path)) {
+ child.setIcon(path);
+ DBChildren.updateIconByChildId(this, child.getChildId(), path);
+ avatar.setImageBitmap(BitmapFactory.decodeFile(path));
+ }
+ }
+
+ private void bluetoothNotOpenCancelReadBattery() {
+ avatarItemLayout.setBackgroundColor(getResources().getColor(
+ R.color.lilac_colour));
+ mHoloCircularProgressBar.setMarkerEnabled(false);
+ mHoloCircularProgressBar.setProgress(0.0f);
+
+ deviceBatteryResult.setText(getResources().getString(
+ R.string.text_no_device_nearby));
+ }
+
+ /**
+ * bluetooth state broadcast
+ */
+ BroadcastReceiver bluetoothState = new BroadcastReceiver() {
+ public void onReceive(Context context, Intent intent) {
+ String stateExtra = BluetoothAdapter.EXTRA_STATE;
+ int state = intent.getIntExtra(stateExtra, -1);
+ switch (state) {
+ case BluetoothAdapter.STATE_TURNING_ON:
+ System.out.println("STATE_TURNING_ON");
+
+ break;
+ case BluetoothAdapter.STATE_ON:
+ System.out.println("STATE_ON");
+
+ initToReadBattery();
+
+ break;
+ case BluetoothAdapter.STATE_TURNING_OFF:
+ System.out.println("STATE_TURNING_OFF");
+
+ break;
+ case BluetoothAdapter.STATE_OFF:
+ System.out.println("STATE_OFF");
+ bluetoothNotOpenCancelReadBattery();
+
+ break;
+
+ }
+
+ }
+ };
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ switch (requestCode) {
+ case PICK_FROM_CAMERA:
+ doCrop();
+ break;
+ case PICK_FROM_FILE:
+ if (data != null) {
+ mImageCaptureUri = data.getData();
+ doCrop();
+ }
+
+ break;
+ case CROP_PHOTO:
+ if (data != null) {
+ Bundle extras = data.getExtras();
+ if (extras != null) {
+ Bitmap photo = extras.getParcelable("data");
+ saveAvatar(photo);
+ }
+ }
+ break;
+ case ActivityConstants.REQUEST_GO_TO_UNBIND_ACTIVITY:
+ if (resultCode == ActivityConstants.RESULT_UNBIND_SUCCESS) {
+ setResult(ActivityConstants.RESULT_UNBIND_SUCCESS);
+ finish();
+ }
+ break;
+ case ActivityConstants.REQUEST_GO_TO_BIND_CHILD_MACARON_ACTIVITY:
+ if (resultCode == ActivityConstants.RESULT_WRITE_MAJOR_MINOR_SUCCESS) {
+ setResult(ActivityConstants.RESULT_WRITE_MAJOR_MINOR_SUCCESS);
+ finish();
+ }
+ break;
+ case SCANNIN_GREQUEST_CODE:
+ if (resultCode == RESULT_OK) {
+ Bundle bundle = data.getExtras();
+ System.out.println("qrcode------->"
+ + bundle.getString("result"));
+ String macAddress = bundle.getString("result");
+ macAddress = RegularExpression.getValidMacAddress(this,
+ macAddress);
+ if (macAddress != null) {
+ Intent intent = new Intent();
+ intent.setClass(this, BindingChildMacaronActivity.class);
+ intent.putExtra(ActivityConstants.EXTRA_FROM,
+ ActivityConstants.ACTIVITY_KID_PROFILE);
+ intent.putExtra(ActivityConstants.EXTRA_GUARDIAN_ID, -1L);
+ intent.putExtra(ActivityConstants.EXTRA_CHILD_ID,
+ child.getChildId());
+ intent.putExtra(ActivityConstants.EXTRA_CHILD_ICON,
+ child.getIcon());
+ intent.putExtra(ActivityConstants.EXTRA_MAC_ADDRESS,
+ macAddress);
+ startActivityForResult(
+ intent,
+ ActivityConstants.REQUEST_GO_TO_BIND_CHILD_MACARON_ACTIVITY);
+ }
+ }
+ }
+ }
+
+ private void animate(final HoloCircularProgressBar progressBar,
+ final AnimatorListener listener, final float progress,
+ final int duration) {
+
+ mProgressBarAnimator = ObjectAnimator.ofFloat(progressBar, "progress",
+ progress);
+ mProgressBarAnimator.setDuration(duration);
+
+ mProgressBarAnimator.addListener(new AnimatorListener() {
+
+ @Override
+ public void onAnimationCancel(final Animator animation) {
+ }
+
+ @Override
+ public void onAnimationEnd(final Animator animation) {
+ progressBar.setProgress(progress);
+ }
+
+ @Override
+ public void onAnimationRepeat(final Animator animation) {
+ }
+
+ @Override
+ public void onAnimationStart(final Animator animation) {
+ }
+ });
+ if (listener != null) {
+ mProgressBarAnimator.addListener(listener);
+ }
+ mProgressBarAnimator.reverse();
+ mProgressBarAnimator.addUpdateListener(new AnimatorUpdateListener() {
+
+ @Override
+ public void onAnimationUpdate(final ValueAnimator animation) {
+ progressBar.setProgress((Float) animation.getAnimatedValue());
+ }
+ });
+ progressBar.setMarkerProgress(progress);
+ mProgressBarAnimator.start();
+ }
+
+ @Override
+ public void onPreConnect() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ deviceBatteryResult.setText(getResources().getString(
+ R.string.toast_loading));
+ }
+ });
+ }
+
+ @Override
+ public void onConnectCanceled() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ System.out.println("onConnectCanceled() ");
+ if (dialog != null) {
+ if (dialog.isShowing()) {
+ dialog.dismiss();
+ }
+ }
+ bluetoothNotOpenCancelReadBattery();
+
+ }
+ });
+ }
+
+ @Override
+ public void onConnected() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ deviceBatteryResult.setText(getResources().getString(
+ R.string.toast_loading));
+ }
+ });
+ }
+
+ @Override
+ public void onDisConnected() {
+ // do nothing
+ }
+
+ @Override
+ public void onDiscovered() {
+ // do nothing
+ }
+
+ /**
+ * when we read the battery life. the connection between device and phone
+ * does not interrupt. so we let
+ * layoutDeviceBeep.setVisibility(View.VISIBLE);
+ */
+ @Override
+ public void onDataAvailable(final String value) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+
+ // System.out.println("BATTERY-->" + Integer.parseInt(value, 16)
+ // + "%");
+ layoutDeviceBeep.setVisibility(View.VISIBLE);
+ mHoloCircularProgressBar.setProgress(1f);
+
+ if (mProgressBarAnimator != null) {
+ mProgressBarAnimator.cancel();
+ }
+
+ if (Integer.parseInt(value, 16) != 100) {
+ animate(mHoloCircularProgressBar,
+ null,
+ (1 - Float.valueOf("0."
+ + Integer.parseInt(value, 16))), 2000);
+ mHoloCircularProgressBar.setMarkerProgress((1 - Float
+ .valueOf("0." + Integer.parseInt(value, 16))));
+
+ deviceBatteryResult.setText(Integer.parseInt(value, 16)
+ + "%");
+
+ getDeviceBattery = (1 - Float.valueOf("0."
+ + Integer.parseInt(value, 16)))
+ + "";
+ } else {
+
+ animate(mHoloCircularProgressBar, null, 0f, 2000);
+ mHoloCircularProgressBar.setMarkerProgress(0f);
+
+ deviceBatteryResult.setText(Integer.parseInt(value, 16)
+ + "%");
+
+ getDeviceBattery = 0 + "";
+ }
+ }
+ });
+
+ }
+
+ @Override
+ public void onResult(final boolean result) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ if (result) {
+ if (dialog.isShowing() && dialog != null) {
+ dialog.dismiss();
+ }
+ } else {
+ bluetoothNotOpenCancelReadBattery();
+ }
+ }
+ });
+ }
+
+ @Override
+ public void onClick(View v) {
+ // TODO Auto-generated method stub
+ switch (v.getId()) {
+
+ case R.id.layout_device_require_qr_code:
+ Intent intent = new Intent(KidProfileActivity.this,
+ RequireQrCodeDialog.class);
+ intent.putExtra("child_id", child.getChildId() + "");
+
+ startActivity(intent);
+ // bindService(i1, conn1, Context.BIND_AUTO_CREATE);
+
+ break;
+
+ case R.id.layout_device_beep:
+ if (child.getMacAddress() != null) {
+ dialog = LoadingDialog.createLoadingDialog(
+ KidProfileActivity.this, getString(R.string.text_beep));
+ dialog.show();
+ System.out.println("child.getMacAddress()---> "
+ + child.getMacAddress());
+ mBluetoothUtils.writeBeep(child.getMacAddress(), 10000, "01");
+ }
+ break;
+
+ case R.id.layout_device_ota:
+ Intent intentFwUpdateActivity = new Intent(KidProfileActivity.this,
+ FwUpdateActivity.class);
+ // startActivity(intentFwUpdateActivity);
+ break;
+
+ }
+ }
+}
diff --git a/src/com/twinly/eyebb/activity/KidsListActivity.java b/src/com/twinly/eyebb/activity/KidsListActivity.java
new file mode 100755
index 0000000..37a7b83
--- /dev/null
+++ b/src/com/twinly/eyebb/activity/KidsListActivity.java
@@ -0,0 +1,156 @@
+package com.twinly.eyebb.activity;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.widget.EditText;
+
+import com.twinly.eyebb.R;
+import com.twinly.eyebb.adapter.KidsListViewAdapter;
+import com.twinly.eyebb.constant.ActivityConstants;
+import com.twinly.eyebb.dialog.KidsListOptionsDialog;
+import com.twinly.eyebb.model.ChildForLocator;
+import com.twinly.eyebb.model.SerializableChildrenMap;
+import com.woozzu.android.widget.IndexableListView;
+
+/**
+ * @author eyebb team
+ *
+ * @category KidsListActivity
+ *
+ * this activity is used for the first fragment activity. There is a
+ * button that open it at the bottom of the screen. It shows the kids
+ * list and also provide the search and sort functions.
+ *
+ */
+public class KidsListActivity extends Activity {
+ private IndexableListView listView;
+ private EditText etSearch;
+ private List> list;
+ private List> searchList;
+ private KidsListViewAdapter adapter;
+ private boolean isSortByName = true;
+ private boolean isSortByLocation = false;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setTitle(getString(R.string.text_kids_list));
+ getActionBar().setDisplayHomeAsUpEnabled(true);
+ getActionBar().setIcon(android.R.color.transparent);
+
+ setContentView(R.layout.activity_kids_list);
+
+ searchList = new ArrayList>();
+ Bundle bundle = getIntent().getExtras();
+ SerializableChildrenMap serializableMap = (SerializableChildrenMap) bundle
+ .get("childrenMap");
+
+ if (serializableMap != null) {
+ list = new ArrayList>(serializableMap
+ .getMap().entrySet());
+
+ adapter = new KidsListViewAdapter(this, list, isSortByName,
+ isSortByLocation);
+ }
+
+ etSearch = (EditText) findViewById(R.id.et_search);
+ listView = (IndexableListView) findViewById(R.id.listView);
+ listView.setAdapter(adapter);
+ listView.setFastScrollEnabled(true);
+
+ etSearch.addTextChangedListener(new TextWatcher() {
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before,
+ int count) {
+
+ }
+
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count,
+ int after) {
+
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ search(etSearch.getText().toString());
+ }
+ });
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.activity_kids_list, menu);
+ return super.onCreateOptionsMenu(menu);
+ }
+
+ private void search(String keyword) {
+ if (!TextUtils.isEmpty(keyword)) {
+ searchList.clear();
+ for (int i = 0; i < list.size(); i++) {
+ if (list.get(i).getValue().getName().contains(keyword)) {
+ searchList.add(list.get(i));
+ }
+ }
+ adapter = new KidsListViewAdapter(KidsListActivity.this,
+ searchList, isSortByName, isSortByLocation);
+ listView.setAdapter(adapter);
+ } else {
+ adapter = new KidsListViewAdapter(KidsListActivity.this, list,
+ isSortByName, isSortByLocation);
+ listView.setAdapter(adapter);
+ }
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ finish();
+ return true;
+ } else if (item.getItemId() == R.id.menu_options) {
+ Intent intent = new Intent(this, KidsListOptionsDialog.class);
+ intent.putExtra(KidsListOptionsDialog.EXTRA_SORT_BY_NAME,
+ isSortByName);
+ intent.putExtra(KidsListOptionsDialog.EXTRA_SORT_BY_LOCATION,
+ isSortByLocation);
+ startActivityForResult(intent,
+ ActivityConstants.REQUEST_GO_TO_OPTIONS_DIALOG);
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == ActivityConstants.REQUEST_GO_TO_OPTIONS_DIALOG) {
+ if (resultCode == ActivityConstants.RESULT_RESULT_OK) {
+ if (isSortByName != data.getBooleanExtra(
+ KidsListOptionsDialog.EXTRA_SORT_BY_NAME, isSortByName)
+ || isSortByLocation != data.getBooleanExtra(
+ KidsListOptionsDialog.EXTRA_SORT_BY_LOCATION,
+ isSortByLocation)) {
+ isSortByName = data.getBooleanExtra(
+ KidsListOptionsDialog.EXTRA_SORT_BY_NAME,
+ isSortByName);
+ isSortByLocation = data.getBooleanExtra(
+ KidsListOptionsDialog.EXTRA_SORT_BY_LOCATION,
+ isSortByLocation);
+ adapter = new KidsListViewAdapter(KidsListActivity.this,
+ list, isSortByName, isSortByLocation);
+ listView.setAdapter(adapter);
+ }
+ }
+ }
+ }
+
+}
diff --git a/src/com/twinly/eyebb/activity/KindergartenListActivity.java b/src/com/twinly/eyebb/activity/KindergartenListActivity.java
new file mode 100755
index 0000000..bc31eb4
--- /dev/null
+++ b/src/com/twinly/eyebb/activity/KindergartenListActivity.java
@@ -0,0 +1,158 @@
+package com.twinly.eyebb.activity;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.Intent;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ListView;
+import android.widget.SimpleAdapter;
+
+import com.twinly.eyebb.R;
+import com.twinly.eyebb.constant.ActivityConstants;
+import com.twinly.eyebb.constant.Constants;
+import com.twinly.eyebb.constant.HttpConstants;
+import com.twinly.eyebb.customview.LoadingDialog;
+import com.twinly.eyebb.utils.HttpRequestUtils;
+import com.twinly.eyebb.utils.SystemUtils;
+
+/**
+ * @author eyebb team
+ *
+ * @category KindergartenListActivity
+ *
+ * this activity is used when you fill in the child`s information
+ * (during the sign-up time). you should finish 3 parts. The first is
+ * child`s name. The second is child`s birthday. The third is child`s
+ * kindergarten.
+ *
+ */
+public class KindergartenListActivity extends Activity {
+ private ListView listView;
+ private ArrayList