Ray Zhang 12 yıl önce
ebeveyn
işleme
ec2e050bca

+ 5 - 3
Apex/.settings/org.eclipse.core.resources.prefs

@@ -1,3 +1,5 @@
-eclipse.preferences.version=1
-encoding//src/com/usai/apex/SearchActivity.java=UTF-8
-encoding//src/com/usai/util/dbUtil.java=UTF-8
+eclipse.preferences.version=1
+encoding//src/com/usai/apex/LoginFragment.java=UTF-8
+encoding//src/com/usai/apex/SearchActivity.java=UTF-8
+encoding//src/com/usai/util/dbUtil.java=UTF-8
+encoding/<project>=UTF-8

+ 120 - 111
Apex/AndroidManifest.xml

@@ -1,70 +1,70 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.usai.apex"
-    android:versionCode="1"
-    android:versionName="1.0215" >
-
-    <!-- Copied from Google Maps Library/AndroidManifest.xml. -->
-    <uses-sdk
-        android:maxSdkVersion="19"
-        android:minSdkVersion="14"
-        android:targetSdkVersion="17" />
-
-    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
-    <uses-permission android:name="android.permission.INTERNET" />
-    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
-    <!-- External storage for caching. -->
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-    <!-- My Location -->
-    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
-    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
-    <!-- Maps API needs OpenGL ES 2.0. -->
-    <uses-feature
-        android:glEsVersion="0x00020000"
-        android:required="true" />
-    <!-- End of copy. -->
-    <application
-        android:name="com.usai.apex.ApexTrackingApplication"
-        android:allowBackup="true"
-        android:icon="@drawable/ic_launcher"
-        android:label="@string/app_name"
-        android:theme="@android:style/Theme.Holo.Light" >
-        <meta-data
-            android:name="com.google.android.maps.v2.API_KEY"
-            android:value="AIzaSyDN2UFIIk3N2ZKmC2hOvuL6NOTQQPjI57A" />
-        <meta-data
-            android:name="com.google.android.gms.version"
-            android:value="@integer/google_play_services_version" />
-
-        <activity
-            android:name="com.usai.apex.DetailActivity"
-            android:label="@string/title_activity_detail"
-            android:screenOrientation="landscape" >
-            <meta-data
-                android:name="android.support.PARENT_ACTIVITY"
-                android:value="android.support.v4.app.FragmentActivity" />
-
-            <!--
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.usai.apex"
+    android:versionCode="1"
+    android:versionName="A140218" >
+
+    <!-- Copied from Google Maps Library/AndroidManifest.xml. -->
+    <uses-sdk
+        android:maxSdkVersion="19"
+        android:minSdkVersion="14"
+        android:targetSdkVersion="17" />
+
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
+    <!-- External storage for caching. -->
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <!-- My Location -->
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+    <!-- Maps API needs OpenGL ES 2.0. -->
+    <uses-feature
+        android:glEsVersion="0x00020000"
+        android:required="true" />
+    <!-- End of copy. -->
+    <application
+        android:name="com.usai.apex.ApexTrackingApplication"
+        android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@android:style/Theme.Holo.Light" >
+        <meta-data
+            android:name="com.google.android.maps.v2.API_KEY"
+            android:value="AIzaSyARPN7VaYqWGe1PsgGqp1QlhOoTdiwTqq0" />
+        <meta-data
+            android:name="com.google.android.gms.version"
+            android:value="@integer/google_play_services_version" />
+
+        <activity
+            android:name="com.usai.apex.DetailActivity"
+            android:label="@string/title_activity_detail"
+            android:screenOrientation="landscape" >
+            <meta-data
+                android:name="android.support.PARENT_ACTIVITY"
+                android:value="android.support.v4.app.FragmentActivity" />
+
+            <!--
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>

-            -->
-        </activity>
-        <activity
-            android:name="com.usai.apex.ApexActivity"
-            android:label="@string/title_activity_apex"
-            android:screenOrientation="portrait"
-            android:logo="@drawable/apexlogo_2"
-            android:windowSoftInputMode="adjustPan" >
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-        <!--
+            -->
+        </activity>
+        <activity
+            android:name="com.usai.apex.ApexActivity"
+            android:label="@string/title_activity_apex"
+            android:logo="@drawable/apexlogo_2"
+            android:screenOrientation="portrait"
+            android:windowSoftInputMode="adjustPan" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+        <!--
              <activity
             android:name="com.usai.apex.LoginFragment"
             android:label="@string/title_activity_login"
@@ -74,52 +74,61 @@
             android:name="com.usai.apex.DirectTrackingFragment"
             android:label="@string/title_activity_direct_tracking" >
         </activity>






-        -->
-        <activity
-            android:name="com.usai.apex.FunctionSelectActivity"
-            android:label="@string/title_activity_function_select"
-            android:logo="@drawable/apexlogo_2"
-            android:screenOrientation="portrait" >
-        </activity>
-        <activity
-            android:name="com.usai.apex.SearchActivity"
-            android:label="@string/title_activity_search"
-            android:screenOrientation="portrait" >
-        </activity>
-        <activity
-            android:name="com.usai.apex.CustomizeFieldsActivity"
-            android:label="@string/title_activity_customize_fields"
-            android:screenOrientation="portrait" >
-        </activity>
-        <activity
-            android:name="com.usai.apex.ResultActivity"
-            android:label="@string/title_activity_result"
-            android:screenOrientation="portrait" >
-        </activity>
-        <activity
-            android:name="com.usai.apex.LocationDetailActivity"
-            android:label="@string/title_activity_location_detail" >
-        </activity>
-        <activity
-            android:name="com.usai.apex.InnerMapActivity"
-            android:label="@string/title_activity_inner_map" >
-        </activity>
-        <activity
-            android:name="com.usai.apex.HelpActivity"
-            android:label="@string/title_activity_help"
-            android:screenOrientation="portrait"
-            android:theme="@android:style/Theme.Holo.NoActionBar" >
-        </activity>
-        <activity
-            android:name="com.usai.apex.CargoTrackingActivity"
-            android:label="@string/title_activity_cargo_tracking" >
-        </activity>
-        <activity
-            android:name="com.usai.apex.SearchListActivity"
-            android:label="@string/title_activity_search_list" 
-            android:screenOrientation="portrait"
-            android:windowSoftInputMode="adjustUnspecified|stateHidden">
-        </activity>
-    </application>
-
-</manifest>
+        -->
+        <activity
+            android:name="com.usai.apex.FunctionSelectActivity"
+            android:label="@string/title_activity_function_select"
+            android:logo="@drawable/apexlogo_2"
+            android:screenOrientation="portrait" >
+        </activity>
+        <activity
+            android:name="com.usai.apex.SearchActivity"
+            android:label="@string/title_activity_search"
+            android:screenOrientation="portrait" >
+        </activity>
+        <activity
+            android:name="com.usai.apex.CustomizeFieldsActivity"
+            android:label="@string/title_activity_customize_fields"
+            android:screenOrientation="portrait" >
+        </activity>
+        <activity
+            android:name="com.usai.apex.ResultActivity"
+            android:label="@string/title_activity_result"
+            android:screenOrientation="portrait" >
+        </activity>
+        <activity
+            android:name="com.usai.apex.LocationDetailActivity"
+            android:label="@string/title_activity_location_detail" >
+        </activity>
+        <activity
+            android:name="com.usai.apex.InnerMapActivity"
+            android:label="@string/title_activity_inner_map" >
+        </activity>
+        <activity
+            android:name="com.usai.apex.HelpActivity"
+            android:label="@string/title_activity_help"
+            android:screenOrientation="portrait"
+            android:theme="@android:style/Theme.Holo.NoActionBar" >
+        </activity>
+        <activity
+            android:name="com.usai.apex.CargoTrackingActivity"
+            android:label="@string/title_activity_cargo_tracking" >
+        </activity>
+        <activity
+            android:name="com.usai.apex.SearchListActivity"
+            android:label="@string/title_activity_search_list"
+            android:screenOrientation="portrait"
+            android:windowSoftInputMode="adjustUnspecified|stateHidden" >
+        </activity>
+        <activity
+            android:name="com.usai.apex.RetrievePasswordActivity"
+            android:label="@string/title_activity_retrieve_password" >
+        </activity>
+        <activity
+            android:name="com.usai.apex.ChangePasswordActivity"
+            android:label="Change Password"
+            android:windowSoftInputMode="adjustResize|stateVisible" >
+        </activity>
+    </application>
+
+</manifest>

+ 109 - 0
Apex/res/layout/activity_change_password.xml

@@ -0,0 +1,109 @@
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:context=".ChangePasswordActivity" >
+
+    <!-- Login progress -->
+
+    <LinearLayout
+        android:id="@+id/login_status"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:gravity="center_horizontal"
+        android:orientation="vertical"
+        android:visibility="gone" >
+
+        <ProgressBar
+            style="?android:attr/progressBarStyleLarge"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="8dp" />
+
+        <TextView
+            android:id="@+id/login_status_message"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="16dp"
+            android:text="Connecting..."
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+    </LinearLayout>
+
+    <!-- Login form -->
+
+    <ScrollView
+        android:id="@+id/login_form"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" >
+
+        <LinearLayout
+            style="@style/LoginFormContainer"
+            android:orientation="vertical" >
+
+            <EditText
+                android:id="@+id/old_password"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:hint="Old password"
+                android:imeActionId="@+id/login"
+                android:imeActionLabel="@string/action_sign_in_short"
+                android:imeOptions="actionUnspecified"
+                android:inputType="textPassword"
+                android:maxLines="1"
+                android:singleLine="true"
+                android:text="" />
+
+            <EditText
+                android:id="@+id/new_password"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:hint="New password"
+                android:imeActionId="@+id/login"
+                android:imeActionLabel="@string/action_sign_in_short"
+                android:imeOptions="actionUnspecified"
+                android:inputType="textPassword"
+                android:maxLines="1"
+                android:singleLine="true"
+                android:text="" />
+
+            <EditText
+                android:id="@+id/new_password_confirm"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:hint="Confirm new password"
+                android:imeActionId="@+id/login"
+                android:imeActionLabel="@string/action_sign_in_short"
+                android:imeOptions="actionUnspecified"
+                android:inputType="textPassword"
+                android:maxLines="1"
+                android:singleLine="true"
+                android:text="" />
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content" >
+
+                <Button
+                    android:id="@+id/btn_close"
+                    android:layout_width="fill_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="16dp"
+                    android:layout_weight="1"
+                    android:paddingLeft="32dp"
+                    android:paddingRight="32dp"
+                    android:text="Close" />
+
+                <Button
+                    android:id="@+id/btn_ok"
+                    android:layout_width="fill_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="16dp"
+                    android:layout_weight="1"
+                    android:paddingLeft="32dp"
+                    android:paddingRight="32dp"
+                    android:text="Ok" />
+
+            </LinearLayout>
+        </LinearLayout>
+    </ScrollView>
+
+</merge>

+ 90 - 0
Apex/res/layout/activity_retrieve_password.xml

