Ray Zhang пре 12 година
родитељ
комит
c914fdd84c
46 измењених фајлова са 5001 додато и 1411 уклоњено
  1. 19 3
      Apex/AndroidManifest.xml
  2. 11 7
      Apex/proguard-project.txt
  3. 337 492
      Apex/proguard/dump.txt
  4. 298 359
      Apex/proguard/mapping.txt
  5. 2525 0
      Apex/proguard/seeds.txt
  6. 41 54
      Apex/proguard/usage.txt
  7. BIN
      Apex/res/drawable-xxhdpi/ic_document.png
  8. BIN
      Apex/res/drawable-xxhdpi/ic_file.png
  9. BIN
      Apex/res/drawable-xxhdpi/ic_file128.png
  10. BIN
      Apex/res/drawable-xxhdpi/ic_pdf.png
  11. BIN
      Apex/res/drawable-xxhdpi/ic_pdf128.png
  12. BIN
      Apex/res/drawable-xxhdpi/pop_bg9.9.png
  13. BIN
      Apex/res/drawable/popup_down.png
  14. BIN
      Apex/res/drawable/popup_middle.png
  15. 28 0
      Apex/res/layout/documents_list_item.xml
  16. 1 4
      Apex/res/layout/fragment_inner_tools.xml
  17. 1 1
      Apex/res/layout/marker_info.xml
  18. 40 0
      Apex/res/layout/marker_view.xml
  19. 25 29
      Apex/res/layout/new_function_select.xml
  20. 3 2
      Apex/res/layout/search_item_edit.xml
  21. 5 0
      Apex/res/menu/result.xml
  22. 4 3
      Apex/res/menu/search.xml
  23. 10 2
      Apex/res/values-zh-rCN/strings.xml
  24. 12 1
      Apex/res/values/strings.xml
  25. 13 13
      Apex/src/com/usai/apex/Alarmreceiver.java
  26. 6 6
      Apex/src/com/usai/apex/ApexTrackingApplication.java
  27. 186 171
      Apex/src/com/usai/apex/BaiduMapFragment.java
  28. 17 3
      Apex/src/com/usai/apex/DetailActivity.java
  29. 28 2
      Apex/src/com/usai/apex/DetailFragment.java
  30. 0 48
      Apex/src/com/usai/apex/DirectTrackingFragment.java
  31. 25 0
      Apex/src/com/usai/apex/DocumentsActivity.java
  32. 88 0
      Apex/src/com/usai/apex/DocumentsFragment.java
  33. 274 0
      Apex/src/com/usai/apex/FavoritesFragment.java
  34. 88 28
      Apex/src/com/usai/apex/FunctionSelectActivity.java
  35. 289 0
      Apex/src/com/usai/apex/HistoryFragment.java
  36. 66 63
      Apex/src/com/usai/apex/InnerMapActivity.java
  37. 5 1
      Apex/src/com/usai/apex/InnerToolsActivity.java
  38. 203 0
      Apex/src/com/usai/apex/LocalDocumentActivity.java
  39. 101 24
      Apex/src/com/usai/apex/ResultActivity.java
  40. 19 7
      Apex/src/com/usai/apex/SearchHistoryActivity.java
  41. 54 32
      Apex/src/com/usai/apex/SearchListActivity.java
  42. 1 23
      Apex/src/com/usai/apex/ServiceLocationFragment.java
  43. 107 32
      Apex/src/com/usai/apex/ToolsFragment.java
  44. 5 0
      Apex/src/com/usai/util/SqlOpenHelper.java
  45. 10 0
      Apex/src/com/usai/util/commonUtil.java
  46. 56 1
      Apex/src/com/usai/util/dbUtil.java

+ 19 - 3
Apex/AndroidManifest.xml

@@ -10,8 +10,8 @@
         android:targetSdkVersion="18" />
 
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
-    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
-    <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
+<!--     <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
+    <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" /> -->
     <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" />
@@ -214,6 +214,11 @@
             android:label="@string/title_activity_message"
             android:screenOrientation="portrait" >
         </activity>
+        <activity
+            android:name="com.usai.apex.SearchHistoryActivity"
+            android:label="@string/title_activity_search_history"
+            android:screenOrientation="portrait" >
+        </activity>
         <activity
             android:name="com.usai.apex.ChangePasswordActivity"
             android:label="Change Password"
@@ -252,7 +257,18 @@
         </activity>
         <activity
             android:name="com.usai.apex.InnerToolsActivity"
-            android:label="@string/title_activity_inner_tools" >
+            android:label="@string/title_activity_inner_tools" 
+            android:screenOrientation="portrait">
+        </activity>
+        <activity
+            android:name="com.usai.apex.DocumentsActivity"
+            android:label="@string/title_activity_documents" 
+            android:screenOrientation="portrait">
+        </activity>
+        <activity
+            android:name="com.usai.apex.LocalDocumentActivity"
+            android:label="@string/title_activity_localdocuments" 
+            android:screenOrientation="portrait">
         </activity>
     </application>
 

+ 11 - 7
Apex/proguard-project.txt

@@ -26,10 +26,14 @@
 
 
 # Remove all Verbose/Debug logging
--optimizations code/removal/simple,code/removal/advanced
--dontobfuscate
--assumenosideeffects class android.util.Log {
-    public static *** d(...);
-    public static *** v(...);
-    public static *** i(...);
-}
+#-optimizations code/removal/simple,code/removal/advanced
+#-dontobfuscate
+#-assumenosideeffects class android.util.Log {
+#    public static *** d(...);
+#    public static *** v(...);
+#    public static *** i(...);
+#}
+
+
+-keep class com.baidu.** {*;}
+-keep class vi.com.gdi.bgl.** {*;}

Разлика између датотеке није приказан због своје велике величине
+ 337 - 492
Apex/proguard/dump.txt


Разлика између датотеке није приказан због своје велике величине
+ 298 - 359
Apex/proguard/mapping.txt


Разлика између датотеке није приказан због своје велике величине
+ 2525 - 0
Apex/proguard/seeds.txt


+ 41 - 54
Apex/proguard/usage.txt

@@ -42,7 +42,6 @@ android.support.v4.app.BackStackRecord:
     350:353:public java.lang.CharSequence getBreadCrumbTitle()
     357:360:public java.lang.CharSequence getBreadCrumbShortTitle()
     379:380:public android.support.v4.app.FragmentTransaction add(android.support.v4.app.Fragment,java.lang.String)
-    384:385:public android.support.v4.app.FragmentTransaction add(int,android.support.v4.app.Fragment)
     434:439:public android.support.v4.app.FragmentTransaction remove(android.support.v4.app.Fragment)
     443:448:public android.support.v4.app.FragmentTransaction hide(android.support.v4.app.Fragment)
     452:457:public android.support.v4.app.FragmentTransaction show(android.support.v4.app.Fragment)
@@ -60,42 +59,6 @@ android.support.v4.app.BackStackRecord:
     783:783:public int getTransitionStyle()
     787:787:public boolean isEmpty()
 android.support.v4.app.DialogFragment
-android.support.v4.app.Fragment:
-    static final int INITIALIZING
-    static final int CREATED
-    static final int ACTIVITY_CREATED
-    static final int STOPPED
-    static final int STARTED
-    static final int RESUMED
-    511:511:public final int getId()
-    518:518:public final java.lang.String getTag()
-    552:557:public void setInitialSavedState(android.support.v4.app.Fragment$SavedState)
-    571:573:public void setTargetFragment(android.support.v4.app.Fragment,int)
-    579:579:public final android.support.v4.app.Fragment getTargetFragment()
-    586:586:public final int getTargetRequestCode()
-    636:636:public final varargs java.lang.String getString(int,java.lang.Object[])
-    650:650:public final android.support.v4.app.FragmentManager getFragmentManager()
-    678:678:public final android.support.v4.app.Fragment getParentFragment()
-    685:685:public final boolean isAdded()
-    703:703:public final boolean isRemoving()
-    714:714:public final boolean isInLayout()
-    722:722:public final boolean isResumed()
-    731:731:public final boolean isVisible()
-    743:743:public final boolean isHidden()
-    748:748:public final boolean hasOptionsMenu()
-    753:753:public final boolean isMenuVisible()
-    781:786:public void setRetainInstance(boolean)
-    789:789:public final boolean getRetainInstance()
-    800:806:public void setHasOptionsMenu(boolean)
-    818:824:public void setMenuVisibility(boolean)
-    840:845:public void setUserVisibleHint(boolean)
-    852:852:public boolean getUserVisibleHint()
-    859:867:public android.support.v4.app.LoaderManager getLoaderManager()
-    886:890:public void startActivityForResult(android.content.Intent,int)
-    1041:1041:public android.view.View getView()
-    1328:1329:public void registerForContextMenu(android.view.View)
-    1339:1340:public void unregisterForContextMenu(android.view.View)
-    1450:1456:android.support.v4.app.Fragment findFragmentByWho(java.lang.String)
 android.support.v4.app.Fragment$SavedState:
     309:311:Fragment$SavedState(android.os.Bundle)
 android.support.v4.app.FragmentActivity:
@@ -153,7 +116,6 @@ android.support.v4.app.FragmentManagerImpl:
     541:545:public void addOnBackStackChangedListener(android.support.v4.app.FragmentManager$OnBackStackChangedListener)
     549:552:public void removeOnBackStackChangedListener(android.support.v4.app.FragmentManager$OnBackStackChangedListener)
     588:596:public android.support.v4.app.Fragment$SavedState saveFragmentInstanceState(android.support.v4.app.Fragment)
-    1330:1338:public android.support.v4.app.Fragment findFragmentByWho(java.lang.String)
 android.support.v4.app.FragmentManagerImpl$2
 android.support.v4.app.FragmentManagerImpl$3
 android.support.v4.app.FragmentManagerImpl$4
@@ -181,7 +143,6 @@ android.support.v4.app.FragmentTransaction:
     public static final int TRANSIT_FRAGMENT_CLOSE
     public static final int TRANSIT_FRAGMENT_FADE
     public abstract android.support.v4.app.FragmentTransaction add(android.support.v4.app.Fragment,java.lang.String)
-    public abstract android.support.v4.app.FragmentTransaction add(int,android.support.v4.app.Fragment)
     public abstract android.support.v4.app.FragmentTransaction replace(int,android.support.v4.app.Fragment,java.lang.String)
     public abstract android.support.v4.app.FragmentTransaction remove(android.support.v4.app.Fragment)
     public abstract android.support.v4.app.FragmentTransaction hide(android.support.v4.app.Fragment)
@@ -197,9 +158,17 @@ android.support.v4.app.FragmentTransaction:
     public abstract android.support.v4.app.FragmentTransaction setBreadCrumbShortTitle(int)
     public abstract android.support.v4.app.FragmentTransaction setBreadCrumbShortTitle(java.lang.CharSequence)
     public abstract int commitAllowingStateLoss()
-android.support.v4.app.ListFragment
-android.support.v4.app.ListFragment$1
-android.support.v4.app.ListFragment$2
+android.support.v4.app.ListFragment:
+    static final int INTERNAL_EMPTY_ID
+    static final int INTERNAL_PROGRESS_CONTAINER_ID
+    static final int INTERNAL_LIST_CONTAINER_ID
+    198:200:public void setSelection(int)
+    206:207:public int getSelectedItemPosition()
+    214:215:public long getSelectedItemId()
+    232:241:public void setEmptyText(java.lang.CharSequence)
+    258:259:public void setListShown(boolean)
+    266:267:public void setListShownNoAnimation(boolean)
+    319:319:public android.widget.ListAdapter getListAdapter()
 android.support.v4.app.LoaderManager:
     public abstract android.support.v4.content.Loader initLoader(int,android.os.Bundle,android.support.v4.app.LoaderManager$LoaderCallbacks)
     public abstract android.support.v4.content.Loader restartLoader(int,android.os.Bundle,android.support.v4.app.LoaderManager$LoaderCallbacks)
@@ -3430,16 +3399,30 @@ com.google.android.gms.wallet.Wallet$WalletOptions$Builder
 com.google.android.gms.wallet.Wallet$a
 com.google.android.gms.wallet.WalletClient
 com.google.android.gms.wallet.WalletConstants
+com.usai.apex.ApexPushService
 com.usai.apex.ApexTrackingApplication:
     static final java.lang.String TAG
+com.usai.apex.BaiduMapFragment:
+    public static final java.lang.String strKey
 com.usai.apex.BuildConfig
 com.usai.apex.CustomizeFieldsActivity:
     48:48:static synthetic java.util.List access$0()
 com.usai.apex.CustomizeFieldsActivity$DragListAdapter:
     196:196:public java.util.List getList()
+com.usai.apex.DetailActivity:
+    47:47:public com.usai.apex.DetailActivity get_instance()
+com.usai.apex.DetailFragment:
+    private static final int REQUEST_LOGINACTIVITY
 com.usai.apex.DetailFragment$MyWebViewClient:
