Explorar o código

Android TradeFiling complete main framework and core functions

Ray Zhang %!s(int64=5) %!d(string=hai) anos
pai
achega
45c2327055
Modificáronse 29 ficheiros con 3910 adicións e 0 borrados
  1. 33 0
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/utils/RAConverter.java
  2. 76 0
      ApexDrivers/ratradefiling/src/debug/assets/container.json
  3. 65 0
      ApexDrivers/ratradefiling/src/debug/assets/detail.json
  4. 119 0
      ApexDrivers/ratradefiling/src/debug/assets/detail_acem1.json
  5. 70 0
      ApexDrivers/ratradefiling/src/debug/assets/detail_aci.json
  6. 53 0
      ApexDrivers/ratradefiling/src/debug/assets/detail_contaiiner.json
  7. 45 0
      ApexDrivers/ratradefiling/src/debug/assets/detail_customer.json
  8. 85 0
      ApexDrivers/ratradefiling/src/debug/assets/detail_emanifest.json
  9. 135 0
      ApexDrivers/ratradefiling/src/debug/assets/detail_isf.json
  10. BIN=BIN
      ApexDrivers/ratradefiling/src/debug/assets/fake_export.pdf
  11. 42 0
      ApexDrivers/ratradefiling/src/debug/assets/log_acem1.json
  12. 31 0
      ApexDrivers/ratradefiling/src/debug/assets/log_aci.json
  13. 45 0
      ApexDrivers/ratradefiling/src/debug/assets/log_emanifest.json
  14. 39 0
      ApexDrivers/ratradefiling/src/debug/assets/log_hblclose.json
  15. 56 0
      ApexDrivers/ratradefiling/src/debug/assets/log_isf.json
  16. 1709 0
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/detail/DetailFragment.java
  17. 820 0
      ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/detail/NewDetailActivity.java
  18. 60 0
      ApexDrivers/ratradefiling/src/main/res/layout/activity_new_detail.xml
  19. 115 0
      ApexDrivers/ratradefiling/src/main/res/layout/detail_cell_container.xml
  20. 41 0
      ApexDrivers/ratradefiling/src/main/res/layout/detail_cell_container_ca.xml
  21. 30 0
      ApexDrivers/ratradefiling/src/main/res/layout/detail_cell_kv.xml
  22. 17 0
      ApexDrivers/ratradefiling/src/main/res/layout/detail_cell_list.xml
  23. 8 0
      ApexDrivers/ratradefiling/src/main/res/layout/detail_container_container.xml
  24. 8 0
      ApexDrivers/ratradefiling/src/main/res/layout/detail_container_container_ca.xml
  25. 8 0
      ApexDrivers/ratradefiling/src/main/res/layout/detail_container_kv.xml
  26. 8 0
      ApexDrivers/ratradefiling/src/main/res/layout/detail_container_list.xml
  27. 124 0
      ApexDrivers/ratradefiling/src/main/res/layout/detail_fragment.xml
  28. 35 0
      ApexDrivers/ratradefiling/src/main/res/layout/detail_group_tag.xml
  29. 33 0
      ApexDrivers/ratradefiling/src/main/res/menu/detail.xml

+ 33 - 0
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/utils/RAConverter.java

@@ -0,0 +1,33 @@
+package com.usai.redant.rautils.utils;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+public class RAConverter
+{
+
+    public static ArrayList<JSONObject> JsonArray2List(JSONArray jArr)
+    {
+        ArrayList<JSONObject> list = new ArrayList<>();
+
+        if(jArr==null)
+            return list;
+        try {
+            for (int i=0, l=jArr.length(); i<l; i++){
+                list.add( jArr.getJSONObject(i));
+            }
+        } catch (JSONException e) {}
+
+        return list;
+    }
+
+    public static JSONArray convert(Collection<Object> list)
+    {
+        return new JSONArray(list);
+    }
+
+}

+ 76 - 0
ApexDrivers/ratradefiling/src/debug/assets/container.json

@@ -0,0 +1,76 @@
+{
+  "result": 2,
+  "group0": {
+    "item1": {
+      "Size": "40HD"
+    },
+    "item6": {
+      "Weight(KG)": "1033.2"
+    },
+    "count": 7,
+    "item4": {
+      "Unit": "CTN-CARTON"
+    },
+    "item2": {
+      "Seal NO": "SMC093322"
+    },
+    "item0": {
+      "Container NO": "CAIU8859294"
+    },
+    "item5": {
+      "Service": "CY"
+    },
+    "_name": "Container",
+    "item3": {
+      "Quantity": "128"
+    },
+    "_type": "mapping"
+  },
+  "group1": {
+    "item1": {
+      "Commodity(HS) Code": "()"
+    },
+    "count": 6,
+    "item4": {
+      "Description": "FURNITURE"
+    },
+    "item2": {
+      "Quantity": "87(CTN)"
+    },
+    "item0": {
+      "Weight": "4732.750"
+    },
+    "item5": {
+      "Marks & Numbers": "AS ADDRESSED"
+    },
+    "_name": "Commodity 1",
+    "item3": {
+      "Volume": "53.61000"
+    },
+    "_type": "mapping"
+  },
+  "group2": {
+    "item1": {
+      "Commodity(HS) Code": "()"
+    },
+    "count": 6,
+    "item4": {
+      "Description": "FURNITURE"
+    },
+    "item2": {
+      "Quantity": "87(CTN)"
+    },
+    "item0": {
+      "Weight": "4732.750"
+    },
+    "item5": {
+      "Marks & Numbers": "AS ADDRESSED"
+    },
+    "_name": "Commodity 2",
+    "item3": {
+      "Volume": "53.61000"
+    },
+    "_type": "mapping"
+  },
+  "count": 3
+}

+ 65 - 0
ApexDrivers/ratradefiling/src/debug/assets/detail.json

@@ -0,0 +1,65 @@
+{
+  "result": 2,
+  "group0": {
+    "item1": {
+      "Vessel": "SM SHANGHAI"
+    },
+    "item8": {
+      "Voyage": "1909E"
+    },
+    "item6": {
+      "Consignee": "M S INTERNATIONAL INC<br />\r\n2095 N. BATAVIA STREET ORANGE,\t\t<br />\r\nCA USA 92865\t\t<br />\r\nTEL: 714-685-7500 TAX : (714) 685-7600\t\t<br />\r\nCONTACT PERSON: MR. MARTIN"
+    },
+    "count": 9,
+    "item4": {
+      "Shipper": "IMEX INTERNATIONAL CO.,LTD.<br />\r\n134-135 RIM-KHLONGPRAPA  RD.,\t\t<br />\r\nBANGSUE  BANGKOK  10800 THAILAND\t\t<br />\r\nTEL: +66(0) 2910-4827-9"
+    },
+    "item2": {
+      "HBOL": "A2012311711"
+    },
+    "item0": {
+      "Vessel": "SM SHANGHAI"
+    },
+    "item7": {
+      "ETA": "01/07/2020"
+    },
+    "item5": {
+      "Notify_Party": "M S INTERNATIONAL INC<br />\r\n2095 N. BATAVIA STREET ORANGE,\t\t<br />\r\nCA USA 92865\t\t<br />\r\nTEL: 714-685-7500 TAX : (714) 685-7600\t\t<br />\r\nCONTACT PERSON: MR. MARTIN"
+    },
+    "_name": "General Information",
+    "item3": {
+      "MBOL": "YMLUE488014761"
+    },
+    "_type": "mapping"
+  },
+  "group1": {
+    "item0": {
+      "cmb": "CMB: 1.684",
+      "service":"Service: CY",
+      "weight":"Weight: 282.3 KG",
+      "qty":"QTY: 25/CTN-CARTON",
+      "size":"40HD",
+      "container#":"CAIU4526227"
+    },
+    "item1": {
+      "cmb": "CMB: 1.684",
+      "service":"Service: CY",
+      "weight":"Weight: 282.3 KG",
+      "qty":"QTY: 25/CTN-CARTON",
+      "size":"40HD",
+      "container#":"CAIU4526227"
+    },
+    "item2": {
+      "cmb": "CMB: 1.684",
+      "service":"Service: CY",
+      "weight":"Weight: 282.3 KG",
+      "qty":"QTY: 25/CTN-CARTON",
+      "size":"40HD",
+      "container#":"CAIU4526227"
+    },
+    "_type": "container",
+    "_name": "Container",
+    "count": 3
+  },
+  "count": 2
+}

+ 119 - 0
ApexDrivers/ratradefiling/src/debug/assets/detail_acem1.json

@@ -0,0 +1,119 @@
+{
+  "result": 2,
+  "group0": {
+    "item0": {
+      "Vessel": "KAIMANA HILA"
+    },
+    "item1": {
+      "Carrier": "MATS"
+    },
+    "item2": {
+      "Voyage": "023E"
+    },
+    "item3": {
+      "Flag": "US"
+    },
+    "item4": {
+      "H_BOL": "MSPCSHF21201"
+    },
+    "item5": {
+      "M_BOL": "MATS9148910000"
+    },
+    "item6": {
+      "E.T.A": "03/14/2021"
+    },
+    "item7": {
+      "Station": "KLNL_CNECNSHAA"
+    },
+    "item8": {
+      "Place_Of_Receipt": "SHANGHAI, 31(UNCODE : CNSHA)"
+    },
+    "item9": {
+      "Port_Of_Loading": "SHANGHAI, 31(SCHK : 57035)"
+    },
+    "item10": {
+      "Port_Of_Discharge": "LONG BEACH, CA(SCHD : 2709)"
+    },
+    "item11": {
+      "Last_Port": "SHANGHAI, 31(SCHK : 57035)"
+    },
+    "item12": {
+      "Shipper": "IMEX INTERNATIONAL CO.,LTD.<br />\r\n134-135 RIM-KHLONGPRAPA  RD.,\t\t<br />\r\nSHANGHAI  10800 CHINA\t\t<br />\r\nTEL: +86(0) 2910-4827-9"
+    },
+    "item13": {
+      "Consignee": "M S INTERNATIONAL INC<br />\r\n2095 N. BATAVIA STREET ORANGE,\t\t<br />\r\nCA USA 92865\t\t<br />\r\nTEL: 714-685-7500 TAX : (714) 685-7600\t\t<br />\r\nCONTACT PERSON: MR. MARTIN"
+    },
+    "item14": {
+      "Notify_Party": "M S INTERNATIONAL INC<br />\r\n2095 N. BATAVIA STREET ORANGE,\t\t<br />\r\nCA USA 92865\t\t<br />\r\nTEL: 714-685-7500 TAX : (714) 685-7600\t\t<br />\r\nCONTACT PERSON: MR. MARTIN"
+    },
+    "item15": {
+      "Port_Of_Loading": "SHANGHAI, 31(SCHK : 57035)"
+    },
+    "item16": {
+      "E.T.D": ""
+    },
+    "count": 17,
+    "_name": "General Information",
+    "_type": "mapping"
+  },
+  "group1": {
+    "item0": {
+      "container#": "SEGU4098872",
+      "size": "40HD",
+      "seal_no": "Seal#: MATU936152",
+      "qty": "QTY: 10/PKG-PACKAGE",
+      "service": "Service: CY",
+      "weight": "Weight: 4130 KG",
+      "commodity": false
+    },
+    "item1": {
+      "container#": "MATU2699470",
+      "size": "40HD",
+      "seal_no": "Seal#: MATU936101",
+      "qty": "QTY: 10/PKG-PACKAGE",
+      "service": "Service: CY",
+      "weight": "Weight: 4130 KG",
+      "commodity": false
+    },
+    "item2": {
+      "container#": "MATU2618502",
+      "size": "40HD",
+      "seal_no": "Seal#: MATU908056",
+      "qty": "QTY: 10/PKG-PACKAGE",
+      "service": "Service: CY",
+      "weight": "Weight: 4130 KG",
+      "commodity": false
+    },
+    "item3": {
+      "container#": "FCIU9409406",
+      "size": "40HD",
+      "seal_no": "Seal#: MATU936245",
+      "qty": "QTY: 10/PKG-PACKAGE",
+      "service": "Service: CY",
+      "weight": "Weight: 4130 KG",
+      "commodity": false
+    },
+    "item4": {
+      "container#": "MATU2690786",
+      "size": "40HD",
+      "seal_no": "Seal#: MATU936142",
+      "qty": "QTY: 10/PKG-PACKAGE",
+      "service": "Service: CY",
+      "weight": "Weight: 4130 KG",
+      "commodity": false
+    },
+    "item5": {
+      "container#": "MATU2593960",
+      "size": "40HD",
+      "seal_no": "Seal#: MATU936196",
+      "qty": "QTY: 10/PKG-PACKAGE",
+      "service": "Service: CY",
+      "weight": "Weight: 4130 KG",
+      "commodity": false
+    },
+    "_type": "container",
+    "_name": "Container",
+    "count": 6
+  },
+  "count": 2
+}

+ 70 - 0
ApexDrivers/ratradefiling/src/debug/assets/detail_aci.json

@@ -0,0 +1,70 @@
+{
+  "result": 2,
+  "group0": {
+    "item0": {
+      "Type": "ACI"
+    },
+    "item1": {
+      "House Bill CCN": "8112 : SHSZXQ018364"
+    },
+    "item2": {
+      "Primary CCN": "9502 : COSU6288461210"
+    },
+    "item3": {
+      "Application Type": "In-Transit Goods"
+    },
+    "item4": {
+      "Transaction Code": "Original"
+    },
+    "item5": {
+      "Vessel": "OOCL MEMPHIS"
+    },
+    "item6": {
+      "Voyage": "063N"
+    },
+    "item7": {
+      "Cargo_Weight": "0"
+    },
+    "item8": {
+      "Cargo_Volumn": "0"
+    },
+    "item9": {
+      "Location Qualifier": "City"
+    },
+    "item10": {
+      "Location Identifier": "PRINCE RUPERT,BC"
+    },
+    "item11": {
+      "Country Code": "CA"
+    },
+    "count": 12,
+    "_name": "General Information",
+    "_type": "mapping"
+  },
+  "group1": {
+    "item0": {
+      "Shipper": "CHAOSHUN CERAMICS MANUFACTORY"
+    },
+    "item1": {
+      "Consignee": "LERMAN DECOR INC"
+    },
+    "item2": {
+      "Notify Party": "AXXESS INTERNATIONAL USA"
+    },
+    "count": 3,
+    "_name": "Party Information",
+    "_type": "mapping"
+  },
+  "group2": {
+    "item0": {
+      "container#": "TCLU4887078",
+      "seal_no": "Seal#: 17465136",
+      "commodity": true,
+      "id":"123456"
+    },
+    "_type": "container_ca",
+    "_name": "Container Information",
+    "count": 1
+  },
+  "count": 3
+}

