Ray Zhang 12 年之前
父節點
當前提交
b56e98dc8e
共有 40 個文件被更改,包括 2495 次插入936 次删除
  1. 115 16
      Apex/AndroidManifest.xml
  2. 二進制
      Apex/libs/baidumapapi_v2_4_0.jar
  3. 3 0
      Apex/lint.xml
  4. 338 338
      Apex/proguard/dump.txt
  5. 11 13
      Apex/proguard/usage.txt
  6. 4 4
      Apex/res/layout/activity_about.xml
  7. 15 0
      Apex/res/layout/activity_announcements.xml
  8. 4 4
      Apex/res/layout/activity_apex.xml
  9. 4 4
      Apex/res/layout/activity_cargo_tracking.xml
  10. 8 0
      Apex/res/layout/activity_location_detail.xml
  11. 4 1
      Apex/res/layout/activity_result.xml
  12. 7 0
      Apex/res/layout/activity_web.xml
  13. 32 0
      Apex/res/layout/announcement_item.xml
  14. 28 0
      Apex/res/layout/fragment_tools.xml
  15. 15 0
      Apex/res/layout/fragment_web.xml
  16. 1 1
      Apex/res/layout/new_function_select.xml
  17. 16 0
      Apex/res/layout/view_page_footer.xml
  18. 11 0
      Apex/res/menu/web.xml
  19. 10 0
      Apex/res/values-w820dp/dimens.xml
  20. 28 26
      Apex/res/values/strings.xml
  21. 2 1
      Apex/src/com/usai/apex/AboutActivity.java
  22. 206 0
      Apex/src/com/usai/apex/Alarmreceiver.java
  23. 413 0
      Apex/src/com/usai/apex/AnnouncementActivity.java
  24. 83 40
      Apex/src/com/usai/apex/ApexActivity.java
  25. 28 4
      Apex/src/com/usai/apex/ApexTrackingApplication.java
  26. 117 0
      Apex/src/com/usai/apex/BaiduMapFragment.java
  27. 47 0
      Apex/src/com/usai/apex/BootBroadcastReceiver.java
  28. 2 2
      Apex/src/com/usai/apex/FunctionSelectActivity.java
  29. 152 27
      Apex/src/com/usai/apex/InnerMapActivity.java
  30. 147 19
      Apex/src/com/usai/apex/LocationDetailActivity.java
  31. 1 1
      Apex/src/com/usai/apex/LoginFragment.java
  32. 7 7
      Apex/src/com/usai/apex/ResultActivity.java
  33. 2 2
      Apex/src/com/usai/apex/SearchListActivity.java
  34. 25 0
      Apex/src/com/usai/apex/ServiceLocationFragment.java
  35. 81 0
      Apex/src/com/usai/apex/ToolsFragment.java
  36. 30 0
      Apex/src/com/usai/apex/WebActivity.java
  37. 465 128
      Apex/src/com/usai/util/Network.java
  38. 6 0
      Apex/src/com/usai/util/SqlOpenHelper.java
  39. 18 0
      Apex/src/com/usai/util/commonUtil.java
  40. 9 298
      Apex/src/com/usai/util/dbUtil.java

+ 115 - 16
Apex/AndroidManifest.xml

@@ -1,17 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.usai.apex"
-    android:versionCode="2"
-    android:versionName="A140310" >
+    android:versionCode="3"
+    android:versionName="A1403114" >
 
     <!-- Copied from Google Maps Library/AndroidManifest.xml. -->
     <uses-sdk
-        android:maxSdkVersion="19"
         android:minSdkVersion="14"
-        android:targetSdkVersion="17" />
+        android:targetSdkVersion="18" />
 
+    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.READ_CONTACTS" />
     <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" />
@@ -23,18 +25,92 @@
         android:glEsVersion="0x00020000"
         android:required="true" />
     <!-- End of copy. -->
+
+
+    <!-- Baidu Map API -->
+
+    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
+
+    <!--
+    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
+    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
+    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
+    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
+
+    <permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >
+    </permission>
+
+    <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >
+    </uses-permission>
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
+    </uses-permission>
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
+    </uses-permission>
+    <uses-permission android:name="android.permission.INTERNET" >
+    </uses-permission>
+    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" >
+    </uses-permission>
+    -->
+    <!-- <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission> -->
+    <!--
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
+    </uses-permission>
+    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
+    <uses-permission android:name="android.permission.WAKE_LOCK" >
+    </uses-permission>
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
+   
+    <uses-permission android:name="android.permission.ACCESS_GPS" />
+    -->
+
+
+    <!--
+    <uses-permission android:name="android.permission.CALL_PHONE" />
+    <uses-permission android:name="android.permission.READ_SMS" />
+    <uses-permission android:name="android.permission.SEND_SMS" />
+    -->
+    <!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? -->
+    <!--
+        <uses-permission android:name="android.permission.GET_TASKS" />
+     <uses-permission android:name="android.permission.CAMERA" >
+    </uses-permission>
+    <uses-permission android:name="android.permission.RECORD_AUDIO" >
+    </uses-permission>
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
+    </uses-permission>
+    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
+    <uses-permission android:name="android.permission.BROADCAST_STICKY" />
+    -->
+
+
+    <!-- 来电消音 -->
+    <!--
+    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" >
+    </uses-permission>
+    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
+    -->
     <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
+
+        <!-- release key -->
+
+
+        <!--
+             <meta-data
             android:name="com.google.android.maps.v2.API_KEY"
             android:value="AIzaSyDdbk58Lx6QzaXcB_hNpSHVp3l_CJeNpoo" />
-<!--debug key         <meta-data
+        -->
+        <meta-data
             android:name="com.google.android.maps.v2.API_KEY"
-            android:value="AIzaSyARPN7VaYqWGe1PsgGqp1QlhOoTdiwTqq0" /> -->
+            android:value="AIzaSyARPN7VaYqWGe1PsgGqp1QlhOoTdiwTqq0" />
+        <!-- debug key -->
         <meta-data
             android:name="com.google.android.gms.version"
             android:value="@integer/google_play_services_version" />
@@ -43,7 +119,9 @@
             android:name="com.usai.apex.DetailActivity"
             android:label="@string/title_activity_detail"
             android:screenOrientation="landscape" >
-      <!--       <meta-data
+
+            <!--
+                 <meta-data
                 android:name="android.support.PARENT_ACTIVITY"
                 android:value="android.support.v4.app.FragmentActivity" />
 
@@ -83,13 +161,17 @@
             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.AnnouncementActivity"
+            android:label="@string/title_activity_announcements"
+            android:screenOrientation="portrait" >
+        </activity>
         <activity
             android:name="com.usai.apex.CustomizeFieldsActivity"
             android:label="@string/title_activity_customize_fields"
@@ -112,7 +194,7 @@
             android:label="@string/title_activity_help"
             android:screenOrientation="portrait"
             android:theme="@android:style/Theme.Holo.NoActionBar" >
-        </activity> 
+        </activity>
         <activity
             android:name="com.usai.apex.CargoTrackingActivity"
             android:label="@string/title_activity_cargo_tracking" >
@@ -125,8 +207,8 @@
         </activity>
         <activity
             android:name="com.usai.apex.RetrievePasswordActivity"
-            android:screenOrientation="portrait"
-            android:label="@string/title_activity_retrieve_password" >
+            android:label="@string/title_activity_retrieve_password"
+            android:screenOrientation="portrait" >
         </activity>
         <activity
             android:name="com.usai.apex.ChangePasswordActivity"
@@ -136,10 +218,27 @@
         </activity>
         <activity
             android:name="com.usai.apex.AboutActivity"
-            android:screenOrientation="portrait"
-            android:label="@string/title_activity_about" 
-            >
+            android:label="@string/title_activity_about"
+            android:screenOrientation="portrait" >
+        </activity>
+        <activity
+            android:name="com.usai.apex.WebActivity"
+            android:label="@string/title_activity_web" >
         </activity>
+
+        <receiver
+            android:name="com.usai.apex.BootBroadcastReceiver"
+            android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
+            <intent-filter>
+                <action android:name="android.intent.action.BOOT_COMPLETED" />
+                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
+            </intent-filter>
+        </receiver>
+        <receiver android:name="com.usai.apex.Alarmreceiver" >
+            <intent-filter>
+                <action android:name="com.usai.apex.push" />
+            </intent-filter>
+        </receiver>
     </application>
 
-</manifest>
+</manifest>

二進制
Apex/libs/baidumapapi_v2_4_0.jar


+ 3 - 0
Apex/lint.xml

@@ -2,6 +2,9 @@
 <lint>
     <issue id="ContentDescription" severity="ignore" />
     <issue id="ExtraTranslation" severity="warning" />
+    <issue id="HardcodedDebugMode">
+        <ignore path="AndroidManifest.xml" />
+    </issue>
     <issue id="HardcodedText">
         <ignore path="res/layout/fragment_direct_tracking.xml" />
     </issue>

文件差異過大導致無法顯示
+ 338 - 338
Apex/proguard/dump.txt


+ 11 - 13
Apex/proguard/usage.txt

@@ -3438,7 +3438,7 @@ com.usai.apex.CustomizeFieldsActivity:
 com.usai.apex.CustomizeFieldsActivity$DragListAdapter:
     196:196:public java.util.List getList()
 com.usai.apex.DetailFragment$MyWebViewClient:
-    589:590:public boolean shouldOverviewUrlLoading(android.webkit.WebView,java.lang.String)
+    583:584:public boolean shouldOverviewUrlLoading(android.webkit.WebView,java.lang.String)
 com.usai.apex.DirectTrackingFragment
 com.usai.apex.LocationDetail:
     private static final long serialVersionUID
@@ -3457,15 +3457,13 @@ com.usai.apex.R$string
 com.usai.apex.R$style
 com.usai.apex.R$styleable
 com.usai.apex.R$xml
-com.usai.apex.SearchActivity:
-    304:306:private void RefreshList()
 com.usai.apex.SearchResult:
     private static final long serialVersionUID
 com.usai.util.Crypto:
     private static final java.lang.String HEX
     21:21:public Crypto()
-    97:97:public static java.lang.String toHex(java.lang.String)
-    102:102:public static java.lang.String fromHex(java.lang.String)
+    96:96:public static java.lang.String toHex(java.lang.String)
+    101:101:public static java.lang.String fromHex(java.lang.String)
 com.usai.util.Network:
     public static final int BEHAVIOR_SEARCH
     public static final int BEHAVIOR_RESULT
@@ -3481,19 +3479,19 @@ com.usai.util.Network:
     public static final int RESULT_UPDATE_USERAUTH_ERROR
     public static final int RESULT_SESSION_EXPIRED
     public static final int RESULT_VER_LOW
-    61:61:public Network()
+    57:57:public Network()
 com.usai.util.SqlOpenHelper:
     21:21:public int get_RecordCount(java.lang.String)
 com.usai.util.commonUtil:
     5:5:public commonUtil()
 com.usai.util.dbUtil:
-    15:15:public dbUtil()
-    117:126:public static boolean isContentExist(android.content.Context,android.net.Uri,java.lang.String)
-    403:404:public static void removeRecords(android.database.sqlite.SQLiteDatabase,java.lang.String,java.lang.String)
-    410:445:public static long addRecordsFromCursor(android.database.sqlite.SQLiteDatabase,java.lang.String,android.database.Cursor,java.lang.String[],java.lang.String[],boolean,boolean)
-    467:491:public static boolean isTableEmpty(android.database.sqlite.SQLiteDatabase,java.lang.String)
-    497:519:public static boolean isRecordExist(android.database.sqlite.SQLiteDatabase,java.lang.String,java.lang.String)
-    545:554:public static int get_count(android.database.sqlite.SQLiteDatabase,java.lang.String,java.lang.String)
+    13:13:public dbUtil()
+    115:124:public static boolean isContentExist(android.content.Context,android.net.Uri,java.lang.String)
+    401:402:public static void removeRecords(android.database.sqlite.SQLiteDatabase,java.lang.String,java.lang.String)
+    408:443:public static long addRecordsFromCursor(android.database.sqlite.SQLiteDatabase,java.lang.String,android.database.Cursor,java.lang.String[],java.lang.String[],boolean,boolean)
+    465:489:public static boolean isTableEmpty(android.database.sqlite.SQLiteDatabase,java.lang.String)
+    495:517:public static boolean isRecordExist(android.database.sqlite.SQLiteDatabase,java.lang.String,java.lang.String)
+    543:552:public static int get_count(android.database.sqlite.SQLiteDatabase,java.lang.String,java.lang.String)
 com.usai.util.dbgUtil
 com.usai.util.package-info
 org.apache.http.entity.mime.Header:

+ 4 - 4
Apex/res/layout/activity_about.xml

@@ -15,7 +15,7 @@
         android:orientation="vertical" >
 
         <ImageView
-            android:id="@+id/imageView1"
+            android:id="@+id/iv_thumb"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:src="@drawable/apexlogo_2" />
@@ -31,18 +31,18 @@
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
             android:gravity="center_horizontal"
-            android:text="version:" 
+            android:text="@string/str_version" 
            	android:textSize="20sp"/>
 
         <TextView
-            android:id="@+id/textView2"
+            android:id="@+id/tv_content"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
             android:layout_marginBottom="144dp"
             android:autoLink="email"
             android:gravity="center_horizontal"
-            android:text="Tech support:\nusairedant@united-us.net" 
+            android:text="@string/str_tech_support"
             android:textSize="20sp"/>
     </LinearLayout>
 

+ 15 - 0
Apex/res/layout/activity_announcements.xml

@@ -0,0 +1,15 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".AnnouncementActivity" >
+
+    <ListView
+        android:id="@android:id/list"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentTop="true" >
+    </ListView>
+
+</RelativeLayout>

+ 4 - 4
Apex/res/layout/activity_apex.xml

@@ -8,7 +8,7 @@
         android:layout_height="fill_parent" >
 
         <ImageView
-            android:id="@+id/imageView1"
+            android:id="@+id/iv_thumb"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:layout_alignParentTop="true"
@@ -37,12 +37,12 @@
                 android:layout_height="fill_parent" >
             </FrameLayout>
 
- <!--             <FrameLayout
-                 android:id="@+id/tabtest"
+              <FrameLayout
+                 android:id="@+id/tab2"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent" >
 
-            </FrameLayout>  -->
+            </FrameLayout> 
 
             <FrameLayout
                 android:id="@+id/tab3"

+ 4 - 4
Apex/res/layout/activity_cargo_tracking.xml

@@ -10,10 +10,10 @@
     tools:context=".CargoTrackingActivity" >
 
     <TextView
-        android:id="@+id/textView2"
+        android:id="@+id/tv_content"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:text="Search by"
+        android:text="@string/str_search_by"
         android:textAppearance="?android:attr/textAppearanceMedium" />
 
     <RadioGroup
@@ -56,14 +56,14 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_weight="1"
-            android:text="Cancel" />
+            android:text="@string/str_cancel"/>
 
         <Button
             android:id="@+id/btn_search"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_weight="1"
-            android:text="Search" />
+            android:text="@string/str_search" />
     </LinearLayout>
 
 </LinearLayout>

+ 8 - 0
Apex/res/layout/activity_location_detail.xml

@@ -36,6 +36,7 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="tel" 
+        android:gravity="center"
         android:autoLink="phone"/>
 
     <TextView
@@ -43,6 +44,7 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="fax" 
+        android:gravity="center"
         android:padding="5dp"
         />
 
@@ -64,4 +66,10 @@
         android:padding="5dp"
         android:gravity="center"/>
 
+    <Button
+        android:id="@+id/btn_addcontact"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="Add to contact" />
+
 </LinearLayout>

+ 4 - 1
Apex/res/layout/activity_result.xml

@@ -78,11 +78,14 @@
 
         <Button
             android:id="@+id/btn_next"
+            style="@android:attr/buttonBarButtonStyle"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_weight="1"
-            style="@android:attr/buttonBarButtonStyle"
+
+            android:enabled="false"
             android:text="Next Page" />
+
     </LinearLayout>
 
     <TextView

+ 7 - 0
Apex/res/layout/activity_web.xml

@@ -0,0 +1,7 @@
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/container"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="com.usai.apex.WebActivity"
+    tools:ignore="MergeRootFrame" />

+ 32 - 0
Apex/res/layout/announcement_item.xml

@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" >
+
+    <ImageView
+        android:id="@+id/iv_thumb"
+        android:layout_width="60dp"
+        android:layout_height="60dp"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentTop="true"
+        android:src="@drawable/ic_launcher" />
+
+    <TextView
+        android:id="@+id/tv_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentTop="true"
+        android:layout_marginLeft="24dp"
+        android:layout_toRightOf="@+id/iv_thumb"
+        android:text="Medium Text"
+        android:textAppearance="?android:attr/textAppearanceMedium" />
+
+    <TextView
+        android:id="@+id/tv_content"
+        android:layout_width="fill_parent"
+        android:layout_height="35dp"
+        android:layout_alignLeft="@+id/tv_title"
+        android:layout_below="@+id/tv_title"
+        android:text="TextView" />
+
+</RelativeLayout>

+ 28 - 0
Apex/res/layout/fragment_tools.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content" >
+
+    <ImageView
+        android:id="@+id/iv_icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/ic_launcher" />
+
+    <TextView
+        android:id="@+id/tv_toolname"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:layout_weight="1"
+        android:gravity="center"
+        android:text="Tool name" />
+
+    <ImageView
+        android:id="@+id/imageView3"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:src="@android:drawable/ic_menu_info_details" />
+
+</LinearLayout>

+ 15 - 0
Apex/res/layout/fragment_web.xml

@@ -0,0 +1,15 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+
+    tools:context="com.usai.apex.WebActivity$PlaceholderFragment" >
+
+    <WebView
+        android:id="@+id/wv_content"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_alignParentTop="true"
+        android:layout_centerHorizontal="true" />
+
+</RelativeLayout>

+ 1 - 1
Apex/res/layout/new_function_select.xml

@@ -8,7 +8,7 @@
     tools:context=".FunctionSelectActivity" >
 
     <TextView
-        android:id="@+id/textView2"
+        android:id="@+id/tv_content"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="Container Status"

+ 16 - 0
Apex/res/layout/view_page_footer.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>  
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
+    android:layout_width="match_parent"  
+    android:layout_height="wrap_content"  
+    android:orientation="vertical"   
+    >  
+  
+    <TextView  
+        android:id="@+id/text_page"  
+        android:layout_width="fill_parent"  
+        android:layout_height="wrap_content"  
+        android:text="More..."  
+        android:padding="10dp" 
+        android:gravity="center"/>  
+  
+</LinearLayout>  

+ 11 - 0
Apex/res/menu/web.xml

@@ -0,0 +1,11 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:context="com.usai.apex.WebActivity" >
+
+    <item
+        android:id="@+id/action_settings"
+        android:orderInCategory="100"
+        android:showAsAction="never"
+        android:title="@string/action_settings"/>
+
+</menu>

+ 10 - 0
Apex/res/values-w820dp/dimens.xml

@@ -0,0 +1,10 @@
+<resources>
+
+    <!--
+         Example customization of dimensions originally defined in res/values/dimens.xml
+         (such as screen margins) for screens with more than 820dp of available width. This
+         would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively).
+    -->
+    <dimen name="activity_horizontal_margin">64dp</dimen>
+
+</resources>

+ 28 - 26
Apex/res/values/strings.xml

@@ -5,15 +5,38 @@
     <string name="action_settings">Settings</string>
     <string name="action_forget_password">Forget password</string>
     <string name="action_custom_fields">Customize Fields</string>
-    <string name="str_true">true</string>
-    <string name="str_false">false</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="action_help">Help</string>
-    <string name="hello_world">Hello world!</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="login_progress_signing_in">Signing in&#8230;</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_ver_low">Client version is too low</string>
     <string name="msg_connection_none">No available connection </string>
+    <string name="prompt_search_criterion">Enter criterion</string>
+    <string name="prompt_email">Email</string>
+    <string name="prompt_user">User</string>
+    <string name="prompt_password">Password</string>
+    <string name="search">Search</string>
+    <string name="str_true">true</string>
+    <string name="str_false">false</string>
+    <string name="str_cancel">Cancel</string>
+    <string name="str_search">Search</string>
+    <string name="str_ver">ver:</string>
+    <string name="str_version">version:</string>
+    <string name="str_search_by">Search by</string>
+    <string name="str_tech_support">Tech support:\nusairedant@united-us.net</string>
+    <string name="str_2000">2000+ records</string>
+    <string name="str_0">0 record found</string>
+    <string name="str_records"> records</string>
+    <string name="str_Loading">Loading</string>
     <string name="title_activity_apex">Apex Mobile</string>
+    <string name="title_activity_announcements">Announcements</string>
     <string name="title_activity_direct_tracking">DirectTracking</string>
     <string name="title_activity_function_select">Apex</string>
     <string name="title_activity_search">Search</string>
@@ -22,34 +45,13 @@
     <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">Detail</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">CargoTracking</string>
     <string name="title_activity_search_list">Search</string>
     <string name="title_activity_retrieve_password">RetrievePassword</string>
     <string name="title_activity_about">About</string>
+    <string name="title_activity_web">WebActivity</string>
+    <string name="hello_world">Hello world!</string>
 
 </resources>

+ 2 - 1
Apex/src/com/usai/apex/AboutActivity.java

