diff options
79 files changed, 2190 insertions, 0 deletions
diff --git a/client/Piztor/.classpath b/client/Piztor/.classpath new file mode 100644 index 0000000..7bc01d9 --- /dev/null +++ b/client/Piztor/.classpath @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="gen"/> + <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/> + <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/> + <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/> + <classpathentry kind="output" path="bin/classes"/> +</classpath> diff --git a/client/Piztor/.project b/client/Piztor/.project new file mode 100644 index 0000000..97100ec --- /dev/null +++ b/client/Piztor/.project @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>Piztor</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>com.android.ide.eclipse.adt.ApkBuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>com.android.ide.eclipse.adt.AndroidNature</nature> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/client/Piztor/.settings/org.eclipse.jdt.core.prefs b/client/Piztor/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..b080d2d --- /dev/null +++ b/client/Piztor/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/client/Piztor/AndroidManifest.xml b/client/Piztor/AndroidManifest.xml new file mode 100644 index 0000000..b18d8e2 --- /dev/null +++ b/client/Piztor/AndroidManifest.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.macaroon.piztor" + android:versionCode="1" + android:versionName="1.0" > + + <uses-sdk + android:minSdkVersion="8" + android:targetSdkVersion="17" /> + + <application + android:allowBackup="true" + android:icon="@drawable/ic_launcher" + android:label="@string/app_name" + android:theme="@android:style/Theme.Black.NoTitleBar" > + <activity + android:name="com.macaroon.piztor.InitAct" + android:label="@string/app_name" > + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + + <category android:name="android.intent.category.LAUNCHER" /> + </intent-filter> + </activity> + <activity + android:name="com.macaroon.piztor.Login" + android:label="@string/title_activity_login" > + </activity> + <activity + android:name="com.macaroon.piztor.Main" + android:label="@string/title_activity_main" > + </activity> + <activity + android:name="com.macaroon.piztor.Setting" + android:label="@string/title_activity_setting" > + </activity> + </application> + + <uses-permission android:name="android.permission.INTERNET" /> + <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> + +</manifest> diff --git a/client/Piztor/ic_launcher-web.png b/client/Piztor/ic_launcher-web.png Binary files differnew file mode 100644 index 0000000..3cd0ac2 --- /dev/null +++ b/client/Piztor/ic_launcher-web.png diff --git a/client/Piztor/proguard-project.txt b/client/Piztor/proguard-project.txt new file mode 100644 index 0000000..f2fe155 --- /dev/null +++ b/client/Piztor/proguard-project.txt @@ -0,0 +1,20 @@ +# To enable ProGuard in your project, edit project.properties +# to define the proguard.config property as described in that file. +# +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in ${sdk.dir}/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the ProGuard +# include property in project.properties. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/client/Piztor/project.properties b/client/Piztor/project.properties new file mode 100644 index 0000000..ce39f2d --- /dev/null +++ b/client/Piztor/project.properties @@ -0,0 +1,14 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system edit +# "ant.properties", and override values to adapt the script to your +# project structure. +# +# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): +#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt + +# Project target. +target=android-18 diff --git a/client/Piztor/res/drawable-hdpi/ic_launcher.png b/client/Piztor/res/drawable-hdpi/ic_launcher.png Binary files differnew file mode 100644 index 0000000..ddc6c13 --- /dev/null +++ b/client/Piztor/res/drawable-hdpi/ic_launcher.png diff --git a/client/Piztor/res/drawable-mdpi/ic_launcher.png b/client/Piztor/res/drawable-mdpi/ic_launcher.png Binary files differnew file mode 100644 index 0000000..7b6698a --- /dev/null +++ b/client/Piztor/res/drawable-mdpi/ic_launcher.png diff --git a/client/Piztor/res/drawable-xhdpi/ic_launcher.png b/client/Piztor/res/drawable-xhdpi/ic_launcher.png Binary files differnew file mode 100644 index 0000000..20ea43a --- /dev/null +++ b/client/Piztor/res/drawable-xhdpi/ic_launcher.png diff --git a/client/Piztor/res/drawable-xxhdpi/ic_launcher.png b/client/Piztor/res/drawable-xxhdpi/ic_launcher.png Binary files differnew file mode 100644 index 0000000..e1ca5c2 --- /dev/null +++ b/client/Piztor/res/drawable-xxhdpi/ic_launcher.png diff --git a/client/Piztor/res/drawable/bottom_img.png b/client/Piztor/res/drawable/bottom_img.png Binary files differnew file mode 100644 index 0000000..2725ea8 --- /dev/null +++ b/client/Piztor/res/drawable/bottom_img.png diff --git a/client/Piztor/res/drawable/footbar_background.png b/client/Piztor/res/drawable/footbar_background.png Binary files differnew file mode 100644 index 0000000..488e8f2 --- /dev/null +++ b/client/Piztor/res/drawable/footbar_background.png diff --git a/client/Piztor/res/drawable/footbar_btn_checkin_style.xml b/client/Piztor/res/drawable/footbar_btn_checkin_style.xml new file mode 100644 index 0000000..6dbeb21 --- /dev/null +++ b/client/Piztor/res/drawable/footbar_btn_checkin_style.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android" > + + <item android:state_pressed="true" android:drawable="@drawable/footbar_checkin_1"></item> + <item android:state_pressed="false" android:drawable="@drawable/footbar_checkin"></item> + +</selector> diff --git a/client/Piztor/res/drawable/footbar_btn_fetch_style.xml b/client/Piztor/res/drawable/footbar_btn_fetch_style.xml new file mode 100644 index 0000000..379d526 --- /dev/null +++ b/client/Piztor/res/drawable/footbar_btn_fetch_style.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android" > + + <item android:state_pressed="true" android:drawable="@drawable/footbar_fetch_1"></item> + <item android:state_pressed="false" android:drawable="@drawable/footbar_fetch"></item> +</selector> diff --git a/client/Piztor/res/drawable/footbar_btn_focus_style.xml b/client/Piztor/res/drawable/footbar_btn_focus_style.xml new file mode 100644 index 0000000..5932f2f --- /dev/null +++ b/client/Piztor/res/drawable/footbar_btn_focus_style.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android" > + + <item android:state_pressed="true" android:drawable="@drawable/footbar_marker_1"></item> + <item android:state_pressed="false" android:drawable="@drawable/footbar_marker"></item> +</selector> diff --git a/client/Piztor/res/drawable/footbar_btn_search_style.xml b/client/Piztor/res/drawable/footbar_btn_search_style.xml new file mode 100644 index 0000000..ac786ef --- /dev/null +++ b/client/Piztor/res/drawable/footbar_btn_search_style.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android" > + + <item android:state_pressed="true" android:drawable="@drawable/footbar_search_1"></item> + <item android:state_pressed="false" android:drawable="@drawable/footbar_search"></item> +</selector> diff --git a/client/Piztor/res/drawable/footbar_btn_settings_style.xml b/client/Piztor/res/drawable/footbar_btn_settings_style.xml new file mode 100644 index 0000000..fca6230 --- /dev/null +++ b/client/Piztor/res/drawable/footbar_btn_settings_style.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android" > + + <item android:state_pressed="true" android:drawable="@drawable/footbar_settings_1"></item> + <item android:state_pressed="false" android:drawable="@drawable/footbar_settings"></item> +</selector> diff --git a/client/Piztor/res/drawable/footbar_checkin.png b/client/Piztor/res/drawable/footbar_checkin.png Binary files differnew file mode 100644 index 0000000..90afba7 --- /dev/null +++ b/client/Piztor/res/drawable/footbar_checkin.png diff --git a/client/Piztor/res/drawable/footbar_checkin_1.png b/client/Piztor/res/drawable/footbar_checkin_1.png Binary files differnew file mode 100644 index 0000000..a478d36 --- /dev/null +++ b/client/Piztor/res/drawable/footbar_checkin_1.png diff --git a/client/Piztor/res/drawable/footbar_fetch.png b/client/Piztor/res/drawable/footbar_fetch.png Binary files differnew file mode 100644 index 0000000..32d24d2 --- /dev/null +++ b/client/Piztor/res/drawable/footbar_fetch.png diff --git a/client/Piztor/res/drawable/footbar_fetch_1.png b/client/Piztor/res/drawable/footbar_fetch_1.png Binary files differnew file mode 100644 index 0000000..208094f --- /dev/null +++ b/client/Piztor/res/drawable/footbar_fetch_1.png diff --git a/client/Piztor/res/drawable/footbar_marker.png b/client/Piztor/res/drawable/footbar_marker.png Binary files differnew file mode 100644 index 0000000..3de909f --- /dev/null +++ b/client/Piztor/res/drawable/footbar_marker.png diff --git a/client/Piztor/res/drawable/footbar_marker_1.png b/client/Piztor/res/drawable/footbar_marker_1.png Binary files differnew file mode 100644 index 0000000..08c8715 --- /dev/null +++ b/client/Piztor/res/drawable/footbar_marker_1.png diff --git a/client/Piztor/res/drawable/footbar_search.png b/client/Piztor/res/drawable/footbar_search.png Binary files differnew file mode 100644 index 0000000..3549f84 --- /dev/null +++ b/client/Piztor/res/drawable/footbar_search.png diff --git a/client/Piztor/res/drawable/footbar_search_1.png b/client/Piztor/res/drawable/footbar_search_1.png Binary files differnew file mode 100644 index 0000000..1e6ac28 --- /dev/null +++ b/client/Piztor/res/drawable/footbar_search_1.png diff --git a/client/Piztor/res/drawable/footbar_select_bg.png b/client/Piztor/res/drawable/footbar_select_bg.png Binary files differnew file mode 100644 index 0000000..9d7e5af --- /dev/null +++ b/client/Piztor/res/drawable/footbar_select_bg.png diff --git a/client/Piztor/res/drawable/footbar_settings.png b/client/Piztor/res/drawable/footbar_settings.png Binary files differnew file mode 100644 index 0000000..455bd0b --- /dev/null +++ b/client/Piztor/res/drawable/footbar_settings.png diff --git a/client/Piztor/res/drawable/footbar_settings_1.png b/client/Piztor/res/drawable/footbar_settings_1.png Binary files differnew file mode 100644 index 0000000..6b0a2ab --- /dev/null +++ b/client/Piztor/res/drawable/footbar_settings_1.png diff --git a/client/Piztor/res/drawable/footbar_unselect_bg.png b/client/Piztor/res/drawable/footbar_unselect_bg.png Binary files differnew file mode 100644 index 0000000..3e1e65e --- /dev/null +++ b/client/Piztor/res/drawable/footbar_unselect_bg.png diff --git a/client/Piztor/res/drawable/horizontal_line.png b/client/Piztor/res/drawable/horizontal_line.png Binary files differnew file mode 100644 index 0000000..ccd6aa2 --- /dev/null +++ b/client/Piztor/res/drawable/horizontal_line.png diff --git a/client/Piztor/res/drawable/navigation_back.png b/client/Piztor/res/drawable/navigation_back.png Binary files differnew file mode 100644 index 0000000..3bdda98 --- /dev/null +++ b/client/Piztor/res/drawable/navigation_back.png diff --git a/client/Piztor/res/drawable/navigation_back_1.png b/client/Piztor/res/drawable/navigation_back_1.png Binary files differnew file mode 100644 index 0000000..a20b4ef --- /dev/null +++ b/client/Piztor/res/drawable/navigation_back_1.png diff --git a/client/Piztor/res/drawable/title_logo.png b/client/Piztor/res/drawable/title_logo.png Binary files differnew file mode 100644 index 0000000..224040c --- /dev/null +++ b/client/Piztor/res/drawable/title_logo.png diff --git a/client/Piztor/res/drawable/topbar_background.png b/client/Piztor/res/drawable/topbar_background.png Binary files differnew file mode 100644 index 0000000..9f0291e --- /dev/null +++ b/client/Piztor/res/drawable/topbar_background.png diff --git a/client/Piztor/res/layout/activity_gather.xml b/client/Piztor/res/layout/activity_gather.xml new file mode 100644 index 0000000..f887cf0 --- /dev/null +++ b/client/Piztor/res/layout/activity_gather.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@android:color/white" + android:orientation="vertical"> + <RelativeLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentTop="true" + android:id="@+id/gather_timer_layout" + > + <include layout="@layout/gather_timer"/> + </RelativeLayout> + <LinearLayout + android:id="@+id/gather_footbar_layout" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentBottom="true" + > + <include layout="@layout/gather_footbar"></include> + </LinearLayout> +</RelativeLayout> diff --git a/client/Piztor/res/layout/activity_init.xml b/client/Piztor/res/layout/activity_init.xml new file mode 100644 index 0000000..43e6253 --- /dev/null +++ b/client/Piztor/res/layout/activity_init.xml @@ -0,0 +1,16 @@ +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:paddingBottom="@dimen/activity_vertical_margin" + android:paddingLeft="@dimen/activity_horizontal_margin" + android:paddingRight="@dimen/activity_horizontal_margin" + android:paddingTop="@dimen/activity_vertical_margin" + tools:context=".InitAct" > + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/hello_world" /> + +</RelativeLayout> diff --git a/client/Piztor/res/layout/activity_login.xml b/client/Piztor/res/layout/activity_login.xml new file mode 100644 index 0000000..cd2d34c --- /dev/null +++ b/client/Piztor/res/layout/activity_login.xml @@ -0,0 +1,92 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="fill_parent" + android:background="@android:color/black" + android:orientation="vertical"> + +<LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@android:color/black" + android:gravity="center_horizontal" + android:orientation="vertical" > + + <ImageView + android:id="@+id/main_headbar_img" + android:layout_width="180dp" + android:layout_height="240dp" + android:layout_gravity="center_horizontal" + android:src="@drawable/title_logo" /> + + <LinearLayout + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:layout_gravity="center"> + + <TableLayout + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <TableRow + android:layout_marginBottom="15dp" + android:layout_marginTop="15dp"> + <TextView + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="0.25" + android:gravity="right" + android:id="@+id/user_id_text" + android:text="User ID" + android:textColor="@android:color/white" + /> + + <EditText + android:layout_width="0dp" + android:layout_weight="0.75" + android:id="@+id/user_id" + android:textColor="@android:color/black" + android:singleLine="true"/> + <requestFocus/> + </TableRow> + + <TableRow> + <TextView + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="0.25" + android:gravity="right" + android:id="@+id/user_pass_text" + android:text="Password" + android:textColor="@android:color/black" + /> + + <EditText + android:layout_width="0dp" + android:layout_weight="0.75" + android:id="@+id/user_pass" + android:password="true" + android:textColor="@android:color/black" + android:singleLine="true"/> + </TableRow> + </TableLayout> + </LinearLayout> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:orientation="vertical" + > + <Button + android:id="@+id/login_btn_login" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center" + android:text="Login" + android:textColor="@android:color/white" /> + </LinearLayout> + +</LinearLayout> +</RelativeLayout> diff --git a/client/Piztor/res/layout/activity_main.xml b/client/Piztor/res/layout/activity_main.xml new file mode 100644 index 0000000..b2b61ac --- /dev/null +++ b/client/Piztor/res/layout/activity_main.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@android:color/white" + android:orientation="vertical"> + <RelativeLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentTop="true" + android:id="@+id/main_headbar_layout" + > + <include layout="@layout/main_headbar"/> + </RelativeLayout> + <LinearLayout + android:id="@+id/main_footbar_layout" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentBottom="true" + > + <include layout="@layout/main_footbar"/> + </LinearLayout> +</RelativeLayout> diff --git a/client/Piztor/res/layout/activity_settings.xml b/client/Piztor/res/layout/activity_settings.xml new file mode 100644 index 0000000..8ce051f --- /dev/null +++ b/client/Piztor/res/layout/activity_settings.xml @@ -0,0 +1,149 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:background="@drawable/topbar_background" + android:orientation="horizontal" > + + <RelativeLayout + android:id="@+id/settings_headbar_layout" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentTop="true" > + + <include layout="@layout/settings_headbar" /> + </RelativeLayout> + + <LinearLayout + android:layout_width="fill_parent" + android:layout_height="match_parent" + android:layout_marginTop="48dip" + android:orientation="vertical" > + + <TextView + android:id="@+id/settings_GPSrefreshrate_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="GPS refresh rate" + android:layout_gravity="center" + android:layout_marginTop="10dip" + android:textSize="20dip" + android:textColor="@android:color/white" /> + + <SeekBar + android:id="@+id/settings_GPSrefreshrate" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> + + + <!-- LinearLayout + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + --> + <!-- TextView + android:id="@+id/GPS_min_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentLeft="true" + android:layout_marginLeft="10dip" + android:text="1s" + android:textSize="10dip" + android:textColor="@android:color/white"/--> + + <!--TextView + android:id="@+id/GPS_max_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentRight="true" + android:text="30s" + android:textColor="@android:color/white" + android:textSize="10dip" /--> + + <!-- /LinearLayout --> <!-- end of gps text --> + + <ImageView + android:id="@+id/settings_seperator1" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/horizontal_line" /> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:id="@+id/settings_sex_layout" + android:layout_marginTop="10dip"> + + <TextView + android:id="@+id/settings_sex_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginLeft="10dip" + android:textSize="20dip" + android:textColor="@android:color/white" + android:text="@string/show_sex" /> + + <CheckBox + android:id="@+id/settings_show_male" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/male" + android:textColor="@android:color/white"/> + + + <CheckBox + android:id="@+id/settings_show_female" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/female" + android:textColor="@android:color/white"/> + + </LinearLayout> + + <ImageView + android:id="@+id/settings_seperator2" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/horizontal_line" /> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:id="@+id/settings_team_layout" + android:layout_marginTop="10dip"> + + <TextView + android:id="@+id/settings_team_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginLeft="10dip" + android:textSize="20dip" + android:textColor="@android:color/white" + android:text="@string/show_team" /> + + <RadioButton + android:id="@+id/settings_team_mine" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/mine" + android:textSize="20dip" + android:textColor="@android:color/white"/> + + <RadioButton + android:id="@+id/settings_team_all" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/all" + android:textSize="20dip" + android:textColor="@android:color/white"/> + + </LinearLayout> + + <ImageView + android:id="@+id/settings_seperator3" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/horizontal_line" /> + + </LinearLayout> + </RelativeLayout> diff --git a/client/Piztor/res/layout/gather_footbar.xml b/client/Piztor/res/layout/gather_footbar.xml new file mode 100644 index 0000000..e573032 --- /dev/null +++ b/client/Piztor/res/layout/gather_footbar.xml @@ -0,0 +1,133 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="fill_parent" + android:layout_height="48dip" + android:orientation="horizontal" + android:background="@drawable/footbar_background" > + + <LinearLayout + android:id="@+id/footbar_btn_search_layout" + android:layout_width="64dip" + android:layout_height="match_parent" + android:orientation="vertical" + android:layout_marginTop="3dip" + android:layout_gravity="center_vertical" + android:layout_weight="1"> + <ImageButton + android:id="@+id/footbar_btn_search" + android:layout_width="30dip" + android:layout_height="30dip" + android:layout_gravity="center" + android:background="@drawable/footbar_btn_search_style"/> + <TextView + android:id="@+id/footbar_btn_search_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal" + android:textSize="10dip" + android:textColor="@android:color/white" + android:layout_gravity="center" + android:text="@string/search"/> + </LinearLayout> + + <LinearLayout + android:id="@+id/footbar_btn_fetch_layout" + android:layout_width="64dip" + android:layout_height="match_parent" + android:orientation="vertical" + android:layout_marginTop="3dip" + android:layout_gravity="center_vertical" + android:layout_weight="1"> + <ImageButton + android:id="@+id/footbar_btn_fetch" + android:layout_width="30dip" + android:layout_height="30dip" + android:layout_gravity="center" + android:background="@drawable/footbar_btn_fetch_style"/> + <TextView + android:id="@+id/footbar_btn_fetch_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal" + android:textSize="10dip" + android:textColor="@android:color/white" + android:layout_gravity="center" + android:text="@string/fetch"/> + </LinearLayout> + + <LinearLayout + android:id="@+id/footbar_btn_checkin_layout" + android:layout_width="64dip" + android:layout_height="match_parent" + android:layout_weight="1" + android:layout_marginTop="3dip" + android:layout_gravity="center_vertical" + android:orientation="vertical"> + <ImageButton + android:id="@+id/footbar_btn_checkin" + android:layout_width="30dip" + android:layout_height="30dip" + android:layout_gravity="center" + android:background="@drawable/footbar_btn_checkin_style" + /> + <TextView + android:id="@+id/footbar_btn_checkin_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal" + android:textSize="10dip" + android:textColor="@android:color/white" + android:layout_gravity="center" + android:text="@string/checkin"/> + </LinearLayout> + + <LinearLayout + android:id="@+id/footbar_btn_focus_layout" + android:layout_width="64dip" + android:layout_height="match_parent" + android:orientation="vertical" + android:layout_marginTop="3dip" + android:layout_gravity="center_vertical" + android:layout_weight="1"> + <ImageButton + android:id="@+id/footbar_btn_focus" + android:layout_width="30dip" + android:layout_height="30dip" + android:layout_gravity="center" + android:background="@drawable/footbar_btn_focus_style"/> + <TextView + android:id="@+id/footbar_btn_focus_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal" + android:textSize="10dip" + android:textColor="@android:color/white" + android:layout_gravity="center" + android:text="@string/focus"/> + </LinearLayout> + + <LinearLayout + android:id="@+id/footbar_btn_settings_layout" + android:layout_width="64dip" + android:layout_height="match_parent" + android:orientation="vertical" + android:layout_marginTop="3dip" + android:layout_gravity="center_vertical" + android:layout_weight="1"> + <ImageButton + android:id="@+id/footbar_btn_settings" + android:layout_width="30dip" + android:layout_height="30dip" + android:layout_gravity="center" + android:background="@drawable/footbar_btn_settings_style"/> + <TextView + android:id="@+id/footbar_btn_settings" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:textSize="10dip" + android:textColor="@android:color/white" + android:text="@string/settings"/> + </LinearLayout> + +</LinearLayout> diff --git a/client/Piztor/res/layout/gather_timer.xml b/client/Piztor/res/layout/gather_timer.xml new file mode 100644 index 0000000..3849f6b --- /dev/null +++ b/client/Piztor/res/layout/gather_timer.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="fill_parent" + android:layout_height="48dip" + android:background="@android:color/black" + android:id="@+id/gather_timer_layout" > + + <TextView + android:id="@+id/gather_timer" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerHorizontal="true" + android:textSize="40dip" + android:textColor="@android:color/white"> + </TextView> +</RelativeLayout> diff --git a/client/Piztor/res/layout/login_bottom.xml b/client/Piztor/res/layout/login_bottom.xml new file mode 100644 index 0000000..e268c39 --- /dev/null +++ b/client/Piztor/res/layout/login_bottom.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="fill_parent" + android:layout_height="200dip" + android:orientation="horizontal" + android:background="@drawable/footbar_background" > + + <ImageView + android:layout_width="fill_parent" + android:layout_height="120dip" + android:src="@drawable/bottom_img"/> + +</LinearLayout> diff --git a/client/Piztor/res/layout/main_footbar.xml b/client/Piztor/res/layout/main_footbar.xml new file mode 100644 index 0000000..69760c0 --- /dev/null +++ b/client/Piztor/res/layout/main_footbar.xml @@ -0,0 +1,107 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="fill_parent" + android:layout_height="48dip" + android:orientation="horizontal" + android:background="@drawable/footbar_background" > + + <LinearLayout + android:id="@+id/footbar_btn_search_layout" + android:layout_width="64dip" + android:layout_height="match_parent" + android:orientation="vertical" + android:layout_marginTop="3dip" + android:layout_gravity="center_vertical" + android:layout_weight="1"> + <ImageButton + android:id="@+id/footbar_btn_search" + android:layout_width="30dip" + android:layout_height="30dip" + android:layout_gravity="center" + android:background="@drawable/footbar_btn_search_style"/> + <TextView + android:id="@+id/footbar_btn_search" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal" + android:textSize="10dip" + android:textColor="@android:color/white" + android:layout_gravity="center" + android:text="@string/search"/> + </LinearLayout> + + <LinearLayout + android:id="@+id/footbar_btn_fetch_layout" + android:layout_width="64dip" + android:layout_height="match_parent" + android:orientation="vertical" + android:layout_marginTop="3dip" + android:layout_gravity="center_vertical" + android:layout_weight="1"> + <ImageButton + android:id="@+id/footbar_btn_fetch" + android:layout_width="30dip" + android:layout_height="30dip" + android:layout_gravity="center" + android:background="@drawable/footbar_btn_fetch_style"/> + <TextView + android:id="@+id/footbar_btn_fetch_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal" + android:textSize="10dip" + android:textColor="@android:color/white" + android:layout_gravity="center" + android:text="@string/fetch"/> + </LinearLayout> + + <LinearLayout + android:id="@+id/footbar_btn_focus_layout" + android:layout_width="64dip" + android:layout_height="match_parent" + android:orientation="vertical" + android:layout_marginTop="3dip" + android:layout_gravity="center_vertical" + android:layout_weight="1"> + <ImageButton + android:id="@+id/footbar_btn_focus" + android:layout_width="30dip" + android:layout_height="30dip" + android:layout_gravity="center" + android:background="@drawable/footbar_btn_focus_style"/> + <TextView + android:id="@+id/footbar_btn_focus_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal" + android:textSize="10dip" + android:textColor="@android:color/white" + android:layout_gravity="center" + android:text="@string/focus"/> + </LinearLayout> + + <LinearLayout + android:id="@+id/footbar_btn_settings_layout" + android:layout_width="64dip" + android:layout_height="match_parent" + android:orientation="vertical" + android:layout_marginTop="3dip" + android:layout_gravity="center_vertical" + android:layout_weight="1"> + <ImageButton + android:id="@+id/footbar_btn_settings" + android:layout_width="30dip" + android:layout_height="30dip" + android:layout_gravity="center" + android:background="@drawable/footbar_btn_settings_style"/> + <TextView + android:id="@+id/footbar_btn_settings_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:textSize="10dip" + android:textColor="@android:color/white" + android:text="@string/settings"/> + </LinearLayout> + +</LinearLayout> diff --git a/client/Piztor/res/layout/main_headbar.xml b/client/Piztor/res/layout/main_headbar.xml new file mode 100644 index 0000000..137e3a1 --- /dev/null +++ b/client/Piztor/res/layout/main_headbar.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="fill_parent" + android:layout_height="40dip" + android:background="@drawable/topbar_background" + android:id="@+id/main_headbar_layout" > + + <ImageView + android:id="@+id/headbar_logo" + android:layout_width="34dip" + android:layout_height="34dip" + android:layout_alignParentLeft="true" + android:layout_centerVertical="true" + android:layout_marginLeft="5dip" + android:layout_alignParentTop="true" + android:background="@drawable/title_logo"/> + + <TextView + android:id="@+id/headbar_appname" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerVertical="true" + android:layout_marginLeft="8dip" + android:textSize="26dip" + android:textColor="@android:color/white" + android:layout_toRightOf="@+id/headbar_logo" + android:text="@string/app_name" /> + +</RelativeLayout> diff --git a/client/Piztor/res/layout/settings_headbar.xml b/client/Piztor/res/layout/settings_headbar.xml new file mode 100644 index 0000000..9065bdb --- /dev/null +++ b/client/Piztor/res/layout/settings_headbar.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="fill_parent" + android:layout_height="48dip" + android:background="@drawable/topbar_background" + android:id="@+id/settings_headbar_layout" > + + <ImageButton + android:id="@+id/settings_btn_back" + android:layout_width="40dip" + android:layout_height="40dip" + android:layout_marginLeft="5dip" + android:layout_alignParentLeft="true" + android:layout_centerVertical="true" + android:background="@drawable/navigation_back"/> + + <TextView + android:id="@+id/settings_headbar_text" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textSize="30dip" + android:textColor="@android:color/white" + android:layout_alignParentRight="true" + android:layout_centerVertical="true" + android:layout_marginRight="40dip" + android:text="@string/settings"/> + + +</RelativeLayout> diff --git a/client/Piztor/res/menu/init.xml b/client/Piztor/res/menu/init.xml new file mode 100644 index 0000000..c002028 --- /dev/null +++ b/client/Piztor/res/menu/init.xml @@ -0,0 +1,9 @@ +<menu xmlns:android="http://schemas.android.com/apk/res/android" > + + <item + android:id="@+id/action_settings" + android:orderInCategory="100" + android:showAsAction="never" + android:title="@string/action_settings"/> + +</menu> diff --git a/client/Piztor/res/menu/login.xml b/client/Piztor/res/menu/login.xml new file mode 100644 index 0000000..c002028 --- /dev/null +++ b/client/Piztor/res/menu/login.xml @@ -0,0 +1,9 @@ +<menu xmlns:android="http://schemas.android.com/apk/res/android" > + + <item + android:id="@+id/action_settings" + android:orderInCategory="100" + android:showAsAction="never" + android:title="@string/action_settings"/> + +</menu> diff --git a/client/Piztor/res/menu/main.xml b/client/Piztor/res/menu/main.xml new file mode 100644 index 0000000..c002028 --- /dev/null +++ b/client/Piztor/res/menu/main.xml @@ -0,0 +1,9 @@ +<menu xmlns:android="http://schemas.android.com/apk/res/android" > + + <item + android:id="@+id/action_settings" + android:orderInCategory="100" + android:showAsAction="never" + android:title="@string/action_settings"/> + +</menu> diff --git a/client/Piztor/res/menu/setting.xml b/client/Piztor/res/menu/setting.xml new file mode 100644 index 0000000..c002028 --- /dev/null +++ b/client/Piztor/res/menu/setting.xml @@ -0,0 +1,9 @@ +<menu xmlns:android="http://schemas.android.com/apk/res/android" > + + <item + android:id="@+id/action_settings" + android:orderInCategory="100" + android:showAsAction="never" + android:title="@string/action_settings"/> + +</menu> diff --git a/client/Piztor/res/values-sw600dp/dimens.xml b/client/Piztor/res/values-sw600dp/dimens.xml new file mode 100644 index 0000000..44f01db --- /dev/null +++ b/client/Piztor/res/values-sw600dp/dimens.xml @@ -0,0 +1,8 @@ +<resources> + + <!-- + Customize dimensions originally defined in res/values/dimens.xml (such as + screen margins) for sw600dp devices (e.g. 7" tablets) here. + --> + +</resources> diff --git a/client/Piztor/res/values-sw720dp-land/dimens.xml b/client/Piztor/res/values-sw720dp-land/dimens.xml new file mode 100644 index 0000000..61e3fa8 --- /dev/null +++ b/client/Piztor/res/values-sw720dp-land/dimens.xml @@ -0,0 +1,9 @@ +<resources> + + <!-- + Customize dimensions originally defined in res/values/dimens.xml (such as + screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here. + --> + <dimen name="activity_horizontal_margin">128dp</dimen> + +</resources> diff --git a/client/Piztor/res/values-v11/styles.xml b/client/Piztor/res/values-v11/styles.xml new file mode 100644 index 0000000..3c02242 --- /dev/null +++ b/client/Piztor/res/values-v11/styles.xml @@ -0,0 +1,11 @@ +<resources> + + <!-- + Base application theme for API 11+. This theme completely replaces + AppBaseTheme from res/values/styles.xml on API 11+ devices. + --> + <style name="AppBaseTheme" parent="android:Theme.Holo.Light"> + <!-- API 11 theme customizations can go here. --> + </style> + +</resources> diff --git a/client/Piztor/res/values-v14/styles.xml b/client/Piztor/res/values-v14/styles.xml new file mode 100644 index 0000000..a91fd03 --- /dev/null +++ b/client/Piztor/res/values-v14/styles.xml @@ -0,0 +1,12 @@ +<resources> + + <!-- + Base application theme for API 14+. This theme completely replaces + AppBaseTheme from BOTH res/values/styles.xml and + res/values-v11/styles.xml on API 14+ devices. + --> + <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"> + <!-- API 14 theme customizations can go here. --> + </style> + +</resources> diff --git a/client/Piztor/res/values/dimens.xml b/client/Piztor/res/values/dimens.xml new file mode 100644 index 0000000..55c1e59 --- /dev/null +++ b/client/Piztor/res/values/dimens.xml @@ -0,0 +1,7 @@ +<resources> + + <!-- Default screen margins, per the Android Design guidelines. --> + <dimen name="activity_horizontal_margin">16dp</dimen> + <dimen name="activity_vertical_margin">16dp</dimen> + +</resources> diff --git a/client/Piztor/res/values/strings.xml b/client/Piztor/res/values/strings.xml new file mode 100644 index 0000000..5a5ccc4 --- /dev/null +++ b/client/Piztor/res/values/strings.xml @@ -0,0 +1,21 @@ +<resources> + + <string name="app_name">piztor</string> + <string name="action_settings">Settings</string> + <string name="hello_world">Hello world!</string> + <string name="settings">Settings</string> + <string name="search">Search</string> + <string name="fetch">Fetch</string> + <string name="checkin">Checkin</string> + <string name="focus">Focus</string> + <string name="show_sex">Show sex: </string> + <string name="male">Male</string> + <string name="female">Female</string> + <string name="show_team">Show team: </string> + <string name="all">All</string> + <string name="mine">Mine</string> + <string name="title_activity_login">Login</string> + <string name="title_activity_main">Main</string> + <string name="title_activity_setting">Setting</string> + +</resources> diff --git a/client/Piztor/res/values/styles.xml b/client/Piztor/res/values/styles.xml new file mode 100644 index 0000000..6ce89c7 --- /dev/null +++ b/client/Piztor/res/values/styles.xml @@ -0,0 +1,20 @@ +<resources> + + <!-- + Base application theme, dependent on API level. This theme is replaced + by AppBaseTheme from res/values-vXX/styles.xml on newer devices. + --> + <style name="AppBaseTheme" parent="android:Theme.Light"> + <!-- + Theme customizations available in newer API levels can go in + res/values-vXX/styles.xml, while customizations related to + backward-compatibility can go here. + --> + </style> + + <!-- Application theme. --> + <style name="AppTheme" parent="AppBaseTheme"> + <!-- All customizations that are NOT specific to a particular API-level can go here. --> + </style> + +</resources> diff --git a/client/Piztor/src/com/macaroon/piztor/ActMgr.java b/client/Piztor/src/com/macaroon/piztor/ActMgr.java new file mode 100644 index 0000000..f5ff994 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/ActMgr.java @@ -0,0 +1,67 @@ +package com.macaroon.piztor; + +import java.util.*; + +import android.annotation.SuppressLint; + +@SuppressLint("UseSparseArrays") +public class ActMgr { + final static int Create = -1; + // event + PiztorAct act; + ActStatus nowStatus; + HashMap<ActStatus, HashMap<Integer, ActStatus>> mp; + + ActMgr(PiztorAct act, ActStatus nowStatus, ActStatus[] r) { + this.act = act; + this.nowStatus = nowStatus; + nowStatus.enter(Create); + mp = new HashMap<ActStatus, HashMap<Integer, ActStatus>>(); + for (int i = 0; i < r.length; i++) { + mp.put(r[i], new HashMap<Integer, ActStatus>()); + } + } + + void trigger(int event) { + System.out.println(act.id + " : " + event); + if (mp.get(nowStatus).containsKey(event)) { + nowStatus.leave(event); + nowStatus = mp.get(nowStatus).get(event); + nowStatus.enter(event); + } else if (AppMgr.mp.get(act.getClass()).containsKey(event)) { + AppMgr.trigger(event); + } else { + System.out.println("can not trigger the event at " + act.id + " : " + + event); + } + } + + void add(ActStatus a, int event, ActStatus b) { + if (mp.containsKey(a)) { + HashMap<Integer, ActStatus> h = mp.get(a); + h.put(event, b); + mp.put(a, h); + } else { + HashMap<Integer, ActStatus> h = new HashMap<Integer, ActStatus>(); + h.put(event, b); + mp.put(a, h); + } + } +} + +abstract class ActStatus { + abstract void enter(int e); + + abstract void leave(int e); +} + +class EmptyStatus extends ActStatus { + @Override + void enter(int e) { + } + + @Override + void leave(int e) { + } + +} diff --git a/client/Piztor/src/com/macaroon/piztor/AppMgr.java b/client/Piztor/src/com/macaroon/piztor/AppMgr.java new file mode 100644 index 0000000..2e5e2b3 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/AppMgr.java @@ -0,0 +1,89 @@ +package com.macaroon.piztor; + +import java.util.HashMap; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.os.Handler; + +@SuppressLint("UseSparseArrays") +public class AppMgr { + // Status + public enum ActivityStatus{ + create, start, resume, restart, stop, pause, destroy + } + static ActivityStatus status; + static PiztorAct nowAct; + //TODO fix + static Handler fromTransam, fromGPS; + static Transam transam = null; + static Tracker tracker = null; + static Thread tTransam, tGPS; + //Event + + final static int noToken = 101; + final static int loginSuccess = 102; + + + static HashMap<Class<?>, HashMap<Integer, Class<?>>> mp; + + static void setStatus(ActivityStatus st) { + status = st; + } + + static void trigger(int event) { + Intent i = new Intent(); + System.out.println(nowAct.id + " : " + event); + if (mp.get(nowAct.getClass()) == null) + System.out.println("first"); + else if (mp.get(nowAct.getClass()) == null) + System.out.println("second"); + i.setClass(nowAct, mp.get(nowAct.getClass()).get(event)); + nowAct.startActivity(i); + } + + static void add(Class<?> a, Integer event, Class<?> b) { + if (mp.containsKey(a)) + mp.get(a).put(event, b); + else { + HashMap<Integer, Class<?>> h = new HashMap<Integer, Class<?>>(); + h.put(event, b); + mp.put(a, h); + } + } + + static void addTransition(Class<?> a, int i, Class<?> b) { + if (mp.containsKey(a)) { + HashMap<Integer, Class<?>> h = mp.get(a); + h.put(i, b); + mp.put(a, h); + } else { + HashMap<Integer, Class<?>> h = new HashMap<Integer, Class<?>>(); + h.put(i, b); + mp.put(a, h); + } + } + + static void addStatus(Class<?> a) { + mp.put(a, new HashMap<Integer, Class<?>>()); + } + + static void init() { + mp = new HashMap<Class<?>, HashMap<Integer, Class<?>>>(); + fromTransam = new Handler(); + transam = new Transam(UserInfo.ip, UserInfo.port, fromTransam); + fromGPS = new Handler(); + tracker = new Tracker(nowAct.getApplicationContext(), fromGPS); + tTransam = new Thread(transam); + tTransam.start(); + tGPS = new Thread(tracker); + tGPS.start(); + System.out.println("!!!!!!"); + addStatus(InitAct.class); + addStatus(Login.class); + addStatus(Main.class); + addTransition(InitAct.class, noToken, Login.class); + addTransition(Login.class, loginSuccess, Main.class); + } + +} diff --git a/client/Piztor/src/com/macaroon/piztor/GPSTracker.java b/client/Piztor/src/com/macaroon/piztor/GPSTracker.java new file mode 100644 index 0000000..7e89d21 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/GPSTracker.java @@ -0,0 +1,241 @@ +package com.macaroon.piztor;
+
+import android.app.AlertDialog;
+import android.app.Service;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.location.Location;
+import android.location.LocationListener;
+import android.location.LocationManager;
+import android.location.GpsStatus;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.SystemClock;
+import android.provider.Settings;
+import android.util.Log;
+
+public class GPSTracker extends Service implements LocationListener, GpsStatus.Listener {
+
+ private final Context mContext;
+
+ // flag for GPS status
+ boolean isGPSEnabled = false;
+
+ // flag for network status
+ boolean isNetworkEnabled = false;
+
+ // flag for GPS status
+ boolean canGetLocation = false;
+
+ Location location; // location
+ double latitude; // latitude
+ double longitude; // longitude
+
+ // The minimum distance to change Updates in meters
+ private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters
+
+ // The minimum time between updates in milliseconds
+ private static final long MIN_TIME_BW_UPDATES = 1000 * 3; // 10 seconds
+
+ // Declaring a Location Manager
+ protected LocationManager locationManager;
+
+ // for GPS satellite status listener
+ Location mLastLocation;
+ long mLastLocationMillis;
+ boolean isGPSFix;
+
+
+ public GPSTracker(Context context) {
+ this.mContext = context;
+ isGPSFix = false;
+ getLocation();
+ }
+
+ public Location getLocation() {
+ try {
+ Log.d("getLocation", "Start getting location......");
+
+ locationManager = (LocationManager) mContext
+ .getSystemService(LOCATION_SERVICE);
+
+ // getting GPS status
+ isGPSEnabled = locationManager
+ .isProviderEnabled(LocationManager.GPS_PROVIDER);
+
+ // getting network status
+ isNetworkEnabled = locationManager
+ .isProviderEnabled(LocationManager.NETWORK_PROVIDER);
+
+ if (!isGPSEnabled) {
+ // no network provider is enabled
+ } else {
+ this.canGetLocation = true;
+ if (isNetworkEnabled) {
+ locationManager.requestLocationUpdates(
+ LocationManager.NETWORK_PROVIDER,
+ MIN_TIME_BW_UPDATES,
+ MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
+
+ Log.d("Network", "Network Updated");
+
+ if (locationManager != null) {
+ location = locationManager
+ .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
+ if (location != null) {
+ latitude = location.getLatitude();
+ longitude = location.getLongitude();
+
+ Log.d("Network", "Received Network Data");
+ System.out.println("***From Network: "+latitude + " " + longitude);
+ }
+ }
+ }// end of network section
+ // if GPS Enabled get lat/long using GPS Services
+ if (isGPSEnabled) {
+ if (true) {
+ locationManager.requestLocationUpdates(
+ LocationManager.GPS_PROVIDER,
+ MIN_TIME_BW_UPDATES,
+ MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
+ Log.d("GPS", "GPS Updated");
+ if (locationManager != null) {
+ location = locationManager
+ .getLastKnownLocation(LocationManager.GPS_PROVIDER);
+ if (location != null) {
+ latitude = location.getLatitude();
+ longitude = location.getLongitude();
+
+ Log.d("GPS", "Received GPS Data");
+ System.out.println("***From GPS: "+latitude + " " + longitude);
+
+ }
+ }
+ }
+ }// end of GPS section
+ }// end of fetching data
+ return location;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ /**
+ * Stop using GPS listener Calling this function will stop using GPS in your
+ * app
+ * */
+ public void stopUsingGPS() {
+ if (locationManager != null) {
+ locationManager.removeUpdates(GPSTracker.this);
+ }
+ }
+
+ /**
+ * Function to get latitude
+ * */
+ public double getLatitude() {
+ if (location != null) {
+ latitude = location.getLatitude();
+ }
+ return latitude;
+ }
+
+ /**
+ * Function to get longitude
+ * */
+ public double getLongitude() {
+ if (location != null) {
+ longitude = location.getLongitude();
+ }
+ return longitude;
+ }
+
+ /**
+ * Function to check GPS/wifi enabled
+ *
+ * @return boolean
+ * */
+ public boolean canGetLocation() {
+ return this.canGetLocation;
+ }
+
+ public boolean isGPSFix() {
+ return (this.isGPSFix && location != null);
+ }
+
+ /**
+ * Function to show settings alert dialog On pressing Settings button will
+ * lauch Settings Options
+ * */
+ public void showSettingsAlert() {
+ AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
+
+ // Setting Dialog Title
+ alertDialog.setTitle("GPS is settings");
+
+ // Setting Dialog Message
+ alertDialog
+ .setMessage("GPS is not enabled. Do you want to go to settings menu?");
+
+ // On pressing Settings button
+ alertDialog.setPositiveButton("Settings",
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ Intent intent = new Intent(
+ Settings.ACTION_LOCATION_SOURCE_SETTINGS);
+ mContext.startActivity(intent);
+ }
+ });
+
+ // on pressing cancel button
+ alertDialog.setNegativeButton("Cancel",
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.cancel();
+ }
+ });
+
+ // Showing Alert Message
+ alertDialog.show();
+ }
+
+ @Override
+ public void onLocationChanged(Location location) {
+ if (location == null) return;
+ mLastLocationMillis = SystemClock.elapsedRealtime();
+ mLastLocation = location;
+ }
+
+ @Override
+ public void onProviderDisabled(String provider) {
+ }
+
+ @Override
+ public void onProviderEnabled(String provider) {
+ }
+
+ @Override
+ public void onStatusChanged(String provider, int status, Bundle extras) {
+ }
+
+ @Override
+ public IBinder onBind(Intent arg0) {
+ return null;
+ }
+
+ @Override
+ public void onGpsStatusChanged(int event) {
+ switch (event) {
+ case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
+ if(mLastLocation != null)
+ isGPSFix = (SystemClock.elapsedRealtime() - mLastLocationMillis) < 3000;
+ break;
+
+ case GpsStatus.GPS_EVENT_FIRST_FIX:
+ isGPSFix = true;
+ break;
+ }
+ }
+}
diff --git a/client/Piztor/src/com/macaroon/piztor/InitAct.java b/client/Piztor/src/com/macaroon/piztor/InitAct.java new file mode 100644 index 0000000..d5a6059 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/InitAct.java @@ -0,0 +1,34 @@ +package com.macaroon.piztor; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.view.Menu; + +public class InitAct extends PiztorAct { + + @Override + protected void onCreate(Bundle savedInstanceState) { + id = "initAct"; + super.onCreate(savedInstanceState); + AppMgr.init(); + setContentView(R.layout.activity_init); + } + + @Override + protected void onStart() { + super.onStart(); + if (UserInfo.token == -1) + AppMgr.trigger(AppMgr.noToken); + else { + //TODO jump to main + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.init, menu); + return true; + } + +} diff --git a/client/Piztor/src/com/macaroon/piztor/Login.java b/client/Piztor/src/com/macaroon/piztor/Login.java new file mode 100644 index 0000000..a931dae --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/Login.java @@ -0,0 +1,104 @@ +package com.macaroon.piztor; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.view.Menu; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; + +public class Login extends PiztorAct { + + + ActMgr actMgr; + Button btnLogin; + EditText edtUser, edtPass; + + int loginButtonClick = 1, retryButtonClick = 2, loginFailed = 3; + + Handler hand = new Handler() { + @Override + public void handleMessage(Message m) { + System.out.println(m.what); + if (m.what == 0) { + ResLogin res = (ResLogin) m.obj; + UserInfo.token = res.t; + actMgr.trigger(AppMgr.loginSuccess); + } else if (m.what == 101) { + actMgr.trigger(loginFailed); + } + } + }; + + class StartStatus extends ActStatus { + + @Override + void enter(int e) { + } + + @Override + void leave(int e) { + } + } + + class LoginStatus extends ActStatus { + + @Override + void enter(int e) { + String user = edtUser.getText().toString(); + String pass = edtPass.getText().toString(); + long nowtime = System.currentTimeMillis(); + System.out.println(user + " : " + pass + "\n"); + AppMgr.transam.send(new ReqLogin(user, pass, nowtime, 1000)); + } + + @Override + void leave(int e) { + + } + + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + id = "login"; + super.onCreate(savedInstanceState); + ActStatus[] r = new ActStatus[2]; + AppMgr.transam.setHandler(hand); + r[0] = new StartStatus(); + r[1] = new LoginStatus(); + actMgr = new ActMgr(this, r[0], r); + actMgr.add(r[0], loginButtonClick, r[1]); + actMgr.add(r[1], loginFailed, r[0]); + setContentView(R.layout.activity_login); + } + + @Override + protected void onStart() { + super.onStart(); + btnLogin = (Button) findViewById(R.id.login_btn_login); + edtUser = (EditText) findViewById(R.id.user_id); + edtPass = (EditText) findViewById(R.id.user_pass); + btnLogin.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View arg0) { + actMgr.trigger(loginButtonClick); + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.login, menu); + return true; + } + +} diff --git a/client/Piztor/src/com/macaroon/piztor/Main.java b/client/Piztor/src/com/macaroon/piztor/Main.java new file mode 100644 index 0000000..3df5d19 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/Main.java @@ -0,0 +1,205 @@ +package com.macaroon.piztor; + +import java.util.Timer; +import java.util.TimerTask; +import java.util.Vector; + +import android.annotation.SuppressLint; +import android.location.Location; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.view.Menu; +import android.view.View; +import android.widget.ImageButton; + +public class Main extends PiztorAct { + final static int SearchButtonPress = 1; + final static int FetchButtonPress = 2; + final static int FocuseButtonPress = 3; + final static int SuccessFetch = 4; + final static int FailedFetch = 5; + final static int TimerFlush = 6; + ActMgr actMgr; + ImageButton btnSearch, btnFetch, btnFocus, btnSettings; + Timer autodate; + @SuppressLint("HandlerLeak") + Handler fromGPS = new Handler() { + @Override + public void handleMessage(Message m) { + if (m.what != 0) { + Location l = (Location) m.obj; + if (l == null) + System.out.println("fuck!!!"); + else { + ReqUpdate r = new ReqUpdate(UserInfo.token, + l.getLatitude(), l.getLongitude(), + System.currentTimeMillis(), 1000); + AppMgr.transam.send(r); + } + } + } + }; + + Handler fromTransam = new Handler() { + @Override + public void handleMessage(Message m) { + switch (m.what) { + case 3: + ResLocation location = (ResLocation) m.obj; + for (int i = 0; i < location.n; i++) { + System.out.println(location.l.get(i).lat + " " + + location.l.get(i).lot); + } + actMgr.trigger(SuccessFetch); + break; + case 2: + ResUpdate update = (ResUpdate) m.obj; + if (update.t == 0) + System.out.println("update success"); + else + System.out.println("update failed"); + break; + default: + break; + } + + } + }; + + String cause(int t) { + switch (t) { + case SearchButtonPress: + return "Search Button Press"; + case FetchButtonPress: + return "Fetch Button Press"; + case FocuseButtonPress: + return "Focuse Button Press"; + case SuccessFetch: + return "Success Fetch"; + case FailedFetch: + return "Failed Fetch"; + case TimerFlush: + return "TimerFlush"; + default: + return "Fuck!!!"; + } + } + + class StartStatus extends ActStatus { + + @Override + void enter(int e) { + System.out.println("enter start status!!!!"); + if (e == TimerFlush) { + ReqLocation r = new ReqLocation(UserInfo.token, 1, + System.currentTimeMillis(), 1000); + AppMgr.transam.send(r); + } + } + + @Override + void leave(int e) { + System.out.println("leave start status!!!! because" + cause(e)); + } + + } + + class FetchStatus extends ActStatus { + + @Override + void enter(int e) { + System.out.println("enter Fetch status!!!!"); + if (e == FetchButtonPress) { + ReqLocation r = new ReqLocation(UserInfo.token, 1, + System.currentTimeMillis(), 1000); + AppMgr.transam.send(r); + } + } + + @Override + void leave(int e) { + System.out.println("leave fetch status!!!! because" + cause(e)); + } + + } + + class FocusStatus extends ActStatus { + + @Override + void enter(int e) { + System.out.println("enter focus status!!!!"); + + } + + @Override + void leave(int e) { + System.out.println("leave focus status!!!! because" + cause(e)); + + } + + } + + class AutoUpdate extends TimerTask { + + @Override + public void run() { + actMgr.trigger(Main.TimerFlush); + } + + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + id = "Main"; + super.onCreate(savedInstanceState); + AppMgr.tracker.setHandler(fromGPS); + ActStatus[] r = new ActStatus[3]; + r[0] = new StartStatus(); + r[1] = new FetchStatus(); + r[2] = new FocusStatus(); + actMgr = new ActMgr(this, r[0], r); + actMgr.add(r[0], FocuseButtonPress, r[2]); + actMgr.add(r[0], FetchButtonPress, r[1]); + actMgr.add(r[0], SuccessFetch, r[0]); + actMgr.add(r[1], FetchButtonPress, r[0]); + actMgr.add(r[1], FailedFetch, r[0]); + actMgr.add(r[1], SuccessFetch, r[0]); + actMgr.add(r[2], FocuseButtonPress, r[0]); + actMgr.add(r[0], TimerFlush, r[0]); + actMgr.add(r[2], TimerFlush, r[2]); + autodate = new Timer(); + AppMgr.transam.setHandler(fromTransam); + setContentView(R.layout.activity_main); + } + + @Override + protected void onStart() { + super.onStart(); + btnFetch = (ImageButton) findViewById(R.id.footbar_btn_fetch); + btnFocus = (ImageButton) findViewById(R.id.footbar_btn_focus); + btnSearch = (ImageButton) findViewById(R.id.footbar_btn_search); + btnSettings = (ImageButton) findViewById(R.id.footbar_btn_settings); + btnFetch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View arg0) { + actMgr.trigger(FetchButtonPress); + } + }); + btnFocus.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + actMgr.trigger(FocuseButtonPress); + } + }); + autodate.schedule(new AutoUpdate(), 0, 5000); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + +}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/PiztorAct.java b/client/Piztor/src/com/macaroon/piztor/PiztorAct.java new file mode 100644 index 0000000..ad12b17 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/PiztorAct.java @@ -0,0 +1,60 @@ +package com.macaroon.piztor; + +import android.app.Activity; +import android.os.Bundle; + +public class PiztorAct extends Activity { + String id; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + System.out.println(id + " on create"); + AppMgr.setStatus(AppMgr.ActivityStatus.create); + AppMgr.nowAct = this; + } + + @Override + protected void onStart() { + super.onStart(); + System.out.println(id + " on start"); + AppMgr.setStatus(AppMgr.ActivityStatus.start); + AppMgr.nowAct = this; + } + + @Override + protected void onStop() { + super.onStop(); + System.out.println(id + " on stop"); + AppMgr.setStatus(AppMgr.ActivityStatus.stop); + } + + @Override + protected void onResume() { + super.onResume(); + System.out.println(id + " on resume"); + AppMgr.setStatus(AppMgr.ActivityStatus.resume); + AppMgr.nowAct = this; + } + + @Override + protected void onPause() { + super.onPause(); + System.out.println(id + " on pause"); + AppMgr.setStatus(AppMgr.ActivityStatus.pause); + } + + @Override + protected void onRestart() { + super.onRestart(); + System.out.println(id + " on restart"); + AppMgr.setStatus(AppMgr.ActivityStatus.restart); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + System.out.println(id + " on destroy"); + AppMgr.setStatus(AppMgr.ActivityStatus.destroy); + } + +} diff --git a/client/Piztor/src/com/macaroon/piztor/PiztorExcepiton.java b/client/Piztor/src/com/macaroon/piztor/PiztorExcepiton.java new file mode 100644 index 0000000..6d1861a --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/PiztorExcepiton.java @@ -0,0 +1,10 @@ +package com.macaroon.piztor; + +class PiztorExcepiton extends Exception{ + private static final long serialVersionUID = -7147530695009854988L; + +} + +class ClassCannotFind extends PiztorExcepiton { + //private class +} diff --git a/client/Piztor/src/com/macaroon/piztor/Req.java b/client/Piztor/src/com/macaroon/piztor/Req.java new file mode 100644 index 0000000..32988b8 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/Req.java @@ -0,0 +1,14 @@ +package com.macaroon.piztor; + +public class Req{ + int type; //request type + int token; //authentciation + long time; //current time + long alive; //alive time + Req(int t,int k,long tm,long av){ + type = t; + token = k; + time = tm; + alive = av; + } +}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/ReqLocation.java b/client/Piztor/src/com/macaroon/piztor/ReqLocation.java new file mode 100644 index 0000000..000f373 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/ReqLocation.java @@ -0,0 +1,14 @@ +package com.macaroon.piztor; + +//--------------------------------------// +// Ask Location // +//--------------------------------------// + +public class ReqLocation extends Req{ + int gid; //group id; + + ReqLocation(int token,int groupid,long time,long alive){ + super(3,token,time,alive); //for type 3 + gid = groupid; + } +}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/ReqLogin.java b/client/Piztor/src/com/macaroon/piztor/ReqLogin.java new file mode 100644 index 0000000..294cae3 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/ReqLogin.java @@ -0,0 +1,16 @@ +package com.macaroon.piztor; + +//--------------------------------------// +// authentication // +//--------------------------------------// + +public class ReqLogin extends Req{ + String user; //username + String pass; //password + + ReqLogin(String u,String p,long time,long alive){ + super(0,0,time,alive); //for type 0 + user = u; + pass = p; + } +}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/ReqUpdate.java b/client/Piztor/src/com/macaroon/piztor/ReqUpdate.java new file mode 100644 index 0000000..e4b1497 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/ReqUpdate.java @@ -0,0 +1,16 @@ +package com.macaroon.piztor; + +//--------------------------------------// +// Update Location // +//--------------------------------------// + +public class ReqUpdate extends Req{ + double lat; //latitude + double lot; //longitude + + ReqUpdate(int token,double latitude,double longitude,long time,long alive){ + super(2,token,time,alive); //for type 2 + lat = latitude; + lot = longitude; + } +}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/Res.java b/client/Piztor/src/com/macaroon/piztor/Res.java new file mode 100644 index 0000000..98af108 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/Res.java @@ -0,0 +1,11 @@ +package com.macaroon.piztor; + +public class Res{ + int t; + int s; + Res(int type,int status){ + t = type; + s = status; + } +} + diff --git a/client/Piztor/src/com/macaroon/piztor/ResLocation.java b/client/Piztor/src/com/macaroon/piztor/ResLocation.java new file mode 100644 index 0000000..eb90840 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/ResLocation.java @@ -0,0 +1,18 @@ +package com.macaroon.piztor; + +import java.util.Vector; + +//--------------------------------------// +// Location Info // +//--------------------------------------// + +public class ResLocation extends Res{ + Vector<Rlocation> l; //vector for location info + int n; //number of location info + + ResLocation(int num,Vector<Rlocation> locationvec){ + super(3,255); //for type 3 + l = locationvec; + n = num; + } +}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/ResLogin.java b/client/Piztor/src/com/macaroon/piztor/ResLogin.java new file mode 100644 index 0000000..5b597a4 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/ResLogin.java @@ -0,0 +1,15 @@ +package com.macaroon.piztor; + + +//--------------------------------------// +// Respond to login // +//--------------------------------------// + +public class ResLogin extends Res{ + int t; //user token + + ResLogin(int token,int status){ + super(0,status); //for type 0 + t = token; + } +}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/ResUpdate.java b/client/Piztor/src/com/macaroon/piztor/ResUpdate.java new file mode 100644 index 0000000..727eaa3 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/ResUpdate.java @@ -0,0 +1,13 @@ +package com.macaroon.piztor; + + +//--------------------------------------// +// Respond to update location // +//--------------------------------------// + +public class ResUpdate extends Res{ + + ResUpdate(int status){ + super(2,status); //for type 2 + } +}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/Rlocation.java b/client/Piztor/src/com/macaroon/piztor/Rlocation.java new file mode 100644 index 0000000..142cc9b --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/Rlocation.java @@ -0,0 +1,13 @@ +package com.macaroon.piztor; + +class Rlocation{ + int i; //id + double lat; //latitude + double lot; //longitude + + Rlocation(int id,double latitude,double longitude){ + i = id; + lat = latitude; + lot = longitude; + } +}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/Settings.java b/client/Piztor/src/com/macaroon/piztor/Settings.java new file mode 100644 index 0000000..292a112 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/Settings.java @@ -0,0 +1,22 @@ +package com.macaroon.piztor; + +import android.os.Bundle; +import android.app.Activity; +import android.view.Menu; + +public class Settings extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_settings); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.setting, menu); + return true; + } + +} diff --git a/client/Piztor/src/com/macaroon/piztor/SocketClient.java b/client/Piztor/src/com/macaroon/piztor/SocketClient.java new file mode 100644 index 0000000..18c19da --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/SocketClient.java @@ -0,0 +1,107 @@ +package com.macaroon.piztor; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.Socket; +import java.net.UnknownHostException; +import java.util.Vector; + +import android.os.Handler; +import android.os.Message; + +public class SocketClient { + static Socket client; + + public SocketClient(String site, int port) throws UnknownHostException, + IOException { + try { + client = new Socket(site, port); + } catch (UnknownHostException e) { + throw e; + } catch (IOException e) { + throw e; + } + } + + public void sendMsg(Req req,Handler recall) throws IOException { + try { + DataOutputStream out = new DataOutputStream( + client.getOutputStream()); + int tmp = req.type; + out.writeByte(tmp); + switch (tmp) { + case 0: + ReqLogin rau = (ReqLogin) req; + String id = rau.user; + String pa = rau.pass; + out.writeBytes(id + "\0" + pa); + break; + case 2: + ReqUpdate rup = (ReqUpdate) req; + int tk2 = rup.token; + double slat = rup.lat; + double slot = rup.lot; + out.writeInt(tk2); + out.writeDouble(slat); + out.writeDouble(slot); + break; + case 3: + ReqLocation ras = (ReqLocation) req; + int tk3 = ras.token; + int gid = ras.gid; + out.writeInt(tk3); + out.writeInt(gid); + break; + } + out.flush(); + client.shutdownOutput(); + DataInputStream in = new DataInputStream(client.getInputStream()); + Message msg = new Message(); + int type = in.readUnsignedByte(); + switch (type) { + case 0: + int id = in.readInt(); + int status = in.readUnsignedByte(); + ResLogin rchklogin = new ResLogin(id,status); + msg.obj = rchklogin; + msg.what = 0; + recall.sendMessage(msg); + break; + case 2: + int status1 = in.readUnsignedByte(); + ResUpdate rchkupd = new ResUpdate(status1); + msg.obj = rchkupd; + msg.what = 1; + recall.sendMessage(msg); + break; + case 3: + int n = in.readInt(); + Vector<Rlocation> tmpv = new Vector<Rlocation>(); + for (int i = 1; i <= n; i++) { + int tid = in.readInt(); + double lat = in.readDouble(); + double lot = in.readDouble(); + tmpv.add(new Rlocation(tid,lat,lot)); + } + ResLocation rlocin = new ResLocation(n,tmpv); + msg.obj = rlocin; + msg.what = 3; + recall.sendMessage(msg); + break; + } + + } catch (IOException e) { + throw e; + } + } + + public void closeSocket() { + try { + client.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/client/Piztor/src/com/macaroon/piztor/Tracker.java b/client/Piztor/src/com/macaroon/piztor/Tracker.java new file mode 100644 index 0000000..3c46136 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/Tracker.java @@ -0,0 +1,68 @@ +package com.macaroon.piztor; + +import android.content.Context; +import java.util.Timer; +import java.util.TimerTask; + +import android.location.Location; +import android.content.Context; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.os.SystemClock; + + +public class Tracker implements Runnable { + + private static final long TIME_DELTA = 1000 * 3; // 3 second + public Timer timer; + private final Context mContext; + GPSTracker myTracker; + Handler mHandler; + Message message; + + public Tracker(Context context, Handler yHandler) { + timer = new Timer(); + mContext = context; + myTracker = new GPSTracker(mContext); + mHandler = yHandler; + } + + void setHandler(Handler hand) { + mHandler = hand; + } + + + public void run() { + GPSTask myTask = new GPSTask(); + timer.schedule(myTask, 0, TIME_DELTA); + } + + class GPSTask extends TimerTask { + @Override + public void run() { + Location location = myTracker.getLocation(); + Log.d("Location", "Fetching location....."); + if (myTracker.canGetLocation()) { + +// Log.d("TTTTTTTTTTTTTTTTTTTTTTTime","TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTime"); +// System.out.println("GPSTIME" + myTracker.location.getTime()); +// System.out.println("SYSTIME" + SystemClock.elapsedRealtime()); + + message = new Message(); + message.what = 0; + message.obj = location; + if(myTracker.isGPSFix()) { + message.what = 1; + } else { + message.what = 2; + } + mHandler.sendMessage(message); + } else { + message = new Message(); + message.what = 0; + mHandler.sendMessage(message); + } + } + } +} diff --git a/client/Piztor/src/com/macaroon/piztor/Transam.java b/client/Piztor/src/com/macaroon/piztor/Transam.java new file mode 100644 index 0000000..3410502 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/Transam.java @@ -0,0 +1,139 @@ +package com.macaroon.piztor; + +import java.io.IOException; +import java.net.UnknownHostException; +import java.util.LinkedList; +import java.util.Queue; +import java.util.Timer; +import java.util.TimerTask; + +import android.annotation.SuppressLint; +import android.os.Handler; +import android.os.Message; + +public class Transam implements Runnable { + + public Timer timer; + public Timer mtimer; + public boolean running = false; + public boolean flag = true; + public int cnt = 4; + Res res; + Req req; + public int p; // port + public String i; // ip + Thread thread; + Handler core; + Handler recall; // recall + Queue<Req> reqtask; // request task + + Transam(String ip, int port, Handler Recall) { + p = port; + i = ip; + recall = Recall; + reqtask = new LinkedList<Req>(); + } + + public void send(Req r) { + reqtask.offer(r); + + } + + public void setHandler(Handler Recall) { + recall = Recall; + reqtask.clear(); + } + + public void run() { // start the main timer + // TimerTask tmain = new Timertk(); + // mtimer = new Timer(); + // mtimer.schedule(tmain, 100, 100); //check the queue for every 100 + // msec + + while (true) { + if (running == false) { + + if (!reqtask.isEmpty()) { // poll the head request + req = reqtask.poll(); + if (req.time + req.alive < System.currentTimeMillis()) { // time + // out! + Message ret = new Message(); + ret.obj = "Time out!"; + ret.what = 100; + recall.sendMessage(ret); + } else { // run the request + final thd t = new thd(); + flag = false; + thread = new Thread(t); + cnt = 4; + running = true; + thread.start(); + timer = new Timer(); + TimerTask task = new Timertk(); + timer.schedule(task, 2000, 2000); + } + } + } + } + } + + class tmain extends TimerTask { + public void run() { + + } + }; + + class thd implements Runnable { + public void run() { + try { + SocketClient client = new SocketClient(i, p); + client.sendMsg(req, recall); + Message msg = new Message(); + msg.what = 1; + handler.sendMessage(msg); + client.closeSocket(); + } catch (UnknownHostException e) { + e.printStackTrace(); + System.out.println("UnknownHostException"); + } catch (IOException e) { + e.printStackTrace(); + System.out.println("IOException"); + } + + } + } + + @SuppressLint("HandlerLeak") + Handler handler = new Handler() { + public void handleMessage(Message msg) { + switch (msg.what) { + case 1: + flag = true; + break; + case 2: + final thd t = new thd(); + thread = new Thread(t); + thread.start(); + break; + } + super.handleMessage(msg); + } + }; + + class Timertk extends TimerTask { + public void run() { + if (flag == false && cnt > 0) { + cnt--; + } else if (cnt == 0) { + Message msg = new Message(); + msg.obj = "connecting failed"; + msg.what = 101; + recall.sendMessage(msg); + timer.cancel(); + } else if (flag == true) { + timer.cancel(); + running = false; + } + } + }; +}
\ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/UserInfo.java b/client/Piztor/src/com/macaroon/piztor/UserInfo.java new file mode 100644 index 0000000..04be578 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/UserInfo.java @@ -0,0 +1,7 @@ +package com.macaroon.piztor; + +public class UserInfo { + static String ip = "69.85.86.42"; + static int port = 9990; + static int token = -1; +} |