+ 53 - 0
ApexDrivers/ratradefiling/src/debug/assets/detail_contaiiner.json

@@ -0,0 +1,53 @@
+{
+  "result": 2,
+  "group0": {
+    "item1": {
+      "Size": "40HD"
+    },
+    "item6": {
+      "Weight(KG)": 1033.2
+    },
+    "count": 7,
+    "item4": {
+      "Unit": "CTN-CARTON"
+    },
+    "item2": {
+      "Seal NO": "SMC093322"
+    },
+    "item0": {
+      "Container NO": "CAIU8859294"
+    },
+    "item5": {
+      "Service": "CY"
+    },
+    "_name": "Container",
+    "item3": {
+      "Quantity": 128
+    },
+    "_type": "mapping"
+  },
+  "group1": {
+    "item1": {
+      "Commodity(HS) Code": "()"
+    },
+    "count": 6,
+    "item4": {
+      "Description": "FURNITURE"
+    },
+    "item2": {
+      "Quantity": "87(CTN)"
+    },
+    "item0": {
+      "Weight": "4732.750"
+    },
+    "item5": {
+      "Marks & Numbers": "AS ADDRESSED"
+    },
+    "_name": "Commodity 1",
+    "item3": {
+      "Volume": "53.61000"
+    },
+    "_type": "mapping"
+  },
+  "count": 2
+}

+ 45 - 0
ApexDrivers/ratradefiling/src/debug/assets/detail_customer.json

@@ -0,0 +1,45 @@
+{
+  "result": 2,
+  "group0": {
+    "item1": {
+      "Address1": "1060 LAFAYETTE BOULEVARD LONGUEUIL"
+    },
+    "item8": {
+      "DOB(MMDDYYYY)": ""
+    },
+    "item9": {
+      "City": "MONTREAL"
+    },
+    "item10": {
+      "Zip": "J4K 3B1"
+    },
+    "item11": {
+      "Country_Code": "CA"
+    },
+    "item6": {
+      "Entity Identifier": ""
+    },
+    "count": 12,
+    "item4": {
+      "Address_4": ""
+    },
+    "item2": {
+      "Address_2": "QUEBEC CANADA J4K 3B1"
+    },
+    "item0": {
+      "Company Name": "PNEUS CHARTRAND DISTRIBUTION"
+    },
+    "item7": {
+      "Passport Country Code": ""
+    },
+    "item5": {
+      "Entity Identifier Code": ""
+    },
+    "_name": "General Information",
+    "item3": {
+      "Address_3": ""
+    },
+    "_type": "mapping"
+  },
+  "count": 1
+}

+ 85 - 0
ApexDrivers/ratradefiling/src/debug/assets/detail_emanifest.json

@@ -0,0 +1,85 @@
+{
+  "result": 2,
+  "group0": {
+    "item0": {
+      "Type": "eManifest"
+    },
+    "item1": {
+      "House Bill CCN": "8112 : SHTAOA100282"
+    },
+    "item2": {
+      "Primary CCN": "9082 : 2659322250"
+    },
+    "item3": {
+      "Previous CCN": "8752 : QINN84938800"
+    },
+    "item4": {
+      "Manifest Type": "Import"
+    },
+    "item5": {
+      "Consolidation Indicator": "No"
+    },
+    "item6": {
+      "Transaction Code": "Change"
+    },
+    "item7": {
+      "Vessel": "EVER SMART"
+    },
+    "item8": {
+      "Voyage": "0303E"
+    },
+    "item9": {
+      "Cargo_Weight": "7902 : Kilogram"
+    },
+    "item10": {
+      "Port Of Destination": "0497 : TORONTO INTERNATIONAL AIRPORT (PEARSON)"
+    },
+    "item11": {
+      "Sub-Location Of Destination": "4620 : HUNA LOGISTICS INC."
+    },
+    "item12": {
+      "Port Of Discharge": "0497 : TORONTO INTERNATIONAL AIRPORT (PEARSON)"
+    },
+    "item13": {
+      "Sub-Location Of Discharge": "4620 : HUNA LOGISTICS INC."
+    },
+    "count": 14,
+    "_name": "General Information",
+    "_type": "mapping"
+  },
+  "group1": {
+    "item0": {
+      "Shipper": "LAIZHOU HONGJI AUTOMOBILE FITTING C"
+    },
+    "item1": {
+      "Consignee": "CBK INTERNATION INC"
+    },
+    "item2": {
+      "Place Of Consolidation": "OOCL LOGISTICS CHINA LTD QINGDAO BRANCH"
+    },
+    "item3": {
+      "Consolidator": "QINGDAO MEDLOG LOGISTICS CO LTD"
+    },
+    "item4": {
+      "Notify Party": "OOCLCBK INTERNATION INC"
+    },
+    "item5": {
+      "Delivery": ""
+    },
+    "count": 6,
+    "_name": "Party Information",
+    "_type": "mapping"
+  },
+  "group2": {
+    "item0": {
+      "container#": "TGHU9724072",
+      "seal_no": "Seal#: OOLGGP8557",
+      "commodity": true,
+      "id":"123456"
+    },
+    "_type": "container_ca",
+    "_name": "Container Information",
+    "count": 1
+  },
+  "count": 3
+}

+ 135 - 0
ApexDrivers/ratradefiling/src/debug/assets/detail_isf.json

@@ -0,0 +1,135 @@
+{
+  "result": 2,
+  "group0": {
+    "item0": {
+      "ISF_Transaction#": "KLNL67486075608"
+    },
+    "item1": {
+      "BOL": "KLNLSHNGBA015487"
+    },
+    "item2": {
+      "BOL Code": "House Bill of Lading"
+    },
+    "item3": {
+      "ISF Type": "5+2"
+    },
+    "item4": {
+      "Use ISF Bond": "No"
+    },
+    "item5": {
+      "Action Type Code": "CT - Complete Transaction"
+    },
+    "item6": {
+      "ISF Bond Activity": "03 - International Carrier"
+    },
+    "item7": {
+      "Shipment Type Code": "01 - Standard or regular filings"
+    },
+    "item8": {
+      "ISF Bond Type": "8 - Continuous"
+    },
+    "item9": {
+      "ISF Importer Code": "ANI - YYDDPP-NNNNN;USCBP Assgined Number"
+    },
+    "item10": {
+      "ISF Importer No.": "033901-00088"
+    },
+    "item11": {
+      "DOB": ""
+    },
+    "item12": {
+      "Passport Country": ""
+    },
+    "item13": {
+      "Vessel Operator SCAC": ""
+    },
+    "item14": {
+      "ISF-BondHolder": "033901-00088"
+    },
+    "item15": {
+      "Last_Action": "ADD"
+    },
+    "count": 16,
+    "_name": "General Information",
+    "_type": "mapping"
+  },
+  "group1": {
+    "item0": {
+      "MF-Manufacturer/Supplier": "NINGBO JOYANCY INTERNATIONAL TRADE"
+    },
+    "item1": {
+      "ST-Ship To Party": "8704147 CANADA INC"
+    },
+    "item2": {
+      "BKP-Booking Party": "NINGBO JOYANCY INTERNATIONAL TRADE"
+    },
+    "count": 3,
+    "_name": "Parties Details",
+    "_type": "mapping"
+  },
+  "group2": {
+    "item0": {
+      "621430": "NINGBO JOYANCY INTERNATIONAL TRADE(CN)"
+    },
+    "item1": {
+      "900410": "NINGBO JOYANCY INTERNATIONAL TRADE(CN)"
+    },
+    "item2": {
+      "650400": "NINGBO JOYANCY INTERNATIONAL TRADE(CN)"
+    },
+    "item3": {
+      "420292": "NINGBO JOYANCY INTERNATIONAL TRADE(CN)"
+    },
+    "item4": {
+      "871680": "NINGBO JOYANCY INTERNATIONAL TRADE(CN)"
+    },
+    "item5": {
+      "420212": "NINGBO JOYANCY INTERNATIONAL TRADE(CN)"
+    },
+    "item6": {
+      "650400": "NINGBO JOYANCY INTERNATIONAL TRADE(CN)"
+    },
+    "item7": {
+      "621430": "NINGBO JOYANCY INTERNATIONAL TRADE(CN)"
+    },
+    "item8": {
+      "650500": "NINGBO JOYANCY INTERNATIONAL TRADE(CN)"
+    },
+    "item9": {
+      "611710": "NINGBO JOYANCY INTERNATIONAL TRADE(CN)"
+    },
+    "count": 10,
+    "_name": "HTS Code",
+    "_type": "mapping"
+  },
+  "group3": {
+    "item0": {
+      "CR": ""
+    },
+    "item1": {
+      "V1": ""
+    },
+    "item2": {
+      "SBN": ""
+    },
+    "item3": {
+      "MB": ""
+    },
+    "item4": {
+      "6C": ""
+    },
+    "item5": {
+      "6B": ""
+    },
+    "item6": {
+      "FC": "KLNL"
+    },
+    "item7": {
+      "FN": ""
+    },
+    "_type": "mapping",
+    "_name": "Addtional Reference",
+    "count": 8
+  },
+  "count": 4
+}

BIN=BIN
ApexDrivers/ratradefiling/src/debug/assets/fake_export.pdf


+ 42 - 0
ApexDrivers/ratradefiling/src/debug/assets/log_acem1.json

@@ -0,0 +1,42 @@
+{
+  "result": 2,
+  "group0": {
+    "_name": "Details",
+    "item0": {
+      "text": "01/31/2020 03:08:00 @ 1Y (FOR ENTIRE HBOL) MVOC - NVOC BL MATCH ( SM LONG BEACH )",
+      "bg": false
+    },
+    "item2": {
+      "text": "01/20/2020 16:19:00 @ S1 (FOR ENTIRE HBOL) BILL ON FILE ( UNKNOWN )",
+      "bg": true
+    },
+    "count": 6,
+    "item4": {
+      "text": "01/20/2020 16:13:00 @ 69 (FOR ENTIRE HBOL) BILL ON FILE ( SM LONG BEACH )",
+      "bg": true
+    },
+
+    "item1": {
+      "text": "01/20/2020 16:19:00 @ 3Z (FOR ENTIRE HBOL) SECURITY FILING ON FILE ( SM LONG BEACH )",
+      "bg": false
+    },
+    "item3": {
+      "text": "01/20/2020 16:13:56 @ CBP ACCEPTED( SM LONG BEACH )",
+      "bg": true
+    },
+    "item5": {
+      "text": "01/20/2020 16:12:57 @ SENT @: 2020-01-20 16:12:57( SM LONG BEACH ) - CLLB",
+      "bg": false
+    },
+    "_type": "log"
+  },
+  "page_menu": [
+  {
+    "type": "quickview",
+    "title": "Export PDF",
+    "url": "https://......."
+  }
+  ],
+  "count": 1
+  
+}

+ 31 - 0
ApexDrivers/ratradefiling/src/debug/assets/log_aci.json

@@ -0,0 +1,31 @@
+{
+  "result": 2,
+  "group0": {
+    "_name": "Details",
+    "item0": {
+      "text": "01/08/2021 02:35:58 @ 997(311)-ACCEPTED ( OOCL ANTWERP )",
+      "bg": false
+    },
+    "item2": {
+      "text": "01/08/2021 02:31:14 @ 311-SENT - Original @ 01/08/2021 02:31:14( OOCL ANTWERP )",
+      "bg": true
+    },
+    "count": 3,
+  
+    "item1": {
+      "text": "01/08/2021 02:35:58 @ 824(311)-06 - Confirmation ( OOCL ANTWERP )",
+      "bg": false
+    },
+   
+    "_type": "log"
+  },
+  "page_menu": [
+  {
+    "type": "quickview",
+    "title": "Export PDF",
+    "url": "https://......."
+  }
+  ],
+  "count": 1
+  
+}

+ 45 - 0
ApexDrivers/ratradefiling/src/debug/assets/log_emanifest.json

@@ -0,0 +1,45 @@
+{
+  "result": 2,
+  "group0": {
+    "_name": "Details",
+    "item0": {
+      "text": "01/07/2021 07:05:51 @ 350(309)-0002 - Not Matched ( RDO CONCEPTION )",
+      "bg": false
+    },
+    "item2": {
+      "text": "01/07/2021 07:05:50 @ 997(309)-ACCEPTED ( RDO CONCEPTION )",
+      "bg": true
+    },
+    "count": 7,
+    "item4": {
+      "text": "01/07/2021 07:01:07 @ 309-SENT - Original @ 01/07/2021 07:01:07( RDO CONCEPTION )",
+      "bg": true
+    },
+    "item6": {
+      "text": "01/07/2021 06:37:06 @ 309-SENT - Original @ 01/07/2021 06:37:06( RDO CONCEPTION )",
+      "bg": false
+    },
+    "item1": {
+      "text": "01/07/2021 07:05:51 @ 824(309)-06 - Confirmation ( RDO CONCEPTION )",
+      "bg": false
+    },
+    "item3": {
+      "text": "01/07/2021 07:05:50 @ 350(309)-0003 - Cargo Complete ( RDO CONCEPTION )",
+      "bg": true
+    },
+    "item5": {
+      "text": "01/07/2021 06:41:50 @ 997(309)-REJECTED ( RDO CONCEPTION )",
+      "bg": false
+    },
+    "_type": "log"
+  },
+  "page_menu": [
+  {
+    "type": "quickview",
+    "title": "Export PDF",
+    "url": "https://......."
+  }
+  ],
+  "count": 1
+  
+}

+ 39 - 0
ApexDrivers/ratradefiling/src/debug/assets/log_hblclose.json

@@ -0,0 +1,39 @@
+{
+  "result": 2,
+  "group0": {
+    "_name": "Details",
+    "item0": {
+      "text": "01/08/2021 02:20:58 @ 997(353)-ACCEPTED ( OOCL ANTWERP )",
+      "bg": false
+    },
+    "item2": {
+      "text": "01/08/2021 02:20:58 @ 824(353)-06 - Confirmation ( OOCL ANTWERP )",
+      "bg": true
+    },
+    "count": 5,
+    "item4": {
+      "text": "01/08/2021 02:16:14 @ 353-SENT - Original @ 01/08/2021 02:16:14( OOCL ANTWERP )",
+      "bg": true
+    },
+
+    "item1": {
+      "text": "01/08/2021 02:20:58 @ 350(353)-0002 - Not Matched ( OOCL ANTWERP )",
+      "bg": false
+    },
+    "item3": {
+      "text": "01/08/2021 02:20:58 @ 350(353)-0002 - Not Matched ( OOCL ANTWERP )",
+      "bg": true
+    },
+ 
+    "_type": "log"
+  },
+  "page_menu": [
+  {
+    "type": "quickview",
+    "title": "Export Close Message",
+    "url": "https://......."
+  }
+  ],
+  "count": 1
+  
+}

