MenudataAdapter.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. package epson.print;
  2. import android.content.Context;
  3. import android.content.pm.PackageInfo;
  4. import android.content.pm.PackageManager;
  5. import android.content.res.AssetManager;
  6. import android.content.res.Resources;
  7. import com.box.androidsdk.content.BoxConstants;
  8. import com.fasterxml.jackson.core.JsonFactory;
  9. import org.json.JSONArray;
  10. import org.json.JSONException;
  11. import org.json.JSONObject;
  12. import java.io.BufferedReader;
  13. import java.io.IOException;
  14. import java.io.InputStream;
  15. import java.io.InputStreamReader;
  16. import java.util.ArrayList;
  17. import java.util.Iterator;
  18. import epson.print.Util.EPLog;
  19. public class MenudataAdapter {
  20. ArrayList<MenuDataApp> apps;
  21. ArrayList<MenuDataCapability> capabilities;
  22. MenuDataCapability defaultCapability = null;
  23. ArrayList<MenuDataFunction> functions;
  24. JSONObject json;
  25. private Context mContext;
  26. public void setContext(Context context) {
  27. mContext = context;
  28. }
  29. public void parseJSONFile() {
  30. EPLog.i("parseJSONFile", "Start");
  31. json = getJSONFile();
  32. apps = parseApps(this.json);
  33. functions = parseFunctions(this.json);
  34. defaultCapability = parseDefaultCapabilities(this.json);
  35. capabilities = parseCapabilities(this.json);
  36. for (int i = 0; i < apps.size(); i++) {
  37. for (int i2 = 0; i2 < functions.size(); i2++) {
  38. if (this.apps.get(i).appID.equalsIgnoreCase(this.functions.get(i2).appID)) {
  39. apps.get(i).appfunctions.add(this.functions.get(i2));
  40. }
  41. }
  42. }
  43. EPLog.i("parseJSONFile", CommonDefine.f335OK);
  44. }
  45. public JSONObject getJSONFile() {
  46. InputStream inputStream;
  47. EPLog.i("getJSONFile", CommonDefine.f335OK);
  48. AssetManager assets = mContext.getResources().getAssets();
  49. String str = "";
  50. try {
  51. if (IprintApplication.isReleaseUnlimited()) {
  52. inputStream = assets.open("menudata/MenuDataUnlimited.json");
  53. } else {
  54. inputStream = assets.open("menudata/MenuData.json");
  55. }
  56. EPLog.i("jsonRead", "jsonObject" + inputStream);
  57. BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
  58. StringBuilder sb = new StringBuilder();
  59. while (true) {
  60. try {
  61. String readLine = bufferedReader.readLine();
  62. if (readLine == null) {
  63. break;
  64. }
  65. sb.append(readLine);
  66. } catch (IOException unused) {
  67. EPLog.i("jsonRead", "error occur");
  68. }
  69. }
  70. str = sb.toString();
  71. inputStream.close();
  72. try {
  73. return new JSONObject(str);
  74. } catch (JSONException unused2) {
  75. EPLog.i("jsonRead", "error occur");
  76. return null;
  77. }
  78. } catch (IOException unused3) {
  79. EPLog.i("jsonRead", "cannot read");
  80. return null;
  81. }
  82. }
  83. public ArrayList<MenuDataApp> parseApps(JSONObject jSONObject) {
  84. EPLog.i("parseApps", "Start");
  85. ArrayList<MenuDataApp> arrayList = new ArrayList<>();
  86. try {
  87. JSONArray jSONArray = jSONObject.getJSONArray("Apps");
  88. for (int i = 0; i < jSONArray.length(); i++) {
  89. MenuDataApp menuDataApp = new MenuDataApp();
  90. JSONObject jSONObject2 = jSONArray.getJSONObject(i);
  91. menuDataApp.appID = jSONObject2.getString("AppID");
  92. menuDataApp.name = jSONObject2.getString("Name");
  93. menuDataApp.appDescription = jSONObject2.getString("Description");
  94. menuDataApp.googlePlayURL = jSONObject2.getString("GooglePlayURL");
  95. menuDataApp.PackageName = jSONObject2.getString("AndroidPackageName");
  96. menuDataApp.ClassName = jSONObject2.getString("AndroidClassName");
  97. menuDataApp.icon = jSONObject2.getString("AndroidIconName");
  98. menuDataApp.isRemoteAvailable = jSONObject2.getBoolean("IsRemoteAvailable");
  99. menuDataApp.appfunctions = new ArrayList<>();
  100. arrayList.add(menuDataApp);
  101. }
  102. } catch (JSONException unused) {
  103. EPLog.i(JsonFactory.FORMAT_NAME_JSON, "cannnot parseApps");
  104. }
  105. EPLog.i("parseApps", CommonDefine.f335OK);
  106. return arrayList;
  107. }
  108. public ArrayList<MenuDataFunction> parseFunctions(JSONObject jSONObject) {
  109. EPLog.i("parseFunctions", "Start");
  110. ArrayList<MenuDataFunction> arrayList = new ArrayList<>();
  111. try {
  112. JSONArray jSONArray = jSONObject.getJSONArray("Functions");
  113. for (int i = 0; i < jSONArray.length(); i++) {
  114. MenuDataFunction menuDataFunction = new MenuDataFunction();
  115. JSONObject jSONObject2 = jSONArray.getJSONObject(i);
  116. menuDataFunction.appID = jSONObject2.getString("AppID");
  117. menuDataFunction.functionID = jSONObject2.getString("FunctionID");
  118. menuDataFunction.name = jSONObject2.getString("Name");
  119. menuDataFunction.PackageName = jSONObject2.getString("AndroidPackageName");
  120. menuDataFunction.ClassName = jSONObject2.getString("AndroidClassName");
  121. menuDataFunction.icon = jSONObject2.getString("AndroidIconName");
  122. menuDataFunction.isRemoteAvailable = Boolean.valueOf(jSONObject2.getBoolean("IsRemoteAvailable"));
  123. menuDataFunction.key = jSONObject2.getString("AndroidKey");
  124. arrayList.add(menuDataFunction);
  125. }
  126. } catch (JSONException unused) {
  127. EPLog.i(JsonFactory.FORMAT_NAME_JSON, "cannnot parseFunctions");
  128. }
  129. EPLog.i("parseFunctions", CommonDefine.f335OK);
  130. return arrayList;
  131. }
  132. public ArrayList<MenuDataCapability> parseCapabilities(JSONObject jSONObject) {
  133. EPLog.i("parseCapabilities", "Start");
  134. ArrayList<MenuDataCapability> arrayList = new ArrayList<>();
  135. try {
  136. if (this.defaultCapability == null) {
  137. EPLog.i("parseCapabilities", "not set defaultcapability");
  138. return null;
  139. }
  140. JSONArray jSONArray = jSONObject.getJSONArray("Capabilities");
  141. for (int i = 0; i < jSONArray.length(); i++) {
  142. MenuDataCapability menuDataCapability = new MenuDataCapability();
  143. JSONObject jSONObject2 = jSONArray.getJSONObject(i);
  144. menuDataCapability.deviceIDs = JSONArrayToString(jSONObject2.getJSONArray("DeviceIDs"));
  145. menuDataCapability.isPrinter = Boolean.valueOf(jSONObject2.getBoolean("IsPrinter"));
  146. menuDataCapability.isScanner = Boolean.valueOf(jSONObject2.getBoolean("IsScanner"));
  147. menuDataCapability.appIDs.addAll(this.defaultCapability.appIDs);
  148. menuDataCapability.functionIDs.addAll(this.defaultCapability.functionIDs);
  149. menuDataCapability.appIDs.addAll(FilterApps(JSONArrayToString(jSONObject2.getJSONArray("AppIDs"))));
  150. menuDataCapability.functionIDs.addAll(FilterFunctions(JSONArrayToString(jSONObject2.getJSONArray("FunctionIDs"))));
  151. menuDataCapability.functionIDs = setExcludedlist(menuDataCapability.functionIDs, getExcludedlist(jSONObject2));
  152. arrayList.add(menuDataCapability);
  153. }
  154. EPLog.i("parseCapabilities", CommonDefine.f335OK);
  155. return arrayList;
  156. } catch (JSONException unused) {
  157. EPLog.i(JsonFactory.FORMAT_NAME_JSON, "cannnot parseCapabilities");
  158. return null;
  159. }
  160. }
  161. public MenuDataCapability parseDefaultCapabilities(JSONObject jSONObject) {
  162. EPLog.i("parseDefaultCapabilities", "Start");
  163. MenuDataCapability menuDataCapability = new MenuDataCapability();
  164. try {
  165. JSONObject jSONObject2 = jSONObject.getJSONObject("DefaultCapability");
  166. menuDataCapability.deviceIDs = JSONArrayToString(jSONObject2.getJSONArray("DeviceIDs"));
  167. menuDataCapability.isPrinter = Boolean.valueOf(jSONObject2.getBoolean("IsPrinter"));
  168. menuDataCapability.isScanner = Boolean.valueOf(jSONObject2.getBoolean("IsScanner"));
  169. menuDataCapability.appIDs = FilterApps(JSONArrayToString(jSONObject2.getJSONArray("AppIDs")));
  170. menuDataCapability.functionIDs = FilterFunctions(JSONArrayToString(jSONObject2.getJSONArray("FunctionIDs")));
  171. EPLog.i("parseDefaultCapabilities", CommonDefine.f335OK);
  172. return menuDataCapability;
  173. } catch (JSONException unused) {
  174. EPLog.i(JsonFactory.FORMAT_NAME_JSON, "cannnot parseDefaultCapabilities");
  175. return null;
  176. }
  177. }
  178. private ArrayList<String> getExcludedlist(JSONObject jSONObject) {
  179. try {
  180. return FilterFunctions(JSONArrayToString(jSONObject.getJSONArray("FunctionIDsExcluded")));
  181. } catch (JSONException unused) {
  182. return null;
  183. }
  184. }
  185. private ArrayList<String> setExcludedlist(ArrayList<String> arrayList, ArrayList<String> arrayList2) {
  186. ArrayList<String> arrayList3 = new ArrayList<>();
  187. Iterator<String> it = arrayList.iterator();
  188. while (it.hasNext()) {
  189. String next = it.next();
  190. if (arrayList2 == null || !arrayList2.contains(next)) {
  191. arrayList3.add(next);
  192. }
  193. }
  194. return arrayList3;
  195. }
  196. private ArrayList<String> FilterApps(ArrayList<String> arrayList) {
  197. ArrayList<String> arrayList2 = new ArrayList<>();
  198. Iterator<MenuDataApp> it = apps.iterator();
  199. while (it.hasNext()) {
  200. MenuDataApp next = it.next();
  201. if (arrayList.contains(next.appID)) {
  202. arrayList2.add(next.appID);
  203. }
  204. }
  205. return arrayList2;
  206. }
  207. private ArrayList<String> FilterFunctions(ArrayList<String> arrayList) {
  208. ArrayList<String> arrayList2 = new ArrayList<>();
  209. Iterator<MenuDataFunction> it = functions.iterator();
  210. while (it.hasNext()) {
  211. MenuDataFunction next = it.next();
  212. if (arrayList.contains(next.functionID)) {
  213. arrayList2.add(next.functionID);
  214. }
  215. }
  216. return arrayList2;
  217. }
  218. public ArrayList<String> JSONArrayToString(JSONArray jSONArray) {
  219. ArrayList<String> arrayList = new ArrayList<>();
  220. for (int i = 0; i < jSONArray.length(); i++) {
  221. try {
  222. arrayList.add((String) jSONArray.get(i));
  223. } catch (JSONException unused) {
  224. EPLog.i(JsonFactory.FORMAT_NAME_JSON, "cannot JSONArrayToString");
  225. }
  226. }
  227. return arrayList;
  228. }
  229. public ArrayList<IconTextArrayItem> MenuListfordeviceID(String str, int i, Context context) {
  230. int i2 = i;
  231. ArrayList<IconTextArrayItem> arrayList = new ArrayList<>();
  232. MenuDataCapability capabilityForDeviceID = capabilityForDeviceID(str);
  233. Resources resources = context.getResources();
  234. ArrayList<MenuDataApp> appsForAppIDs = appsForAppIDs(capabilityForDeviceID.appIDs);
  235. for (int i3 = 0; i3 < capabilityForDeviceID.appIDs.size(); i3++) {
  236. if (appsForAppIDs.get(i3).isInstalled(mContext).booleanValue()) {
  237. MenuDataCapability capabilityForDeviceID2 = capabilityForDeviceID(str);
  238. if ("iPrint".equals(appsForAppIDs.get(i3).appID)) {
  239. Iterator<MenuDataFunction> it = appsForAppIDs.get(i3).appfunctions.iterator();
  240. while (it.hasNext()) {
  241. MenuDataFunction next = it.next();
  242. if (capabilityForDeviceID2.functionIDs.contains(next.functionID)) {
  243. IconTextArrayItem iconTextArrayItem = new IconTextArrayItem();
  244. iconTextArrayItem.appId = functionForFunctionID(next.functionID).appID;
  245. iconTextArrayItem.menuId = resources.getIdentifier(functionForFunctionID(next.functionID).name, "string", context.getPackageName());
  246. iconTextArrayItem.ClassName = functionForFunctionID(next.functionID).ClassName;
  247. iconTextArrayItem.PackageName = functionForFunctionID(next.functionID).PackageName;
  248. iconTextArrayItem.isRemoteAvailable = functionForFunctionID(next.functionID).isRemoteAvailable.booleanValue();
  249. iconTextArrayItem.isInstall = true;
  250. iconTextArrayItem.key = functionForFunctionID(next.functionID).key;
  251. String str2 = functionForFunctionID(next.functionID).icon;
  252. iconTextArrayItem.showMenu = true;
  253. if (i2 == 2 && iconTextArrayItem.appId.equalsIgnoreCase("iPrint") && !iconTextArrayItem.isRemoteAvailable) {
  254. str2 = functionForFunctionID(next.functionID).icon.concat("_disabled");
  255. iconTextArrayItem.showMenu = false;
  256. }
  257. iconTextArrayItem.imageID = resources.getIdentifier(str2, "drawable", context.getPackageName());
  258. arrayList.add(iconTextArrayItem);
  259. }
  260. }
  261. } else {
  262. IconTextArrayItem iconTextArrayItem2 = new IconTextArrayItem();
  263. iconTextArrayItem2.appId = appsForAppIDs.get(i3).appID;
  264. String str3 = appsForAppIDs.get(i3).icon;
  265. iconTextArrayItem2.menuId = resources.getIdentifier(appsForAppIDs.get(i3).name, "string", context.getPackageName());
  266. iconTextArrayItem2.ClassName = appsForAppIDs.get(i3).ClassName;
  267. iconTextArrayItem2.PackageName = appsForAppIDs.get(i3).PackageName;
  268. iconTextArrayItem2.isRemoteAvailable = appsForAppIDs.get(i3).isRemoteAvailable;
  269. iconTextArrayItem2.isInstall = true;
  270. String replace = str3.replace("_notinstalled", "");
  271. iconTextArrayItem2.key = BoxConstants.ROOT_FOLDER_ID;
  272. if ((i2 == 3 || i2 == 2) && (iconTextArrayItem2.appId.equalsIgnoreCase("Creative") || iconTextArrayItem2.appId.equalsIgnoreCase("3DFramePrint") || iconTextArrayItem2.appId.equalsIgnoreCase("CameraCopy") || iconTextArrayItem2.appId.equalsIgnoreCase("MultiRollPrint") || iconTextArrayItem2.appId.equalsIgnoreCase("CardPrint") || iconTextArrayItem2.appId.equalsIgnoreCase("Nenga"))) {
  273. replace = replace.concat("_disabled");
  274. iconTextArrayItem2.showMenu = false;
  275. }
  276. iconTextArrayItem2.imageID = resources.getIdentifier(replace, "drawable", context.getPackageName());
  277. arrayList.add(iconTextArrayItem2);
  278. }
  279. } else {
  280. IconTextArrayItem iconTextArrayItem3 = new IconTextArrayItem();
  281. iconTextArrayItem3.appId = appsForAppIDs.get(i3).appID;
  282. iconTextArrayItem3.imageID = resources.getIdentifier(appsForAppIDs.get(i3).icon, "drawable", context.getPackageName());
  283. iconTextArrayItem3.menuId = resources.getIdentifier(appsForAppIDs.get(i3).name, "string", context.getPackageName());
  284. iconTextArrayItem3.ClassName = appsForAppIDs.get(i3).ClassName;
  285. iconTextArrayItem3.PackageName = appsForAppIDs.get(i3).PackageName;
  286. iconTextArrayItem3.isRemoteAvailable = appsForAppIDs.get(i3).isRemoteAvailable;
  287. iconTextArrayItem3.AppDiscId = resources.getIdentifier(appsForAppIDs.get(i3).appDescription, "string", context.getPackageName());
  288. iconTextArrayItem3.isInstall = false;
  289. iconTextArrayItem3.googleStoreUrl = appsForAppIDs.get(i3).googlePlayURL;
  290. arrayList.add(iconTextArrayItem3);
  291. }
  292. }
  293. return arrayList;
  294. }
  295. public MenuDataCapability capabilityForDeviceID(String str) {
  296. MenuDataCapability menuDataCapability;
  297. EPLog.i("capabilityForSerialHeader", CommonDefine.f335OK);
  298. int i = 0;
  299. while (true) {
  300. if (i >= capabilities.size()) {
  301. menuDataCapability = null;
  302. break;
  303. } else if (this.capabilities.get(i).deviceIDs.contains(str)) {
  304. menuDataCapability = capabilities.get(i);
  305. break;
  306. } else {
  307. i++;
  308. }
  309. }
  310. return menuDataCapability == null ? defaultCapability : menuDataCapability;
  311. }
  312. public ArrayList<MenuDataApp> appsForAppIDs(ArrayList<String> arrayList) {
  313. EPLog.i("appsForAppIDs", CommonDefine.f335OK);
  314. ArrayList<MenuDataApp> arrayList2 = new ArrayList<>();
  315. for (int i = 0; i < apps.size(); i++) {
  316. if (arrayList.contains(this.apps.get(i).appID)) {
  317. arrayList2.add(this.apps.get(i));
  318. }
  319. }
  320. return arrayList2;
  321. }
  322. public ArrayList<MenuDataFunction> functionsForFunctionIDs(ArrayList<String> arrayList) {
  323. EPLog.i("functionsForFunctionIDs", CommonDefine.f335OK);
  324. ArrayList<MenuDataFunction> arrayList2 = new ArrayList<>();
  325. for (int i = 0; i < functions.size(); i++) {
  326. if (arrayList.contains(this.functions.get(i).functionID)) {
  327. arrayList2.add(this.functions.get(i));
  328. }
  329. }
  330. return arrayList2;
  331. }
  332. public MenuDataFunction functionForFunctionID(String str) {
  333. for (int i = 0; i < functions.size(); i++) {
  334. if (this.functions.get(i).functionID.equalsIgnoreCase(str)) {
  335. return functions.get(i);
  336. }
  337. }
  338. return null;
  339. }
  340. class MenuDataApp {
  341. private static final int VERSIONCODE_3D = 30100;
  342. private static final int VERSIONCODE_CREATIVE = 60000;
  343. private static final int VERSIONCODE_MEISHI = 1001000;
  344. private static final int VERSIONCODE_MROOL = 2020000;
  345. public static final int VERSIONCODE_NENGA = 201900000;
  346. String ClassName;
  347. String PackageName;
  348. String appDescription;
  349. String appID;
  350. ArrayList<MenuDataFunction> appfunctions;
  351. String googlePlayURL;
  352. String icon;
  353. Boolean isInstalled;
  354. boolean isRemoteAvailable;
  355. String name;
  356. MenuDataApp() {
  357. }
  358. public Boolean isInstalled(Context context) {
  359. EPLog.i("isInstalled", CommonDefine.f335OK);
  360. try {
  361. PackageInfo packageInfo = context.getPackageManager().getPackageInfo(this.PackageName, 128);
  362. if ("Creative".equals(this.appID) && 60000 > packageInfo.versionCode) {
  363. return false;
  364. }
  365. if ("3DFramePrint".equals(this.appID) && VERSIONCODE_3D > packageInfo.versionCode) {
  366. return false;
  367. }
  368. if ("CardPrint".equals(this.appID) && VERSIONCODE_MEISHI > packageInfo.versionCode) {
  369. return false;
  370. }
  371. if (!"MultiRollPrint".equals(this.appID) || VERSIONCODE_MROOL <= packageInfo.versionCode) {
  372. return true;
  373. }
  374. return false;
  375. } catch (PackageManager.NameNotFoundException unused) {
  376. return false;
  377. }
  378. }
  379. }
  380. class MenuDataFunction {
  381. String ClassName;
  382. String PackageName;
  383. String appID;
  384. String functionID;
  385. String icon;
  386. Boolean isInstalled;
  387. Boolean isRemoteAvailable;
  388. String key;
  389. String name;
  390. MenuDataFunction() {
  391. }
  392. }
  393. class MenuDataCapability {
  394. ArrayList<String> appIDs = new ArrayList<>();
  395. ArrayList<String> deviceIDs = new ArrayList<>();
  396. ArrayList<String> functionIDs = new ArrayList<>();
  397. Boolean isPrinter = false;
  398. Boolean isScanner = false;
  399. MenuDataCapability() {
  400. }
  401. }
  402. }