-    583:584:public boolean shouldOverviewUrlLoading(android.webkit.WebView,java.lang.String)
-com.usai.apex.DirectTrackingFragment
+    688:689:public boolean shouldOverviewUrlLoading(android.webkit.WebView,java.lang.String)
+com.usai.apex.FunctionSelectActivity:
+    private static final int REQUEST_LOGINACTIVITY
+    private static final int REQUEST_CHANGEPASSWORD_ACTIVITY
+com.usai.apex.InnerMapActivity:
+    public static final java.lang.String strKey
+    private static final java.lang.String LTAG
+com.usai.apex.LocalDocumentActivity:
+    public static final java.lang.String FILETYPE
 com.usai.apex.LocationDetail:
     private static final long serialVersionUID
 com.usai.apex.R
@@ -3457,8 +3440,13 @@ com.usai.apex.R$string
 com.usai.apex.R$style
 com.usai.apex.R$styleable
 com.usai.apex.R$xml
+com.usai.apex.ResultActivity:
+    private static final int REQUEST_LOGINACTIVITY
 com.usai.apex.SearchResult:
     private static final long serialVersionUID
+com.usai.apex.ToolsFragment:
+    28:46:private void delShortcut()
+    50:70:private void addShortcut()
 com.usai.util.Crypto:
     private static final java.lang.String HEX
     21:21:public Crypto()
@@ -3479,19 +3467,18 @@ 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
-    57:57:public Network()
+    61:61:public Network()
 com.usai.util.SqlOpenHelper:
-    21:21:public int get_RecordCount(java.lang.String)
+    22:22:public int get_RecordCount(java.lang.String)
 com.usai.util.commonUtil:
-    5:5:public commonUtil()
+    14:14:public commonUtil()
 com.usai.util.dbUtil:
-    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)
+    17:17:public dbUtil()
+    25:34:public static boolean isContentExist(android.content.Context,android.net.Uri,java.lang.String)
+    130:131:public static void removeRecords(android.database.sqlite.SQLiteDatabase,java.lang.String,java.lang.String)
+    137:172:public static long addRecordsFromCursor(android.database.sqlite.SQLiteDatabase,java.lang.String,android.database.Cursor,java.lang.String[],java.lang.String[],boolean,boolean)
+    194:218:public static boolean isTableEmpty(android.database.sqlite.SQLiteDatabase,java.lang.String)
+    224:246:public static boolean isRecordExist(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:

BIN
Apex/res/drawable-xxhdpi/ic_document.png


BIN
Apex/res/drawable-xxhdpi/ic_file.png


BIN
Apex/res/drawable-xxhdpi/ic_file128.png


BIN
Apex/res/drawable-xxhdpi/ic_pdf.png


BIN
Apex/res/drawable-xxhdpi/ic_pdf128.png


BIN
Apex/res/drawable-xxhdpi/pop_bg9.9.png


BIN
Apex/res/drawable/popup_down.png


BIN
Apex/res/drawable/popup_middle.png


+ 28 - 0
Apex/res/layout/documents_list_item.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/iv_share"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:src="@android:drawable/ic_menu_share" />
+
+</LinearLayout>

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

@@ -8,9 +8,6 @@
     android:paddingTop="@dimen/activity_vertical_margin"
     tools:context="com.usai.apex.InnerToolsActivity$PlaceholderFragment" >
 
-    <TextView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/hello_world" />
+
 
 </RelativeLayout>

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

@@ -22,7 +22,7 @@
         android:id="@+id/textView3"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:text="Click for more info"
+        android:text="@string/str_click_for_more"
         android:textColor="#80808080" />
 
 </LinearLayout>

+ 40 - 0
Apex/res/layout/marker_view.xml

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/popinfo"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:orientation="vertical" 
+    android:background="@drawable/pop_bg9"
+    android:paddingLeft="5dp"
+    android:paddingRight="5dp"
+    android:paddingTop="5dp"
+    android:paddingBottom="20dp">
+
+    <TextView
+        android:id="@+id/tv_title"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        
+        android:gravity="center"
+
+        android:textSize="14sp"
+        android:textStyle="bold" />
+
+    <TextView
+        android:gravity="center"
+        android:id="@+id/tv_info"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+
+        android:textSize="12sp" />
+
+    <TextView
+        android:gravity="center"
+        android:id="@+id/tv_hint"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/str_click_for_more"
+        android:textColor="@android:color/darker_gray"
+        android:textSize="12sp" />
+
+</LinearLayout>

+ 25 - 29
Apex/res/layout/new_function_select.xml

@@ -12,44 +12,41 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="@string/str_containerstatus"
-        android:textAppearance="?android:attr/textAppearanceMedium"/>
+        android:textAppearance="?android:attr/textAppearanceMedium" />
 
     <RadioGroup
         android:id="@+id/radioGroup1"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:orientation="horizontal"
-        android:layout_marginTop="5dp" 
-        android:layout_marginBottom="5dp">
+        android:layout_marginBottom="5dp"
+        android:layout_marginTop="5dp"
+        android:orientation="horizontal" >
 
-            <RadioButton
-                android:id="@+id/radio0"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:checked="true"
-                android:text="H_BOL"
-                android:layout_weight="1"
-                />
+        <RadioButton
+            android:id="@+id/radio0"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:checked="true"
+            android:text="H_BOL" />
 
-            <RadioButton
-                android:id="@+id/radio1"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:text="Container#"
-                android:layout_weight="1"
-               />
+        <RadioButton
+            android:id="@+id/radio1"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:text="Container#" />
     </RadioGroup>
 
     <AutoCompleteTextView
         android:id="@+id/atv_criterion"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
+        android:completionThreshold="1"
         android:hint="@string/prompt_search_criterion"
         android:inputType="textAutoComplete"
         android:maxLines="1"
-        android:singleLine="true" 
-        >
-
+        android:singleLine="true" >
     </AutoCompleteTextView>
 
     <LinearLayout
@@ -60,16 +57,15 @@
             android:id="@+id/btn_clear"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
-            android:text="@string/str_clear" 
-            android:layout_weight="1"/>
+            android:layout_weight="1"
+            android:text="@string/str_clear" />
 
         <Button
             android:id="@+id/btn_search"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
-            android:text="@string/search" 
-            android:layout_weight="1"/>
-
+            android:layout_weight="1"
+            android:text="@string/search" />
     </LinearLayout>
 
     <View
@@ -128,11 +124,11 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:clickable="true"
-                android:drawableTop="@drawable/ic_down_doc"
+                android:drawableTop="@drawable/ic_document"
                 android:enabled="true"
                 android:focusable="true"
                 android:gravity="center"
-                android:text="Download\nDocument" />
+                android:text="Document\nManage" />
         </TableRow>
 
         <TableRow

+ 3 - 2
Apex/res/layout/search_item_edit.xml

@@ -12,18 +12,19 @@
         android:text="Medium Text"
         android:textAppearance="?android:attr/textAppearanceMedium" />
 
-    <EditText
+    <AutoCompleteTextView
         android:id="@+id/edit_val"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:layout_alignParentLeft="true"
         android:layout_below="@+id/aname"
+        android:completionThreshold="1"
         android:ems="15"
         android:hint="@string/prompt_search_criterion"
         android:inputType="textAutoComplete"
         android:maxLines="1"
         android:singleLine="true"
         android:text="" >
-    </EditText>
+    </AutoCompleteTextView>
 
 </RelativeLayout>

+ 5 - 0
Apex/res/menu/result.xml

@@ -11,4 +11,9 @@
         android:showAsAction="ifRoom" 
         android:icon="@android:drawable/ic_menu_help"
         android:title="@string/action_help"/>
+        <item
+        android:id="@+id/action_save_search"
+        android:orderInCategory="300"
+        android:showAsAction="never"
+        android:title="@string/actoin_save_search"/>
 </menu>

+ 4 - 3
Apex/res/menu/search.xml

@@ -7,9 +7,10 @@
         android:title="@string/action_custom_fields"/>
     <item
         android:id="@+id/action_help"
-        android:orderInCategory="200"
-        android:showAsAction="ifRoom" 
         android:icon="@android:drawable/ic_menu_help"
+        android:orderInCategory="200"
+        android:showAsAction="ifRoom"
         android:title="@string/action_help"/>
 
-</menu>
+
+</menu>

+ 10 - 2
Apex/res/values-zh-rCN/strings.xml

@@ -4,7 +4,8 @@
     <string name="app_name">Apex Mobile</string>
     <string name="action_settings">设置</string>
     <string name="actoin_lock_scroll">滚屏锁定</string>
-        <string name="actoin_add_favorite">收藏</string>
+    <string name="actoin_add_favorite">收藏</string>
+    <string name="actoin_save_search">保存搜索</string>
     <string name="action_deleteall">清空消息</string>
     <string name="action_forget_password">忘记密码</string>
     <string name="action_custom_fields">自定义字段</string>
@@ -27,9 +28,10 @@
     <string name="prompt_user">用户名</string>
     <string name="prompt_password">密码</string>
     <string name="search">搜索</string>
+    <string name="str_click_for_more">单击查看更多信息</string>
     <string name="str_del">删除</string>
     <string name="str_tool">工具</string>
-     <string name="str_createname">为收藏项起名</string>
+    <string name="str_createname">为收藏项起名</string>
     <string name="str_location">服务网点</string>
     <string name="str_savepass">保存密码</string>
     <string name="str_retrievepass">找回密码</string>
@@ -59,11 +61,14 @@
     <string name="str_confirmdownload">确认下载</string>
     <string name="str_confirmdelete">确认删除</string>
     <string name="str_downloadmessage">单击下载按钮开始下载</string>
+    <string name="str_localdir_error">无法访问本地目录,取消下载</string>
     <string name="str_deletemessage">单击删除按钮开始下载</string>
     <string name="str_download">下载</string>
     <string name="str_records"> 记录</string>
     <string name="str_Loading">载入中</string>
     <string name="time_format">yyyy年 MM月dd日 kk:mm:ss</string>
+     <string name="str_sendto">发送到</string>
+      <string name="str_openfile">打开方式</string>
     <string name="title_activity_apex">Apex Mobile</string>
     <string name="title_activity_announcements">Announcements</string>
     <string name="title_activity_direct_tracking">DirectTracking</string>
@@ -80,8 +85,11 @@
     <string name="title_activity_search_list">Search</string>
     <string name="title_activity_retrieve_password">RetrievePassword</string>
     <string name="title_activity_message">消息</string>
+    <string name="title_activity_search_history">搜索历史</string>
     <string name="title_activity_about">About</string>
     <string name="title_activity_web">WebActivity</string>
     <string name="title_activity_message_detail">消息内容</string>
+    <string name="title_activity_documents">文档</string>
+    <string name="title_activity_localdocuments">本地文档</string>
 
 </resources>

+ 12 - 1
Apex/res/values/strings.xml

@@ -5,6 +5,7 @@
     <string name="action_settings">Settings</string>
     <string name="actoin_lock_scroll">Lock Scroll</string>
     <string name="actoin_add_favorite">Add to favorite</string>
+    <string name="actoin_save_search">Save search</string>
     <string name="action_deleteall">Delete All</string>
     <string name="action_forget_password">Forget password</string>
     <string name="action_custom_fields">Customize Fields</string>
@@ -27,6 +28,7 @@
     <string name="prompt_user">User</string>
     <string name="prompt_password">Password</string>
     <string name="search">Search</string>
+    <string name="str_click_for_more">Click for more info</string>
     <string name="str_del">del</string>
     <string name="str_true">true</string>
     <string name="str_false">false</string>
@@ -52,6 +54,7 @@
     <string name="str_confirmdownload">Confirm download</string>
     <string name="str_confirmdelete">Confirm delete</string>
     <string name="str_downloadmessage">Click download button to begin download</string>
+    <string name="str_localdir_error">Can not access local storage,download cancel.</string>
     <string name="str_deletemessage">Click delete button to begin download</string>
     <string name="str_download">Download</string>
     <string name="str_from">from</string>
@@ -63,6 +66,8 @@
     <string name="str_0">0 record</string>
     <string name="str_records"> records</string>
     <string name="str_Loading">Loading</string>
+    <string name="str_sendto">Send to</string>
+    <string name="str_openfile">Open with</string>
     <string name="time_format">MM/dd/yyyy kk:mm:ss</string>
     <string name="title_activity_apex">Apex Mobile</string>
     <string name="title_activity_announcements">Announcements</string>
@@ -80,11 +85,17 @@
     <string name="title_activity_search_list">Search</string>
     <string name="title_activity_retrieve_password">RetrievePassword</string>
     <string name="title_activity_message">Message</string>
+    <string name="title_activity_search_history">Search History</string>
     <string name="title_activity_about">About</string>
     <string name="title_activity_web">WebActivity</string>
     <string name="title_activity_blank">BlankActivity</string>
     <string name="title_activity_message_detail">Message Detail</string>
     <string name="title_activity_inner_tools">InnerToolsActivity</string>
-    <string name="hello_world">Hello world!</string>
+    <string name="title_activity_documents">Documents</string>
+    <string name="title_activity_localdocuments">Local documents</string>
+    <!-- RELEASE KEY -->
+    <!-- <string name="baidu_key">nqBQoSDbxrslhuzW91uViQX7</string> -->
+    <!-- DEBUG KEY -->
+    <string name="baidu_key">tznWFxd3RvSoul1TGQp6GSzo</string>
 
 </resources>

+ 13 - 13
Apex/src/com/usai/apex/Alarmreceiver.java

@@ -203,19 +203,19 @@ public class Alarmreceiver extends BroadcastReceiver
 												+ date, pintent);
 					nManager.notify(R.layout.activity_apex, notification);
 					