@@ -0,0 +1,90 @@
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:context=".RetrievePasswordActivity" >
+
+    <!-- Login progress -->
+
+    <LinearLayout
+        android:id="@+id/login_status"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:gravity="center_horizontal"
+        android:orientation="vertical"
+        android:visibility="gone" >
+
+        <ProgressBar
+            style="?android:attr/progressBarStyleLarge"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="8dp" />
+
+        <TextView
+            android:id="@+id/login_status_message"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="16dp"
+            android:text="Connecting..."
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+    </LinearLayout>
+
+    <!-- Login form -->
+
+    <ScrollView
+        android:id="@+id/login_form"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" >
+
+        <LinearLayout
+            style="@style/LoginFormContainer"
+            android:orientation="vertical" >
+
+            <EditText
+                android:id="@+id/user"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:hint="User name"
+                android:imeActionId="@+id/login"
+                android:imeActionLabel="@string/action_sign_in_short"
+                android:imeOptions="actionUnspecified"
+                android:maxLines="1"
+                android:singleLine="true" />
+
+            <EditText
+                android:id="@+id/email"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:hint="@string/prompt_email"
+                android:inputType="textEmailAddress"
+                android:maxLines="1"
+                android:singleLine="true" />
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content" >
+
+                <Button
+                    android:id="@+id/btn_close"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="16dp"
+                    android:layout_weight="1"
+                    android:paddingLeft="32dp"
+                    android:paddingRight="32dp"
+                    android:text="Close" />
+
+                <Button
+                    android:id="@+id/btn_ok"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="16dp"
+                    android:layout_weight="1"
+                    android:paddingLeft="32dp"
+                    android:paddingRight="32dp"
+                    android:text="Ok" />
+
+            </LinearLayout>
+        </LinearLayout>
+    </ScrollView>
+
+</merge>

+ 2 - 2
Apex/res/menu/apex.xml

@@ -1,9 +1,9 @@
 <menu xmlns:android="http://schemas.android.com/apk/res/android" >
 
     <item
-        android:id="@+id/action_settings"
+        android:id="@+id/forget_password"
         android:orderInCategory="100"
         android:showAsAction="never"
-        android:title="@string/action_settings"/>
+        android:title="@string/action_forget_password"/>
 
 </menu>

+ 8 - 0
Apex/res/menu/change_password.xml

@@ -0,0 +1,8 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <item
+        android:id="@+id/action_forgot_password"
+        android:showAsAction="never"
+        android:title="@string/action_forgot_password"/>
+
+</menu>

+ 8 - 0
Apex/res/menu/retrieve_password.xml

@@ -0,0 +1,8 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <item
+        android:id="@+id/action_forgot_password"
+        android:showAsAction="never"
+        android:title="@string/action_forgot_password"/>
+
+</menu>

+ 48 - 47
Apex/res/values/strings.xml

@@ -1,50 +1,51 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
-    <string name="app_name">Apex</string>
-    <string name="action_settings">Settings</string>
-    <string name="action_custom_fields">Customize Fields</string>
-    <string name="action_help">Help</string>
-    <string name="hello_world">Hello world!</string>
-    <string name="msg_net_resulterror">An error occur on server</string>
-    <string name="msg_net_error">Can not connect to server</string>
-    <string name="msg_connection_none">No available connection </string>
-    <string name="title_activity_apex">Apex</string>
-    <string name="title_activity_direct_tracking">DirectTracking</string>
-    <string name="title_activity_function_select">Apex</string>
-    <string name="title_activity_test">TestActivity</string>
-    <string name="title_activity_search">SearchActivity</string>
-    <string name="title_activity_customize_fields">CustomizeFieldsActivity</string>
-    <string name="title_activity_result">ResultActivity</string>
-    <string name="title_activity_location_detail">LocationDetail</string>
-    <string name="title_activity_inner_map">InnerMapActivity</string>
-    <string name="title_activity_login">Login</string>
-    <string name="prompt_search_criterion">Enter criterion</string>
-
-    <!-- Strings related to login -->
-    <string name="prompt_email">Email</string>
-    <string name="prompt_user">User</string>
-    <string name="prompt_password">Password</string>
-    <string name="action_sign_in_register"><b>Login</b></string>
-    <string name="action_sign_in_short">Sign in</string>
-    <string name="action_forgot_password">Recover lost password</string>
-    <string name="login_progress_signing_in">Signing in&#8230;</string>
-    <string name="error_invalid_email">This email address is invalid</string>
-    <string name="error_invalid_password">This password is too short</string>
-    <string name="error_incorrect_password">This password is incorrect</string>
-    <string name="error_field_required">This field is required</string>
-    <string name="title_activity_help">HelpActivity</string>
-    <string name="title_activity_detail">DetailActivity</string>
-    <string name="search">Search</string>
-    <!-- locations -->
-
-
-    <!-- test -->
-    <string name="url"><a href="http://www.google.com">A1401330351H.pdf</a></string>
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">Apex</string>
+    <string name="action_settings">Settings</string>
+    <string name="action_forget_password">Forget password</string>
+    <string name="action_custom_fields">Customize Fields</string>
+    <string name="action_help">Help</string>
+    <string name="hello_world">Hello world!</string>
+    <string name="msg_net_resulterror">An error occur on server</string>
+    <string name="msg_net_error">Can not connect to server</string>
+    <string name="msg_connection_none">No available connection </string>
+    <string name="title_activity_apex">Apex</string>
+    <string name="title_activity_direct_tracking">DirectTracking</string>
+    <string name="title_activity_function_select">Apex</string>
+    <string name="title_activity_search">Search</string>
+    <string name="title_activity_customize_fields">Customize Fields</string>
+    <string name="title_activity_result">Result</string>
+    <string name="title_activity_location_detail">LocationDetail</string>
+    <string name="title_activity_inner_map">Service Location</string>
+    <string name="title_activity_login">Login</string>
+    <string name="prompt_search_criterion">Enter criterion</string>
+
+    <!-- Strings related to login -->
+    <string name="prompt_email">Email</string>
+    <string name="prompt_user">User</string>
+    <string name="prompt_password">Password</string>
+    <string name="action_sign_in_register"><b>Login</b></string>
+    <string name="action_sign_in_short">Sign in</string>
+    <string name="action_forgot_password">Recover lost password</string>
+    <string name="login_progress_signing_in">Signing in&#8230;</string>
+    <string name="error_invalid_email">This email address is invalid</string>
+    <string name="error_invalid_password">This password is too short</string>
+    <string name="error_incorrect_password">This password is incorrect</string>
+    <string name="error_field_required">This field is required</string>
+    <string name="title_activity_help">HelpActivity</string>
+    <string name="title_activity_detail">DetailActivity</string>
+    <string name="search">Search</string>
+    <!-- locations -->
+
+
+    <!-- test -->
+    <string name="url"><a href="http://www.google.com">A1401330351H.pdf</a></string>
     <string name="link_text_manual"><b>text2: Explicit links using &lt;a&gt; markup.</b>      This has markup for a <a href="http://www.google.com">link</a> specified
       via an &lt;a&gt; tag.  Use a \"tel:\" URL
-      to <a href="tel:4155551212">dial a phone number</a>.
</string>
-    <string name="title_activity_cargo_tracking">CargoTrackingActivity</string>
-    <string name="title_activity_search_list">SearchListActivity</string>
-
+      to <a href="tel:4155551212">dial a phone number</a>.
</string>
+    <string name="title_activity_cargo_tracking">CargoTracking</string>
+    <string name="title_activity_search_list">Search</string>
+    <string name="title_activity_retrieve_password">RetrievePassword</string>
+
 </resources>

+ 33 - 19
Apex/src/com/usai/apex/ApexActivity.java

@@ -3,6 +3,7 @@ package com.usai.apex;
 //import com.google.android.gms.maps.SupportMapFragment;
 
 import android.app.ActionBar;
+import android.content.Intent;
 import android.os.Bundle;
 //import android.app.Fragment;
 //import android.app.FragmentTransaction;
@@ -11,6 +12,7 @@ import android.support.v4.app.FragmentActivity;
 import android.support.v4.app.FragmentTransaction;
 import android.view.KeyEvent;
 import android.view.Menu;