+ 56 - 0
ApexDrivers/ratradefiling/src/debug/assets/log_isf.json

@@ -0,0 +1,56 @@
+{
+  "result": 2,
+  "group0": {
+    "_name": "Details",
+    "item0": {
+      "text": "01/08/2019 19:57:00 @ 1Y(FOR ENTIRE HBOL) MVOC - NVOC BL MATCH ( YM MILESTONE ) ",
+      "bg": false
+    },
+    "item2": {
+      "text": "12/28/2018 04:50:00 @ 3Z(FOR ENTIRE HBOL) SECURITY FILING ON FILE ( YM MILESTONE ) ",
+      "bg": true
+    },
+    "count": 7,
+    "item4": {
+      "text": "12/27/2018 06:50:00 @ 69(FOR ENTIRE HBOL) BILL ON FILE ( YM MILESTONE ) ",
+      "bg": true
+    },
+    "item6": {
+      "text": "12/27/2018 06:48:50 @ AMEND @: 2018-12-27 06:48:50( YM MILESTONE ) ",
+      "bg": false
+    },
+    "item1": {
+      "text": "12/28/2018 08:24:00 @ 1Y(FOR ENTIRE HBOL) MVOC - NVOC BL MATCH ( YM MILESTONE ) ",
+      "bg": false
+    },
+    "item3": {
+      "text": "12/28/2018 04:50:00 @ S1(FOR ENTIRE HBOL) BILL ON FILE ( UNKNOWN ) ",
+      "bg": true
+    },
+    "item5": {
+      "text": "12/27/2018 06:50:00 @ CBP ACCEPTED( YM MILESTONE ) ",
+      "bg": false
+    },
+    "_type": "log"
+  }
+  ,
+  "page_menu": [
+    {
+      "type": "quickview",
+      "title": "Export PDF",
+      "url": "https://......."
+    },
+    {
+      "type": "quickview",
+      "title": "Export PDF Without Log",
+      "url": "https://......."
+    },
+    {
+      "type": "quickview",
+      "title": "Export PDF With Address",
+      "url": "https://......."
+    }
+  ],
+  "count": 1
+  
+}

+ 1709 - 0
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/detail/DetailFragment.java