-					 Intent intenticon = new Intent(); 
-					 intenticon.setClass(ApexTrackingApplication
-								.get_instance(), FunctionSelectActivity.class); 
-					 Intent addShortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); 
-					 Parcelable icon = Intent.ShortcutIconResource.fromContext(mcontext, 
-					 R.drawable.ic_launcher_new); 
-					 addShortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, ApexTrackingApplication
-								.get_instance().getString(R.string.app_name)); 
-					 addShortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent); 
-					 addShortcut.putExtra("duplicate", 0); 
-					 addShortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon); 
-					 ApexTrackingApplication
-						.get_instance().sendBroadcast(addShortcut); 
+//					 Intent intenticon = new Intent(); 
+//					 intenticon.setClass(ApexTrackingApplication
+//								.get_instance(), FunctionSelectActivity.class); 
+//					 Intent addShortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); 
+//					 Parcelable icon = Intent.ShortcutIconResource.fromContext(mcontext, 
+//					 R.drawable.ic_launcher_new); 
+//					 addShortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, ApexTrackingApplication
+//								.get_instance().getString(R.string.app_name)); 
+//					 addShortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent); 
+//					 addShortcut.putExtra("duplicate", 0); 
+//					 addShortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon); 
+//					 ApexTrackingApplication
+//						.get_instance().sendBroadcast(addShortcut); 
 
 					// notification
 

+ 6 - 6
Apex/src/com/usai/apex/ApexTrackingApplication.java

@@ -29,7 +29,7 @@ public class ApexTrackingApplication extends Application
 	{
 
 		// TODO Auto-generated method stub
-		Log.e(TAG, "onCreate");
+		Log.d(TAG, "onCreate");
 		super.onCreate();
 		instance = this;
 
@@ -96,9 +96,9 @@ public class ApexTrackingApplication extends Application
 		AlarmManager am = (AlarmManager) get_instance().getSystemService(
 				Context.ALARM_SERVICE);
 
-		// 10秒一个周期,不停的发送广播
+		// 5分钟一个周期,不停的发送广播
 		am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime,
-				30 * 1000, sender);
+				300 * 1000, sender);
 	}
 
 	public static void cancelalarm()
@@ -195,19 +195,19 @@ public class ApexTrackingApplication extends Application
 
 	public static String get_sessionid()
 	{
-		Log.e(TAG, "get_sessionid");
+		Log.d(TAG, "get_sessionid");
 		return m_sessionid;
 	}
 
 	public static String get_user()
 	{
-		Log.e(TAG, "get_user");
+		Log.d(TAG, "get_user");
 		return m_user;
 	}
 
 	public static String get_pass()
 	{
-		Log.e(TAG, "get_pass");
+		Log.d(TAG, "get_pass");
 		return m_password;
 	}
 }

+ 186 - 171
Apex/src/com/usai/apex/BaiduMapFragment.java

@@ -6,12 +6,11 @@ package com.usai.apex;
 //import baidumapsdk.demo.DemoApplication.MyGeneralListener;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 
 import org.json.JSONException;
 import org.json.JSONObject;
 
-
-
 import com.baidu.mapapi.BMapManager;
 import com.baidu.mapapi.MKGeneralListener;
 import com.baidu.mapapi.map.ItemizedOverlay;
@@ -19,11 +18,15 @@ import com.baidu.mapapi.map.MKEvent;
 import com.baidu.mapapi.map.MapController;
 import com.baidu.mapapi.map.MapView;
 import com.baidu.mapapi.map.OverlayItem;
+import com.baidu.mapapi.map.PopupClickListener;
+import com.baidu.mapapi.map.PopupOverlay;
 import com.baidu.mapapi.map.SupportMapFragment;
 import com.baidu.platform.comapi.basestruct.GeoPoint;
 import com.usai.util.Network;
 
 import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
 import android.os.AsyncTask;
 import android.os.Bundle;
@@ -34,66 +37,67 @@ import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.TextView;
 import android.widget.Toast;
 
 public class BaiduMapFragment extends Fragment
 {
 	private SearchTask				m_task				= null;
 	String							fragment_content	= null;
-	private MapView mMapView = null;
-	private MyOverlay mOverlay = null;	
-//	private OverlayItem mCurItem = null;
-//	private Button button = null;
-	private ArrayList<OverlayItem>  mItems = null; 
-	
-	SupportMapFragment fragment;
-    BMapManager mBMapManager = null;
-    public static boolean m_bKeyRight = true;
-    public static final String strKey = "tznWFxd3RvSoul1TGQp6GSzo";
-    
-    public class MyOverlay extends ItemizedOverlay{
-
-		public MyOverlay(Drawable defaultMarker, MapView mapView) {
+	private MapView					mMapView			= null;
+	private MyOverlay				mOverlay			= null;
+	// private OverlayItem mCurItem = null;
+	// private Button button = null;
+	private ArrayList<OverlayItem>	mItems				= null;
+	private PopupOverlay			pop					= null;
+	SupportMapFragment				fragment;
+	BMapManager						mBMapManager		= null;
+	public static boolean			m_bKeyRight			= true;
+	HashMap<String, LocationDetail>	marker_detail		= new HashMap<String, LocationDetail>();
+	OverlayItem m_curitem = null;
+	public class MyOverlay extends ItemizedOverlay
+	{
+
+		public MyOverlay(Drawable defaultMarker, MapView mapView)
+		{
 			super(defaultMarker, mapView);
 		}
-		
 
 		@Override
-		public boolean onTap(int index){
-//			OverlayItem item = getItem(index);
-//			mCurItem = item ;
-//			if (index == 3){
-//				button.setText("这是一个系统控件");
-//				GeoPoint pt = new GeoPoint((int) (mLat4 * 1E6),
-//						(int) (mLon4 * 1E6));
-//				// 弹出自定义View
-//				pop.showPopup(button, pt, 32);
-//			}
-//			else{
-//			   popupText.setText(getItem(index).getTitle());
-//			   Bitmap[] bitMaps={
-//				    BMapUtil.getBitmapFromView(popupLeft), 		
-//				    BMapUtil.getBitmapFromView(popupInfo), 		
-//				    BMapUtil.getBitmapFromView(popupRight) 		
-//			    };
-//			    pop.showPopup(bitMaps,item.getPoint(),32);
-//			}
+		public boolean onTap(int index)
+		{
+			Log.d("baidumap...................", "ontap");
+			View viewCache = getActivity().getLayoutInflater().inflate(
+					R.layout.marker_view, null);
+
+			TextView tv_title = (TextView) viewCache
+					.findViewById(R.id.tv_title);
+			TextView tv_info = (TextView) viewCache.findViewById(R.id.tv_info);
+
+			OverlayItem item = getItem(index);
+
+			tv_title.setText(item.getTitle());
+			tv_info.setText(item.getSnippet());
+			m_curitem = item;
+			pop.showPopup(viewCache, item.getPoint(), 32);
 			return true;
 		}
-		
-//		@Override
-//		public boolean onTap(GeoPoint pt , MapView mMapView){
-////			if (pop != null){
-////                pop.hidePop();
-////                mMapView.removeView(button);
-////			}
-//			return false;
-//		}
-    	
-    }   
+
+//		 @Override
+//		 public boolean onTap(GeoPoint pt , MapView mMapView){
+//		  if (pop != null){
+//			  pop.
+//		  pop.hidePop();
+////		  mMapView.removeView(button);
+//		  }
+//		 return false;
+//		 }
+
+	}
+
 	void AddMarker()
 	{
-		
+
 		if (mMapView == null)
 		{
 
@@ -103,7 +107,6 @@ public class BaiduMapFragment extends Fragment
 				return;
 		}
 
-
 		try
 		{
 			JSONObject jsobj = new JSONObject(fragment_content);
@@ -111,15 +114,12 @@ public class BaiduMapFragment extends Fragment
 			int count = jsobj.getInt("total");
 
 			JSONObject objrecords = jsobj.getJSONObject("records");
-			
-
-
+			mOverlay = new MyOverlay(getResources().getDrawable(
+					R.drawable.ic_marker), mMapView);
 			for (int i = 0; i < count; i++)
 			{
 				// offset++;
-				
-				
-				
+
 				JSONObject objrec = objrecords.getJSONObject("record" + i);
 				String area = objrec.getString("area");
 				String company = objrec.getString("company");
@@ -132,71 +132,63 @@ public class BaiduMapFragment extends Fragment
 				String contact = objrec.getString("contact");
 				String email = objrec.getString("email");
 
-
 				LocationDetail detail = new LocationDetail(company, address,
 						telephone, fax, contact, email);
+				marker_detail.put(company, detail);
+
+				/**
+				 * 准备overlay 数据
+				 */
+				GeoPoint p1 = new GeoPoint(
+						(int) (Double.parseDouble(latitude) * 1E6),
+						(int) (Double.parseDouble(longitude) * 1E6));
+				OverlayItem item1 = new OverlayItem(p1, company, city + "\n"
+						+ area);
 				
-				
-		         mOverlay = new MyOverlay(getResources().getDrawable(R.drawable.ic_marker),mMapView);	
-		         /**
-		          * 准备overlay 数据
-		          */
-		         GeoPoint p1 = new GeoPoint ((int)(Double.parseDouble(latitude)*1E6),(int)(Double.parseDouble(longitude)*1E6));
-		         OverlayItem item1 = new OverlayItem(p1,company,city+"\n"+area);
-//		         /**
-//		          * 设置overlay图标,如不设置,则使用创建ItemizedOverlay时的默认图标.
-//		          */
-//		         item1.setMarker(getResources().getDrawable(R.drawable.icon_marka));
-//		         
-//		         GeoPoint p2 = new GeoPoint ((int)(mLat2*1E6),(int)(mLon2*1E6));
-//		         OverlayItem item2 = new OverlayItem(p2,"覆盖物2","");
-//		         item2.setMarker(getResources().getDrawable(R.drawable.icon_markb));
-//		         
-//		         GeoPoint p3 = new GeoPoint ((int)(mLat3*1E6),(int)(mLon3*1E6));
-//		         OverlayItem item3 = new OverlayItem(p3,"覆盖物3","");
-//		         item3.setMarker(getResources().getDrawable(R.drawable.icon_markc));
-//
-//		         GeoPoint p4 = new GeoPoint ((int)(mLat4*1E6),(int)(mLon4*1E6));
-//		         OverlayItem item4 = new OverlayItem(p4,"覆盖物4","");
-//		         item4.setMarker(getResources().getDrawable(R.drawable.icon_gcoding));
-		         /**
-		          * 将item 添加到overlay中
-		          * 注意: 同一个itme只能add一次
-		          */
-		         mOverlay.addItem(item1);
-//		         mOverlay.addItem(item2);
-//		         mOverlay.addItem(item3);
-//		         mOverlay.addItem(item4);				
-
-		         /**
-		          * 保存所有item,以便overlay在reset后重新添加
-		          */
-		         mItems = new ArrayList<OverlayItem>();
-		         mItems.addAll(mOverlay.getAllItem());
-
-//				// 初始化 ground 图层
-//				mGroundOverlay = new GroundOverlay(mMapView);
-//				GeoPoint leftBottom = new GeoPoint((int) (mLat5 * 1E6),
-//						(int) (mLon5 * 1E6));
-//				GeoPoint rightTop = new GeoPoint((int) (mLat6 * 1E6),
-//						(int) (mLon6 * 1E6));
-//				Drawable d = getResources().getDrawable(R.drawable.ground_overlay);
-//				Bitmap bitmap = ((BitmapDrawable) d).getBitmap();
-//				mGround = new Ground(bitmap, leftBottom, rightTop);
-
-		         /**
-		          * 将overlay 添加至MapView中
-		          */
-		         mMapView.getOverlays().add(mOverlay);
-//		         mMapView.getOverlays().add(mGroundOverlay);
-//		         mGroundOverlay.addGround(mGround);
-		         /**
-		          * 刷新地图
-		          */
-		         mMapView.refresh();
-//		         mResetBtn.setEnabled(false);
-//		         mClearBtn.setEnabled(true);
+
+				/**
+				 * 将item 添加到overlay中 注意: 同一个itme只能add一次
+				 */
+				mOverlay.addItem(item1);
+
 			}
+			/**
+			 * 保存所有item,以便overlay在reset后重新添加
+			 */
+			mItems = new ArrayList<OverlayItem>();
+			mItems.addAll(mOverlay.getAllItem());
+			/**
+			 * 将overlay 添加至MapView中
+			 */
+			mMapView.getOverlays().add(mOverlay);
+			/**
+			 * 刷新地图
+			 */
+			mMapView.refresh();
+			PopupClickListener popListener = new PopupClickListener()
+			{
+				@Override
+				public void onClickedPopup(int index)
+				{
+					Log.d("baidu map.......", "popup on click");
+					pop.hidePop();
+					
+					mMapView.refresh();
+					Intent intent = new Intent();
+					intent.setClass(getActivity(), LocationDetailActivity.class);
+
+
+					String markertext = m_curitem.getTitle();
+
+					intent.putExtra("detail", marker_detail.get(markertext));
+					// // intent.putExtra("password", password);
+					// intent.putExtra("function_name", function_name);
+					// intent.putExtra("behavior", Network.BEHAVIOR_SEARCH);
+					startActivity(intent);
+
+				}
+			};
+			pop = new PopupOverlay(mMapView, popListener);
 		}
 		catch (JSONException e)
 		{
@@ -204,6 +196,7 @@ public class BaiduMapFragment extends Fragment
 			e.printStackTrace();
 		}
 	}
+
 	public void requestloactions()
 	{
 
@@ -232,7 +225,7 @@ public class BaiduMapFragment extends Fragment
 		m_task.execute();
 
 	}
-	
+
 	class SearchTask extends AsyncTask<Void, Void, Boolean>
 	{
 		int	errorcode;
@@ -374,67 +367,87 @@ public class BaiduMapFragment extends Fragment
 			// showProgress(false);
 		}
 	}
-	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();
-        }
+
+	public void initEngineManager(Context context)
+	{
+		String strKey = ApexTrackingApplication.get_instance().getString(R.string.baidu_key);
+		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();
-            }
-        }
-    }	
-	
+	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();
+
+			Log.d("onActivityCreated", "create support map fragment");
+			fragment = SupportMapFragment.newInstance();
+			;// .newInstance();
 			fm.beginTransaction().replace(R.id.map, fragment).commit();
 		}
 		mMapView = fragment.getMapView();