+import android.view.MenuItem;
 import android.widget.TabHost;
 
 public class ApexActivity extends FragmentActivity /*
@@ -20,10 +22,8 @@ public class ApexActivity extends FragmentActivity /*
 {
 
 	@Override
-	public boolean onKeyDown(int keyCode, KeyEvent event)
-	{
-		if (keyCode == KeyEvent.KEYCODE_BACK)
-		{
+	public boolean onKeyDown(int keyCode, KeyEvent event) {
+		if (keyCode == KeyEvent.KEYCODE_BACK) {
 			// Intent myIntent = new Intent();
 			// myIntent = new Intent(EditActivity.this, tabActivity.class);
 			// startActivity(myIntent);
@@ -36,8 +36,7 @@ public class ApexActivity extends FragmentActivity /*
 	TabHost mTabHost;
 
 	@Override
-	protected void onCreate(Bundle savedInstanceState)
-	{
+	protected void onCreate(Bundle savedInstanceState) {
 		super.onCreate(savedInstanceState);
 		setContentView(R.layout.activity_apex);
 		ActionBar bar = getActionBar();
@@ -45,20 +44,34 @@ public class ApexActivity extends FragmentActivity /*
 		setupTabs();
 	}
 
-//	@Override
-//	public boolean onCreateOptionsMenu(Menu menu)
-//	{
-//		// Inflate the menu; this adds items to the action bar if it is present.
-//		getMenuInflater().inflate(R.menu.apex, menu);
-//		return true;
-//	}
+	@Override
+	public boolean onCreateOptionsMenu(Menu menu) {
+		// Inflate the menu; this adds items to the action bar if it is present.
+		getMenuInflater().inflate(R.menu.apex, menu);
+		return true;
+	}
+
+	@Override
+	public boolean onOptionsItemSelected(MenuItem item) {
+		switch (item.getItemId()) {
+		case R.id.forget_password:
+			Intent intent = new Intent();
+			intent.setClass(this, RetrievePasswordActivity.class);
+			startActivity(intent);
+			
+			break;
+		default:
+			break;
+
+		}
+		return super.onOptionsItemSelected(item);
+	}
 
-	private void setupTabs()
-	{
+	private void setupTabs() {
 		mTabHost = (TabHost) this.findViewById(R.id.tabhost);
 
 		mTabHost.setup();
-		// // 生成底部自定义样式的按钮
+		// // 锟斤拷傻撞锟斤拷远锟斤拷锟斤拷锟绞斤拷陌锟脚�
 		// String[] title = new String[] { "Login", "Not login" };
 		// int[] tabIds = new int[] { R.id.tab1, R.id.tab2 };
 		mTabHost.addTab(mTabHost.newTabSpec("Login").setIndicator("Login")
@@ -71,7 +84,7 @@ public class ApexActivity extends FragmentActivity /*
 
 		// Instantiate a new fragment.
 		Fragment loginFragment = new LoginFragment();
-//		Fragment dtFragement = new DirectTrackingFragment();
+		// Fragment dtFragement = new DirectTrackingFragment();
 		Fragment slFragment = new ServiceLocationFragment();
 		// Add the fragment to the activity, pushing this transaction
 		// on to the back stack.
@@ -101,7 +114,7 @@ public class ApexActivity extends FragmentActivity /*
 		// Button button = new Button(this);
 		// button.setText(title[i]);
 		// button.setBackgroundDrawable(this.getResources().getDrawable(
-		// R.drawable.tab_lable)); //自定义按钮样
+		// R.drawable.tab_lable)); //锟皆讹拷锟藉按钮锟斤拷
 		// mTabHost.addTab(mTabHost.newTabSpec(title[i]).setIndicator(button)
 		// .setContent(tabIds[i]));
 		// }
@@ -116,7 +129,8 @@ public class ApexActivity extends FragmentActivity /*
 	// Fragment frag = null;
 	// int contentViewID = 0;
 	// if (tabId.equals("Login")) {
-	// frag = new LoginFragment(); //自定义继承Fragment的UI,放了一个简单的显示文本标题的控件。
+	// frag = new LoginFragment();
+	// //锟皆讹拷锟斤拷坛锟紽ragment锟斤拷UI锟斤拷锟斤拷锟斤拷一锟斤拷锟津单碉拷锟斤拷示锟侥憋拷锟斤拷锟斤拷目丶锟斤拷锟�
 	// contentViewID = R.id.tab1;
 	// } else if (tabId.equals("Not login")) {
 	// frag = new DirectTrackingFragment();

+ 22 - 0
Apex/src/com/usai/apex/ApexTrackingApplication.java

@@ -8,6 +8,9 @@ public class ApexTrackingApplication extends Application
 	static final String TAG= "ApexTrackingApplication";
 	private static ApexTrackingApplication instance;
 	private static String m_sessionid;
+	private static String m_user;
+	private static String m_password;
+	
 
 	@Override
 	public void onCreate()
@@ -18,6 +21,7 @@ public class ApexTrackingApplication extends Application
 		super.onCreate();
 		instance = this;
 	}
+	
 
 	public static ApexTrackingApplication get_instance()
 	{
@@ -29,9 +33,27 @@ public class ApexTrackingApplication extends Application
 
 		m_sessionid = id;
 	}
+	public static void put_user(String user)
+	{
+		
+		m_user = user;
+	}
+	public static void put_password(String pass)
+	{
+		
+		m_password = pass;
+	}
 
 	public static String get_sessionid()
 	{
 		return m_sessionid;
 	}
+	public static String get_user()
+	{
+		return m_user;
+	}
+	public static String get_pass()
+	{
+		return m_password;
+	}
 }

+ 0 - 8
Apex/src/com/usai/apex/CBPFragment.java

@@ -1,8 +0,0 @@
-package com.usai.apex;
-
-import android.support.v4.app.ListFragment;
-
-public class CBPFragment extends ListFragment
-{
-
-}

+ 323 - 0
Apex/src/com/usai/apex/ChangePasswordActivity.java

@@ -0,0 +1,323 @@
+package com.usai.apex;
+
+import com.usai.util.Network;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.AlertDialog.Builder;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.os.AsyncTask;
+import android.os.Build;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.KeyEvent;
+import android.view.Menu;
+import android.view.View;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+/**
+ * Activity which displays a login screen to the user, offering registration as
+ * well.
+ */
+public class ChangePasswordActivity extends Activity {
+	private UserLoginTask mAuthTask = null;
+
+	// Values for email and password at the time of the login attempt.
+	// private String m_sUser;
+	private String m_soldPassword;
+	private String m_snewPassword;
+	private String m_snew1Password;
+
+	// UI references.
+	private EditText mOldpassView;
+	private EditText mNewpassView;
+	private EditText mNew1passView;
+	private View mLoginFormView;
+	private View mLoginStatusView;
+	private TextView mLoginStatusMessageView;
+
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+
+		setContentView(R.layout.activity_change_password);
+
+		// Set up the login form.
+
+		mOldpassView = (EditText) findViewById(R.id.old_password);
+
+		mNewpassView = (EditText) findViewById(R.id.new_password);
+		mNew1passView = (EditText) findViewById(R.id.new_password_confirm);
+		mNew1passView
+		 .setOnEditorActionListener(new TextView.OnEditorActionListener() {
+		 @Override
+		 public boolean onEditorAction(TextView textView, int id,
+		 KeyEvent keyEvent) {
+		 if (id == R.id.btn_ok || id == EditorInfo.IME_ACTION_DONE) {
+			 
+			 
+			 InputMethodManager inputMethodManager = (InputMethodManager)getApplicationContext().getSystemService(
+						Context.INPUT_METHOD_SERVICE);
+
+		// EditText editText =
+		// (EditText)findViewById(R.id.xxxx);
+		inputMethodManager.hideSoftInputFromWindow(
+				mNew1passView.getWindowToken(), 0); // ����
+		 changepassword();
+		 return true;
+		 }
+		 return false;
+		 }
+		 });
+
+		mLoginFormView = findViewById(R.id.login_form);
+		mLoginStatusView = findViewById(R.id.login_status);
+		mLoginStatusMessageView = (TextView) findViewById(R.id.login_status_message);
+
+		findViewById(R.id.btn_ok).setOnClickListener(
+				new View.OnClickListener() {
+					@Override
+					public void onClick(View view) {
+						changepassword();
+					}
+				});
+	}
+
+	// @Override
+	// public boolean onCreateOptionsMenu(Menu menu) {
+	// super.onCreateOptionsMenu(menu);
+	// getMenuInflater().inflate(R.menu.change_password, menu);
+	// return true;
+	// }
+	//
+	// /**
+	// * Attempts to sign in or register the account specified by the login
+	// form.
+	// * If there are form errors (invalid email, missing fields, etc.), the
+	// * errors are presented and no actual login attempt is made.
+	// */
+	public void changepassword() {
+		if (mAuthTask != null) {
+			return;
+		}
+
+		// Reset errors.
+		mOldpassView.setError(null);
+		mNewpassView.setError(null);
+		mNew1passView.setError(null);
+
+		// Store values at the time of the login attempt.
+		m_soldPassword = mOldpassView.getText().toString();
+		m_snewPassword = mNewpassView.getText().toString();
+		m_snew1Password = mNew1passView.getText().toString();
+
+		boolean cancel = false;
+		View focusView = null;
+
+		// Check for a valid password.
+		if (TextUtils.isEmpty(m_soldPassword)) {
+			mOldpassView.setError(getString(R.string.error_field_required));
+			focusView = mOldpassView;
+			cancel = true;
+		} else if (TextUtils.isEmpty(m_snewPassword)) {
+			mNewpassView.setError(getString(R.string.error_field_required));
+			focusView = mNewpassView;
+			cancel = true;
+		} else if (TextUtils.isEmpty(m_snew1Password)) {
+			mNew1passView.setError(getString(R.string.error_field_required));
+			focusView = mNew1passView;
+			cancel = true;
+		} else if (m_snewPassword.equals(m_snew1Password)==false) {
+			mNew1passView.setError("New passwords not same");
+			focusView = mNew1passView;
+			cancel = true;
+		}
+
+	
+
+		if (cancel) {
+			// There was an error; don't attempt login and focus the first
+			// form field with an error.
+			focusView.requestFocus();
+		} else {
+			// Show a progress spinner, and kick off a background task to
+			// perform the user login attempt.
+			mLoginStatusMessageView.setText(R.string.login_progress_signing_in);
+			showProgress(true);
+			mAuthTask = new UserLoginTask();
+			mAuthTask.execute((Void) null);
+		}
+	}
+
+	/**
+	 * Shows the progress UI and hides the login form.
+	 */
+	@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
+	private void showProgress(final boolean show) {
+		// On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow
+		// for very easy animations. If available, use these APIs to fade-in
+		// the progress spinner.
+		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
+			int shortAnimTime = getResources().getInteger(
+					android.R.integer.config_shortAnimTime);
+
+			mLoginStatusView.setVisibility(View.VISIBLE);
+			mLoginStatusView.animate().setDuration(shortAnimTime)
+					.alpha(show ? 1 : 0)
+					.setListener(new AnimatorListenerAdapter() {
+						@Override
+						public void onAnimationEnd(Animator animation) {
+							mLoginStatusView.setVisibility(show ? View.VISIBLE
+									: View.GONE);
+						}
+					});
+
+			mLoginFormView.setVisibility(View.VISIBLE);
+			mLoginFormView.animate().setDuration(shortAnimTime)
+					.alpha(show ? 0 : 1)
+					.setListener(new AnimatorListenerAdapter() {
+						@Override
+						public void onAnimationEnd(Animator animation) {
+							mLoginFormView.setVisibility(show ? View.GONE
+									: View.VISIBLE);
+						}
+					});
+		} else {
+			// The ViewPropertyAnimator APIs are not available, so simply show
+			// and hide the relevant UI components.
+			mLoginStatusView.setVisibility(show ? View.VISIBLE : View.GONE);
+			mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
+		}
+	}
+
+	/**
+	 * Represents an asynchronous login/registration task used to authenticate
+	 * the user.
+	 */
+	public class UserLoginTask extends AsyncTask<Void, Void, Boolean> {
+		int errorcode;
+		@Override
+		protected Boolean doInBackground(Void... params) {
+			errorcode = Network.change_pass(m_soldPassword, m_snewPassword,ApexTrackingApplication.get_user());
+			if (errorcode == Network.RESULT_TRUE)
+				return true;
+			else {
+				return false;
+			}
+		}
+
+		@Override
+		protected void onPostExecute(final Boolean success) {
+			Log.i("onPostExecute", "entry");
+			mAuthTask = null;
+			showProgress(false);
+			// if (netconnect == )
+			// {
+			//
+			// }
+
+			if (success) {
+				AlertDialog.Builder builder = new Builder(ChangePasswordActivity.this);
+				builder.setMessage("Password changed.");
+
+				builder.setTitle("Change successed");
+
+				builder.setPositiveButton("Ok", new OnClickListener() {
+
+					@Override
+					public void onClick(DialogInterface dialog, int which) {
+						dialog.dismiss();
+
+						ApexTrackingApplication.put_password(m_snewPassword);
+						
+						ChangePasswordActivity.this.finish();
+					}
+				});
+
+//				builder.setNegativeButton("取消", new OnClickListener() {
+//
+//					@Override
+//					public void onClick(DialogInterface dialog, int which) {
+//						dialog.dismiss();
+//					}
+//				});
+
+				builder.create().show();
+
+			} else {
+				switch (errorcode) {
+				case Network.RESULT_NET_NOTAVAILABLE: {
+					Toast toast = Toast.makeText(getApplicationContext(),
+							getText(R.string.msg_connection_none),
+							Toast.LENGTH_LONG);
+					toast.setGravity(Gravity.CENTER, 0, 0);
+					toast.show();
+					return;
+				}
+				case Network.RESULT_NET_ERROR: {
+					Toast toast = Toast.makeText(getApplicationContext(),
+							getText(R.string.msg_net_error), Toast.LENGTH_LONG);
+					toast.setGravity(Gravity.CENTER, 0, 0);
+					toast.show();
+					return;
+				}
+				case Network.RESULT_ERROR:
+				// case Network.RESULT_RESPONSE_NULL:
+				{
+					Toast toast = Toast.makeText(getApplicationContext(),
+							getText(R.string.msg_net_resulterror),
+							Toast.LENGTH_LONG);
+					toast.setGravity(Gravity.CENTER, 0, 0);
+					toast.show();
+					return;
+				}
+
+				case Network.RESULT_FALSE: {
+					AlertDialog.Builder builder = new Builder(ChangePasswordActivity.this);
+					builder.setMessage("Invalid user name or password.");
+
+					builder.setTitle("Change failed");
+
+					builder.setPositiveButton("Ok", new OnClickListener() {
+
+						@Override
+						public void onClick(DialogInterface dialog, int which) {
+							dialog.dismiss();
+
+//							RetrievePasswordActivity.this.finish();
+						}
+					});
+					builder.create().show();
+
+					return;
+				}
+				default: {
+					Toast toast = Toast.makeText(getApplicationContext(),
+							"An error occur on server code:" + errorcode,
+							Toast.LENGTH_LONG);
+					toast.setGravity(Gravity.CENTER, 0, 0);
+					toast.show();
+					break;
+				}
+				}
+			}
+		}
+
+		@Override
+		protected void onCancelled() {
+			mAuthTask = null;
+			showProgress(false);
+		}
+	}
+}

+ 9 - 9
Apex/src/com/usai/apex/CustomizeFieldsActivity.java

@@ -72,7 +72,7 @@ public class CustomizeFieldsActivity extends Activity implements
 	{
 		super.onCreate(savedInstanceState);
 
-		user = getIntent().getStringExtra("user");
+		user = ApexTrackingApplication.get_user();
 		// password = getIntent().getStringExtra("password");
 		function_name = getIntent().getStringExtra("function_name");
 		behavior = getIntent().getIntExtra("behavior", -1);
@@ -156,23 +156,23 @@ public class CustomizeFieldsActivity extends Activity implements
 
 			}
 		}
-		// 数据结果
+		// 锟斤拷萁锟斤拷
 		list = new ArrayList<fieldedit>();
 