@@ -0,0 +1,1709 @@
+package com.usai.ratradefiling.detail;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.app.AlertDialog;
+import android.app.ProgressDialog;
+import android.content.ClipboardManager;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.Color;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Build;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.text.Editable;
+import android.text.Html;
+import android.text.TextWatcher;
+import android.util.Log;
+import android.util.SparseIntArray;
+import android.view.GestureDetector;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.webkit.WebResourceRequest;
+import android.webkit.WebResourceResponse;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.ScrollView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.fragment.app.Fragment;
+//
+//import com.usai.apex.pdf.PDFPreviewActivity;
+//import com.usai.apex.shipmap.ShipMap;
+//import com.usai.util.Network;
+//import com.usai.util.RAUtil;
+//import com.usai.util.RAUtil;
+//import com.usai.util.dbUtil;
+//
+//import org.apache.http.util.EncodingUtils;
+import com.redant.usai.rapdflib.preview.RAPDFPreviewActivity;
+import com.usai.ratradefiling.R;
+import com.usai.ratradefiling.TradeFilingApplication;
+import com.usai.ratradefiling.dataprovider.OnlineDataProvider;
+import com.usai.ratradefiling.dataprovider.RADataProvider;
+import com.usai.redant.rautils.utils.RAUtil;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.util.regex.Pattern;
+
+public class DetailFragment extends Fragment implements OnClickListener /*
+																		 * ,
+																		 * OnGestureListener
+																		 */
+{
+
+	private static final int People_Pick_Code = 1357;
+
+	private String copiedKey;
+	private String copiedVal;
+	private String containerID;
+	private View touchedView;
+
+//	@Override
+//	public void shipMapTryToZoomIn(ShipMap shipMap, boolean zoomIn) {
+//
+//		if (zoomIn) {
+//
+//			LinearLayout.LayoutParams lfLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0);
+//			mDetailContainer.setLayoutParams(lfLayoutParams);
+//
+//		} else {
+//
+//			LinearLayout.LayoutParams lfLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0,2.0f);
+//			mDetailContainer.setLayoutParams(lfLayoutParams);
+//		}
+//
+//		mMapZoomIn = zoomIn;
+//
+//	}
+
+	private class GestureListener extends GestureDetector.SimpleOnGestureListener {
+
+		@Override
+		public boolean onDoubleTapEvent(MotionEvent e) {
+
+
+			if (e.getAction() == MotionEvent.ACTION_UP) {
+
+				if (touchedView == null) {
+
+					ClipboardManager cm = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
+					cm.setText(copiedVal);
+
+					Toast.makeText(mContext, "Copied " + copiedKey, Toast.LENGTH_LONG).show();
+				} else {
+
+					String type = (String) touchedView.getTag();
+					if (type.equals("tracking")) {
+
+						TextView tvgroup = (TextView) touchedView.findViewById(R.id.tv_group);
+
+						if (tvgroup != null) {
+
+							String val = tvgroup.getText().toString();
+							ClipboardManager cm = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
+							cm.setText(val);
+
+							Toast.makeText(mContext, "Copied " + val, Toast.LENGTH_LONG).show();
+						}
+					}
+				}
+			}
+
+			copiedKey = null;
+			copiedVal = null;
+			touchedView = null;
+
+			return false;
+		}
+
+		@Override
+		public boolean onSingleTapConfirmed(MotionEvent e) {
+
+			if (touchedView != null) {
+				onClick(touchedView);
+			}
+			touchedView = null;
+
+			return false;
+		}
+	}
+
+	private static final int	REQUEST_LOGINACTIVITY	= 1;
+
+	// DataFragment mdataFragment;
+
+	Context mContext;
+	ProgressDialog progressDialog;
+	private GestureDetector detector;
+
+	protected void showProgressDialog(final String title, final String msg) {
+
+		getActivity().runOnUiThread(new Runnable() {
+			@Override
+			public void run() {
+				try {
+					progressDialog.setTitle(title);
+					progressDialog.setMessage(msg);
+					progressDialog.show();
+				} catch (Exception e) {
+					e.printStackTrace();
+				}
+			}
+		});
+
+	}
+
+	/* private GestureDetector mGestureDetector; */
+	@Override
+	public void onCreate(Bundle savedInstanceState)
+	{
+		// TODO Auto-generated method stub
+		super.onCreate(savedInstanceState);
+
+		if (progressDialog == null) {
+			progressDialog = new ProgressDialog(mContext);
+			progressDialog.setCancelable(false);
+		}
+
+		if (detector == null) {
+			detector = new GestureDetector(mContext, new GestureListener());
+		}
+
+	}
+
+//	@Override
+//	public void onActivityCreated(@Nullable Bundle savedInstanceState) {
+//		super.onActivityCreated(savedInstanceState);
+//
+//		progressDialog = new ProgressDialog(mContext);
+//		progressDialog.setCancelable(false);
+//	}
+
+	@Override
+	public void onAttach(Context context) {
+		super.onAttach(context);
+		mContext = context;
+	}
+
+	@Override
+	public void onDestroyView()
+	{
+		Log.d("DetailFragment", "onDestroyView()");
+		super.onDestroyView();
+	}
+
+	// public String get_content()
+	// {
+	// return fragment_content;
+	// }
+
+	LinearLayout		ll_root;
+	ScrollView			sl_root;
+	String				mimeType			= "text/html";
+	private SearchTask	m_task				= null;
+	SparseIntArray		control				= new SparseIntArray();
+	// private TextView mStatusMessageView;
+	private View		mStatusView;
+
+	String				fragment_content	= null;
+
+	public void requestdata()
+	{
+
+		if (m_task != null)
+		{
+			return;
+		}
+		if (fragment_content != null)
+		{
+			LayoutInflater inflater = (LayoutInflater) TradeFilingApplication
+					.get_instance().getSystemService(
+							Context.LAYOUT_INFLATER_SERVICE);
+			init(fragment_content, inflater);
+			return;
+		}
+		// if (mdataFragment.get_result() != null) {
+		// LayoutInflater inflater = (LayoutInflater) TradeFilingApplication
+		// .get_instance().getSystemService(
+		// Context.LAYOUT_INFLATER_SERVICE);
+		// init(mdataFragment.get_result(), inflater);
+		// }
+		// if (fragment_content != null)
+		// return;
+		// mStatusMessageView.setText("Loading");
+		showProgress(true);
+		m_task = new SearchTask();
+		m_task.execute();
+
+	}
+
+	public void set_content(String content)
+	{
+		fragment_content = content;
+	}
+
+	private void showProgress(final boolean show)
+	{
+		// On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow
+		// for very easy animations. If available, use these APIs to fade-in
+		// the progress spinner.
+		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2)
+		{
+			int shortAnimTime = TradeFilingApplication.get_instance()
+					.getResources()
+					.getInteger(android.R.integer.config_shortAnimTime);
+
+			mStatusView.setVisibility(View.VISIBLE);
+			mStatusView.animate().setDuration(shortAnimTime)
+					.alpha(show ? 1 : 0)
+					.setListener(new AnimatorListenerAdapter()
+					{
+						@Override
+						public void onAnimationEnd(Animator animation)
+						{
+							mStatusView.setVisibility(show ? View.VISIBLE
+									: View.INVISIBLE);
+						}
+					});
+
+			ll_root.setVisibility(View.VISIBLE);
+			ll_root.animate().setDuration(shortAnimTime).alpha(show ? 0 : 1)
+					.setListener(new AnimatorListenerAdapter()
+					{
+						@Override
+						public void onAnimationEnd(Animator animation)
+						{
+							ll_root.setVisibility(show ? View.INVISIBLE
+									: View.VISIBLE);
+						}
+					});
+		}
+		else
+		{
+			// The ViewPropertyAnimator APIs are not available, so simply show
+			// and hide the relevant UI components.
+			mStatusView.setVisibility(show ? View.VISIBLE : View.INVISIBLE);
+			ll_root.setVisibility(show ? View.INVISIBLE : View.VISIBLE);
+		}
+	}
+
+	// @Override
+	// public void onActivityCreated(Bundle savedInstanceState)
+	// {
+	// FragmentManager fm = getFragmentManager();
+	//
+	// // Check to see if we have retained the worker fragment.
+	// mdataFragment = (DataFragment)fm.findFragmentByTag("work");
+	//
+	// // If not retained (or first time running), we need to create it.
+	// if (mdataFragment == null) {
+	// mdataFragment = new DataFragment();
+	// // Tell it who it is working with.
+	// mdataFragment.setTargetFragment(this, 0);
+	// fm.beginTransaction().add(mdataFragment, "work").commit();
+	// }
+	// super.onActivityCreated(savedInstanceState);
+	// }
+
+//	private ShipMap mTrackingMap;
+
+
+
+	@Override
+	public void onSaveInstanceState(Bundle outState) {
+		super.onSaveInstanceState(outState);
+
+		if (mContent != null) {
+			outState.putString("content",mContent.toString());
+		}
+		outState.putInt("selectContactPosition",mSelectContactPosition);
+		outState.putInt("selectTrackingPosition",mSelectTrackingPosition);
+		outState.putInt("selectTrackingChild",mSelectTrackingChild);
+		outState.putBoolean("mapZoomIn",mMapZoomIn);
+	}
+
+//	private void configureMap(ShipMap map) {
+//		if (map == null) {
+//			return;
+//		}
+//
+//		map.setShowCurrent(true);
+//		map.setShowDestination(true);
+//		map.setShowOrigin(true);
+//		map.setShowPor(true);
+//		map.setShowPoe(true);
+//		map.setShowPod(true);
+//		map.setShowPol(true);
+//
+//		map.setShipMapListener(this);
+//	}
+
+	private RelativeLayout mDetailContainer;
+	private boolean mMapZoomIn = false;
+
+	@Override
+	public View onCreateView(LayoutInflater inflater, ViewGroup container,
+			Bundle savedInstanceState)
+	{
+
+
+		final Context context = getContext();
+		/* mGestureDetector = new GestureDetector(this); */
+
+		View view = null;
+
+//		if(this.getArguments().getString("action_type").equals("Tracing")||this.getArguments().getString("action_type").equals("Tracking")) {
+//			view = inflater.inflate(R.layout.detail_fragment, null);
+////			mTrackingMap = view.findViewById(R.id.tracking_map);
+////			configureMap(mTrackingMap);
+//			mDetailContainer = view.findViewById(R.id.detail_list_container);
+//		} else {
+			view = inflater.inflate(R.layout.detail_fragment, null);
+//			mTrackingMap = null;
+//		}
+
+		if (savedInstanceState != null) {
+			fragment_content = savedInstanceState.getString("content");
+			mSelectContactPosition = savedInstanceState.getInt("selectContactPosition");
+			mSelectTrackingPosition = savedInstanceState.getInt("selectTrackingPosition");
+			mSelectTrackingChild = savedInstanceState.getInt("selectTrackingChild");
+			mMapZoomIn = savedInstanceState.getBoolean("mapZoomIn");
+		}
+
+//		if (mTrackingMap != null) {
+//			mTrackingMap.setZoomIn(mMapZoomIn);
+//		}
+
+//		if(this.getArguments().getString("action_type").equals("Tracing"))
+//		{
+//			LinearLayout ll1 = view.findViewById(R.id.detail_linear);
+//
+//			ShipMap shipMap = new ShipMap(context);
+////		mShipMap = shipMap;
+//
+//
+//			LinearLayout.LayoutParams mapLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0,1.0f);
+//			mapLayoutParams.setMargins(RAUtil.dp2px(context,5),RAUtil.dp2px(context,2),RAUtil.dp2px(context,5),RAUtil.dp2px(context,2));
+//
+//			ll1.addView(shipMap,mapLayoutParams);
+//
+//		}
+
+
+
+
+		sl_root = (ScrollView) view.findViewById(R.id.sl_root);
+		/*
+		 * sl_root.setOnTouchListener(new View.OnTouchListener() {
+		 * 
+		 * @Override public boolean onTouch(View v, MotionEvent event) { return
+		 * mGestureDetector.onTouchEvent(event); } });
+		 */
+		ll_root = (LinearLayout) view.findViewById(R.id.ll_root);
+		mStatusView = view.findViewById(R.id.status);
+		LinearLayout ll = (LinearLayout) view.findViewById(R.id.ll_refresh);
+		Button btn_refresh = (Button) ll.findViewById(R.id.btn_refresh);
+		btn_refresh.setOnClickListener(new OnClickListener()
+		{
+
+			@Override
+			public void onClick(View v)
+			{
+				LinearLayout ll = (LinearLayout) ll_root
+						.findViewById(R.id.ll_refresh);
+				ll.setVisibility(View.GONE);
+
+				requestdata();
+
+			}
+		});
+		// FragmentManager fm = getFragmentManager();
+		// List<Fragment> fragments = fm.getFragments();
+		// if (fragments != null) {
+		// Log.e("DetailFragment", "fragments count=" + fragments.size());
+		// // for (int i = 0; i < fragments.size(); i++)
+		// // Log.e("DetailFragment", "fragments name=" + fragments.size());
+		//
+		// }
+		// // this.getFragmentManager();
+		// String tag = getArguments().getString("module_name");
+		// // Check to see if we have retained the worker fragment.
+		// mdataFragment = (DataFragment) fm.findFragmentById(12345);
+		//
+		// // If not retained (or first time running), we need to create it.
+		// if (mdataFragment == null) {
+		// Log.e("dataFragment creaded ", "tag=data_" + tag);
+		// mdataFragment = new DataFragment();
+		// // Tell it who it is working with.
+		// mdataFragment.setTargetFragment(this, 0);
+		// fm.beginTransaction().add(12345,mdataFragment, "data+" +
+		// tag).commit();
+		// }
+		requestdata();
+		return view;
+	}
+
+//	protected JSONObject loadfakecontent(int rawid)
+//	{
+//
+//		String jstring = "";
+//		try
+//		{
+//			InputStream in = getResources().openRawResource(rawid);
+//			// 获取文件的字节数
+//			int lenght = in.available();
+//			// 创建byte数组
+//			byte[] buffer = new byte[lenght];
+//			// 将文件中的数据读到byte数组中
+//			in.read(buffer);
+//			jstring = EncodingUtils.getString(buffer, "UTF-8");
+//			JSONObject jsobj = new JSONObject(jstring);
+//			return jsobj;
+////            JSONObject objrecords = jsobj.getJSONObject("records");
+//		}
+//		catch (Exception e)
+//		{
+//			e.printStackTrace();
+//		}
+//		return null;
+//
+//	}
+
+	public JSONObject mContent;
+
+	private int mSelectContactPosition = -1;
+	private int mSelectTrackingPosition = -1;
+	private int mSelectTrackingChild = -1;
+	private View mSelectedTrackingCell = null;
+
+	private void selectLocation(View view,int group,int child,JSONObject location) {
+
+		if (mSelectedTrackingCell != null) {
+			mSelectedTrackingCell.setBackgroundColor(Color.WHITE);
+		}
+
+		mSelectTrackingPosition = group;
+		mSelectTrackingChild = child;
+		mSelectedTrackingCell = view;
+
+		if (mSelectedTrackingCell != null) {
+			mSelectedTrackingCell.setBackgroundColor(Color.LTGRAY);
+		}
+
+//		if (mTrackingMap != null && location != null) {
+//
+//			String backup_port=this.mContent.optString("backup_port");
+//
+//			mTrackingMap.showShipAnnotation(location,backup_port);
+//		}
+
+	}
+
+	void init(String jstr, LayoutInflater inflater)
+	{
+//		LayoutInflater inflater = (LayoutInflater) TradeFilingApplication
+//				.get_instance().getSystemService(
+//						Context.LAYOUT_INFLATER_SERVICE);
+
+		inflater=getActivity().getLayoutInflater();
+
+
+		String TAG = "init@DetailFragment";
+		Log.d(TAG, jstr);
+		try
+		{
+			JSONObject jsonObj = new JSONObject(jstr);
+
+			int group_count = jsonObj.getInt("count");
+
+//			if (getArguments().getString("action_type").equals("Detail")) {
+//				JSONObject commObj = loadfakecontent(R.raw.fake_comm);
+//				jsonObj.put("group" + group_count++,commObj);
+//				jsonObj.put("count",group_count);
+//			}
+
+
+
+			mContent = jsonObj;
+
+			if (group_count == 0)
+			{
+
+				TextView tv_empty = (TextView) ll_root
+						.findViewById(R.id.tv_empty);
+				tv_empty.setVisibility(View.VISIBLE);
+
+
+				NewDetailActivity activity = (NewDetailActivity) getActivity();
+				int tabCount = activity.getTabCount();
+
+				if(tabCount==1)
+				{
+					new AlertDialog.Builder(getContext())
+							.setTitle("Warning")
+							.setCancelable(false)
+							.setMessage("No Search Result.")
+							.setPositiveButton("Back", new DialogInterface.OnClickListener() {
+								@Override
+								public void onClick(DialogInterface dialog, int which) {
+									getActivity().finish();
+//                                checkAllPermission();
+//								if (finalRequest)
+//									checkAllPermission();
+//								else
+//									finish();
+								}
+							})
+//                    .setNegativeButton("No", new DialogInterface.OnClickListener() {
+//                        @Override
+//                        public void onClick(DialogInterface dialog, int which) {
+//                            finish();
+//                        }
+//                    })
+							.show();
+				}
+
+			}
+			for (int i = 0; i < group_count; i++)
+			{
+				// String key = (String) it.next();
+				// if (key.equals("result"))
+				// continue;
+				final JSONObject groupobj = jsonObj.getJSONObject("group" + i);
+				View v = inflater.inflate(R.layout.detail_group_tag, null);
+//				v.setOnClickListener(this);
+
+
+				TextView tvgroup = (TextView) v.findViewById(R.id.tv_group);
+				String group_name = groupobj.getString("_name");
+				tvgroup.setText(group_name);
+				v.setId(RAUtil.generateViewId());
+				ll_root.addView(v);
+				String grouptype = groupobj.getString("_type");
+
+				v.setTag(grouptype);
+//				v.setOnTouchListener(new View.OnTouchListener() {
+//					@Override
+//					public boolean onTouch(View view, MotionEvent motionEvent) {
+//
+//						touchedView = view;
+//						detector.onTouchEvent(motionEvent);
+//
+//						return true;
+//					}
+//				});
+
+
+				// groupobj.remove("_type");
+				if (grouptype.equals("mapping"))
+				{
+					LinearLayout mappingview = (LinearLayout) inflater.inflate(
+							R.layout.detail_container_kv, null);
+					mappingview.setId(RAUtil.generateViewId());
+					control.put(v.getId(), mappingview.getId());
+					ll_root.addView(mappingview);
+
+					int map_count = groupobj.getInt("count");
+					for (int j = 0; j < map_count; j++)
+					{
+						// String keygroup = (String) itgroup.next();
+						JSONObject itemobj = groupobj.getJSONObject("item" + j);
+						final String key = (String) itemobj.keys().next();
+						final String val = itemobj.getString(key);
+						LinearLayout mappingitem = (LinearLayout) inflater
+								.inflate(R.layout.detail_cell_kv, null);
+						TextView tvkey = (TextView) mappingitem
+								.findViewById(R.id.tv_key);
+						tvkey.setText(key);
+						// tvkey.setBackgroundResource(R.drawable.detail_item);
+						TextView tvval = (TextView) mappingitem
+								.findViewById(R.id.tv_value);
+						tvval.setText(Html.fromHtml(val));
+						// tvval.setBackgroundResource(R.drawable.detail_item);
+
+						tvval.setOnTouchListener(new View.OnTouchListener() {
+							@Override
+							public boolean onTouch(View view, MotionEvent motionEvent) {
+
+								copiedKey = key;
+								copiedVal = val;
+								detector.onTouchEvent(motionEvent);
+
+								return true;
+							}
+						});
+
+						mappingview.addView(mappingitem);
+					}
+					// Iterator itgroup = groupobj.keys();
+					// while (itgroup.hasNext())
+					// {
+					//
+					//
+					// }
+				}
+//				else if (grouptype.equals("table"))
+//				{
+//					String content = groupobj.getString("content");
+//					WebView wv;
+//
+//					wv = (WebView) inflater.inflate(R.layout.web_content, null);
+//
+//					wv.getSettings().setDefaultTextEncodingName("UTF-8");
+//					wv.setId(RAUtil.generateViewId());
+//					wv.setWebViewClient(new MyWebViewClient());
+////					wv.setDownloadListener(new DownloadListener()
+////					{
+////
+////						@Override
+////						public void onDownloadStart(String url,
+////								String userAgent, String contentDisposition,
+////								String mimetype, long contentLength)
+////						{
+////							if(!RAUtil.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.d("tag", "url=" + url);
+//////							// Log.i("tag", "userAgent="+userAgent);
+//////							// Log.i("tag",
+//////							// "contentDisposition="+contentDisposition);
+//////							// Log.i("tag", "mimetype="+mimetype);
+//////							// Log.i("tag", "contentLength="+contentLength);
+//////							// Uri uri = Uri.parse(url);
+//////							// Intent intent = new Intent(Intent.ACTION_VIEW,
+//////							// uri);
+//////							// startActivity(intent);
+//////
+//////							final DownloadManager downloadManager = (DownloadManager) TradeFilingApplication
+//////									.get_instance().getSystemService(
+//////											Context.DOWNLOAD_SERVICE);
+//////
+//////							Uri uri = Uri.parse(url);
+//////							final Request request = new Request(uri);
+//////
+//////							// 设置允许使用的网络类型,这里是移动网络和wifi都可以
+//////							request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE
+//////									| DownloadManager.Request.NETWORK_WIFI);
+//////
+//////
+//////
+//////							request.setDestinationInExternalPublicDir("Apex Mobile",filename);
+//////
+//////							// 禁止发出通知,既后台下载,如果要使用这一句必须声明一个权限:android.permission.DOWNLOAD_WITHOUT_NOTIFICATION
+//////							// request.setShowRunningNotification(false);
+//////
+//////							// 不显示下载界面
+//////							request.setVisibleInDownloadsUi(false);
+//////							request.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
+//////
+//////							/*
+//////							 * 设置下载后文件存放的位置,如果sdcard不可用,那么设置这个将报错,
+//////							 * 因此最好不设置如果sdcard可用,下载后的文件 在/mnt/sdcard/Android/
+//////							 * data/packageName/files目录下面
+//////							 * ,如果sdcard不可用,设置了下面这个将报错,不设置,下载后的文件在/cache这个 目录下面
+//////							 */
+//////							// request.setDestinationInExternalFilesDir(this,
+//////							// null, "tar.apk");
+//////
+////////							getActivity();
+//////							AlertDialog.Builder builder = new Builder(
+//////									getActivity());
+//////							builder.setMessage(getString(R.string.str_downloadmessage));
+//////
+//////							builder.setTitle(getString(R.string.str_confirmdownload));
+//////
+//////							builder.setPositiveButton(
+//////									getString(R.string.str_download),
+//////									new Dialog.OnClickListener()
+//////									{
+//////
+//////										@Override
+//////										public void onClick(
+//////												DialogInterface dialog,
+//////												int which)
+//////										{
+//////											downloadManager.enqueue(request);
+//////											dialog.dismiss();
+//////
+//////										}
+//////									});
+//////
+//////							builder.setNegativeButton(
+//////									getString(R.string.str_cancel),
+//////									new Dialog.OnClickListener()
+//////									{
+//////
+//////										@Override
+//////										public void onClick(
+//////												DialogInterface dialog,
+//////												int which)
+//////										{
+//////											dialog.dismiss();
+//////										}
+//////									});
+//////
+//////							builder.create().show();
+////
+////						}
+////
+////					});
+//					wv.setTag(i);
+//					control.put(v.getId(), wv.getId());
+//
+//					String encodedHtml = Base64.encodeToString(content.getBytes(), Base64.NO_PADDING);
+//					wv.loadData(encodedHtml, mimeType, "base64");
+////					wv.loadData(content, mimeType, null);
+//
+//					// wv.setOnTouchListener(new OnTouchListener()
+//					// {
+//					// @Override
+//					// public boolean onTouch(View v, MotionEvent event)
+//					// {
+//					//
+//					// if (event.getAction() == MotionEvent.ACTION_UP)
+//					// sl_root.requestDisallowInterceptTouchEvent(false);
+//					// else
+//					// sl_root.requestDisallowInterceptTouchEvent(true);
+//					//
+//					// return false;
+//					// }
+//					// });
+//					ll_root.addView(wv);
+//					Log.d("table content", content);
+//
+//				}
+//				if (grouptype.equals("tracking"))
+//				{
+//					LinearLayout listview = (LinearLayout) inflater.inflate(
+//							R.layout.list_content, null);
+//
+//					listview.setId(RAUtil.generateViewId());
+//
+//
+//					ViewGroup.LayoutParams lp=listview.getLayoutParams();
+//					control.put(v.getId(), listview.getId());
+//					ll_root.addView(listview);
+//					long list_count = groupobj.getInt("count");
+//					for (int j = 0; j < list_count; j++)
+//					{
+//						final JSONObject itemobj = groupobj.getJSONObject("item" + j);
+//
+//						ConstraintLayout listitem = (ConstraintLayout) inflater
+//								.inflate(R.layout.detail_tracking_cell, null);
+//
+//
+//						ImageView icon = (ImageView)  listitem
+//								.findViewById(R.id.iv_thumb);
+//
+//						String iconname = itemobj.getString("icon");
+//						int rid = RAUtil.iconName2Rid(getActivity(),iconname);
+//						icon.setImageResource(rid);
+//						if(j!=0)
+//						{
+//							icon.setColorFilter(Color.GRAY);
+////							ColorMatrix matrix = new ColorMatrix();
+////							matrix.setSaturation(0);
+////							ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
+////							icon..image.setColorFilter(filter);
+//						}
+//
+//						TextView tvitem = (TextView) listitem
+//								.findViewById(R.id.tv_title);
+//						String val = itemobj.getString("msg");
+//						tvitem.setText(val);
+//
+//						// tvitem.setBackgroundResource(R.drawable.detail_item);
+//					//	listitem.removeView(tvitem);
+//
+//						int px=RAUtil.dp2px(getActivity(),56);
+//						listitem.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, px, 1));
+//						listview.addView(listitem);
+////						ViewGroup.LayoutParams lp1=listitem.getLayoutParams();
+//
+//						final int selectIndex = i;
+//						final int child = j;
+//						final JSONObject location = groupobj.optJSONObject("location");
+//
+//						listitem.setOnClickListener(new OnClickListener() {
+//							@Override
+//							public void onClick(View v) {
+//
+////								if (mTrackingMap != null) {
+////									JSONObject location = groupobj.optJSONObject("location");
+////									if (location != null) {
+////										mTrackingMap.showShipAnnotation(location);
+////									}
+////									mSelectTrackingPosition = selectIndex;
+////								}
+//
+//								selectLocation(v,selectIndex,child,location);
+//
+//							}
+//						});
+//
+//						if (mSelectTrackingPosition == -1) {
+//							mSelectTrackingPosition = selectIndex;
+//						}
+//						if (mSelectTrackingChild == -1) {
+//							mSelectTrackingChild = 0;
+//						}
+//
+//						if (mSelectTrackingPosition == selectIndex && mSelectTrackingChild == child) {
+//
+////							if (mTrackingMap != null) {
+////								JSONObject location = groupobj.optJSONObject("location");
+////								if (location != null) {
+////									mTrackingMap.showShipAnnotation(location);
+////								}
+////							}
+//
+//							selectLocation(listitem,selectIndex,child,location);
+//						}
+//
+//					}
+//
+//				}
+				if (grouptype.equals("container"))
+				{
+					LinearLayout containerview = (LinearLayout) inflater.inflate(
+							R.layout.detail_container_container, null);
+					containerview.setId(RAUtil.generateViewId());
+					control.put(v.getId(), containerview.getId());
+					ll_root.addView(containerview);
+					long container_count = groupobj.getInt("count");
+					for (int j = 0; j < container_count; j++)
+					{
+						ConstraintLayout containeritem = (ConstraintLayout) inflater
+								.inflate(R.layout.detail_cell_container, null);
+
+						JSONObject item=groupobj.getJSONObject("item"+j);
+						String container_no = item.optString("container#");
+						String size = item.optString("size");
+						String seal_no = item.optString("seal_no");
+						String qty = item.optString("qty");
+						String service = item.optString("service");
+						String weight = item.optString("weight");
+
+						TextView tv_container = (TextView) containeritem
+								.findViewById(R.id.tv_container_no);
+						tv_container.setText(container_no);
+
+						TextView tv_size = (TextView) containeritem
+								.findViewById(R.id.tv_size);
+						tv_size.setText(size);
+
+
+						TextView tv_seal_no = (TextView) containeritem
+								.findViewById(R.id.tv_seal_no);
+						tv_seal_no.setText(seal_no);
+
+
+
+						TextView tv_qty = (TextView) containeritem
+								.findViewById(R.id.tv_qty);
+						tv_qty.setText(qty);
+
+						TextView tv_service = (TextView) containeritem
+								.findViewById(R.id.tv_service);
+						tv_service.setText(service);
+
+						TextView tv_weight = (TextView) containeritem
+								.findViewById(R.id.tv_weight);
+						tv_weight.setText(weight);
+
+
+////						String val = groupobj.getString("item" + j);
+//
+//						String val = item.getString("text");
+//						boolean bgcolor=item.getBoolean("bg");
+//						tvitem.setText(val);
+//						// tvitem.setBackgroundResource(R.drawable.detail_item);
+//						listitem.removeView(tvitem);
+
+						containerview.addView(containeritem);
+					}
+				}
+				if (grouptype.equals("container_ca"))
+				{
+					LinearLayout containerview = (LinearLayout) inflater.inflate(
+							R.layout.detail_container_container_ca, null);
+					containerview.setId(RAUtil.generateViewId());
+					control.put(v.getId(), containerview.getId());
+					ll_root.addView(containerview);
+					long container_count = groupobj.getInt("count");
+					for (int j = 0; j < container_count; j++)
+					{
+						ConstraintLayout containeritem = (ConstraintLayout) inflater
+								.inflate(R.layout.detail_cell_container_ca, null);
+
+						final JSONObject item=groupobj.getJSONObject("item"+j);
+						String container_no = item.optString("container#");
+//						String size = item.optString("size");
+						String seal_no = item.optString("seal_no");
+//						String qty = item.optString("qty");
+//						String service = item.optString("service");
+//						String weight = item.optString("weight");
+
+						TextView tv_container = (TextView) containeritem
+								.findViewById(R.id.tv_container_no);
+						tv_container.setText(container_no);
+
+
+
+
+						TextView tv_seal_no = (TextView) containeritem
+								.findViewById(R.id.tv_seal_no);
+						tv_seal_no.setText(seal_no);
+
+
+
+
+////						String val = groupobj.getString("item" + j);
+//
+//						String val = item.getString("text");
+//						boolean bgcolor=item.getBoolean("bg");
+//						tvitem.setText(val);
+//						// tvitem.setBackgroundResource(R.drawable.detail_item);
+//						listitem.removeView(tvitem);
+
+
+						containeritem.setOnTouchListener(new View.OnTouchListener() {
+							@Override
+							public boolean onTouch(View view, MotionEvent motionEvent) {
+
+								containerID=item.optString("id");
+								touchedView = view;
+								detector.onTouchEvent(motionEvent);
+
+								return true;
+							}
+						});
+						containerview.addView(containeritem);
+					}
+				}
+				if (grouptype.equals("log"))
+				{
+					LinearLayout listview = (LinearLayout) inflater.inflate(
+							R.layout.detail_container_list, null);
+					listview.setId(RAUtil.generateViewId());
+					control.put(v.getId(), listview.getId());
+					ll_root.addView(listview);
+					long list_count = groupobj.getInt("count");
+					for (int j = 0; j < list_count; j++)
+					{
+						RelativeLayout listitem = (RelativeLayout) inflater
+								.inflate(R.layout.detail_cell_list, null);
+
+						TextView tvitem = (TextView) listitem
+								.findViewById(R.id.tv_item);
+//						String val = groupobj.getString("item" + j);
+						JSONObject item=groupobj.getJSONObject("item"+j);
+						String val = item.getString("text");
+						boolean bgcolor=item.getBoolean("bg");
+						tvitem.setText(val);
+						// tvitem.setBackgroundResource(R.drawable.detail_item);
+						listitem.removeView(tvitem);
+
+						listview.addView(tvitem);
+					}
+					// Iterator itgroup = groupobj.keys();
+					// while (itgroup.hasNext())
+					// {
+					// String keygroup = (String) itgroup.next();
+					//
+					// }
+				}
+				if (grouptype.equals("list"))
+				{
+					LinearLayout listview = (LinearLayout) inflater.inflate(
+							R.layout.detail_container_list, null);
+					listview.setId(RAUtil.generateViewId());
+					control.put(v.getId(), listview.getId());
+					ll_root.addView(listview);
+					long list_count = groupobj.getInt("count");
+					for (int j = 0; j < list_count; j++)
+					{
+						RelativeLayout listitem = (RelativeLayout) inflater
+								.inflate(R.layout.detail_cell_list, null);
+
+						TextView tvitem = (TextView) listitem
+								.findViewById(R.id.tv_item);
+						String val = groupobj.getString("line" + j);
+						tvitem.setText(val);
+						// tvitem.setBackgroundResource(R.drawable.detail_item);
+						listitem.removeView(tvitem);
+
+						listview.addView(tvitem);
+					}
+					// Iterator itgroup = groupobj.keys();
+					// while (itgroup.hasNext())
+					// {
+					// String keygroup = (String) itgroup.next();
+					//
+					// }
+				}
+
+
+				// String value = obj.getString(key);
+				// JSONArray array = obj.getJSONArray(key);
+				// for(int i=0;i<array.length();i++){
+				// JSONObject jsonobject = array.getJSONObject(i);
+				// jsonobject.put("name", key);
+				// jsonobject.put("exp", key+"="+jsonobject.getString("value"));
+				// newArray.put(jsonobject);
+
+			}
+			// Iterator it = jsonObj.keys();
+			// while (it.hasNext())
+			// {
+			//
+			// }
+		}
+		catch (JSONException e)
+		{
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+
+	private JSONObject getGroup(int group) {
+		if (mContent != null) {
+			JSONObject groupobj = mContent.optJSONObject("group" + group);
+			return groupobj;
+		}
+		return null;
+	}
+
+	private boolean validateEmail(String email) {
+
+		String emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
+
+		return Pattern.matches(emailRegex,email);
+	}
+
+	@Override
+	public void onClick(View v)
+	{
+
+//		JSONArray actions = mPresenter.getActions();
+//		if (actions == null) {
+//			actions = new JSONArray();
+//		}
+
+		Intent intent = new Intent(getContext(), NewDetailActivity.class);
+
+//		NSString* cid=[item[@"id"] stringValue];
+		intent.putExtra("sub_type", "container");
+		intent.putExtra("action_type", "Container Detail");
+		intent.putExtra("action", "detail");
+		intent.putExtra("action0", "Container Detail");
+		intent.putExtra("actions_count", 1);
+
+		Bundle params = new Bundle();
+		params.putString("id",containerID);
+		intent.putExtra("bundle_params",params);
+//        intent.putExtra("_id",detail_id);
+//        if(_schema!=null)
+//            intent.putExtra("_schema",_schema);
+
+//		for (int i = 0; i < actions.length(); i++) {
+//			try {
+//				String name = actions.getString(i);
+//				intent.putExtra("action" + i, name);
+//			} catch (JSONException e) {
+//				e.printStackTrace();
+//			}
+//		}
+
+		startActivity(intent);
+
+
+
+//		View view = ll_root.findViewById(control.get(v.getId()));
+//		ImageView expand_iv = v.findViewById(R.id.group_expand_indicator);
+//		if (view.getVisibility() == View.VISIBLE) {
+//			expand_iv.setImageResource(R.drawable.ic_expand_less);
+//			view.setVisibility(View.GONE);
+//		}
+//		else {
+//			expand_iv.setImageResource(R.drawable.ic_expand_more);
+//			view.setVisibility(View.VISIBLE);
+//		}
+
+	}
+
+	@Override
+	public void onDestroy()
+	{
+		if (m_task != null)
+			m_task.cancel(true);
+		super.onDestroy();
+	}
+
+	@Override
+	public void onActivityResult(int requestCode, int resultCode, Intent data)
+	{
+//		((NewDetailActivity) getActivity()).showlogin = false;
+		super.onActivityResult(requestCode, resultCode, data);
+
+//		if (requestCode == People_Pick_Code && data != null) {
+//			Uri contactData = data.getData();
+//			if (contactData == null) {
+//				return;
+//			}
+//			Cursor c = mContext.getContentResolver().query(contactData, null, null, null, null);
+//
+//
+//			if (c.moveToFirst()) {
+//				String contactId = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));
+//
+//				Cursor cursor = mContext.getContentResolver().query(
+//						ContactsContract.CommonDataKinds.Email.CONTENT_URI,
+//						new String[]{ContactsContract.CommonDataKinds.Email.DATA, ContactsContract.CommonDataKinds.Email.TYPE}, ContactsContract.Data.CONTACT_ID + "='" + contactId + "'", null, null);
+//
+//				while(cursor.moveToNext()) {
+//					String email = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
+//					String emailType = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
+//
+//					email = email.replace("\r\n",";");
+//					email = email.replace("\r",";");
+//					email = email.replace("\n",";");
+//
+//					String[] emailArr = email.split(";");
+//					for (int i = 0; i < emailArr.length; i++) {
+//						email = emailArr[i];
+//						if (email.length() > 0) {
+//							if (emailType != null && Integer.valueOf(emailType) == ContactsContract.CommonDataKinds.Email.TYPE_WORK) {
+//								appendContactEmail(email,mSelectContactPosition);
+//								dbUtil.CloseCursor(c);
+//								dbUtil.CloseCursor(cursor);
+//								return;
+//							}
+//						}
+//					}
+//
+//
+//				}
+//
+//				dbUtil.CloseCursor(cursor);
+//
+//			}
+//			dbUtil.CloseCursor(c);
+//			mSelectContactPosition = -1;
+//		}
+
+	}
+
+	@Override
+	public void onDetach()
+	{
+		if (m_task != null)
+			m_task.cancel(false);
+		super.onDetach();
+	}
+
+	class SearchTask extends AsyncTask<Void, Void, Boolean>
+	{
+		int	errorcode;
+
+		@Override
+		protected Boolean doInBackground(Void... params)
+		{
+			Log.d("SearchTask", "doInBackground");
+			if (!OnlineDataProvider.NetworkIsAvailable())
+
+			{
+				errorcode = OnlineDataProvider.RESULT_NET_NOTAVAILABLE;
+				return false;
+			}
+
+
+			JSONObject jsonResult = RADataProvider.TabDetail(getArguments());
+			String jstr=jsonResult.toString();
+			if (jstr == null || jstr.length() <= 0)
+			{
+				// Log.d(TAG, "json is wrong");
+
+				errorcode = OnlineDataProvider.RESULT_NET_ERROR;
+				return false;
+			}
+
+			// mdataFragment.put_result(jstr);
+			fragment_content = jstr;
+			NewDetailActivity activity = (NewDetailActivity) getActivity();
+			activity.save_content(getArguments().getString("action_type"), jstr);
+
+			errorcode = OnlineDataProvider.RESULT_TRUE;
+
+			return true;
+		}
+
+		@Override
+		protected void onPostExecute(Boolean success)
+		{
+			Log.i("onPostExecute", "entry");
+			m_task = null;
+			showProgress(false);
+
+
+			
+			switch (errorcode)
+			{
+				case OnlineDataProvider.RESULT_NET_NOTAVAILABLE:
+				{
+					Toast toast = Toast.makeText(
+							TradeFilingApplication.get_instance(),
+							getText(R.string.msg_connection_none),
+							Toast.LENGTH_LONG);
+					toast.setGravity(Gravity.CENTER, 0, 0);
+					toast.show();
+					break;
+				}
+				case OnlineDataProvider.RESULT_NET_ERROR:
+				{
+					Toast toast = Toast.makeText(
+							TradeFilingApplication.get_instance(),
+							getText(R.string.msg_net_error), Toast.LENGTH_LONG);
+					toast.setGravity(Gravity.CENTER, 0, 0);
+					toast.show();
+					break;
+				}
+				case OnlineDataProvider.RESULT_ERROR:
+				// case Network.RESULT_RESPONSE_NULL:
+				{
+
+					Toast toast = Toast.makeText(
+							TradeFilingApplication.get_instance(),
+							getText(R.string.msg_net_resulterror) + ":"
+									+ errorcode, Toast.LENGTH_LONG);
+					toast.setGravity(Gravity.CENTER, 0, 0);
+					toast.show();
+
+					break;
+				}
+
+				default:
+					break;
+			}
+
+			if (success)
+			{
+				LayoutInflater inflater = (LayoutInflater) TradeFilingApplication
+						.get_instance().getSystemService(
+								Context.LAYOUT_INFLATER_SERVICE);
+
+				init(fragment_content, inflater/*
+												 * getActivity().
+												 * getLayoutInflater()
+												 */);
+			}
+			else
+			{
+				LinearLayout ll = (LinearLayout) ll_root
+						.findViewById(R.id.ll_refresh);
+				ll.setVisibility(View.VISIBLE);
+			}
+			super.onPostExecute(success);
+		}
+
+		@Override
+		protected void onCancelled()
+		{
+			m_task = null;
+			showProgress(false);
+		}
+	}
+    private void showQuickLook(final String url) {
+
+        showProgressDialog("Please wait","Downloading...");
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+
+                String cacheDir = TradeFilingApplication.getInstance().getExternalCacheDir().getAbsolutePath();//TradeFilingApplication.getInstance().getDocumentDir();
+
+                final Bundle param = new Bundle();
+                // 下载文件
+                final File downloadFile = OnlineDataProvider.downloadFile(param,url,cacheDir);
+
+                getActivity().runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        progressDialog.dismiss();
+                        if (downloadFile != null && downloadFile.exists()) {
+                            String email = null,email_subject = null,email_content = null;
+                            //此处需要新增保存文档的本地表
+
+
+                            try {
+                                email = mContent.getString("email");
+                                email_subject = mContent.getString("email_subject");
+                                email_content = mContent.getString("email_content");
+
+                            } catch (JSONException e) {
+                                e.printStackTrace();
+                            }
+
+//                            email=param.getString("email");
+//                            email_subject=param.getString("email_subject");
+//                            email_content=param.getString("email_content");
+
+                            previewPDF(downloadFile.getAbsolutePath(),email,email_subject,email_content);
+                        } else {
+                            showAlert("Sorry,there is a wrong.");
+                        }
+                    }
+                });
+
+            }
+        }).start();
+
+
+    }
+
+	// public class DataFragment extends Fragment {
+	//
+	// String result = null;
+	//
+	// @Override
+	// public void onCreate(Bundle savedInstanceState) {
+	// setRetainInstance(true);
+	// super.onCreate(savedInstanceState);
+	// }
+	//
+	// public String get_result() {
+	// return result;
+	//
+	// }
+	//
+	// public void put_result(String s) {
+	// result = s;
+	// }
+	//
+	// }
+    public void showAlert(String msg) {
+        if (msg == null || msg.isEmpty()) {
+            return;
+        }
+
+        new androidx.appcompat.app.AlertDialog.Builder(mContext)
+                .setMessage(msg)
+                .show();
+    }
+
+
+
+    protected void previewPDF(String file,String email,String subject,String content) {
+        Intent myIntent = new Intent();
+        myIntent = new Intent(getActivity(), RAPDFPreviewActivity.class);
+
+        myIntent.putExtra("file",file);
+        myIntent.putExtra("iscache",true);
+
+        try {
+            JSONObject json = new JSONObject();
+//            email = "66666@qq.com";
+//            subject = "test subject";
+//            content = "test body";
+            if (email != null) {
+                json.put("email",email);
+            }
+            if (subject != null) {
+                json.put("subject",subject);
+            }
+            if (content != null) {
+                json.put("content",content);
+            }
+            myIntent.putExtra("email",json.toString());
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+
+
+        startActivity(myIntent);
+    }
+
+
+    public void download(String url) {
+
+
+
+//
+//		final String download_url = url;
+//
+//		showQuickLook(url);
+//		if(true)
+//		    return;
+//
+//		showProgressDialog("Please wait","Downloading...");
+//		new Thread(new Runnable() {
+//			@Override
+//			public void run() {
+//
+////									String cacheDir = TradeFilingApplication.getInstance().getDocumentDir();
+//				// 下载文件
+//				final File downloadFile = OnlineDataProvider.downloadFile(null,download_url,null);
+//
+//				getActivity().runOnUiThread(new Runnable() {
+//					@Override
+//					public void run() {
+//						progressDialog.dismiss();
+//						RAUtil.openFile(getActivity(),downloadFile);
+//					}
+//				});
+//
+//			}
+//		}).start();
+	}
+
+	public class MyWebViewClient extends WebViewClient
+	{
+		// 如果页面中链接,如果希望点击链接继续在当前browser中响应,
+		// 而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。
+		public boolean shouldOverviewUrlLoading(WebView view, String url)
+		{
+			Log.d("Web Client", "shouldOverviewUrlLoading: " + url);
+			// L.i("shouldOverviewUrlLoading");
+			view.loadUrl(url);
+			return true;
+		}
+
+		@Override
+		public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
+			Log.d("Web Client", "shouldOverrideUrlLoading: " + request);
+			return super.shouldOverrideUrlLoading(view, request);
+		}
+
+		public void onPageStarted(WebView view, String url, Bitmap favicon)
+		{
+			// L.i("onPageStarted");
+			// showProgress();
+			Log.d("Web Client", "onPageStarted: ");
+		}
+
+		public void onPageFinished(WebView view, String url)
+		{
+			// L.i("onPageFinished");
+			// closeProgress();
+			Log.d("Web Client", "onPageFinished: ");
+		}
+
+		public void onReceivedError(WebView view, int errorCode,
+				String description, String failingUrl)
+		{
+			// L.i("onReceivedError");
+			// closeProgress();
+			Log.d("Web Client", "onReceivedError: ");
+		}
+
+
+
+		@Override
+		public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
+
+			Log.d("Web Client", "shouldInterceptRequest: " + url);
+			if (url.startsWith("http") && url.contains("action_type=download_doc")) {
+				download(url);
+
+				String content = contentOfWebView(view);
+				WebResourceResponse response = new WebResourceResponse("text/html",
+						"utf-8",
+						new ByteArrayInputStream(content.getBytes()));
+				return response;
+
+			} else {
+				return super.shouldInterceptRequest(view,url);
+			}
+		}
+
+		String contentOfWebView(WebView webView) {
+
+			int i = (int)webView.getTag();
+			try {
+
+				JSONObject groupobj = mContent.getJSONObject("group" + i);
+				String content = groupobj.getString("content");
+				return content;
+			} catch (JSONException e) {
+				e.printStackTrace();
+			}
+
+			return null;
+		}
+
+//		@Override
+//		public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
+//			Log.d("Web Client", "shouldInterceptRequest: " + request);
+//
+//			if (request.getUrl().toString().contains("action_type=download_doc")) {
+//				return null;
+//			} else {
+//				return super.shouldInterceptRequest(view,request);
+//			}
+//
+//
+//		}
+	}
+
+	private void appendContactEmail(String email,int group) {
+
+		try {
+
+			String groupKey = "group" + group;
+
+			JSONObject groupObj = mContent.getJSONObject(groupKey);
+			String groupType = groupObj.getString("_type");
+
+			if (groupType.equals("communication")) {
+
+				String oldCC = groupObj.optString("cc");
+				if (oldCC == null || oldCC.length() == 0) {
+					oldCC = email + ";";
+				} else {
+					if (oldCC.substring(oldCC.length() - 1).equals(";")) {
+						oldCC = oldCC + email + ";";
+					} else {
+						oldCC = oldCC + ";" + email + ";";
+					}
+				}
+
+				commContentChange(oldCC,group,0);
+
+				EditText ccTv = ll_root.findViewWithTag("group_" + group + "_cc");
+				if (ccTv != null) {
+					ccTv.setText(oldCC);
+					ccTv.requestFocus();
+					ccTv.setSelection(oldCC.length());
+				}
+			}
+
+		} catch (JSONException e) {
+			e.printStackTrace();
+		}
+
+	}
+
+	private void commContentChange(String content,int group,int child) {
+
+        try {
+
+            String groupKey = "group" + group;
+
+            JSONObject groupObj = mContent.getJSONObject(groupKey);
+            String groupType = groupObj.getString("_type");
+
+            if (groupType.equals("communication")) {
+
+                if (child == 0) {
+                    groupObj.put("cc",content);
+                } else if (child == 1) {
+                    groupObj.put("edit_content",content);
+                }
+                mContent.put(groupKey,groupObj);
+
+            }
+
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+
+    public class TextFieldTextWatcher implements TextWatcher {
+
+        Context mCtx;
+        int group;
+        int child;
+        EditText textView;
+
+        public TextFieldTextWatcher(Context ctx,EditText textView,int group,int child) {
+            this.mCtx = ctx;
+            this.textView = textView;
+            this.group = group;
+            this.child = child;
+
+        }
+
+        String origin_text;
+        String string;
+        int start_position;
+        int change_length; // 修改原文长度
+        int new_string_length;
+
+
+        /**
+         * s        改变前的内容
+         * start    增加内容前光标位置,删除内容后光标位置 (起始位置)
+         * count    选中s中的内容长度(发生改变的原内容长度),未选中为0
+         * after    新添加的内容长度,删除为0
+         * */
+        @Override
+        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+//            Log.d("TextChange", "before Text Changed: " + s + " Start: " + start + " Count: " + count + " After: " + after);
+
+            origin_text = s.toString();
+            start_position = start;
+            change_length = count;
+            new_string_length = after;
+        }
+
+        /**
+         * s        改变后的内容
+         * start    增加内容前光标位置,删除内容后光标位置 (起始位置)
+         * before   选中s中的内容长度(发生改变的原内容长度),未选中为0
+         * count    增加内容长度,删除内容为0
+         * */
+        @Override
+        public void onTextChanged(CharSequence s, int start, int before, int count) {
+//            Log.d("TextChange", "on Text Changed: " + s + " Start: " + start + " Before: " + before + " Count: " + count);
+        }
+
+        @Override
+        public void afterTextChanged(Editable s) {
+
+            commContentChange(s.toString(),group,child);
+
+        }
+    }
+
+}