@@ -445,21 +458,23 @@ public class BaiduMapFragment extends Fragment
 			Bundle savedInstanceState)
 	{
 		// TODO Auto-generated method stub
-//		return super.onCreateView(inflater, container, savedInstanceState);
+		// return super.onCreateView(inflater, container, savedInstanceState);
 		requestloactions();
 		return inflater.inflate(R.layout.fragment_service_location, container,
 				false);
 	}
+
 	@Override
 	public void onResume()
 	{
 		super.onResume();
 
- 		Log.d("onResume","get map from fragment");
+		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);
+		controller.setCenter(new GeoPoint((int) (29.945 * 1E6),
+				(int) (106.404 * 1E6)));
+		controller.setZoom(5);
 	}
 
 }

+ 17 - 3
Apex/src/com/usai/apex/DetailActivity.java

@@ -191,8 +191,23 @@ public class DetailActivity extends FragmentActivity implements
 
 	// TabHost mTabHost;
 	// private FrameLayout mTabContent;
+	
+//	@Override
+//	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);
+//			finish();
+//			return true;
+//		}
+//		return super.onKeyDown(keyCode, event);
+//	}
+
 	@Override
-	public boolean onKeyDown(int keyCode, KeyEvent event)
+	public boolean onKeyUp(int keyCode, KeyEvent event)
 	{
 		if (keyCode == KeyEvent.KEYCODE_BACK)
 		{
@@ -202,9 +217,8 @@ public class DetailActivity extends FragmentActivity implements
 			finish();
 			return true;
 		}
-		return super.onKeyDown(keyCode, event);
+		return super.onKeyUp(keyCode, event);
 	}
-
 	//
 	// @Override
 	// protected void onCreate(Bundle savedInstanceState)

+ 28 - 2
Apex/src/com/usai/apex/DetailFragment.java

@@ -1,8 +1,11 @@
 package com.usai.apex;
 
+import java.io.File;
+
 import org.json.JSONException;
 import org.json.JSONObject;
 
+
 import com.usai.util.Network;
 import com.usai.util.commonUtil;
 
@@ -21,6 +24,7 @@ import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.Environment;
 import android.support.v4.app.Fragment;
 import android.text.Html;
 import android.util.Log;
@@ -319,6 +323,24 @@ public class DetailFragment extends Fragment implements OnClickListener /*
 								String userAgent, String contentDisposition,
 								String mimetype, long contentLength)
 						{
+							if(!commonUtil.localdirExist())
+							{
+								
+								new AlertDialog.Builder(getActivity())
+				                .setIconAttribute(android.R.attr.alertDialogIcon)
+				                .setTitle(R.string.str_localdir_error)
+				                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+				                    public void onClick(DialogInterface dialog, int whichButton) {
+
+				                        /* User clicked OK so do some stuff */
+				                    }
+				                })
+				                .create().show();
+								return;
+							}
+							String filename = contentDisposition.replace("attachment;filename=\"", "");
+							filename = filename.replace("\"", "");
+							
 							Log.d("WebView", "Download Action");
 							Log.i("tag", "url=" + url);
 							// Log.i("tag", "userAgent="+userAgent);
