/* * Copyright (C) 2014 The AppCan Open Source Project. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package org.zywx.wbpalmstar.engine; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.graphics.Bitmap; import android.graphics.drawable.ColorDrawable; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.Process; import android.text.TextUtils; import android.view.KeyEvent; import android.view.Surface; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.FrameLayout; import com.slidingmenu.lib.SlidingMenu; import org.json.JSONException; import org.json.JSONObject; import org.zywx.wbpalmstar.acedes.ACEDes; import org.zywx.wbpalmstar.base.BDebug; import org.zywx.wbpalmstar.base.ResoureFinder; import org.zywx.wbpalmstar.base.WebViewSdkCompat; import org.zywx.wbpalmstar.base.util.ConfigXmlUtil; import org.zywx.wbpalmstar.engine.external.Compat; import org.zywx.wbpalmstar.engine.universalex.EUExBase; import org.zywx.wbpalmstar.engine.universalex.EUExCallback; import org.zywx.wbpalmstar.engine.universalex.EUExEventListener; import org.zywx.wbpalmstar.engine.universalex.EUExUtil; import org.zywx.wbpalmstar.engine.universalex.ThirdPluginMgr; import org.zywx.wbpalmstar.engine.universalex.ThirdPluginObject; import org.zywx.wbpalmstar.platform.push.PushDataInfo; import org.zywx.wbpalmstar.platform.push.PushRecieveMsgReceiver; import org.zywx.wbpalmstar.platform.push.report.PushReportConstants; import org.zywx.wbpalmstar.widgetone.dataservice.WWidgetData; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Method; import java.util.Iterator; import java.util.Map; import java.util.Set; public final class EBrowserActivity extends BaseActivity { public static final String KET_WIDGET_DATE="key_widget_data"; public static final int F_OAUTH_CODE = 100001; public final static int FILECHOOSER_RESULTCODE = 233; public final static String APP_TYPE_NOT_START = "0"; public final static String APP_TYPE_START_BACKGROUND = "1"; public final static String APP_TYPE_START_FORGROUND= "2"; private EBrowser mBrowser; private boolean mKeyDown; private EHandler mEHandler; private EBrowserAround mBrowserAround; private EUExBase mActivityCallback; private boolean mCallbackRuning; private EBrowserMainFrame mEBrwMainFrame; private boolean mFinish; private boolean mVisable; private boolean mPageFinish; private String mAuthorID; private boolean mSipBranch; public static boolean develop = false; public static boolean analytics = true; private JSONObject OtherAppData; public static boolean isForground = false; public SlidingMenu globalSlidingMenu; private WebViewSdkCompat.ValueCallback<Uri> mUploadMessage; private boolean mLoadingRemoved = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(null); if (!EResources.init(this)) { loadResError(); return; } if (!AppCan.ACTION_APPCAN_SDK.equals(getIntent().getAction())) { startMaskActivity(); } else { startCustomMaskActivity(getIntent()); } mVisable = true; Window activityWindow = getWindow(); ESystemInfo.getIntence().init(this); mBrowser = new EBrowser(this); mEHandler = new EHandler(Looper.getMainLooper()); initEngineUI(); mBrowserAround = new EBrowserAround(this); setContentView(mEBrwMainFrame); initInternalBranch(); Message loadDelayMsg = mEHandler .obtainMessage(EHandler.F_MSG_LOAD_HIDE_SH); long delay = 3 * 1000L; if (mSipBranch) { delay = 1000L; } mEHandler.sendMessageDelayed(loadDelayMsg, delay); WWidgetData wWidgetData=getIntent().getParcelableExtra(KET_WIDGET_DATE); getIntent().removeExtra(KET_WIDGET_DATE);//删除intent中的数据,避免传递给网页 initEngine(wWidgetData); EUtil.printeBackup(savedInstanceState, "onCreate"); // EUtil.checkAndroidProxy(getBaseContext()); handleIntent(getIntent()); PushRecieveMsgReceiver.setContext(this); globalSlidingMenu = new SlidingMenu(this); globalSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); // globalSlidingMenu.setShadowWidthRes(EUExUtil.getResDimenID("shadow_width")); // globalSlidingMenu.setShadowDrawable(EUExUtil.getResDrawableID("shadow")); // globalSlidingMenu.setShadowWidthRes(R.dimen.shadow_width); // globalSlidingMenu.setShadowDrawable(R.drawable.shadow); // globalSlidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset); // globalSlidingMenu.setFadeDegree(0.35f); // globalSlidingMenu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT); // globalSlidingMenu.setMenu(R.layout.menu_frame); // globalSlidingMenu.setMode(SlidingMenu.LEFT_RIGHT); // // globalSlidingMenu.setSecondaryMenu(R.layout.menu_frame_two); // globalSlidingMenu.setSecondaryShadowDrawable(R.drawable.shadowright); // globalSlidingMenu.setBehindWidthRes(R.dimen.slidingmenu_width); // globalSlidingMenu.setBehindWidthRes(0); reflectionPluginMethod("onActivityCreate"); try { activityWindow.clearFlags( WindowManager.LayoutParams.class.getField( "FLAG_NEEDS_MENU_KEY").getInt(null)); } catch (Exception e) { } } private void reflectionPluginMethod(String method) { ThirdPluginMgr tpm = AppCan.getInstance().getThirdPlugins(); Map<String, ThirdPluginObject> thirdPlugins = tpm.getPlugins(); Set<Map.Entry<String, ThirdPluginObject>> pluginSet = thirdPlugins .entrySet(); for (Map.Entry<String, ThirdPluginObject> entry : pluginSet) { try { String javaName = entry.getValue().jclass; Class c = Class.forName(javaName, true, getClassLoader()); Method m = c.getMethod(method, new Class[]{Context.class}); if (null != m) { m.invoke(c, new Object[]{this}); } } catch (Exception e) { } } } private void reflectionPluginMethod(String method, Intent intent) { ThirdPluginMgr tpm = AppCan.getInstance().getThirdPlugins(); Map<String, ThirdPluginObject> thirdPlugins = tpm.getPlugins(); Set<Map.Entry<String, ThirdPluginObject>> pluginSet = thirdPlugins .entrySet(); for (Map.Entry<String, ThirdPluginObject> entry : pluginSet) { try { String javaName = entry.getValue().jclass; Class c = Class.forName(javaName, true, getClassLoader()); Object[] objs = new Object[2]; objs[0] = this; objs[1] = intent; Class[] argsClass = new Class[objs.length]; argsClass[0] = Context.class; argsClass[1] = Intent.class; Method m = c.getMethod(method, argsClass); if (null != m) { m.invoke(c, objs); } } catch (Exception e) { } } } private final void initInternalBranch() { int sipId = EUExUtil.getResStringID("sip"); if (0 != sipId) { String sipStr = getResources().getString(sipId); if (null != sipStr && sipStr.equals("true")) { mSipBranch = true; } } } private final void initEngine(WWidgetData rootWidget) { if (rootWidget == null || TextUtils.isEmpty(rootWidget.m_indexUrl)) { loadResError(); return; } ConfigXmlUtil.setFullScreen(this); ACEDes.getObfuscationList(); // String[] plugins = {"uexXmlHttpMgr", "uexCamera"}; // rootWidget.disablePlugins = plugins; changeConfiguration(rootWidget.m_orientation); EBrowserWidgetPool eBrwWidPo = new EBrowserWidgetPool(mBrowser, mEBrwMainFrame, mBrowserAround); mBrowser.init(eBrwWidPo); // rootWidget.m_indexUrl = "http://xhsnbjlxt.cloud7.com.cn"; // rootWidget.m_indexUrl = "http://192.168.1.38:8080/ldx/index.html"; eBrwWidPo.init(rootWidget); mBrowserAround.init(eBrwWidPo); mEBrwMainFrame.init(mBrowser); mBrowserAround.setSpaceFlag(rootWidget.getSpaceStatus()); mEHandler.sendMessageDelayed( mEHandler.obtainMessage(EHandler.F_MSG_LOAD_DELAY), 100); AppCan.getInstance().widgetRegist(rootWidget, this); } public final void hideCustomView() { mEBrwMainFrame.hideCustomView(); } public final boolean customViewShown() { return mEBrwMainFrame.customViewShown(); } public void setContentViewVisible(int delayTime) { if (mLoadingRemoved) { return; } ConfigXmlUtil.setStatusBarColor(this,WWidgetData.sStatusBarColor); mLoadingRemoved = true; getWindow().setBackgroundDrawable(new ColorDrawable(0xFFFFFFFF)); sendFinishLoadingBroadcast(delayTime); } public final void showCustomView(View view, WebViewSdkCompat.CustomViewCallback callback) { mEBrwMainFrame.showCustomView(view, callback); } public final boolean isVisable() { return mVisable; } public final void setPageFinish(boolean flag) { mPageFinish = flag; if (null != mAuthorID) { uexOnAuthorize(mAuthorID); mAuthorID = null; } } public final boolean isPageFinish() { return mPageFinish; } @Override protected void onSaveInstanceState(Bundle outState) { // super.onSaveInstanceState(outState); EUtil.printeBackup(outState, "onSaveInstanceState"); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { // super.onRestoreInstanceState(savedInstanceState); EUtil.printeBackup(savedInstanceState, "onSaveInstanceState"); } @Override public final boolean onKeyDown(int keyCode, KeyEvent event) { mKeyDown = true; switch (keyCode) { case KeyEvent.KEYCODE_BACK: case KeyEvent.KEYCODE_MENU: return true; } return super.onKeyDown(keyCode, event); } @Override public final boolean onKeyUp(int keyCode, KeyEvent event) { if (!mKeyDown) { return true; } mKeyDown = false; switch (keyCode) { case KeyEvent.KEYCODE_BACK: if (customViewShown()) { hideCustomView(); } else { giveKeyEnventToBrowser(); } return true; case KeyEvent.KEYCODE_MENU: if (mBrowser.isLockMenuKey() && !mBrowser.isSpaceShown()) { mBrowser.onAppKeyPress(EUExCallback.F_C_Key_Menu); return true; } break; } return super.onKeyUp(keyCode, event); } private final void giveKeyEnventToBrowser() { boolean b1 = mBrowser.isLockBackKey(); boolean b2 = mBrowser.isSpaceShown(); if (b1 && !b2) { mBrowser.onAppKeyPress(EUExCallback.F_C_Key_Back); } else { mBrowser.goBack(); } } public void uexOnAuthorize(String id) { if (null != mBrowser) { if (isPageFinish()) { mBrowser.uexOnAuthorize(id); } else { mAuthorID = id; } } } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (null != mBrowser) { mBrowser.onConfigurationChanged(newConfig); } } @Override protected void onStart() { super.onStart(); EUtil.loge("App onStart"); reflectionPluginMethod("onActivityStart"); } @Override protected void onRestart() { super.onRestart(); EUtil.loge("App onRestart"); reflectionPluginMethod("onActivityReStart"); } @Override protected void onStop() { super.onStop(); EUtil.loge("App onStop"); reflectionPluginMethod("onActivityStop"); } @Override protected void onResume() { super.onResume(); EUtil.loge("App onResume"); mVisable = true; if (null != mBrowser) { mBrowser.onAppResume(); } if (null != mBrowserAround) { mBrowserAround.onResume(); } isForground = true; reflectionPluginMethod("onActivityResume"); } @Override protected void onDestroy() { EUtil.loge("App onDestroy"); super.onDestroy(); reflectionPluginMethod("onActivityDestroy"); if (!AppCan.getInstance().isWidgetSdk()) { Process.killProcess(Process.myPid()); } } @Override protected void onPause() { isForground = false; super.onPause(); EUtil.loge("App onPause"); mVisable = false; if (mFinish) { return; } if (null != mBrowser) { mBrowser.onAppPause(); } if (null != mBrowserAround) { mBrowserAround.onPause(); } reflectionPluginMethod("onActivityPause"); } @Override protected void onNewIntent(Intent intent) { handleIntent(intent); reflectionPluginMethod("onActivityNewIntent", intent); } public void handleIntent(Intent intent) { if (intent == null) { return; } try { Intent firstIntent = getIntent(); int type = intent.getIntExtra("ntype", 0); switch (type) { case ENotification.F_TYPE_PUSH: handlePushNotify(intent); break; case ENotification.F_TYPE_USER: break; case ENotification.F_TYPE_SYS: break; default: getIntentData(intent); firstIntent.putExtras(intent); break; } } catch (Exception e) { e.printStackTrace(); } } private void handlePushNotify(Intent intent) { if (null != mBrowser) { try { String data = intent.getStringExtra("data"); String pushMessage = intent.getStringExtra("message"); SharedPreferences sp = getSharedPreferences( PushReportConstants.PUSH_DATA_SHAREPRE, Context.MODE_PRIVATE); Editor editor = sp.edit(); editor.putString( PushReportConstants.PUSH_DATA_SHAREPRE_DATA, data); editor.putString( PushReportConstants.PUSH_DATA_SHAREPRE_MESSAGE, pushMessage); if (intent.hasExtra(PushReportConstants.PUSH_DATA_INFO_KEY)) { PushDataInfo dataInfo = (PushDataInfo) intent.getExtras() .get(PushReportConstants.PUSH_DATA_INFO_KEY); String taskId = dataInfo.getTaskId(); editor.putString(PushReportConstants.PUSH_DATA_SHAREPRE_TASKID, taskId); String tenantId = dataInfo.getTenantId(); editor.putString(PushReportConstants.PUSH_DATA_SHAREPRE_TENANTID, tenantId); } editor.commit(); String appType = ""; if (mVisable && isForground) { //应用在前台 appType = APP_TYPE_START_FORGROUND; } else if (!mVisable && !isForground) { //应用Home键退到后台再点通知进入 appType = APP_TYPE_START_BACKGROUND; } else if (mVisable && !isForground) { //应用Back键退出再点通知进入 appType = APP_TYPE_NOT_START; } mBrowser.pushNotify(appType); } catch (Exception e) { e.printStackTrace(); } } } public final void exitApp(boolean showDilog) { Message msg = mEHandler.obtainMessage(EHandler.F_MSG_EXIT_APP, showDilog); msg.sendToTarget(); } private final void loadResError() { AlertDialog.Builder dia = new AlertDialog.Builder(this); ResoureFinder finder = ResoureFinder.getInstance(); dia.setTitle(finder.getString(this, "browser_dialog_error")); dia.setMessage(finder.getString(this, "browser_init_error")); dia.setCancelable(false); dia.setPositiveButton(finder.getString(this, "confirm"), new OnClickListener() { public void onClick(DialogInterface dialog, int which) { finish(); Process.killProcess(Process.myPid()); } }); dia.create(); dia.show(); } private final void readyExit(boolean showDialog) { if (null != mBrowserAround) { if (mBrowserAround.onExit()) { return; } } if (!showDialog||AppCan.getInstance().isWidgetSdk()) { exitBrowser(); return; } try { AlertDialog.Builder tDialog = new AlertDialog.Builder(this); ResoureFinder finder = ResoureFinder.getInstance(); tDialog.setTitle(finder.getString(this, "browser_exitdialog_msg")); tDialog.setNegativeButton(finder.getString(this, "cancel"), null); tDialog.setMessage(finder.getString(this, "browser_exitdialog_app_text")); tDialog.setPositiveButton(finder.getString(this, "confirm"), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { exitBrowser(); } }); tDialog.show(); } catch (Exception e) { } } public final void exitBrowser() { if (mSipBranch) { Intent intent = new Intent(Intent.ACTION_MAIN); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addCategory(Intent.CATEGORY_HOME); startActivity(intent); return; } if (null != mBrowser) { mBrowser.onAppStop(); } mBrowserAround.removeViewImmediate(); clean(); finish(); if (AppCan.getInstance().isWidgetSdk()){ if (AppCan.getInstance().mFinishListener!=null){ AppCan.getInstance().mFinishListener.onFinish(0,null); } } } private final void clean() { if (null != mBrowser) { mBrowser.clean(); } AppCan.getInstance().exitApp(); mEHandler.clean(); mBrowserAround.clean(); mFinish = true; Runtime.getRuntime().gc(); } public final void setAutorotateEnable(int enabled) { int ori = ActivityInfo.SCREEN_ORIENTATION_USER; if (enabled == 1) { ori = getOrientationForRotation(); } final int orientation = ori; new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { setRequestedOrientation(orientation); ; } }.sendEmptyMessageDelayed(0, 100); } private int getOrientationForRotation() { int ori = ActivityInfo.SCREEN_ORIENTATION_USER; int rotation = this.getWindowManager().getDefaultDisplay().getRotation(); if (rotation == Surface.ROTATION_0) { ori = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; } else if (rotation == Surface.ROTATION_90) { ori = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; } else if (rotation == Surface.ROTATION_180) { ori = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT; } else if (rotation == Surface.ROTATION_270) { ori = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE; } return ori; } public final void changeConfiguration(int orientation) { final int ori = intoOrientation(orientation); new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { setRequestedOrientation(ori); ; } }.sendEmptyMessageDelayed(0, 100); } public final int intoOrientation(int flag) { int or = ActivityInfo.SCREEN_ORIENTATION_USER; if (flag == 1) {// portrait or = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; } else if (flag == 2) {// landscape or = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; } else if (flag == 4) {// reverse portrait or = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT; } else if (flag == 8) {// reverse landscape or = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE; } else if (flag == 5) {// portrait and reverse portrait, Some devices only portrait effective if (Build.VERSION.SDK_INT >= 18) { or = ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT; } else { or = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT; } } else if (flag == 10) {// landscape and reverse landscape if (Build.VERSION.SDK_INT >= 18) { or = ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE; } else { or = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE; } } return or; } @Override protected final void onActivityResult(int requestCode, int resultCode, Intent data) { if (F_OAUTH_CODE == requestCode) { if (null != data) { int result = data.getIntExtra("result", 0); if (0 == result) { exitBrowser(); return; } String authorizeID = data.getStringExtra("authorizeID"); uexOnAuthorize(authorizeID); } return; } else if (requestCode == FILECHOOSER_RESULTCODE) { if (null == mUploadMessage) return; Uri result = data == null || resultCode != RESULT_OK ? null : data.getData(); mUploadMessage.onReceiveValue(result); mUploadMessage = null; } if (mCallbackRuning && null != mActivityCallback) { mActivityCallback.onActivityResult(requestCode, resultCode, data); mCallbackRuning = false; mActivityCallback = null; } } public final void startActivityForResult(EUExBase callack, Intent intent, int requestCode) { if (mCallbackRuning) { return; } if (null != callack) { mActivityCallback = callack; mCallbackRuning = true; super.startActivityForResult(intent, requestCode); } } public final void registerActivityForResult(EUExBase callback) { if (mCallbackRuning) { return; } if (null != callback) { mActivityCallback = callback; mCallbackRuning = true; } } public final void registerAppEventListener(EUExEventListener listener) { if (null != mBrowserAround) { mBrowserAround.registerAppEventListener(listener); } } public final void unRegisterAppEventListener(EUExEventListener listener) { if (null != mBrowserAround) { mBrowserAround.unRegisterAppEventListener(listener); } } public final Bitmap getImage(String bgPath) { if (null != mBrowser) { return mBrowser.getImage(bgPath); } return null; } private final void initEngineUI() { mEBrwMainFrame = new EBrowserMainFrame(this); FrameLayout.LayoutParams mainPagePa = new FrameLayout.LayoutParams( Compat.FILL, Compat.FILL); EUtil.viewBaseSetting(mEBrwMainFrame); mEBrwMainFrame.setLayoutParams(mainPagePa); } public Thread[] findAllVMThreads() { ThreadGroup group = Thread.currentThread().getThreadGroup(); ThreadGroup topGroup = group; while (group != null) { topGroup = group; group = group.getParent(); } int estimatedSize = topGroup.activeCount() * 2; Thread[] slackList = new Thread[estimatedSize]; int actualSize = topGroup.enumerate(slackList); Thread[] list = new Thread[actualSize]; System.arraycopy(slackList, 0, list, 0, actualSize); return list; } public void execMethodReadPrivateFileSystem(String path) { String line = ""; String args[] = new String[3]; args[0] = "chmod"; args[1] = "777"; args[2] = "/data/data/com.eoemobile/databases/webviewCache.db"; try { java.lang.Process process = Runtime.getRuntime().exec(args); InputStream stderr = process.getErrorStream(); InputStreamReader isrerr = new InputStreamReader(stderr); BufferedReader brerr = new BufferedReader(isrerr); InputStream outs = process.getInputStream(); InputStreamReader isrout = new InputStreamReader(outs); BufferedReader brout = new BufferedReader(isrout); String errline = null; String result = ""; while ((line = brerr.readLine()) != null) { result += line; result += "\n"; } if (result != "") { errline = result; System.out.println(errline); } while ((line = brout.readLine()) != null) { result += line; result += "\n"; } if (result != "") { System.out.println(result); } } catch (Throwable t) { t.printStackTrace(); } } private void getIntentData(Intent in) { if (null != in) { Bundle bundle = in.getExtras(); if (null != bundle) { OtherAppData = new JSONObject(); Set<String> set = bundle.keySet(); Iterator<String> it = set.iterator(); while (it.hasNext()) { try { String key = it.next(); Object object = bundle.get(key); if (object != null) { String data = object.toString(); OtherAppData.put(key, data); } } catch (JSONException e) { e.printStackTrace(); } } loadByOtherApp(); } //url打开APP参数处理 if (in.getData()!=null){ if (OtherAppData==null){ OtherAppData = new JSONObject(); } Set<String> keys=in.getData().getQueryParameterNames(); if (keys!=null){ for (String key:keys){ try { OtherAppData.put(key,in.getData().getQueryParameter(key)); } catch (JSONException e) { BDebug.e(e.toString()); } } } loadByOtherApp(); } } } public WebViewSdkCompat.ValueCallback<Uri> getmUploadMessage() { return mUploadMessage; } public void setmUploadMessage(WebViewSdkCompat.ValueCallback<Uri> mUploadMessage) { this.mUploadMessage = mUploadMessage; } public class EHandler extends Handler { static final int F_MSG_INIT_APP = 0; static final int F_MSG_LOAD_DELAY = 1; static final int F_MSG_LOAD_HIDE_SH = 2; static final int F_MSG_EXIT_APP = 3; public EHandler(Looper loop) { super(loop); } public void clean() { removeMessages(F_MSG_INIT_APP); removeMessages(F_MSG_LOAD_DELAY); removeMessages(F_MSG_LOAD_HIDE_SH); removeMessages(F_MSG_EXIT_APP); } public void handleMessage(Message msg) { switch (msg.what) { case F_MSG_LOAD_DELAY: try { Intent intent = getIntent(); int type = intent.getIntExtra("ntype", 0); switch (type) { case ENotification.F_TYPE_PUSH: mBrowser.setFromPush(true); break; case ENotification.F_TYPE_USER: // onNewIntent(intent); break; } mBrowser.start(); break; } catch (Exception e) { e.printStackTrace(); } case F_MSG_LOAD_HIDE_SH: setContentViewVisible(0); if (mBrowserAround.checkTimeFlag()) { mBrowser.hiddenShelter(); } else { mBrowserAround.setTimeFlag(true); } break; case F_MSG_EXIT_APP: readyExit((Boolean) msg.obj); break; } } } public void loadByOtherApp() { if (OtherAppData != null) { if (isPageFinish()) { mBrowser.onLoadAppData(OtherAppData); OtherAppData = null; } } } public void onSlidingWindowStateChanged(int position) { if (null != mBrowser) { mBrowser.onSlidingWindowStateChanged(position); } } }