@@ -49,7 +49,8 @@ public class AboutActivity extends Activity
 		
 		try
 		{
-			tv_ver.setText("ver:"
+			
+			tv_ver.setText(getText(R.string.str_ver)
 					+ ApexTrackingApplication.get_instance()
 							.getPackageManager()
 							.getPackageInfo("com.usai.apex", 0).versionName);

+ 206 - 0
Apex/src/com/usai/apex/Alarmreceiver.java

@@ -0,0 +1,206 @@
+package com.usai.apex;
+
+import java.util.Set;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import com.usai.util.Network;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.util.Log;
+
+public class Alarmreceiver extends BroadcastReceiver
+{
+	private SearchTask	m_task			= null;
+	
+	public void checkpush()
+	{
+
+		if (m_task != null)
+		{
+			return;
+		}
+		// mStatusMessageView.setText(R.string.str_Loading);
+		// showProgress(true);
+		m_task = new SearchTask();
+
+//		TextView text_page = (TextView) view_page_footer
+//				.findViewById(R.id.text_page);
+//		text_page.setText("Loading...");
+//		text_page.setEnabled(false);
+		m_task.execute();
+
+	}
+	class SearchTask extends AsyncTask<Void, Void, Boolean>
+	{
+		int		errorcode;
+		boolean	bfinish	= false;
+
+		@Override
+		protected Boolean doInBackground(Void... params)
+		{
+			Log.d("SearchTask", "doInBackground");
+			if (!Network.NetworkIsAvailable())
+
+			{
+				errorcode = Network.RESULT_NET_NOTAVAILABLE;
+				return false;
+			}
+			String jstr = "";
+			jstr = Network.check_push();
+//			if (module_name.equals("Announcements"))
+//				jstr = Network.get_announcements(lastid, limit);
+//			else
+//				jstr = Network.get_marketnews(lastid, limit);
+			if (jstr == null || jstr.length() <= 0)
+			{
+				// Log.d(TAG, "json is wrong");
+
+				errorcode = Network.RESULT_NET_ERROR;
+				return false;
+			}
+
+			JSONObject jsobj;
+			//
+			// array = new JSONArray(json);
+			try
+			{
+				jsobj = new JSONObject(jstr);
+				// if (searchresult.get_fieldscount() == 0)
+				// {
+				// JSONObject objfields = jsobj.getJSONObject("fields");
+				// if (objfields != null)
+				// searchresult.init_fields(objfields.toString());
+				// }
+//				int count = jsobj.getInt("total");
+//				if (count < limit)
+//					bfinish = true;
+//				JSONObject objrecords = jsobj.getJSONObject("records");
+//				if (objrecords != null)
+//					searchresult.add_records(objrecords.toString(), count);
+//				errorcode = Network.RESULT_TRUE;
+
+				return true;
+
+			}
+			catch (JSONException e)
+			{
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+			errorcode = Network.RESULT_NET_ERROR;
+			return false;
+		}
+
+		@Override
+		protected void onPostExecute(Boolean success)
+		{
+			Log.i("onPostExecute", "entry");
+			m_task = null;
+			// showProgress(false);
+
+			switch (errorcode)
+			{
+//				case Network.RESULT_NET_NOTAVAILABLE:
+//				{
+//					Toast toast = Toast.makeText(
+//							ApexTrackingApplication.get_instance(),
+//							getText(R.string.msg_connection_none),
+//							Toast.LENGTH_LONG);
+//					toast.setGravity(Gravity.CENTER, 0, 0);
+//					toast.show();
+//					break;
+//				}
+//				case Network.RESULT_NET_ERROR:
+//				{
+//					Toast toast = Toast.makeText(
+//							ApexTrackingApplication.get_instance(),
+//							getText(R.string.msg_net_error), Toast.LENGTH_LONG);
+//					toast.setGravity(Gravity.CENTER, 0, 0);
+//					toast.show();
+//					break;
+//				}
+//				case Network.RESULT_ERROR:
+//				// case Network.RESULT_RESPONSE_NULL:
+//				{
+//					Toast toast = Toast.makeText(
+//							ApexTrackingApplication.get_instance(),
+//							getText(R.string.msg_net_resulterror),
+//							Toast.LENGTH_LONG);
+//					toast.setGravity(Gravity.CENTER, 0, 0);
+//					toast.show();
+//					break;
+//				}
+
+				default:
+					break;
+			}
+
+			if (success)
+			{
+
+//				if (bfinish)
+//				{
+//					// getListView().removeFooterView(view_page_footer);
+//					// Toast.makeText(AnnouncementActivity.this, "Load all!",
+//					// Toast.LENGTH_LONG).show();
+//
+//					TextView tv = (TextView) view_page_footer
+//							.findViewById(R.id.text_page);
+//					tv.setText("No more items");
+//					tv.setEnabled(false);
+//				}
+//				else
+//				{
+//					TextView tv = (TextView) view_page_footer
+//							.findViewById(R.id.text_page);
+//					tv.setText("More...");
+//					tv.setEnabled(true);
+//				}
+//				adapter.notifyDataSetChanged();
+//				// getListAdapter().notifyDataSetChanged;
+//				// BaseAdapter mJson = null;
+//				// mJson.notifyDataSetChanged();
+			}
+
+			super.onPostExecute(success);
+		}
+
+		@Override
+		protected void onCancelled()
+		{
+			m_task = null;
+			// showProgress(false);
+		}
+	}
+	
+	
+	
+	@Override
+	public void onReceive(Context context, Intent intent)
+	{
+		String tag = "onReceive@Alarmreceiver";
+        if (intent.getAction().equals("com.usai.apex.push")) {  
+//        	Bundle b = intent.getExtras();
+//        	Set<String> keySet = b.keySet();
+//        	 for(String key : keySet) {
+//        	    Log.e(tag, key);
+//        	 }
+//        	String s =b.getString("caller");
+        	Log.d(tag, "receive alarm broadcast caller =="+intent.getStringExtra("caller"));
+        	
+        	checkpush();
+//            Intent i = new Intent();  
+//            i.setClass(context, DaemonService.class);  
+//            // 启动service   
+//            // 多次调用startService并不会启动多个service 而是会多次调用onStart  
+//            context.startService(i);  
+        }  
+	}
+
+}

+ 413 - 0
Apex/src/com/usai/apex/AnnouncementActivity.java

@@ -0,0 +1,413 @@
+package com.usai.apex;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import com.usai.apex.ResultActivity.SearchTask;
+import com.usai.util.Network;
+import android.app.ListActivity;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Color;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.util.Base64;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.SimpleAdapter;
+import android.widget.TextView;
+import android.widget.Toast;
+
+public class AnnouncementActivity extends ListActivity
+{
+	String				lastid			= "";
+	int					limit			= 10;
+	private SearchTask	m_task			= null;
+	SearchResult		searchresult	= new SearchResult();
+	BaseAdapter			adapter			= null;
+	View				view_page_footer;
+
+	String				module_name		= "";
+
+	public void requestdata()
+	{
+
+		if (m_task != null)
+		{
+			return;
+		}
+		// mStatusMessageView.setText(R.string.str_Loading);
+		// showProgress(true);
+		m_task = new SearchTask();
+
+		TextView text_page = (TextView) view_page_footer
+				.findViewById(R.id.text_page);
+		text_page.setText("Loading...");
+		text_page.setEnabled(false);
+		m_task.execute();
+
+	}
+
+	@Override
+	protected void onListItemClick(ListView l, View v, int position, long id)
+	{
+		// TODO Auto-generated method stub
+		super.onListItemClick(l, v, position, id);
+
+		// Log.i("FragmentList", "Item clicked: " + id);
+		Intent intent = new Intent();
+		intent.putExtra("url", searchresult.getData().get(position).get("url")
+				.toString());
+		intent.setClass(this, WebActivity.class);
+		startActivity(intent);
+	}
+
+	@Override
+	public void onDestroy()
+	{
+		if (m_task != null)
+			m_task.cancel(false);
+		super.onDestroy();
+	}
+
+	@Override
+	protected void onCreate(Bundle savedInstanceState)
+	{
+
+		// setTitle("Booking Result");
+
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.activity_announcements);
+		adapter = new AnnouncementAdapter(searchresult, this);
+
+		module_name = getIntent().getStringExtra("module_name");
+		view_page_footer = LayoutInflater.from(this).inflate(
+				R.layout.view_page_footer, null);
+		getListView().addFooterView(view_page_footer);// 添加底部视图
+		TextView text_page = (TextView) view_page_footer
+				.findViewById(R.id.text_page);
+		text_page.setOnClickListener(new View.OnClickListener()
+		{
+			// 点击按钮 追加数据 并通知适配器
+			@Override
+			public void onClick(View v)
+			{
+				// TODO Auto-generated method stub
+				// TextView tv = (TextView) v;
+				// tv.setText("Loading...");
+				requestdata();
+				// tv.setText("下一页");
+				// adapter.notifyDataSetChanged();
+			}
+		});
+
+		setListAdapter(adapter);
+		// this.getListView().setBackgroundColor(Color.WHITE);
+		requestdata();
+
+	}
+
+	class SearchTask extends AsyncTask<Void, Void, Boolean>
+	{
+		int		errorcode;
+		boolean	bfinish	= false;
+
+		@Override
+		protected Boolean doInBackground(Void... params)
+		{
+			Log.d("SearchTask", "doInBackground");
+			if (!Network.NetworkIsAvailable())
+
+			{
+				errorcode = Network.RESULT_NET_NOTAVAILABLE;
+				return false;
+			}
+			String jstr;
+			if (module_name.equals("Announcements"))
+				jstr = Network.get_announcements(lastid, limit);
+			else
+				jstr = Network.get_marketnews(lastid, limit);
+			if (jstr == null || jstr.length() <= 0)
+			{
+				// Log.d(TAG, "json is wrong");
+
+				errorcode = Network.RESULT_NET_ERROR;
+				return false;
+			}
+
+			JSONObject jsobj;
+			//
+			// array = new JSONArray(json);
+			try
+			{
+				jsobj = new JSONObject(jstr);
+				// if (searchresult.get_fieldscount() == 0)
+				// {
+				// JSONObject objfields = jsobj.getJSONObject("fields");
+				// if (objfields != null)
+				// searchresult.init_fields(objfields.toString());
+				// }
+				int count = jsobj.getInt("total");
+				if (count < limit)
+					bfinish = true;
+				JSONObject objrecords = jsobj.getJSONObject("records");
+				if (objrecords != null)
+					searchresult.add_records(objrecords.toString(), count);
+				errorcode = Network.RESULT_TRUE;
+
+				return true;
+
+			}
+			catch (JSONException e)
+			{
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+			errorcode = Network.RESULT_NET_ERROR;
+			return false;
+		}
+
+		@Override
+		protected void onPostExecute(Boolean success)
+		{
+			Log.i("onPostExecute", "entry");
+			m_task = null;
+			// showProgress(false);
+
+			switch (errorcode)
+			{
+				case Network.RESULT_NET_NOTAVAILABLE:
+				{
+					Toast toast = Toast.makeText(
+							ApexTrackingApplication.get_instance(),
+							getText(R.string.msg_connection_none),
+							Toast.LENGTH_LONG);
+					toast.setGravity(Gravity.CENTER, 0, 0);
+					toast.show();
+					break;
+				}
+				case Network.RESULT_NET_ERROR:
+				{
+					Toast toast = Toast.makeText(
+							ApexTrackingApplication.get_instance(),
+							getText(R.string.msg_net_error), Toast.LENGTH_LONG);
+					toast.setGravity(Gravity.CENTER, 0, 0);
+					toast.show();
+					break;
+				}
+				case Network.RESULT_ERROR:
+				// case Network.RESULT_RESPONSE_NULL:
+				{
+					Toast toast = Toast.makeText(
+							ApexTrackingApplication.get_instance(),
+							getText(R.string.msg_net_resulterror),
+							Toast.LENGTH_LONG);
+					toast.setGravity(Gravity.CENTER, 0, 0);
+					toast.show();
+					break;
+				}
+
+				default:
+					break;
+			}
+
+			if (success)
+			{
+
+				if (bfinish)
+				{
+					// getListView().removeFooterView(view_page_footer);
+					// Toast.makeText(AnnouncementActivity.this, "Load all!",
+					// Toast.LENGTH_LONG).show();
+
+					TextView tv = (TextView) view_page_footer
+							.findViewById(R.id.text_page);
+					tv.setText("No more items");
+					tv.setEnabled(false);
+				}
+				else
+				{
+					TextView tv = (TextView) view_page_footer
+							.findViewById(R.id.text_page);
+					tv.setText("More...");
+					tv.setEnabled(true);
+				}
+				adapter.notifyDataSetChanged();
+				// getListAdapter().notifyDataSetChanged;
+				// BaseAdapter mJson = null;
+				// mJson.notifyDataSetChanged();
+			}
+
+			super.onPostExecute(success);
+		}
+
+		@Override
+		protected void onCancelled()
+		{
+			m_task = null;
+			// showProgress(false);
+		}
+	}
+
+	private class SearchResult
+	{
+		List<Map<String, Object>>	datalist	= new ArrayList<Map<String, Object>>();
+
+		public int get_count()
+		{
+			return datalist.size();
+		}
+
+		public void add_records(String source, int count)
+		{
+			JSONObject objrecords;
+			try
+			{
+				objrecords = new JSONObject(source);
+
+				for (int i = 0; i < count; i++)
+				{
+					// offset++;
+					JSONObject objrec = objrecords.getJSONObject("record" + i);
+					String title = objrec.getString("title");
+					String content = objrec.getString("content");
+					String image = objrec.getString("image");
+					String id = objrec.getString("id");
+					String url = objrec.getString("url");
+					lastid = id;
+					Map<String, Object> map = new HashMap<String, Object>();
+					map.put("title", title);
+					map.put("content", content);
+					map.put("image", image);
+					map.put("id", id);
+					map.put("url", url);
+					datalist.add(map);
+
+					// Iterator<?> it = rec.keys();
+					// HashMap<String, String> record = new HashMap<String,
+					// String>();
+					// while (it.hasNext()) // loop for each function
+					// {
+					// String field_name = (String) it.next();
+					// String val = rec.getString(field_name)
+					// .replace("\n", "");
+					// record.put(field_name, val);
+					// }
+					// records.add(record);
+
+				}
+			}
+			catch (JSONException e)
+			{
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+
+		}
+
+		public List<Map<String, Object>> getData()
+		{
+
+			return datalist;
+		}
+	}
+
+	private class AnnouncementAdapter extends BaseAdapter
+	{
+		private LayoutInflater	mInflater;	// 动态布局映射
+		private SearchResult	result;
+
+		// private Context context;
+		// private int i = 0;
+		public AnnouncementAdapter(SearchResult result, Context context)
+		{
+			this.result = result;
+			// this.context = context;
+			this.mInflater = LayoutInflater.from(context);
+		}
+
+		@Override
+		public int getCount()
+		{
+			// TODO Auto-generated method stub
+			return result.get_count();
+		}
+
+		@Override
+		public Object getItem(int position)
+		{
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		@Override
+		public long getItemId(int position)
+		{
+			// TODO Auto-generated method stub
+			return 0;
+		}
+
+		@Override
+		public View getView(int position, View convertView, ViewGroup parent)
+		{
+			// TODO Auto-generated method stub
+			convertView = mInflater.inflate(R.layout.announcement_item, null);// 根据布局文件实例化view
+
+			TextView title = (TextView) convertView.findViewById(R.id.tv_title);// 找某个控件
+			title.setText(result.getData().get(position).get("title")
+					.toString());// 给该控件设置数据(数据从集合类中来)
+			TextView content = (TextView) convertView
+					.findViewById(R.id.tv_content);
+			content.setText(result.getData().get(position).get("content")
+					.toString());
+			if (result.getData().get(position).get("image").toString().length() > 0)
+			{
+				byte[] gzipBuff = Base64.decode(result.getData().get(position)
+						.get("image").toString(), 0);
+
+				ByteArrayInputStream memstream = new ByteArrayInputStream(
+						gzipBuff, 0, gzipBuff.length);
+
+				ByteArrayOutputStream baos = new ByteArrayOutputStream(
+						gzipBuff.length);
+				ImageView iv_thumb = (ImageView) convertView
+						.findViewById(R.id.iv_thumb);
+				try
+				{
+					baos.write(gzipBuff);
+
+					Bitmap bmp = BitmapFactory.decodeStream(memstream);
+
+					// ImageView image = new ImageView(this);
+
+					iv_thumb.setImageBitmap(bmp);
+				}
+				catch (IOException e)
+				{
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
+			// img.setBackgroundResource((Integer)jObject.get("img"));
+
+			return convertView;
+		}
+	}
+}

+ 83 - 40
Apex/src/com/usai/apex/ApexActivity.java

@@ -3,6 +3,8 @@ package com.usai.apex;
 //import com.google.android.gms.maps.SupportMapFragment;
 
 import android.app.ActionBar;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager.NameNotFoundException;
 import android.os.Bundle;
 //import android.app.Fragment;
 //import android.app.FragmentTransaction;
@@ -18,10 +20,13 @@ public class ApexActivity extends FragmentActivity /*
 													 * OnTabChangeListener
 													 */
 {
+	boolean	m_bhasgoogleframework	= false;
 
 	@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);
@@ -31,44 +36,71 @@ public class ApexActivity extends FragmentActivity /*
 		return super.onKeyDown(keyCode, event);
 	}
 
-	TabHost mTabHost;
+	TabHost	mTabHost;
 
 	@Override
-	protected void onCreate(Bundle savedInstanceState) {
+	protected void onCreate(Bundle savedInstanceState)
+	{
 		Log.d("ApexActivity", "onCreate");
+
+		// ApexTrackingApplication.get_instance()
+		// .getPackageManager().
+		PackageInfo packageInfo;
+		try
+		{
+			packageInfo = this.getPackageManager().getPackageInfo(
+					"com.google.android.gms", 0);
+
+		}
+		catch (NameNotFoundException e)
+		{
+			packageInfo = null;
+			e.printStackTrace();
+		}
+		if (packageInfo == null)
+		{
+			m_bhasgoogleframework = false;
+			System.out.println("没有安装");
+		}
+		else
+		{
+			m_bhasgoogleframework = true;
+			System.out.println("已经安装");
+		}
+
 		super.onCreate(savedInstanceState);
 		setContentView(R.layout.activity_apex);
 		ActionBar bar = getActionBar();
 		bar.setTitle("");
 		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 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() {
+	// @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()
+	{
 		mTabHost = (TabHost) this.findViewById(R.id.tabhost);
 
 		mTabHost.setup();
@@ -77,16 +109,22 @@ public class ApexActivity extends FragmentActivity /*
 		// int[] tabIds = new int[] { R.id.tab1, R.id.tab2 };
 		mTabHost.addTab(mTabHost.newTabSpec("Login").setIndicator("Login")
 				.setContent(R.id.tab1));
-//		 mTabHost.addTab(mTabHost.newTabSpec("test").setIndicator("test").setContent(R.id.tabtest));
+		// mTabHost.addTab(mTabHost.newTabSpec("test").setIndicator("test").setContent(R.id.tabtest));
+
+		mTabHost.addTab(mTabHost.newTabSpec("Tools").setIndicator("Tools")
+				.setContent(R.id.tab2));
 		mTabHost.addTab(mTabHost.newTabSpec("Service Location")
 				.setIndicator("Service Location").setContent(R.id.tab3));
 
-		// FragmentManager manager = this.getFragmentManager();
-
 		// Instantiate a new fragment.
 		Fragment loginFragment = new LoginFragment();
-		// Fragment dtFragement = new DirectTrackingFragment();
-		Fragment slFragment = new ServiceLocationFragment();
+		Fragment toolsFragment = new ToolsFragment();
+		Fragment slFragment;
+		// m_bhasgoogleframework=false;
+		if (m_bhasgoogleframework)
+			slFragment = new ServiceLocationFragment();
+		else
+			slFragment = new BaiduMapFragment();
 		// Add the fragment to the activity, pushing this transaction
 		// on to the back stack.
 
@@ -95,14 +133,19 @@ public class ApexActivity extends FragmentActivity /*
 		ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
 		ft.addToBackStack("Login");
 
+		ft.replace(R.id.tab2, toolsFragment);
+		ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
+		ft.addToBackStack("Tools");		
+		
+		
 		// ft.replace(R.id.tab2, dtFragement);
 		// ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
 		// ft.addToBackStack("Tracking");
-//		Fragment test = new ServiceLocationFragment();
-//		ft.replace(R.id.tabtest, (Fragment) test);
-//		ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
-//		ft.addToBackStack("test");
-		
+		// Fragment test = new ServiceLocationFragment();
+		// ft.replace(R.id.tabtest, (Fragment) test);
+		// ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
+		// ft.addToBackStack("test");
+
 		ft.replace(R.id.tab3, (Fragment) slFragment);
 		ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
 		ft.addToBackStack("Location");

+ 28 - 4
Apex/src/com/usai/apex/ApexTrackingApplication.java

@@ -1,17 +1,22 @@
 package com.usai.apex;
 
+import android.app.AlarmManager;
 import android.app.Application;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.os.SystemClock;
 import android.util.Log;
 
 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;
+	private static String m_sessionid="";
+	private static String m_user="";
+	private static String m_password="";
 	
-
+ 
 	@Override
 	public void onCreate()
 	{
@@ -20,6 +25,7 @@ public class ApexTrackingApplication extends Application
 		Log.d(TAG,"onCreate");
 		super.onCreate();
 		instance = this;
+		startalarm("app start");
 	}
 	
 
@@ -28,6 +34,24 @@ public class ApexTrackingApplication extends Application
 		return instance;
 	}
 
+	public static void startalarm(String caller)
+	{
+		
+        // 启动完成  
+        Intent iAlarm = new Intent(get_instance(), Alarmreceiver.class);  
+        iAlarm.putExtra("caller", caller);
+        iAlarm.setAction("com.usai.apex.push");  
+        PendingIntent sender = PendingIntent.getBroadcast(get_instance(), 0,  
+        		iAlarm, PendingIntent.FLAG_UPDATE_CURRENT);  
+        
+        long firstime = SystemClock.elapsedRealtime();  
+        AlarmManager am = (AlarmManager) get_instance()  
+                .getSystemService(Context.ALARM_SERVICE);  
+
+        // 10秒一个周期,不停的发送广播  
+        am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime,  
+                30 * 1000, sender);  
+	}
 	public static void put_sessionid(String id)
 	{
 

+ 117 - 0
Apex/src/com/usai/apex/BaiduMapFragment.java

@@ -0,0 +1,117 @@
+package com.usai.apex;
+
+//import com.google.android.gms.maps.SupportMapFragment;
+
+//import baidumapsdk.demo.DemoApplication;
+//import baidumapsdk.demo.DemoApplication.MyGeneralListener;
+
+import com.baidu.mapapi.BMapManager;
+import com.baidu.mapapi.MKGeneralListener;
+import com.baidu.mapapi.map.MKEvent;
+import com.baidu.mapapi.map.MapController;
+import com.baidu.mapapi.map.SupportMapFragment;
+import com.baidu.platform.comapi.basestruct.GeoPoint;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Toast;
+
+public class BaiduMapFragment extends Fragment
+{
+	SupportMapFragment fragment;
+    BMapManager mBMapManager = null;
+    public static boolean m_bKeyRight = true;
+    public static final String strKey = "tznWFxd3RvSoul1TGQp6GSzo";
+    
+	public void initEngineManager(Context context) {
+        if (mBMapManager == null) {
+            mBMapManager = new BMapManager(context);
+        }
+
+        if (!mBMapManager.init(strKey,new MyGeneralListener())) {
+            Toast.makeText(getActivity()
+					.getApplicationContext(), 
+                    "BMapManager  初始化错误!", Toast.LENGTH_LONG).show();
+        }
+	}
+	
+	// 常用事件监听,用来处理通常的网络错误,授权验证错误等
+    static class MyGeneralListener implements MKGeneralListener {
+        
+        @Override
+        public void onGetNetworkState(int iError) {
+            if (iError == MKEvent.ERROR_NETWORK_CONNECT) {
+                Toast.makeText(ApexTrackingApplication.get_instance().getApplicationContext(), "您的网络出错啦!",
+                    Toast.LENGTH_LONG).show();
+            }
+            else if (iError == MKEvent.ERROR_NETWORK_DATA) {
+                Toast.makeText(ApexTrackingApplication.get_instance().getApplicationContext(), "输入正确的检索条件!",
+                        Toast.LENGTH_LONG).show();
+            }
+            // ...
+        }
+
+        @Override
+        public void onGetPermissionState(int iError) {
+        	//非零值表示key验证未通过
+            if (iError != 0) {
+                //授权Key错误:
+                Toast.makeText(ApexTrackingApplication.get_instance().getApplicationContext(), 
+                        "请在 DemoApplication.java文件输入正确的授权Key,并检查您的网络连接是否正常!error: "+iError, Toast.LENGTH_LONG).show();
+                m_bKeyRight = false;
+            }
+            else{
+            	m_bKeyRight = true;
+            	Toast.makeText(ApexTrackingApplication.get_instance().getApplicationContext(), 
+                        "key认证成功", Toast.LENGTH_LONG).show();
+            }
+        }
+    }	
+	
+	@Override
+	public void onActivityCreated(Bundle savedInstanceState)
+	{
+		
+		super.onActivityCreated(savedInstanceState);
+		initEngineManager(getActivity().getApplicationContext());
+		
+		
+		FragmentManager fm = getChildFragmentManager();
+		fragment = (SupportMapFragment) fm.findFragmentById(R.id.map);
+		if (fragment == null)
+		{
+			
+			Log.d("onActivityCreated","create support map fragment");
+			fragment = SupportMapFragment.newInstance();;// .newInstance();
+			fm.beginTransaction().replace(R.id.map, fragment).commit();
+		}
+	}
+
+	@Override
+	public View onCreateView(LayoutInflater inflater, ViewGroup container,
+			Bundle savedInstanceState)
+	{
+		// TODO Auto-generated method stub
+//		return super.onCreateView(inflater, container, savedInstanceState);
+		return inflater.inflate(R.layout.fragment_service_location, container,
+				false);
+	}
+	@Override
+	public void onResume()
+	{
+		super.onResume();
+
+ 		Log.d("onResume","get map from fragment");
+
+		MapController controller = fragment.getMapView().getController();
+		controller.setCenter(new GeoPoint((int)(39.945 * 1E6), (int)(116.404 * 1E6)));
+		controller.setZoom(13);
+	}
+
+}

+ 47 - 0
Apex/src/com/usai/apex/BootBroadcastReceiver.java

@@ -0,0 +1,47 @@
+package com.usai.apex;
+
+
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.net.ConnectivityManager;
+
+public class BootBroadcastReceiver extends BroadcastReceiver
+{
+
+	@Override
+	public void onReceive(Context context, Intent intent)
+	{
+        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {  
+//            // 启动完成  
+//            Intent iAlarm = new Intent(context, Alarmreceiver.class);  
+//            iAlarm.setAction("com.usai.apex.push");  
+//            PendingIntent sender = PendingIntent.getBroadcast(context, 0,  
+//            		iAlarm, 0);  
+//            long firstime = SystemClock.elapsedRealtime();  
+//            AlarmManager am = (AlarmManager) context  
+//                    .getSystemService(Context.ALARM_SERVICE);  
+//  
+//            // 10秒一个周期,不停的发送广播  
+//            am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime,  
+//                    30 * 1000, sender);  
+        	ApexTrackingApplication.startalarm("boot completed");
+        } 
+		else if (intent.getAction().equals(
+				ConnectivityManager.CONNECTIVITY_ACTION))
+		{
+			
+			ApexTrackingApplication.startalarm("connection change");
+			// handle auto submit ,check update etc
+//			dbgUtil.Log(Log.INFO,TAG, "ConnectivityManager.CONNECTIVITY_ACTION");
+//			
+//			new AutoUpdateCheckThread(context, false).start();
+//
+//			new AutoSubmitThread(context).start();
+
+		}	       
+        
+	}
+
+}

+ 2 - 2
Apex/src/com/usai/apex/FunctionSelectActivity.java

@@ -76,7 +76,7 @@ public class FunctionSelectActivity extends FragmentActivity implements
 		// new int[] { R.id.drop_item });
 		// atv_criterion.setAdapter(history_adapter);
 
-		RadioGroup rg = (RadioGroup) findViewById(R.id.radioGroup1);
+//		RadioGroup rg = (RadioGroup) findViewById(R.id.radioGroup1);
 		// rg.setOnCheckedChangeListener(new OnCheckedChangeListener(){
 		//
 		// @Override
@@ -157,7 +157,7 @@ public class FunctionSelectActivity extends FragmentActivity implements
 					intent.putExtra("criterion_type", 1);
 					h_field = "container_no";
 				}
-				String user = ApexTrackingApplication.get_user();
+//				String user = ApexTrackingApplication.get_user();
 				// long h_time = System.currentTimeMillis();
 				// int count = dbUtil
 				// .get_count(m_db, "search_history", "user='" + user

+ 152 - 27
Apex/src/com/usai/apex/InnerMapActivity.java

@@ -1,13 +1,81 @@
 package com.usai.apex;
 
+import com.baidu.mapapi.BMapManager;
+import com.baidu.mapapi.MKGeneralListener;
+import com.baidu.mapapi.map.MKEvent;
+import com.baidu.mapapi.map.SupportMapFragment;
+
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager.NameNotFoundException;
 import android.os.Bundle;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentManager;
 import android.support.v4.app.FragmentTransaction;
+import android.util.Log;
 import android.view.KeyEvent;
+import android.widget.Toast;
 
 public class InnerMapActivity extends FragmentActivity
 {
+	public static boolean		m_bKeyRight				= true;
+	BMapManager					mBMapManager			= null;
+
+	public static final String	strKey					= "tznWFxd3RvSoul1TGQp6GSzo";
+	private static final String	LTAG					= "test";
+	SupportMapFragment			map;
+
+	boolean						m_bhasgoogleframework	= true;  
+
+	static class MyGeneralListener implements MKGeneralListener
+	{
+
+		@Override
+		public void onGetNetworkState(int iError)
+		{
+			if (iError == MKEvent.ERROR_NETWORK_CONNECT)
+			{
+				Toast.makeText(
+						ApexTrackingApplication.get_instance()
+								.getApplicationContext(),
+						"????????????????????????", Toast.LENGTH_LONG).show();
+			}
+			else if (iError == MKEvent.ERROR_NETWORK_DATA)
+			{
+				Toast.makeText(
+						ApexTrackingApplication.get_instance()
+								.getApplicationContext(),
+						"??????????????????????????????", Toast.LENGTH_LONG)
+						.show();
+			}
+			// ...
+		}
+
+		@Override
+		public void onGetPermissionState(int iError)
+		{
+			// ???????????????key???????????????
+			if (iError != 0)
+			{
+				// ??????Key?????????
+				Toast.makeText(
+						ApexTrackingApplication.get_instance()
+								.getApplicationContext(),
+						"?????? MyApplication.java???????????????????????????Key,??????????????????????????????????????????error: "
+								+ iError, Toast.LENGTH_LONG).show();
+				m_bKeyRight = false;
+			}
+			else
+			{
+				m_bKeyRight = true;
+				Toast.makeText(
+						ApexTrackingApplication.get_instance()
+								.getApplicationContext(), "key????????????",
+						Toast.LENGTH_LONG).show();
+			}
+		}
+	}
+
 	@Override
 	public boolean onKeyDown(int keyCode, KeyEvent event)
 	{
@@ -21,37 +89,94 @@ public class InnerMapActivity extends FragmentActivity
 		}
 		return super.onKeyDown(keyCode, event);
 	}
+
 	@Override
 	protected void onCreate(Bundle savedInstanceState)
 	{
 		super.onCreate(savedInstanceState);
-		setContentView(R.layout.activity_inner_map);
-//		setUpMapIfNeeded();
-	    Fragment slFragment=  new ServiceLocationFragment();
-	    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
-	    ft.replace(R.id.inner_map, slFragment);
-	    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
-	    ft.addToBackStack("Location");
-	    ft.commit();
+		PackageInfo packageInfo;
+		try
+		{
+			packageInfo = this.getPackageManager().getPackageInfo(
+					"com.google.android.gms", 0);
+
+		}
+		catch (NameNotFoundException e)
+		{
+			packageInfo = null;
+			e.printStackTrace();
+		}
+		if (packageInfo == null)
+		{
+			m_bhasgoogleframework = false;
+			System.out.println("没有安装");
+		}
+		else
+		{
+			m_bhasgoogleframework = true;
+			System.out.println("已经安装");
+		}
+		// setUpMapIfNeeded();
+
+		m_bhasgoogleframework = false;
+		
+		
+		
+
+
+
+		Fragment slFragment = null;
+		if (m_bhasgoogleframework)
+		{
+			setContentView(R.layout.activity_inner_map);
+			slFragment = new ServiceLocationFragment();
+
+			FragmentTransaction ft = getSupportFragmentManager()
+					.beginTransaction();
+			ft.replace(R.id.inner_map, slFragment);
+			ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
+			ft.addToBackStack("Location");
+			ft.commit();
+		}
+		else
+		{
+			if (mBMapManager == null)
+			{
+				mBMapManager = new BMapManager(getApplicationContext());
+				/**
+				 * ??????BMapManager???????????????????????????BMapManager
+				 */
+				mBMapManager.init(strKey, new MyGeneralListener());
+			}
+			setContentView(R.layout.activity_inner_map);
+			Log.d(LTAG, "onCreate");
+			// setContentView(R.layout.activity_main);
+			map = SupportMapFragment.newInstance();
+			FragmentManager manager = getSupportFragmentManager();
+			manager.beginTransaction().add(R.id.inner_map, map, "map_fragment")
+					.commit();
+		}
 	}
 
-//	@Override
-//	public boolean onCreateOptionsMenu(Menu menu)
-//	{
-//		// Inflate the menu; this adds items to the action bar if it is present.
-//		getMenuInflater().inflate(R.menu.inner_map, menu);
-//		return true;
-//	}
-//    private void setUpMapIfNeeded() {
-//        // Do a null check to confirm that we have not already instantiated the map.
-//        if (mMap == null) {
-//            // Try to obtain the map from the SupportMapFragment.
-//            mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
-//                    .getMap();
-//            // Check if we were successful in obtaining the map.
-//            if (mMap != null) {
-//                setUpMap();
-//            }
-//        }
-//    }
+	// @Override
+	// public boolean onCreateOptionsMenu(Menu menu)
+	// {
+	// // Inflate the menu; this adds items to the action bar if it is present.
+	// getMenuInflater().inflate(R.menu.inner_map, menu);
+	// return true;
+	// }
+	// private void setUpMapIfNeeded() {
+	// // Do a null check to confirm that we have not already instantiated the
+	// map.
+	// if (mMap == null) {
+	// // Try to obtain the map from the SupportMapFragment.
+	// mMap = ((SupportMapFragment)
+	// getSupportFragmentManager().findFragmentById(R.id.map))
+	// .getMap();
+	// // Check if we were successful in obtaining the map.
+	// if (mMap != null) {
+	// setUpMap();
+	// }
+	// }
+	// }
 }

+ 147 - 19
Apex/src/com/usai/apex/LocationDetailActivity.java

@@ -1,13 +1,70 @@
 package com.usai.apex;
 
+import java.util.List;
+
+import android.net.Uri;
 import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Data;
+//import android.provider.Contacts;
 import android.app.Activity;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.database.Cursor;
+import android.util.Log;
 import android.view.Menu;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
 import android.widget.TextView;
+import android.widget.Toast;
 
 public class LocationDetailActivity extends Activity
 {
-	LocationDetail detail;
+	LocationDetail	detail;
+
+	boolean isIntentAvailable(Context context, Intent intent)
+	{
+		final PackageManager packageManager = context.getPackageManager();
+		List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
+				PackageManager.GET_ACTIVITIES);
+		return list.size() > 0;
+	}
+
+	public int getContactid(String name)
+	{
+		int _id = -1;
+
+		Cursor cursor = getContentResolver()
+				.query(Data.CONTENT_URI,
+						new String[] { Data._ID, Data.DISPLAY_NAME,
+								Data.DISPLAY_NAME_ALTERNATIVE,
+								Data.DISPLAY_NAME_SOURCE }, Data.DISPLAY_NAME+"='"+name+"'", null, null);
+
+		Log.d("", "contact " + Data.DISPLAY_NAME + name);
+
+		// Uri uri =
+		// Uri.parse("content://com.android.contacts/data/name/filter/" +
+		// number);
+		// ContentResolver resolver = getContentResolver();
+		// Cursor cursor = resolver.query(uri, new String[]{"_id"}, null, null,
+		// null);
+		while (cursor.moveToNext())
+		{
+			Log.d("", "cursor=" + cursor.getString(1) + cursor.getString(2)
+					+ cursor.getString(3));
+			_id = cursor.getInt(0);
+
+		}
+		cursor.close();
+		return _id;
+	}
 
 	@Override
 	protected void onCreate(Bundle savedInstanceState)
@@ -17,30 +74,101 @@ public class LocationDetailActivity extends Activity
 		detail = (LocationDetail) getIntent().getSerializableExtra("detail");
 		TextView tv_name = (TextView) findViewById(R.id.tv_name);
 		tv_name.setText(detail.Name);
-//		tv_name.setMovementMethod(LinkMovementMethod.getInstance());
+		// tv_name.setMovementMethod(LinkMovementMethod.getInstance());
 		TextView tv_addr = (TextView) findViewById(R.id.tv_addr);
-		tv_addr.setText(detail.Addr);
-//		tv_name.setMovementMethod(LinkMovementMethod.getInstance());
+		tv_addr.setText("Address:\n"+detail.Addr);
+		// tv_name.setMovementMethod(LinkMovementMethod.getInstance());
 		TextView tv_tel = (TextView) findViewById(R.id.tv_tel);
-		tv_tel.setText(detail.Tel);
-//		tv_name.setMovementMethod(LinkMovementMethod.getInstance());
+		tv_tel.setText("Tel:\n"+detail.Tel);
+		// tv_name.setMovementMethod(LinkMovementMethod.getInstance());
 		TextView tv_fax = (TextView) findViewById(R.id.tv_fax);
-		tv_fax.setText(detail.Fax);
-//		tv_name.setMovementMethod(LinkMovementMethod.getInstance());
+		tv_fax.setText("Fax:\n"+detail.Fax);
+		// tv_name.setMovementMethod(LinkMovementMethod.getInstance());
 		TextView tv_contact = (TextView) findViewById(R.id.tv_contact);
-		tv_contact.setText(detail.Contact);
-//		tv_name.setMovementMethod(LinkMovementMethod.getInstance());
+		tv_contact.setText("Contact:\n"+detail.Contact);
+		// tv_name.setMovementMethod(LinkMovementMethod.getInstance());
 		TextView tv_email = (TextView) findViewById(R.id.tv_email);
-		tv_email.setText(detail.Email);
-//		tv_name.setMovementMethod(LinkMovementMethod.getInstance());
-	}
+		tv_email.setText("Email:\n"+detail.Email);
+		// tv_name.setMovementMethod(LinkMovementMethod.getInstance());
 
-	@Override
-	public boolean onCreateOptionsMenu(Menu menu)
-	{
-		// Inflate the menu; this adds items to the action bar if it is present.
-		getMenuInflater().inflate(R.menu.location_detail, menu);
-		return true;
+		Button btn = (Button) findViewById(R.id.btn_addcontact);
+		btn.setOnClickListener(new OnClickListener()
+		{
+
+			@Override
+			public void onClick(View v)
+			{
+
+				int _id = getContactid(detail.Name);
+				Log.d("", "contact id = " + _id);
+				Intent it = new Intent(ContactsContract.Intents.SHOW_OR_CREATE_CONTACT, 
+		                ContactsContract.Contacts.CONTENT_URI); 
+				it.setData(Uri.parse("tel:"+detail.Tel));
+				it.putExtra(ContactsContract.Intents.EXTRA_FORCE_CREATE, true);
+//				it.setType(ContactsContract.Contacts.CONTENT_TYPE);// .People.CONTENT_TYPE);
+				it.putExtra(ContactsContract.Intents.Insert.COMPANY,
+						detail.Name);
+				
+				
+				String tel[] = detail.Tel.split("\n");
+				if(tel.length>0)
+				{
+					it.putExtra(ContactsContract.Intents.Insert.PHONE, tel[0]);
+					it.putExtra(ContactsContract.Intents.Insert.PHONE_TYPE, Phone.TYPE_WORK);
+				}
+				if(tel.length>1)
+				{
+					it.putExtra(ContactsContract.Intents.Insert.SECONDARY_PHONE, tel[1]);
+					it.putExtra(ContactsContract.Intents.Insert.SECONDARY_PHONE_TYPE, Phone.TYPE_WORK);
+				}
+				if(tel.length>2)
+				{
+					it.putExtra(ContactsContract.Intents.Insert.TERTIARY_PHONE, tel[2]);
+					it.putExtra(ContactsContract.Intents.Insert.TERTIARY_PHONE_TYPE, Phone.TYPE_WORK);
+				}
+				String email[] = detail.Email.split("\n");
+				if(email.length>0)
+				{
+					it.putExtra(ContactsContract.Intents.Insert.EMAIL, email[0]);
+					it.putExtra(ContactsContract.Intents.Insert.EMAIL_TYPE, Email.TYPE_WORK);
+				}
+				if(email.length>1)
+				{
+					it.putExtra(ContactsContract.Intents.Insert.SECONDARY_EMAIL, email[1]);
+					it.putExtra(ContactsContract.Intents.Insert.SECONDARY_EMAIL_TYPE, Email.TYPE_WORK);
+				}
+				if(email.length>2)
+				{
+					it.putExtra(ContactsContract.Intents.Insert.TERTIARY_EMAIL, email[2]);
+					it.putExtra(ContactsContract.Intents.Insert.TERTIARY_EMAIL_TYPE, Email.TYPE_WORK);
+				}
+				//
+//				intent.putExtra(Contacts.Intents.Insert.PHONE_TYPE,
+//						Contacts.PhonesColumns.TYPE_MOBILE);
+//				it.putExtra(ContactsContract.Intents.Insert.EMAIL, detail.Email);
+//				it.putExtra(ContactsContract.Intents.Insert.COMPANY,
+//						detail.Name);
+				it.putExtra(ContactsContract.Intents.Insert.POSTAL, detail.Addr);
+
+				if (!isIntentAvailable(LocationDetailActivity.this, it))
+				{
+					Toast.makeText(LocationDetailActivity.this,
+							"failed to add contact", Toast.LENGTH_LONG).show();
+					return;
+				}
+
+				startActivity(it);
+
+			}
+		});
 	}
 
+//	@Override
+//	public boolean onCreateOptionsMenu(Menu menu)
+//	{
+//		// Inflate the menu; this adds items to the action bar if it is present.
+//		getMenuInflater().inflate(R.menu.location_detail, menu);
+//		return true;
+//	}
+
 }

+ 1 - 1
Apex/src/com/usai/apex/LoginFragment.java

@@ -57,7 +57,7 @@ public class LoginFragment extends Fragment/* implements OnClickListener */
 		View view = inflater.inflate(R.layout.fragment_login, null);
 		TextView tv_ver = (TextView) view.findViewById(R.id.tv_ver);
 		try {
-			tv_ver.setText("ver:"+ApexTrackingApplication.get_instance().getPackageManager().getPackageInfo(
+			tv_ver.setText(getText(R.string.str_ver)+ApexTrackingApplication.get_instance().getPackageManager().getPackageInfo(
 						"com.usai.apex", 0).versionName);
 		} catch (NameNotFoundException e1) {
 			// TODO Auto-generated catch block

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

@@ -224,18 +224,18 @@ public class ResultActivity extends Activity
 		TextView tv_head = (TextView) findViewById(R.id.head);
 		if (totalcount == 0)
 		{
-			tv_head.setText("0 record found");
+			tv_head.setText(R.string.str_0);
 
 			return;
 		}
 		else if (searchresult.get_totalcount() > 2000)
 		{
-			tv_head.setText("2000+ records");
+			tv_head.setText(R.string.str_2000);
 		}
 		else
 			tv_head.setText(/*
 							 * loadcount + "/" +
-							 */searchresult.get_totalcount() + " records");
+//							 */searchresult.get_totalcount() + getText(R.string.str_records).toString());
 		TableLayout tl = (TableLayout) findViewById(R.id.result_table);
 
 		tl.removeViews(1, tl.getChildCount() - 1);
@@ -273,7 +273,7 @@ public class ResultActivity extends Activity
 			HashMap<String, String> record = searchresult.get_record(i);
 			TextView field = new TextView(ResultActivity.this);
 			field.setBackgroundResource(R.drawable.tableitem);
-			field.setText(searchresult.get_offset() + i + "");
+			field.setText(searchresult.get_offset() + i +1+ "");
 			Log.d("offset=" + searchresult.get_offset(), "");
 			field.setGravity(Gravity.CENTER);
 			field.setPadding(10, 5, 10, 5);
@@ -392,7 +392,7 @@ public class ResultActivity extends Activity
 		{
 			btnpre.setEnabled(true);
 		}
-		if (searchresult.get_totalcount() - searchresult.get_offset() <= OFFSET)
+		if ((searchresult.get_totalcount() - searchresult.get_offset() <= OFFSET)||(searchresult.get_totalcount()==0))
 			btnnext.setEnabled(false);
 		else
 			btnnext.setEnabled(true);
@@ -558,7 +558,7 @@ public class ResultActivity extends Activity
 		{
 			return;
 		}
-		mStatusMessageView.setText("Loading");
+		mStatusMessageView.setText(R.string.str_Loading);
 		showProgress(true);
 		m_task = new SearchTask();
 		m_task.execute(requestcount);
@@ -641,7 +641,7 @@ public class ResultActivity extends Activity
 
 			if (params[0])
 			{
-				int ret = Network.get_recordcount(user, password, searchParms);
+				int ret = Network.get_recordcount( searchParms);
 				if (ret >= 0)
 				{
 					searchresult.put_totalcount(ret);

+ 2 - 2
Apex/src/com/usai/apex/SearchListActivity.java

@@ -6,6 +6,7 @@ import com.usai.util.Network;
 import com.usai.util.dbUtil;
 
 import android.os.Bundle;
+import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.AlertDialog.Builder;
 import android.app.DatePickerDialog;
@@ -14,7 +15,6 @@ import android.content.DialogInterface;
 import android.content.Intent;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
-import android.support.v4.app.FragmentActivity;
 import android.text.Editable;
 import android.text.InputType;
 import android.text.TextUtils;
@@ -34,7 +34,7 @@ import android.widget.RelativeLayout;
 import android.widget.Spinner;
 import android.widget.TextView;
 
-public class SearchListActivity extends FragmentActivity implements
+public class SearchListActivity extends Activity implements
 		OnClickListener
 {
 

文件差異過大導致無法顯示
+ 25 - 0
Apex/src/com/usai/apex/ServiceLocationFragment.java


+ 81 - 0
Apex/src/com/usai/apex/ToolsFragment.java

@@ -0,0 +1,81 @@
+package com.usai.apex;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import android.R.color;
+import android.content.Intent;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.support.v4.app.ListFragment;
+import android.util.Log;
+import android.view.View;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+import android.widget.SimpleAdapter;
+
+public class ToolsFragment extends ListFragment
+{
+	// @Override
+	// public View onCreateView(LayoutInflater inflater, ViewGroup container,
+	// Bundle savedInstanceState)
+	// {
+	// View view = inflater.inflate(R.layout.fragment_tools, null);
+	// // Button btn = (Button) view.findViewById(R.id.btn_cancel);
+	// // btn.setOnClickListener(this);
+	// return view;
+	// // return super.onCreateView(inflater, container, savedInstanceState);
+	// }
+	private List<Map<String, Object>> getData()
+	{
+		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
+
+		Map<String, Object> map = new HashMap<String, Object>();
+		map.put("title", "Market news");
+		map.put("info", "google 1");
+		map.put("img", R.drawable.ic_launcher);
+		list.add(map);
+
+		map = new HashMap<String, Object>();
+		map.put("title", "Announcements");
+		map.put("info", "google 2");
+		map.put("img", R.drawable.ic_launcher);
+		list.add(map);
+
+		return list;
+	}
+
+	@Override
+	public void onActivityCreated(Bundle savedInstanceState)
+	{
+		super.onActivityCreated(savedInstanceState);
+		SimpleAdapter adapter = new SimpleAdapter(this.getActivity(),
+				getData(), R.layout.fragment_tools, new String[] { "title",
+						"img" }, new int[] { R.id.tv_toolname, R.id.iv_icon });
+		setListAdapter(adapter);
+		this.getListView().setBackgroundColor(Color.WHITE);
+	}
+
+	@Override
+	public void onListItemClick(ListView l, View v, int position, long id)
+	{
+		Log.i("FragmentList", "Item clicked: " + id);
+		Intent intent = new Intent();
+		switch (position)
+		{
+		case 1:
+		
+			intent.setClass(getActivity(), AnnouncementActivity.class);
+			intent.putExtra("module_name", "Announcements");
+			break;
+		case 0:
+			intent.setClass(getActivity(), AnnouncementActivity.class);
+			intent.putExtra("module_name", "Market News");
+			break;
+		}
+		startActivity(intent);
+
+	}
+}

+ 30 - 0
Apex/src/com/usai/apex/WebActivity.java

@@ -0,0 +1,30 @@
+package com.usai.apex;
+
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.webkit.WebView;
+
+
+
+
+public class WebActivity extends Activity
+{
+
+
+
+	@Override
+	protected void onCreate(Bundle savedInstanceState)
+	{
+
+		// setTitle("Booking Result");
+
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.fragment_web);
+		String url = getIntent().getStringExtra("url");
+		WebView wv = (WebView) findViewById(R.id.wv_content); 
+		wv.loadUrl(url);
+
+	}
+
+}

文件差異過大導致無法顯示
+ 465 - 128
Apex/src/com/usai/util/Network.java


+ 6 - 0
Apex/src/com/usai/util/SqlOpenHelper.java

@@ -7,6 +7,7 @@ import android.content.Context;
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteDatabase.CursorFactory;
 import android.database.sqlite.SQLiteOpenHelper;
+import android.util.Log;
 
 public class SqlOpenHelper extends SQLiteOpenHelper{
 
@@ -59,6 +60,11 @@ public class SqlOpenHelper extends SQLiteOpenHelper{
 
 	@Override
 	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+		Log.d("DB upgrade", "from "+oldVersion + " to "+newVersion);
+		db.execSQL("CREATE TABLE push_message ("
+		+ "_id INTEGER PRIMARY KEY," + "messageid VARCHAR(20),"
+		+ "message VARCHAR(20)," + "h_time timestamp,"
+		+ "user VARCHAR(20),"+"read BOOLEAN)");
 		// TODO Auto-generated method stub
 		
 	}

+ 18 - 0
Apex/src/com/usai/util/commonUtil.java

@@ -1,7 +1,14 @@
 package com.usai.util;
 
+import java.util.UUID;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import com.usai.apex.ApexTrackingApplication;
+
+import android.content.Context;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+
 public class commonUtil
 {
 	private static final AtomicInteger sNextGeneratedId = new AtomicInteger(1);
@@ -23,4 +30,15 @@ public class commonUtil
 	        }
 	    }
 	}
+	public static  String getDUID(){
+		  final TelephonyManager tm = (TelephonyManager) ApexTrackingApplication.get_instance().getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);    
+		  final String tmDevice, tmSerial, androidId;    
+		  tmDevice = "" + tm.getDeviceId();   
+		  tmSerial = "" + tm.getSimSerialNumber();    
+		  androidId = "" + android.provider.Settings.Secure.getString(ApexTrackingApplication.get_instance().getContentResolver(),android.provider.Settings.Secure.ANDROID_ID);    
+		  UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode());    
+		  String uniqueId = deviceUuid.toString();
+		  Log.d("debug","uuid="+uniqueId);
+		  return uniqueId;
+		 }
 }

+ 9 - 298
Apex/src/com/usai/util/dbUtil.java

@@ -15,100 +15,7 @@ public class dbUtil
 
 	private static final String[] FIELD_ID = { "_id" };
 
-	// public static final String ZONECODE
-	// public static final int FILTER_TYPE_MSG = 0;
-	// public static final int FILTER_TYPE_BOTH = 1;
-	// public static final int FILTER_TYPE_CALL = 2;
 
-	// public static final int RECORD_TYPE_CALL = 2;
-	// public static final int RECORD_TYPE_MSG = 1;
-	//
-	// public static final int NUMBER_TYPE_NULL = 0;
-	// public static final int NUMBER_TYPE_NORMAL = 1;
-	// public static final int NUMBER_TYPE_BLACK = 2;
-	// public static final int NUMBER_TYPE_WHITE = 3;
-	// public static final int NUMBER_TYPE_GRAY = 4;
-	// public static final int NUMBER_TYPE_UNKNOWN = 7;
-
-	// public static final int NUMBER_TYPE_CONTACT = 5;
-	// public static final int NUMBER_TYPE_SUSPECT = 6;
-
-	// public static final int FILTER_SOURCE_BLACKLIST = 0;
-	// public static final int FILTER_SOURCE_SINGLERING = 1;
-	// public static final int FILTER_SOURCE_KEYWORDS = 2;
-	// public static final int FILTER_SOURCE_NONUMBER = 3;
-
-	// public static void AddNumberToBlacklist(Context context, String Number) {
-	// SQLiteDatabase db;
-	// db = dbUtil.OpenDB(context, null, true);
-	// boolean bexist = isRecordExist(db, "user_numberlist", "number = '"
-	// + Number + "'");
-	// if (bexist == false) {
-	// ContentValues cv = new ContentValues();
-	// cv.put("number", Number);
-	// cv.put("type", dbUtil.NUMBER_TYPE_BLACK);
-	// cv.put("burntype", 3);
-	// cv.put("cimm", PhoneNumberUtils.toCallerIDMinMatch(Number));
-	// db.insert("user_numberlist", null, cv);
-	// }
-	// dbUtil.CloseDB(db);
-	// }
-
-	// public static int KeywordsFilter(Context context, String Msg) {
-	// int ret = -1;
-	// boolean bKeywordsFilter = context.getSharedPreferences("PhoneAsstPref",
-	// 0).getBoolean("KeywordsFilterPref", false);
-	//
-	// // = context.getSharedPreferences("PhoneAsstPref", 0)
-	// // .getBoolean("BlockUnknownNumber", false);
-	// if (bKeywordsFilter == false)
-	// return ret;
-	// SQLiteDatabase db = dbUtil.OpenDB(context, null, true);
-	//
-	// Cursor cursor = null;
-	// try {
-	//
-	// cursor = db.query("user_keywords", new String[] { "_id", "words" },
-	// null, null, null, null, "level desc", null);
-	//
-	// while (cursor.moveToNext()) {
-	// String keywords = cursor.getString(1);
-	// String[] spliter = keywords.split(" ");
-	//
-	// if (spliter.length == 0)
-	// continue;
-	//
-	// int ifound = spliter.length; // 鍏抽敭瀛椾釜鏁� // for (int idx = 0; idx <
-	// spliter.length; idx++) {
-	// // 鍏煎浠ュ墠鐗堟湰鍏抽敭瀛楁湁澶氱┖鏍兼儏鍐碉紱
-	// if (spliter[idx].equals("")) {
-	// ifound--; // 鎺掗櫎璇绠楃殑绌烘暟閲� // continue;
-	// }
-	//
-	// if (Msg.indexOf(spliter[idx]) != -1) {
-	// ifound--;
-	// }
-	// }
-	// if (ifound == 0) {
-	// int id = cursor.getInt(0);
-	// db.execSQL("update " + "user_keywords"
-	// + " set level = level+1 where _id=" + id);
-	// ret = id;
-	// break;// break while
-	// }
-	//
-	// }
-	// } catch (SQLiteException e) {
-	// dbgUtil.Log(Log.ERROR, "sql_err", e.toString());
-	// } finally {
-	// dbUtil.CloseCursor(cursor);
-	// dbUtil.CloseDB(db);
-	// }
-	// return ret;
-	// }
-
-	// public static final int NUMBER_TYPE_UNKNOWN = 5;//no number ,hide number
-	// ect;
 	public static boolean isContentExist(Context context, Uri uri, String where)
 	{
 		boolean ret;
@@ -124,210 +31,6 @@ public class dbUtil
 		return ret;
 	}
 
-	// public static int query_NumberType(SQLiteDatabase db, String number) {
-	// String cimm = PhoneNumberUtils.toCallerIDMinMatch(number);
-	// int ret = -1;
-	// Cursor cursor = db.query("user_numberlist", new String[] { "type",
-	// "number" }, "cimm = '" + cimm + "'", null, null, null, null);
-	// while (cursor.moveToNext()) {
-	// if (PhoneNumberUtils.compare(number, cursor.getString(1))) {
-	// dbgUtil.Log(
-	// Log.ERROR,
-	// "QUERY FROM user_numberlist",
-	// number + "=" + cursor.getString(1) + "type="
-	// + cursor.getInt(0));
-	// ret = cursor.getInt(0);
-	// break;
-	// }
-	// }
-	// CloseCursor(cursor);
-	// return ret;
-	// }
-
-	// static boolean isContact(Context context, String number) {
-	// // String cimm=PhoneNumberUtils.toCallerIDMinMatch(number);
-	// return dbUtil.isContentExist(context,
-	// // ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
-	// Uri.withAppendedPath(
-	// ContactsContract.PhoneLookup.CONTENT_FILTER_URI,
-	// Uri.encode(number)),
-	// // ContactsContract.CommonDataKinds.Phone.NUMBER + "= '" +
-	// // number+ "'");
-	// /* "min_match = '" + cimm+ "'" */null);
-	// }
-
-	// static boolean isSuspect(SQLiteDatabase db, String number) {
-	// return dbUtil.isRecordExist(db, "user_suspectlist", "number = '"
-	// + number + "'");
-	// }
-
-	// public static int get_CallNumberType_old(Context context,
-	// String incomingNumber)
-	// {
-	// int type = NUMBER_TYPE_NULL;
-	// SQLiteDatabase db = dbUtil.OpenDB(context, null, true);
-	//
-	// boolean bBlockUnknown = context
-	// .getSharedPreferences("PhoneAsstPref", 0).getBoolean(
-	// "BlockUnknownNumber", false);
-	// boolean bignorcontact = context
-	// .getSharedPreferences("PhoneAsstPref", 0).getBoolean(
-	// "IgnoreContact", false);
-
-	// if ((incomingNumber == null || incomingNumber.equals("")))
-	// if (bBlockUnknown)
-	// type = NUMBER_TYPE_BLACK;
-	// else
-	// type = NUMBER_TYPE_NORMAL;
-	// else
-	// {
-	// type = query_NumberType(db, incomingNumber);
-	// if (type == NUMBER_TYPE_WHITE)
-	// {
-	//
-	// }
-	// else
-	// if (bignorcontact && isContact(context, incomingNumber))
-	// {
-	// type = NUMBER_TYPE_CONTACT;
-	// dbgUtil.Log(Log.ERROR,null, "number type contact");
-	// }
-	// else
-	// if (type == NUMBER_TYPE_BLACK)
-	// {
-	// }
-	// else
-	// if (dbUtil.isRecordExist(db, "user_suspectlist",
-	// "number = '" + incomingNumber + "'"))
-	// {
-	// type = NUMBER_TYPE_SUSPECT;
-	// }
-	// else
-	// {
-	// type = NUMBER_TYPE_NORMAL;
-	//
-	// }
-	// }
-	// dbUtil.CloseDB(db);
-	//
-	// dbgUtil.Log(Log.ERROR,"get_CallNumberType",
-	// "number="+incomingNumber+" type="+type);
-	// return type;
-	//
-	// }
-
-	// public static NumberInfo get_NumberInfo(Context context,
-	// String incomingNumber)
-	// {
-	// NumberInfo numberInfo = new NumberInfo();
-	// numberInfo.incomingNumber = incomingNumber;
-	// SQLiteDatabase db = dbUtil.OpenDB(context, null, true);
-	//
-	// // boolean bBlockUnknown = context
-	// // .getSharedPreferences("PhoneAsstPref", 0).getBoolean(
-	// // "BlockUnknownNumber", false);
-	// // boolean bignorcontact = context
-	// // .getSharedPreferences("PhoneAsstPref", 0).getBoolean(
-	// // "IgnoreContact", false);
-	//
-	// // int type = NUMBER_TYPE_NULL;
-	// if (incomingNumber == null || incomingNumber.length() < 3)
-	// {
-	// numberInfo.BaseType = NUMBER_TYPE_UNKNOWN;
-	// }
-	// else
-	// {
-	// numberInfo.BaseType = query_NumberType(db, incomingNumber);
-	// if (numberInfo.BaseType == -1)// not in user_numberlist;
-	// {
-	// numberInfo.BaseType = NUMBER_TYPE_NORMAL;
-	//
-	// // else
-	// // if (isSuspect(db, incomingNumber))
-	// // {
-	// // type = NUMBER_TYPE_SUSPECT;
-	// //
-	// // }
-	// // else
-	// // {
-	// // type = NUMBER_TYPE_NORMAL;
-	// // }
-	// }
-	// if (isContact(context, incomingNumber))
-	// {
-	// numberInfo.isContact = true;
-	// // type = NUMBER_TYPE_CONTACT;
-	// }
-	// if (isSuspect(db, incomingNumber))
-	// {
-	// numberInfo.isSuspect = true;
-	//
-	// }
-	//
-	// // else
-	// // if (type == NUMBER_TYPE_BLACK)
-	// // {
-	// // if (isContact(context, incomingNumber))
-	// // {
-	// // type = NUMBER_TYPE_CONTACT;
-	// // }
-	// // }
-	// }
-	// dbUtil.CloseDB(db);
-	//
-	// dbgUtil.Log(Log.ERROR, "get_NumberInfo", "number=" + incomingNumber
-	// + " type=" + numberInfo.BaseType);
-	// return numberInfo;
-	//
-	// }
-
-	// public static int get_SmsNumberType(Context context, String
-	// incomingNumber)
-	// {
-	// SQLiteDatabase db = dbUtil.OpenDB(context, null, false);
-	//
-	// boolean bBlockUnknown = context
-	// .getSharedPreferences("PhoneAsstPref", 0).getBoolean(
-	// "BlockUnknownNumber", false);
-	// boolean bignorcontact = context
-	// .getSharedPreferences("PhoneAsstPref", 0).getBoolean(
-	// "IgnoreContact", false);
-	//
-	// int type = NUMBER_TYPE_NULL;
-	// if ((incomingNumber == null || incomingNumber.equals("")))
-	// if (bBlockUnknown)
-	// type = NUMBER_TYPE_BLACK;
-	// else
-	// type = NUMBER_TYPE_NORMAL;
-	// else
-	// {
-	// type = query_NumberType(db, incomingNumber);
-	// if (type == NUMBER_TYPE_WHITE)
-	// {
-	//
-	// }
-	// else
-	// if (bignorcontact && isContact(context, incomingNumber))
-	// {
-	// type = NUMBER_TYPE_CONTACT;
-	// dbgUtil.Log(Log.ERROR, null, "number type contact");
-	// }
-	// else
-	// if (type == NUMBER_TYPE_BLACK)
-	// {
-	// }
-	// else
-	// {
-	// type = NUMBER_TYPE_NORMAL;
-	//
-	// }
-	// }
-	// dbUtil.CloseDB(db);
-	//
-	// return type;
-	//
-	// }
-
 	public static void CloseDB(SQLiteDatabase db)
 	{
 		if (db == null)
@@ -355,7 +58,7 @@ public class dbUtil
 	{
 
 		SqlOpenHelper dbHelper = new SqlOpenHelper(context, "apex.db", factory,
-				1);
+				6);
 		dbHelper.addInitSQL("create table users (" + "_id INTEGER PRIMARY KEY,"
 				+ "name varchar(20)," + "pass varchar(20))");
 
@@ -386,6 +89,14 @@ public class dbUtil
 				+ "_id INTEGER PRIMARY KEY," + "h_val VARCHAR(20),"
 				+ "h_field VARCHAR(20)," + "h_time timestamp,"
 				+ "user VARCHAR(20))");
+		
+		
+		//new table must create in onupgrade function too;
+		
+		dbHelper.addInitSQL("CREATE TABLE push_message ("
+				+ "_id INTEGER PRIMARY KEY," + "messageid VARCHAR(20),"
+				+ "message VARCHAR(20)," + "h_time timestamp,"
+				+ "user VARCHAR(20),"+"read BOOLEAN)");
 		// dbHelper.addInitSQL("create table pics (" +
 		// "_id INTEGER PRIMARY KEY,"
 		// + "picker varchar(20)," + "err_code INTEGER ,"

部分文件因文件數量過多而無法顯示