@@ -341,6 +363,10 @@ public class DetailFragment extends Fragment implements OnClickListener /*
 							// 设置允许使用的网络类型,这里是移动网络和wifi都可以
 							request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE
 									| DownloadManager.Request.NETWORK_WIFI);
+							
+							
+							
+							request.setDestinationInExternalPublicDir("Apex Mobile",filename); 
 
 							// 禁止发出通知,既后台下载,如果要使用这一句必须声明一个权限:android.permission.DOWNLOAD_WITHOUT_NOTIFICATION
 							// request.setShowRunningNotification(false);
@@ -358,7 +384,7 @@ public class DetailFragment extends Fragment implements OnClickListener /*
 							// request.setDestinationInExternalFilesDir(this,
 							// null, "tar.apk");
 
-							getActivity();
+//							getActivity();
 							AlertDialog.Builder builder = new Builder(
 									getActivity());
 							builder.setMessage(getString(R.string.str_downloadmessage));
@@ -486,7 +512,7 @@ public class DetailFragment extends Fragment implements OnClickListener /*
 	public void onDestroy()
 	{
 		if (m_task != null)
-			m_task.cancel(false);
+			m_task.cancel(true);
 		super.onDestroy();
 	}
 

+ 0 - 48
Apex/src/com/usai/apex/DirectTrackingFragment.java

@@ -1,48 +0,0 @@
-package com.usai.apex;
-
-import android.os.Bundle;
-import android.support.v4.app.Fragment;
-//import android.app.Fragment;
-//import android.app.Fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.View.OnClickListener;
-import android.widget.Button;
-
-public class DirectTrackingFragment extends Fragment implements OnClickListener
-{
-	@Override
-	public View onCreateView(LayoutInflater inflater, ViewGroup container,
-			Bundle savedInstanceState)
-	{
-		View view = inflater.inflate(R.layout.fragment_direct_tracking, null);
-		Button btn = (Button) view.findViewById(R.id.btn_cancel);
-		btn.setOnClickListener(this);
-		return view;
-		// return super.onCreateView(inflater, container, savedInstanceState);
-	}
-
-	@Override
-	public void onClick(View v)
-	{
-		// TODO Auto-generated method stub
-		
-	}
-
-//	@Override
-//	protected void onCreate(Bundle savedInstanceState)
-//	{
-//		super.onCreate(savedInstanceState);
-//		setContentView(R.layout.fragment_direct_tracking);
-//	}
-//
-//	@Override
-//	public boolean onCreateOptionsMenu(Menu menu)
-//	{
-//		// Inflate the menu; this adds items to the action bar if it is present.
-//		getMenuInflater().inflate(R.menu.direct_tracking, menu);
-//		return true;
-//	}
-
-}

+ 25 - 0
Apex/src/com/usai/apex/DocumentsActivity.java

@@ -0,0 +1,25 @@
+package com.usai.apex;
+
+import android.os.Bundle;
+import android.support.v4.app.FragmentActivity;
+
+public class DocumentsActivity extends FragmentActivity
+{
+
+	@Override
+	protected void onCreate(Bundle savedInstanceState)
+	{
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.activity_inner_tools);
+
+		// Fragment f = new ToolsFragment();
+		if (savedInstanceState == null)
+		{
+			getSupportFragmentManager().beginTransaction()
+					.add(R.id.container, new DocumentsFragment()).commit();
+		}
+
+
+	}
+
+}

+ 88 - 0
Apex/src/com/usai/apex/DocumentsFragment.java

@@ -0,0 +1,88 @@
+package com.usai.apex;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.Intent.ShortcutIconResource;
+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.ListView;
+import android.widget.SimpleAdapter;
+
+public class DocumentsFragment 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", "Search documents online");
+		map.put("img", R.drawable.ic_launcher);
+		list.add(map);
+
+		map = new HashMap<String, Object>();
+		map.put("title", "View download documents");
+		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);
+		
+		String title = (String) getData().get(position).get("title");
+		Intent intent = new Intent();
+		if(title.equals("Search documents online"))
+		{
+			intent.setClass(getActivity(), SearchListActivity.class);
+	
+			intent.putExtra("function_name", "Download Document");
+			intent.putExtra("title", "Document Search");
+
+		}
+		else if(title.equals("View download documents"))
+		{
+			intent.setClass(getActivity(), LocalDocumentActivity.class);
+//			intent.putExtra("module_name", "Announcements");
+		}
+
+		
+		startActivity(intent);
+
+	}
+}

+ 274 - 0
Apex/src/com/usai/apex/FavoritesFragment.java

@@ -0,0 +1,274 @@
+package com.usai.apex;
+
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+import com.usai.util.dbUtil;
+
+import android.content.Context;
+import android.content.Intent;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.ListFragment;
+import android.text.format.DateFormat;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.View.OnTouchListener;
+import android.widget.BaseAdapter;
+import android.widget.Button;
+import android.widget.ListView;
+import android.widget.SimpleAdapter;
+import android.widget.TextView;
+
+public class FavoritesFragment extends ListFragment implements OnTouchListener
+{
+	
+	SearchResult	searchresult	= new SearchResult();
+	BaseAdapter		adapter			= null;
+	private int		pointX, pointY, endX, endY;
+	private int		position, newpos;
+	private Button	curDel_btn;	
+	@Override
+	public void onActivityCreated(Bundle savedInstanceState)
+	{
+		super.onActivityCreated(savedInstanceState);
+		adapter = new FavoritesAdapter(searchresult, getActivity());
+
+		getListView().setOnTouchListener(this);
+		setListAdapter(adapter);
+//		this.getListView().setBackgroundColor(Color.WHITE);
+	}
+
+	@Override
+	public void onListItemClick(ListView l, View v, int position, long id)
+	{
+
+		Intent intent = new Intent();
+//		SQLiteDatabase db = dbUtil.OpenDB(getActivity(), null, false);
+//		Cursor c = db.query("favorites", new String[] {"params"},"_id="+searchresult.getData().get(position).get("_id"),null, null, null, null);
+//		if(c.moveToNext())
+//		{
+			String uri = (String) searchresult.getData().get(position).get("params");
+			try
+			{
+				intent = Intent.parseUri(uri, 0);
+				
+				startActivity(intent);
+			}
+			catch (URISyntaxException e)
+			{
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+			
+//			intent.setclass
+//		}
+////		searchresult.getData().get(position).put("read", (long) 1);// .get("_id")
+//		dbUtil.CloseCursor(c);
+//		dbUtil.CloseDB(db);
+//		adapter.notifyDataSetChanged();
+//		super.onListItemClick(l, v, position, id);
+//
+//		// Log.i("FragmentList", "Item clicked: " + id);
+//		Intent intent = new Intent();
+//		intent.putExtra("s_id", (String) searchresult.getData().get(position)
+//				.get("s_id"));
+//		intent.putExtra("e_id", (String) searchresult.getData().get(position)
+//				.get("e_id"));
+//		intent.putExtra("msgcount", (Long) searchresult.getData().get(position)
+//				.get("msgcount"));
+//
+//		intent.setClass(this, MessageDetailActivity.class);
+		
+
+	}
+	
+	private class FavoritesAdapter extends BaseAdapter
+	{
+		private LayoutInflater	mInflater;	// 动态布局映射
+											// private SearchResult result;
+
+		// private Context context;
+		// private int i = 0;
+		public FavoritesAdapter(SearchResult result, Context context)
+		{
+			// this.result = result;
+			this.mInflater = LayoutInflater.from(context);
+			SQLiteDatabase db = dbUtil
+					.OpenDB(getActivity(), null, false);
+			Cursor cursor = db.query("favorites",
+					new String[] { "_id", "create_time", "name",
+							"params" }, "user='"
+							+ ApexTrackingApplication.get_user() + "'", null,
+					null, null, "_id desc", null);
+
+			result.add_records(cursor);
+			dbUtil.CloseCursor(cursor);
+			dbUtil.CloseDB(db);
+			// this.result = result;
+			// // this.context = context;
+			// this.mInflater = LayoutInflater.from(context);
+		}
+
+		@Override
+		public View getView(int position, View convertView, ViewGroup parent)
+		{
+			// TODO Auto-generated method stub
+			convertView = mInflater.inflate(R.layout.message_list_item, null);// 根据布局文件实例化view
+
+			TextView message = (TextView) convertView
+					.findViewById(R.id.tv_message);// 找某个控件
+
+			message.setText(searchresult.getData().get(position).get("name")
+							.toString());// 给该控件设置数据(数据从集合类中来)
+			TextView time = (TextView) convertView.findViewById(R.id.tv_time);
+			time.setText(DateFormat.format(
+					getString(R.string.time_format),
+					(Long) searchresult.getData().get(position)
+							.get("create_time")));
+
+
+			return convertView;
+		}
+
+		@Override
+		public int getCount()
+		{
+			return searchresult.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;
+		}
+	}
+	private class SearchResult
+	{
+		List<Map<String, Object>>	datalist	= new ArrayList<Map<String, Object>>();
+
+		public int get_count()
+		{
+			return datalist.size();
+		}
+
+		public void add_records(Cursor c)
+		{
+			while (c.moveToNext())
+			{
+				long _id = c.getInt(0);
+				long create_time = c.getLong(1);
+				String name = c.getString(2);
+				String params = c.getString(3);
+				Map<String, Object> map = new HashMap<String, Object>();
+				map.put("_id", _id);
+				
+				map.put("create_time", create_time);
+				map.put("name", name);
+				
+				map.put("params", params);
+
+				datalist.add(map);
+			}
+
+		}
+
+		public List<Map<String, Object>> getData()
+		{
+
+			return datalist;
+		}
+	}
+	@Override
+	public boolean onTouch(View v, MotionEvent event)
+	{
+		switch (event.getAction())
+		{
+			case MotionEvent.ACTION_DOWN:
+				System.out.println("====>>>>>>>>>>>>>>ACTION_DOWN"
+						+ MotionEvent.ACTION_DOWN);
+				// 手指按下,计算焦点位于ListView的那个条目
+				pointX = (int) event.getX();
+				pointY = (int) event.getY();
+				// 备注1
+				position = getListView().pointToPosition(pointX, pointY);
+				if (curDel_btn != null)
+				{
+					curDel_btn.setVisibility(View.GONE);
+				}
+				break;
+			case MotionEvent.ACTION_MOVE:
+
+				break;
+			case MotionEvent.ACTION_UP:
+				System.out.println("====>>>>>>>>>>>>>>ACTION_UP"
+						+ MotionEvent.ACTION_UP);
+				endX = (int) event.getX();
+				endY = (int) event.getY();
+				newpos = getListView().pointToPosition(endX, endY);
+				// 原本想着加上这个条件(newpos==position)是不是更精确些,
+				// 经过实践发现,其实我们在滑动listView的列表的时候有时候更渴望有滑动就ok
+				if (Math.abs(endX - pointX) > 100 && newpos == position
+						&& Math.abs(endY - pointY) < 100)
+				{
+					// 获取到ListView第一个可见条目的position
+					int firstVisiblePosition = getListView()
+							.getFirstVisiblePosition();
+
+					// --------------备注2
+					View view = getListView().getChildAt(
+							position - firstVisiblePosition);
+					Button delbtn = (Button) view.findViewById(R.id.btn_del);
+					delbtn.setVisibility(View.VISIBLE);
+					curDel_btn = delbtn;
+					delbtn.setOnClickListener(new View.OnClickListener()
+					{
+
+						@Override
+						public void onClick(View v)
+						{
+							// TODO Auto-generated method stub
+
+							SQLiteDatabase db = dbUtil.OpenDB(
+									getActivity(), null, false);
+							db.execSQL("delete from favorites where _id="
+									+ (Long) searchresult.getData()
+											.get(position).get("_id"));
+							Log.d("sql delete" + position,
+									"delete from push_message where _id="
+											+ (Long) searchresult.getData()
+													.get(position).get("_id"));
+
+							dbUtil.CloseDB(db);
+							searchresult.getData().remove(position);
+							adapter.notifyDataSetChanged();
+						}
+					});
+
+				}
+				break;
+
+			default:
+				break;
+		}
+		return false;
+	}
+}

+ 88 - 28
Apex/src/com/usai/apex/FunctionSelectActivity.java

@@ -13,20 +13,27 @@ import android.database.sqlite.SQLiteDatabase;
 import android.os.Bundle;
 import android.os.Parcelable;
 import android.support.v4.app.FragmentActivity;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.View;
 import android.view.View.OnClickListener;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.ArrayAdapter;
 import android.widget.AutoCompleteTextView;
 import android.widget.Button;
 import android.widget.RadioGroup;
+import android.widget.RadioGroup.OnCheckedChangeListener;
 import android.widget.TextView;
 
 public class FunctionSelectActivity extends FragmentActivity implements
-		OnClickListener
+		OnClickListener, OnCheckedChangeListener
 {
 
+	static final int PASSWORD_CHANGED = 1;
 	private static final int	REQUEST_LOGINACTIVITY			= 1;
 	private static final int	REQUEST_CHANGEPASSWORD_ACTIVITY	= 2;
+	private static final int	REQUEST_TOOLS_ACTIVITY			= 3;
+	ArrayAdapter<String>		adapter							= null;
 
 	@Override
 	protected void onCreate(Bundle savedInstanceState)
@@ -61,7 +68,19 @@ public class FunctionSelectActivity extends FragmentActivity implements
 		btn_search.setOnClickListener(this);
 		Button btn_clear = (Button) findViewById(R.id.btn_clear);
 		btn_clear.setOnClickListener(this);
-
+		RadioGroup rg = (RadioGroup) findViewById(R.id.radioGroup1);
+		rg.setOnCheckedChangeListener(this);
+		// AutoCompleteTextView et = (AutoCompleteTextView)
+		// findViewById(R.id.atv_criterion);
+		// if (rg.getCheckedRadioButtonId() == R.id.radio0)
+		// adapter = new ArrayAdapter<String>(this,
+		// android.R.layout.simple_dropdown_item_1line,
+		// dbUtil.get_searchhistory("h_bol"));
+		// else
+		// adapter = new ArrayAdapter<String>(this,
+		// android.R.layout.simple_dropdown_item_1line,
+		// dbUtil.get_searchhistory("ctnr"));
+		// et.setAdapter(adapter);
 		SharedPreferences pref = ApexTrackingApplication.get_instance()
 				.getSharedPreferences("Apex", 0);
 		boolean autologin = pref.getBoolean("autologin", false);
@@ -84,15 +103,15 @@ public class FunctionSelectActivity extends FragmentActivity implements
 				if (resultCode == Activity.RESULT_CANCELED)
 					finish();
 				break;
-			case REQUEST_CHANGEPASSWORD_ACTIVITY:
-				if (resultCode == Activity.RESULT_OK)
+			case REQUEST_TOOLS_ACTIVITY:
+				if (resultCode == PASSWORD_CHANGED)
 				{
 					String UNIQUE_STRING = "com.usai.apex.push.cancel";
 					Intent intent = new Intent(UNIQUE_STRING);
 					sendBroadcast(intent);
 					Intent i = new Intent();
 					i.setClass(this, ApexActivity.class);
-					startActivityForResult(i, 1);
+					startActivityForResult(i, REQUEST_LOGINACTIVITY);
 				}
 				break;
 			default:
@@ -121,11 +140,21 @@ public class FunctionSelectActivity extends FragmentActivity implements
 
 				AutoCompleteTextView et = (AutoCompleteTextView) findViewById(R.id.atv_criterion);
 				et.setText("");
+				break;
 
 			}
 			case R.id.btn_search:
 			{
+
 				AutoCompleteTextView et = (AutoCompleteTextView) findViewById(R.id.atv_criterion);
+				// et.clearFocus();
+
+				InputMethodManager inputMethodManager = (InputMethodManager) getApplicationContext()
+						.getSystemService(Context.INPUT_METHOD_SERVICE);
+
+				inputMethodManager.hideSoftInputFromWindow(et.getWindowToken(),
+						0);
+				inputMethodManager.hideStatusIcon(et.getWindowToken());
 				String cargo_criterion = et.getText().toString();
 				// if (TextUtils.isEmpty(cargo_criterion))
 				// {
@@ -148,14 +177,16 @@ public class FunctionSelectActivity extends FragmentActivity implements
 				if (rg.getCheckedRadioButtonId() == R.id.radio0)
 				{
 					intent.putExtra("criterion_type", 0);
-					h_field = "hbol";
+					h_field = "h_bol";
 				}
 				else
 				{
 					intent.putExtra("criterion_type", 1);
-					h_field = "container_no";
+					h_field = "ctnr";
 				}
 
+				dbUtil.savehistory(h_field, cargo_criterion);
+
 				startActivity(intent);
 
 				break;
@@ -197,11 +228,11 @@ public class FunctionSelectActivity extends FragmentActivity implements
 			case R.id.tv_doc:
 			{
 				Intent intent = new Intent();
-				intent.setClass(this, SearchListActivity.class);
-				// intent.putExtra("user", user);
-				// intent.putExtra("password", password);
-				intent.putExtra("function_name", "Download Document");
-				intent.putExtra("title", "Document Search");
+				intent.setClass(this, DocumentsActivity.class);
+				// // intent.putExtra("user", user);
+				// // intent.putExtra("password", password);
+				// intent.putExtra("function_name", "Download Document");
+				// intent.putExtra("title", "Document Search");
 				startActivity(intent);
 				break;
 			}
@@ -245,7 +276,7 @@ public class FunctionSelectActivity extends FragmentActivity implements
 				Intent intent = new Intent();
 				intent.setClass(this, InnerToolsActivity.class);
 				intent.putExtra("launcher", "inner");
-				startActivity(intent);
+				startActivityForResult(intent,REQUEST_TOOLS_ACTIVITY);
 				break;
 			}
 			case R.id.tv_location:
@@ -289,21 +320,21 @@ public class FunctionSelectActivity extends FragmentActivity implements
 				.getSystemService(Context.NOTIFICATION_SERVICE);
 		nManager.cancel(R.layout.activity_apex);
 
-
-//		Intent intent = new Intent();
-//		intent.setClass(ApexTrackingApplication
-//				.get_instance(), FunctionSelectActivity.class);
-//		Intent addShortcut = new Intent(
-//				"com.android.launcher.action.INSTALL_SHORTCUT");
-//		Parcelable icon = Intent.ShortcutIconResource.fromContext(this,
-//				R.drawable.ic_launcher);
-//		addShortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,
-//				getString(R.string.app_name));
-//		addShortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);
-//		addShortcut.putExtra("duplicate", 0);
-//		addShortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);
-//		Log.e("uuuuuuuuuuuuuuuurrrrrrrrrrrrrriiiiiiiii", intent.toUri(MODE_WORLD_WRITEABLE));
-//		sendBroadcast(addShortcut);
+		// Intent intent = new Intent();
+		// intent.setClass(ApexTrackingApplication
+		// .get_instance(), FunctionSelectActivity.class);
+		// Intent addShortcut = new Intent(
+		// "com.android.launcher.action.INSTALL_SHORTCUT");
+		// Parcelable icon = Intent.ShortcutIconResource.fromContext(this,
+		// R.drawable.ic_launcher);
+		// addShortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,
+		// getString(R.string.app_name));
+		// addShortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);
+		// addShortcut.putExtra("duplicate", 0);
+		// addShortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);
+		// Log.e("uuuuuuuuuuuuuuuurrrrrrrrrrrrrriiiiiiiii",
+		// intent.toUri(MODE_WORLD_WRITEABLE));
+		// sendBroadcast(addShortcut);
 		if (count > 0)
 		{
 			TextView tv_message = (TextView) findViewById(R.id.tv_message);
@@ -317,7 +348,36 @@ public class FunctionSelectActivity extends FragmentActivity implements
 			tv_message.setCompoundDrawablesWithIntrinsicBounds(0,
 					R.drawable.ic_message, 0, 0);
 		}
+
+		RadioGroup rg = (RadioGroup) findViewById(R.id.radioGroup1);
+		AutoCompleteTextView et = (AutoCompleteTextView) findViewById(R.id.atv_criterion);
+		if (rg.getCheckedRadioButtonId() == R.id.radio0)
+			adapter = new ArrayAdapter<String>(this,
+					android.R.layout.simple_dropdown_item_1line,
+					dbUtil.get_searchhistory("h_bol"));
+		else
+			adapter = new ArrayAdapter<String>(this,
+					android.R.layout.simple_dropdown_item_1line,
+					dbUtil.get_searchhistory("ctnr"));
+		et.setAdapter(adapter);
 		super.onResume();
 	}
 
+	@Override
+	public void onCheckedChanged(RadioGroup group, int checkedId)
+	{
+
+		AutoCompleteTextView et = (AutoCompleteTextView) findViewById(R.id.atv_criterion);
+		if (checkedId == R.id.radio0)
+			adapter = new ArrayAdapter<String>(this,
+					android.R.layout.simple_dropdown_item_1line,
+					dbUtil.get_searchhistory("h_bol"));
+		else
+			adapter = new ArrayAdapter<String>(this,
+					android.R.layout.simple_dropdown_item_1line,
+					dbUtil.get_searchhistory("ctnr"));
+		et.setAdapter(adapter);
+
+	}
+
 }

+ 289 - 0
Apex/src/com/usai/apex/HistoryFragment.java

@@ -0,0 +1,289 @@
+package com.usai.apex;
+
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+
+import com.usai.util.dbUtil;
+
+import android.content.Context;
+import android.content.Intent;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.ListFragment;
+import android.text.TextUtils;
+import android.text.format.DateFormat;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.View.OnTouchListener;
+import android.widget.BaseAdapter;
+import android.widget.Button;
+import android.widget.ListView;
+import android.widget.TextView;
+
+public class HistoryFragment extends ListFragment implements OnTouchListener
+{
+	SearchResult	searchresult	= new SearchResult();
+	BaseAdapter		adapter			= null;
+	private int		pointX, pointY, endX, endY;
+	private int		position, newpos;
+	private Button	curDel_btn;	
+	@Override
+	public void onActivityCreated(Bundle savedInstanceState)
+	{
+		super.onActivityCreated(savedInstanceState);
+		adapter = new HistoryAdapter(searchresult, getActivity());
+
+		getListView().setOnTouchListener(this);
+		setListAdapter(adapter);
+//		this.getListView().setBackgroundColor(Color.WHITE);
+	}
+
+	@Override
+	public void onListItemClick(ListView l, View v, int position, long id)
+	{
+
+		Intent intent = new Intent();
+		String uri = (String) searchresult.getData().get(position).get("params");
+		String searchParms = (String) searchresult.getData().get(position).get("criterion");
+		try
+		{
+//			Bundle bundle = new Bundle();
+			intent = Intent.parseUri(uri, 0);
+			Bundle parms = new Bundle();
+//			parms.writeToParcel(parcel, flags)
+			JSONObject obj = new JSONObject(searchParms);
+			Iterator<?> it = obj.keys();
+			while (it.hasNext())
+			{
+
+				String key = (String) it.next();
+				parms.putString(key, obj.getString(key));
+
+//					obj.put(key, searchParms.get(key).toString());
+
+
+
+			}
+			intent.putExtra("searchParms", parms);
+//			obj.toString();
+			
+			intent.putExtra("columns",
+					dbUtil.get_fields(ApexTrackingApplication.get_user(), (String) searchresult.getData().get(position).get("module_name")));
+			startActivity(intent);
+		}
+		catch (URISyntaxException e)
+		{
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		catch (JSONException e)
+		{
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+		
+
+	}
+	
+	private class HistoryAdapter extends BaseAdapter
+	{
+		private LayoutInflater	mInflater;	// 动态布局映射
+											// private SearchResult result;
+
+		// private Context context;
+		// private int i = 0;
+		public HistoryAdapter(SearchResult result, Context context)
+		{
+			// this.result = result;
+			this.mInflater = LayoutInflater.from(context);
+			SQLiteDatabase db = dbUtil
+					.OpenDB(getActivity(), null, false);
+			Cursor cursor = db.query("history",
+					new String[] { "_id", "create_time", "criterion",
+							"params","module_name" ,"name"}, "user='"
+							+ ApexTrackingApplication.get_user() + "'", null,
+					null, null, "_id desc", null);
+
+			result.add_records(cursor);
+			dbUtil.CloseCursor(cursor);
+			dbUtil.CloseDB(db);
+			// this.result = result;
+			// // this.context = context;
+			// this.mInflater = LayoutInflater.from(context);
+		}
+
+		@Override
+		public View getView(int position, View convertView, ViewGroup parent)
+		{
+			// TODO Auto-generated method stub
+			convertView = mInflater.inflate(R.layout.message_list_item, null);// 根据布局文件实例化view
+
+			TextView message = (TextView) convertView
+					.findViewById(R.id.tv_message);// 找某个控件
+
+			String name = (String) searchresult.getData().get(position).get("name");
+			if(TextUtils.isEmpty(name))
+			{
+				name = "";
+			}
+			message.setText(name);// 给该控件设置数据(数据从集合类中来)
+			TextView time = (TextView) convertView.findViewById(R.id.tv_time);
+			time.setText(DateFormat.format(
+					getString(R.string.time_format),
+					(Long) searchresult.getData().get(position)
+							.get("create_time")));
+
+
+			return convertView;
+		}
+
+		@Override
+		public int getCount()
+		{
+			return searchresult.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;
+		}
+	}
+	private class SearchResult
+	{
+		List<Map<String, Object>>	datalist	= new ArrayList<Map<String, Object>>();
+
+		public int get_count()
+		{
+			return datalist.size();
+		}
+
+		public void add_records(Cursor c)
+		{
+			while (c.moveToNext())
+			{
+				long _id = c.getInt(0);
+				long create_time = c.getLong(1);
+				String criterion = c.getString(2);
+				String params = c.getString(3);
+				String module_name = c.getString(4);
+				String name = c.getString(5);
+				Map<String, Object> map = new HashMap<String, Object>();
+				map.put("_id", _id);
+				
+				map.put("create_time", create_time);
+				map.put("criterion", criterion);
+				
+				map.put("params", params);
+				map.put("module_name", module_name);
+				map.put("name", name);
+
+				datalist.add(map);
+			}
+
+		}
+
+		public List<Map<String, Object>> getData()
+		{
+
+			return datalist;
+		}
+	}
+	@Override
+	public boolean onTouch(View v, MotionEvent event)
+	{
+		switch (event.getAction())
+		{
+			case MotionEvent.ACTION_DOWN:
+				System.out.println("====>>>>>>>>>>>>>>ACTION_DOWN"
+						+ MotionEvent.ACTION_DOWN);
+				// 手指按下,计算焦点位于ListView的那个条目
+				pointX = (int) event.getX();
+				pointY = (int) event.getY();
+				// 备注1
+				position = getListView().pointToPosition(pointX, pointY);
+				if (curDel_btn != null)
+				{
+					curDel_btn.setVisibility(View.GONE);
+				}
+				break;
+			case MotionEvent.ACTION_MOVE:
+
+				break;
+			case MotionEvent.ACTION_UP:
+				System.out.println("====>>>>>>>>>>>>>>ACTION_UP"
+						+ MotionEvent.ACTION_UP);
+				endX = (int) event.getX();
+				endY = (int) event.getY();
+				newpos = getListView().pointToPosition(endX, endY);
+				// 原本想着加上这个条件(newpos==position)是不是更精确些,
+				// 经过实践发现,其实我们在滑动listView的列表的时候有时候更渴望有滑动就ok
+				if (Math.abs(endX - pointX) > 100 && newpos == position
+						&& Math.abs(endY - pointY) < 100)
+				{
+					// 获取到ListView第一个可见条目的position
+					int firstVisiblePosition = getListView()
+							.getFirstVisiblePosition();
+
+					// --------------备注2
+					View view = getListView().getChildAt(
+							position - firstVisiblePosition);
+					Button delbtn = (Button) view.findViewById(R.id.btn_del);
+					delbtn.setVisibility(View.VISIBLE);
+					curDel_btn = delbtn;
+					delbtn.setOnClickListener(new View.OnClickListener()
+					{
+
+						@Override
+						public void onClick(View v)
+						{
+							// TODO Auto-generated method stub
+
+							SQLiteDatabase db = dbUtil.OpenDB(
+									getActivity(), null, false);
+							db.execSQL("delete from history where _id="
+									+ (Long) searchresult.getData()
+											.get(position).get("_id"));
+							Log.d("sql delete" + position,
+									"delete from push_message where _id="
+											+ (Long) searchresult.getData()
+													.get(position).get("_id"));
+
+							dbUtil.CloseDB(db);
+							searchresult.getData().remove(position);
+							adapter.notifyDataSetChanged();
+						}
+					});
+
+				}
+				break;
+
+			default:
+				break;
+		}
+		return false;
+	}
+}

+ 66 - 63
Apex/src/com/usai/apex/InnerMapActivity.java

@@ -18,63 +18,63 @@ import android.widget.Toast;
 
 public class InnerMapActivity extends FragmentActivity
 {
-	public static boolean		m_bKeyRight				= true;
-	BMapManager					mBMapManager			= null;
+//	public static boolean		m_bKeyRight				= true;
+//	BMapManager					mBMapManager			= null;
 
-	public static final String	strKey					= "tznWFxd3RvSoul1TGQp6GSzo";
+//    public String strKey = getString(R.string.baidu_key);//"nqBQoSDbxrslhuzW91uViQX7";//release
 	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();
-			}
-		}
-	}
+//	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)
@@ -140,20 +140,23 @@ public class InnerMapActivity extends FragmentActivity
 		}
 		else
 		{
-			if (mBMapManager == null)
-			{
-				mBMapManager = new BMapManager(getApplicationContext());
-				/**
-				 * ??????BMapManager???????????????????????????BMapManager
-				 */
-				mBMapManager.init(strKey, new MyGeneralListener());
-			}
+//			if (mBMapManager == null)
+//			{
+//				mBMapManager = new BMapManager(getApplicationContext());
+//				/**
+//				 * ??????BMapManager???????????????????????????BMapManager
+//				 */
+//				mBMapManager.init(strKey, new MyGeneralListener());
+//			}
+			
+//			f.initEngineManager(this);
 			setContentView(R.layout.activity_inner_map);