-		// groupKey存放的是分组标
+		// groupKey锟斤拷诺锟斤拷欠锟斤拷锟斤拷
 		// groupKey.add("Display fields");
 		// groupKey.add("Hide fields");
 
 		// for (int i = 0; i < 5; i++)
 		// {
-		// navList.add("A选" + i);
+		// navList.add("A选锟斤拷" + i);
 		// }
 		list.add(new fieldedit("Display fields", -1));
 		list.addAll(showList);
 
 		// for (int i = 0; i <18; i++)
 		// {
-		// moreList.add("B选" + i);
+		// moreList.add("B选锟斤拷" + i);
 		// }
 		list.add(new fieldedit("Hide fields", -2));
 		list.addAll(hideList);
@@ -203,7 +203,7 @@ public class CustomizeFieldsActivity extends Activity implements
 				return false;
 			// if (groupKey.contains(getItem(position).name))
 			// {
-			// // 如果是分组标签,返回false,不能选中,不能点击
+			// // 锟斤拷锟斤拷欠锟斤拷锟斤拷签锟斤拷锟斤拷锟斤拷false锟斤拷锟斤拷锟斤拷选锟叫o拷锟斤拷锟杰碉拷锟�
 			// return false;
 			// }
 			return super.isEnabled(position);
@@ -232,13 +232,13 @@ public class CustomizeFieldsActivity extends Activity implements
 			}
 			// if (groupKey.contains(getItem(position).name))
 			// {
-			// // 如果是分组标签,就加载分组标签的布局文件,两个布局文件显示效果不同
+			// // 锟斤拷锟斤拷欠锟斤拷锟斤拷签锟斤拷锟酵硷拷锟截凤拷锟斤拷锟角╋拷牟锟斤拷锟斤拷募锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷募锟斤拷锟绞拘э拷锟酵�
 			// view = LayoutInflater.from(getContext()).inflate(
 			// R.layout.drag_list_item_tag, null);
 			// }
 			else
 			{
-				// 如果是正常数据项标签,就加在正常数据项的布局文件
+				// 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟角╋拷锟斤拷图锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷牟锟斤拷锟斤拷募锟�
 				view = LayoutInflater.from(getContext()).inflate(
 						R.layout.drag_list_item, null);
 			}
