/* * 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.universalex; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; import android.os.IBinder; import android.os.Message; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.FrameLayout; import android.widget.RelativeLayout; import com.slidingmenu.lib.SlidingMenu; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.zywx.wbpalmstar.base.BDebug; import org.zywx.wbpalmstar.base.BUtility; import org.zywx.wbpalmstar.base.ResoureFinder; import org.zywx.wbpalmstar.base.util.AppCanAPI; import org.zywx.wbpalmstar.base.util.SpManager; import org.zywx.wbpalmstar.base.vo.CreateContainerVO; import org.zywx.wbpalmstar.base.vo.SetSwipeCloseEnableVO; import org.zywx.wbpalmstar.base.vo.ShareInputVO; import org.zywx.wbpalmstar.base.vo.WindowActionSheetVO; import org.zywx.wbpalmstar.base.vo.WindowAlertVO; import org.zywx.wbpalmstar.base.vo.WindowAnimVO; import org.zywx.wbpalmstar.base.vo.WindowConfirmVO; import org.zywx.wbpalmstar.base.vo.WindowCreateProgressDialogVO; import org.zywx.wbpalmstar.base.vo.WindowEvaluateMultiPopoverScriptVO; import org.zywx.wbpalmstar.base.vo.WindowEvaluatePopoverScriptVO; import org.zywx.wbpalmstar.base.vo.WindowEvaluateScriptVO; import org.zywx.wbpalmstar.base.vo.WindowOpenMultiPopoverVO; import org.zywx.wbpalmstar.base.vo.WindowOpenPopoverVO; import org.zywx.wbpalmstar.base.vo.WindowOpenSlibingVO; import org.zywx.wbpalmstar.base.vo.WindowOpenVO; import org.zywx.wbpalmstar.base.vo.WindowPromptResultVO; import org.zywx.wbpalmstar.base.vo.WindowPromptVO; import org.zywx.wbpalmstar.base.vo.WindowSetFrameVO; import org.zywx.wbpalmstar.base.vo.WindowSetMultiPopoverFrameVO; import org.zywx.wbpalmstar.base.vo.WindowSetMultiPopoverSelectedVO; import org.zywx.wbpalmstar.base.vo.WindowSetPopoverFrameVO; import org.zywx.wbpalmstar.base.vo.WindowSetSlidingWindowVO; import org.zywx.wbpalmstar.base.vo.WindowShowBounceViewVO; import org.zywx.wbpalmstar.base.vo.WindowToastVO; import org.zywx.wbpalmstar.engine.DataHelper; import org.zywx.wbpalmstar.engine.EBounceView; import org.zywx.wbpalmstar.engine.EBrowser; import org.zywx.wbpalmstar.engine.EBrowserActivity; import org.zywx.wbpalmstar.engine.EBrowserAnimation; import org.zywx.wbpalmstar.engine.EBrowserView; import org.zywx.wbpalmstar.engine.EBrowserWidget; import org.zywx.wbpalmstar.engine.EBrowserWindow; import org.zywx.wbpalmstar.engine.EBrwViewEntry; import org.zywx.wbpalmstar.engine.EDialogTask; import org.zywx.wbpalmstar.engine.ESystemInfo; import org.zywx.wbpalmstar.engine.EUtil; import org.zywx.wbpalmstar.engine.EViewEntry; import org.zywx.wbpalmstar.engine.container.ContainerAdapter; import org.zywx.wbpalmstar.engine.container.ContainerViewPager; import org.zywx.wbpalmstar.engine.universalex.wrapper.WindowJsonWrapper; import org.zywx.wbpalmstar.platform.window.ActionSheetDialog; import org.zywx.wbpalmstar.platform.window.ActionSheetDialog.ActionSheetDialogItemClickListener; import org.zywx.wbpalmstar.platform.window.PromptDialog; import org.zywx.wbpalmstar.widgetone.dataservice.WWidgetData; import java.security.MessageDigest; import java.util.ArrayList; import java.util.List; import java.util.Vector; public class EUExWindow extends EUExBase { public static final String tag = "uexWindow"; public static final String function_confirm = "uexWindow.cbConfirm"; public static final String function_prompt = "uexWindow.cbPrompt"; public static final String function_actionSheet = "uexWindow.cbActionSheet"; public static final String function_selectList = "uexWindow.cbSelectList"; public static final String function_getState = "uexWindow.cbGetState"; public static final String function_getQuery = "uexWindow.cbGetUrlQuery"; public static final String function_pageBack = "uexWindow.cbPageBack"; public static final String function_pageForward = "uexWindow.cbPageForward"; public static final String function_cbOpenMultiPopover = "uexWindow.cbOpenMultiPopover"; public static final String function_cbBounceState = "uexWindow.cbBounceState"; public static final String function_cbslipedUpward = "uexWindow.slipedUpward"; //不建议使用 public static final String function_cbslipedDownward = "uexWindow.slipedDownward";//不建议使用 public static final String function_cbslipedUpEdge = "uexWindow.slipedUpEdge";//不建议使用 public static final String function_cbslipedDownEdge = "uexWindow.slipedDownEdge";//不建议使用 public static final String function_cbCreatePluginViewContainer = "uexWindow.cbCreatePluginViewContainer"; public static final String function_cbClosePluginViewContainer = "uexWindow.cbClosePluginViewContainer"; public static final String function_cbShowPluginViewContainer = "uexWindow.cbShowPluginViewContainer"; public static final String function_cbHidePluginViewContainer = "uexWindow.cbHidePluginViewContainer"; public static final String function_cbClearPluginViewContainer = "uexWindow.cbClearPluginViewContainer"; public static final String function_cbDownloadCallback = "uexWindow.cbDownloadCallback"; public static final String function_onPluginContainerPageChange = "uexWindow.onPluginContainerPageChange"; public static final String function_onSlipedUpward = "uexWindow.onSlipedUpward"; public static final String function_onSlipedDownward = "uexWindow.onSlipedDownward"; public static final String function_onSlipedUpEdge = "uexWindow.onSlipedUpEdge"; public static final String function_onSlipedDownEdge = "uexWindow.onSlipedDownEdge"; public static final String m_AdUrl = "http://wgb.tx100.com/mobile/adver.wg"; private static final String TAG_BUNDLE_PARAM = "param"; private static final String TAG_BUNDLE_PARAM_NAME = "name"; private static final int MSG_FUNCTION_CLOSE = 0; private static final int MSG_FUNCTION_CLOSE_ABOVE_WND_BY_NAME = 1; private static final int MSG_FUNCTION_OPEN = 2; private static final int MSG_FUNCTION_OPEN_POP = 3; private static final int MSG_FUNCTION_FORWARD = 4; private static final int MSG_FUNCTION_BACK = 5; private static final int MSG_FUNCTION_PAGEFORWARD = 6; private static final int MSG_FUNCTION_PAGEBACK = 7; private static final int MSG_FUNCTION_WINDOWFORWARD = 8; private static final int MSG_FUNCTION_WINDOWBACK = 9; private static final int MSG_FUNCTION_SETWINDOWFRAME = 10; private static final int MSG_FUNCTION_OPENSLIBING = 11; private static final int MSG_FUNCTION_CLOSESLIBING = 12; private static final int MSG_FUNCTION_SHOWSLIBING = 13; private static final int MSG_FUNCTION_LOADOBFUSCATIONDATA = 14; private static final int MSG_FUNCTION_TOAST = 15; private static final int MSG_FUNCTION_CLOSETOAST = 16; private static final int MSG_FUNCTION_CLOSEPOPOVER = 17; private static final int MSG_FUNCTION_SETPOPOVERFRAME = 18; private static final int MSG_FUNCTION_OPENMULTIPOPOVER = 19; private static final int MSG_FUNCTION_CLOSEMULTIPOPOVER = 20; private static final int MSG_FUNCTION_SETSELECTEDPOPOVERINMULTIWINDOW = 21; private static final int MSG_FUNCTION_BRINGTOFRONT = 22; private static final int MSG_FUNCTION_SENDTOBACK = 23; private static final int MSG_FUNCTION_INSERTABOVE = 24; private static final int MSG_FUNCTION_INSERTBELOW = 25; private static final int MSG_FUNCTION_BRINGPOPOVERTOFRONT = 26; private static final int MSG_FUNCTION_SENDPOPOVERTOBACK = 27; private static final int MSG_FUNCTION_INSERTPOPOVERABOVEPOPOVER = 28; private static final int MSG_FUNCTION_INSERTPOPOVERBELOWPOPOVER = 29; private static final int MSG_FUNCTION_INSERTWINDOWABOVEWINDOW = 30; private static final int MSG_FUNCTION_INSERTWINDOWBELOWWINDOW = 31; private static final int MSG_FUNCTION_SETORIENTATION = 32; private static final int MSG_FUNCTION_SETSLIDINGWIN = 33; private static final int MSG_FUNCTION_SETSLIDINGWIN_ENABLE = 34; private static final int MSG_FUNCTION_TOGGLE_SLIDINGWIN = 35; private static final int MSG_FUNCTION_REFRESH = 36; private static final int MSG_FUNCTION_SETMULTIPOPOVERFRAME = 37; private static final int MSG_PUBLISH_CHANNEL_NOTIFICATION = 38; private static final int MSG_SET_WINDOW_HIDDEN = 39; private static final int MSG_OPEN_AD = 40; private static final int MSG_SHOW_SOFT_KEYBOARD = 41; private static final int MSG_ACTION_SHEET = 42; private static final int MSG_STATUS_BAR_NOTIFICATION = 43; private static final int MSG_CREATE_PROGRESS_DIALOG = 44; private static final int MSG_DESTROY_PROGRESS_DIALOG = 45; private static final int MSG_POST_GLOBAL_NOTIFICATION = 46; private static final int MSG_SUBSCRIBE_CHANNEL_NOTIFICATION = 47; private static final int MSG_FUNCTION_RELOAD = 48; private static final int MSG_FUNCTION_GET_SLIDING_WINDOW_STATE = 50; private static final int MSG_SET_IS_SUPPORT_SLIDE_CALLBACK = 51; private static final int MSG_PLUGINVIEW_CONTAINER_CREATE = 52; private static final int MSG_PLUGINVIEW_CONTAINER_CLOSE = 53; private static final int MSG_PLUGINVIEW_CONTAINER_SET = 54; private static final int MSG_PLUGINVIEW_CONTAINER_SHOW = 55; private static final int MSG_PLUGINVIEW_CONTAINER_HIDE = 56; private static final int MSG_PUBLISH_CHANNEL_NOTIFICATION_FOR_JSON = 57; private static final int MSG_SET_IS_SUPPORT_SWIPE_CALLBACK = 58; private static final int MSG_DISTURB_LONG_PRESS_GESTURE = 59; private static final int MSG_FUNCTION_SETAUTOROTATEENABLE= 60; private static final int MSG_FUNCTION_SETLOADINGIMAGEPATH= 61; private AlertDialog mAlert; private AlertDialog.Builder mConfirm; private PromptDialog mPrompt; private ResoureFinder finder; public static final String KEY_HARDWARE = "hardware";//硬件加速 public static final String KEY_DOWNLOAD_CALLBACK = "downloadCallback";//下载回调 public static final String KEY_USER_AGENT = "userAgent"; public EUExWindow(Context context, EBrowserView inParent) { super(context, inParent); inParent.setScrollCallBackContex(this); finder = ResoureFinder.getInstance(context); } public void open(String[] params) { if (isJsonString(params[0])){ WindowOpenVO openVO=DataHelper.gson.fromJson(params[0],WindowOpenVO.class); WindowJsonWrapper.open(this,openVO); }else{ openMsg(params); } } public void openMsg(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } String inWindowName = parm[0]; if (!checkWindPermission(inWindowName)) { showPermissionDialog(inWindowName); return; } String inDataType = parm[1]; String inData = parm[2]; String inAnimitionID = parm[3]; String inWidth = parm[4]; String inHeight = parm[5]; String inFlag = parm[6]; String animDuration = null; boolean opaque = false; /**赋初值,避免不传bgColor崩溃*/ String bgColor = "#00000000"; boolean hasExtraInfo = false; int hardware = -1; int downloadCallback = 0; String userAgent = ""; if (parm.length > 7&&parm[7]!=null) { animDuration = parm[7]; } if (parm.length > 8&&parm[8]!=null) { String jsonData = parm[8]; try { JSONObject json = new JSONObject(jsonData); String extraInfo = json.getString(EBrwViewEntry.TAG_EXTRAINFO); JSONObject data = new JSONObject(extraInfo); if (data.has(WWidgetData.TAG_WIN_BG_OPAQUE)) { opaque = Boolean.valueOf(data.getString(WWidgetData.TAG_WIN_BG_OPAQUE)); hasExtraInfo = true; } if (data.has(WWidgetData.TAG_WIN_BG_COLOR)) { bgColor = data.getString(WWidgetData.TAG_WIN_BG_COLOR); hasExtraInfo = true; } hardware = data.optInt(KEY_HARDWARE, -1); if (hardware != -1) { hasExtraInfo = true; } downloadCallback = data.optInt(KEY_DOWNLOAD_CALLBACK, 0); userAgent = data.optString(KEY_USER_AGENT, ""); } catch (JSONException ignored) { } } String cUrl = mBrwView.getCurrentUrl(); boolean op = EBrowser.checkFlag(EBrowser.F_BRW_FLAG_OPENING); boolean hi = curWind.isHidden(); boolean eq = curWind.getName().equals(inWindowName); if (op || hi || eq) { return; } int width = 0; int height = 0; int flag = 0; int dataType = 0; int animitionId = EBrowserAnimation.ANIM_ID_NONE; long duration = EBrowserAnimation.defaultDuration; try { if (null != inAnimitionID && inAnimitionID.length() != 0) { animitionId = Integer.parseInt(inAnimitionID); } if (null != animDuration && animDuration.length() != 0 && !animDuration.equals("undefined")) { duration = Long.parseLong(animDuration); } dataType = Integer.valueOf(inDataType); width = parseWidth(inWidth); height = parseHeight(inHeight); flag = Integer.parseInt(inFlag); } catch (Exception e) { if (BDebug.DEBUG){ e.printStackTrace(); } errorCallback(0, EUExCallback.F_E_UEXWINDOW_OPEN, "Illegal parameter"); return; } WWidgetData wgt = mBrwView.getCurrentWidget(); EBrwViewEntry windEntry = new EBrwViewEntry(EBrwViewEntry.VIEW_TYPE_MAIN); String data = null; if (EBrwViewEntry.isData(dataType)) { data = inData; } else { String wgtroot = "wgtroot://"; if (inData.startsWith(wgtroot)) { String initUrl = wgt.m_indexUrl; inData = inData.substring(wgtroot.length()); inData = BUtility.makeUrl(initUrl, inData); data = inData; } else { data = BUtility.makeUrl(cUrl, inData); } windEntry.mRelativeUrl = inData; } String query = null; if (Build.VERSION.SDK_INT >= 11) { if (EBrwViewEntry.isUrl(dataType) && data != null) { int index = data.indexOf("?"); if (index > 0) { query = data.substring(index + 1); if (!data.startsWith("http")) { data = data.substring(0, index); } } } } windEntry.mPreWindName = curWind.getName(); windEntry.mQuery = query; windEntry.mWindName = inWindowName; windEntry.mDataType = dataType; windEntry.mData = data; windEntry.mAnimId = animitionId; windEntry.mWidth = width; windEntry.mHeight = height; windEntry.mFlag = flag; windEntry.mAnimDuration = duration; windEntry.mOpaque = opaque; windEntry.mBgColor = bgColor; windEntry.mHardware = hardware; windEntry.mDownloadCallback = downloadCallback; windEntry.mUserAgent = userAgent; windEntry.hasExtraInfo = hasExtraInfo; curWind.createWindow(mBrwView, windEntry); } public void openPresentWindow(String[] params){//与iOS保持一致添加的接口 open(params); } @AppCanAPI public int getHeight(String[] params){ return mBrwView.getBrowserWindow().getHeight(); } @AppCanAPI public int getWidth(String[] params){ return mBrwView.getBrowserWindow().getWidth(); } private boolean checkWindPermission(String windName) { WWidgetData rootWgt = mBrwView.getRootWidget(); ArrayList<String> winds = rootWgt.disableRootWindowsList; if (null == windName || windName.trim().length() == 0 || null == winds) { return true; } for (String name : winds) { if (windName.equals(name)) { return false; } } return true; } private boolean checkWindPopPermission(String windPopName) { WWidgetData rootWgt = mBrwView.getRootWidget(); ArrayList<String> winds = rootWgt.disableSonWindowsList; if (null == windPopName || windPopName.trim().length() == 0 || null == winds) { return true; } for (String name : winds) { if (windPopName.equals(name)) { return false; } } return true; } private void showPermissionDialog(final String windName) { EBrowserActivity activity = (EBrowserActivity) mContext; /*if (!activity.isVisable()) { return; }*/ Runnable ui = new Runnable() { @Override public void run() { AlertDialog.Builder dia = new AlertDialog.Builder(mContext); dia.setTitle(EUExUtil.getString("warning")); dia.setMessage(String.format(EUExUtil.getString("no_permission_to_open_window"), windName)); dia.setCancelable(false); dia.setPositiveButton(EUExUtil.getString("confirm"), null); dia.show(); } }; activity.runOnUiThread(ui); } @AppCanAPI public void setOrientation(String[] parm) { if (parm.length < 1) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_SETORIENTATION; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } public void setOrientationMsg(String[] parm) { if (null != mBrwView) { EBrowserActivity activity = (EBrowserActivity) mContext; int or = activity.getRequestedOrientation(); try { or = Integer.parseInt(parm[0]); } catch (Exception e) { e.printStackTrace(); } activity.changeConfiguration(or); } } @AppCanAPI public void setAutorotateEnable(String[] parm) { if (parm.length < 1) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_SETAUTOROTATEENABLE; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } public void setAutorotateEnableMsg(String[] parm) { int enabled = 0; try { enabled = Integer.parseInt(parm[0]); } catch (Exception e) { e.printStackTrace(); } if (null != mBrwView) { EBrowserActivity activity = (EBrowserActivity) mContext; activity.setAutorotateEnable(enabled); } } public void setLoadingImagePath(String[] parm) { if (parm.length < 1) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_SETLOADINGIMAGEPATH; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } public void setLoadingImagePathMsg(String[] parm) { String json = parm[0]; try { JSONObject jsonObject = new JSONObject(json); String path = jsonObject.optString(BUtility.m_loadingImagePath); path = BUtility.makeRealPath(path, mBrwView); long time = jsonObject.optLong(BUtility.m_loadingImageTime); SharedPreferences sp = mContext.getSharedPreferences( BUtility.m_loadingImageSp, Context.MODE_PRIVATE); Editor editor = sp.edit(); editor.putString(BUtility.m_loadingImagePath, path); editor.putLong(BUtility.m_loadingImageTime, time); editor.commit(); } catch (JSONException e) { if (BDebug.DEBUG) { e.printStackTrace(); } } } public void setWindowFrame(String[] parm) { if (isFirstParamExistAndIsJson(parm)){ WindowJsonWrapper.setWindowFrame(this, DataHelper.gson.fromJson(parm[0], WindowSetFrameVO.class)); }else{ setWindowFrameMsg(parm); } } public void setWindowFrameMsg(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } float scale = mBrwView.getScaleWrap(); String inX = parm[0]; String inY = parm[1]; String animDuration = parm[2]; int x = 0, y = 0, duration = 250; try { if (null != inX && inX.length() != 0) { x = (int) (Integer.valueOf(inX) * scale); } if (null != inY && inY.length() != 0) { y = (int) (Integer.valueOf(inY) * scale); } if (null != animDuration && animDuration.length() != 0) { duration = Integer.valueOf(animDuration); } } catch (Exception e) { errorCallback(0, EUExCallback.F_E_UEXWINDOW_EVAL, "Illegal parameter"); return; } curWind.setWindowFrame(x, y, duration); } public void close(String[] parm) { if (parm!=null&&parm.length>0&&isJsonString(parm[0])){ WindowJsonWrapper.close(this,DataHelper.gson.fromJson(parm[0], WindowAnimVO.class)); }else{ closeMsg(parm); } } public void exit(String[] parm) { int len = parm.length; boolean showDialog = !(len > 0 && "0".equals(parm[0])); ((EBrowserActivity) mContext).exitApp(showDialog); } public void closeMsg(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } if (mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP)) { curWind.closePopover(mBrwView.getName()); return; } if (mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_ADD)) { curWind.closeAd(); return; } if ("root".equals(mBrwView.getWindowName())) { ((EBrowserActivity) mContext).exitApp(true); return; } String inAnimitionID = null; String animDuration = null; switch (parm.length) { case 0: break; case 1: inAnimitionID = parm[0]; break; case 2: inAnimitionID = parm[0]; animDuration = parm[1]; break; } int animId = EBrowserAnimation.ANIM_ID_FILL; long duration = EBrowserAnimation.defaultDuration; try { if (null != inAnimitionID && inAnimitionID.length() != 0) { animId = Integer.parseInt(inAnimitionID); } if (null != animDuration && animDuration.length() != 0 && !animDuration.equals("undefined")) { duration = Long.parseLong(animDuration); } } catch (Exception e) { errorCallback(0, EUExCallback.F_E_UEXWINDOW_CLOSE, "Illegal parameter"); } curWind.onCloseWindow(animId, duration); } public void closeAboveWndByName(String[] parm) { String windowName = ""; if (parm.length > 0 && !TextUtils.isEmpty(parm[0])) { windowName = parm[0]; } Message msg = mHandler.obtainMessage(); msg.what = MSG_FUNCTION_CLOSE_ABOVE_WND_BY_NAME; msg.obj = this; Bundle b = new Bundle(); b.putString(TAG_BUNDLE_PARAM_NAME, windowName); msg.setData(b); mHandler.sendMessage(msg); } public void refresh(String[] params) { Message msg = mHandler.obtainMessage(); msg.what = MSG_FUNCTION_REFRESH; msg.obj = this; mHandler.sendMessage(msg); } public void reload(String[] params) { Message msg = mHandler.obtainMessage(); msg.what = MSG_FUNCTION_RELOAD; msg.obj = this; mHandler.sendMessage(msg); } public void openSlibing(String[] parm) { if(isFirstParamExistAndIsJson(parm)){ WindowJsonWrapper.openSlibing(this,DataHelper.gson.fromJson(parm[0], WindowOpenSlibingVO.class)); }else{ openSlibingMsg(parm); } } public void openSlibingMsg(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } float nowScale =mBrwView.getScaleWrap(); float sc = nowScale; String inType = parm[0]; String inDataType = parm[1]; String inUrl = parm[2]; String inData = parm[3]; String inWidth = parm[4]; String inHeight = parm[5]; int type = 0; int dataType = 0; int width = 0; int height = 0; try { type = Integer.parseInt(inType); dataType = Integer.parseInt(inDataType); width = parseWidth(inWidth); height = (int) (parseHeight(inHeight) * sc); } catch (Exception e) { errorCallback(0, EUExCallback.F_E_UEXWINDOW_OPENS, "Illegal parameter"); return; } String url = BUtility.makeUrl(mBrwView.getCurrentUrl(), inUrl); String query = null; if (Build.VERSION.SDK_INT >= 11) { if (url != null) { int index = url.indexOf("?"); if (index > 0) { query = url.substring(index + 1); if (!url.startsWith("http")) { url = url.substring(0, index); } } } } EBrwViewEntry slbEntry = new EBrwViewEntry(type); slbEntry.mQuery = query; slbEntry.mDataType = dataType; slbEntry.mUrl = url; slbEntry.mData = inData; slbEntry.mWidth = width; slbEntry.mHeight = height; curWind.createSibling(mBrwView, slbEntry); } public void showSlibing(String[] parm) { if (parm.length < 1) { return; } EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_SHOWSLIBING; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } public void showSlibingMsg(String[] parm) { String inType = parm[0]; int eType = 0; try { eType = Integer.parseInt(inType); } catch (Exception e) { errorCallback(0, EUExCallback.F_E_UEXWINDOW_SHOWS, "Illegal parameter"); return; } mBrwView.getBrowserWindow().showSlibing(eType); } public void closeSlibing(String[] parm) { if (parm.length < 1) { return; } EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_CLOSESLIBING; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } public void closeSlibingMsg(String[] parm) { String inType = parm[0]; int eType = 0; try { eType = Integer.parseInt(inType); } catch (Exception e) { errorCallback(0, EUExCallback.F_E_UEXWINDOW_CLOSES, "Illegal parameter"); return; } mBrwView.getBrowserWindow().closeSlibing(eType); } public void evaluateScript(String[] parm) { if (isFirstParamExistAndIsJson(parm)){ WindowJsonWrapper.evaluateScript(this, DataHelper.gson.fromJson(parm[0], WindowEvaluateScriptVO.class)); }else{ evaluateScriptMsg(parm); } } public void evaluateScriptMsg(String[] parm) { if (parm.length < 3) { return; } EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } String inWindowName = parm[0]; String inType = parm[1]; String inScript = parm[2]; int eType = 0; try { eType = Integer.parseInt(inType); } catch (Exception e) { errorCallback(0, EUExCallback.F_E_UEXWINDOW_EVAL, "Illegal parameter"); return; } curWind.evaluateScript(mBrwView, inWindowName, eType, SCRIPT_HEADER + inScript); } public void preOpenStart(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } curWind.clearPopQue(); } public void preOpenFinish(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } curWind.setFlag(EBrowserWindow.F_WINDOW_FLAG_OPPOP_END); } public void toggleSlidingWindow(String[] param) { if (param.length <= 0) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_TOGGLE_SLIDINGWIN; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, param); msg.setData(bd); mHandler.sendMessage(msg); } public void hanldeToggleSlidingWindow(String[] param) { try { JSONObject jsonObject = new JSONObject(param[0]); int isLeft = jsonObject.optInt("mark", 0); int isReload = jsonObject.optInt("reload", 0); EBrowserActivity activity = (EBrowserActivity) mContext; SlidingMenu slidingMenu = activity.globalSlidingMenu; if (slidingMenu.isMenuShowing()) { slidingMenu.toggle(); } else { if (isLeft == 0) { //left slidingMenu.showMenu(); if (isReload == 1) { EBrowserWindow leftWindow = (EBrowserWindow) slidingMenu.getMenu(); if (leftWindow != null) { leftWindow.refresh(); } } } else if (isLeft == 1) { // right slidingMenu.showSecondaryMenu(); if (isReload == 1) { EBrowserWindow rightWindow = (EBrowserWindow) slidingMenu.getSecondaryMenu(); if (rightWindow != null) { rightWindow.refresh(); } } } } } catch (Exception e) { } } @AppCanAPI public int getSlidingWindowState(String[] param) { EBrowserActivity activity = (EBrowserActivity) mContext; SlidingMenu slidingMenu = activity.globalSlidingMenu; if (slidingMenu != null) { int state = slidingMenu.getCurrentItem(); String js = "javascript:if(uexWindow.cbSlidingWindowState){uexWindow.cbSlidingWindowState(" + state + ");}"; mBrwView.addUriTask(js); return state; } return 1; } public void setSlidingWindowEnabled(String[] param) { if (param.length <= 0) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_SETSLIDINGWIN_ENABLE; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, param); msg.setData(bd); mHandler.sendMessage(msg); } public void hanldeSetSlidingWindowEnabled(String[] param) { try { int value = Integer.parseInt(param[0]); boolean enable = (value == 1) ? true : false; EBrowserActivity activity = (EBrowserActivity) mContext; activity.globalSlidingMenu.setSlidingEnabled(enable); } catch (Exception e) { } } public void setSlidingWindow(String[] param) { if (param.length <= 0) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_SETSLIDINGWIN; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, param); msg.setData(bd); mHandler.sendMessage(msg); } public void handleSetSlidingWin(String[] param) { WindowSetSlidingWindowVO slidingWindowVO = DataHelper.gson.fromJson(param[0], WindowSetSlidingWindowVO.class); EBrowserActivity activity = (EBrowserActivity) mContext; int with = 0; String url; int slidingMode = SlidingMenu.LEFT; boolean isAttach = false; View menuView; if (activity.globalSlidingMenu.getParent() != null) { return; } if (slidingWindowVO.leftSliding != null) { slidingMode = SlidingMenu.LEFT; with = slidingWindowVO.leftSliding.width; url = slidingWindowVO.leftSliding.url; if (with > 0) { activity.globalSlidingMenu.setBehindWidth(with); } menuView = LayoutInflater.from(mContext).inflate(finder.getLayoutId("menu_frame"), null); activity.globalSlidingMenu.setMenu(menuView); addBrowserWindowToSldingWin(url, EBrowserWindow.rootLeftSlidingWinName); isAttach = true; } if (slidingWindowVO.rightSliding != null) { slidingMode = SlidingMenu.RIGHT; with = slidingWindowVO.rightSliding.width; url = slidingWindowVO.rightSliding.url; if (with > 0) { activity.globalSlidingMenu.setBehindWidth(with); } menuView = LayoutInflater.from(mContext).inflate(finder.getLayoutId("menu_frame_two"), null); activity.globalSlidingMenu.setSecondaryMenu(menuView); activity.globalSlidingMenu.setSecondaryShadowDrawable(finder.getDrawable("shadowright")); addBrowserWindowToSldingWin(url, EBrowserWindow.rootRightSlidingWinName); isAttach = true; } if ("1".equals(slidingWindowVO.animationId)) { //仿QQ侧边栏动画 activity.globalSlidingMenu.setBehindCanvasTransformer(new SlidingMenu.CanvasTransformer() { @Override public void transformCanvas(Canvas canvas, float percentOpen) { float scale = (float) (percentOpen * 0.25 + 0.75); canvas.scale(scale, scale, 0, canvas.getHeight() / 2); } }); activity.globalSlidingMenu.setAboveCanvasTransformer(new SlidingMenu.CanvasTransformer() { @Override public void transformCanvas(Canvas canvas, float percentOpen) { float scale = (float) (1 - percentOpen * 0.20); canvas.scale(scale, scale, canvas.getWidth() / 2, canvas.getHeight() / 2); } }); activity.globalSlidingMenu.setFadeEnabled(false); } else { activity.globalSlidingMenu.setShadowWidthRes(EUExUtil.getResDimenID("shadow_width")); if (slidingWindowVO.leftSliding == null && slidingWindowVO.rightSliding != null) { activity.globalSlidingMenu.setShadowDrawable(EUExUtil.getResDrawableID("shadowright")); } else { activity.globalSlidingMenu.setShadowDrawable(EUExUtil.getResDrawableID("shadow")); } activity.globalSlidingMenu.setFadeDegree(0.35f); } String bg = slidingWindowVO.bg; if (!TextUtils.isEmpty(bg)) { setViewBackground(activity.globalSlidingMenu, bg, mBrwView.getCurrentWidget().m_indexUrl); } if (slidingWindowVO.rightSliding != null && slidingWindowVO.leftSliding != null) { slidingMode = SlidingMenu.LEFT_RIGHT; } if (isAttach) { activity.globalSlidingMenu.setMode(slidingMode); activity.globalSlidingMenu.attachToActivity(activity, SlidingMenu.SLIDING_CONTENT); mBrwView.setBackgroundColor(Color.TRANSPARENT); } } public void setViewBackground(View view, String bgColor, String baseUrl) { if (bgColor.startsWith("#") || bgColor.startsWith("rgb")) { int color = BUtility.parseColor(bgColor); view.setBackgroundColor(color); } else { String path = BUtility.makeRealPath(BUtility.makeUrl(mBrwView.getCurrentUrl(baseUrl), bgColor), mBrwView.getCurrentWidget().m_widgetPath, mBrwView.getCurrentWidget().m_wgtType); Bitmap bitmap = BUtility.getLocalImg(mContext, path); Drawable d = null; if (bitmap != null) { d = new BitmapDrawable(mContext.getResources(), bitmap); } int version = Build.VERSION.SDK_INT; if (version < 16) { view.setBackgroundDrawable(d); } else { view.setBackground(d); } } } public void addBrowserWindowToSldingWin(String url, String winName) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } String inWindowName = winName; String inData = url; String cUrl = mBrwView.getCurrentUrl(); boolean eq = curWind.getName().equals(inWindowName); if (eq) { return; } int dataType = 0; WWidgetData wgt = mBrwView.getCurrentWidget(); EBrwViewEntry windEntry = new EBrwViewEntry(EBrwViewEntry.VIEW_TYPE_MAIN); String data = null; if (EBrwViewEntry.isData(dataType)) { data = inData; } else { String wgtroot = "wgtroot://"; if (inData.startsWith(wgtroot)) { String initUrl = wgt.m_indexUrl; inData = inData.substring(wgtroot.length()); inData = BUtility.makeUrl(initUrl, inData); data = inData; } else { data = BUtility.makeUrl(cUrl, inData); } windEntry.mRelativeUrl = inData; } String query = null; if (Build.VERSION.SDK_INT >= 11) { if (EBrwViewEntry.isUrl(dataType) && data != null) { int index = data.indexOf("?"); if (index > 0) { query = data.substring(index + 1); if (!url.startsWith("http")) { data = data.substring(0, index); } } } } windEntry.mQuery = query; windEntry.mWindName = inWindowName; windEntry.mDataType = dataType; windEntry.mData = data; curWind.createSlidingWindow(windEntry); } public void openPopover(String[] parm) { if (isJsonString(parm[0])){ WindowOpenPopoverVO openVO=DataHelper.gson.fromJson(parm[0],WindowOpenPopoverVO.class); WindowJsonWrapper.openPopover(this,openVO); }else{ if (parm.length < 10) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_OPEN_POP; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); if (parm.length > 11) { //取第12个参数的延迟加载字段 long delay = 0l; try { JSONObject json = new JSONObject(parm[11]); JSONObject data = new JSONObject(json.getString(EBrwViewEntry.TAG_EXTRAINFO)); if (data.has(EBrwViewEntry.TAG_DELAYTIME)) { delay = Long.valueOf(data.getString(EBrwViewEntry.TAG_DELAYTIME)); } } catch (Exception e) { } mHandler.sendMessageDelayed(msg, delay); } else { mHandler.sendMessage(msg); } } } public void openPopoverMsg(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } float nowScale =mBrwView.getScaleWrap(); float sc = nowScale; String inPopName = parm[0]; String windPopName = curWind.getName() + inPopName; if (!checkWindPopPermission(windPopName)) { showPermissionDialog(windPopName); return; } String inDataType = parm[1]; String inUrl = parm[2]; String inData = parm[3]; String inX = parm[4]; String inY = parm[5]; String inWidth = parm[6]; String inHeight = parm[7]; String inFontSize = parm[8]; String inFlag = parm[9]; String marginBottom = null; if (parm.length > 10) { marginBottom = parm[10]; } boolean opaque = false; /*赋初值,避免不传bgColor崩溃*/ String bgColor = "#00000000"; boolean hasExtraInfo = false; int hardware = -1; int downloadCallback = 0; String userAgent = ""; if (parm.length > 11 && parm[11] != null) { String jsonData = parm[11]; try { JSONObject json = new JSONObject(jsonData); String extraInfo = json.getString(EBrwViewEntry.TAG_EXTRAINFO); JSONObject data = new JSONObject(extraInfo); if (data.has(WWidgetData.TAG_WIN_BG_OPAQUE)) { opaque = Boolean.valueOf(data.getString(WWidgetData.TAG_WIN_BG_OPAQUE)); hasExtraInfo = true; } if (data.has(WWidgetData.TAG_WIN_BG_COLOR)) { bgColor = data.getString(WWidgetData.TAG_WIN_BG_COLOR); hasExtraInfo = true; } hardware = data.optInt(KEY_HARDWARE, -1); if (hardware != -1) { hasExtraInfo = true; } downloadCallback = data.optInt(KEY_DOWNLOAD_CALLBACK, 0); userAgent = data.optString(KEY_USER_AGENT, ""); } catch (JSONException e) { e.printStackTrace(); } } int dType = 0; int x = 0; int y = 0; int w = -1; int h = -1; int fonts = 0; int flag = 0; int bottom = 0; if (null == inPopName || 0 == inPopName.length()) { errorCallback(0, EUExCallback.F_E_UEXWINDOW_EVAL, "Illegal parameter"); return; } try { if (null != inDataType && inDataType.length() != 0) { dType = Integer.valueOf(inDataType); } if (null != inX && inX.length() != 0) { x = (int) (Integer.valueOf(inX) * sc); } if (null != inY && inY.length() != 0) { y = (int) (Integer.valueOf(inY) * sc); } if (null != inWidth && inWidth.length() != 0 && !"0".equals(inWidth)) { w = (int) (Integer.valueOf(inWidth) * sc); } if (null != inHeight && inHeight.length() != 0 && !"0".equals(inHeight)) { h = (int) (Integer.valueOf(inHeight) * sc); } if (null != inFontSize && inFontSize.length() != 0) { fonts = Integer.valueOf(inFontSize); } if (null != inFlag && inFlag.length() != 0) { flag = Integer.valueOf(inFlag); } if (null != marginBottom && marginBottom.length() != 0 && !"0".equals(marginBottom)) { bottom = (int) (Integer.valueOf(marginBottom) * sc); } } catch (Exception e) { errorCallback(0, EUExCallback.F_E_UEXWINDOW_EVAL, "Illegal parameter"); return; } WWidgetData wgt = mBrwView.getCurrentWidget(); String url = null; if (null != inUrl) { String wgtroot = "wgtroot://"; if (inUrl.startsWith(wgtroot)) { String initUrl = wgt.m_indexUrl; inUrl = inUrl.substring(wgtroot.length()); inUrl = BUtility.makeUrl(initUrl, inUrl); url = inUrl; } else { url = BUtility.makeUrl(mBrwView.getCurrentUrl(), inUrl); } } EBrwViewEntry popEntry = new EBrwViewEntry(EBrwViewEntry.VIEW_TYPE_POP); popEntry.mRelativeUrl = inUrl; popEntry.mViewName = inPopName; popEntry.mDataType = dType; popEntry.mUrl = url; popEntry.mData = inData; popEntry.mX = x; popEntry.mY = y; popEntry.mWidth = w; if (bottom > 0) { h = -1; } popEntry.mHeight = h; popEntry.mFontSize = fonts; popEntry.mFlag = flag; popEntry.mBottom = bottom; popEntry.mOpaque = opaque; popEntry.mBgColor = bgColor; popEntry.mDownloadCallback = downloadCallback; popEntry.mUserAgent = userAgent; popEntry.mHardware = hardware; popEntry.hasExtraInfo = hasExtraInfo; String query = null; if (Build.VERSION.SDK_INT >= 11) { if (url != null && url.trim().length() != 0) { int index = url.indexOf("?"); if (index > 0) { query = url.substring(index + 1); if (!url.startsWith("http")) { url = url.substring(0, index); popEntry.mUrl = url; } } } } popEntry.mQuery = query; curWind.openPopover(popEntry); } public void closePopover(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_CLOSEPOPOVER; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } public void closePopoverMsg(String[] parm) { String inPopName = null; if (parm.length < 1) { inPopName = mBrwView.getName(); } else { inPopName = parm[0]; if (null == inPopName || 0 == inPopName.length()) { inPopName = mBrwView.getName(); } } mBrwView.getBrowserWindow().closePopover(inPopName); } public void setPopoverFrame(String[] parm) { if (isFirstParamExistAndIsJson(parm)){ WindowJsonWrapper.setPopoverFrame(this, DataHelper.gson.fromJson(parm[0],WindowSetPopoverFrameVO.class)); }else{ setPopoverFrameMsg(parm); } } public void setHardwareEnable(final String[] params) { ((Activity) mContext).runOnUiThread(new Runnable() { @Override public void run() { if (params != null && params.length > 0) { EBrowserWindow curWindow = mBrwView.getBrowserWindow(); int flag = Integer.parseInt(params[0]); curWindow.setWindowHWEnable(flag); } } }); } public void setPopHardwareEnable(final String[] params) { BDebug.i(params.toString()); ((Activity) mContext).runOnUiThread(new Runnable() { @Override public void run() { if (params != null && params.length > 1) { String popoverName = params[0]; int flag = Integer.parseInt(params[1]); EBrowserWindow curWindow = mBrwView.getBrowserWindow(); if (curWindow == null) { return; } curWindow.setPopoverHardwareEnable(popoverName, flag); } } }); } public void setPopoverFrameMsg(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } float nowScale =mBrwView.getScaleWrap(); float sc = nowScale; String inPopName = parm[0]; String inX = parm[1]; String inY = parm[2]; String inWidth = parm[3]; String inHeight = parm[4]; int x = 0, y = 0, w = -1, h = -1; try { if (null != inX && inX.length() != 0) { x = (int) (Integer.valueOf(inX) * sc); } if (null != inY && inY.length() != 0) { y = (int) (Integer.valueOf(inY) * sc); } if (null != inWidth && inWidth.length() != 0) { w = (int) (Integer.valueOf(inWidth) * sc); } if (null != inHeight && inHeight.length() != 0) { h = (int) (Integer.valueOf(inHeight) * sc); } } catch (Exception e) { errorCallback(0, EUExCallback.F_E_UEXWINDOW_EVAL, "Illegal parameter"); return; } curWind.setPopoverFrame(inPopName, x, y, w, h); } public void openMultiPopover(String[] parm) { if (isFirstParamExistAndIsJson(parm)&&parm.length<3){ //老的接口第一个参数也是json WindowJsonWrapper.openMultiPopover(this,DataHelper.gson.fromJson(parm[0], WindowOpenMultiPopoverVO.class)); return; } if (parm.length < 10) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_OPENMULTIPOPOVER; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); if (parm.length > 10) { //取第11个参数的延迟加载字段 long delay = 0l; try { JSONObject json = new JSONObject(parm[10]); JSONObject data = new JSONObject(json.getString(EBrwViewEntry.TAG_EXTRAINFO)); if (data.has(EBrwViewEntry.TAG_DELAYTIME)) { delay = Long.valueOf(data.getString(EBrwViewEntry.TAG_DELAYTIME)); } } catch (Exception e) { } mHandler.sendMessageDelayed(msg, delay); } else { mHandler.sendMessage(msg); } } public void openMultiPopoverMsg(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } WWidgetData wgt = mBrwView.getCurrentWidget(); ArrayList<EBrwViewEntry> popEntrys = new ArrayList<EBrwViewEntry>(); EBrwViewEntry mainPopEntry = new EBrwViewEntry(EBrwViewEntry.VIEW_TYPE_POP); float nowScale =mBrwView.getScaleWrap(); String inContent = parm[0]; String inMultiPopName = parm[1]; // 父节点属性, String inDataType = parm[2]; String inX = parm[3]; String inY = parm[4]; String inWidth = parm[5]; String inHeight = parm[6]; String inFontSize = parm[7]; String inFlag = parm[8]; String inIndexSelect = parm[9]; boolean opaque = false; /*赋初值,避免不传bgColor崩溃*/ String bgColor = "#00000000"; boolean hasExtraInfo = false; int mainDownloadCallback = 0; if (parm.length > 10&&parm[10]!=null) { String jsonData = parm[10]; try { JSONObject json = new JSONObject(jsonData); String extraInfo = json.getString(EBrwViewEntry.TAG_EXTRAINFO); JSONObject data = new JSONObject(extraInfo); if (data.has(WWidgetData.TAG_WIN_BG_OPAQUE)) { opaque = Boolean.valueOf(data.getString(WWidgetData.TAG_WIN_BG_OPAQUE)); hasExtraInfo = true; } if (data.has(WWidgetData.TAG_WIN_BG_COLOR)) { bgColor = data.getString(WWidgetData.TAG_WIN_BG_COLOR); hasExtraInfo = true; } mainDownloadCallback = data.optInt(KEY_DOWNLOAD_CALLBACK, 0); } catch (JSONException e) { e.printStackTrace(); } } String windPopName = curWind.getName() + inMultiPopName; if (!checkWindPopPermission(windPopName)) { showPermissionDialog(windPopName); return; } int dType = 0; int x = 0; int y = 0; int w = -1; int h = -1; int fonts = 0; int flag = 0; int indexSelect = 0; String[] childUrl = null; try { if (null == inMultiPopName || 0 == inMultiPopName.length()) { errorCallback(0, EUExCallback.F_E_UEXWINDOW_EVAL, "Illegal parameter"); return; } if (null != inDataType && inDataType.length() != 0) { dType = Integer.valueOf(inDataType); } if (null != inX && inX.length() != 0) { x = (int) (Integer.valueOf(inX) * nowScale); } if (null != inY && inY.length() != 0) { y = (int) (Integer.valueOf(inY) * nowScale); } if (null != inWidth && inWidth.length() != 0 && !"0".equals(inWidth)) { w = (int) (Integer.valueOf(inWidth) * nowScale); } if (null != inHeight && inHeight.length() != 0 && !"0".equals(inHeight)) { h = (int) (Integer.valueOf(inHeight) * nowScale); } if (null != inFontSize && inFontSize.length() != 0) { fonts = Integer.valueOf(inFontSize); } if (null != inFlag && inFlag.length() != 0) { flag = Integer.valueOf(inFlag); } if (null != inIndexSelect && inIndexSelect.length() != 0) { indexSelect = Integer.valueOf(inIndexSelect); } mainPopEntry.mViewName = inMultiPopName; mainPopEntry.mDataType = dType; mainPopEntry.mX = x; mainPopEntry.mY = y; mainPopEntry.mWidth = w; mainPopEntry.mHeight = h; mainPopEntry.mFontSize = fonts; mainPopEntry.mFlag = flag; mainPopEntry.mOpaque = opaque; mainPopEntry.mBgColor = bgColor; mainPopEntry.mDownloadCallback = mainDownloadCallback; mainPopEntry.hasExtraInfo = hasExtraInfo; popEntrys.add(mainPopEntry); JSONObject content = new JSONObject(inContent); JSONArray jsonContent = content.getJSONArray("content"); int j = jsonContent.length(); Log.d("multi", "jsonContent num:" + j); if (indexSelect < 0 || indexSelect >= j) { indexSelect = 0; Log.e("multi", "indexSelect is " + indexSelect + ", jsonContent num:" + j); } childUrl = new String[j]; for (int i = 0; i < jsonContent.length(); i++) { EBrwViewEntry popEntry = new EBrwViewEntry( EBrwViewEntry.VIEW_TYPE_POP); boolean opaque1 = false; /**赋初值,避免不传bgColor崩溃*/ String bgColor1 = "#00000000"; boolean hasExtraInfo1 = false; int popDownloadCallback = 0; String userAgent = ""; if (jsonContent.getJSONObject(i).has(EBrwViewEntry.TAG_EXTRAINFO)) { try { String extraInfo = jsonContent.getJSONObject(i).getString(EBrwViewEntry.TAG_EXTRAINFO); JSONObject data = new JSONObject(extraInfo); if (data.has(WWidgetData.TAG_WIN_BG_OPAQUE)) { opaque1 = Boolean.valueOf(data.getString(WWidgetData.TAG_WIN_BG_OPAQUE)); hasExtraInfo1 = true; } if (data.has(WWidgetData.TAG_WIN_BG_COLOR)) { bgColor1 = data.getString(WWidgetData.TAG_WIN_BG_COLOR); hasExtraInfo1 = true; } popDownloadCallback = data.optInt(KEY_DOWNLOAD_CALLBACK, 0); userAgent = data.optString(KEY_USER_AGENT, ""); } catch (JSONException e) { e.printStackTrace(); } } popEntry.mOpaque = opaque1; popEntry.mBgColor = bgColor1; popEntry.hasExtraInfo = hasExtraInfo1; popEntry.mDownloadCallback = popDownloadCallback; popEntry.mUserAgent = userAgent; popEntry.mViewName = jsonContent.getJSONObject(i).getString( "inPageName"); childUrl[i] = jsonContent.getJSONObject(i).getString("inUrl"); popEntry.mData = jsonContent.getJSONObject(i).getString( "inData"); popEntry.mFlag = jsonContent.getJSONObject(i).optInt( "flag"); if (null == popEntry.mViewName || popEntry.mViewName.length() == 0) { popEntry.mViewName = i + "";// 如果没有命名,则自动以序号作为命名 } if (null != childUrl[i]) { String wgtroot = "wgtroot://"; if (childUrl[i].startsWith(wgtroot)) { String initUrl = wgt.m_indexUrl; childUrl[i] = childUrl[i].substring(wgtroot.length()); childUrl[i] = BUtility.makeUrl(initUrl, childUrl[i]); } else { childUrl[i] = BUtility.makeUrl(mBrwView.getCurrentUrl(), childUrl[i]); } popEntry.mRelativeUrl = childUrl[i]; popEntry.mUrl = childUrl[i]; String query = null; if (Build.VERSION.SDK_INT >= 11) { if (childUrl[i] != null && childUrl[i].trim().length() != 0) { int index = childUrl[i].indexOf("?"); if (index > 0) { query = childUrl[i].substring(index + 1); if (!childUrl[i].startsWith("http")) { childUrl[i] = childUrl[i].substring(0, index); popEntry.mUrl = childUrl[i]; } } } } popEntry.mQuery = query; } popEntry.mDataType = dType; popEntry.mX = x; popEntry.mY = y; popEntry.mWidth = w; popEntry.mHeight = h; popEntry.mFontSize = fonts; popEntrys.add(popEntry); } Log.d("multi", "popEntrys num:" + popEntrys.size()); } catch (Exception e) { if (BDebug.DEBUG){ e.printStackTrace(); } errorCallback(0, EUExCallback.F_E_UEXWINDOW_EVAL, "Illegal parameter"); return; } curWind.openMultiPopover(this, popEntrys, indexSelect); } public void setSelectedPopOverInMultiWindow(String[] parm) { if (isFirstParamExistAndIsJson(parm)){ WindowJsonWrapper.setSelectedPopOverInMultiWindow(this, DataHelper.gson.fromJson(parm[0], WindowSetMultiPopoverSelectedVO.class)); } if (parm == null || parm.length < 2) { errorCallback(0, EUExCallback.F_E_UEXWINDOW_EVAL, "Illegal parameter"); return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_SETSELECTEDPOPOVERINMULTIWINDOW; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } public void setSelectedPopOverInMultiWindowMsg(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } String name = parm[0]; int index = Integer.valueOf(parm[1]); curWind.setSelectedPopOverInMultiWindow(name, index); } public void closeMultiPopover(String[] parm) { if (parm == null || parm.length < 1) { errorCallback(0, EUExCallback.F_E_UEXWINDOW_EVAL, "Illegal parameter"); return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_CLOSEMULTIPOPOVER; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } public void closeMultiPopoverMsg(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } String multiPopName = parm[0]; curWind.closeMultiPopover(multiPopName); } public void setMultiPopoverFrame(String[] parm) { if (isFirstParamExistAndIsJson(parm)){ WindowJsonWrapper.setMultiPopoverFrame(this,DataHelper.gson.fromJson(parm[0], WindowSetMultiPopoverFrameVO.class)); return; } if (parm.length < 5) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_SETMULTIPOPOVERFRAME; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } public void setMultiPopoverFrameMsg(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } float nowScale =mBrwView.getScaleWrap(); String inPopName = parm[0]; String inX = parm[1]; String inY = parm[2]; String inWidth = parm[3]; String inHeight = parm[4]; int x = 0, y = 0, w = -1, h = -1; try { if (null != inX && inX.length() != 0) { x = (int) (Integer.valueOf(inX) * nowScale); } if (null != inY && inY.length() != 0) { y = (int) (Integer.valueOf(inY) * nowScale); } if (null != inWidth && inWidth.length() != 0) { w = (int) (Integer.valueOf(inWidth) * nowScale); } if (null != inHeight && inHeight.length() != 0) { h = (int) (Integer.valueOf(inHeight) * nowScale); } } catch (Exception e) { errorCallback(0, EUExCallback.F_E_UEXWINDOW_EVAL, "Illegal parameter"); return; } curWind.setMultiPopoverFrame(inPopName, x, y, w, h); } public void evaluateMultiPopoverScript(String[] parm) { if (isFirstParamExistAndIsJson(parm)){ WindowJsonWrapper.evaluateMultiPopoverScript(this, DataHelper.gson.fromJson(parm[0], WindowEvaluateMultiPopoverScriptVO.class)); return; } if (parm.length < 4) { return; } EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } String inWndName = parm[0]; String inMultiPopName = parm[1]; String inPopName = parm[2]; String inScript = parm[3]; curWind.evaluateMultiPopoverScript(mBrwView, inWndName, inMultiPopName, inPopName, SCRIPT_HEADER + inScript); } public void evaluatePopoverScript(String[] parm) { if (isFirstParamExistAndIsJson(parm)){ WindowJsonWrapper.evaluatePopoverScript(this, DataHelper.gson.fromJson(parm[0], WindowEvaluatePopoverScriptVO.class)); return; } if (parm.length < 3) { return; } EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } String inWndName = parm[0]; String inPopName = parm[1]; String inScript = parm[2]; curWind.evaluatePopoverScript(mBrwView, inWndName, inPopName, SCRIPT_HEADER + inScript); } public void bringToFront(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP)) { return; } EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_BRINGTOFRONT; mHandler.sendMessage(msg); } public void sendToBack(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP)) { return; } EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_SENDTOBACK; mHandler.sendMessage(msg); } public void insertAbove(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP) || parm.length < 1) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_INSERTABOVE; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } public void insertAboveMsg(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } String popName = parm[0]; curWind.insertAbove(mBrwView, popName); } public void insertBelow(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP) || parm.length < 1) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_INSERTBELOW; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } public void insertBelowMsg(String[] parm) { String popName = parm[0]; mBrwView.getBrowserWindow().insertBelow(mBrwView, popName); } public void insertPopoverAbovePopover(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_MAIN) || parm.length < 2) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_INSERTPOPOVERABOVEPOPOVER; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } public void insertPopoverAbovePopoverMsg(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } String popName1 = parm[0]; String popName2 = parm[1]; curWind.insertPopoverAbovePopover(popName1, popName2); } public void insertPopoverBelowPopover(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_MAIN) || parm.length < 2) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_INSERTPOPOVERBELOWPOPOVER; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } public void insertPopoverBelowPopoverMsg(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } String popName1 = parm[0]; String popName2 = parm[1]; curWind.insertPopoverBelowPopover(popName1, popName2); } @AppCanAPI public boolean setPopoverVisibility(String[] params) { String popName = params[0]; int visible = Integer.parseInt(params[1]); EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { BDebug.e("curWind is null"); return false; } return curWind.setPopoverVisibility(popName, visible); } public void bringPopoverToFront(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_MAIN) || parm.length < 1) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_BRINGPOPOVERTOFRONT; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } public void bringPopoverToFrontMsg(String[] parm) { String popName = parm[0]; EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } curWind.bringPopoverToFront(popName); } public void sendPopoverToBack(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_MAIN) || parm.length < 1) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_SENDPOPOVERTOBACK; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } public void sendPopoverToBackMsg(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } String popName = parm[0]; curWind.sendPopoverToBack(popName); } public void insertWindowAboveWindow(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_MAIN) || parm.length < 2) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_INSERTWINDOWABOVEWINDOW; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } public void insertWindowAboveWindowMsg(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } EBrowserWidget curWgt = curWind.getEBrowserWidget(); String wName1 = parm[0]; String wName2 = parm[1]; curWgt.insertWindowAboveWindow(wName1, wName2); } public void insertWindowBelowWindow(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_MAIN) || parm.length < 2) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_INSERTWINDOWBELOWWINDOW; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } public void insertWindowBelowWindowMsg(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } EBrowserWidget curWgt = curWind.getEBrowserWidget(); String wName1 = parm[0]; String wName2 = parm[1]; curWgt.insertWindowBelowWindow(wName1, wName2); } public void setWindowHidden(String[] params) { if (params == null || params.length < 1) { errorCallback(0, 0, "error params!"); return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_SET_WINDOW_HIDDEN; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, params); msg.setData(bd); mHandler.sendMessage(msg); } public void setWindowHiddenMsg(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } int flag = 0; boolean curPopOver = false; String popName = null; if (mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP)) { curPopOver = true; popName = mBrwView.getName(); } try { flag = Integer.parseInt(parm[0]); } catch (Exception e) { e.printStackTrace(); } EViewEntry entry = new EViewEntry(); entry.bArg1 = curPopOver; entry.arg1 = popName; entry.flag = flag; curWind.setWindowHidden(entry); } public void beginAnimition(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP)) { return; } mBrwView.beginAnimition(); } public void setAnimitionDelay(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP)) { return; } long delay = 0; try { if (parm[0] != null && parm[0].length() > 0) { delay = Long.parseLong(parm[0]); } } catch (Exception e) { ; } mBrwView.setAnimitionDelay(delay); } public void setAnimitionDuration(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP)) { return; } long duration = 250; try { if (parm[0] != null && parm[0].length() > 0) { duration = Long.parseLong(parm[0]); } } catch (Exception e) { ; } mBrwView.setAnimitionDuration(duration); } public void setAnimitionCurve(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP)) { return; } int curve = 0; try { if (parm[0] != null && parm[0].length() > 0) { curve = Integer.parseInt(parm[0]); } } catch (Exception e) { ; } mBrwView.setAnimitionCurve(curve); } public void setAnimitionRepeatCount(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP)) { return; } int count = 0; try { if (parm[0] != null && parm[0].length() > 0) { count = Integer.parseInt(parm[0]); } } catch (Exception e) { ; } mBrwView.setAnimitionRepeatCount(count); } public void setAnimitionAutoReverse(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP)) { return; } boolean auto = false; try { if (parm[0] != null && parm[0].length() > 0) { int value = Integer.parseInt(parm[0]); auto = value == 0 ? false : true; } } catch (Exception e) { ; } mBrwView.setAnimitionAutoReverse(auto); } public void makeTranslation(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP)) { return; } float tx = 0, ty = 0, tz = 0; try { if (parm[0] != null && parm[0].length() > 0) { tx = Float.parseFloat(parm[0]); } if (parm[1] != null && parm[1].length() > 0) { ty = Float.parseFloat(parm[1]); } if (parm[2] != null && parm[2].length() > 0) { tz = Float.parseFloat(parm[2]); } } catch (Exception e) { ; } float nowScale =mBrwView.getScaleWrap(); tx = tx * nowScale; ty = ty * nowScale; mBrwView.makeTranslation(tx, ty, tz); } public void makeScale(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP)) { return; } float tx = 1.0f, ty = 1.0f, tz = 1.0f; try { if (parm[0] != null && parm[0].length() > 0) { float x = Float.parseFloat(parm[0]); if (x != 0) { tx = x; } } if (parm[1] != null && parm[1].length() > 0) { float y = Float.parseFloat(parm[1]); if (y != 0) { ty = y; } } if (parm[2] != null && parm[2].length() > 0) { float z = Float.parseFloat(parm[2]); if (z != 0) { tz = z; } } } catch (Exception e) { ; } mBrwView.makeScale(tx, ty, tz); } public void makeRotate(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP)) { return; } float fd = 0, px = 0, py = 0, pz = 0; try { if (parm[0] != null && parm[0].length() > 0) { fd = Float.parseFloat(parm[0]); } if (parm[1] != null && parm[1].length() > 0) { px = Float.parseFloat(parm[1]); } if (parm[2] != null && parm[2].length() > 0) { py = Float.parseFloat(parm[2]); } if (parm[3] != null && parm[3].length() > 0) { pz = Float.parseFloat(parm[3]); } } catch (Exception e) { ; } mBrwView.makeRotate(fd, px, py, pz); } public void makeAlpha(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP)) { return; } float fa = 0; try { if (parm[0] != null && parm[0].length() > 0) { fa = Float.parseFloat(parm[0]); } } catch (Exception e) { e.printStackTrace(); } mBrwView.makeAlpha(fa); } public void commitAnimition(String[] parm) { if (!mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP)) { return; } mBrwView.commitAnimition(); } public void openAd(String[] params) { if (params == null || params.length < 4) { errorCallback(0, 0, "error params!"); return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_OPEN_AD; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, params); msg.setData(bd); mHandler.sendMessage(msg); } public void openAdMsg(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } WWidgetData wd = mBrwView.getCurrentWidget(); boolean b1 = mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_MAIN); boolean b2 = 0 == wd.m_widgetAdStatus; boolean b3 = parm.length < 4; if (!b1 || b2 || b3) { // 0 means do not show ad return; } String inType = parm[0]; String inDTime = parm[1]; String inInterval = parm[2]; String inFlag = parm[3]; int type = 0, flag = 0, dtime = 0, interval = 0, w = RelativeLayout.LayoutParams.FILL_PARENT, h = 50; MessageDigest md = null; int density = ESystemInfo.getIntence().mDensityDpi; switch (density) { case DisplayMetrics.DENSITY_LOW: h = 40; break; case DisplayMetrics.DENSITY_MEDIUM: h = 50; break; case DisplayMetrics.DENSITY_HIGH: h = 60; break; case 320: // DisplayMetrics.DENSITY_XHIGH from 2.3.3 h = 70; break; } try { if (null != inType && inType.length() != 0) { type = Integer.parseInt(inType); } if (null != inDTime && inDTime.length() != 0) { dtime = Integer.parseInt(inDTime); } if (null != inInterval && inInterval.length() != 0) { interval = Integer.parseInt(inInterval); } if (null != inFlag && inFlag.length() != 0) { flag = Integer.parseInt(inFlag); } md = MessageDigest.getInstance("MD5"); } catch (Exception e) { errorCallback(0, EUExCallback.F_E_UEXWINDOW_EVAL, "Illegal parameter"); return; } StringBuffer sb = new StringBuffer(m_AdUrl); sb.append("?appid="); sb.append(wd.m_appId); sb.append("&pt=1"); sb.append("&dw="); sb.append(ESystemInfo.getIntence().mWidthPixels); sb.append("&dh="); sb.append(ESystemInfo.getIntence().mHeightPixels); sb.append("&md5="); if (null == md) { return; } String jid = wd.m_appId + "BD7463CD-D608-BEB4-C633-EF3574213060"; md.reset(); md.update(jid.getBytes()); byte[] md5Bytes = md.digest(); StringBuffer hexValue = new StringBuffer(); for (int i = 0; i < md5Bytes.length; i++) { int val = ((int) md5Bytes[i]) & 0xff; if (val < 16) hexValue.append("0"); hexValue.append(Integer.toHexString(val)); } sb.append(hexValue); sb.append("&type="); if (type == 1) { sb.append(1); h = w; } else { sb.append(0); } String url = sb.toString(); curWind.openAd(type, url, dtime * 1000, h, w, interval * 1000, flag); } public void loadObfuscationData(String[] parm) { if (parm.length < 1) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_LOADOBFUSCATIONDATA; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } public void loadObfuscationDataMsg(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } String inUrl = parm[0]; curWind.onLoadObfuscationData(inUrl); } public void back(String[] parm) { if (mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP)) { return; } EBrowserWindow wind = mBrwView.getBrowserWindow(); if (null == wind) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_BACK; mHandler.sendMessage(msg); } public void forward(String[] parm) { if (mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP)) { return; } EBrowserWindow wind = mBrwView.getBrowserWindow(); if (null == wind) { return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_FORWARD; mHandler.sendMessage(msg); } @AppCanAPI public boolean pageBack(String[] parm) { int state = 1; boolean can = mBrwView.canGoBack(); state = can ? 0 : 1; if (can) { Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_PAGEBACK; mHandler.sendMessage(msg); } jsCallback(function_pageBack, 0, EUExCallback.F_C_INT, state); // if (mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP)) { // return; // } // EBrowserWindow wind = mBrwView.getBrowserWindow(); // if(null == wind){ // return; // } // wind.goBack(); return can; } @AppCanAPI public boolean pageForward(String[] parm) { int state = 1; boolean can = mBrwView.canGoForward(); state = can ? 0 : 1; if (can) { Message msg = new Message(); msg.obj = this; msg.what = MSG_FUNCTION_PAGEFORWARD; mHandler.sendMessage(msg); } jsCallback(function_pageForward, 0, EUExCallback.F_C_INT, state); // if (mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP)) { // return; // } // EBrowserWindow wind = mBrwView.getBrowserWindow(); // if(null == wind){ // return; // } // wind.goForward(); return can; } public void setReportKey(String[] parm) { if (parm.length < 2) { return; } EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } String inKeyCode = parm[0]; String inEnable = parm[1]; try { int code = Integer.parseInt(inKeyCode); int is = Integer.parseInt(inEnable); boolean flag = false; if (is == EUExCallback.F_C_TRUE) { flag = true; } if (EUExCallback.F_C_Key_Back == code) { curWind.setLockBackKey(flag); } else if (EUExCallback.F_C_Key_Menu == code) { curWind.setLockMenuKey(flag); } } catch (Exception e) { errorCallback(0, EUExCallback.F_E_UEXWINDOW_SETKEY, "Illegal parameter"); return; } } public void setSwipeRate(String[] param) { if (param.length < 1) { return; } String slop = param[0]; int swipe = -1; try { swipe = Integer.parseInt(slop); } catch (Exception e) { ; } if (swipe > 0) { ESystemInfo.getIntence().mSwipeRate = swipe; } } public void setSwipeCloseEnable(String[] param) { SetSwipeCloseEnableVO input = DataHelper.gson.fromJson(param[0], SetSwipeCloseEnableVO.class); if (input != null) { EBrowserWindow curWindow = mBrwView.getBrowserWindow(); curWindow.setSwipeEnabled(input.getEnable() == 1); } } public void windowBack(String[] parm) { if (isFirstParamExistAndIsJson(parm)){ WindowJsonWrapper.windowBack(this,DataHelper.gson.fromJson(parm[0],WindowAnimVO.class)); }else{ windowBackMsg(parm); } } public void windowBackMsg(String[] parm) { String inAnimitionID = null; String animDuration = null; switch (parm.length) { case 0: break; case 1: inAnimitionID = parm[0]; break; case 2: inAnimitionID = parm[0]; animDuration = parm[1]; break; } int animId = EBrowserAnimation.ANIM_ID_FILL; long duration = EBrowserAnimation.defaultDuration; try { if (null != inAnimitionID && inAnimitionID.length() != 0) { animId = Integer.parseInt(inAnimitionID); } if (null != animDuration && animDuration.length() != 0) { duration = Long.parseLong(animDuration); } } catch (Exception e) { errorCallback(0, EUExCallback.F_E_UEXWINDOW_WBACK, "Illegal parameter"); return; } mBrwView.getBrowserWindow().windowGoBack(animId, duration); } public void putLocalData(String[] params) { boolean isSession=false; if (params.length>2){ isSession=Boolean.valueOf(params[2]); } SpManager.getInstance().putString(params[0],params[1],isSession); } @AppCanAPI public String getLocalData(String[] params) { boolean isSession=false; if (params.length>2){ isSession=Boolean.valueOf(params[2]); } return SpManager.getInstance().getString(params[0], "",isSession); } public void windowForward(String[] params) { if (isFirstParamExistAndIsJson(params)){ WindowJsonWrapper.windowForward(this,DataHelper.gson.fromJson(params[0], WindowAnimVO.class)); }else{ windowForwardMsg(params); } } public void windowForwardMsg(String[] parm) { String inAnimitionID = null; String animDuration = null; switch (parm.length) { case 0: break; case 1: inAnimitionID = parm[0]; break; case 2: inAnimitionID = parm[0]; animDuration = parm[1]; break; } int animId = EBrowserAnimation.ANIM_ID_NONE; long duration = EBrowserAnimation.defaultDuration; try { if (null != inAnimitionID && inAnimitionID.length() != 0) { animId = Integer.parseInt(inAnimitionID); } if (null != animDuration && animDuration.length() != 0) { duration = Long.parseLong(animDuration); } } catch (Exception e) { errorCallback(0, EUExCallback.F_E_UEXWINDOW_WFORWARD, "Illegal parameter"); return; } mBrwView.getBrowserWindow().windowGoForward(animId, duration); } @AppCanAPI public int getBounce(String[] parm) { return mBrwView.getBounce(); } public void setBounce(String[] parm) { if (parm.length < 1) { return; } int isBounce = 0; try { isBounce = Integer.parseInt(parm[0]); } catch (Exception e) { ; } mBrwView.setBounce(isBounce); } public void notifyBounceEvent(String[] parm) { if (parm.length < 2) { return; } String inType = parm[0]; String inStatus = parm[1]; int type = 0; int status = 0; try { type = Integer.parseInt(inType); status = Integer.parseInt(inStatus); } catch (Exception e) { return; } mBrwView.notifyBounceEvent(type, status); } @AppCanAPI public String getWindowName(String[] params){ return mBrwView.getWindowName(); } @AppCanAPI public String getWebViewKernelInfo(String[] params){ return mBrwView.getWebViewKernelInfo(); } public void showBounceView(String[] parm) { if (isJsonString(parm[0])){ WindowJsonWrapper.showBounceView(this,DataHelper.gson.fromJson(parm[0], WindowShowBounceViewVO.class)); return; } if (parm.length < 3) { return; } String inType = parm[0]; String inColor = parm[1]; String inFlag = parm[2]; int type = 0; int flag = 0; try { type = Integer.parseInt(inType); flag = Integer.parseInt(inFlag); } catch (Exception e) { return; } mBrwView.showBounceView(type, inColor, flag); } public void resetBounceView(String[] parm) { if (parm.length < 1) { return; } String inType = parm[0]; int type = 0; try { type = Integer.parseInt(inType); } catch (Exception e) { return; } mBrwView.resetBounceView(type); } public void setBounceParams(String[] parm) { if (parm.length < 2) { return; } String inType = parm[0]; String inJson = parm[1]; String inGuestId = null; if (3 == parm.length) { inGuestId = parm[2]; } int type = -1; JSONObject json = null; try { type = Integer.parseInt(inType); json = new JSONObject(inJson); } catch (Exception e) { return; } mBrwView.setBounceParams(type, json, inGuestId); } public void hiddenBounceView(String[] parm) { if (parm.length < 1) { return; } String inType = parm[0]; int type = 0; try { type = Integer.parseInt(inType); } catch (Exception e) { return; } mBrwView.hiddenBounceView(type); } public void topBounceViewRefresh(String[] parm) { mBrwView.topBounceViewRefresh(); } public void alert(String[] parm) { if (isFirstParamExistAndIsJson(parm)){ WindowJsonWrapper.alert(this,DataHelper.gson.fromJson(parm[0], WindowAlertVO.class)); return; } if (parm.length < 3) { return; } EBrowserWindow wind = mBrwView.getBrowserWindow(); if (null == wind) { return; } String inTitle = parm[0]; String inMessage = parm[1]; String inButtonLable = parm[2]; EDialogTask task = new EDialogTask(); task.type = EDialogTask.F_TYPE_ALERT; task.title = inTitle; task.msg = inMessage; task.defaultValue = inButtonLable; task.mUexWind = this; wind.addDialogTask(task); } public void confirm(String[] parm) { if (isFirstParamExistAndIsJson(parm)){ WindowJsonWrapper.confirm(this,DataHelper.gson.fromJson( parm[0], WindowConfirmVO.class ),parm.length>1?parm[1]:null); return; } if (parm.length < 3) { return; } String inTitle = parm[0]; String inMessage = parm[1]; String[] inButtonLable = parm[2].split(","); EDialogTask task = new EDialogTask(); task.type = EDialogTask.F_TYPE_CONFIRM; task.title = inTitle; task.msg = inMessage; task.buttonLables = inButtonLable; task.mUexWind = this; task.callbackId=parm.length>3?parm[3]:null; mBrwView.getBrowserWindow().addDialogTask(task); } public void prompt(String[] parm) { WindowPromptVO promptVO=null; int mode=0; String inTitle ; String inMessage ; String inDefaultValue ; String[] inButtonLables; String hint = null; String callbackId = null; if (isFirstParamExistAndIsJson(parm)){ promptVO=DataHelper.gson.fromJson( parm[0], WindowPromptVO.class ); inTitle=promptVO.title; inMessage=promptVO.message; inDefaultValue=promptVO.defaultValue; inButtonLables=promptVO.buttonLabels.split(","); hint=promptVO.hint; mode=promptVO.mode; if (parm.length>1) { callbackId = parm[1]; } }else{ inTitle = parm[0]; inMessage = parm[1]; inDefaultValue = parm[2]; inButtonLables = parm[3].split(","); if (parm.length>4) { hint =parm[4]; } } EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } EDialogTask task = new EDialogTask(); task.type = EDialogTask.F_TYPE_PROMPT; task.title = inTitle; task.msg = inMessage; task.mode=mode; task.defaultValue = inDefaultValue; task.buttonLables = inButtonLables; task.hint =hint; task.callbackId=callbackId; task.mUexWind = this; curWind.addDialogTask(task); } public void toast(String[] parm) { if (isFirstParamExistAndIsJson(parm)){ WindowJsonWrapper.toast(this,DataHelper.gson.fromJson(parm[0], WindowToastVO.class)); }else{ toastMsg(parm); } } public void toastMsg(String[] parm) { String inType = parm[0]; String inLocation = parm[1]; String inMsg = parm[2]; String inDuration = parm[3]; int type = 0; int location = 0; int duration = 0; try { type = Integer.parseInt(inType); location = Integer.parseInt(inLocation); if (null != inDuration && 0 != inDuration.length()) { duration = Integer.parseInt(inDuration); } } catch (Exception e) { errorCallback(0, EUExCallback.F_E_UEXWINDOW_TOAST, "Illegal parameter"); } mBrwView.getBrowserWindow().toast(type, location, inMsg, duration); } public void closeToast(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } curWind.closeToast(); } @AppCanAPI public int getState(String[] parm) { int state = mBrwView.getBrowserWindow().isShown() ? 0 : 1; jsCallback(function_getState, 0, EUExCallback.F_C_INT, state); return state; } @AppCanAPI public String getUrlQuery(String[] parm) { String query = mBrwView.getQuery(); jsCallback(function_getQuery, 0, EUExCallback.F_C_TEXT, query); return query; } public void private_alert(String inTitle, String inMessage, String inButtonLable) { /*if (!((EBrowserActivity) mContext).isVisable()) { return; }*/ if (null != mAlert) { return; } try { AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setTitle(inTitle); builder.setMessage(inMessage); builder.setCancelable(false); builder.setPositiveButton(inButtonLable, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); mAlert = null; } }); mAlert = builder.show(); } catch (Exception e) { e.printStackTrace(); } } public void private_confirm(String inTitle, String inMessage, String[] inButtonLable,String callbackIdStr) { /*if (!((EBrowserActivity) mContext).isVisable()) { return; }*/ if (inButtonLable == null) { return; } //修复:多个appcan.window.alert()同时执行时,只会弹出一次的问题 // if (null != mConfirm) { // return; // } final int callbackId=valueOfCallbackId(callbackIdStr); try { int length = inButtonLable.length; if (length > 0 && length <= 3) { mConfirm = new AlertDialog.Builder(mContext); mConfirm.setTitle(inTitle); mConfirm.setMessage(inMessage); mConfirm.setCancelable(false); switch (length) { case 1: mConfirm.setPositiveButton(inButtonLable[0], new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { resultConfirmResult(0,callbackId); dialog.dismiss(); mConfirm = null; } }).show(); break; case 2: mConfirm.setPositiveButton(inButtonLable[0], new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { resultConfirmResult(0,callbackId); dialog.dismiss(); mConfirm = null; } }) .setNegativeButton(inButtonLable[1], new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { resultConfirmResult(1,callbackId); dialog.dismiss(); mConfirm = null; } }).show(); break; case 3: mConfirm.setPositiveButton(inButtonLable[0], new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { resultConfirmResult(0,callbackId); dialog.dismiss(); mConfirm = null; } }); mConfirm.setNeutralButton(inButtonLable[1], new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { resultConfirmResult(1,callbackId); dialog.dismiss(); mConfirm = null; } }); mConfirm.setNegativeButton(inButtonLable[2], new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { resultConfirmResult(2,callbackId); mConfirm = null; } }).show(); break; } } } catch (Exception e) { e.printStackTrace(); } } private void resultConfirmResult(int result,int callbackId){ if(callbackId!=-1){ callbackToJs(callbackId,false,result); }else{ jsCallback(function_confirm, 0, EUExCallback.F_C_INT, result); } } public void private_prompt(String inTitle, String inMessage, String inDefaultValue, String[] inButtonLables, String hint, final String callbackIdStr, int mode) { /*if (!((EBrowserActivity) mContext).isVisable()) { return; }*/ if (null != mPrompt) { return; } final int callbackId=valueOfCallbackId(callbackIdStr); if (inButtonLables != null && inButtonLables.length == 2) { mPrompt = PromptDialog.show(mContext, inTitle, inMessage, inDefaultValue,hint, inButtonLables[0],mode, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { final PromptDialog wPromptDialog = (PromptDialog) dialog; hideSoftKeyboard(wPromptDialog.getWindowToken()); dialog.dismiss(); mPrompt = null; resultPrompt(wPromptDialog.getInput(),0,callbackId); } }, inButtonLables[1], new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { final PromptDialog wPromptDialog = (PromptDialog) dialog; hideSoftKeyboard(wPromptDialog.getWindowToken()); dialog.dismiss(); mPrompt = null; resultPrompt(wPromptDialog.getInput(),1,callbackId); } }); } } private void resultPrompt(String data,int index, int callbackId){ WindowPromptResultVO resultVO=new WindowPromptResultVO(); resultVO.data=data; resultVO.index=index; if (callbackId!=-1){ callbackToJs(callbackId,false,resultVO.index,resultVO.data); }else{ jsCallback(function_prompt, 0, EUExCallback.F_C_JSON, DataHelper.gson.toJson(resultVO)); } } private void hideSoftKeyboard(IBinder wToken) { try { InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE); if (imm.isActive()) { imm.hideSoftInputFromWindow(wToken, 0); } } catch (Exception e) { e.printStackTrace(); } } public void showSoftKeyboard(String[] params) { Message msg = new Message(); msg.obj = this; msg.what = MSG_SHOW_SOFT_KEYBOARD; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, params); msg.setData(bd); mHandler.sendMessage(msg); } public void showSoftKeyboardMsg() { //boolean flag = mBrwView.hasFocus(); //if(flag){ mBrwView.getBrowserWindow().showSoftKeyboard(); //} } public void hideSoftKeyboard(String[] params) { ((Activity) mContext).runOnUiThread(new Runnable() { @Override public void run() { hideSoftKeyboard(mBrwView.getWindowToken()); } }); } public void setWindowScrollbarVisible(String[] params) { if (null == params || params.length < 1) return; boolean visible = Boolean.parseBoolean(params[0]); mBrwView.setHorizontalScrollBarEnabledWrap(visible); mBrwView.setVerticalScrollBarEnabledWrap(visible); } public void actionSheet(String[] params) { if (isFirstParamExistAndIsJson(params)){ WindowJsonWrapper.actionSheet(this,DataHelper.gson.fromJson(params[0], WindowActionSheetVO.class),params.length>1?params[1]:null); }else{ actionSheetMsg(params); } } public void actionSheetMsg(String[] params) { final int length = params.length; boolean op = EBrowser.checkFlag(EBrowser.F_BRW_FLAG_OPENING); if (length < 3 || op) { return; } String inTitle = params[0]; String inCancel = params[1]; final String[] btnLabels = params[2].split(","); int callbackId=-1; if (params.length>3){ callbackId=valueOfCallbackId(params[3]); } final int finalCallbackId = callbackId; ActionSheetDialog.show(mContext, btnLabels, inTitle, inCancel, new ActionSheetDialogItemClickListener() { @Override public void onItemClicked(ActionSheetDialog dialog, int postion) { resultActionSheet(postion,finalCallbackId); } @Override public void onCanceled(ActionSheetDialog dialog) { resultActionSheet(btnLabels.length, finalCallbackId); } }); } private void resultActionSheet(int position,int callbackId){ if(callbackId!=-1){ callbackToJs(callbackId,false,position); }else{ jsCallback(function_actionSheet, 0, EUExCallback.F_C_INT, position); } } public void statusBarNotification(String[] params) { if (params == null || params.length < 2) { errorCallback(0, 0, "error params!"); return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_STATUS_BAR_NOTIFICATION; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, params); msg.setData(bd); mHandler.sendMessage(msg); } public void statusBarNotificationMsg(String[] parm) { if (parm.length < 2) { return; } String title = parm[0]; String msg = parm[1]; mBrwView.getBrowserWindow().getBrowser().systemNotification(title, msg); } private int parseHeight(String str) { if (null == str || 0 == str.length()) { return 0; } if (str.endsWith("%")) { int ph = ESystemInfo.getIntence().mHeightPixels; return (Integer.parseInt(str.replace("%", "")) * ph) / 100; } return Integer.parseInt(str); } private int parseWidth(String str) { if (null == str || 0 == str.length()) { return 0; } if (str.endsWith("%")) { int pw = ESystemInfo.getIntence().mWidthPixels; return (Integer.parseInt(str.replace("%", "")) * pw) / 100; } return Integer.parseInt(str); } private void closeAlert() { if (mAlert != null) { mAlert.dismiss(); mAlert = null; } } @Override public boolean clean() { closeToast(null); closeAlert(); // mBrwView.resetBounceView(0); // mBrwView.resetBounceView(1); destroyProgressDialog(null); return true; } public void createProgressDialog(String[] params) { if (isFirstParamExistAndIsJson(params)){ WindowJsonWrapper.createProgressDialog(this, DataHelper.gson.fromJson(params[0], WindowCreateProgressDialogVO.class)); }else{ createProgressDialogMsg(params); } } public void createProgressDialogMsg(String[] params) { if (params.length < 2) { return; } String title = params[0]; String message = params[1]; boolean isCancel = true; if (params.length > 2) { final String flag = params[2]; if (!TextUtils.isEmpty(flag) && params[2].trim().length() != 0) { isCancel = flag.equals("0"); } } mBrwView.getBrowserWindow().createProgressDialog(title, message, isCancel); } public void destroyProgressDialog(String[] params) { destroyProgressDialogMsg(); } public void destroyProgressDialogMsg() { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } curWind.destroyProgressDialog(); } public void postGlobalNotification(String[] params) { if (params == null || params.length < 1) { errorCallback(0, 0, "error params!"); return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_POST_GLOBAL_NOTIFICATION; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, params); msg.setData(bd); mHandler.sendMessage(msg); } public void postGlobalNotificationMsg(String[] params) { if (params.length == 0) { return; } String des = params[0]; EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } curWind.postGlobalNotification(des); } public void subscribeChannelNotification(String[] params) { if (params == null || params.length < 2) { errorCallback(0, 0, "error params!"); return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_SUBSCRIBE_CHANNEL_NOTIFICATION; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, params); msg.setData(bd); mHandler.sendMessage(msg); } public void subscribeChannelNotificationMsg(String[] params) { if (params.length < 2) { return; } String channelId = params[0]; if (TextUtils.isEmpty(channelId)) { BDebug.e("channelId is empty!!!"); return; } String callbackFunction = params[1]; EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } String type = null; String name = null; if (mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_POP) || mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_TOP) || mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_BOTTOM)) { type = EBrowserWindow.WIN_TYPE_POP; name = mBrwView.getName(); } if (mBrwView.checkType(EBrwViewEntry.VIEW_TYPE_MAIN)) { type = EBrowserWindow.WIN_TYPE_MAIN; name = curWind.getName(); } if (TextUtils.isEmpty(type)) return; curWind.subscribeChannelNotification(channelId, callbackFunction, type, name); } public void publishChannelNotification(String[] params) { if (params == null || params.length < 2) { errorCallback(0, 0, "error params!"); return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_PUBLISH_CHANNEL_NOTIFICATION; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, params); msg.setData(bd); mHandler.sendMessage(msg); } public void publishChannelNotificationMsg(String[] params) { if (params.length < 2) { return; } String channelId = params[0]; if (TextUtils.isEmpty(channelId)) { BDebug.e("channelId is empty!!!"); return; } String des = params[1]; EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } curWind.publishChannelNotification(channelId, des, false); } public void publishChannelNotificationForJson(String[] params) { if (params == null || params.length < 2) { errorCallback(0, 0, "error params!"); return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_PUBLISH_CHANNEL_NOTIFICATION_FOR_JSON; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, params); msg.setData(bd); mHandler.sendMessage(msg); } public void publishChannelNotificationForJsonMsg(String[] params) { if (params.length < 2) { return; } String channelId = params[0]; if (TextUtils.isEmpty(channelId)) { BDebug.e("channelId is empty!!!"); return; } String des = params[1]; EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } curWind.publishChannelNotification(channelId, des, true); } public void setMultilPopoverFlippingEnbaled(String[] params) { if (params.length < 1) { return; } int enabled = 0; try { enabled = Integer.parseInt(params[0]); } catch (Exception e) { e.printStackTrace(); } mBrwView.setIsMultilPopoverFlippingEnbaled(enabled == 1 ? true : false); } public void setIsSupportSlideCallback(String[] params) { if (params == null || params.length < 1) { errorCallback(0, 0, "error params!"); return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_SET_IS_SUPPORT_SLIDE_CALLBACK; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, params); msg.setData(bd); mHandler.sendMessage(msg); } private void setIsSupportSlideCallbackMsg(String[] params) { String json = params[0]; try { JSONObject jsonObject = new JSONObject(json); boolean isSupport = Boolean.valueOf(jsonObject.getString("isSupport")); mBrwView.setIsSupportSlideCallback(isSupport); } catch (JSONException e) { e.printStackTrace(); } } public void setIsSupportSwipeCallback(String[] params) { if (params == null || params.length < 1) { errorCallback(0, 0, "error params!"); return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_SET_IS_SUPPORT_SWIPE_CALLBACK; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, params); msg.setData(bd); mHandler.sendMessage(msg); } private void setIsSupportSwipeCallbackMsg(String[] params) { String json = params[0]; try { JSONObject jsonObject = new JSONObject(json); boolean isSupport = Boolean.valueOf(jsonObject.getString("isSupport")); View bv = (View) mBrwView.getParent(); if (bv != null && bv instanceof EBounceView) { ((EBounceView) bv).setIsSupportSwipeCallback(isSupport); } } catch (JSONException e) { e.printStackTrace(); } } public void disturbLongPressGesture(String[] params) { if (params == null || params.length < 1) { errorCallback(0, 0, "error params!"); return; } Message msg = new Message(); msg.obj = this; msg.what = MSG_DISTURB_LONG_PRESS_GESTURE; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, params); msg.setData(bd); mHandler.sendMessage(msg); } private void disturbLongPressGestureMsg(String[] params) { int disturb = Integer.parseInt(params[0]); mBrwView.setDisturbLongPressGesture(disturb != 0); } /** * 添加一个容器 * * @param params */ @AppCanAPI public boolean createPluginViewContainer(String[] params) { if (params == null || params.length < 1) { errorCallback(0, 0, "error params!"); return false; } final CreateContainerVO inputVO = DataHelper.gson.fromJson(params[0], CreateContainerVO.class); EBrowserWindow mWindow = mBrwView.getBrowserWindow(); int count = mWindow.getChildCount(); for (int i = 0; i < count; i++) { View view = mWindow.getChildAt(i); if (view instanceof ContainerViewPager) { ContainerViewPager pager = (ContainerViewPager) view; if (inputVO.getId().equals((String) pager.getContainerVO().getId())) { return false; } }//end instance }//end for ContainerViewPager containerViewPager = new ContainerViewPager(mContext, inputVO); ContainerAdapter containerAdapter = new ContainerAdapter(new Vector<FrameLayout>(),inputVO.getTitles()); containerViewPager.setAdapter(containerAdapter); containerViewPager.setOnPageChangeListener(new ContainerViewPager.OnPageChangeListener() { @Override public void onPageSelected(int index) { String js = SCRIPT_HEADER + "if(" + function_onPluginContainerPageChange + "){" + function_onPluginContainerPageChange + "(" + inputVO.getId() + "," + EUExCallback.F_C_INT + "," + index + SCRIPT_TAIL; onCallback(js); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } }); FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams((int) inputVO.getW(), (int) inputVO.getH()); lp.leftMargin = (int) inputVO.getX(); lp.topMargin = (int) inputVO.getY(); if(mBrwView != null){ mBrwView.addViewToCurrentWindow(containerViewPager, lp); String js = SCRIPT_HEADER + "if(" + function_cbCreatePluginViewContainer + "){" + function_cbCreatePluginViewContainer + "(" + inputVO.getId() + "," + EUExCallback.F_C_TEXT + ",'" + "success" + "'" + SCRIPT_TAIL; onCallback(js); return true; } return false; } @AppCanAPI public void showPluginViewContainer(String[] parm) { Message msg = mHandler.obtainMessage(); msg.what = MSG_PLUGINVIEW_CONTAINER_SHOW; msg.obj = this; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } /** * 显示隐藏的容器 * * @param params */ private void showPluginViewContainerMsg(String[] params) { if (params == null || params.length < 1) { errorCallback(0, 0, "error params!"); return; } try { JSONObject json = new JSONObject(params[0]); String opid = json.getString("id"); EBrowserWindow mWindow = mBrwView.getBrowserWindow(); int count = mWindow.getChildCount(); for (int i = 0; i < count; i++) { View view = mWindow.getChildAt(i); if (view instanceof ContainerViewPager) { ContainerViewPager pager = (ContainerViewPager) view; if (opid.equals(pager.getContainerVO().getId())) { pager.setVisibility(View.VISIBLE); String js = SCRIPT_HEADER + "if(" + function_cbShowPluginViewContainer + "){" + function_cbShowPluginViewContainer + "(" + opid + "," + EUExCallback.F_C_TEXT + ",'" + "success" + "'" + SCRIPT_TAIL; onCallback(js); return; } }//end instance }//end for } catch (Exception e) { e.printStackTrace(); } } @AppCanAPI public void hidePluginViewContainer(String[] parm) { Message msg = mHandler.obtainMessage(); msg.what = MSG_PLUGINVIEW_CONTAINER_HIDE; msg.obj = this; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } /** * 隐藏显示的容器 * * @param params */ private void hidePluginViewContainerMsg(String[] params) { if (params == null || params.length < 1) { errorCallback(0, 0, "error params!"); return; } try { JSONObject json = new JSONObject(params[0]); String opid = json.getString("id"); EBrowserWindow mWindow = mBrwView.getBrowserWindow(); int count = mWindow.getChildCount(); for (int i = 0; i < count; i++) { View view = mWindow.getChildAt(i); if (view instanceof ContainerViewPager) { ContainerViewPager pager = (ContainerViewPager) view; if (opid.equals(pager.getContainerVO().getId())) { pager.setVisibility(View.GONE); String js = SCRIPT_HEADER + "if(" + function_cbHidePluginViewContainer + "){" + function_cbHidePluginViewContainer + "(" + opid + "," + EUExCallback.F_C_TEXT + ",'" + "success" + "'" + SCRIPT_TAIL; onCallback(js); return; } }//end instance }//end for } catch (Exception e) { e.printStackTrace(); } } /** * 移除一个容器 * * @param params */ @AppCanAPI public boolean closePluginViewContainer(String[] params) { if (params == null || params.length < 1) { errorCallback(0, 0, "error params!"); return false; } try { JSONObject json = new JSONObject(params[0]); String opid = json.getString("id"); EBrowserWindow mWindow = mBrwView.getBrowserWindow(); int count = mWindow.getChildCount(); for (int i = 0; i < count; i++) { View view = mWindow.getChildAt(i); if (view instanceof ContainerViewPager) { ContainerViewPager pager = (ContainerViewPager) view; if (opid.equals(pager.getContainerVO().getId())) { removeViewFromCurrentWindow(pager); ContainerAdapter adapter = (ContainerAdapter) pager.getAdapter(); Vector<FrameLayout> views = adapter.getViewList(); int size = views.size(); for (int j = 0; j < size; j++) { views.get(j).removeAllViews(); } views.clear(); pager = null; String js = SCRIPT_HEADER + "if(" + function_cbClosePluginViewContainer + "){" + function_cbClosePluginViewContainer + "(" + opid + "," + EUExCallback.F_C_TEXT + ",'" + "success" + "'" + SCRIPT_TAIL; onCallback(js); return true; } }//end instance }//end for } catch (Exception e) { if (BDebug.DEBUG) { e.printStackTrace(); } return false; } return false; } /** * 移除并清除一个容器 * * @param params */ @AppCanAPI public boolean clearPluginViewContainer(String[] params) { if (params == null || params.length < 1) { errorCallback(0, 0, "error params!"); return false; } try { JSONObject json = new JSONObject(params[0].toString()); String opid = json.getString("id"); EBrowserWindow mWindow = mBrwView.getBrowserWindow(); int count = mWindow.getChildCount(); for (int i = 0; i < count; i++) { View view = mWindow.getChildAt(i); if (view instanceof ContainerViewPager) { ContainerViewPager pager = (ContainerViewPager) view; if (opid.equals((String) pager.getContainerVO().getId())) { ContainerAdapter adapter = (ContainerAdapter) pager.getAdapter(); Vector<FrameLayout> views = adapter.getViewList(); int size = views.size(); for (int j = 0; j < size; j++) { views.get(j).removeAllViews(); } views.clear(); String js = SCRIPT_HEADER + "if(" + function_cbClearPluginViewContainer + "){" + function_cbClearPluginViewContainer + "(" + opid + "," + EUExCallback.F_C_TEXT + ",'" + "success" + "'" + SCRIPT_TAIL; onCallback(js); return true; } }//end instance }//end for } catch (Exception e) { if (BDebug.DEBUG) { e.printStackTrace(); } return false; } return false; } @AppCanAPI public void setPageInContainer(String[] parm) { Message msg = mHandler.obtainMessage(); msg.what = MSG_PLUGINVIEW_CONTAINER_SET; msg.obj = this; Bundle bd = new Bundle(); bd.putStringArray(TAG_BUNDLE_PARAM, parm); msg.setData(bd); mHandler.sendMessage(msg); } private void setPageInContainerMsg(String[] params) { if (params == null || params.length < 1) { errorCallback(0, 0, "error params!"); return; } try { JSONObject json = new JSONObject(params[0].toString()); String opid = json.getString("id"); EBrowserWindow mWindow = mBrwView.getBrowserWindow(); int count = mWindow.getChildCount(); for (int i = 0; i < count; i++) { View view = mWindow.getChildAt(i); if (view instanceof ContainerViewPager) { ContainerViewPager pager = (ContainerViewPager) view; if (opid.equals((String) pager.getContainerVO().getId())) { int index = json.optInt("index"); pager.setCurrentItem(index); return; } }//end instance }//end for } catch (Exception e) { if (BDebug.DEBUG) { e.printStackTrace(); } } } @AppCanAPI public void share(String[] params){ String jsonStr=params[0]; ShareInputVO inputVO=DataHelper.gson.fromJson(jsonStr,ShareInputVO.class); if (!TextUtils.isEmpty(inputVO.getImgPath())){ inputVO.setImgPath(BUtility.getRealPathWithCopyRes(mBrwView,inputVO.getImgPath())); } if (inputVO.getImgPaths()!=null){ List<String> realImagePaths=new ArrayList<String>(); for (String path:inputVO.getImgPaths()){ realImagePaths.add(BUtility.getRealPathWithCopyRes(mBrwView,path)); } inputVO.setImgPaths(realImagePaths); } EUtil.share(mContext,inputVO); } @Override public void onHandleMessage(Message msg) { if (mBrwView == null || mBrwView.getBrowserWindow() == null || msg == null) { return; } EBrowserWindow eBrwWin = mBrwView.getBrowserWindow(); String[] param = msg.getData().getStringArray(TAG_BUNDLE_PARAM); switch (msg.what) { case MSG_FUNCTION_CLOSE: if (param != null) closeMsg(param); break; case MSG_FUNCTION_CLOSE_ABOVE_WND_BY_NAME: String windowName = msg.getData().getString(TAG_BUNDLE_PARAM_NAME); eBrwWin.closeAboveWndByName(windowName); break; case MSG_FUNCTION_OPEN: if (param != null) openMsg(param); break; case MSG_FUNCTION_OPEN_POP: if (param != null) openPopoverMsg(param); break; case MSG_FUNCTION_FORWARD: eBrwWin.goForward(); break; case MSG_FUNCTION_BACK: eBrwWin.goBack(); break; case MSG_FUNCTION_PAGEFORWARD: mBrwView.goForward(); break; case MSG_FUNCTION_PAGEBACK: mBrwView.goBack(); break; case MSG_FUNCTION_WINDOWFORWARD: if (param != null) windowForwardMsg(param); break; case MSG_FUNCTION_WINDOWBACK: if (param != null) windowBackMsg(param); break; case MSG_FUNCTION_SETWINDOWFRAME: if (param != null) setWindowFrameMsg(param); break; case MSG_FUNCTION_OPENSLIBING: if (param != null) openSlibingMsg(param); break; case MSG_FUNCTION_CLOSESLIBING: if (param != null) closeSlibingMsg(param); break; case MSG_FUNCTION_SHOWSLIBING: if (param != null) showSlibingMsg(param); break; case MSG_FUNCTION_LOADOBFUSCATIONDATA: if (param != null) loadObfuscationDataMsg(param); break; case MSG_FUNCTION_TOAST: if (param != null) toastMsg(param); break; case MSG_FUNCTION_CLOSETOAST: eBrwWin.closeToast(); break; case MSG_FUNCTION_CLOSEPOPOVER: if (param != null) closePopoverMsg(param); break; case MSG_FUNCTION_SETPOPOVERFRAME: if (param != null) setPopoverFrameMsg(param); break; case MSG_FUNCTION_OPENMULTIPOPOVER: if (param != null) openMultiPopoverMsg(param); break; case MSG_FUNCTION_CLOSEMULTIPOPOVER: if (param != null) closeMultiPopoverMsg(param); break; case MSG_FUNCTION_SETMULTIPOPOVERFRAME: if (param != null) setMultiPopoverFrameMsg(param); break; case MSG_FUNCTION_SETSELECTEDPOPOVERINMULTIWINDOW: if (param != null) setSelectedPopOverInMultiWindowMsg(param); break; case MSG_FUNCTION_BRINGTOFRONT: eBrwWin.bringToFront(mBrwView); break; case MSG_FUNCTION_SENDTOBACK: eBrwWin.sendToBack(mBrwView); break; case MSG_FUNCTION_INSERTABOVE: if (param != null) insertAboveMsg(param); break; case MSG_FUNCTION_INSERTBELOW: if (param != null) insertBelowMsg(param); break; case MSG_FUNCTION_BRINGPOPOVERTOFRONT: if (param != null) bringPopoverToFrontMsg(param); break; case MSG_FUNCTION_SENDPOPOVERTOBACK: if (param != null) sendPopoverToBackMsg(param); break; case MSG_FUNCTION_INSERTPOPOVERABOVEPOPOVER: if (param != null) insertPopoverAbovePopoverMsg(param); break; case MSG_FUNCTION_INSERTPOPOVERBELOWPOPOVER: if (param != null) insertPopoverBelowPopoverMsg(param); break; case MSG_FUNCTION_INSERTWINDOWABOVEWINDOW: if (param != null) insertWindowAboveWindowMsg(param); break; case MSG_FUNCTION_INSERTWINDOWBELOWWINDOW: if (param != null) insertWindowBelowWindowMsg(param); break; case MSG_FUNCTION_SETORIENTATION: if (param != null) setOrientationMsg(param); break; case MSG_FUNCTION_SETLOADINGIMAGEPATH: if(param != null) setLoadingImagePathMsg(param); break; case MSG_FUNCTION_SETAUTOROTATEENABLE: if(param != null) setAutorotateEnableMsg(param); break; case MSG_FUNCTION_SETSLIDINGWIN: handleSetSlidingWin(param); break; case MSG_FUNCTION_SETSLIDINGWIN_ENABLE: hanldeSetSlidingWindowEnabled(param); break; case MSG_FUNCTION_TOGGLE_SLIDINGWIN: hanldeToggleSlidingWindow(param); break; case MSG_FUNCTION_REFRESH: String url = mBrwView.getRelativeUrl(); mBrwView.loadUrl(url); mBrwView.postDelayed(new Runnable() { @Override public void run() { mBrwView.clearHistory(); } }, 1000); break; case MSG_FUNCTION_RELOAD: mBrwView.reload(); break; case MSG_SET_WINDOW_HIDDEN: setWindowHiddenMsg(param); break; case MSG_OPEN_AD: openAdMsg(param); break; case MSG_SHOW_SOFT_KEYBOARD: showSoftKeyboardMsg(); break; case MSG_ACTION_SHEET: actionSheetMsg(param); break; case MSG_STATUS_BAR_NOTIFICATION: statusBarNotificationMsg(param); break; case MSG_CREATE_PROGRESS_DIALOG: createProgressDialogMsg(param); break; case MSG_DESTROY_PROGRESS_DIALOG: destroyProgressDialogMsg(); break; case MSG_POST_GLOBAL_NOTIFICATION: postGlobalNotificationMsg(param); break; case MSG_SUBSCRIBE_CHANNEL_NOTIFICATION: subscribeChannelNotificationMsg(param); break; case MSG_PUBLISH_CHANNEL_NOTIFICATION: publishChannelNotificationMsg(param); break; case MSG_PUBLISH_CHANNEL_NOTIFICATION_FOR_JSON: publishChannelNotificationForJsonMsg(param); break; case MSG_SET_IS_SUPPORT_SLIDE_CALLBACK: setIsSupportSlideCallbackMsg(param); break; case MSG_SET_IS_SUPPORT_SWIPE_CALLBACK: setIsSupportSwipeCallbackMsg(param); break; case MSG_DISTURB_LONG_PRESS_GESTURE: disturbLongPressGestureMsg(param); break; case MSG_PLUGINVIEW_CONTAINER_SET: setPageInContainerMsg(param); break; case MSG_PLUGINVIEW_CONTAINER_SHOW: showPluginViewContainerMsg(param); break; case MSG_PLUGINVIEW_CONTAINER_HIDE: hidePluginViewContainerMsg(param); break; default: break; } } }