-			Log.d(LTAG, "onCreate");
-			// setContentView(R.layout.activity_main);
-			map = SupportMapFragment.newInstance();
+//			Log.d(LTAG, "onCreate");
+//			// setContentView(R.layout.activity_main);
+//			map = SupportMapFragment.newInstance();
+			BaiduMapFragment f  = new BaiduMapFragment();
 			FragmentManager manager = getSupportFragmentManager();
-			manager.beginTransaction().add(R.id.inner_map, map, "map_fragment")
+			manager.beginTransaction().add(R.id.inner_map, f, "map_fragment")
 					.commit();
 		}
 	}

+ 5 - 1
Apex/src/com/usai/apex/InnerToolsActivity.java

@@ -21,8 +21,12 @@ public class InnerToolsActivity extends FragmentActivity
 		// Fragment f = new ToolsFragment();
 		if (savedInstanceState == null)
 		{
+			ToolsFragment f = new ToolsFragment();
+			Bundle b = new Bundle();
+			b.putBoolean("Login", true);
+			f.setArguments(b);
 			getSupportFragmentManager().beginTransaction()
-					.add(R.id.container, new ToolsFragment()).commit();
+					.add(R.id.container, f).commit();
 		}
 
 

+ 203 - 0
Apex/src/com/usai/apex/LocalDocumentActivity.java

@@ -0,0 +1,203 @@
+package com.usai.apex;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.usai.util.commonUtil;
+
+import android.app.ListActivity;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Color;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Environment;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.SimpleAdapter;
+
+public class LocalDocumentActivity extends ListActivity
+{
+	public static final String FILETYPE ="pdf";
+	private List<Map<String, Object>> getData()
+	{
+		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
+
+		
+	
+        if(commonUtil.localdirExist())
+        {
+        	File path = new File(Environment.getExternalStorageDirectory().getPath()+"/Apex Mobile");
+            //返回文件夹中有的数据
+            File[] files = path.listFiles();
+            //先判断下有没有权限,如果没有权限的话,就不执行了
+            if(null == files)
+                return list;
+            for(int i = 0; i < files.length; i++)
+            {
+//				String filePath = files[i].getAbsolutePath();
+				String fileName = files[i].getName();
+				String[] token = fileName.split("\\.");
+				String ext = token[token.length-1];
+				if(!FILETYPE.contains(ext))
+					continue;
+
+				Map<String, Object> map = new HashMap<String, Object>();
+				map.put("title", fileName);
+				map.put("ext", ext);
+				if(ext.toLowerCase().equals("pdf"))
+					map.put("img", R.drawable.ic_pdf128);
+				else
+					map.put("img", R.drawable.ic_file128);
+				list.add(map);
+
+            }
+        }
+		return list;
+	}
+
+
+	@Override
+	protected void onCreate(Bundle savedInstanceState)
+	{
+
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.message_list);
+
+		SimpleAdapter adapter = new DocumentsAdapter(this,
+				getData(), R.layout.documents_list_item, 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);
+		String filename = (String) getData().get(position).get("title");
+		Intent intent = new Intent("android.intent.action.VIEW");
+
+		intent.addCategory("android.intent.category.DEFAULT");
+
+		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
+		Uri uri = Uri.fromFile(new File(Environment
+				.getExternalStorageDirectory().getPath()
+				+ "/Apex Mobile/"
+				+ filename));
+
+		intent.setDataAndType(uri, "application/"+(String) getData().get(position).get("ext"));
+//	    startActivity(intent);
+	    startActivity(Intent.createChooser(intent,getString(R.string.str_openfile)));
+//		
+//		Intent intent = new Intent();
+//		if(title.equals("Search documents online"))
+//		{
+//			intent.setClass(this, SearchListActivity.class);
+//	
+//			intent.putExtra("function_name", "Download Document");
+//			intent.putExtra("title", "Document Search");
+//
+//		}
+//		else if(title.equals("View download documents"))
+//		{
+//			intent.setClass(this, AnnouncementActivity.class);
+//			intent.putExtra("module_name", "Announcements");
+//		}
+//
+//		
+//		startActivity(intent);
+
+	}
+	
+	private class DocumentsAdapter extends SimpleAdapter
+	{
+
+//		private LayoutInflater	mInflater;
+		@Override
+		public View getView( int position, View convertView, ViewGroup parent)
+		{
+			convertView =super.getView(position, convertView, parent);
+			// TODO Auto-generated method stub
+//			convertView = mInflater.inflate(R.layout.announcement_item, null);// 根据布局文件实例化view
+
+			ImageView iv = (ImageView)convertView.findViewById(R.id.iv_share);
+			iv.setTag( (String) getData().get(position).get("title"));
+			iv.setOnClickListener(new OnClickListener()
+			{
+				
+				@Override
+				public void onClick(View v)
+				{
+					Intent share = new Intent(Intent.ACTION_SEND);   
+					String filename = (String) v.getTag();
+					share.putExtra(Intent.EXTRA_STREAM, 
+					Uri.fromFile(new File(Environment.getExternalStorageDirectory().getPath()+"/Apex Mobile/"+filename)));
+					String[] token = filename.split("\\.");
+					String ext = token[token.length-1];
+					share.setType("application/"+ext);//此处可发送多种文件
+					startActivity(Intent.createChooser(share,getString(R.string.str_sendto)));
+					
+				}
+			});
+//			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;
+		}
+		public DocumentsAdapter(Context context,
+				List<? extends Map<String, ?>> data, int resource,
+				String[] from, int[] to)
+		{
+			
+			super(context, data, resource, from, to);
+			
+//			this.mInflater = LayoutInflater.from(context);
+			// TODO Auto-generated constructor stub
+		}
+		
+	}
+}