@@ -297,7 +297,7 @@ public class CustomizeFieldsActivity extends Activity implements
 			for (int i = 0; i < adapter.getCount(); i++)
 			{
 				fieldedit fe = adapter.getItem(i);
-				if (fe._id == -2)// hide group begin
+				if (fe._id == -2)// hide group begin 
 				{
 					show = 0;
 				}

+ 71 - 83
Apex/src/com/usai/apex/FunctionSelectActivity.java

@@ -15,159 +15,147 @@ import android.widget.ImageButton;
 import android.widget.RadioGroup;
 import android.widget.TextView;
 
-public class FunctionSelectActivity extends FragmentActivity implements OnClickListener
-{
-	String user=null;
-	String password=null;
-	
+public class FunctionSelectActivity extends FragmentActivity implements
+		OnClickListener {
+	// String user=null;
+	// String password=null;
 
 	@Override
-	protected void onCreate(Bundle savedInstanceState)
-	{
-		user=getIntent().getStringExtra("user");
-		password= getIntent().getStringExtra("password");
+	protected void onCreate(Bundle savedInstanceState) {
+		// user = ApexTrackingApplication.get_user();
+		// password= getIntent().getStringExtra("password");
 		super.onCreate(savedInstanceState);
 		setContentView(R.layout.new_function_select);
-		
+
 		ActionBar bar = getActionBar();
 		bar.setTitle("");
-//		
-		TextView tv_booking = (TextView)findViewById(R.id.tv_booking);
+		//
+		TextView tv_booking = (TextView) findViewById(R.id.tv_booking);
 		tv_booking.setOnClickListener(this);
-		TextView tv_info = (TextView)findViewById(R.id.tv_info);
+		TextView tv_info = (TextView) findViewById(R.id.tv_info);
 		tv_info.setOnClickListener(this);
-		TextView tv_detail = (TextView)findViewById(R.id.tv_detail);
+		TextView tv_detail = (TextView) findViewById(R.id.tv_detail);
 		tv_detail.setOnClickListener(this);
-//		TextView tv_cargo = (TextView)findViewById(R.id.tv_cargo);
-//		tv_cargo.setOnClickListener(this);
-		TextView tv_doc = (TextView)findViewById(R.id.tv_doc);
+		// TextView tv_cargo = (TextView)findViewById(R.id.tv_cargo);
+		// tv_cargo.setOnClickListener(this);
+		TextView tv_doc = (TextView) findViewById(R.id.tv_doc);
 		tv_doc.setOnClickListener(this);
-		TextView tv_password = (TextView)findViewById(R.id.tv_password);
+		TextView tv_password = (TextView) findViewById(R.id.tv_password);
 		tv_password.setOnClickListener(this);
-		TextView tv_exit = (TextView)findViewById(R.id.tv_exit);
+		TextView tv_exit = (TextView) findViewById(R.id.tv_exit);
 		tv_exit.setOnClickListener(this);
-		TextView tv_loc = (TextView)findViewById(R.id.tv_location);
+		TextView tv_loc = (TextView) findViewById(R.id.tv_location);
 		tv_loc.setOnClickListener(this);
 		Button btn_search = (Button) findViewById(R.id.btn_search);
 		btn_search.setOnClickListener(this);
 	}
 
 	@Override
-	public boolean onCreateOptionsMenu(Menu menu)
-	{
+	public boolean onCreateOptionsMenu(Menu menu) {
 		// Inflate the menu; this adds items to the action bar if it is present.
 		getMenuInflater().inflate(R.menu.function_select, menu);
 		return true;
 	}
 
-
 	@Override
-	public void onClick(View v)
-	{
-		String TAG="onClick@FunctionSelectActivity";
-		Log.d(TAG, "ID="+v.getId());
-		switch (v.getId())
-		{
+	public void onClick(View v) {
+		String TAG = "onClick@FunctionSelectActivity";
+		Log.d(TAG, "ID=" + v.getId());
+		switch (v.getId()) {
 		case R.id.btn_search:
 			EditText et = (EditText) findViewById(R.id.et_criterion);
 			String cargo_criterion = et.getText().toString();
-			if (TextUtils.isEmpty(cargo_criterion))
-			{
+			if (TextUtils.isEmpty(cargo_criterion)) {
 				et.setError(getString(R.string.error_field_required));
 				et.requestFocus();
-			}
-			else
-			{
+			} else {
 				Intent intent = new Intent();
 				intent.setClass(this, DetailActivity.class);
 
-				intent.putExtra("action0" , "Tracking");
+				intent.putExtra("action0", "Tracking");
 				intent.putExtra("function_name", "Cargo Tracking");
 				intent.putExtra("cargo_criterion", cargo_criterion);
 				intent.putExtra("actions_count", 1);
 				intent.putExtra("_id", "dumb");
 				RadioGroup rg = (RadioGroup) findViewById(R.id.radioGroup1);
-				if(rg.getCheckedRadioButtonId ()==R.id.radio0)
+				if (rg.getCheckedRadioButtonId() == R.id.radio0)
 					intent.putExtra("criterion_type", 0);
 				else
 					intent.putExtra("criterion_type", 1);
-//				hbol
-//				container_no
+				// hbol
+				// container_no
 				startActivity(intent);
 			}
-			break;			
-		case R.id.tv_booking:
-		{
+			break;
+		case R.id.tv_booking: {
 			Intent intent = new Intent();
 			intent.setClass(this, SearchListActivity.class);
-			intent.putExtra("user", user);
-			intent.putExtra("password", password);
+			// intent.putExtra("user", ApexTrackingApplication.get_user());
+			// intent.putExtra("password", password);
 			intent.putExtra("function_name", "Ocean Booking");
-			startActivity(intent);			
+			startActivity(intent);
 			break;
 		}
-		case R.id.tv_info:
-		{
+		case R.id.tv_info: {
 			Intent intent = new Intent();
 			intent.setClass(this, SearchListActivity.class);
-			intent.putExtra("user", user);
-			intent.putExtra("password", password);
+			// intent.putExtra("user", user);
+			// intent.putExtra("password", password);
 			intent.putExtra("function_name", "Ocean B/L info.");
-			startActivity(intent);			
+			startActivity(intent);
 			break;
 		}
-		case R.id.tv_detail:
-		{
+		case R.id.tv_detail: {
 			Intent intent = new Intent();
 			intent.setClass(this, SearchListActivity.class);
-			intent.putExtra("user", user);
-			intent.putExtra("password", password);
+			// intent.putExtra("user", user);
+			// intent.putExtra("password", password);
 			intent.putExtra("function_name", "Container detail");
-			startActivity(intent);			
+			startActivity(intent);
 			break;
 		}
-//		case R.id.tv_cargo:
-//		{
-//			Intent intent = new Intent();
-//			intent.setClass(this, CargoTrackingActivity.class);
-//			intent.putExtra("user", user);
-//			intent.putExtra("password", password);
-//			intent.putExtra("function_name", "Cargo Tracking");
-//			startActivity(intent);			
-//		}
-//			
-//			break;
+		// case R.id.tv_cargo:
+		// {
+		// Intent intent = new Intent();
+		// intent.setClass(this, CargoTrackingActivity.class);
+		// intent.putExtra("user", user);
+		// intent.putExtra("password", password);
+		// intent.putExtra("function_name", "Cargo Tracking");
+		// startActivity(intent);
+		// }
+		//
+		// break;
 		case R.id.tv_doc:
-			
+
 			break;
-		case R.id.tv_password:
-			
+		case R.id.tv_password: {
+			Intent intent = new Intent();
+			intent.setClass(this, ChangePasswordActivity.class);
+			// intent.putExtra("function_name", "Container detail");
+			startActivity(intent);
+			break;
+		}
+		case R.id.tv_exit: {
+			finish();
+			System.exit(0);
 			break;
-		case R.id.tv_exit:
-		{
-			finish();  
-            System.exit(0);  
-            break;
 		}
-		case R.id.tv_location:
-		{
+		case R.id.tv_location: {
 			Log.d("==============", "start location activity");
 			Intent intent = new Intent();
 			intent.setClass(this, InnerMapActivity.class);
-//			intent.putExtra("user", user);
-//			intent.putExtra("password", password);
-//			intent.putExtra("function_name", "Container detail");
-			startActivity(intent);			
-			break;		
+			// intent.putExtra("user", user);
+			// intent.putExtra("password", password);
+			// intent.putExtra("function_name", "Container detail");
+			startActivity(intent);
+			break;
 		}
-			
 
 		default:
 			break;
 		}
 		// TODO Auto-generated method stub
-		
-		
+
 	}
 
 }

+ 65 - 111
Apex/src/com/usai/apex/LoginFragment.java

@@ -2,7 +2,6 @@ package com.usai.apex;
 
 //import android.app.Fragment;
 
-import com.usai.apex.R.string;
 import com.usai.util.Crypto;
 import com.usai.util.Network;
 
@@ -12,8 +11,6 @@ import android.animation.AnimatorListenerAdapter;
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.nfc.Tag;
 import android.os.AsyncTask;
 import android.os.Build;
 //import android.content.SharedPreferences;
@@ -29,8 +26,6 @@ import android.view.ViewGroup;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.CheckBox;
-import android.widget.CompoundButton;
-import android.widget.CompoundButton.OnCheckedChangeListener;
 import android.widget.EditText;
 import android.widget.TextView;
 //import android.widget.TextView;
@@ -57,8 +52,7 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 
 	@Override
 	public View onCreateView(LayoutInflater inflater, ViewGroup container,
-			Bundle savedInstanceState)
-	{
+			Bundle savedInstanceState) {
 		View view = inflater.inflate(R.layout.fragment_login, null);
 		// Button btn = (Button) view.findViewById(R.id.sign_in_button);
 		// btn.setOnClickListener(this);
@@ -122,31 +116,24 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 				.getSharedPreferences("Apex", 0);
 		String u = pref.getString("user", null);
 		String p = pref.getString("password", null);
-		if (u!=null && p!=null)
-		{
-			try
-			{
+		if (u != null && p != null) {
+			try {
 				m_etName.setText(Crypto.decrypt("apexu", u));
 				m_etPassword.setText(Crypto.decrypt("apexp", p));
 				m_cbSave.setChecked(true);
-			}
-			catch (Exception e)
-			{
+			} catch (Exception e) {
 				// TODO Auto-generated catch block
 				e.printStackTrace();
 			}
 
 		}
 		m_etPassword
-				.setOnEditorActionListener(new TextView.OnEditorActionListener()
-				{
+				.setOnEditorActionListener(new TextView.OnEditorActionListener() {
 					@Override
 					public boolean onEditorAction(TextView textView, int id,
-							KeyEvent keyEvent)
-					{
+							KeyEvent keyEvent) {
 						if (id == R.id.login
-								|| id == EditorInfo.IME_ACTION_DONE)
-						{
+								|| id == EditorInfo.IME_ACTION_DONE) {
 							InputMethodManager inputMethodManager = (InputMethodManager) getActivity()
 									.getApplicationContext().getSystemService(
 											Context.INPUT_METHOD_SERVICE);
@@ -154,7 +141,7 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 							// EditText editText =
 							// (EditText)findViewById(R.id.xxxx);
 							inputMethodManager.hideSoftInputFromWindow(
-									m_etPassword.getWindowToken(), 0); // Òþ²Ø
+									m_etPassword.getWindowToken(), 0); // ����
 							attemptLogin();
 							return true;
 						}
@@ -168,11 +155,9 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 				.findViewById(R.id.login_status_message);
 
 		view.findViewById(R.id.sign_in_button).setOnClickListener(
-				new View.OnClickListener()
-				{
+				new View.OnClickListener() {
 					@Override
-					public void onClick(View view)
-					{
+					public void onClick(View view) {
 						InputMethodManager inputMethodManager = (InputMethodManager) getActivity()
 								.getApplicationContext().getSystemService(
 										Context.INPUT_METHOD_SERVICE);
@@ -195,10 +180,8 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 	// * If there are form errors (invalid email, missing fields, etc.), the
 	// * errors are presented and no actual login attempt is made.
 	// */
-	public void attemptLogin()
-	{
-		if (mAuthTask != null)
-		{
+	public void attemptLogin() {
+		if (mAuthTask != null) {
 			return;
 		}
 
@@ -214,24 +197,18 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 		View focusView = null;
 
 		// Check for a valid password.
-		if (TextUtils.isEmpty(m_sPassword))
-		{
+		if (TextUtils.isEmpty(m_sPassword)) {
 			m_etPassword.setError(getString(R.string.error_field_required));
 			focusView = m_etPassword;
 			cancel = true;
+		} else if (m_sPassword.length() < 4) {
+			m_etPassword.setError(getString(R.string.error_invalid_password));
+			focusView = m_etPassword;
+			cancel = true;
 		}
-		else
-			if (m_sPassword.length() < 4)
-			{
-				m_etPassword
-						.setError(getString(R.string.error_invalid_password));
-				focusView = m_etPassword;
-				cancel = true;
-			}
 
 		// Check for a valid user name.
-		if (TextUtils.isEmpty(m_sUser))
-		{
+		if (TextUtils.isEmpty(m_sUser)) {
 			m_etName.setError(getString(R.string.error_field_required));
 			focusView = m_etName;
 			cancel = true;
@@ -242,14 +219,11 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 		// cancel = true;
 		// }
 
-		if (cancel)
-		{
+		if (cancel) {
 			// There was an error; don't attempt login and focus the first
 			// form field with an error.
 			focusView.requestFocus();
-		}
-		else
-		{
+		} else {
 			// Show a progress spinner, and kick off a background task to
 			// perform the user login attempt.
 			mLoginStatusMessageView.setText(R.string.login_progress_signing_in);
@@ -264,24 +238,20 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 	// * Shows the progress UI and hides the login form.
 	// */
 	// @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
-	private void showProgress(final boolean show)
-	{
+	private void showProgress(final boolean show) {
 		// On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow
 		// for very easy animations. If available, use these APIs to fade-in
 		// the progress spinner.
-		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2)
-		{
+		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
 			int shortAnimTime = getResources().getInteger(
 					android.R.integer.config_shortAnimTime);
 
 			mLoginStatusView.setVisibility(View.VISIBLE);
 			mLoginStatusView.animate().setDuration(shortAnimTime)
 					.alpha(show ? 1 : 0)
-					.setListener(new AnimatorListenerAdapter()
-					{
+					.setListener(new AnimatorListenerAdapter() {
 						@Override
-						public void onAnimationEnd(Animator animation)
-						{
+						public void onAnimationEnd(Animator animation) {
 							mLoginStatusView.setVisibility(show ? View.VISIBLE
 									: View.INVISIBLE);
 						}
@@ -290,18 +260,14 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 			mLoginFormView.setVisibility(View.VISIBLE);
 			mLoginFormView.animate().setDuration(shortAnimTime)
 					.alpha(show ? 0 : 1)
-					.setListener(new AnimatorListenerAdapter()
-					{
+					.setListener(new AnimatorListenerAdapter() {
 						@Override
-						public void onAnimationEnd(Animator animation)
-						{
+						public void onAnimationEnd(Animator animation) {
 							mLoginFormView.setVisibility(show ? View.INVISIBLE
 									: View.VISIBLE);
 						}
 					});
-		}
-		else
-		{
+		} else {
 			// The ViewPropertyAnimator APIs are not available, so simply show
 			// and hide the relevant UI components.
 			mLoginStatusView
@@ -315,27 +281,23 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 	// * Represents an asynchronous login/registration task used to authenticate
 	// * the user.
 	// */
-	public class UserLoginTask extends AsyncTask<Void, Void, Boolean>
-	{
+	public class UserLoginTask extends AsyncTask<Void, Void, Boolean> {
 		// int err_code = ERR_CODE_NONE;
 		int errorcode;
 
 		@Override
-		protected Boolean doInBackground(Void... params)
-		{
+		protected Boolean doInBackground(Void... params) {
 			errorcode = Network.get_Auth(m_sUser, m_sPassword);
 			if (errorcode == Network.RESULT_TRUE)
 				return true;
-			else
-			{
+			else {
 				return false;
 			}
 
 		}
 
 		@Override
-		protected void onPostExecute(final Boolean success)
-		{
+		protected void onPostExecute(final Boolean success) {
 			Log.i("onPostExecute", "entry");
 			mAuthTask = null;
 			showProgress(false);
@@ -344,8 +306,7 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 			//
 			// }
 
-			if (success)
-			{
+			if (success) {
 
 				// SharedPreferences.Editor editor = RunOnce.edit();
 				// editor.putBoolean("FirstRun"+globalUtil.getVerName(this),
@@ -356,42 +317,32 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 						.getSharedPreferences("Apex", 0);
 				SharedPreferences.Editor editor = pref.edit();
 
-				try
-				{
-					if (m_cbSave.isChecked())
-					{
+				try {
+					if (m_cbSave.isChecked()) {
 						editor.putString("user",
 								Crypto.encrypt("apexu", m_sUser));
 						editor.putString("password",
 								Crypto.encrypt("apexp", m_sPassword));
+					} else {
+						editor.putString("user", null);
+						editor.putString("password", null);
 					}
-					else
-					{
-						editor.putString("user",null);
-						editor.putString("password",null);
-					}
-				}
-				catch (Exception e)
-				{
-					editor.putString("user",null);
-					editor.putString("password",null);
+				} catch (Exception e) {
+					editor.putString("user", null);
+					editor.putString("password", null);
 					e.printStackTrace();
 				}
 				editor.commit();
 
 				Intent intent = new Intent();
 				intent.setClass(getActivity(), FunctionSelectActivity.class);
-				intent.putExtra("user", m_sUser);
-				intent.putExtra("password", m_sPassword);
+//				intent.putExtra("user", m_sUser);
+//				intent.putExtra("password", m_sPassword);
 				startActivity(intent);
 				getActivity().finish();
-			}
-			else
-			{
-				switch (errorcode)
-				{
-				case Network.RESULT_NET_NOTAVAILABLE:
-				{
+			} else {
+				switch (errorcode) {
+				case Network.RESULT_NET_NOTAVAILABLE: {
 					Toast toast = Toast.makeText(getActivity()
 							.getApplicationContext(),
 							getText(R.string.msg_connection_none),
@@ -400,8 +351,7 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 					toast.show();
 					return;
 				}
-				case Network.RESULT_NET_ERROR:
-				{
+				case Network.RESULT_NET_ERROR: {
 					Toast toast = Toast.makeText(getActivity()
 							.getApplicationContext(),
 							getText(R.string.msg_net_error), Toast.LENGTH_LONG);
@@ -409,20 +359,25 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 					toast.show();
 					return;
 				}
-				// case Network.RESULT_ERROR:
-				// // case Network.RESULT_RESPONSE_NULL:
-				// {
-				// Toast toast = Toast.makeText(getActivity()
-				// .getApplicationContext(),
-				// getText(R.string.msg_net_resulterror),
-				// Toast.LENGTH_LONG);
-				// toast.setGravity(Gravity.CENTER, 0, 0);
-				// toast.show();
-				// return;
-				// }
-
-				default:
+				case Network.RESULT_ERROR:
+				// case Network.RESULT_RESPONSE_NULL:
 				{
+					Toast toast = Toast.makeText(getActivity()
+							.getApplicationContext(),
+							getText(R.string.msg_net_resulterror),
+							Toast.LENGTH_LONG);
+					toast.setGravity(Gravity.CENTER, 0, 0);
+					toast.show();
+					return;
+				}
+
+				case Network.RESULT_FALSE: {
+					m_etPassword
+							.setError(getString(R.string.error_incorrect_password));
+					m_etPassword.requestFocus();
+					
+				}
+				default: {
 					Toast toast = Toast.makeText(getActivity()
 							.getApplicationContext(),
 							"An error occur on server code:" + errorcode,
@@ -436,8 +391,7 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 		}
 
 		@Override
-		protected void onCancelled()
-		{
+		protected void onCancelled() {
 			mAuthTask = null;
 			showProgress(false);
 		}

+ 7 - 7
Apex/src/com/usai/apex/ResultActivity.java

@@ -66,8 +66,8 @@ public class ResultActivity extends Activity
 	@Override
 	protected void onCreate(Bundle savedInstanceState)
 	{
-		user = getIntent().getStringExtra("user");
-		password = getIntent().getStringExtra("password");
+		user = ApexTrackingApplication.get_user();
+		password = ApexTrackingApplication.get_pass();
 		function_name = getIntent().getStringExtra("function_name");
 		searchParms = getIntent().getBundleExtra("searchParms");
 		super.onCreate(savedInstanceState);
@@ -179,7 +179,7 @@ public class ResultActivity extends Activity
 			// TableRow tr = (TableRow) tl.getFocusedChild();
 			// View v = (View) tl.getFocusedChild();
 			contextmenu.add(Menu.NONE, 0, 0, "Detail");
-			// contextmenu.add(Menu.NONE, 1, 1, "辑");
+			// contextmenu.add(Menu.NONE, 1, 1, "锟洁辑");
 
 		}
 
@@ -225,7 +225,7 @@ public class ResultActivity extends Activity
 	// {
 	// // // TODO Auto-generated method stub
 	// menu.add(Menu.NONE, 0, 0, "Detail");
-	// // // contextmenu.add(Menu.NONE, 1, 1, "辑");
+	// // // contextmenu.add(Menu.NONE, 1, 1, "锟洁辑");
 	// super.onCreateContextMenu(menu, v, menuInfo);
 	// }
 
@@ -270,9 +270,9 @@ public class ResultActivity extends Activity
 		dbUtil.CloseDB(db);
 
 		// SimpleAdapter adapter = new SimpleAdapter(this,
-		// gridheader,// 数据来源
-		// R.layout.result_item,//XML实
-		// new String[] { "key" }, // 动态数组与ImageItem对应的子项
+		// gridheader,// 锟斤拷锟斤拷锟皆�
+		// R.layout.result_item,//XML实锟斤拷
+		// new String[] { "key" }, // 锟斤拷态锟斤拷锟斤拷锟斤拷ImageItem锟斤拷应锟斤拷锟斤拷锟斤拷
 		// new int[] { R.id.tv_value });
 		//
 		// GridView gridview = (GridView) findViewById(R.id.grid_result);

+ 332 - 0
Apex/src/com/usai/apex/RetrievePasswordActivity.java

@@ -0,0 +1,332 @@
+package com.usai.apex;
+
+import com.usai.util.Crypto;
+import com.usai.util.Network;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.AlertDialog.Builder;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.AsyncTask;
+import android.os.Build;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.KeyEvent;
+import android.view.Menu;
+import android.view.View;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+/**
+ * Activity which displays a login screen to the user, offering registration as
+ * well.
+ */
+public class RetrievePasswordActivity extends Activity {
+
+	/**
+	 * Keep track of the login task to ensure we can cancel it if requested.
+	 */
+	private UserLoginTask mAuthTask = null;
+
+	// Values for email and password at the time of the login attempt.
+	private String m_sEmail;
+	private String m_sUser;
+
+	// UI references.
+	private EditText mEmailView;
+	private EditText m_userView;
+	private View mLoginFormView;
+	private View mLoginStatusView;
+	private TextView mLoginStatusMessageView;
+
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+
+		setContentView(R.layout.activity_retrieve_password);
+
+		// Set up the login form.
+		m_userView = (EditText) findViewById(R.id.user);
+//		m_sEmail = getIntent().getStringExtra(EXTRA_EMAIL);
+		mEmailView = (EditText) findViewById(R.id.email);
+//		mEmailView.setText(m_sEmail);
+
+		mEmailView
+				.setOnEditorActionListener(new TextView.OnEditorActionListener() {
+					@Override
+					public boolean onEditorAction(TextView textView, int id,
+							KeyEvent keyEvent) {
+						if (id == R.id.btn_ok || id == EditorInfo.IME_ACTION_DONE) {
+
+							InputMethodManager inputMethodManager = (InputMethodManager)getApplicationContext().getSystemService(
+											Context.INPUT_METHOD_SERVICE);
+
+							// EditText editText =
+							// (EditText)findViewById(R.id.xxxx);
+							inputMethodManager.hideSoftInputFromWindow(
+									mEmailView.getWindowToken(), 0); // ����
+							retrivev();
+							return true;
+						}
+						return false;
+					}
+				});
+
+		mLoginFormView = findViewById(R.id.login_form);
+		mLoginStatusView = findViewById(R.id.login_status);
+		mLoginStatusMessageView = (TextView) findViewById(R.id.login_status_message);
+
+		findViewById(R.id.btn_ok).setOnClickListener(
+				new View.OnClickListener() {
+					@Override
+					public void onClick(View view) {
+						retrivev();
+					}
+				});
+		findViewById(R.id.btn_close).setOnClickListener(
+				new View.OnClickListener() {
+					@Override
+					public void onClick(View view) {
+						finish();
+					}
+				});
+	}
+//
+//	@Override
+//	public boolean onCreateOptionsMenu(Menu menu) {
+//		super.onCreateOptionsMenu(menu);
+//		getMenuInflater().inflate(R.menu.retrieve_password, menu);
+//		return true;
+//	}
+
+	/**
+	 * Attempts to sign in or register the account specified by the login form.
+	 * If there are form errors (invalid email, missing fields, etc.), the
+	 * errors are presented and no actual login attempt is made.
+	 */
+	public void retrivev() {
+		if (mAuthTask != null) {
+			return;
+		}
+
+		// Reset errors.
+		mEmailView.setError(null);
+		m_userView.setError(null);
+
+		// Store values at the time of the login attempt.
+		m_sEmail = mEmailView.getText().toString();
+		m_sUser = m_userView.getText().toString();
+
+		boolean cancel = false;
+		View focusView = null;
+
+		// Check for a valid password.
+		if (TextUtils.isEmpty(m_sUser)) {
+			m_userView.setError(getString(R.string.error_field_required));
+			focusView = m_userView;
+			cancel = true;
+		} 
+//		else if (m_sUser.length() < 4) {
+//			m_userView.setError(getString(R.string.error_invalid_password));
+//			focusView = m_userView;
+//			cancel = true;
+//		}
+
+		// Check for a valid email address.
+		if (TextUtils.isEmpty(m_sEmail)) {
+			mEmailView.setError(getString(R.string.error_field_required));
+			focusView = mEmailView;
+			cancel = true;
+		} else if (!m_sEmail.contains("@")) {
+			mEmailView.setError(getString(R.string.error_invalid_email));
+			focusView = mEmailView;
+			cancel = true;
+		}
+
+		if (cancel) {
+			// There was an error; don't attempt login and focus the first
+			// form field with an error.
+			focusView.requestFocus();
+		} else {
+			// Show a progress spinner, and kick off a background task to
+			// perform the user login attempt.
+			mLoginStatusMessageView.setText(R.string.login_progress_signing_in);
+			showProgress(true);
+			mAuthTask = new UserLoginTask();
+			mAuthTask.execute((Void) null);
+		}
+	}
+
+	/**
+	 * Shows the progress UI and hides the login form.
+	 */
+	@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
+	private void showProgress(final boolean show) {
+		// On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow
+		// for very easy animations. If available, use these APIs to fade-in
+		// the progress spinner.
+		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
+			int shortAnimTime = getResources().getInteger(
+					android.R.integer.config_shortAnimTime);
+
+			mLoginStatusView.setVisibility(View.VISIBLE);
+			mLoginStatusView.animate().setDuration(shortAnimTime)
+					.alpha(show ? 1 : 0)
+					.setListener(new AnimatorListenerAdapter() {
+						@Override
+						public void onAnimationEnd(Animator animation) {
+							mLoginStatusView.setVisibility(show ? View.VISIBLE
+									: View.GONE);
+						}
+					});
+
+			mLoginFormView.setVisibility(View.VISIBLE);
+			mLoginFormView.animate().setDuration(shortAnimTime)
+					.alpha(show ? 0 : 1)
+					.setListener(new AnimatorListenerAdapter() {
+						@Override
+						public void onAnimationEnd(Animator animation) {
+							mLoginFormView.setVisibility(show ? View.GONE
+									: View.VISIBLE);
+						}
+					});
+		} else {
+			// The ViewPropertyAnimator APIs are not available, so simply show
+			// and hide the relevant UI components.
+			mLoginStatusView.setVisibility(show ? View.VISIBLE : View.GONE);
+			mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
+		}
+	}
+
+	/**
+	 * Represents an asynchronous login/registration task used to authenticate
+	 * the user.
+	 */
+	public class UserLoginTask extends AsyncTask<Void, Void, Boolean> {
+		int errorcode;
+
+		@Override
+		protected Boolean doInBackground(Void... params) {
+			errorcode = Network.retrieve_pass(m_sUser, m_sEmail);
+			if (errorcode == Network.RESULT_TRUE)
+				return true;
+			else {
+				return false;
+			}
+
+		}
+
+		@Override
+		protected void onPostExecute(final Boolean success) {
+			Log.i("onPostExecute", "entry");
+			mAuthTask = null;
+			showProgress(false);
+			// if (netconnect == )
+			// {
+			//
+			// }
+
+			if (success) {
+				AlertDialog.Builder builder = new Builder(RetrievePasswordActivity.this);
+				builder.setMessage("A retrieve password letter has been send to your email.");
+
+				builder.setTitle("Retrieve successed");
+
+				builder.setPositiveButton("Ok", new OnClickListener() {
+
+					@Override
+					public void onClick(DialogInterface dialog, int which) {
+						dialog.dismiss();
+
+						RetrievePasswordActivity.this.finish();
+					}
+				});
+
+//				builder.setNegativeButton("取消", new OnClickListener() {
+//
+//					@Override
+//					public void onClick(DialogInterface dialog, int which) {
+//						dialog.dismiss();
+//					}
+//				});
+
+				builder.create().show();
+
+			} else {
+				switch (errorcode) {
+				case Network.RESULT_NET_NOTAVAILABLE: {
+					Toast toast = Toast.makeText(getApplicationContext(),
+							getText(R.string.msg_connection_none),
+							Toast.LENGTH_LONG);
+					toast.setGravity(Gravity.CENTER, 0, 0);
+					toast.show();
+					return;
+				}
+				case Network.RESULT_NET_ERROR: {
+					Toast toast = Toast.makeText(getApplicationContext(),
+							getText(R.string.msg_net_error), Toast.LENGTH_LONG);
+					toast.setGravity(Gravity.CENTER, 0, 0);
+					toast.show();
+					return;
+				}
+				case Network.RESULT_ERROR:
+				// case Network.RESULT_RESPONSE_NULL:
+				{
+					Toast toast = Toast.makeText(getApplicationContext(),
+							getText(R.string.msg_net_resulterror),
+							Toast.LENGTH_LONG);
+					toast.setGravity(Gravity.CENTER, 0, 0);
+					toast.show();
+					return;
+				}
+
+				case Network.RESULT_FALSE: {
+					AlertDialog.Builder builder = new Builder(RetrievePasswordActivity.this);
+					builder.setMessage("Invalid user name or email.");
+
+					builder.setTitle("Retrieve failed");
+
+					builder.setPositiveButton("Ok", new OnClickListener() {
+
+						@Override
+						public void onClick(DialogInterface dialog, int which) {
+							dialog.dismiss();
+
+//							RetrievePasswordActivity.this.finish();
+						}
+					});
+					builder.create().show();
+					return;
+
+				}
+				default: {
+					Toast toast = Toast.makeText(getApplicationContext(),
+							"An error occur on server code:" + errorcode,
+							Toast.LENGTH_LONG);
+					toast.setGravity(Gravity.CENTER, 0, 0);
+					toast.show();
+					break;
+				}
+				}
+			}
+		}
+
+		@Override
+		protected void onCancelled() {
+			mAuthTask = null;
+			showProgress(false);
+		}
+	}
+}

+ 3 - 2
Apex/src/com/usai/apex/SearchActivity.java

@@ -213,8 +213,9 @@ public class SearchActivity extends ListActivity implements OnClickListener
 	protected void onCreate(Bundle savedInstanceState)
 	{
 		super.onCreate(savedInstanceState);
-		user = getIntent().getStringExtra("user");
-		password = getIntent().getStringExtra("password");
+		user = ApexTrackingApplication.get_user();
+		
+		password = ApexTrackingApplication.get_pass();
 		function_name = getIntent().getStringExtra("function_name");
 		setContentView(R.layout.activity_search);
 		m_db = dbUtil.OpenDB(this, null, true);

+ 9 - 8
Apex/src/com/usai/apex/SearchListActivity.java

@@ -31,7 +31,7 @@ public class SearchListActivity extends Activity implements OnClickListener
 
 	LinearLayout ll_list;
 	String user = null;
-	String password = null;
+//	String password = null;
 	String function_name = null;
 	HashMap<String, Field> hashMap = new HashMap<String, Field>();
 	private class Field
@@ -49,8 +49,9 @@ public class SearchListActivity extends Activity implements OnClickListener
 	{
 		super.onCreate(savedInstanceState);
 		setContentView(R.layout.activity_search_list);
-		user = getIntent().getStringExtra("user");
-		password = getIntent().getStringExtra("password");
+		user = ApexTrackingApplication.get_user();
+		
+//		password = ApexTrackingApplication.get_pass();
 		function_name = getIntent().getStringExtra("function_name");
 
 		ll_list = (LinearLayout) findViewById(R.id.ll_list);
@@ -101,7 +102,7 @@ public class SearchListActivity extends Activity implements OnClickListener
 					@Override
 					public void onCheckedChanged(CompoundButton buttonView,
 							boolean isChecked)
-					{
+					{ 
 						String val;
 						if(isChecked)
 							val="true";
@@ -143,7 +144,7 @@ public class SearchListActivity extends Activity implements OnClickListener
 					@Override
 					public void afterTextChanged(Editable s)
 					{
-						// 将editText中改变的值设置的HashMap中
+						// 锟斤拷editText锟叫改憋拷锟街碉拷锟斤拷玫锟紿ashMap锟斤拷
 						String val = s.toString();
 						val.trim();
 						if (val.length() > 0)
@@ -184,8 +185,8 @@ public class SearchListActivity extends Activity implements OnClickListener
 		{
 			Intent intent = new Intent();
 			intent.setClass(this, ResultActivity.class);
-			intent.putExtra("user", user);
-			intent.putExtra("password", password);
+//			intent.putExtra("user", user);
+//			intent.putExtra("password", password);
 			intent.putExtra("function_name", function_name);
 			Bundle parms = new Bundle();
 			parms.putString("module_name", function_name);
@@ -220,7 +221,7 @@ public class SearchListActivity extends Activity implements OnClickListener
 		{
 		case R.id.action_custom_fields:
 			intent.setClass(this, CustomizeFieldsActivity.class);
-			intent.putExtra("user", user);
+//			intent.putExtra("user", user);
 			// intent.putExtra("password", password);
 			intent.putExtra("function_name", function_name);
 			intent.putExtra("behavior", Network.BEHAVIOR_SEARCH);

+ 0 - 8
Apex/src/com/usai/apex/StatusFragment.java

@@ -1,8 +0,0 @@
-package com.usai.apex;
-
-import android.support.v4.app.Fragment;
-
-public class StatusFragment extends Fragment
-{
-
-}

+ 177 - 173
Apex/src/com/usai/util/Network.java

@@ -57,8 +57,7 @@ import android.net.NetworkInfo;
 import android.os.Bundle;
 import android.util.Log;
 
-public class Network
-{
+public class Network {
 	public static final int BEHAVIOR_SEARCH = 0;
 	public static final int BEHAVIOR_RESULT = 1;
 
@@ -86,11 +85,10 @@ public class Network
 	public static String URL_UPDATE_AUTH = "https://ra.apexshipping.com/login.php";
 	public static String URL_REQUEST_COUNT = "https://ra.apexshipping.com/main.php";
 	public static String URL_REQUEST_RECORDS = "https://ra.apexshipping.com/main.php";
+	public static String URL_RETRIEVE_PASS = "https://ra.apexshipping.com/main.php";
 
-	private static HttpClient getNewHttpClient()
-	{
-		try
-		{
+	private static HttpClient getNewHttpClient() {
+		try {
 			KeyStore trustStore = KeyStore.getInstance(KeyStore
 					.getDefaultType());
 			trustStore.load(null, null);
@@ -112,22 +110,110 @@ public class Network
 					params, registry);
 
 			return new DefaultHttpClient(ccm, params);
-		}
-		catch (Exception e)
-		{
+		} catch (Exception e) {
 			return new DefaultHttpClient();
 		}
 	}
+	public static int change_pass(String oldpass, String newpass , String user) {
+		String TAG = "net_dbg@change_pass";
+		Log.d(TAG, "old:" + oldpass + ";new:" + newpass);
+		if (!Network.NetworkIsAvailable()) {
+			Log.d(TAG, "network not available!");
+			return Network.RESULT_NET_NOTAVAILABLE; // network not available
+		}
+		Bundle parms = new Bundle();
+		parms.putString("user", user);
+		parms.putString("oldpass", oldpass);
+		parms.putString("newpass", newpass);
+		parms.putString("module_name", "Change Password");
+		parms.putString("sessionid", ApexTrackingApplication.get_sessionid());
+		parms.putString("action", "handset_search");
+		String jstr = getJson(Network.URL_RETRIEVE_PASS, parms);
+		/*
+		 * error occur while get authorization info from server. include can not
+		 * reach server , wrong parms ,server get wrong , etc.
+		 */
+		if (jstr == null || jstr.length() <= 0) {
+			Log.d(TAG, "json is wrong");
+			return Network.RESULT_NET_ERROR;
+		}
+		JSONObject jsobj;
 
-	public static String getJson(String url, Bundle parms)
-	{
+		try {
+			jsobj = new JSONObject(jstr);
+			if (jsobj.length() > 0) 
+			{
+				if (jsobj.getInt("result") != Network.AP_USER_AUTH) 
+				{
+					// user not authorized return
+					Log.d(TAG, "USER NOT AUTHORIZED CODE=" + jsobj.getInt("result"));
+					return RESULT_FALSE;
+				}
+				return RESULT_TRUE;
+
+			}
+			return RESULT_NET_ERROR;
+		} catch (JSONException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		
+		return RESULT_NET_ERROR;
+	}
+
+	public static int retrieve_pass(String user, String email) {
+		String TAG = "net_dbg@retrieve_pass";
+		Log.d(TAG, "u:" + user + ";e:" + email);
+		if (!Network.NetworkIsAvailable()) {
+			Log.d(TAG, "network not available!");
+			return Network.RESULT_NET_NOTAVAILABLE; // network not available
+		}
+		Bundle parms = new Bundle();
+		parms.putString("user", user);
+		parms.putString("email", email);
+		parms.putString("module_name", "Retrieve Password");
+		parms.putString("action", "handset_search");
+		String jstr = getJson(Network.URL_RETRIEVE_PASS, parms);
+		/*
+		 * error occur while get authorization info from server. include can not
+		 * reach server , wrong parms ,server get wrong , etc.
+		 */
+		if (jstr == null || jstr.length() <= 0) {
+			Log.d(TAG, "json is wrong");
+			return Network.RESULT_NET_ERROR;
+		}
+		JSONObject jsobj;
+
+		// array = new JSONArray(json);
+		try {
+			jsobj = new JSONObject(jstr);
+			if (jsobj.length() > 0) 
+			{
+				if (jsobj.getInt("result") != Network.AP_USER_AUTH) 
+				{
+					// user not authorized return
+					Log.d(TAG, "USER NOT AUTHORIZED CODE=" + jsobj.getInt("result"));
+					return RESULT_FALSE;
+				}
+				return RESULT_TRUE;
+
+			}
+			return RESULT_NET_ERROR;
+		} catch (JSONException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		
+		return RESULT_NET_ERROR;
+	}
+
+	public static String getJson(String url, Bundle parms) {
 		String TAG = "net_dbg@GetJson";
 		Log.d(TAG, "entry");
 
 		// if (true)
 		// return fakegetJson(url);
-		try
-		{
+		try {
 			// BasicHttpParams httpParams = new BasicHttpParams();
 			// HttpConnectionParams.setConnectionTimeout(httpParams,
 			// REQUEST_TIMEOUT);
@@ -140,13 +226,10 @@ public class Network
 
 			Set<String> keys = parms.keySet();
 			Log.d(TAG, "================parms============");
-			for (String key : keys)
-			{
-				if (key.contains("_file"))
-				{
+			for (String key : keys) {
+				if (key.contains("_file")) {
 					;
-				}
-				else
+				} else
 					reqEntity.addPart(key, new StringBody(parms.get(key)
 							.toString()));
 				Log.d(TAG, "key=" + key + "    val="
@@ -157,24 +240,20 @@ public class Network
 			post.setEntity(reqEntity);
 			HttpResponse response = client.execute(post);
 			int statucode = response.getStatusLine().getStatusCode();
-			if (statucode == HttpStatus.SC_OK)
-			{
+			if (statucode == HttpStatus.SC_OK) {
 				HttpEntity resEntity = response.getEntity();
-				if (resEntity != null)
-				{
+				if (resEntity != null) {
 					Log.d(TAG,
 							"Response: content len==>"
 									+ resEntity.getContentLength());
 					InputStream is = resEntity.getContent();
-					try
-					{
+					try {
 
 						BufferedReader br = new BufferedReader(
 								new InputStreamReader(is, "utf-8"), 8);
 						StringBuilder sb = new StringBuilder();
 						String line = null;
-						while ((line = br.readLine()) != null)
-						{
+						while ((line = br.readLine()) != null) {
 							sb.append(line + "\n");
 						}
 
@@ -182,29 +261,22 @@ public class Network
 						Log.d(TAG, sb.toString());
 						Log.d(TAG, "Response: content end");
 
-						if (sb.length() <= 0)
-						{
+						if (sb.length() <= 0) {
 
 							return null;
 						}
 						return sb.toString();
 
-					}
-					catch (Exception e)
-					{
+					} catch (Exception e) {
 						Log.e(TAG, e.toString());
 						return null;
 						// TODO: handle exception
-					}
-					finally
-					{
+					} finally {
 						is.close();
 
 					}
 
-				}
-				else
-				{
+				} else {
 					/*
 					 * resEntity is null
 					 */
@@ -212,28 +284,23 @@ public class Network
 					return null;
 				}
 
-			}
-			else
-			{
+			} else {
 				/*
 				 * Http error; out put error code;
 				 */
 				Log.d(TAG, "HTTP " + statucode);
 
 				HttpEntity resEntity = response.getEntity();
-				if (resEntity != null)
-				{
+				if (resEntity != null) {
 
 					InputStream is = resEntity.getContent();
-					try
-					{
+					try {
 
 						BufferedReader br = new BufferedReader(
 								new InputStreamReader(is, "utf-8"), 8);
 						StringBuilder sb = new StringBuilder();
 						String line = null;
-						while ((line = br.readLine()) != null)
-						{
+						while ((line = br.readLine()) != null) {
 							sb.append(line + "\n");
 						}
 
@@ -241,22 +308,16 @@ public class Network
 						Log.d(TAG, sb.toString());
 						Log.d(TAG, "Response: content end");
 						return null;
-					}
-					catch (Exception e)
-					{
+					} catch (Exception e) {
 						Log.e(TAG, e.toString());
 						return null;
 						// TODO: handle exception
-					}
-					finally
-					{
+					} finally {
 						is.close();
 
 					}
 
-				}
-				else
-				{
+				} else {
 					/*
 					 * resEntity is null
 					 */
@@ -265,44 +326,35 @@ public class Network
 				}
 			}
 
-		}
-		catch (ConnectTimeoutException e)
-		{
+		} catch (ConnectTimeoutException e) {
 			Log.d(TAG, "request time out");
 			return null;
 
-		}
-		catch (Exception e)
-		{
+		} catch (Exception e) {
 			Log.d(TAG, e.toString());
 			return null;
 		}
 
 	}
 
-	public static int get_recordcount(String name, String password, Bundle parms)
-	{
+	public static int get_recordcount(String name, String password, Bundle parms) {
 		String TAG = "net_dbg@get_recordcount";
 
 		parms.putString("action", "handset_search_count");
 		parms.putString("sessionid", ApexTrackingApplication.get_sessionid());
 		Log.d(TAG, "sessionid=" + ApexTrackingApplication.get_sessionid());
 		String jstr = getJson(Network.URL_REQUEST_COUNT, parms);
-		if (jstr == null || jstr.length() <= 0)
-		{
+		if (jstr == null || jstr.length() <= 0) {
 			Log.d(TAG, "json is wrong");
 			return Network.RESULT_NET_ERROR;
 		}
 		JSONObject jsobj;
 
 		// array = new JSONArray(json);
-		try
-		{
+		try {
 			jsobj = new JSONObject(jstr);
-			if (jsobj.length() > 0)
-			{
-				if (jsobj.getInt("result") != Network.AP_USER_AUTH)
-				{
+			if (jsobj.length() > 0) {
+				if (jsobj.getInt("result") != Network.AP_USER_AUTH) {
 					// session expired
 					Log.d(TAG,
 							"USER NOT AUTHORIZED CODE="
@@ -321,20 +373,14 @@ public class Network
 					// + jsobj.getInt("result"));
 					// return RESULT_SESSION_EXPIRED;
 					// }
-				}
-				else
-				{
+				} else {
 					return jsobj.getInt("count");
 				}
-			}
-			else
-			{
+			} else {
 				Log.d(TAG, "json is wrong");
 				return Network.RESULT_NET_ERROR;
 			}
-		}
-		catch (JSONException e)
-		{
+		} catch (JSONException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
@@ -342,8 +388,7 @@ public class Network
 		return RESULT_ERROR;
 	}
 
-	public static String get_records(String name, String password, Bundle parms)
-	{
+	public static String get_records(String name, String password, Bundle parms) {
 		String TAG = "net_dbg@get_records";
 		// parms.putString("user", name);
 		// parms.putString("password", password);
@@ -355,21 +400,17 @@ public class Network
 		parms.putString("action", "handset_search");
 		parms.putString("sessionid", ApexTrackingApplication.get_sessionid());
 		String jstr = getJson(Network.URL_REQUEST_RECORDS, parms);
-		if (jstr == null || jstr.length() <= 0)
-		{
+		if (jstr == null || jstr.length() <= 0) {
 			Log.d(TAG, "json is wrong");
 			return null;
 		}
 		JSONObject jsobj;
 		//
 		// array = new JSONArray(json);
-		try
-		{
+		try {
 			jsobj = new JSONObject(jstr);
-			if (jsobj.length() > 0)
-			{
-				if (jsobj.getInt("result") != Network.AP_USER_AUTH)
-				{
+			if (jsobj.length() > 0) {
+				if (jsobj.getInt("result") != Network.AP_USER_AUTH) {
 					// session expired
 					Log.d(TAG,
 							"USER NOT AUTHORIZED CODE="
@@ -388,20 +429,14 @@ public class Network
 					// + jsobj.getInt("result"));
 					// return null;
 					// }
-				}
-				else
-				{
+				} else {
 					return jstr;
 				}
-			}
-			else
-			{
+			} else {
 				Log.d(TAG, "json is wrong");
 				return null;
 			}
-		}
-		catch (JSONException e)
-		{
+		} catch (JSONException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
@@ -409,27 +444,23 @@ public class Network
 
 		// return RESULT_ERROR;
 	}
-	public static String get_detail( Bundle parms)
-	{
+
+	public static String get_detail(Bundle parms) {
 		String TAG = "net_dbg@get_detail";
 		parms.putString("action", "handset_search");
 		parms.putString("sessionid", ApexTrackingApplication.get_sessionid());
 		String jstr = getJson(Network.URL_REQUEST_RECORDS, parms);
-		if (jstr == null || jstr.length() <= 0)
-		{
+		if (jstr == null || jstr.length() <= 0) {
 			Log.d(TAG, "json is wrong");
 			return null;
 		}
 		JSONObject jsobj;
 		//
 		// array = new JSONArray(json);
-		try
-		{
+		try {
 			jsobj = new JSONObject(jstr);
-			if (jsobj.length() > 0)
-			{
-				if (jsobj.getInt("result") != Network.AP_USER_AUTH)
-				{
+			if (jsobj.length() > 0) {
+				if (jsobj.getInt("result") != Network.AP_USER_AUTH) {
 					// session expired
 					Log.d(TAG,
 							"USER NOT AUTHORIZED CODE="
@@ -448,35 +479,27 @@ public class Network
 					// + jsobj.getInt("result"));
 					// return null;
 					// }
-				}
-				else
-				{
+				} else {
 					return jstr;
 				}
-			}
-			else
-			{
+			} else {
 				Log.d(TAG, "json is wrong");
 				return null;
 			}
-		}
-		catch (JSONException e)
-		{
+		} catch (JSONException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 		return null;
-		
+
 		// return RESULT_ERROR;
 	}
 
-	public static int get_Auth(String name, String password)
-	{
+	public static int get_Auth(String name, String password) {
 
 		String TAG = "net_dbg@get_Auth";
 		Log.d(TAG, "u:" + name + ";p:" + password);
-		if (!Network.NetworkIsAvailable())
-		{
+		if (!Network.NetworkIsAvailable()) {
 			Log.d(TAG, "network not available!");
 			return Network.RESULT_NET_NOTAVAILABLE; // network not available
 		}
@@ -493,17 +516,15 @@ public class Network
 		 * error occur while get authorization info from server. include can not
 		 * reach server , wrong parms ,server get wrong , etc.
 		 */
-		if (jstr == null || jstr.length() <= 0)
-		{
+		if (jstr == null || jstr.length() <= 0) {
 			Log.d(TAG, "json is wrong");
 			return Network.RESULT_NET_ERROR;
 		}
 
-		return parse_authinfo(jstr, name);
+		return parse_authinfo(jstr, name,password);
 	}
 
-	private static int parse_authinfo(String json, String user)
-	{
+	private static int parse_authinfo(String json, String user,String pass) {
 		String TAG = "net_dbg@parse_authinfo";
 		Log.d(TAG, json);
 		// JSONArray array;
@@ -515,14 +536,12 @@ public class Network
 
 			// array = new JSONArray(json);
 			jsobj = new JSONObject(json);
-			if (jsobj.length() > 0)
-			{
+			if (jsobj.length() > 0) {
 				// JSONObject objresult = jsobj.get.getJSONObject(0);// result
 				// the
 				// server result
 				// ;
-				if (jsobj.getInt("result") != Network.AP_USER_AUTH)
-				{
+				if (jsobj.getInt("result") != Network.AP_USER_AUTH) {
 					// user not authorized return
 					Log.d(TAG,
 							"USER NOT AUTHORIZED CODE="
@@ -537,12 +556,13 @@ public class Network
 				// server;
 				ApexTrackingApplication.put_sessionid(objheader
 						.getString("sessionid"));
+				ApexTrackingApplication.put_user(user);
+				ApexTrackingApplication.put_password(pass);
 				Log.d(TAG, "sessionid=" + objheader.getString("sessionid"));
 				// JSONObject objupdate = array.getJSONObject(3); // whether
 				// need
 				// update ;
-				if (objheader.getBoolean("update") == false)
-				{
+				if (objheader.getBoolean("update") == false) {
 					// no update on the server;
 					return RESULT_TRUE;
 				}
@@ -591,6 +611,11 @@ public class Network
 						field_name = field_info.getString("name");
 						field_type = field_info.getString("type");
 						alias_name = field_info.getString("alias");
+						priority = field_info.getInt("priority");
+						if (priority == 999)
+							show = 0;
+						else
+							show = 1;
 						int id = dbUtil.get_recordid(db, "fields_info",
 								"name='" + field_name + "' and behavior="
 										+ behavior + " and function_name='"
@@ -600,9 +625,7 @@ public class Network
 						{
 							db.execSQL("update fields_info set abandon = 0 where _id ="
 									+ id);
-						}
-						else
-						{
+						} else {
 							stat.bindString(1, field_name);
 							stat.bindString(2, alias_name);
 							stat.bindString(3, field_type);
@@ -636,9 +659,7 @@ public class Network
 						{
 							db.execSQL("update fields_info set abandon = 0 where _id ="
 									+ id);
-						}
-						else
-						{
+						} else {
 							stat.bindString(1, field_name);
 							stat.bindString(2, alias_name);
 							stat.bindString(3, field_type);
@@ -660,18 +681,15 @@ public class Network
 						String actionname = (String) itactions.next();
 						int action_priority = objbehavior.getInt(actionname);
 
-
 						int id = dbUtil.get_recordid(db, "actions_info",
 								"name='" + actionname + "' and function_name='"
 										+ func_name + "' and user='" + user
 										+ "'");
 						if (id >= 0) // record exist;
 						{
-							db.execSQL("update actions_info set abandon = 0 , priority="+action_priority+" where _id ="
-									+ id);
-						}
-						else
-						{
+							db.execSQL("update actions_info set abandon = 0 , priority="
+									+ action_priority + " where _id =" + id);
+						} else {
 							stat1.bindString(1, actionname);
 							stat1.bindString(2, func_name);
 							stat1.bindString(3, user);
@@ -690,15 +708,11 @@ public class Network
 			}
 			Log.d(TAG, "json is wrong");
 			return RESULT_USERAUTH_ERROR;
-		}
-		catch (JSONException e1)
-		{
+		} catch (JSONException e1) {
 			// TODO Auto-generated catch block
 			e1.printStackTrace();
 			Log.d(TAG, "json is wrong");
-		}
-		finally
-		{
+		} finally {
 			dbUtil.CloseDB(db);
 		}
 
@@ -783,16 +797,14 @@ public class Network
 		// .getSystemService(Context.CONNECTIVITY_SERVICE);
 
 		NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
-		if (networkInfo == null)
-		{
+		if (networkInfo == null) {
 			Log.d(TAG, "can not get Active NetworkInfo!");
 			// dbgUtil.Log(Log.DEBUG, "Current Network info",
 			// "can not get Active NetworkInfo!");
 			return false;
 		}
 		NetworkInfo.State netState = networkInfo.getState();
-		if (netState != NetworkInfo.State.CONNECTED)
-		{
+		if (netState != NetworkInfo.State.CONNECTED) {
 			Log.d(TAG, "not Connected!State=" + netState);
 			// dbgUtil.Log(Log.DEBUG, "Current Network info",
 			// "not Connected!State=" + netState);
@@ -823,21 +835,17 @@ public class Network
 		return bavailable;
 	}
 
-	public static class SSLSocketFactoryEx extends SSLSocketFactory
-	{
+	public static class SSLSocketFactoryEx extends SSLSocketFactory {
 
 		SSLContext sslContext = SSLContext.getInstance("TLS");
 
 		public SSLSocketFactoryEx(KeyStore truststore)
 				throws NoSuchAlgorithmException, KeyManagementException,
-				KeyStoreException, UnrecoverableKeyException
-		{
+				KeyStoreException, UnrecoverableKeyException {
 			super(truststore);
 
-			TrustManager tm = new X509TrustManager()
-			{
-				public java.security.cert.X509Certificate[] getAcceptedIssuers()
-				{
+			TrustManager tm = new X509TrustManager() {
+				public java.security.cert.X509Certificate[] getAcceptedIssuers() {
 					return null;
 				}
 
@@ -845,16 +853,14 @@ public class Network
 				public void checkClientTrusted(
 						java.security.cert.X509Certificate[] chain,
 						String authType)
-						throws java.security.cert.CertificateException
-				{
+						throws java.security.cert.CertificateException {
 				}
 
 				@Override
 				public void checkServerTrusted(
 						java.security.cert.X509Certificate[] chain,
 						String authType)
-						throws java.security.cert.CertificateException
-				{
+						throws java.security.cert.CertificateException {
 				}
 			};
 			sslContext.init(null, new TrustManager[] { tm }, null);
@@ -862,15 +868,13 @@ public class Network
 
 		@Override
 		public Socket createSocket(Socket socket, String host, int port,
-				boolean autoClose) throws IOException, UnknownHostException
-		{
+				boolean autoClose) throws IOException, UnknownHostException {
 			return sslContext.getSocketFactory().createSocket(socket, host,
 					port, autoClose);
 		}
 
 		@Override
-		public Socket createSocket() throws IOException
-		{
+		public Socket createSocket() throws IOException {
 			return sslContext.getSocketFactory().createSocket();
 		}
 	}