+ 820 - 0
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/detail/NewDetailActivity.java

@@ -0,0 +1,820 @@
+package com.usai.ratradefiling.detail;
+
+//import android.app.Fragment;
+
+import android.app.AlertDialog;
+import android.content.BroadcastReceiver;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.Fragment;
+import androidx.viewpager.widget.ViewPager;
+
+import com.google.android.material.bottomnavigation.BottomNavigationView;
+//import com.usai.apex.ApexResultActivity≥importxTrackingApplication;
+//import com.usai.apex.DetailFragment;
+//import com.usai.apex.R;R
+//import com.usai.apex.ViewPagerAdapter;
+//import com.usai.apex.apexresult.ApexResultActivity;
+import com.usai.ratradefiling.NoScrollViewPager;
+import com.usai.ratradefiling.R;
+import com.usai.ratradefiling.TradeFilingApplication;
+import com.usai.ratradefiling.ViewPagerAdapter;
+import com.usai.redant.rautils.utils.RAUtil;
+//import com.usai.util.commonUtil;
+//import com.usai.util.dbUtil;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.HashMap;
+
+public class NewDetailActivity extends AppCompatActivity {
+
+
+    HashMap<String,String> contentmap = new HashMap<String ,String>();
+    HashMap<Integer, Integer> menu_map		= new HashMap<Integer, Integer>();
+
+    String sub_type;
+    Bundle paramsB;
+//    String							_schema;
+//    String							_id;
+//    String							cargo_criterion;
+    int								criterion_type;
+
+    String email_to = null,email_subject = null,email_content = null;
+    TextView mtitleview;
+
+    private NoScrollViewPager viewPager;
+    private MenuItem menuItem;
+    private BottomNavigationView bottomNavigationView;
+    int selectedMenuItem;
+//    boolean login=false;
+    BroadcastReceiver br;
+
+//    Menu actionbutton;
+
+    public int getTabCount()
+    {
+        return bottomNavigationView.getMenu().size();
+    }
+    private void setCustomActionBar() {
+        ActionBar.LayoutParams lp =new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.MATCH_PARENT, Gravity.CENTER);
+        View mActionBarView = LayoutInflater.from(this).inflate(R.layout.actionbar_customtitle, null);
+
+        mtitleview= mActionBarView.findViewById(R.id.title);
+
+
+        paramsB = getIntent().getBundleExtra("bundle_params");
+
+        sub_type = getIntent().getStringExtra("sub_type");
+        String title = "";
+        if(sub_type.equals("Ocean Booking"))
+            title="Booking Detail";
+        else if(sub_type.equals("Ocean B/L info."))
+            title="B/L info. Detail";
+        else if(sub_type.equals("Container detail"))
+            title="Container Detail";
+        else if(sub_type.equals("Cargo Tracking"))
+            title="Cargo Detail";
+        mtitleview.setText(title);
+        setTitle(title);
+//
+//        mActionBarView.setBackgroundColor(Color.YELLOW);
+//        titleview.setBackgroundColor(Color.BLUE);
+        ActionBar actionBar = getSupportActionBar();
+        actionBar.setCustomView(mActionBarView, lp);
+//		actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
+//		actionBar.setDisplayShowCustomEnabled(true);
+        actionBar.setDisplayHomeAsUpEnabled(true);
+
+
+//        actionBar.setIcon(getNumberDrawable());
+//        actionBar.setDisplayShowHomeEnabled(true);
+        actionBar.setDisplayShowTitleEnabled(true);
+    }
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu)
+    {
+        // Inflate the menu; this adds items to the action bar if it is present.
+
+//        if (function_name.equals("Cargo Tracking")) {
+//            getMenuInflater().inflate(R.menu.cargo_menu, menu);
+//        } else {
+            getMenuInflater().inflate(R.menu.detail, menu);
+//        }
+        return true;
+    }
+
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId())
+        {
+//            case R.id.action_close:
+//
+//                finish();
+//
+//                Intent intent = new Intent(this, RootActivity.class);
+//
+////                Intent intent = new Intent(context, LoginView.class);
+//                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+//
+//
+//                startActivity(intent);
+//                break;
+            case android.R.id.home:
+                finish();
+                break;
+            case R.id.action_addto_favorite:
+//	            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();
+                                if(TextUtils.isEmpty(name))
+                                {
+                                    new AlertDialog.Builder(NewDetailActivity.this)
+                                            .setTitle("Warning")
+                                            .setMessage("Name can not be empty.")
+
+                                            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
+                                                @Override
+                                                public void onClick(DialogInterface dialog, int which) {
+
+                                                }
+                                            })
+                                            .show();
+                                    return;
+                                }
+
+                                String param = getIntent().toUri(0);
+
+//                                SQLiteDatabase db = dbUtil.OpenDB(
+//                                        ApexTrackingApplication.get_instance(), null, true);
+//                                db.execSQL("insert into favorites(name,params,user,create_time,module_name) values('"
+//                                        + name
+//                                        + "','"
+//                                        + param
+//                                        + "','"
+//                                        + ApexTrackingApplication.get_user()
+//                                        + "',"
+//                                        + System.currentTimeMillis()
+//                                        + ",'"
+//                                        +getIntent().getStringExtra("function_name")+ "')");
+//                                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();
+                return true;
+
+//            case R.id.action_search_document: {
+//                String cargo_str = contentmap.get("Tracking");
+//                try {
+//                    JSONObject cargo_json = new JSONObject(cargo_str);
+//                    String hbol = cargo_json.optString("hbol");
+//                    if (hbol != null && hbol.length() > 0) {
+//
+//                        Bundle parms = new Bundle();
+//                        parms.putString("bol",hbol);
+//                        parms.putString("module_name","Download Document");
+////                        Intent resultIntent = new Intent(this, AMResultActivity.class);
+////                        resultIntent.putExtra("query_params",parms);
+////                        startActivity(resultIntent);
+//
+//
+//                        ApexResultActivity.startResultActivity(this, parms);
+//
+//                    } else {
+//                        showAlter("There is no hbol to search");
+//                    }
+//
+//                } catch (JSONException e) {
+//                    e.printStackTrace();
+//                    showAlter("There is no hbol to search");
+//                }
+//
+//            }
+//            break;
+
+            case R.id.action_share_detail: {
+
+                Intent share = new Intent();
+                share.setAction(Intent.ACTION_SEND);
+//				share.putExtra(Intent.EXTRA_STREAM, uri);
+                share.setType("text/plain");
+
+
+
+
+                if (email_content != null) {
+                    share.putExtra(Intent.EXTRA_TEXT, email_content);   //附带的说明信息
+                }
+                if (email_subject != null) {
+                    share.putExtra(Intent.EXTRA_SUBJECT, email_subject);
+                }
+                if (email_to != null) {
+                    share.putExtra(Intent.EXTRA_EMAIL, email_to.split(","));
+                }
+
+//        share.putExtra(Intent.EXTRA_CC, new String[]{"ray.zhang@united-cn.net"});
+//        startActivity(Intent.createChooser(share,getString(R.string.str_sendto)));
+                startActivity(Intent.createChooser(share, "Share"));
+            }
+            break;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    public void showAlter(String msg) {
+        new AlertDialog.Builder(this)
+                .setMessage(msg)
+                .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialogInterface, int i) {
+
+                    }
+                })
+                .show();
+    }
+    @Override
+    protected void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        outState.putSerializable("menu_map", menu_map);
+        outState.putSerializable("contentmap", contentmap);
+//        outState.putBoolean("login",login);
+    }
+
+//    @Override
+//    protected void onDestroy() {
+//        LocalBroadcastManager localBroadcastManager = LocalBroadcastManager
+//                .getInstance(this);
+//        localBroadcastManager.unregisterReceiver(br);
+//        super.onDestroy();
+//    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+//        if (!isTaskRoot()) {
+//            finish();
+//            return;
+//        }
+//
+//        LocalBroadcastManager localBroadcastManager = LocalBroadcastManager
+//                .getInstance(this);
+//        IntentFilter intentFilter = new IntentFilter();
+//        intentFilter.addAction("Login");
+//        br = new BroadcastReceiver() {
+//
+//            @Override
+//            public void onReceive(Context context, Intent intent) {
+//                boolean blogin = intent.getBooleanExtra("state",true);
+//                login=blogin;
+//
+//                setupViewPager(viewPager);
+//            }
+//
+//        };
+//        localBroadcastManager.registerReceiver(br, intentFilter);
+//
+
+        setContentView(R.layout.activity_new_detail);
+
+        setCustomActionBar();
+
+
+        if (savedInstanceState != null)
+        {
+            menu_map = (HashMap<Integer, Integer>) savedInstanceState
+                    .getSerializable("menu_map");
+//            tabmap = (LinkedHashMap<String, Integer>) savedInstanceState
+//                    .getSerializable("tabmap");
+            contentmap = (HashMap<String, String>) savedInstanceState.getSerializable("contentmap");
+        }
+        else
+        {
+            int count = getIntent().getIntExtra("actions_count", 0);
+            for (int i = 0; i < count; i++)
+            {
+
+
+                int vid = RAUtil.generateViewId();
+//                tabmap.put(getIntent().getStringExtra("action" + i), vid);
+            }
+        }
+
+
+        sub_type = getIntent().getStringExtra("sub_type");
+
+//        if(function_name.equals("Ocean Booking"))
+//            setTitle("Booking Detail");
+//        else if(function_name.equals("Ocean B/L info."))
+//            setTitle("B/L info. Detail");
+//        else if(function_name.equals("Container detail"))
+//            setTitle("Container Detail");
+////		else if(function_name.equals("Cargo Tracking"))
+////			setTitle("Cargo Detail");
+////
+//
+//        if (function_name.equals("Cargo Tracking"))
+//        {
+//            criterion_type = getIntent().getIntExtra("criterion_type", 0);
+//            cargo_criterion = getIntent().getStringExtra("cargo_criterion");
+////            setTitle("Cargo Detail");
+//        }
+//        _id = getIntent().getStringExtra("_id");
+//
+//        _schema = getIntent().getStringExtra("_schema");
+//
+//        if (savedInstanceState != null) {
+//            login = savedInstanceState.getBoolean("login");
+//        }
+
+
+
+
+
+//
+//        Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
+//        setSupportActionBar(toolbar);
+//
+//        getSupportActionBar().setDisplayShowTitleEnabled(false);
+        /*
+        ActionBar actionBar = getSupportActionBar();
+//        actionBar.setLogo(R.drawable.apexlogo);
+        actionBar.setIcon(R.drawable.apexlogo);
+//        actionBar.setIcon(R.drawable.ic_launcher);
+
+//        actionBar.setDisplayUseLogoEnabled(true);
+        actionBar.setDisplayShowHomeEnabled(true);
+        actionBar.setHomeButtonEnabled(true);
+//        actionBar.setHomeAsUpIndicator(R.drawable.ic_launcher);
+//        actionBar.setDisplayHomeAsUpEnabled(true);
+        actionBar.setDisplayShowTitleEnabled(false);
+*/
+
+        viewPager = (NoScrollViewPager) findViewById(R.id.viewpager);
+        bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation);
+
+        bottomNavigationView.setItemIconTintList(null);
+//        bottomNavigationView.setItemTextColor();;
+//        bottomNavigationView.getItemTextColor();
+
+//        bottomNavigationView.setlistener
+
+        //默认 >3 的选中效果会影响ViewPager的滑动切换时的效果,故利用反射去掉
+
+        bottomNavigationView.setOnNavigationItemSelectedListener(
+                new BottomNavigationView.OnNavigationItemSelectedListener() {
+                    @Override
+                    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
+//                        actionbutton.getItem(0).setVisible(false);
+//                        getSupportActionBar().setHomeAsUpIndicator(R.drawable.apexlogo);
+//                        getSupportActionBar().setDisplayShowTitleEnabled(false);
+
+//                        if(item.getItemId() == menu_map.get("Tracing").intValue())
+                        {
+
+                            viewPager.setCurrentItem(menu_map.get(item.getItemId()));
+                            return true;
+                        }
+//                        else if(item.getItemId() == menu_map.get("Detail").intValue())
+//                        {
+//
+//                            viewPager.setCurrentItem(1);
+//                            return true;
+//                        }
+//
+//
+//                        switch (item.getItemId()) {
+//                            case menu_map.get("Tracing"):
+//
+//                                viewPager.setCurrentItem(0);
+//                                return true;
+//
+//                            case R.id.item_tool:
+//                                viewPager.setCurrentItem(3);
+//                                return true;
+//
+//                            case R.id.item_otool:
+//                                viewPager.setCurrentItem(1);
+//                                return true;
+//
+//                            case R.id.item_home:
+//                                actionbutton.getItem(0).setVisible(true);
+//                                if (ApexTrackingApplication.get_instance().getPersonMode()) {
+//                                    getSupportActionBar().setHomeAsUpIndicator(R.drawable.apexlogo_p);
+//                                }
+//                                getSupportActionBar().setDisplayShowTitleEnabled(true);
+//                                viewPager.setCurrentItem(0);
+//                                return true;
+//
+//                            case R.id.item_history:
+//                                if (ApexTrackingApplication.get_instance().getPersonMode()) {
+//                                    getSupportActionBar().setHomeAsUpIndicator(R.drawable.apexlogo_p);
+//                                }
+//                                viewPager.setCurrentItem(1);
+//                                return true;
+//
+//                            case R.id.item_search:
+//                                viewPager.setCurrentItem(2);
+//                                return true;
+//
+//                            case R.id.item_my:
+//                                viewPager.setCurrentItem(4);
+//                                return true;
+
+//                        }
+//                        return false;
+                    }
+                });
+
+//
+//        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+//            @Override
+//            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+//
+//            }
+//
+//            @Override
+//            public void onPageSelected(int position) {
+//
+//                MenuItem item= bottomNavigationView.getMenu().getItem(position);
+//
+//                switch (item.getItemId())
+//                {
+//                    case R.id.item_login:
+//                        ApexTrackingApplication.get_instance().historyactive = false;
+//                        ApexTrackingApplication.get_instance().homeactive = false;
+//                        break;
+//
+//                    case R.id.item_tool:
+//                        ApexTrackingApplication.get_instance().historyactive = false;
+//                        ApexTrackingApplication.get_instance().homeactive = false;
+//                        break;
+//
+//                    case R.id.item_otool:
+//                        ApexTrackingApplication.get_instance().historyactive = false;
+//                        ApexTrackingApplication.get_instance().homeactive = false;
+//                        break;
+//
+//                    case R.id.item_home:
+//                        ApexTrackingApplication.get_instance().historyactive = false;
+//                        ApexTrackingApplication.get_instance().homeactive = true;
+//
+//                        HomeFragment homef=(HomeFragment)((ViewPagerAdapter)viewPager.getAdapter()).getItem(position);
+//                        homef.checkDirty();
+//                        break;
+//
+//                    case R.id.item_history:
+//
+//                        ApexTrackingApplication.get_instance().historyactive = true;
+//                        ApexTrackingApplication.get_instance().homeactive = false;
+//                        HistoryFragment historyf=(HistoryFragment)((ViewPagerAdapter)viewPager.getAdapter()).getItem(position);
+//                        historyf.checkDirty();
+//
+//                        break;
+//                    case R.id.item_search:
+//                        ApexTrackingApplication.get_instance().historyactive = false;
+//                        ApexTrackingApplication.get_instance().homeactive = false;
+//                        break;
+//
+//                    case R.id.item_my:
+//                        ApexTrackingApplication.get_instance().historyactive = false;
+//                        ApexTrackingApplication.get_instance().homeactive = false;
+//                        break;
+//                }
+//
+//
+//
+////                if(viewPager.gets)
+////                if (menuItem != null) {
+////                    menuItem.setChecked(false);
+////                } else {
+////                    bottomNavigationView.getMenu().getItem(0).setChecked(false);
+////                }
+////                menuItem = bottomNavigationView.getMenu().getItem(position);
+////                menuItem.setChecked(true);
+//            }
+//
+//            @Override
+//            public void onPageScrollStateChanged(int state) {
+//            }
+//        });
+//
+
+
+//        viewPager.set
+////        禁止ViewPager滑动
+//        viewPager.setOnTouchListener(new View.OnTouchListener() {
+//            @Override
+//            public boolean onTouch(View v, MotionEvent event) {
+//                return true;
+//            }
+//        });
+
+        setupViewPager(viewPager);
+
+
+//        boolean pop = checkAllPermission();
+//        if(!pop)
+//        {
+//            if(TextUtils.isEmpty(ApexTrackingApplication.station_name))
+//            {
+//                Intent intent = new Intent();
+//                intent.setClass(RootActivity.this,ServerSettingActivity.class);
+////            startActivity(intent);
+//                startActivityForResult(intent, 0);
+//            }
+//        }
+    }
+//    public boolean checkAllPermission() {
+//
+//
+//        /*
+//        *
+//        *     -->
+//    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+//    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+//    <uses-permission android:name="android.permission.INTERNET" />
+//    <uses-permission android:name="android.permission.READ_CONTACTS" />
+//    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
+//    <!-- External storage for caching. -->
+//    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+//    <!-- My Location -->
+//    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+//    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+//    <!-- Maps API needs OpenGL ES 2.0. -->
+//    <uses-feature
+//        android:glEsVersion="0x00020000"
+//        android:required="true" />
+//    <!-- End of copy. -->
+//
+//
+//    <!-- Baidu Map API -->
+//
+//    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+//    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
+//        * */
+//
+//
+//
+//        String[] permissions = {
+////                Manifest.permission.CAMERA,
+////                Manifest.permission.VIBRATE,
+//                Manifest.permission.READ_CONTACTS,
+//                Manifest.permission.READ_PHONE_STATE,
+//                Manifest.permission.WRITE_EXTERNAL_STORAGE,
+//                Manifest.permission.READ_EXTERNAL_STORAGE,
+////                Manifest.permission.RECEIVE_BOOT_COMPLETED,
+////                Manifest.permission.ACCESS_NETWORK_STATE,
+////                Manifest.permission.ACCESS_WIFI_STATE,
+////                Manifest.permission.INTERNET,
+////                Manifest.permission.ACCESS_FINE_LOCATION,
+////
+////                Manifest.permission.CHANGE_CONFIGURATION
+//
+//
+//
+//        };
+//
+//
+//
+////        RAUtil.checkPermissions1(this,permissions);
+//        boolean ret = true;
+////        for(String permission : permissions) {
+////            boolean granted = ;
+////            if (!granted) {
+////                ret= false;
+////            }
+////        }
+//
+//
+//        return commonUtil.checkPermissions(this,permissions);
+//
+////        return ret;
+//    }
+
+
+//    @Override
+//    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
+//    {
+//
+//        if (requestCode == commonUtil.MY_PERMISSIONS_REQUEST)
+//        {
+//            boolean missing=false;
+//            boolean request = false;
+//            for(int i=0;i<grantResults.length;i++)
+//            {
+//
+//                if(grantResults[i]!= PackageManager.PERMISSION_GRANTED)
+//                    missing=true;
+//                boolean bshow= ActivityCompat.shouldShowRequestPermissionRationale(this,permissions[i]);
+//                if(bshow)
+//                    request = true;
+//            }
+//
+//            String msg=null;
+//            if(request)
+//                msg="Apex Mobile needs some essential permissions.";
+//            else
+//                msg="Apex Mobile will quit because missing some essential permissions.\nPlease check your system setting.";
+//
+//            if(missing) {
+//                final boolean finalRequest = request;
+//                new AlertDialog.Builder(this)
+//                        .setTitle("Warning")
+//                        .setMessage(msg)
+//                        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
+//                            @Override
+//                            public void onClick(DialogInterface dialog, int which) {
+////                                checkAllPermission();
+//                                if (finalRequest)
+//                                    checkAllPermission();
+//                                else
+//                                    finish();
+//                            }
+//                        })
+////                    .setNegativeButton("No", new DialogInterface.OnClickListener() {
+////                        @Override
+////                        public void onClick(DialogInterface dialog, int which) {
+////                            finish();
+////                        }
+////                    })
+//                        .show();
+//            }
+//            else
+//            {
+////                if(TextUtils.isEmpty(ApexTrackingApplication.station_name))
+////                {
+////                    Intent intent = new Intent();
+////                    intent.setClass(FullScreenLoginActivity.this,ServerSettingActivity.class);
+//////            startActivity(intent);
+////                    startActivityForResult(intent, 0);
+////                }
+//            }
+////            if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
+////            {
+////               // callPhone();
+////            } else
+////            {
+////
+////
+////                            new AlertDialog.Builder(this)
+////                    .setTitle("Warning")
+////                    .setMessage("RA Image missing essential permission")
+////                    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
+////                        @Override
+////                        public void onClick(DialogInterface dialog, int which) {
+////                            checkAllPermission();
+////                        }
+////                    })
+//////                    .setNegativeButton("No", new DialogInterface.OnClickListener() {
+//////                        @Override
+//////                        public void onClick(DialogInterface dialog, int which) {
+//////                            finish();
+//////                        }
+//////                    })
+////                    .show();
+////
+////                // Permission Denied
+////               // Toast.makeText(MainActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show();
+////            }
+//            return;
+//        }
+//        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+//    }
+
+    private void setupViewPager(final ViewPager viewPager) {
+
+
+
+        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
+
+
+//        adapter.clear();
+
+        if(true)
+        {
+//            if(actionbutton!=null)
+//                actionbutton.getItem(0).setVisible(true);
+
+            bottomNavigationView.getChildAt(0).setSelected(true);
+            bottomNavigationView.getMenu().clear();
+//                bottomNavigationView.getMenu().
+//            bottomNavigationView.inflateMenu();
+//            bottomNavigationView.inflateMenu(R.menu.navi_logout);
+
+//            PrepareMenu(bottomNavigationView.getMenu());
+
+            Menu menu = bottomNavigationView.getMenu();
+
+
+
+            int count = getIntent().getIntExtra("actions_count", 0);
+            for (int i = 0; i < count; i++)
+            {
+
+                int vid = RAUtil.generateViewId();
+                String title = getIntent().getStringExtra("action" + i);
+                menu.add(0, vid, 0, title);
+
+                menu_map.put(vid,i);
+
+
+                Bundle bundle = new Bundle(paramsB);
+//                if (function_name.equals("Cargo Tracking"))
+//                {
+//                    if (criterion_type == 0)
+//                        bundle.putString("hbol", cargo_criterion);
+//                    else
+//                        bundle.putString("container_no", cargo_criterion);
+//
+//                }
+                bundle.putString("action_type", title);
+//                bundle.putString("id", _id);
+                bundle.putString("sub_type", sub_type);
+//                if(_schema!=null)
+//                    bundle.putString("_schema", _schema);
+
+                Fragment f;
+                f= new DetailFragment();
+                ((DetailFragment)f).set_content( contentmap.get(title));
+                f.setArguments(bundle);
+
+                adapter.addFragment(f);
+//
+//            tabmap.put(getIntent().getStringExtra("action" + i), vid);
+            }
+
+
+
+
+            TradeFilingApplication.get_instance().homeactive = true;
+
+
+        }
+
+
+        viewPager.setAdapter(adapter);
+    }
+    public void save_content(String which,String content)
+    {
+        contentmap.put(which, content);
+
+        try {
+
+            JSONObject jsonObject = new JSONObject(content);
+            email_to = jsonObject.optString("email",null);
+            email_subject = jsonObject.optString("email_subject",null);
+            email_content = jsonObject.optString("email_content",null);
+
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+
+    }
+//    boolean PrepareMenu(Menu menu)
+//    {
+//        int count = getIntent().getIntExtra("actions_count", 0);
+//        for (int i = 0; i < count; i++)
+//        {
+//
+//            int vid = commonUtil.generateViewId();
+//            String title = getIntent().getStringExtra("action" + i);
+//            menu.add(0, vid, 0, title);
+//
+//            menu_map.put(title,vid);
+////
+////            tabmap.put(getIntent().getStringExtra("action" + i), vid);
+//        }
+//        return true;
+//    }
+}