+ 101 - 24
Apex/src/com/usai/apex/ResultActivity.java

@@ -2,6 +2,8 @@ package com.usai.apex;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Set;
+
 import org.json.JSONException;
 import org.json.JSONObject;
 
@@ -39,6 +41,7 @@ import android.view.ContextMenu.ContextMenuInfo;
 import android.view.View.OnClickListener;
 import android.view.View.OnCreateContextMenuListener;
 import android.widget.Button;
+import android.widget.EditText;
 import android.widget.LinearLayout;
 import android.widget.TableLayout;
 import android.widget.TableRow;
@@ -47,27 +50,27 @@ import android.widget.Toast;
 
 public class ResultActivity extends Activity
 {
-	
-	private static final int	REQUEST_LOGINACTIVITY			= 1;
-	String				user			= null;
-	String				password		= null;
-	String				function_name	= null;
-	private SearchTask	m_task			= null;
 
-	final int			OFFSET			= 5;
+	private static final int	REQUEST_LOGINACTIVITY	= 1;
+	String						user					= null;
+	String						password				= null;
+	String						function_name			= null;
+	private SearchTask			m_task					= null;
+
+	final int					OFFSET					= 5;
 
-	int					sel				= -1;
+	int							sel						= -1;
 
-	Bundle				searchParms		= null;
-	SearchResult		searchresult	= new SearchResult();
+	Bundle						searchParms				= null;
+	SearchResult				searchresult			= new SearchResult();
 
-	SparseArray<String>	showfieldmap	= new SparseArray<String>();
+	SparseArray<String>			showfieldmap			= new SparseArray<String>();
 	// HashMap<Integer, String> showfieldmap = new HashMap<Integer, String>();
-	private TextView	mStatusMessageView;
+	private TextView			mStatusMessageView;
 	// private View mSearchFormView;
-	private View		footview;
-	private View		mStatusView;
-	int					actioncount		= 0;
+	private View				footview;
+	private View				mStatusView;
+	int							actioncount				= 0;
 
 	// private class resultAdapter extends SimpleAdapter
 	// {
@@ -259,7 +262,7 @@ public class ResultActivity extends Activity
 					// return true;
 					TableRow tr = (TableRow) v;
 					TextView tvno = (TextView) tr.getChildAt(0);
-					sel = Integer.parseInt(tvno.getText().toString()) % 5;
+					sel = (Integer.parseInt(tvno.getText().toString())-1) % 5 ;
 					registerForContextMenu(v);
 					openContextMenu(v);
 					unregisterForContextMenu(v);
@@ -309,6 +312,8 @@ public class ResultActivity extends Activity
 								return;
 							span[0].getURL();
 							Log.d("Text", span[0].getURL());
+							
+							TextView tv = (TextView)v;
 
 							final DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
 
@@ -318,6 +323,8 @@ public class ResultActivity extends Activity
 							// 设置允许使用的网络类型,这里是移动网络和wifi都可以
 							request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE
 									| DownloadManager.Request.NETWORK_WIFI);
+							
+							request.setDestinationInExternalPublicDir("Apex Mobile",tv.getText().toString()); 
 
 							// 禁止发出通知,既后台下载,如果要使用这一句必须声明一个权限:android.permission.DOWNLOAD_WITHOUT_NOTIFICATION
 							// request.setShowRunningNotification(false);
@@ -551,6 +558,76 @@ public class ResultActivity extends Activity
 				// intent.putExtra("behavior", Network.BEHAVIOR_SEARCH);
 				startActivity(intent);
 				break;
+			case R.id.action_save_search:
+				// LayoutInflater factory = LayoutInflater.from(this);
+				// final View textEntryView =
+				// factory.inflate(R.layout.alert_dialog_text_entry, null);
+				final View edit = new EditText(this);
+				new AlertDialog.Builder(this)
+						.setIconAttribute(android.R.attr.alertDialogIcon)
+						.setTitle(R.string.str_createname)
+						.setView(edit)
+						.setPositiveButton(android.R.string.ok,
+								new DialogInterface.OnClickListener()
+								{
+									public void onClick(DialogInterface dialog,
+											int whichButton)
+									{
+										String name = ((EditText) edit)
+												.getText().toString();
+										String param = getIntent().toUri(0);
+
+										JSONObject obj = new JSONObject();
+										Set<String> keys = searchParms.keySet();
+										for (String key : keys)
+										{
+
+											
+											try
+											{
+												obj.put(key, searchParms.get(key).toString());
+
+											}
+											catch (JSONException e)
+											{
+												// TODO Auto-generated catch block
+												e.printStackTrace();
+											}
+
+										}
+										obj.toString();
+
+										SQLiteDatabase db = dbUtil.OpenDB(
+												ApexTrackingApplication.get_instance(), null, true);
+										db.execSQL("insert into history(params,name,criterion,module_name,user,create_time) values('"
+
+												+ param
+												+ "','"
+												+ name
+												+ "','"
+												+ obj.toString()
+												+ "','"
+												+ function_name
+												+ "','"
+												+ ApexTrackingApplication.get_user()
+												+ "',"
+												+ System.currentTimeMillis() + ")");
+										dbUtil.CloseDB(db);
+
+										/* User clicked OK so do some stuff */
+									}
+								})
+						.setNegativeButton(android.R.string.cancel,
+								new DialogInterface.OnClickListener()
+								{
+									public void onClick(DialogInterface dialog,
+											int whichButton)
+									{
+
+										/* User clicked cancel so do some stuff */
+									}
+								}).create().show();
+				break;
 			default:
 				break;
 		}
@@ -715,7 +792,8 @@ public class ResultActivity extends Activity
 				ll.setVisibility(View.VISIBLE);
 				Toast toast = Toast.makeText(
 						ApexTrackingApplication.get_instance(),
-						getText(R.string.msg_net_passwordchangedremote) , Toast.LENGTH_LONG);
+						getText(R.string.msg_net_passwordchangedremote),
+						Toast.LENGTH_LONG);
 				toast.setGravity(Gravity.CENTER, 0, 0);
 				toast.show();
 				Intent i = new Intent();
@@ -737,13 +815,12 @@ public class ResultActivity extends Activity
 				case Network.RESULT_NET_ERROR:
 				{
 
-
-						Toast toast = Toast.makeText(
-								ApexTrackingApplication.get_instance(),
-								getText(R.string.msg_net_resulterror) + ":"
-										+ errorcode, Toast.LENGTH_LONG);
-						toast.setGravity(Gravity.CENTER, 0, 0);
-						toast.show();
+					Toast toast = Toast.makeText(
+							ApexTrackingApplication.get_instance(),
+							getText(R.string.msg_net_resulterror) + ":"
+									+ errorcode, Toast.LENGTH_LONG);
+					toast.setGravity(Gravity.CENTER, 0, 0);
+					toast.show();
 
 					break;
 				}

+ 19 - 7
Apex/src/com/usai/apex/SearchHistoryActivity.java

@@ -5,6 +5,7 @@ import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentActivity;
 import android.support.v4.app.FragmentTransaction;
 import android.util.Log;
+import android.view.KeyEvent;
 import android.widget.TabHost;
 
 public class SearchHistoryActivity extends FragmentActivity
@@ -17,13 +18,26 @@ public class SearchHistoryActivity extends FragmentActivity
 		Log.d("SearchHistoryActivity", "onCreate");
 
 		super.onCreate(savedInstanceState);
-		setContentView(R.layout.activity_apex);
+		setContentView(R.layout.activity_search_history);
 		// ActionBar bar = getActionBar();
 		// bar.setTitle("");
 		setupTabs();
 
 	}
