WebviewActivity.java 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162
  1. package epson.print;
  2. import android.annotation.SuppressLint;
  3. import android.app.AlertDialog;
  4. import android.app.Dialog;
  5. import android.content.Context;
  6. import android.content.DialogInterface;
  7. import android.content.Intent;
  8. import android.content.IntentFilter;
  9. import android.content.SharedPreferences;
  10. import android.graphics.Bitmap;
  11. import android.graphics.Canvas;
  12. import android.graphics.Rect;
  13. import android.net.Uri;
  14. import android.net.http.SslError;
  15. import android.os.AsyncTask;
  16. import android.os.Build;
  17. import android.os.Bundle;
  18. import android.os.Handler;
  19. import android.os.Message;
  20. import android.view.KeyEvent;
  21. import android.view.Menu;
  22. import android.view.MenuItem;
  23. import android.view.MotionEvent;
  24. import android.view.View;
  25. import android.view.ViewGroup;
  26. import android.view.WindowManager;
  27. import android.view.inputmethod.InputMethodManager;
  28. import android.webkit.SslErrorHandler;
  29. import android.webkit.WebChromeClient;
  30. import android.webkit.WebSettings;
  31. import android.webkit.WebView;
  32. import android.webkit.WebViewClient;
  33. import android.widget.Button;
  34. import android.widget.EditText;
  35. import android.widget.ImageButton;
  36. import android.widget.LinearLayout;
  37. import android.widget.Toast;
  38. import androidx.annotation.Nullable;
  39. import androidx.annotation.VisibleForTesting;
  40. import com.box.androidsdk.content.models.BoxFile;
  41. import com.box.androidsdk.content.requests.BoxRequestsMetadata;
  42. import com.epson.iprint.prtlogger.Analytics;
  43. import com.epson.iprint.prtlogger.NewLoggerController;
  44. import com.epson.iprint.prtlogger.PrintLog;
  45. import com.epson.iprint.shared.EpsoniPrintSharedActivity;
  46. import com.epson.mobilephone.common.license.LicenseTopActivity;
  47. import com.epson.mobilephone.common.wifidirect.NfcTagUtils;
  48. import com.epson.mobilephone.common.wifidirect.WiFiDirectManager;
  49. import java.io.File;
  50. import java.io.IOException;
  51. import java.lang.reflect.InvocationTargetException;
  52. import java.lang.reflect.Method;
  53. import java.util.ArrayList;
  54. import java.util.HashMap;
  55. import java.util.Map;
  56. import epson.common.ExternalFileUtils;
  57. import epson.common.IprintLicenseInfo;
  58. import epson.common.IprintUserSurveyInfo;
  59. import epson.common.Utils;
  60. import epson.print.Util.CommonMessage;
  61. import epson.print.Util.EPLog;
  62. public class WebviewActivity extends ActivityIACommon implements CommonDefine, View.OnClickListener, View.OnKeyListener {
  63. private static final int ACTION_PRINT_WEB = 2;
  64. private static final float FIRST_SCREEN_SCALE_VALUE = 0.0f;
  65. private static final int MESSAGE_WAIT_WEBVIEW_PROGRESS = 3;
  66. private static final int Menu_Add_Bookmark = 4;
  67. private static final int Menu_Back = 1;
  68. private static final int Menu_Bookmark = 6;
  69. private static final int Menu_History = 5;
  70. private static final int Menu_Next = 2;
  71. private static final int Menu_Print = 7;
  72. public static final String PARAMS_KEY_WEBVIEW_PRINT_LOG = "print_log";
  73. private static final int REQUEST_CODE_LICENSE_CHECK = 3;
  74. protected static final String TAG = "WebviewActivity";
  75. private static final int WEBVIEW_MENU_GROUP = 0;
  76. private final int ERROR_CODE = 1;
  77. private final int SDCARD_ERROR = 2;
  78. private ImageButton btnClearUrl;
  79. private boolean captureStart = false;
  80. private boolean checkImage = false;
  81. private boolean checkSharepage = false;
  82. private int countUrl;
  83. private String inURL = null;
  84. boolean isBuy = false;
  85. private boolean isCustomAction = false;
  86. boolean isFaq = false;
  87. boolean isInfo = false;
  88. private ArrayList<String> mAddImageView = new ArrayList<>();
  89. private boolean mCanClear;
  90. private boolean mCanRefresh;
  91. private boolean mCanStop;
  92. private Dialog mCustomPro;
  93. public AlertDialog mErrorDialog;
  94. private Integer[] mImageArray = new Integer[2];
  95. private ImageCreateThread mImageCreateThread;
  96. private Intent mIntent;
  97. boolean mIsBookmark;
  98. boolean mIsBookmarkEmpty;
  99. private boolean mIsFinish;
  100. boolean mIsFistLoad;
  101. boolean mIsLoadError = false;
  102. private MenuItem[] mItem = new MenuItem[6];
  103. private int mLastHeight = 0;
  104. private ArrayList<HashMap<String, String>> mListUrl = new ArrayList<>();
  105. private LinearLayout mLoadWebLayout;
  106. private volatile boolean mPreviewWebInterrupted;
  107. private PrintLog mPrintLog;
  108. IprintStrictMode.StrictModeInterface mStrictMode = IprintStrictMode.getStrictMode();
  109. private WebViewClient mWebClient = new WebViewClient() {
  110. public boolean shouldOverrideUrlLoading(WebView webView, String str) {
  111. return false;
  112. }
  113. public void onPageStarted(WebView webView, String str, Bitmap bitmap) {
  114. if (!checkSharepage) {
  115. mLoadWebLayout.setVisibility(View.VISIBLE);
  116. } else {
  117. showLoadingDialog();
  118. }
  119. WebviewActivity webviewActivity = WebviewActivity.this;
  120. setTextOnUrlEditText(fixUrl(str));
  121. boolean unused = mIsFinish = false;
  122. boolean unused2 = mCanStop = true;
  123. setClearButtonAppearance(0);
  124. boolean unused3 = mCanRefresh = false;
  125. invalidateOptionsMenu();
  126. }
  127. public void onPageFinished(WebView webView, String str) {
  128. boolean z;
  129. Map<String, ?> all;
  130. EPLog.d(TAG, "onPageFinished: " + str);
  131. boolean unused = mIsFinish = true;
  132. boolean unused2 = mCanRefresh = true;
  133. boolean unused3 = mCanStop = false;
  134. setClearButtonAppearance(1);
  135. if (!getTitle().toString().equals("Web page not available")) {
  136. String unused4 = strUrlIn = str;
  137. String unused5 = inURL = null;
  138. mIsLoadError = false;
  139. } else {
  140. mIsLoadError = true;
  141. }
  142. invalidateOptionsMenu();
  143. if (!isBuy && !isFaq && !isInfo) {
  144. mStrictMode.permitAll();
  145. WebviewActivity webviewActivity = WebviewActivity.this;
  146. SharedPreferences unused6 = statePre = getSharedPreferences("history", 0);
  147. if (mIsFistLoad || (all = statePre.getAll()) == null) {
  148. z = false;
  149. } else {
  150. mListUrl.clear();
  151. for (String next : all.keySet()) {
  152. HashMap hashMap = new HashMap();
  153. hashMap.put("key", next);
  154. hashMap.put(BoxRequestsMetadata.UpdateItemMetadata.BoxMetadataUpdateTask.VALUE, all.get(next).toString());
  155. mListUrl.add(hashMap);
  156. }
  157. WebviewActivity webviewActivity2 = WebviewActivity.this;
  158. int unused7 = webviewActivity2.countUrl = webviewActivity2.mListUrl.size();
  159. z = false;
  160. for (int i = 0; i < mListUrl.size(); i++) {
  161. if (str.equalsIgnoreCase((String) ((HashMap) mListUrl.get(i)).get(BoxRequestsMetadata.UpdateItemMetadata.BoxMetadataUpdateTask.VALUE))) {
  162. z = true;
  163. }
  164. }
  165. }
  166. if (!z || mIsFistLoad) {
  167. HashMap hashMap2 = new HashMap();
  168. access$1308(WebviewActivity.this);
  169. WebviewActivity webviewActivity3 = WebviewActivity.this;
  170. SharedPreferences.Editor unused8 = webviewActivity3.stateEditor = webviewActivity3.statePre.edit();
  171. stateEditor.putString(String.valueOf(countUrl), str);
  172. EPLog.i("Save countUrl " + countUrl + " : ", str);
  173. stateEditor.commit();
  174. hashMap2.put("key", String.valueOf(countUrl));
  175. hashMap2.put(BoxRequestsMetadata.UpdateItemMetadata.BoxMetadataUpdateTask.VALUE, str);
  176. mListUrl.add(hashMap2);
  177. mIsFistLoad = false;
  178. for (int i2 = 0; i2 < mListUrl.size(); i2++) {
  179. EPLog.i(((String) ((HashMap) mListUrl.get(i2)).get("key")) + " : ", (String) ((HashMap) mListUrl.get(i2)).get(BoxRequestsMetadata.UpdateItemMetadata.BoxMetadataUpdateTask.VALUE));
  180. }
  181. } else {
  182. mIsFistLoad = false;
  183. EPLog.i("Link: " + str, " already exist");
  184. }
  185. if (!str.startsWith("file://")) {
  186. WebviewActivity webviewActivity4 = WebviewActivity.this;
  187. SharedPreferences unused9 = webviewActivity4.statePre = webviewActivity4.getSharedPreferences(CommonDefine.SAVE_URL, 0);
  188. WebviewActivity webviewActivity5 = WebviewActivity.this;
  189. SharedPreferences.Editor unused10 = webviewActivity5.stateEditor = webviewActivity5.statePre.edit();
  190. stateEditor.putString(CommonDefine.SAVE_URL, str);
  191. stateEditor.commit();
  192. }
  193. mStrictMode.restoreStatus();
  194. }
  195. if (checkSharepage && !captureStart) {
  196. previewWeb();
  197. }
  198. }
  199. public void onReceivedError(WebView webView, int i, String str, String str2) {
  200. WebviewActivity webviewActivity = WebviewActivity.this;
  201. mErrorDialog = createDialog(str);
  202. try {
  203. mErrorDialog.show();
  204. } catch (WindowManager.BadTokenException e) {
  205. e.printStackTrace();
  206. }
  207. }
  208. public void onReceivedSslError(WebView webView, final SslErrorHandler sslErrorHandler, SslError sslError) {
  209. EPLog.d(TAG, "SSL error: " + sslError);
  210. if (!isFinishing()) {
  211. AlertDialog.Builder builder = new AlertDialog.Builder(WebviewActivity.this);
  212. builder.setIcon(R.drawable.ic_action_warning);
  213. builder.setTitle("SSL error");
  214. builder.setMessage(trasrateSslError(sslError.getPrimaryError())).setCancelable(false).setPositiveButton(R.string.str_continue, new DialogInterface.OnClickListener() {
  215. public void onClick(DialogInterface dialogInterface, int i) {
  216. sslErrorHandler.proceed();
  217. }
  218. }).setNegativeButton(getResources().getString(R.string.str_cancel), new DialogInterface.OnClickListener() {
  219. public void onClick(DialogInterface dialogInterface, int i) {
  220. sslErrorHandler.cancel();
  221. if (checkSharepage) {
  222. boolean unused = checkSharepage = false;
  223. setResult(0);
  224. finish();
  225. }
  226. }
  227. }).show();
  228. }
  229. }
  230. private String trasrateSslError(int i) {
  231. StringBuffer stringBuffer = new StringBuffer("primaryError = ");
  232. switch (i) {
  233. case 0:
  234. stringBuffer.append("SSL_NOTYETVALID");
  235. break;
  236. case 1:
  237. stringBuffer.append("SSL_EXPIRED");
  238. break;
  239. case 2:
  240. stringBuffer.append("SSL_IDMISMATCH");
  241. break;
  242. case 3:
  243. stringBuffer.append("SSL_UNTRUSTED");
  244. break;
  245. case 4:
  246. stringBuffer.append("SSL_DATE_INVALID ");
  247. break;
  248. case 5:
  249. stringBuffer.append("SSL_INVALID");
  250. break;
  251. default:
  252. stringBuffer.append(i);
  253. break;
  254. }
  255. return stringBuffer.toString();
  256. }
  257. public void onScaleChanged(WebView webView, float f, float f2) {
  258. super.onScaleChanged(webView, f, f2);
  259. float unused = onScaleChangedCurrent = f2;
  260. }
  261. };
  262. private WebChromeClient mWebCromClient = new WebChromeClient() {
  263. public void onProgressChanged(WebView webView, int i) {
  264. if (i == 100) {
  265. mLoadWebLayout.setVisibility(View.GONE);
  266. }
  267. }
  268. public void onReceivedTitle(WebView webView, String str) {
  269. super.onReceivedTitle(webView, str);
  270. if (!isBuy && !isFaq && !isInfo) {
  271. setTitle(str);
  272. }
  273. }
  274. };
  275. private WebView mWebview;
  276. Handler myHandler = new Handler() {
  277. public void handleMessage(Message message) {
  278. switch (message.what) {
  279. case 1:
  280. Toast.makeText(getBaseContext(), getString(R.string.str_err_msg_out_of_memory_title), 1).show();
  281. return;
  282. case 2:
  283. try {
  284. Utils.makeMessageBox(this, getString(R.string.str_err_msg_out_of_memory_title), getString(R.string.str_ok)).show();
  285. return;
  286. } catch (Exception e) {
  287. e.printStackTrace();
  288. return;
  289. }
  290. case 3:
  291. if (!mPreviewWebInterrupted) {
  292. float access$2000 = getScaleValue();
  293. if (mWebview.getProgress() < 100) {
  294. myHandler.sendEmptyMessageDelayed(3, 2000);
  295. return;
  296. } else if (mLastHeight == 0 || mLastHeight < ((((float) mWebview.getContentHeight()) * access$2000))) {
  297. WebviewActivity webviewActivity = WebviewActivity.this;
  298. int unused = mLastHeight = (((float) mWebview.getContentHeight()) * access$2000);
  299. myHandler.sendEmptyMessageDelayed(3, 5000);
  300. EPLog.d(TAG, "Waiting not change mLastHeight = " + mLastHeight);
  301. return;
  302. } else {
  303. startPreviewWebThread();
  304. return;
  305. }
  306. } else {
  307. return;
  308. }
  309. default:
  310. return;
  311. }
  312. }
  313. };
  314. private float onScaleChangedCurrent = 0.0f;
  315. private AsyncTask<Void, Void, Void> previewImageTask;
  316. private SharedPreferences.Editor stateEditor;
  317. private SharedPreferences statePre;
  318. private String strUrlIn;
  319. private EditText teInurl;
  320. interface InteruptChecker {
  321. boolean check();
  322. }
  323. static /* synthetic */ int access$1308(WebviewActivity webviewActivity) {
  324. int i = countUrl;
  325. countUrl = i + 1;
  326. return i;
  327. }
  328. @SuppressLint({"NewApi", "SetJavaScriptEnabled"})
  329. public void onCreate(Bundle bundle) {
  330. super.onCreate(bundle);
  331. NewLoggerController.stopLoggerIfNotAgreed(this);
  332. if (Build.VERSION.SDK_INT >= 21) {
  333. WebView.enableSlowWholeDocumentDraw();
  334. }
  335. setContentView(R.layout.main_webview);
  336. setActionBar(R.string.web_btn_label, true);
  337. mAddImageView.clear();
  338. ExternalFileUtils.getInstance(this).initTempViewDir();
  339. ExternalFileUtils.getInstance(this).initPrintDir();
  340. mWebview = (WebView) findViewById(R.id.web_engine);
  341. mLoadWebLayout = (LinearLayout) findViewById(R.id.layout_loading);
  342. teInurl = (EditText) findViewById(R.id.te_url);
  343. teInurl.setOnKeyListener(this);
  344. teInurl.setOnTouchListener(new View.OnTouchListener() {
  345. public boolean onTouch(View view, MotionEvent motionEvent) {
  346. setClearButtonAppearance(0);
  347. boolean unused = mCanRefresh = false;
  348. boolean unused2 = mCanClear = true;
  349. return false;
  350. }
  351. });
  352. mImageArray[0] = Integer.valueOf(R.drawable.clear_text);
  353. mImageArray[1] = Integer.valueOf(R.drawable.reload);
  354. btnClearUrl = (ImageButton) findViewById(R.id.btn_clear_url);
  355. setClearButtonAppearance(0);
  356. btnClearUrl.setOnClickListener(this);
  357. WebSettings settings = mWebview.getSettings();
  358. settings.setJavaScriptEnabled(true);
  359. settings.setBuiltInZoomControls(true);
  360. settings.setUseWideViewPort(true);
  361. settings.setSupportZoom(true);
  362. settings.setLoadWithOverviewMode(true);
  363. settings.setBlockNetworkLoads(false);
  364. settings.setBlockNetworkImage(false);
  365. try {
  366. Method method = mWebview.getClass().getMethod("setIsCacheDrawBitmap", new Class[]{Boolean.TYPE});
  367. if (method != null) {
  368. method.invoke(mWebview, new Object[]{false});
  369. mWebview.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);
  370. }
  371. } catch (NoSuchMethodException unused) {
  372. } catch (IllegalAccessException unused2) {
  373. } catch (InvocationTargetException unused3) {
  374. }
  375. mWebview.requestFocus(130);
  376. mWebview.setWebViewClient(mWebClient);
  377. mWebview.setWebChromeClient(mWebCromClient);
  378. mWebview.setOnTouchListener(new View.OnTouchListener() {
  379. public boolean onTouch(View view, MotionEvent motionEvent) {
  380. teInurl.clearFocus();
  381. mWebview.requestFocus();
  382. return false;
  383. }
  384. });
  385. mErrorDialog = new AlertDialog.Builder(this).create();
  386. if (bundle == null) {
  387. startLicenseCheckActivity();
  388. } else if (!IprintLicenseInfo.isAgreedCurrentVersion(getApplicationContext())) {
  389. finish();
  390. }
  391. }
  392. private void startLicenseCheckActivity() {
  393. IprintLicenseInfo.beforeLicenseCheck(getApplicationContext());
  394. startActivityForResult(LicenseTopActivity.getStartIntent(getApplicationContext(), new IprintLicenseInfo(), new IprintUserSurveyInfo()), 3);
  395. }
  396. private void onInit() {
  397. configureFromIntent(getIntent());
  398. }
  399. /* access modifiers changed from: package-private */
  400. @VisibleForTesting
  401. public void configureFromIntent(Intent intent) {
  402. String action = intent.getAction();
  403. boolean equals = "android.intent.action.SEND".equals(action);
  404. boolean equals2 = EpsoniPrintSharedActivity.ACTION_WEB_PRINT.equals(action);
  405. if (equals || equals2) {
  406. setPrintLogForExternalApp(intent);
  407. isCustomAction = equals2;
  408. inURL = intent.getStringExtra("android.intent.extra.TEXT");
  409. if (Utils.checkMimeType(inURL, "image/jpeg")) {
  410. checkImage = true;
  411. previewImage();
  412. } else {
  413. loadUrl(inURL);
  414. checkSharepage = !equals;
  415. }
  416. String str = inURL;
  417. if (str != null) {
  418. strUrlIn = str;
  419. } else {
  420. strUrlIn = "";
  421. }
  422. } else {
  423. Bundle extras = intent.getExtras();
  424. if (extras != null) {
  425. inURL = intent.getStringExtra("android.intent.extra.TEXT");
  426. setTitle("Text");
  427. }
  428. String str2 = inURL;
  429. if (str2 == null) {
  430. mStrictMode.permitAll();
  431. statePre = getSharedPreferences(CommonDefine.SAVE_URL, 0);
  432. strUrlIn = statePre.getString(CommonDefine.SAVE_URL, "");
  433. mStrictMode.restoreStatus();
  434. if (strUrlIn.equals("")) {
  435. mIsFistLoad = true;
  436. setTextOnUrlEditText(CommonDefine.HTTP_PREFIX);
  437. setClearButtonAppearance(1);
  438. }
  439. if (extras != null) {
  440. inURL = (String) extras.get(CommonDefine.EXTRA_URL);
  441. isFaq = extras.getBoolean("is_faq");
  442. isBuy = extras.getBoolean("is_buy");
  443. isInfo = extras.getBoolean("is_info");
  444. }
  445. } else {
  446. checkSharepage = true;
  447. strUrlIn = str2;
  448. }
  449. String str3 = inURL;
  450. if (str3 != null) {
  451. loadUrl(str3);
  452. } else {
  453. loadUrl(strUrlIn);
  454. }
  455. registerForContextMenu(mWebview);
  456. }
  457. }
  458. /* access modifiers changed from: package-private */
  459. @VisibleForTesting
  460. public void loadUrl(String str) {
  461. WiFiDirectManager.setPriorityToSimpleAP(this, false);
  462. mWebview.loadUrl(str);
  463. }
  464. /* access modifiers changed from: package-private */
  465. @VisibleForTesting
  466. public void setClearButtonAppearance(int i) {
  467. btnClearUrl.setBackgroundResource(mImageArray[i].intValue());
  468. }
  469. /* access modifiers changed from: package-private */
  470. @VisibleForTesting
  471. public void setTextOnUrlEditText(String str) {
  472. teInurl.setText(str);
  473. }
  474. /* access modifiers changed from: package-private */
  475. @VisibleForTesting
  476. public void setPrintLogForExternalApp(@Nullable Intent intent) {
  477. if (intent != null) {
  478. try {
  479. mPrintLog = (PrintLog) intent.getSerializableExtra("print_log");
  480. } catch (ClassCastException unused) {
  481. }
  482. }
  483. if (mPrintLog == null) {
  484. mPrintLog = new PrintLog();
  485. }
  486. if (mPrintLog.uiRoute <= 0) {
  487. mPrintLog.uiRoute = PrintLog.PRINT_SOURCE_EXTERNAL_APP_WEB;
  488. }
  489. if (mPrintLog.callerPackage == null) {
  490. mPrintLog.callerPackage = getCallingPackage();
  491. }
  492. }
  493. private void loadInputUrl() {
  494. hideSoftKeyboard();
  495. String str = strUrlIn;
  496. if (str != null && str.compareTo("") != 0) {
  497. if (strUrlIn.equals(mWebview.getUrl())) {
  498. strUrlIn = fixUrl(strUrlIn);
  499. setTextOnUrlEditText(strUrlIn);
  500. mWebview.reload();
  501. return;
  502. }
  503. strUrlIn = fixUrl(strUrlIn);
  504. setTextOnUrlEditText(strUrlIn);
  505. loadUrl(strUrlIn);
  506. }
  507. }
  508. private void hideSoftKeyboard() {
  509. ((InputMethodManager) getSystemService("input_method")).hideSoftInputFromWindow(teInurl.getWindowToken(), 0);
  510. }
  511. public void onClick(View view) {
  512. EPLog.i(TAG, "onCLick()");
  513. if (view.getId() == R.id.btn_clear_url) {
  514. if (mCanRefresh) {
  515. mWebview.reload();
  516. } else if (mCanStop) {
  517. mWebview.stopLoading();
  518. mLoadWebLayout.setVisibility(View.GONE);
  519. } else if (mCanClear) {
  520. setTextOnUrlEditText("");
  521. }
  522. }
  523. }
  524. public boolean onKey(View view, int i, KeyEvent keyEvent) {
  525. if (keyEvent.getAction() == 0 && i == 66) {
  526. mIsFinish = false;
  527. setClearButtonAppearance(0);
  528. strUrlIn = teInurl.getText().toString();
  529. loadInputUrl();
  530. return true;
  531. } else if (keyEvent.getAction() != 0 || i != 4 || !this.checkSharepage) {
  532. return false;
  533. } else {
  534. finish();
  535. return true;
  536. }
  537. }
  538. protected void onPause() {
  539. super.onPause();
  540. NfcTagUtils.disableForegroundDispatch(this);
  541. }
  542. protected void onResume() {
  543. super.onResume();
  544. NfcTagUtils.enableForegroundDispatch(this, (IntentFilter[]) null, (String[][]) null);
  545. }
  546. protected void onNewIntent(Intent intent) {
  547. super.onNewIntent(intent);
  548. CommonMessage.showInvalidPrintMessageIfEpsonNfcPrinter(this, intent);
  549. }
  550. public boolean onCreateOptionsMenu(Menu menu) {
  551. getMenuInflater().inflate(R.menu.print_option_menu, menu);
  552. return true;
  553. }
  554. public boolean onPrepareOptionsMenu(Menu menu) {
  555. menu.findItem(R.id.go_back).setEnabled(canGoBack() && mIsFinish);
  556. menu.findItem(R.id.go_next).setEnabled(canGoForward() && mIsFinish);
  557. menu.findItem(R.id.print_option).setEnabled(mIsFinish && !mIsLoadError);
  558. if (checkSharepage) {
  559. menu.setGroupVisible(0, false);
  560. }
  561. return true;
  562. }
  563. public boolean onOptionsItemSelected(MenuItem menuItem) {
  564. int itemId = menuItem.getItemId();
  565. if (itemId != R.id.print_option) {
  566. switch (itemId) {
  567. case R.id.go_back /*2131231074*/:
  568. String linkOfIndex = getLinkOfIndex(getIndexOfLink(strUrlIn) - 1);
  569. EPLog.i("Comeback to : ", linkOfIndex);
  570. mWebview.loadUrl(linkOfIndex);
  571. break;
  572. case R.id.go_next /*2131231075*/:
  573. String linkOfIndex2 = getLinkOfIndex(getIndexOfLink(strUrlIn) + 1);
  574. EPLog.i("Forward to : ", linkOfIndex2);
  575. mWebview.loadUrl(linkOfIndex2);
  576. break;
  577. }
  578. } else {
  579. previewWeb();
  580. }
  581. return super.onOptionsItemSelected(menuItem);
  582. }
  583. /* access modifiers changed from: private */
  584. /* JADX WARNING: Removed duplicated region for block: B:11:0x0017 */
  585. /* Code decompiled incorrectly, please refer to instructions dump. */
  586. public static void saveJPG(Bitmap r2, String r3) throws IOException {
  587. /*
  588. r0 = 0
  589. java.io.FileOutputStream r1 = new java.io.FileOutputStream // Catch:{ all -> 0x0014 }
  590. r1.<init>(r3) // Catch:{ all -> 0x0014 }
  591. android.graphics.Bitmap$CompressFormat r3 = android.graphics.Bitmap.CompressFormat.JPEG // Catch:{ all -> 0x0011 }
  592. r0 = 100
  593. r2.compress(r3, r0, r1) // Catch:{ all -> 0x0011 }
  594. r1.close()
  595. return
  596. L_0x0011:
  597. r2 = move-exception
  598. r0 = r1
  599. goto L_0x0015
  600. L_0x0014:
  601. r2 = move-exception
  602. L_0x0015:
  603. if (r0 == 0) goto L_0x001a
  604. r0.close()
  605. L_0x001a:
  606. throw r2
  607. */
  608. throw new UnsupportedOperationException("Method not decompiled: epson.print.saveJPG(android.graphics.Bitmap, java.lang.String):void");
  609. }
  610. public void showLoadingDialog() {
  611. if (mCustomPro == null) {
  612. mCustomPro = new CustomProDialog(this, R.style.AppTheme_Translucent, R.layout.preview_open_dialog);
  613. mCustomPro.setCancelable(false);
  614. mCustomPro.setCanceledOnTouchOutside(false);
  615. }
  616. try {
  617. mCustomPro.show();
  618. } catch (WindowManager.BadTokenException e) {
  619. e.printStackTrace();
  620. }
  621. }
  622. public void cancelShowingDialog() {
  623. Dialog dialog = mCustomPro;
  624. if (dialog != null && dialog.isShowing()) {
  625. mCustomPro.dismiss();
  626. }
  627. }
  628. private class CustomProDialog extends Dialog {
  629. private int mLayoutId;
  630. public CustomProDialog(Context context, int i, int i2) {
  631. super(context, i);
  632. mLayoutId = i2;
  633. }
  634. protected void onCreate(Bundle bundle) {
  635. super.onCreate(bundle);
  636. requestWindowFeature(1);
  637. View inflate = getLayoutInflater().inflate(mLayoutId, (ViewGroup) null);
  638. ((Button) inflate.findViewById(R.id.close_btn)).setOnClickListener(new View.OnClickListener() {
  639. public void onClick(View view) {
  640. if (checkSharepage) {
  641. mWebview.stopLoading();
  642. finish();
  643. }
  644. stopDoBackGroundThread();
  645. }
  646. });
  647. setContentView(inflate);
  648. }
  649. public void onBackPressed() {
  650. stopDoBackGroundThread();
  651. }
  652. }
  653. protected void stopDoBackGroundThread() {
  654. cancelPreviewWeb();
  655. AsyncTask<Void, Void, Void> asyncTask = previewImageTask;
  656. if (asyncTask != null) {
  657. asyncTask.cancel(true);
  658. }
  659. ImageCreateThread imageCreateThread = mImageCreateThread;
  660. if (imageCreateThread != null) {
  661. imageCreateThread.interrupt();
  662. }
  663. }
  664. protected void onDestroy() {
  665. super.onDestroy();
  666. stopDoBackGroundThread();
  667. previewImageTask = null;
  668. mImageCreateThread = null;
  669. Dialog dialog = mCustomPro;
  670. if (dialog != null) {
  671. dialog.dismiss();
  672. }
  673. mCustomPro = null;
  674. AlertDialog alertDialog = mErrorDialog;
  675. if (alertDialog != null) {
  676. alertDialog.dismiss();
  677. }
  678. mErrorDialog = null;
  679. }
  680. private void startPrintActivity() {
  681. Intent intent = new Intent(this, ActivityPrintWeb.class);
  682. intent.putStringArrayListExtra("print_web", mAddImageView);
  683. intent.putExtra("print_url", strUrlIn);
  684. intent.putExtra("from_customaction", isCustomAction);
  685. intent.putExtra("print_log", getPrintLog());
  686. startActivityForResult(intent, 2);
  687. cancelShowingDialog();
  688. if (checkSharepage && !this.isCustomAction) {
  689. finish();
  690. }
  691. }
  692. private PrintLog getPrintLog() {
  693. PrintLog printLog = mPrintLog;
  694. if (printLog == null) {
  695. printLog = new PrintLog();
  696. }
  697. if (printLog.uiRoute <= 0) {
  698. printLog.uiRoute = 3;
  699. }
  700. if (printLog.originalFileExtension == null) {
  701. printLog.originalFileExtension = Analytics.EXTENSION_STRING_WEB;
  702. }
  703. return printLog;
  704. }
  705. class ImageFileCreator {
  706. static final int A4_360DPI_HEIGHT = 4209;
  707. static final int A4_360DPI_WIDTH = 2976;
  708. static final double A4_ASPECT_RATIO = 1.4143145161290323d;
  709. final int[] RATE_FROME_360DPI = {2, 3, 4};
  710. Bitmap mBitmap;
  711. double mExRate;
  712. Rect mPictureSize;
  713. ImageFileCreator() {
  714. }
  715. public void setPicture(Rect rect) {
  716. mPictureSize = rect;
  717. }
  718. private double[] getExRateCand(int i) {
  719. double[] dArr = new double[this.RATE_FROME_360DPI.length];
  720. int i2 = 0;
  721. while (true) {
  722. int[] iArr = RATE_FROME_360DPI;
  723. if (i2 >= iArr.length) {
  724. return dArr;
  725. }
  726. dArr[i2] = 2976.0d / ((i) * (iArr[i2]));
  727. i2++;
  728. }
  729. }
  730. public boolean prepareBitmap() {
  731. int width = mPictureSize.width();
  732. double[] exRateCand = getExRateCand(width);
  733. int i = 90;
  734. double d = 1.0d;
  735. Bitmap bitmap = null;
  736. for (int i2 = 0; i2 < exRateCand.length && bitmap == null; i2++) {
  737. d = exRateCand[i2];
  738. int i3 = ((width) * d);
  739. int i4 = ((i3) * A4_ASPECT_RATIO);
  740. try {
  741. System.gc();
  742. bitmap = Bitmap.createBitmap(i3, i4, Bitmap.Config.ARGB_8888);
  743. i = 360 / RATE_FROME_360DPI[i2];
  744. } catch (OutOfMemoryError unused) {
  745. }
  746. }
  747. if (bitmap == null) {
  748. return false;
  749. }
  750. bitmap.setDensity(i);
  751. mBitmap = bitmap;
  752. mExRate = d;
  753. EPLog.i(TAG, "expand => " + d);
  754. return true;
  755. }
  756. public boolean createImageFile(final WebView webView, ArrayList<String> arrayList, InteruptChecker interuptChecker) throws IOException {
  757. double d = mExRate;
  758. final Object obj = new Object();
  759. final Canvas canvas = new Canvas(mBitmap);
  760. float f = (float) d;
  761. canvas.scale(f, f);
  762. int width = ((mPictureSize.width()) * A4_ASPECT_RATIO);
  763. int height = mPictureSize.height();
  764. int i = 1;
  765. while (height > 0) {
  766. if (interuptChecker.check()) {
  767. return false;
  768. }
  769. String tempViewDir = ExternalFileUtils.getInstance(this).getTempViewDir();
  770. String path = new File(tempViewDir, "multi_cut_" + i + ".jpg").getPath();
  771. canvas.drawRGB(255, 255, 255);
  772. synchronized (obj) {
  773. runOnUiThread(new Runnable() {
  774. public void run() {
  775. synchronized (obj) {
  776. webView.draw(canvas);
  777. obj.notifyAll();
  778. EPLog.v(TAG, "webView.draw() finish");
  779. }
  780. }
  781. });
  782. try {
  783. EPLog.v(TAG, "webView.draw() wait page = " + i);
  784. obj.wait();
  785. } catch (InterruptedException e) {
  786. e.printStackTrace();
  787. }
  788. }
  789. saveJPG(mBitmap, path);
  790. arrayList.add(path);
  791. height -= width;
  792. canvas.translate(0.0f, -((float) width));
  793. i++;
  794. }
  795. return true;
  796. }
  797. public void freeMemory() {
  798. Bitmap bitmap = mBitmap;
  799. if (bitmap != null) {
  800. bitmap.recycle();
  801. mBitmap = null;
  802. }
  803. }
  804. }
  805. private void previewWeb() {
  806. mPreviewWebInterrupted = false;
  807. captureStart = true;
  808. showLoadingDialog();
  809. if (checkSharepage) {
  810. myHandler.sendEmptyMessage(3);
  811. } else {
  812. startPreviewWebThread();
  813. }
  814. }
  815. private void cancelPreviewWeb() {
  816. mPreviewWebInterrupted = true;
  817. myHandler.removeMessages(3);
  818. ImageCreateThread imageCreateThread = mImageCreateThread;
  819. if (imageCreateThread != null) {
  820. imageCreateThread.interrupt();
  821. }
  822. cancelShowingDialog();
  823. }
  824. private void startPreviewWebThread() {
  825. mAddImageView.clear();
  826. float scaleValue = getScaleValue();
  827. Rect rect = new Rect(0, 0, mWebview.getWidth(), (((float) mWebview.getContentHeight()) * scaleValue));
  828. EPLog.i(TAG, "picture Rect = " + rect.toString() + " currentScale = " + scaleValue);
  829. if (rect.width() > 0 && rect.height() > 0) {
  830. mImageCreateThread = new ImageCreateThread();
  831. mImageCreateThread.setPicture(rect);
  832. mImageCreateThread.start();
  833. } else if (!isFinishing()) {
  834. cancelShowingDialog();
  835. mErrorDialog = createDialog(getString(R.string.not_support_format));
  836. try {
  837. mErrorDialog.show();
  838. } catch (WindowManager.BadTokenException unused) {
  839. }
  840. }
  841. }
  842. private float getScaleValue() {
  843. float f = onScaleChangedCurrent;
  844. return f == 0.0f ? getResources().getDisplayMetrics().density : f;
  845. }
  846. class ImageCreateThread extends Thread implements InteruptChecker {
  847. private ImageFileCreator mImageFileCreator;
  848. private Rect mPicture;
  849. ImageCreateThread() {
  850. }
  851. public ImageCreateThread setPicture(Rect rect) {
  852. mPicture = rect;
  853. return this;
  854. }
  855. public void run() {
  856. if (!mPreviewWebInterrupted) {
  857. ExternalFileUtils.getInstance(this).initTempViewDir();
  858. mImageFileCreator = new ImageFileCreator();
  859. mImageFileCreator.setPicture(mPicture);
  860. if (!mImageFileCreator.prepareBitmap()) {
  861. ExternalFileUtils.getInstance(this).initTempViewDir();
  862. cancelShowingDialog();
  863. myHandler.sendEmptyMessage(1);
  864. finish();
  865. } else if (isInterrupted()) {
  866. freeLargeMem();
  867. ExternalFileUtils.getInstance(this).initTempViewDir();
  868. cancelShowingDialog();
  869. } else {
  870. try {
  871. if (!mImageFileCreator.createImageFile(mWebview, mAddImageView, this) || isInterrupted()) {
  872. ExternalFileUtils.getInstance(this).initTempViewDir();
  873. cancelShowingDialog();
  874. return;
  875. }
  876. startPrintActivity();
  877. } catch (IOException e) {
  878. e.printStackTrace();
  879. ExternalFileUtils.getInstance(this).initTempViewDir();
  880. cancelShowingDialog();
  881. myHandler.sendEmptyMessage(2);
  882. } finally {
  883. freeLargeMem();
  884. }
  885. }
  886. }
  887. }
  888. private void freeLargeMem() {
  889. ImageFileCreator imageFileCreator = mImageFileCreator;
  890. if (imageFileCreator != null) {
  891. imageFileCreator.freeMemory();
  892. mImageFileCreator = null;
  893. }
  894. mPicture = null;
  895. }
  896. public boolean check() {
  897. return isInterrupted();
  898. }
  899. }
  900. private AlertDialog createDialog(final String str) {
  901. AlertDialog create = new AlertDialog.Builder(this).create();
  902. create.setCancelable(false);
  903. create.setIcon(R.drawable.ic_action_warning);
  904. create.setTitle(R.string.unknow_error_title);
  905. create.setMessage(str);
  906. create.setButton(-1, getString(R.string.str_ok), new DialogInterface.OnClickListener() {
  907. public void onClick(DialogInterface dialogInterface, int i) {
  908. if (str.equals(getString(R.string.str_no_sdcard))) {
  909. cancelShowingDialog();
  910. if (checkImage || checkSharepage) {
  911. finish();
  912. }
  913. }
  914. }
  915. });
  916. create.setOnKeyListener(new DialogInterface.OnKeyListener() {
  917. public boolean onKey(DialogInterface dialogInterface, int i, KeyEvent keyEvent) {
  918. return keyEvent.getKeyCode() == 84;
  919. }
  920. });
  921. return create;
  922. }
  923. /* access modifiers changed from: package-private */
  924. @VisibleForTesting
  925. public void previewImage() {
  926. if (isMediaMounted()) {
  927. previewImageTask = new AsyncTask<Void, Void, Void>() {
  928. ArrayList<String> imagePath = new ArrayList<>();
  929. protected void onPreExecute() {
  930. super.onPreExecute();
  931. showLoadingDialog();
  932. }
  933. protected Void doInBackground(Void... voidArr) {
  934. Uri parse = Uri.parse(inURL);
  935. if (String.valueOf(BoxFile.TYPE).equals(parse.getScheme())) {
  936. imagePath.add(parse.getPath());
  937. } else {
  938. String lastPathSegment = parse.getLastPathSegment();
  939. String downloadDir = ExternalFileUtils.getInstance(this).getDownloadDir();
  940. ExternalFileUtils.getInstance(this).initDownloadDir();
  941. if (isCancelled()) {
  942. return null;
  943. }
  944. epson.print.Util.Utils.getInstance();
  945. epson.print.Util.Utils.mUtils.downloadFile(inURL, downloadDir, lastPathSegment, this);
  946. imagePath.add(new File(downloadDir, lastPathSegment).getPath());
  947. }
  948. return null;
  949. }
  950. protected void onPostExecute(Void voidR) {
  951. EPLog.i(TAG, "previewImage::onPostExecute() Share image: " + imagePath.toString());
  952. WebviewActivity webviewActivity = this;
  953. Intent unused = mIntent = new Intent(webviewActivity, ActivityViewImageSelect.class);
  954. mIntent.putExtra(ActivityViewImageSelect.LIST_ALBUM, imagePath);
  955. mIntent.putExtra(CommonDefine.STYPE, true);
  956. mIntent.putExtra("print_log", getPrintLog());
  957. WebviewActivity webviewActivity2 = this;
  958. webviewActivity2.startActivity(webviewActivity2.mIntent);
  959. finish();
  960. }
  961. protected void onCancelled() {
  962. EPLog.i(TAG, "Cancel: OK");
  963. if (checkImage) {
  964. finish();
  965. }
  966. }
  967. };
  968. previewImageTask.execute(new Void[0]);
  969. return;
  970. }
  971. mErrorDialog = createDialog(getString(R.string.str_no_sdcard));
  972. try {
  973. findViewById(R.id.webview).setVisibility(4);
  974. mErrorDialog.show();
  975. } catch (WindowManager.BadTokenException e) {
  976. e.printStackTrace();
  977. }
  978. }
  979. /* access modifiers changed from: package-private */
  980. @VisibleForTesting
  981. public boolean isMediaMounted() {
  982. return Utils.isMediaMounted();
  983. }
  984. private String fixUrl(String str) {
  985. int indexOf = str.indexOf(58);
  986. String str2 = str;
  987. boolean z = true;
  988. for (int i = 0; i < indexOf; i++) {
  989. char charAt = str2.charAt(i);
  990. if (!Character.isLetter(charAt)) {
  991. break;
  992. }
  993. z &= Character.isLowerCase(charAt);
  994. if (i == indexOf - 1 && !z) {
  995. str2 = str2.substring(0, indexOf).toLowerCase() + str2.substring(indexOf);
  996. }
  997. }
  998. if (str2.startsWith(CommonDefine.HTTP_PREFIX) || str2.startsWith("https://")) {
  999. return str2;
  1000. }
  1001. if (str2.startsWith("http:") || str2.startsWith("https:")) {
  1002. if (str2.startsWith("http:/") || str2.startsWith("https:/")) {
  1003. str2 = str2.replaceFirst(CommonDefine.SLASH, "//");
  1004. } else {
  1005. str2 = str2.replaceFirst(":", "://");
  1006. }
  1007. }
  1008. if (!str2.startsWith(CommonDefine.HTTP_PREFIX) && !str2.startsWith("file://")) {
  1009. str2 = CommonDefine.HTTP_PREFIX + str2;
  1010. }
  1011. return str2.toLowerCase();
  1012. }
  1013. public void onBackPressed() {
  1014. AlertDialog alertDialog = mErrorDialog;
  1015. if (alertDialog != null && alertDialog.isShowing()) {
  1016. try {
  1017. mErrorDialog.dismiss();
  1018. } catch (IllegalArgumentException e) {
  1019. e.printStackTrace();
  1020. }
  1021. }
  1022. ImageCreateThread imageCreateThread = mImageCreateThread;
  1023. if (imageCreateThread != null) {
  1024. imageCreateThread.interrupt();
  1025. }
  1026. if (isBuy || isFaq || isInfo) {
  1027. finish();
  1028. } else if (isCustomAction) {
  1029. setResult(0);
  1030. finish();
  1031. } else {
  1032. setResult(-1, getIntent());
  1033. finish();
  1034. }
  1035. }
  1036. protected void onActivityResult(int i, int i2, Intent intent) {
  1037. EPLog.d("onActivityResult : requestCode = ", String.valueOf(i));
  1038. super.onActivityResult(i, i2, intent);
  1039. switch (i) {
  1040. case 2:
  1041. EPLog.d("onActivityResult : ACTION_PRINT_WEB = ", String.valueOf(isCustomAction));
  1042. mAddImageView.clear();
  1043. ExternalFileUtils.getInstance(this).initTempViewDir();
  1044. if (isCustomAction) {
  1045. EPLog.d("onActivityResult : resultCode = ", String.valueOf(i2));
  1046. setResult(i2);
  1047. finish();
  1048. return;
  1049. }
  1050. return;
  1051. case 3:
  1052. if (i2 != -1) {
  1053. finish();
  1054. return;
  1055. } else {
  1056. onInit();
  1057. return;
  1058. }
  1059. default:
  1060. return;
  1061. }
  1062. }
  1063. private int getIndexOfLink(String str) {
  1064. int i = 0;
  1065. for (int i2 = 0; i2 < mListUrl.size(); i2++) {
  1066. if (str.equalsIgnoreCase((String) mListUrl.get(i2).get(BoxRequestsMetadata.UpdateItemMetadata.BoxMetadataUpdateTask.VALUE))) {
  1067. i = Integer.parseInt((String) mListUrl.get(i2).get("key"));
  1068. }
  1069. }
  1070. return i;
  1071. }
  1072. private String getLinkOfIndex(int i) {
  1073. String str = "";
  1074. for (int i2 = 0; i2 < mListUrl.size(); i2++) {
  1075. if (Integer.parseInt((String) mListUrl.get(i2).get("key")) == i) {
  1076. str = (String) mListUrl.get(i2).get(BoxRequestsMetadata.UpdateItemMetadata.BoxMetadataUpdateTask.VALUE);
  1077. }
  1078. }
  1079. return str;
  1080. }
  1081. private boolean canGoBack() {
  1082. return getIndexOfLink(strUrlIn) > 1;
  1083. }
  1084. private boolean canGoForward() {
  1085. return getIndexOfLink(strUrlIn) < mListUrl.size();
  1086. }
  1087. }