+ 60 - 0
ApexDrivers/ratradefiling/src/main/res/layout/activity_new_detail.xml

@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".detail.NewDetailActivity"
+    android:orientation="vertical">
+
+
+    <View
+        android:id="@+id/view0"
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:background="@drawable/bottom_shadow"
+
+        app:layout_constraintBottom_toTopOf="@+id/viewpager"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent" />
+    <com.usai.ratradefiling.NoScrollViewPager
+        android:id="@+id/viewpager"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        app:layout_constraintBottom_toTopOf="@+id/view"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <com.google.android.material.bottomnavigation.BottomNavigationView
+        android:id="@+id/bottom_navigation"
+        android:layout_width="match_parent"
+        android:layout_height="40dp"
+
+        app:labelVisibilityMode="labeled"
+        app:itemHorizontalTranslationEnabled="false"
+        android:background="@color/tab_bg"
+        app:itemTextColor="@drawable/bottom_navigation_selector"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent">
+
+    </com.google.android.material.bottomnavigation.BottomNavigationView>
+
+    <View
+        android:id="@+id/view"
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:background="@drawable/bottom_shadow"
+        app:layout_constraintBottom_toTopOf="@+id/bottom_navigation"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent" />
+    <!--app:itemIconTint="@drawable/bottom_navigation_selector"-->
+    <!--app:itemTextColor="@drawable/bottom_navigation_selector"-->
+
+    <!--<View-->
+    <!--android:layout_width="match_parent"-->
+    <!--android:layout_height="5dp"-->
+    <!--android:layout_above="@id/bottom_navigation"-->
+    <!--android:background="@drawable/bottom_shadow" />-->
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 115 - 0
ApexDrivers/ratradefiling/src/main/res/layout/detail_cell_container.xml