-
+	@Override
+	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);
+			finish();
+			
+			return false;
+		}
+		return super.onKeyDown(keyCode, event);
+	}
 	private void setupTabs()
 	{
 		mTabHost = (TabHost) this.findViewById(R.id.tabhost);
@@ -38,12 +52,10 @@ public class SearchHistoryActivity extends FragmentActivity
 		mTabHost.addTab(mTabHost.newTabSpec(getString(R.string.str_tool))
 				.setIndicator(getString(R.string.str_tool))
 				.setContent(R.id.tab2));
-		mTabHost.addTab(mTabHost.newTabSpec(getString(R.string.str_location))
-				.setIndicator(getString(R.string.str_location))
-				.setContent(R.id.tab3));
 
-		Fragment loginFragment = new LoginFragment();
-		Fragment toolsFragment = new ToolsFragment();
+
+		Fragment loginFragment = new FavoritesFragment();
+		Fragment toolsFragment = new HistoryFragment();
 
 		// Add the fragment to the activity, pushing this transaction
 		// on to the back stack.

+ 54 - 32
Apex/src/com/usai/apex/SearchListActivity.java

@@ -2,6 +2,13 @@ package com.usai.apex;
 
 import java.util.Calendar;
 import java.util.HashMap;
+import java.util.Set;
+
+import org.apache.http.entity.mime.content.StringBody;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
 import com.usai.util.Network;
 import com.usai.util.dbUtil;
 
@@ -19,6 +26,7 @@ import android.text.Editable;
 import android.text.InputType;
 import android.text.TextUtils;
 import android.text.TextWatcher;
+import android.util.Log;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
@@ -26,6 +34,7 @@ import android.view.View.OnClickListener;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemSelectedListener;
 import android.widget.ArrayAdapter;
+import android.widget.AutoCompleteTextView;
 import android.widget.Button;
 import android.widget.DatePicker;
 import android.widget.EditText;
@@ -34,8 +43,7 @@ import android.widget.RelativeLayout;
 import android.widget.Spinner;
 import android.widget.TextView;
 
-public class SearchListActivity extends Activity implements
-		OnClickListener
+public class SearchListActivity extends Activity implements OnClickListener
 {
 
 	// String[] spin_valbool = { "True", "False" };
@@ -60,13 +68,12 @@ public class SearchListActivity extends Activity implements
 	{
 		super.onCreate(savedInstanceState);
 		setContentView(R.layout.activity_search_list);
-		
+
 		user = ApexTrackingApplication.get_user();
 
 		// password = ApexTrackingApplication.get_pass();
 		function_name = getIntent().getStringExtra("function_name");
 
-		
 		setTitle(getIntent().getStringExtra("title"));
 
 		ll_list = (LinearLayout) findViewById(R.id.ll_list);
@@ -222,7 +229,7 @@ public class SearchListActivity extends Activity implements
 					public void onClick(View v)
 					{
 						edit_from.setText("");
-						hashMap.remove(name+"_from");
+						hashMap.remove(name + "_from");
 
 					}
 
@@ -236,7 +243,7 @@ public class SearchListActivity extends Activity implements
 					public void onClick(View v)
 					{
 						edit_to.setText("");
-						hashMap.remove(name+"_to");
+						hashMap.remove(name + "_to");
 
 					}
 
@@ -259,9 +266,10 @@ public class SearchListActivity extends Activity implements
 												.setText((monthOfYear + 1)
 														+ "/" + dayOfMonth
 														+ "/" + year);
-										hashMap.put(name+"_from",(monthOfYear + 1)
-												+ "/" + dayOfMonth
-												+ "/" + year);
+										hashMap.put(name + "_from",
+												(monthOfYear + 1) + "/"
+														+ dayOfMonth + "/"
+														+ year);
 
 									}
 
@@ -286,9 +294,10 @@ public class SearchListActivity extends Activity implements
 									{
 										edit_to.setText((monthOfYear + 1) + "/"
 												+ dayOfMonth + "/" + year);
-										hashMap.put(name+"_to",(monthOfYear + 1)
-												+ "/" + dayOfMonth
-												+ "/" + year);
+										hashMap.put(name + "_to",
+												(monthOfYear + 1) + "/"
+														+ dayOfMonth + "/"
+														+ year);
 
 									}
 
@@ -309,7 +318,14 @@ public class SearchListActivity extends Activity implements
 				TextView tvname = (TextView) edititem.findViewById(R.id.aname);
 				tvname.setText(aname);
 				tvname.setTag(name);
-				EditText edit = (EditText) edititem.findViewById(R.id.edit_val);
+
+				AutoCompleteTextView edit = (AutoCompleteTextView) edititem
+						.findViewById(R.id.edit_val);
+				ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
+						android.R.layout.simple_dropdown_item_1line,
+						dbUtil.get_searchhistory(name));
+				edit.setAdapter(adapter);
+
 				String val = hashMap.get(name);
 				if (val != null)
 				{
@@ -382,9 +398,8 @@ public class SearchListActivity extends Activity implements
 				// intent.putExtra("password", password);
 				intent.putExtra("function_name", function_name);
 				Bundle parms = new Bundle();
-				parms.putString("module_name", function_name);
-				parms.putString("columns",
-						dbUtil.get_fields(user, function_name));
+
+				boolean hascriterion = false;
 				for (int i = 0; i < ll_list.getChildCount(); i++)
 				{
 					View item = ll_list.getChildAt(i);
@@ -405,16 +420,23 @@ public class SearchListActivity extends Activity implements
 						else
 							val = "";
 						if (!TextUtils.isEmpty(val))
+						{
 							parms.putString(field_name, val);
+							hascriterion = true;
+						}
 					}
 					else if (tag.equals("search_item_edit"))
 					{
-						EditText edit = (EditText) item
+						AutoCompleteTextView edit = (AutoCompleteTextView) item
 								.findViewById(R.id.edit_val);
 						val = edit.getText().toString().trim();
 						if (!TextUtils.isEmpty(val))
+						{
 							parms.putString(field_name, val);
+							hascriterion = true;
 
+							dbUtil.savehistory(field_name, val);
+						}
 					}
 					else if (tag.equals("search_item_datepicker"))
 					{
@@ -425,12 +447,27 @@ public class SearchListActivity extends Activity implements
 								.findViewById(R.id.et_to);
 						String val_to = et_to.getText().toString().trim();
 						if (!TextUtils.isEmpty(val_from))
+						{
 							parms.putString(field_name + "_from", val_from);
+							hascriterion = true;
+						}
 						if (!TextUtils.isEmpty(val_to))
+						{
 							parms.putString(field_name + "_to", val_to);
+							hascriterion = true;
+						}
 					}
 
 				}
+				// String criterion = "";
+				// if (hascriterion)
+				// {
+				// criterion = parms.toString();
+				// }
+
+				parms.putString("module_name", function_name);
+				parms.putString("columns",
+						dbUtil.get_fields(user, function_name));
 				// Iterator<String> iter = hashMap.keySet().iterator();
 				// while (iter.hasNext())
 				// {
@@ -440,21 +477,6 @@ public class SearchListActivity extends Activity implements
 				// }
 				intent.putExtra("searchParms", parms);
 
-            	
-            	String param = intent.toUri(0);
-            	
-				SQLiteDatabase db = dbUtil.OpenDB(
-						ApexTrackingApplication.get_instance(), null, true);
-				db.execSQL("insert into history(params,user,create_time) values('"
-						
-						+ param
-						+ "','"
-						+ ApexTrackingApplication.get_user()
-						+ "',"
-						+ System.currentTimeMillis() + ")");
-				dbUtil.CloseDB(db);           				
-				
-				
 				startActivity(intent);
 
 				break;

+ 1 - 23
Apex/src/com/usai/apex/ServiceLocationFragment.java

@@ -285,29 +285,7 @@ public class ServiceLocationFragment extends Fragment implements
 			if (success)
 			{
 				AddMarker();
-				//
-				// 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);

+ 107 - 32
Apex/src/com/usai/apex/ToolsFragment.java

@@ -7,6 +7,7 @@ import java.util.List;
 import java.util.Map;
 
 import android.R.color;
+import android.app.Activity;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -23,6 +24,11 @@ import android.widget.SimpleAdapter;
 
 public class ToolsFragment extends ListFragment
 {
+
+	static final int PASSWORD_CHANGED = 1;
+	private static final int	REQUEST_CHANGEPASSWORD_ACTIVITY	= 2;
+	private static final int	REQUEST_LOGINACTIVITY			= 1;
+
 	private void delShortcut()
 	{
 		Intent shortcut = new Intent(
@@ -69,18 +75,71 @@ public class ToolsFragment extends ListFragment
 		getActivity().sendBroadcast(shortcut);
 	}
 
+	@Override
+	public void onActivityResult(int requestCode, int resultCode, Intent data)
+	{
+		switch (requestCode)
+		{
+
+//			case REQUEST_LOGINACTIVITY:
+//				if (resultCode == Activity.RESULT_CANCELED)
+//					getActivity().finish();
+//				break;
+			case REQUEST_CHANGEPASSWORD_ACTIVITY:
+				if (resultCode == Activity.RESULT_OK)
+				{
+//					String UNIQUE_STRING = "com.usai.apex.push.cancel";
+//					Intent intent = new Intent(UNIQUE_STRING);
+//					getActivity().sendBroadcast(intent);
+//					Intent i = new Intent();
+//					i.setClass(getActivity(), ApexActivity.class);
+//					startActivityForResult(i, REQUEST_LOGINACTIVITY);
+					getActivity().setResult(PASSWORD_CHANGED, null);
+					getActivity().finish();
+				}
+				break;
+			default:
+				break;
+		}
+		super.onActivityResult(requestCode, resultCode, data);
+	}
+
 	// @Override
-	// public View onCreateView(LayoutInflater inflater, ViewGroup container,
-	// Bundle savedInstanceState)
+	// public void onActivityResult(int requestCode, int resultCode, Intent
+	// data)
+	// {
+	// switch (requestCode)
+	// {
+	// case REQUEST_LOGINACTIVITY:
+	// if (resultCode == Activity.RESULT_CANCELED)
+	// finish();
+	// break;
+	// case REQUEST_CHANGEPASSWORD_ACTIVITY:
+	// if (resultCode == Activity.RESULT_OK)
 	// {
-	// 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);
+	// String UNIQUE_STRING = "com.usai.apex.push.cancel";
+	// Intent intent = new Intent(UNIQUE_STRING);
+	// sendBroadcast(intent);
+	// Intent i = new Intent();
+	// i.setClass(this, ApexActivity.class);
+	// startActivityForResult(i, 1);
+	// }
+	// break;
+	// default:
+	// break;
+	// }
+	//
+	// super.onActivityResult(requestCode, resultCode, data);
 	// }
 	private List<Map<String, Object>> getData()
 	{
+		boolean login = false;
+		Bundle b = getArguments();
+		
+		if(b!=null)
+		{
+		 login = b.getBoolean("Login");
+		}
 		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
 
 		Map<String, Object> map = new HashMap<String, Object>();
@@ -94,11 +153,26 @@ public class ToolsFragment extends ListFragment
 		map.put("info", "google 2");
 		map.put("img", R.drawable.ic_launcher);
 		list.add(map);
+
+		if (login)
+		{
+			map = new HashMap<String, Object>();
+			map.put("title", "Search History");
+			map.put("info", "google 2");
+			map.put("img", R.drawable.ic_launcher);
+			list.add(map);
+
+			map = new HashMap<String, Object>();
+			map.put("title", "Change Password");
+			map.put("img", R.drawable.ic_launcher);
+			list.add(map);
+		}
 		map = new HashMap<String, Object>();
 		map.put("title", "About");
 		map.put("info", "google 2");
 		map.put("img", R.drawable.ic_launcher);
 		list.add(map);
+
 		return list;
 	}
 
@@ -117,35 +191,36 @@ public class ToolsFragment extends ListFragment
 	public void onListItemClick(ListView l, View v, int position, long id)
 	{
 		Log.i("FragmentList", "Item clicked: " + id);
+
+		String title = (String) getData().get(position).get("title");
 		Intent intent = new Intent();
-		switch (position)
+		if (title.equals("Market news"))
 		{
-			case 0:
-			{
-				addShortcut();
-
-				// intent.setClass(getActivity(), AnnouncementActivity.class);
-				// intent.putExtra("module_name", "Market News");
-				//
-				//
-
-				break;
-			}
-			case 1:
-			{
-				delShortcut();
-
-				// intent.setClass(getActivity(), AnnouncementActivity.class);
-				// intent.putExtra("module_name", "Announcements");
-				break;
-			}
-			case 2:
+			intent.setClass(getActivity(), AnnouncementActivity.class);
+			intent.putExtra("module_name", "Market News");
+		}
+		else if (title.equals("Announcements"))
+		{
+			intent.setClass(getActivity(), AnnouncementActivity.class);
+			intent.putExtra("module_name", "Announcements");
+		}
+		else if (title.equals("About"))
+		{
+			intent.setClass(getActivity(), AboutActivity.class);
+		}
+		else if (title.equals("Search History"))
+		{
+			intent.setClass(getActivity(), SearchHistoryActivity.class);
+		}
+		else if (title.equals("Change Password"))
+		{
+			intent.setClass(getActivity(), ChangePasswordActivity.class);
 
-				intent.setClass(getActivity(), AboutActivity.class);
-				// intent.putExtra("module_name", "Announcements");
-				break;
+			startActivityForResult(intent, REQUEST_CHANGEPASSWORD_ACTIVITY);
+			return;
 		}
-		// startActivity(intent);
+
+		startActivity(intent);
 
 	}
 }

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

@@ -61,6 +61,9 @@ public class SqlOpenHelper extends SQLiteOpenHelper{
 	@Override
 	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 		Log.d("DB upgrade", "from "+oldVersion + " to "+newVersion);
+		
+		if(newVersion == 2)
+		{
 		db.execSQL("CREATE TABLE push_message ("
 				+ "_id INTEGER PRIMARY KEY," + "s_id VARCHAR(20),"
 				+ "e_id VARCHAR(20)," + "msgcount INTEGER,"
@@ -76,6 +79,8 @@ public class SqlOpenHelper extends SQLiteOpenHelper{
 				+ "action VARCHAR(20)," + "module_name VARCHAR(20),"
 				+ "criterion VARCHAR(20)," + "create_time timestamp,"
 				+ "user VARCHAR(20))");
+		db.execSQL("ALTER TABLE search_history ADD level INTEGER");
+		}
 		
 	}
 

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

@@ -1,11 +1,13 @@
 package com.usai.util;
 
+import java.io.File;
 import java.util.UUID;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import com.usai.apex.ApexTrackingApplication;
 
 import android.content.Context;
+import android.os.Environment;
 import android.telephony.TelephonyManager;
 import android.util.Log;
 
@@ -13,6 +15,14 @@ public class commonUtil
 {
 	private static final AtomicInteger sNextGeneratedId = new AtomicInteger(1);
 
+	
+	
+	public static boolean localdirExist()
+	{
+
+		File folder = new File(Environment.getExternalStorageDirectory().getPath()+"/Apex Mobile");
+		return (folder.exists() && folder.isDirectory()) ? true : folder.mkdirs();
+	}
 	/**
 	 * Generate a value suitable for use in {@link #setId(int)}.
 	 * This value will not collide with ID values generated at build time by aapt for R.id.

+ 56 - 1
Apex/src/com/usai/util/dbUtil.java

@@ -1,5 +1,8 @@
 package com.usai.util;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import com.usai.apex.ApexTrackingApplication;
 import android.content.ContentValues;
 import android.content.Context;
@@ -8,6 +11,7 @@ import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteDatabase.CursorFactory;
 import android.database.sqlite.SQLiteException;
 import android.net.Uri;
+import android.text.TextUtils;
 import android.util.Log;
 
 public class dbUtil
@@ -84,9 +88,11 @@ public class dbUtil
 				+ "_id INTEGER PRIMARY KEY," + "name VARCHAR(20),"
 				+ "function_name VARCHAR(20)," + "priority INTEGER,"
 				+ "abandon BOOLEAN," + "user VARCHAR(20))");
+
 		dbHelper.addInitSQL("CREATE TABLE search_history ("
 				+ "_id INTEGER PRIMARY KEY," + "h_val VARCHAR(20),"
-				+ "h_field VARCHAR(20)," + "h_time timestamp,"
+				+ "h_field VARCHAR(20)," + "level INTEGER,"
+				+ "h_time TIMESTAMP default (datetime('now', 'localtime')),"
 				+ "user VARCHAR(20))");
 
 		// new table must create in onupgrade function too;
@@ -262,6 +268,55 @@ public class dbUtil
 		return ret;
 	}
 
+	public static void savehistory(String field, String value)
+	{
+		if(TextUtils.isEmpty(value))
+			return;
+
+		SQLiteDatabase db = OpenDB(ApexTrackingApplication.get_instance()
+				.getApplicationContext(), null, true);
+		int _id = get_recordid(db, "search_history", "user = '"
+				+ ApexTrackingApplication.get_user() + "' and h_field='" + field
+				+ "' and h_val='" + value + "'");
+
+		if (_id >= 0)
+		{
+			String sql = "update search_history set h_time = datetime('now', 'localtime') where _id = "+_id;
+			db.execSQL(sql);
+		}
+		else
+		{
+			String sql = "insert into search_history(user,h_field,h_val) values('"+ApexTrackingApplication.get_user()+"','"+field+"','"+value+"')";
+			db.execSQL(sql);
+		}
+
+		CloseDB(db);
+		// return ret;
+	}
+
+	public static List<String> get_searchhistory(String field)
+	{
+		List<String> ret = new ArrayList<String>();
+		SQLiteDatabase db = OpenDB(ApexTrackingApplication.get_instance()
+				.getApplicationContext(), null, false);
+		Cursor cursor = db.query(
+				"search_history",
+				new String[] { "h_val" },
+				"h_field='" + field + "' and user='"
+						+ ApexTrackingApplication.get_user() + "'", null, null,
+				null, "h_time desc", null);
+
+		while (cursor.moveToNext())
+		{
+			ret.add(cursor.getString(0));
+
+		}
+
+		CloseCursor(cursor);
+		CloseDB(db);
+		return ret;
+	}
+
 	public static int get_count(SQLiteDatabase db, String table, String where)
 	{
 		int ret = 0;

Неке датотеке нису приказане због велике количине промена