DetailFragment.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712
  1. package com.usai.apex;
  2. import java.io.File;
  3. import org.json.JSONException;
  4. import org.json.JSONObject;
  5. import com.usai.util.Network;
  6. import com.usai.util.commonUtil;
  7. import android.animation.Animator;
  8. import android.animation.AnimatorListenerAdapter;
  9. import android.app.AlertDialog;
  10. import android.app.Dialog;
  11. import android.app.DownloadManager;
  12. import android.app.AlertDialog.Builder;
  13. import android.app.DownloadManager.Request;
  14. import android.content.Context;
  15. import android.content.DialogInterface;
  16. import android.content.Intent;
  17. import android.graphics.Bitmap;
  18. import android.net.Uri;
  19. import android.os.AsyncTask;
  20. import android.os.Build;
  21. import android.os.Bundle;
  22. import android.os.Environment;
  23. import android.support.v4.app.Fragment;
  24. import android.text.Html;
  25. import android.util.Log;
  26. import android.util.SparseIntArray;
  27. import android.view.Gravity;
  28. import android.view.LayoutInflater;
  29. import android.view.View;
  30. import android.view.View.OnClickListener;
  31. import android.view.ViewGroup;
  32. import android.webkit.DownloadListener;
  33. import android.webkit.WebView;
  34. import android.webkit.WebViewClient;
  35. import android.widget.Button;
  36. import android.widget.LinearLayout;
  37. import android.widget.RelativeLayout;
  38. import android.widget.ScrollView;
  39. import android.widget.TextView;
  40. import android.widget.Toast;
  41. public class DetailFragment extends Fragment implements OnClickListener /*
  42. * ,
  43. * OnGestureListener
  44. */
  45. {
  46. private static final int REQUEST_LOGINACTIVITY = 1;
  47. // DataFragment mdataFragment;
  48. /* private GestureDetector mGestureDetector; */
  49. @Override
  50. public void onCreate(Bundle savedInstanceState)
  51. {
  52. // TODO Auto-generated method stub
  53. super.onCreate(savedInstanceState);
  54. }
  55. @Override
  56. public void onDestroyView()
  57. {
  58. Log.d("DetailFragment", "onDestroyView()");
  59. super.onDestroyView();
  60. }
  61. // public String get_content()
  62. // {
  63. // return fragment_content;
  64. // }
  65. LinearLayout ll_root;
  66. ScrollView sl_root;
  67. String mimeType = "text/html";
  68. private SearchTask m_task = null;
  69. SparseIntArray control = new SparseIntArray();
  70. // private TextView mStatusMessageView;
  71. private View mStatusView;
  72. String fragment_content = null;
  73. public void requestdata()
  74. {
  75. if (m_task != null)
  76. {
  77. return;
  78. }
  79. if (fragment_content != null)
  80. {
  81. LayoutInflater inflater = (LayoutInflater) ApexTrackingApplication
  82. .get_instance().getSystemService(
  83. Context.LAYOUT_INFLATER_SERVICE);
  84. init(fragment_content, inflater);
  85. return;
  86. }
  87. // if (mdataFragment.get_result() != null) {
  88. // LayoutInflater inflater = (LayoutInflater) ApexTrackingApplication
  89. // .get_instance().getSystemService(
  90. // Context.LAYOUT_INFLATER_SERVICE);
  91. // init(mdataFragment.get_result(), inflater);
  92. // }
  93. // if (fragment_content != null)
  94. // return;
  95. // mStatusMessageView.setText("Loading");
  96. showProgress(true);
  97. m_task = new SearchTask();
  98. m_task.execute();
  99. }
  100. public void set_content(String content)
  101. {
  102. fragment_content = content;
  103. }
  104. private void showProgress(final boolean show)
  105. {
  106. // On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow
  107. // for very easy animations. If available, use these APIs to fade-in
  108. // the progress spinner.
  109. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2)
  110. {
  111. int shortAnimTime = ApexTrackingApplication.get_instance()
  112. .getResources()
  113. .getInteger(android.R.integer.config_shortAnimTime);
  114. mStatusView.setVisibility(View.VISIBLE);
  115. mStatusView.animate().setDuration(shortAnimTime)
  116. .alpha(show ? 1 : 0)
  117. .setListener(new AnimatorListenerAdapter()
  118. {
  119. @Override
  120. public void onAnimationEnd(Animator animation)
  121. {
  122. mStatusView.setVisibility(show ? View.VISIBLE
  123. : View.INVISIBLE);
  124. }
  125. });
  126. ll_root.setVisibility(View.VISIBLE);
  127. ll_root.animate().setDuration(shortAnimTime).alpha(show ? 0 : 1)
  128. .setListener(new AnimatorListenerAdapter()
  129. {
  130. @Override
  131. public void onAnimationEnd(Animator animation)
  132. {
  133. ll_root.setVisibility(show ? View.INVISIBLE
  134. : View.VISIBLE);
  135. }
  136. });
  137. }
  138. else
  139. {
  140. // The ViewPropertyAnimator APIs are not available, so simply show
  141. // and hide the relevant UI components.
  142. mStatusView.setVisibility(show ? View.VISIBLE : View.INVISIBLE);
  143. ll_root.setVisibility(show ? View.INVISIBLE : View.VISIBLE);
  144. }
  145. }
  146. // @Override
  147. // public void onActivityCreated(Bundle savedInstanceState)
  148. // {
  149. // FragmentManager fm = getFragmentManager();
  150. //
  151. // // Check to see if we have retained the worker fragment.
  152. // mdataFragment = (DataFragment)fm.findFragmentByTag("work");
  153. //
  154. // // If not retained (or first time running), we need to create it.
  155. // if (mdataFragment == null) {
  156. // mdataFragment = new DataFragment();
  157. // // Tell it who it is working with.
  158. // mdataFragment.setTargetFragment(this, 0);
  159. // fm.beginTransaction().add(mdataFragment, "work").commit();
  160. // }
  161. // super.onActivityCreated(savedInstanceState);
  162. // }
  163. @Override
  164. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  165. Bundle savedInstanceState)
  166. {
  167. /* mGestureDetector = new GestureDetector(this); */
  168. View view = inflater.inflate(R.layout.detail_fragment, null);
  169. sl_root = (ScrollView) view.findViewById(R.id.sl_root);
  170. /*
  171. * sl_root.setOnTouchListener(new View.OnTouchListener() {
  172. *
  173. * @Override public boolean onTouch(View v, MotionEvent event) { return
  174. * mGestureDetector.onTouchEvent(event); } });
  175. */
  176. ll_root = (LinearLayout) view.findViewById(R.id.ll_root);
  177. mStatusView = view.findViewById(R.id.status);
  178. LinearLayout ll = (LinearLayout) view.findViewById(R.id.ll_refresh);
  179. Button btn_refresh = (Button) ll.findViewById(R.id.btn_refresh);
  180. btn_refresh.setOnClickListener(new View.OnClickListener()
  181. {
  182. @Override
  183. public void onClick(View v)
  184. {
  185. LinearLayout ll = (LinearLayout) ll_root
  186. .findViewById(R.id.ll_refresh);
  187. ll.setVisibility(View.GONE);
  188. requestdata();
  189. }
  190. });
  191. // FragmentManager fm = getFragmentManager();
  192. // List<Fragment> fragments = fm.getFragments();
  193. // if (fragments != null) {
  194. // Log.e("DetailFragment", "fragments count=" + fragments.size());
  195. // // for (int i = 0; i < fragments.size(); i++)
  196. // // Log.e("DetailFragment", "fragments name=" + fragments.size());
  197. //
  198. // }
  199. // // this.getFragmentManager();
  200. // String tag = getArguments().getString("module_name");
  201. // // Check to see if we have retained the worker fragment.
  202. // mdataFragment = (DataFragment) fm.findFragmentById(12345);
  203. //
  204. // // If not retained (or first time running), we need to create it.
  205. // if (mdataFragment == null) {
  206. // Log.e("dataFragment creaded ", "tag=data_" + tag);
  207. // mdataFragment = new DataFragment();
  208. // // Tell it who it is working with.
  209. // mdataFragment.setTargetFragment(this, 0);
  210. // fm.beginTransaction().add(12345,mdataFragment, "data+" +
  211. // tag).commit();
  212. // }
  213. requestdata();
  214. return view;
  215. }
  216. void init(String jstr, LayoutInflater inflater)
  217. {
  218. String TAG = "init@DetailFragment";
  219. Log.d(TAG, jstr);
  220. try
  221. {
  222. JSONObject jsonObj = new JSONObject(jstr);
  223. int group_count = jsonObj.getInt("count");
  224. if (group_count == 0)
  225. {
  226. TextView tv_empty = (TextView) ll_root
  227. .findViewById(R.id.tv_empty);
  228. tv_empty.setVisibility(View.VISIBLE);
  229. }
  230. for (int i = 0; i < group_count; i++)
  231. {
  232. // String key = (String) it.next();
  233. // if (key.equals("result"))
  234. // continue;
  235. JSONObject groupobj = jsonObj.getJSONObject("group" + i);
  236. View v = inflater.inflate(R.layout.group_tag, null);
  237. v.setOnClickListener(this);
  238. TextView tvgroup = (TextView) v.findViewById(R.id.tv_group);
  239. String group_name = groupobj.getString("_name");
  240. tvgroup.setText(group_name);
  241. v.setId(commonUtil.generateViewId());
  242. ll_root.addView(v);
  243. String grouptype = groupobj.getString("_type");
  244. // groupobj.remove("_type");
  245. if (grouptype.equals("mapping"))
  246. {
  247. LinearLayout mappingview = (LinearLayout) inflater.inflate(
  248. R.layout.key_mapping, null);
  249. mappingview.setId(commonUtil.generateViewId());
  250. control.put(v.getId(), mappingview.getId());
  251. ll_root.addView(mappingview);
  252. int map_count = groupobj.getInt("count");
  253. for (int j = 0; j < map_count; j++)
  254. {
  255. // String keygroup = (String) itgroup.next();
  256. JSONObject itemobj = groupobj.getJSONObject("item" + j);
  257. String key = (String) itemobj.keys().next();
  258. String val = itemobj.getString(key);
  259. LinearLayout mappingitem = (LinearLayout) inflater
  260. .inflate(R.layout.keymapping_item, null);
  261. TextView tvkey = (TextView) mappingitem
  262. .findViewById(R.id.tv_key);
  263. tvkey.setText(key);
  264. // tvkey.setBackgroundResource(R.drawable.detail_item);
  265. TextView tvval = (TextView) mappingitem
  266. .findViewById(R.id.tv_value);
  267. tvval.setText(Html.fromHtml(val));
  268. // tvval.setBackgroundResource(R.drawable.detail_item);
  269. mappingview.addView(mappingitem);
  270. }
  271. // Iterator itgroup = groupobj.keys();
  272. // while (itgroup.hasNext())
  273. // {
  274. //
  275. //
  276. // }
  277. }
  278. else if (grouptype.equals("table"))
  279. {
  280. String content = groupobj.getString("content");
  281. WebView wv;
  282. wv = (WebView) inflater.inflate(R.layout.web_content, null);
  283. wv.getSettings().setDefaultTextEncodingName("UTF-8");
  284. wv.setId(commonUtil.generateViewId());
  285. wv.setWebViewClient(new MyWebViewClient());
  286. wv.setDownloadListener(new DownloadListener()
  287. {
  288. @Override
  289. public void onDownloadStart(String url,
  290. String userAgent, String contentDisposition,
  291. String mimetype, long contentLength)
  292. {
  293. if(!commonUtil.localdirExist())
  294. {
  295. new AlertDialog.Builder(getActivity())
  296. .setIconAttribute(android.R.attr.alertDialogIcon)
  297. .setTitle(R.string.str_localdir_error)
  298. .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
  299. public void onClick(DialogInterface dialog, int whichButton) {
  300. /* User clicked OK so do some stuff */
  301. }
  302. })
  303. .create().show();
  304. return;
  305. }
  306. String filename = contentDisposition.replace("attachment;filename=\"", "");
  307. filename = filename.replace("\"", "");
  308. Log.d("WebView", "Download Action");
  309. Log.i("tag", "url=" + url);
  310. // Log.i("tag", "userAgent="+userAgent);
  311. // Log.i("tag",
  312. // "contentDisposition="+contentDisposition);
  313. // Log.i("tag", "mimetype="+mimetype);
  314. // Log.i("tag", "contentLength="+contentLength);
  315. // Uri uri = Uri.parse(url);
  316. // Intent intent = new Intent(Intent.ACTION_VIEW,
  317. // uri);
  318. // startActivity(intent);
  319. final DownloadManager downloadManager = (DownloadManager) ApexTrackingApplication
  320. .get_instance().getSystemService(
  321. Context.DOWNLOAD_SERVICE);
  322. Uri uri = Uri.parse(url);
  323. final Request request = new Request(uri);
  324. // 设置允许使用的网络类型,这里是移动网络和wifi都可以
  325. request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE
  326. | DownloadManager.Request.NETWORK_WIFI);
  327. request.setDestinationInExternalPublicDir("Apex Mobile",filename);
  328. // 禁止发出通知,既后台下载,如果要使用这一句必须声明一个权限:android.permission.DOWNLOAD_WITHOUT_NOTIFICATION
  329. // request.setShowRunningNotification(false);
  330. // 不显示下载界面
  331. request.setVisibleInDownloadsUi(false);
  332. request.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
  333. /*
  334. * 设置下载后文件存放的位置,如果sdcard不可用,那么设置这个将报错,
  335. * 因此最好不设置如果sdcard可用,下载后的文件 在/mnt/sdcard/Android/
  336. * data/packageName/files目录下面
  337. * ,如果sdcard不可用,设置了下面这个将报错,不设置,下载后的文件在/cache这个 目录下面
  338. */
  339. // request.setDestinationInExternalFilesDir(this,
  340. // null, "tar.apk");
  341. // getActivity();
  342. AlertDialog.Builder builder = new Builder(
  343. getActivity());
  344. builder.setMessage(getString(R.string.str_downloadmessage));
  345. builder.setTitle(getString(R.string.str_confirmdownload));
  346. builder.setPositiveButton(
  347. getString(R.string.str_download),
  348. new Dialog.OnClickListener()
  349. {
  350. @Override
  351. public void onClick(
  352. DialogInterface dialog,
  353. int which)
  354. {
  355. downloadManager.enqueue(request);
  356. dialog.dismiss();
  357. }
  358. });
  359. builder.setNegativeButton(
  360. getString(R.string.str_cancel),
  361. new Dialog.OnClickListener()
  362. {
  363. @Override
  364. public void onClick(
  365. DialogInterface dialog,
  366. int which)
  367. {
  368. dialog.dismiss();
  369. }
  370. });
  371. builder.create().show();
  372. }
  373. });
  374. control.put(v.getId(), wv.getId());
  375. wv.loadData(content, mimeType, null);
  376. // wv.setOnTouchListener(new OnTouchListener()
  377. // {
  378. // @Override
  379. // public boolean onTouch(View v, MotionEvent event)
  380. // {
  381. //
  382. // if (event.getAction() == MotionEvent.ACTION_UP)
  383. // sl_root.requestDisallowInterceptTouchEvent(false);
  384. // else
  385. // sl_root.requestDisallowInterceptTouchEvent(true);
  386. //
  387. // return false;
  388. // }
  389. // });
  390. ll_root.addView(wv);
  391. Log.d("table content", content);
  392. }
  393. if (grouptype.equals("list"))
  394. {
  395. LinearLayout listview = (LinearLayout) inflater.inflate(
  396. R.layout.list_content, null);
  397. listview.setId(commonUtil.generateViewId());
  398. control.put(v.getId(), listview.getId());
  399. ll_root.addView(listview);
  400. long list_count = groupobj.getInt("count");
  401. for (int j = 0; j < list_count; j++)
  402. {
  403. RelativeLayout listitem = (RelativeLayout) inflater
  404. .inflate(R.layout.list_item, null);
  405. TextView tvitem = (TextView) listitem
  406. .findViewById(R.id.tv_item);
  407. String val = groupobj.getString("line" + j);
  408. tvitem.setText(val);
  409. // tvitem.setBackgroundResource(R.drawable.detail_item);
  410. listitem.removeView(tvitem);
  411. listview.addView(tvitem);
  412. }
  413. // Iterator itgroup = groupobj.keys();
  414. // while (itgroup.hasNext())
  415. // {
  416. // String keygroup = (String) itgroup.next();
  417. //
  418. // }
  419. }
  420. // String value = obj.getString(key);
  421. // JSONArray array = obj.getJSONArray(key);
  422. // for(int i=0;i<array.length();i++){
  423. // JSONObject jsonobject = array.getJSONObject(i);
  424. // jsonobject.put("name", key);
  425. // jsonobject.put("exp", key+"="+jsonobject.getString("value"));
  426. // newArray.put(jsonobject);
  427. }
  428. // Iterator it = jsonObj.keys();
  429. // while (it.hasNext())
  430. // {
  431. //
  432. // }
  433. }
  434. catch (JSONException e)
  435. {
  436. // TODO Auto-generated catch block
  437. e.printStackTrace();
  438. }
  439. }
  440. @Override
  441. public void onClick(View v)
  442. {
  443. View view = ll_root.findViewById(control.get(v.getId()));
  444. if (view.getVisibility() == View.VISIBLE)
  445. view.setVisibility(View.GONE);
  446. else
  447. view.setVisibility(View.VISIBLE);
  448. }
  449. @Override
  450. public void onDestroy()
  451. {
  452. if (m_task != null)
  453. m_task.cancel(true);
  454. super.onDestroy();
  455. }
  456. @Override
  457. public void onActivityResult(int requestCode, int resultCode, Intent data)
  458. {
  459. ((DetailActivity) getActivity()).showlogin = false;
  460. super.onActivityResult(requestCode, resultCode, data);
  461. }
  462. @Override
  463. public void onDetach()
  464. {
  465. if (m_task != null)
  466. m_task.cancel(false);
  467. super.onDetach();
  468. }
  469. class SearchTask extends AsyncTask<Void, Void, Boolean>
  470. {
  471. int errorcode;
  472. @Override
  473. protected Boolean doInBackground(Void... params)
  474. {
  475. Log.d("SearchTask", "doInBackground");
  476. if (!Network.NetworkIsAvailable())
  477. {
  478. errorcode = Network.RESULT_NET_NOTAVAILABLE;
  479. return false;
  480. }
  481. String jstr = Network.get_detail(getArguments());
  482. if (jstr == null || jstr.length() <= 0)
  483. {
  484. // Log.d(TAG, "json is wrong");
  485. errorcode = Network.RESULT_NET_ERROR;
  486. return false;
  487. }
  488. // mdataFragment.put_result(jstr);
  489. fragment_content = jstr;
  490. DetailActivity activity = (DetailActivity) getActivity();
  491. activity.save_content(getArguments().getString("action_type"), jstr);
  492. errorcode = Network.RESULT_TRUE;
  493. return true;
  494. }
  495. @Override
  496. protected void onPostExecute(Boolean success)
  497. {
  498. Log.i("onPostExecute", "entry");
  499. m_task = null;
  500. showProgress(false);
  501. if (ApexTrackingApplication.get_authorization() == false)
  502. {
  503. if(((DetailActivity) getActivity()).showlogin == true)
  504. return;
  505. ((DetailActivity) getActivity()).showlogin = true;
  506. LinearLayout ll = (LinearLayout) ll_root
  507. .findViewById(R.id.ll_refresh);
  508. ll.setVisibility(View.VISIBLE);
  509. Toast toast = Toast.makeText(
  510. ApexTrackingApplication.get_instance(),
  511. getText(R.string.msg_net_passwordchangedremote) , Toast.LENGTH_LONG);
  512. toast.setGravity(Gravity.CENTER, 0, 0);
  513. toast.show();
  514. Intent i = new Intent();
  515. i.setClass(getActivity(), ApexActivity.class);
  516. startActivityForResult(i, REQUEST_LOGINACTIVITY);
  517. return;
  518. }
  519. switch (errorcode)
  520. {
  521. case Network.RESULT_NET_NOTAVAILABLE:
  522. {
  523. Toast toast = Toast.makeText(
  524. ApexTrackingApplication.get_instance(),
  525. getText(R.string.msg_connection_none),
  526. Toast.LENGTH_LONG);
  527. toast.setGravity(Gravity.CENTER, 0, 0);
  528. toast.show();
  529. break;
  530. }
  531. case Network.RESULT_NET_ERROR:
  532. {
  533. Toast toast = Toast.makeText(
  534. ApexTrackingApplication.get_instance(),
  535. getText(R.string.msg_net_error), Toast.LENGTH_LONG);
  536. toast.setGravity(Gravity.CENTER, 0, 0);
  537. toast.show();
  538. break;
  539. }
  540. case Network.RESULT_ERROR:
  541. // case Network.RESULT_RESPONSE_NULL:
  542. {
  543. Toast toast = Toast.makeText(
  544. ApexTrackingApplication.get_instance(),
  545. getText(R.string.msg_net_resulterror) + ":"
  546. + errorcode, Toast.LENGTH_LONG);
  547. toast.setGravity(Gravity.CENTER, 0, 0);
  548. toast.show();
  549. break;
  550. }
  551. default:
  552. break;
  553. }
  554. if (success)
  555. {
  556. LayoutInflater inflater = (LayoutInflater) ApexTrackingApplication
  557. .get_instance().getSystemService(
  558. Context.LAYOUT_INFLATER_SERVICE);
  559. init(fragment_content, inflater/*
  560. * getActivity().
  561. * getLayoutInflater()
  562. */);
  563. }
  564. else
  565. {
  566. LinearLayout ll = (LinearLayout) ll_root
  567. .findViewById(R.id.ll_refresh);
  568. ll.setVisibility(View.VISIBLE);
  569. }
  570. super.onPostExecute(success);
  571. }
  572. @Override
  573. protected void onCancelled()
  574. {
  575. m_task = null;
  576. showProgress(false);
  577. }
  578. }
  579. // public class DataFragment extends Fragment {
  580. //
  581. // String result = null;
  582. //
  583. // @Override
  584. // public void onCreate(Bundle savedInstanceState) {
  585. // setRetainInstance(true);
  586. // super.onCreate(savedInstanceState);
  587. // }
  588. //
  589. // public String get_result() {
  590. // return result;
  591. //
  592. // }
  593. //
  594. // public void put_result(String s) {
  595. // result = s;
  596. // }
  597. //
  598. // }
  599. public class MyWebViewClient extends WebViewClient
  600. {
  601. // 如果页面中链接,如果希望点击链接继续在当前browser中响应,
  602. // 而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。
  603. public boolean shouldOverviewUrlLoading(WebView view, String url)
  604. {
  605. // L.i("shouldOverviewUrlLoading");
  606. view.loadUrl(url);
  607. return true;
  608. }
  609. public void onPageStarted(WebView view, String url, Bitmap favicon)
  610. {
  611. // L.i("onPageStarted");
  612. // showProgress();
  613. }
  614. public void onPageFinished(WebView view, String url)
  615. {
  616. // L.i("onPageFinished");
  617. // closeProgress();
  618. }
  619. public void onReceivedError(WebView view, int errorCode,
  620. String description, String failingUrl)
  621. {
  622. // L.i("onReceivedError");
  623. // closeProgress();
  624. }
  625. }
  626. }