@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <TextView
+        android:id="@+id/tv_service"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="10dp"
+        android:layout_marginEnd="13dp"
+        android:text="service"
+        android:gravity="right"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toEndOf="@+id/tv_container_no"
+        app:layout_constraintTop_toTopOf="@+id/tv_container_no" />
+
+    <TextView
+        android:id="@+id/tv_container_no"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="13dp"
+        android:layout_marginTop="8dp"
+        android:text="Container#"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <ImageView
+        android:id="@+id/iv_container_blank"
+        android:layout_width="50dp"
+        android:layout_height="50dp"
+        android:layout_marginTop="8dp"
+        app:layout_constraintStart_toStartOf="@+id/tv_container_no"
+        app:layout_constraintTop_toBottomOf="@+id/tv_container_no"
+        app:srcCompat="@drawable/action_setting" />
+
+    <LinearLayout
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:layout_marginStart="10dp"
+        android:orientation="vertical"
+        app:layout_constraintBottom_toBottomOf="@+id/iv_container_blank"
+        app:layout_constraintEnd_toEndOf="@+id/tv_service"
+        app:layout_constraintStart_toEndOf="@+id/iv_container_blank"
+        app:layout_constraintTop_toTopOf="@+id/iv_container_blank">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:orientation="horizontal">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:id="@+id/tv_qty"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:text="QTY" />
+
+                <TextView
+                    android:id="@+id/tv_cbm"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:text="CBM" />
+            </LinearLayout>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:orientation="horizontal">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:id="@+id/tv_weight"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:text="Weight" />
+
+                <TextView
+                    android:id="@+id/tv_seal_no"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:text="Seal No" />
+            </LinearLayout>
+        </LinearLayout>
+    </LinearLayout>
+
+    <TextView
+        android:id="@+id/tv_size"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="size"
+        app:layout_constraintBottom_toBottomOf="@+id/iv_container_blank"
+        app:layout_constraintEnd_toEndOf="@+id/iv_container_blank"
+        app:layout_constraintStart_toStartOf="@+id/iv_container_blank"
+        app:layout_constraintTop_toTopOf="@+id/iv_container_blank" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 41 - 0
ApexDrivers/ratradefiling/src/main/res/layout/detail_cell_container_ca.xml

@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <TextView
+        android:id="@+id/tv_container_no"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="10dp"
+        android:layout_marginEnd="10dp"
+        android:text="Container#"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toEndOf="@+id/iv_container_blank"
+        app:layout_constraintTop_toTopOf="@+id/iv_container_blank" />
+
+    <ImageView
+        android:id="@+id/iv_container_blank"
+        android:layout_width="50dp"
+        android:layout_height="50dp"
+        android:layout_marginStart="13dp"
+        android:layout_marginTop="10dp"
+        android:layout_marginBottom="10dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:srcCompat="@drawable/action_setting" />
+
+    <TextView
+        android:id="@+id/tv_seal_no"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:text="seal no"
+        app:layout_constraintBottom_toBottomOf="@+id/iv_container_blank"
+        app:layout_constraintEnd_toEndOf="@+id/tv_container_no"
+        app:layout_constraintStart_toStartOf="@+id/tv_container_no" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 30 - 0
ApexDrivers/ratradefiling/src/main/res/layout/detail_cell_kv.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="horizontal" >
+
+    <TextView
+        android:id="@+id/tv_key"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_weight="1"
+        android:background="@drawable/border"
+        android:gravity="center_vertical"
+        android:padding="8dp"
+        android:text="Key"
+        android:textColor="#FF000000"
+        android:textStyle="bold" />
+
+    <TextView
+        android:id="@+id/tv_value"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:background="@drawable/border"
+        android:gravity="center_vertical"
+        android:padding="8dp"
+        android:text="Value"
+        android:textColor="#FF000000" />
+
+</LinearLayout>

+ 17 - 0
ApexDrivers/ratradefiling/src/main/res/layout/detail_cell_list.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" >
+
+    <TextView
+        android:id="@+id/tv_item"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentTop="true"
+        android:background="@drawable/border"
+        android:padding="8dp"
+        android:text="TextView"
+        android:textColor="#FF000000" />
+
+</RelativeLayout>

+ 8 - 0
ApexDrivers/ratradefiling/src/main/res/layout/detail_container_container.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+
+</LinearLayout>

+ 8 - 0
ApexDrivers/ratradefiling/src/main/res/layout/detail_container_container_ca.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+
+</LinearLayout>

+ 8 - 0
ApexDrivers/ratradefiling/src/main/res/layout/detail_container_kv.xml

@@ -0,0 +1,8 @@
+<?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="match_parent"
+    android:orientation="vertical" >
+    
+
+</LinearLayout>

+ 8 - 0
ApexDrivers/ratradefiling/src/main/res/layout/detail_container_list.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+
+</LinearLayout>

+ 124 - 0
ApexDrivers/ratradefiling/src/main/res/layout/detail_fragment.xml

@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+                android:background="#EFEFF4"
+    >
+
+    <LinearLayout
+        android:id="@+id/detail_linear"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical"
+        android:background="#EFEFF4"
+        >
+
+        <!--<com.usai.apex.ShipMap.ShipMap-->
+            <!--android:id="@+id/tracking_map"-->
+            <!--android:layout_width="match_parent"-->
+            <!--android:layout_height="0dp"-->
+            <!--android:layout_weight="1"-->
+            <!--android:layout_marginTop="2dp"-->
+            <!--android:layout_marginLeft="5dp"-->
+            <!--android:layout_marginBottom="2dp"-->
+            <!--android:layout_marginRight="5dp"-->
+            <!--&gt;-->
+
+        <!--</com.usai.apex.ShipMap.ShipMap>-->
+
+
+        <RelativeLayout
+            android:id="@+id/detail_list_container"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="2"
+            >
+
+
+            <ScrollView
+                android:id="@+id/sl_root"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:layout_alignParentLeft="true"
+                android:layout_alignParentTop="true"
+                android:fillViewport="true" >
+
+                <LinearLayout
+                    android:id="@+id/ll_root"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:background="@color/white"
+                    android:orientation="vertical">
+
+                    <TextView
+                        android:id="@+id/tv_empty"
+                        android:layout_width="fill_parent"
+                        android:layout_height="wrap_content"
+                        android:gravity="center_horizontal"
+                        android:text="No record in this page"
+                        android:textAppearance="?android:attr/textAppearanceMedium"
+                        android:visibility="gone" />
+
+                    <LinearLayout
+                        android:id="@+id/ll_refresh"
+                        android:layout_width="fill_parent"
+                        android:layout_height="wrap_content"
+
+                        android:background="#FFF5F5F5"
+                        android:gravity="center_horizontal"
+                        android:orientation="vertical"
+                        android:visibility="gone">
+
+                        <TextView
+                            android:id="@+id/tv_ver"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:gravity="center_horizontal"
+                            android:text="Failed to get records\nTap Refresh button to retry"
+                            android:textAppearance="?android:attr/textAppearanceLarge" />
+
+                        <Button
+                            android:id="@+id/btn_refresh"
+                            style="?android:attr/buttonBarButtonStyle"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_marginTop="10dp"
+                            android:drawableLeft="@android:drawable/ic_popup_sync"
+                            android:text="Refresh" />
+                    </LinearLayout>
+                </LinearLayout>
+            </ScrollView>
+
+
+        </RelativeLayout>
+
+    </LinearLayout>
+
+    <RelativeLayout
+        android:id="@+id/status"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:orientation="vertical"
+        android:visibility="gone" >
+
+        <TextView
+            android:id="@+id/status_message"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@+id/progressbar"
+            android:layout_centerHorizontal="true"
+            android:layout_marginBottom="16dp"
+            android:text="Loading..."
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+
+        <ProgressBar
+            android:id="@+id/progressbar"
+            style="?android:attr/progressBarStyleLarge"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerInParent="true"
+            android:layout_marginTop="41dp" />
+    </RelativeLayout>
+
+</RelativeLayout>

+ 35 - 0
ApexDrivers/ratradefiling/src/main/res/layout/detail_group_tag.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/constraintLayout"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@android:color/darker_gray">
+
+
+    <TextView
+        android:id="@+id/tv_group"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="4dp"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="4dp"
+        android:text="TextView"
+        android:textColor="@color/white"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        />
+
+
+<!--    <ImageView-->
+<!--        android:id="@+id/group_expand_indicator"-->
+<!--        android:layout_width="wrap_content"-->
+<!--        android:layout_height="wrap_content"-->
+<!--        android:contentDescription="TODO"-->
+<!--        android:src="@drawable/ic_expand_more"-->
+<!--        app:layout_constraintEnd_toEndOf="parent"-->
+<!--        app:layout_constraintTop_toTopOf="parent"/>-->
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 33 - 0
ApexDrivers/ratradefiling/src/main/res/menu/detail.xml

@@ -0,0 +1,33 @@
+<menu xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+<!-- 
+    <item
+        android:id="@+id/action_lockscroll"
+        android:checkable="true"
+        android:checked="true"
+        android:orderInCategory="100"
+        android:showAsAction="always"
+        android:title="@string/actoin_lock_scroll"/> -->
+    <item
+        android:id="@+id/action_addto_favorite"
+
+
+        android:orderInCategory="200"
+        android:title="@string/actoin_add_favorite"
+        app:showAsAction="never" />
+
+    <item
+        android:id="@+id/action_share_detail"
+
+        android:orderInCategory="200"
+        android:title="@string/actoin_share_detail"
+        app:showAsAction="never" />
+
+<!--    <item-->
+<!--        android:id="@+id/action_close"-->
+
+<!--        android:icon="@drawable/ic_exit"-->
+<!--        android:orderInCategory="0"-->
+<!--        android:title="Close"-->
+<!--        app:showAsAction="ifRoom" />-->
+</menu>