/* * Copyright (C) 2014 The AppCan Open Source Project. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package org.zywx.wbpalmstar.engine; import android.app.ProgressDialog; import android.content.Context; import android.content.res.Configuration; import android.graphics.Color; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.support.annotation.Keep; import android.support.v4.view.ViewPager; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.view.inputmethod.InputMethodManager; import android.widget.Toast; import org.json.JSONException; import org.json.JSONObject; import org.zywx.wbpalmstar.acedes.ACEDes; import org.zywx.wbpalmstar.base.BDebug; import org.zywx.wbpalmstar.base.BUtility; import org.zywx.wbpalmstar.base.view.SwipeView; import org.zywx.wbpalmstar.base.vo.DownloadCallbackInfoVO; import org.zywx.wbpalmstar.engine.EBrowserHistory.EHistoryEntry; import org.zywx.wbpalmstar.engine.external.Compat; import org.zywx.wbpalmstar.engine.multipop.MultiPopAdapter; import org.zywx.wbpalmstar.engine.universalex.EUExCallback; import org.zywx.wbpalmstar.engine.universalex.EUExScript; import org.zywx.wbpalmstar.engine.universalex.EUExUtil; import org.zywx.wbpalmstar.engine.universalex.EUExWidget.SpaceClickListener; import org.zywx.wbpalmstar.engine.universalex.EUExWindow; import org.zywx.wbpalmstar.widgetone.dataservice.WWidgetData; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Hashtable; import java.util.List; import java.util.Map; public class EBrowserWindow extends SwipeView implements AnimationListener { private static final String TAG = "EBrowserWindow"; public static final int F_WINDOW_FLAG_NONE = 0x0; public static final int F_WINDOW_FLAG_NEW = 0x1; public static final int F_WINDOW_FLAG_SAME = 0x2; public static final int F_WINDOW_FLAG_WILL_REMOWE = 0x4; public static final int F_WINDOW_FLAG_OPENING = 0x8; public static final int F_WINDOW_FLAG_OPPOP = 0x10; public static final int F_WINDOW_FLAG_OPPOP_END = 0x20; public static final int F_WINDOW_FLAG_SLIDING_WIN = 0x40; public static final String CALLBACK_POST_GLOBAL_NOTI = "javascript:if(uexWindow.onGlobalNotification)" + "{uexWindow.onGlobalNotification('"; public static final String CALLBACK_PUBLISH_GLOBAL_NOTI = "javascript:uexWindow."; public static final String TAG_CHANNEL_ID = "channelId"; public static final String TAG_CHANNEL_FUNNAME = "functionName"; public static final String TAG_CHANNEL_TYPE = "winType"; public static final String TAG_CHANNEL_WINNAME = "winName"; public static final String WIN_TYPE_MAIN = "main"; public static final String WIN_TYPE_POP = "pop"; private int mAnimId; private long mAnimDuration; private boolean mAnimFill; private int mflag; private int mWindPoType; private EBrowser mBrw; private EBounceView mBounceView; private EBrowserView mTopView; private EBrowserView mMainView; private EBrowserView mBottomView; private EBrowserWidget mBroWidget; private EBrowserHistory mObHistroy; private String mName; private Context mContext; private EBrowserView mAddView; private String mWinRegist; private EAdViewTimer mAddViewTimer; private boolean mPrevWillHidden; private boolean mOAuth; private boolean mHidden; private boolean mLockBackKey; private boolean mLockMenuKey; private Map<String, EBrowserView> mPopTable; private Map<String, ArrayList<EBrowserView>> mMultiPopTable; private Map<String, ViewPager> mMultiPopPager; private EBrowserProgress mGlobalProgress; private EPreloadQueue mPreQueue; private int mDateType; private ProgressDialog mGlobalProDialog; static final int VIEW_TOP = 0xfff01; static final int VIEW_MID = 0xfff02; static final int VIEW_BOTTOM = 0xfff03; private EBrowserToast mToast; private WindowHander mWindLoop; private EUExWindow mWindowCallback; public static boolean isShowDialog = false; private List<HashMap<String, String>> mChannelList = null; private List<HashMap<String, Object>> mResumeJs = null; public static String rootLeftSlidingWinName = "rootLeftSlidingWinName"; public static String rootRightSlidingWinName = "rootRightSlidingWinName"; private List<View> viewList = new ArrayList<View>(); public EBrowserWindow(Context context, EBrowserWidget inParent) { super(context); mContext = context; mBroWidget = inParent; mPreQueue = new EPreloadQueue(); mObHistroy = new EBrowserHistory(); mWindLoop = new WindowHander(Looper.getMainLooper()); mPopTable = new Hashtable<String, EBrowserView>(); mMultiPopTable = new Hashtable<String, ArrayList<EBrowserView>>(); mMultiPopPager = new HashMap<String, ViewPager>(); setAnimationCacheEnabled(false); setAlwaysDrawnWithCacheEnabled(false); } public void init(EBrowser inBrw, EBrwViewEntry inEntry) { EUtil.viewBaseSetting(this); mBrw = inBrw; if (null == mMainView) { mMainView = new EBrowserView(mContext, EBrwViewEntry.VIEW_TYPE_MAIN, this); mMainView.setVisibility(VISIBLE); mMainView.setName("main"); mBounceView = new EBounceView(mContext); EUtil.viewBaseSetting(mBounceView); mBounceView.setId(VIEW_MID); LayoutParams bParm = new LayoutParams(Compat.FILL, Compat.FILL); mBounceView.setLayoutParams(bParm); mBounceView.addView(mMainView); addView(mBounceView); } mMainView.init(); if (null == inEntry) { setName("root"); mMainView.setRelativeUrl(mBroWidget.getWidget().m_indexUrl); if (!TextUtils.isEmpty(mBroWidget.getWidget().m_opaque)) { /**wanglei del 20151124*/ // mMainView.setBrwViewBackground(mBroWidget.getWidget().getOpaque(), // mBroWidget.getWidget().m_bgColor, mBroWidget.getWidget().m_indexUrl); /**wanglei add 20151124*/ mBounceView.setBounceViewBackground(mBroWidget.getWidget().getOpaque(), mBroWidget.getWidget().m_bgColor, mBroWidget.getWidget().m_indexUrl, mMainView); } } else { setName(inEntry.mWindName); setAnimId(inEntry.mAnimId); mMainView.setRelativeUrl(inEntry.mRelativeUrl); if (!inEntry.hasExtraInfo) { if (inEntry.checkFlag(EBrwViewEntry.F_FLAG_OPAQUE)) { mMainView.setOpaque(true); } else { mMainView.setOpaque(false); } } if (inEntry.hasExtraInfo) { /**wanglei del 20151124*/ // mMainView.setBrwViewBackground(inEntry.mOpaque, // inEntry.mBgColor, inEntry.mData); /**wanglei add 20151124*/ mBounceView.setBounceViewBackground(inEntry.mOpaque, inEntry.mBgColor, inEntry.mData, mMainView); } if (inEntry.mWindName.equals(EBrowserWindow.rootLeftSlidingWinName) || inEntry.mWindName.equals(EBrowserWindow.rootRightSlidingWinName)) { mMainView.getSettings().setUseWideViewPort(false); } } } public boolean checkFlag(int flag) { return (mflag & flag) != 0; } public void setFlag(int flag) { mflag |= flag; } public void clearFlag() { mflag &= F_WINDOW_FLAG_NONE; } public void addViewToCurrentWindow(View child) { //Message msg = mWindLoop.obtainMessage(); //msg.what = F_WHANDLER_ADD_VIEW; //msg.obj = child; //mWindLoop.sendMessage(msg); viewList.add(child); child.setTag(EViewEntry.F_PLUGIN_VIEW_TAG); Animation anim = child.getAnimation(); addView(child); if (null != anim) { anim.start(); } bringChildToFront(child); } public void removeViewFromCurrentWindow(View child) { Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_REMOVE_VIEW; msg.obj = child; mWindLoop.sendMessage(msg); // Animation removeAnim = child.getAnimation(); // if (null != removeAnim) { // removeAnim.start(); // } // removeView(child); } public void createSlidingWindow(EBrwViewEntry entry) { mBroWidget.createSlidingWindow(entry); } public void createWindow(EBrowserView target, EBrwViewEntry entry) { /*boolean b1 = entry.checkFlag(EBrwViewEntry.F_FLAG_OBFUSCATION); int a = getWidget().m_obfuscation; boolean b2 = (0 == getWidget().m_obfuscation); if (b2) { Toast.makeText(mContext, "没有配置解密权限!", Toast.LENGTH_SHORT).show(); return; }*/ mBroWidget.createWindow(this, target, entry); } public void setWindowFrame(int x, int y, int duration) { mBroWidget.setWindowFrame(this, x, y, duration); } public void onCloseWindow(int inAnimID, long duration) { if (EBrowserAnimation.isFillAnim(inAnimID)) { setAnimFill(true); } else { setAnimId(inAnimID); } setAnimDuration(duration); mBroWidget.onCloseWindow(this); if (mChannelList != null) { mChannelList.clear(); mChannelList = null; } } public void createSibling(EBrowserView view, EBrwViewEntry slbEntry) { Message msg = mWindLoop.obtainMessage(); msg.obj = slbEntry; msg.what = F_WHANDLER_SLIBING_CREATE; mWindLoop.sendMessage(msg); } public void showSlibing(int type) { Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_SLIBING_SHOW; msg.arg1 = type; mWindLoop.sendMessage(msg); } public void closeSlibing(int type) { Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_SLIBING_CLOSE; msg.arg1 = type; mWindLoop.sendMessage(msg); } public void openPopover(EBrwViewEntry popEntry) { // Message msg = mWindLoop.obtainMessage(); // msg.what = F_WHANDLER_POP_OPEN; // msg.obj = popEntry; // mWindLoop.sendMessage(msg); boolean isRootWidget = mBroWidget .checkWidgetType(EBrowserWidget.F_WIDGET_POOL_TYPE_ROOT); if (isRootWidget) { String curl = getRelativeUrl(); mBrw.popOpenAnalytics(curl, popEntry.mRelativeUrl); } hPopOverOpen(popEntry); } public void closePopover(String inPopName) { // Message msg = mWindLoop.obtainMessage(); // msg.what = F_WHANDLER_POP_CLOSE; // msg.obj = inPopName; // mWindLoop.sendMessage(msg); hPopOverClose(inPopName); } public void setPopoverFrame(String inPopName, int inX, int inY, int inWidth, int inHeight) { EBrwViewEntry popEntry = new EBrwViewEntry(EBrwViewEntry.VIEW_TYPE_POP); popEntry.mViewName = inPopName; popEntry.mX = inX; popEntry.mY = inY; popEntry.mWidth = inWidth; popEntry.mHeight = inHeight; Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_POP_SET; msg.obj = popEntry; mWindLoop.sendMessage(msg); } public void evaluatePopoverScript(EBrowserView inWhich, String inWndName, String inPopName, String inScript) { if (null == inWndName || 0 == inWndName.length()) { EBrowserView old = mPopTable.get(inPopName); if (old != null) { addUriTask(old, inScript); } } else { mBroWidget.evaluatePopoverScript(inWhich, inWndName, inPopName, inScript); } } public void setMultiPopoverFrame(String inPopName, int inX, int inY, int inWidth, int inHeight) { EBrwViewEntry popEntry = new EBrwViewEntry(EBrwViewEntry.VIEW_TYPE_POP); popEntry.mViewName = inPopName; popEntry.mX = inX; popEntry.mY = inY; popEntry.mWidth = inWidth; popEntry.mHeight = inHeight; Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_MULTIPOP_SET; msg.obj = popEntry; mWindLoop.sendMessage(msg); } private void hSetMultiPopOverFrame(EBrwViewEntry entity) { ArrayList<EBrowserView> list = mMultiPopTable.get(entity.mViewName); if (null == list || list.size() == 0) { return; } View vParent = (View) list.get(0).getParent(); LayoutParams lParam = new LayoutParams(entity.mWidth, entity.mHeight); lParam.gravity = Gravity.NO_GRAVITY; lParam.leftMargin = entity.mX; lParam.topMargin = entity.mY; vParent.setLayoutParams(lParam); } public void evaluateMultiPopoverScript(EBrowserView inWhich, String inWndName, String inMultiPopName, String inPopName, String inScript) { if (null == inWndName || 0 == inWndName.length()) { ArrayList<EBrowserView> list = mMultiPopTable.get(inMultiPopName); if (null == list) { return; } for (int i = 1; i < list.size(); i++) { EBrowserView pop = list.get(i); if (inPopName.equals(pop.getName())) { addUriTask(pop, inScript); break; } } } else { mBroWidget.evaluateMultiPopoverScript(inWhich, inWndName, inMultiPopName, inPopName, inScript); } } public void bringToFront(EBrowserView child) { View v = (View) child.getParent(); Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_BRING_TO_FRONT; msg.obj = v; mWindLoop.sendMessage(msg); } public void sendToBack(EBrowserView child) { View v = (View) child.getParent(); Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_SEND_TO_BACK; msg.obj = v; mWindLoop.sendMessage(msg); } public void insertAbove(EBrowserView child, String name) { View v = (View) child.getParent(); EBrowserView bv = mPopTable.get(name); if (null != bv) { View v1 = (View) bv.getParent(); EViewEntry ent = new EViewEntry(); ent.obj = v; ent.obj1 = v1; Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_INSERT_ABOVE; msg.obj = ent; mWindLoop.sendMessage(msg); } } public void insertBelow(EBrowserView child, String name) { View v = (View) child.getParent(); EBrowserView bv = mPopTable.get(name); if (null != bv) { View v1 = (View) bv.getParent(); EViewEntry ent = new EViewEntry(); ent.obj = v; ent.obj1 = v1; Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_INSERT_BELOW; msg.obj = ent; mWindLoop.sendMessage(msg); } } public void insertPopoverAbovePopover(String name, String name1) { EBrowserView bv = mPopTable.get(name); EBrowserView bv1 = mPopTable.get(name1); if (bv != null && bv1 != null) { View v = (View) bv.getParent(); View v1 = (View) bv1.getParent(); EViewEntry ent = new EViewEntry(); ent.obj = v; ent.obj1 = v1; Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_INSERT_POPOVER_ABOVE_POPOVER; msg.obj = ent; mWindLoop.sendMessage(msg); } } public void insertPopoverBelowPopover(String name, String name1) { EBrowserView bv = mPopTable.get(name); EBrowserView bv1 = mPopTable.get(name1); if (bv != null && bv1 != null) { View v = (View) bv.getParent(); View v1 = (View) bv1.getParent(); EViewEntry ent = new EViewEntry(); ent.obj = v; ent.obj1 = v1; Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_INSERT_POPOVER_BELOW_POPOVER; msg.obj = ent; mWindLoop.sendMessage(msg); } } public void bringPopoverToFront(String name) { EBrowserView bv = mPopTable.get(name); if (null != bv) { View v = (View) bv.getParent(); Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_BING_POPOVER_TO_FRONT; msg.obj = v; mWindLoop.sendMessage(msg); } } public void sendPopoverToBack(String name) { EBrowserView bv = mPopTable.get(name); if (null != bv) { View v = (View) bv.getParent(); Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_SEND_POPOVER_TO_BACK; msg.obj = v; mWindLoop.sendMessage(msg); } } public void setWindowHidden(EViewEntry entry) { Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_SET_VISIBLE; msg.obj = entry; mWindLoop.sendMessage(msg); } public final void showProgress() { if (null == mGlobalProgress) { mGlobalProgress = new EBrowserProgress(mContext); LayoutParams pl = new LayoutParams(-2, -2); pl.gravity = Gravity.CENTER; mGlobalProgress.setLayoutParams(pl); addView(mGlobalProgress); } if (!mGlobalProgress.isShown()) { mGlobalProgress.setVisibility(View.VISIBLE); mGlobalProgress.showProgress(); } } public final void setGlobalProgress(int p) { if (null == mGlobalProgress || !mGlobalProgress.isShown()) { return; } mGlobalProgress.setProgress(p); } public final void hiddenProgress() { if (null != mGlobalProgress) { mGlobalProgress.hiddenProgress(); mGlobalProgress.setVisibility(View.GONE); } } // type=0,表示重载单页面浮动窗口,其他表示多页面浮动窗口 private void reloadPop(EBrwViewEntry entity, int type) { EBrowserView child; if (type == 0) { child = mPopTable.get(entity.mViewName); } else { child = mMultiPopTable.get(entity.mViewName).get(0); } child.setDateType(entity.mDataType); child.setQuery(entity.mQuery); View parent = (View) child.getParent(); removeView(parent); LayoutParams popParm = new LayoutParams(entity.mWidth, entity.mHeight); // popParm.leftMargin = entity.mX; // popParm.topMargin = entity.mY; // parent.setLayoutParams(popParm); int parentRight = getRight(); int parentBottom = getBottom(); int newRight = entity.mX + entity.mWidth; if (newRight > parentRight) { popParm.rightMargin = parentRight - newRight; } else { popParm.rightMargin = 0; } int newBottom = entity.mY + entity.mHeight; if (newBottom > parentBottom) { popParm.bottomMargin = parentBottom - newBottom; } else if (0 == newBottom) { entity.mY = entity.mY + 1; popParm.bottomMargin = 0; } else { popParm.bottomMargin = 0; } popParm.topMargin = entity.mY; popParm.leftMargin = entity.mX; parent.setLayoutParams(popParm); addView(parent); switch (entity.mDataType) { case EBrwViewEntry.WINDOW_DATA_TYPE_URL: // if (entity.checkFlag(EBrwViewEntry.F_FLAG_OBFUSCATION)) { if ((getWidget().m_obfuscation == 1) && !entity.checkFlag(EBrwViewEntry.F_FLAG_WEBAPP)) { child.needToEncrypt(child, entity.mUrl, 0); } else { child.newLoadUrl(entity.mUrl); } mBrw.popCloseAnalytics(child.getRelativeUrl()); mBrw.popOpenAnalytics(getRelativeUrl(), entity.mRelativeUrl); child.setRelativeUrl(entity.mRelativeUrl); break; case EBrwViewEntry.WINDOW_DATA_TYPE_DATA: child.newLoadData(entity.mData); break; case EBrwViewEntry.WINDOW_DATA_TYPE_DATA_URL: String data1 = ACEDes.decrypt(entity.mUrl, mContext, false, entity.mData); child.loadDataWithBaseURL(entity.mUrl, data1, EBrowserView.CONTENT_MIMETYPE_HTML, EBrowserView.CONTENT_DEFAULT_CODE, entity.mUrl); break; } } public boolean checkMultiPop(ArrayList<EBrwViewEntry> entitys) { ArrayList<EBrowserView> childs = mMultiPopTable .get(entitys.get(0).mViewName); if (childs == null || childs.size() <= 1) { return false; } EBrowserView mainPop = childs.get(0); EBrwViewEntry entity = entitys.get(0); View parent = (View) mainPop.getParent(); if (entity.hasExtraInfo) { /**wanglei del 20151124*/ // mainPop.setBrwViewBackground(entity.mOpaque, entity.mBgColor, ""); /**wanglei add 20151124*/ ((EBounceView) parent).setBounceViewBackground(entity.mOpaque, entity.mBgColor, "", mMainView); } removeView(parent); LayoutParams popParm = new LayoutParams(entity.mWidth, entity.mHeight); int parentRight = getRight(); int parentBottom = getBottom(); int newRight = entity.mX + entity.mWidth; if (newRight > parentRight) { popParm.rightMargin = parentRight - newRight; } else { popParm.rightMargin = 0; } int newBottom = entity.mY + entity.mHeight; if (newBottom > parentBottom) { popParm.bottomMargin = parentBottom - newBottom; } else if (0 == newBottom) { entity.mY = entity.mY + 1; popParm.bottomMargin = 0; } else { popParm.bottomMargin = 0; } popParm.topMargin = entity.mY; popParm.leftMargin = entity.mX; parent.setLayoutParams(popParm); addView(parent); /**wanglei add 20151124*/ if (entitys.size() > 0) { EBrwViewEntry entityTemp = entitys.get(0); EBrowserView childTemp = childs.get(0); if(entityTemp.hasExtraInfo){ ((EBounceView) childTemp.getParent()).setBounceViewBackground( entityTemp.mOpaque, entityTemp.mBgColor, "", childTemp); } } for (int i = 0; i < entitys.size(); i++) { EBrwViewEntry entityTemp = entitys.get(0); EBrowserView childTemp = childs.get(0); childTemp.setDateType(entityTemp.mDataType); childTemp.setQuery(entityTemp.mQuery); /**wanglei add 20151124*/ childTemp.setBackgroundColor(Color.TRANSPARENT); /**wanglei del 20151124*/ // if (entityTemp.hasExtraInfo) { // childTemp.setBrwViewBackground(entityTemp.mOpaque, entityTemp.mBgColor, ""); // } switch (entityTemp.mDataType) { case EBrwViewEntry.WINDOW_DATA_TYPE_URL: // if (entityTemp.checkFlag(EBrwViewEntry.F_FLAG_OBFUSCATION)) { if ((getWidget().m_obfuscation == 1) && !entity.checkFlag(EBrwViewEntry.F_FLAG_WEBAPP)) { childTemp.needToEncrypt(childTemp, entityTemp.mUrl, 0); } else { childTemp.newLoadUrl(entityTemp.mUrl); } childTemp.setRelativeUrl(entityTemp.mRelativeUrl); break; case EBrwViewEntry.WINDOW_DATA_TYPE_DATA: childTemp.newLoadData(entityTemp.mData); break; case EBrwViewEntry.WINDOW_DATA_TYPE_DATA_URL: String data1 = ACEDes.decrypt(entityTemp.mUrl, mContext, false, entityTemp.mData); childTemp.loadDataWithBaseURL(entityTemp.mUrl, data1, EBrowserView.CONTENT_MIMETYPE_HTML, EBrowserView.CONTENT_DEFAULT_CODE, entityTemp.mUrl); break; } } return true; } public boolean checkPop(EBrwViewEntry entity) { EBrowserView child = mPopTable.get(entity.mViewName); if (child == null) { return false; } child.setDateType(entity.mDataType); child.setQuery(entity.mQuery); View parent = (View) child.getParent(); boolean parentHasChanged=parent.getParent()!=this;//父View没有改变不需要remove和add操作 if (parentHasChanged){ removeView(parent); } LayoutParams popParm = new LayoutParams(entity.mWidth, entity.mHeight); popParm.gravity = Gravity.NO_GRAVITY; popParm.leftMargin = entity.mX; popParm.topMargin = entity.mY; popParm.bottomMargin = entity.mBottom; parent.setLayoutParams(popParm); if (entity.hasExtraInfo) { /**wanglei del 20151124*/ // child.setBrwViewBackground(entity.mOpaque, entity.mBgColor, ""); /**wanglei add 20151124*/ ((EBounceView) child.getParent()).setBounceViewBackground( entity.mOpaque, entity.mBgColor, "", child); } /**wanglei add 20151124*/ child.setBackgroundColor(Color.TRANSPARENT); if (parentHasChanged) { addView(parent); } switch (entity.mDataType) { case EBrwViewEntry.WINDOW_DATA_TYPE_URL: // if (entity.checkFlag(EBrwViewEntry.F_FLAG_OBFUSCATION)) { if ((getWidget().m_obfuscation == 1) && !entity.checkFlag(EBrwViewEntry.F_FLAG_WEBAPP)) { child.needToEncrypt(child, entity.mUrl, 0); } else { child.newLoadUrl(entity.mUrl); } mBrw.popCloseAnalytics(child.getRelativeUrl()); mBrw.popOpenAnalytics(getRelativeUrl(), entity.mRelativeUrl); child.setRelativeUrl(entity.mRelativeUrl); break; case EBrwViewEntry.WINDOW_DATA_TYPE_DATA: child.newLoadData(entity.mData); break; case EBrwViewEntry.WINDOW_DATA_TYPE_DATA_URL: String data1 = ACEDes.decrypt(entity.mUrl, mContext, false, entity.mData); child.loadDataWithBaseURL(entity.mUrl, data1, EBrowserView.CONTENT_MIMETYPE_HTML, EBrowserView.CONTENT_DEFAULT_CODE, entity.mUrl); break; } return true; } public void openAd(int type, String inUrl, int inDTime, int inHeight, int inWidth, int inInterval, int inFlag) { EViewEntry ade = new EViewEntry(type, inUrl, inDTime, inHeight, inWidth, inInterval, inFlag); Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_OPEN_ADD; msg.obj = ade; mWindLoop.sendMessage(msg); } public void closeAd() { Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_AD_CLOSE; mWindLoop.sendMessage(msg); } public void loadTop(EBrwViewEntry inEntry) { int viewHeight = Compat.WRAP; if (inEntry.mHeight > 0) { viewHeight = inEntry.mHeight; } if (null == mTopView) { mTopView = new EBrowserView(mContext, EBrwViewEntry.VIEW_TYPE_TOP, this); mTopView.setId(VIEW_TOP); LayoutParams topParm = new LayoutParams(Compat.FILL, viewHeight); topParm.gravity = Gravity.TOP; mTopView.setLayoutParams(topParm); mTopView.setVisibility(INVISIBLE); addView(mTopView); mTopView.init(); } else { mTopView.getLayoutParams().height = viewHeight; requestLayout(); } mTopView.setQuery(inEntry.mQuery); switch (inEntry.mDataType) { case EBrwViewEntry.WINDOW_DATA_TYPE_URL: mTopView.newLoadUrl(inEntry.mUrl); break; case EBrwViewEntry.WINDOW_DATA_TYPE_DATA: mTopView.newLoadData(inEntry.mData); break; case EBrwViewEntry.WINDOW_DATA_TYPE_DATA_URL: String date1 = ACEDes.decrypt(inEntry.mUrl, mContext, false, inEntry.mData); mTopView.loadDataWithBaseURL(inEntry.mUrl, date1, EBrowserView.CONTENT_MIMETYPE_HTML, EBrowserView.CONTENT_DEFAULT_CODE, inEntry.mUrl); break; } } public void loadBottom(EBrwViewEntry inEntry) { int viewHeight = Compat.WRAP; if (inEntry.mHeight > 0) { viewHeight = inEntry.mHeight; } if (null == mBottomView) { mBottomView = new EBrowserView(mContext, EBrwViewEntry.VIEW_TYPE_BOTTOM, this); mBottomView.setId(VIEW_BOTTOM); LayoutParams bottomParm = new LayoutParams(Compat.FILL, viewHeight); bottomParm.gravity = Gravity.BOTTOM; mBottomView.setLayoutParams(bottomParm); mBottomView.setVisibility(INVISIBLE); addView(mBottomView); mBottomView.init(); } else { mBottomView.getLayoutParams().height = viewHeight; requestLayout(); } mBottomView.setQuery(inEntry.mQuery); switch (inEntry.mDataType) { case EBrwViewEntry.WINDOW_DATA_TYPE_URL: mBottomView.newLoadUrl(inEntry.mUrl); break; case EBrwViewEntry.WINDOW_DATA_TYPE_DATA: mBottomView.newLoadData(inEntry.mData); break; case EBrwViewEntry.WINDOW_DATA_TYPE_DATA_URL: String date1 = ACEDes.decrypt(inEntry.mUrl, mContext, false, inEntry.mData); mBottomView.loadDataWithBaseURL(inEntry.mUrl, date1, EBrowserView.CONTENT_MIMETYPE_HTML, EBrowserView.CONTENT_DEFAULT_CODE, inEntry.mUrl); break; } } public void evaluateScript(EBrowserView inWhich, String inWindowName, int inType, String inScript) { if (null == inWindowName || 0 == inWindowName.length() || inWindowName.equals(mName)) { switch (inType) { case EBrwViewEntry.VIEW_TYPE_MAIN: addUriTask(mMainView, inScript); break; case EBrwViewEntry.VIEW_TYPE_TOP: if (null != mTopView) { addUriTask(mTopView, inScript); } break; case EBrwViewEntry.VIEW_TYPE_BOTTOM: if (null != mBottomView) { addUriTask(mBottomView, inScript); } break; } } else { mBroWidget.evaluateScript(inWhich, inWindowName, inType, inScript); } } protected void onAppKeyPress(int keyCode) { if (null == mMainView) { return; } String js = "javascript:if(uexWindow.onKeyPressed){uexWindow.onKeyPressed(" + keyCode + ");}"; mMainView.loadUrl(js); } protected void onWindowUrlChange(String inWindName, String inUrl) { if (null == mMainView) { return; } String js = "javascript:if(uexWindow.onOAuthInfo){uexWindow.onOAuthInfo('" + inWindName + "','" + inUrl + "');}"; mMainView.loadUrl(js); } protected void notifyVisibilityChanged(int visibility) { if (null == mMainView) { return; } String js = "javascript:if(uexWindow.onStateChange){uexWindow.onStateChange(" + visibility + ");}"; mMainView.loadUrl(js); } protected void onAppPause() { if (null == mMainView) { return; } mMainView.loadUrl(EUExScript.F_UEX_SCRIPT_APPPAUSE); pauseTimers(); // EBrowserView.disablePlatformNotifications(); boolean isRootWidget = mBroWidget .checkWidgetType(EBrowserWidget.F_WIDGET_POOL_TYPE_ROOT); if (isRootWidget) { mBrw.onAppPauseAnalytics(getRelativeUrl(), mPopTable); } } protected void onAppStop() { if (null == mMainView) { return; } mMainView.loadUrl(EUExScript.F_UEX_SCRIPT_APPSTOP); } protected void onAppResume() { if (null == mMainView) { return; } resumeTimers(); // EBrowserView.enablePlatformNotifications(); mMainView.loadUrl(EUExScript.F_UEX_SCRIPT_APPRESUME); boolean isRootWidget = mBroWidget .checkWidgetType(EBrowserWidget.F_WIDGET_POOL_TYPE_ROOT); if (isRootWidget) { mBrw.onAppResumeAnalytics(getRelativeUrl(), mPopTable); } executeOnResumeJS(); } private void executeOnResumeJS() { if (mResumeJs != null && mResumeJs.size() != 0) { for (int i = 0; i < mResumeJs.size(); i++) { HashMap<String, Object> item = mResumeJs.get(i); String js = item.get("js").toString(); Log.i("executeOnResumeJS", js); EBrowserView wv = (EBrowserView) item.get("wv"); wv.loadUrl(js); } mResumeJs.clear(); mResumeJs = null; } } protected void onWidgetResult(String callBack, String inResultInfo) { if (null != callBack) { String js = "javascript:if(typeof(" + callBack + ")!='undefined'){" + callBack + "('" + inResultInfo + "')" + "}"; mMainView.loadUrl(js); } } protected void notifyScreenOrientationChange(Configuration newConfig) { if (null == mMainView) { return; } int type = newConfig.orientation; if (type == Configuration.ORIENTATION_LANDSCAPE) { mMainView.loadUrl(EUExScript.F_UEX_SCRIPT_OC_LANDSCAPE); } else if (type == Configuration.ORIENTATION_PORTRAIT) { mMainView.loadUrl(EUExScript.F_UEX_SCRIPT_OC_PORTRAIT); } } protected void pushNotify(String function, String appType) { if (null == mMainView) { return; } String js = "javascript:" + function + "('" + appType + "');"; mMainView.loadUrl(js); } public void uexOnAuthorize(String id) { if (null == mMainView) { return; } String js = "javascript:if(window.uexOnAuthorize){window.uexOnAuthorize('" + id + "')}"; mMainView.loadUrl(js); } public void onLoadObfuscationData(String inUrl) { if (!isObfuscation()) { Toast.makeText(mContext, EUExUtil.getString("platform_no_configuration_decryption_permissions"), Toast.LENGTH_SHORT) .show(); return; } mMainView.needToEncrypt(mMainView, BUtility.makeUrl(location(), inUrl), EBrowserHistory.UPDATE_STEP_ADD); } public void start(String url) { mMainView.start(url); } public void start1(String url) { mMainView.start1(url); } public void startWidget(WWidgetData inData, EWgtResultInfo inResult) { if (null == inData) { return; } mBrw.startWidget(inData, inResult); } public void needToEncrypt(String url) { mMainView.needToEncrypt(mMainView, url, EBrowserHistory.UPDATE_STEP_INIT); } public void newLoadData(String inDta) { mMainView.newLoadData(inDta); } public void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl) { mMainView.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, historyUrl); } public void onSetWindowFrameFinish() { mMainView.loadUrl(EUExScript.F_UEX_SCRIPT_SET_WINDOW_FRAME_END); } public void setQuery(int type, String query) { switch (type) { case EBrwViewEntry.VIEW_TYPE_MAIN: mMainView.setQuery(query); break; case EBrwViewEntry.VIEW_TYPE_TOP: mTopView.setQuery(query); break; case EBrwViewEntry.VIEW_TYPE_BOTTOM: mBottomView.setQuery(query); break; } } public void clearHistory() { mMainView.clearHistory(); if (null != mTopView) { mTopView.clearHistory(); } if (null != mBottomView) { mBottomView.clearHistory(); } } public void clearCache(boolean flag) { mMainView.clearCache(true); } public void pauseTimers() { // if (null != mMainView) { // mMainView.pauseTimers(); // } // if (null != mBottomView) { // mBottomView.pauseTimers(); // } // if (null != mTopView) { // mTopView.pauseTimers(); // } } public void resumeTimers() { // if (null != mMainView) { // mMainView.resumeTimers(); // } // if (null != mBottomView) { // mBottomView.resumeTimers(); // } // if (null != mTopView) { // mTopView.resumeTimers(); // } } public void updateObfuscationHistroy(String inUrl, int step, boolean isObfuscation) { mObHistroy.update(inUrl, step, isObfuscation); } public EHistoryEntry getHistory(int step) { return mObHistroy.getHistory(step); } public EBrowser getBrowser() { return mBrw; } public void clearObfuscationHistroy() { mObHistroy.clear(); } public String getOpener() { return mBroWidget.getResult().getOpener(); } public boolean canGoBack() { if (isObfuscation()) { return mObHistroy.canGoBack(); } return mMainView.canGoBack(); } public boolean isObfuscation() { WWidgetData wgt = getWidget(); if (null == wgt) { return false; } return 1 == getWidget().m_obfuscation ? true : false; } public boolean canGoForward() { if (isObfuscation()) { return mObHistroy.canGoForward(); } return mMainView.canGoForward(); } public void goBack() { Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_HISTROY_BACK; mWindLoop.sendMessage(msg); } public void goForward() { Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_HISTROY_FORWARD; mWindLoop.sendMessage(msg); } public void windowGoBack(int inAnimitionID, long duration) { mBroWidget.windowGoBack(this, inAnimitionID, duration); } public void windowGoForward(int inAnimitionID, long duration) { mBroWidget.windowGoForward(this, inAnimitionID, duration); } public void refresh() { mMainView.reload(); } protected String location() { String url = mMainView.getUrl(); if (null == url) { return null; } int index = url.indexOf("?"); if (-1 != index) { url = url.substring(0, index); } return url; } // url width Query protected String getAbsoluteUrl() { return mMainView.getUrl(); } protected String getRelativeUrl() { return mMainView.getRelativeUrl(); } public int getWindPoType() { return mWindPoType; } public void setWindPoType(int flag) { mWindPoType = flag; } public boolean checkWindPoType(int flag) { return mWindPoType == flag; } public EBrowserView getTopView() { return mTopView; } public EBrowserView getMainView() { return mMainView; } public EBrowserView getBottomView() { return mBottomView; } public WWidgetData getWidget() { return mBroWidget.getWidget(); } public WWidgetData getRootWidget() { return mBroWidget.getRootWidget(); } public EBrowserWidget getWGT(String app_id) { return mBrw.getWidget(app_id); } public void clearPopQue() { mPreQueue.clear(); } public String getName() { return mName; } public void setName(String inWindowName) { mName = inWindowName; } public int getDateType() { return mDateType; } public void setDateType(int dateType) { mDateType = dateType; } public boolean checkDateType(int dateType) { return mDateType == dateType; } public Map<String, EBrowserView> getAllPopOver() { return mPopTable; } public int getAnimId() { return mAnimId; } public void setAnimId(int inAnimId) { mAnimId = inAnimId; } public boolean isAnimFill() { return mAnimFill; } public void setAnimFill(boolean flag) { mAnimFill = flag; } public boolean isHidden() { return mHidden; } public void setHidden(boolean flag) { mHidden = flag; } public boolean isLockBackKey() { return mLockBackKey; } public void setLockBackKey(boolean flag) { mLockBackKey = flag; } public boolean isLockMenuKey() { return mLockMenuKey; } public void setLockMenuKey(boolean flag) { mLockMenuKey = flag; } public void toast(int type, int location, String inMsg, int inDuration) { EViewEntry en = new EViewEntry(type, location, inMsg, inDuration); Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_TOAST_SHOW; msg.obj = en; mWindLoop.sendMessage(msg); } public void closeToast() { Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_TOAST_CLOSE; mWindLoop.sendMessage(msg); } protected void onPageStarted(EBrowserView view, String url) { if (null != mWinRegist) { EBrowserWindow win = mBroWidget.getEBrowserWindow(mWinRegist); if (null != win) { win.onUrlChange(mName, url); } } mLockBackKey = false; mLockMenuKey = false; mBroWidget.notifyWindowStart(this, view, url); } protected void onUrlChange(String windName, String url) { onWindowUrlChange(windName, url); } private void addViewFinish(int type) { if (null != mAddView) { mAddView.loadUrl(EUExScript.F_UEX_SCRIPT_SELF_FINISH); } } private boolean popOverFinish(String name, int type) { EBrowserView popView = mPopTable.get(name); boolean isHasPop = false; if (null != popView) { popView.loadUrl(EUExScript.F_UEX_SCRIPT_SELF_FINISH); String popName = name; String popUrl = popView.getUrl(); evaluateScript(mMainView, "root", 0, "javascript:if(uexWindow.onPopoverLoadFinishInRootWnd){uexWindow.onPopoverLoadFinishInRootWnd('" + popName + "','" + popUrl + "');}"); isHasPop = true; } if (mMultiPopTable != null && mMultiPopTable.size() > 0) { for (Map.Entry<String, ArrayList<EBrowserView>> entry : mMultiPopTable .entrySet()) { ArrayList<EBrowserView> temp = entry.getValue(); if (null != temp && temp.size() > 0) { for (int i = 0; i < temp.size(); i++) { if ((temp.get(i).getName()).equals(name)) { temp.get(i).loadUrl(EUExScript.F_UEX_SCRIPT_SELF_FINISH); isHasPop = true; String popName = name; String popUrl = temp.get(i).getUrl(); evaluateScript(mMainView, "root", 0, "javascript:if(uexWindow.onPopoverLoadFinishInRootWnd){uexWindow.onPopoverLoadFinishInRootWnd('" + popName + "','" + popUrl + "');}"); } } } } } if (isHasPop && checkFlag(EBrowserWindow.F_WINDOW_FLAG_OPPOP)) { mPreQueue.remove(name); if (checkFlag(EBrowserWindow.F_WINDOW_FLAG_OPPOP_END)) { if (mPreQueue.isEmpty()) { return true; } } else { ; } } return false; } private void topFinish() { mMainView.loadUrl(EUExScript.F_UEX_SCRIPT_TOP_FINISH); } private void bottomFinish() { mMainView.loadUrl(EUExScript.F_UEX_SCRIPT_BOTTOM_FINISH); } protected void selfFinish(EBrowserView target) { if (null != target) { target.loadUrl(EUExScript.F_UEX_SCRIPT_SELF_FINISH); } else { mMainView.loadUrl(EUExScript.F_UEX_SCRIPT_SELF_FINISH); } } protected void onPageFinished(EBrowserView target, String url) { int type = target.getType(); switch (type) { case EBrwViewEntry.VIEW_TYPE_TOP: topFinish(); break; case EBrwViewEntry.VIEW_TYPE_BOTTOM: bottomFinish(); break; case EBrwViewEntry.VIEW_TYPE_MAIN: if (checkFlag(EBrowserWindow.F_WINDOW_FLAG_OPPOP)) { selfFinish(target); return; } selfFinish(target); mBroWidget.notifyWindowFinish(this, target, url); // selfFinish(target); ((EBrowserActivity) mContext).loadByOtherApp(); break; case EBrwViewEntry.VIEW_TYPE_ADD: addViewFinish(0); break; case EBrwViewEntry.VIEW_TYPE_POP: String name = target.getName(); // target.setVisibility(VISIBLE); boolean isFinish = popOverFinish(name, 0); if (isFinish) { mBroWidget.notifyWindowFinish(this, target, url); } break; } } private void notifyTopShown() { mMainView.loadUrl(EUExScript.F_UEX_SCRIPT_TOP_SHOW); } private void notifyBottomShown() { mMainView.loadUrl(EUExScript.F_UEX_SCRIPT_BOTTOM_SHOW); } public void setEBrowserWidget(EBrowserWidget ewidget) { mBroWidget = ewidget; } public EBrowserWidget getEBrowserWidget() { return mBroWidget; } public boolean isOAuth() { return mOAuth; } public void setOAuth(boolean flag) { mOAuth = flag; } public boolean isPrevWindowWillHidden() { return mPrevWillHidden; } public void setPrevWindowWillHidden(boolean flag) { mPrevWillHidden = flag; } public void setShouldOpenUrlInSystem(boolean flag) { mMainView.setShouldOpenInSystem(flag); } public int getWidgetType() { return mBroWidget.getWidgetType(); } public void registUrlChangeNotify(String windowName) { mWinRegist = windowName; } public long getAnimDuration() { return mAnimDuration; } public void setAnimDuration(long animDuration) { mAnimDuration = animDuration; } public void setSupportZoom() { mMainView.setSupportZoom(); } protected void stopLoad() { mMainView.stopLoading(); for (Map.Entry<String, EBrowserView> entry : mPopTable.entrySet()) { EBrowserView temp = entry.getValue(); temp.stopLoading(); } for (Map.Entry<String, ArrayList<EBrowserView>> entry : mMultiPopTable .entrySet()) { ArrayList<EBrowserView> temp = entry.getValue(); if (null != temp && temp.size() > 0) { for (int i = temp.size() - 1; i >= 0; i--) { temp.get(i).stopLoading(); } } } if (mBottomView != null) { mBottomView.stopLoading(); } if (mTopView != null) { mTopView.stopLoading(); } if (null != mAddView) { mAddView.stopLoading(); } } public void reset() { mMainView.reset(); if (null != mTopView) { mTopView.reset(); } if (null != mBottomView) { mBottomView.reset(); } mAnimId = EBrowserAnimation.ANIM_ID_NONE; mAnimDuration = EBrowserAnimation.defaultDuration; mBroWidget = null; mName = null; mOAuth = false; mAnimFill = false; mHidden = false; mLockBackKey = false; mLockMenuKey = false; mPrevWillHidden = false; mWinRegist = null; clearFlag(); hCloseSlibing(1); hCloseSlibing(2); setWindPoType(F_WINDOW_FLAG_NONE); clearObfuscationHistroy(); for (Map.Entry<String, EBrowserView> entry : mPopTable.entrySet()) { EBrowserView temp = entry.getValue(); View parent = (View) temp.getParent(); removeView(parent); temp.destroy(); } mPopTable.clear(); for (Map.Entry<String, ArrayList<EBrowserView>> entry : mMultiPopTable .entrySet()) { ArrayList<EBrowserView> temp = entry.getValue(); if (null != temp && temp.size() > 0) { View parent = (View) temp.get(0).getParent(); removeView(parent); for (int i = temp.size() - 1; i >= 0; i--) { temp.get(i).destroy(); } } } mMultiPopTable.clear(); if (null != mAddView) { removeView(mAddView); mAddView.destroy(); mAddView = null; } ViewGroup parent = (ViewGroup) getParent(); if (null != parent) { parent.removeView(this); } if (mResumeJs != null) { mResumeJs.clear(); mResumeJs = null; } clearViewList(); } private void clearViewList() { for (View view : viewList) { if (view != null) { removeView(view); } } viewList.clear(); } private void removeViewList(View view) { viewList.remove(view); removeView(view); } public void destory() { stopLoop(); stopLoad(); mMainView.clearCache(false); mMainView.destroy(); if (null != mTopView) { mTopView.destroy(); } if (null != mBottomView) { mBottomView.destroy(); } for (Map.Entry<String, EBrowserView> entry : mPopTable.entrySet()) { EBrowserView temp = entry.getValue(); if (null != temp) { temp.destroy(); } } mPopTable.clear(); for (Map.Entry<String, ArrayList<EBrowserView>> entry : mMultiPopTable .entrySet()) { ArrayList<EBrowserView> temp = entry.getValue(); if (null != temp && temp.size() > 0) { for (int i = temp.size() - 1; i >= 0; i--) { temp.get(i).destroy(); } } } mMultiPopTable.clear(); mMultiPopPager.clear(); if (null != mAddView) { mAddView.destroy(); } removeAllViews(); ViewParent parent = getParent(); if (null != parent) { ((EBrowserWidget) parent).removeView(this); } mTopView = null; mMainView = null; mBottomView = null; mPopTable = null; mMultiPopTable = null; mAddView = null; mBounceView = null; mBroWidget = null; mObHistroy = null; mName = null; mContext = null; mWinRegist = null; mAddViewTimer = null; } public void addUriTask(EBrowserView target, String uri) { EUriTask task = new EUriTask(target, uri); Message msg = mWindLoop.obtainMessage(); msg.obj = task; msg.what = F_WHANDLER_ADD_URL_TARGET; mWindLoop.sendMessage(msg); } public void addUriTaskAsyn(EBrowserView target, String uri) { if (mResumeJs == null) { mResumeJs = new ArrayList<HashMap<String, Object>>(); } HashMap<String, Object> item = new HashMap<String, Object>(); item.put("js", uri); item.put("wv", target); mResumeJs.add(item); } public void addDialogTask(EDialogTask target) { Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_DIALOG; msg.obj = target; mWindLoop.sendMessage(msg); } public void addBounceTask(EViewEntry target, int what) { Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_BOUNCE_TASK; msg.obj = target; msg.arg1 = what; mWindLoop.sendMessage(msg); } public void stopLoop() { int len = TOTAL; for (int i = 0; i < len; ++i) { mWindLoop.removeMessages(i); } } private int getPopMinIndex(View cru) { int l = -1; for (Map.Entry<String, EBrowserView> entry : mPopTable.entrySet()) { EBrowserView bv = entry.getValue(); View parent = (View) bv.getParent(); if (cru == parent) { continue; } int index = indexOfChild(parent); if (l < 0) { l = index; continue; } if (index < l) { l = index; } } return l; } private void hOpenSlibing(EBrwViewEntry entry) { switch (entry.mType) { case EBrwViewEntry.VIEW_TYPE_TOP: loadTop(entry); break; case EBrwViewEntry.VIEW_TYPE_BOTTOM: loadBottom(entry); break; } } private void hShowSlibing(int type) { switch (type) { case EBrwViewEntry.VIEW_TYPE_TOP: if (null != mTopView) { mTopView.setVisibility(VISIBLE); notifyTopShown(); } break; case EBrwViewEntry.VIEW_TYPE_BOTTOM: if (null != mBottomView) { mBottomView.setVisibility(VISIBLE); notifyBottomShown(); } break; } } private void hCloseSlibing(int type) { switch (type) { case 1: if (null != mTopView) { mTopView.setVisibility(INVISIBLE); } break; case 2: if (null != mBottomView) { mBottomView.setVisibility(INVISIBLE); } break; } } private void hToastShow(EViewEntry entry) { if (null == mToast) { mToast = new EBrowserToast(mContext); addView(mToast); } LayoutParams parm = new LayoutParams(Compat.WRAP, Compat.WRAP); switch (entry.location) { case EBrowserToast.TOAST_LOCATION_LEFT_TOP: parm.gravity = Gravity.LEFT | Gravity.TOP; parm.topMargin = 10; parm.leftMargin = 5; break; case EBrowserToast.TOAST_LOCATION_TOP: parm.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP; parm.topMargin = 10; break; case EBrowserToast.TOAST_LOCATION_RIGHT_TOP: parm.gravity = Gravity.RIGHT | Gravity.TOP; parm.topMargin = 10; parm.rightMargin = 5; break; case EBrowserToast.TOAST_LOCATION_RIGHT: parm.gravity = Gravity.CENTER_VERTICAL | Gravity.RIGHT; parm.rightMargin = 5; break; case EBrowserToast.TOAST_LOCATION_RIGHT_BOTTOM: parm.gravity = Gravity.RIGHT | Gravity.BOTTOM; parm.bottomMargin = 10; parm.rightMargin = 5; break; case EBrowserToast.TOAST_LOCATION_BOTTOM: parm.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL; parm.bottomMargin = 10; break; case EBrowserToast.TOAST_LOCATION_BOTTOM_LEFT: parm.gravity = Gravity.LEFT | Gravity.BOTTOM; parm.bottomMargin = 10; parm.leftMargin = 5; break; case EBrowserToast.TOAST_LOCATION_LEFT: parm.gravity = Gravity.CENTER_VERTICAL | Gravity.LEFT; parm.leftMargin = 5; break; case EBrowserToast.TOAST_LOCATION_MIDDLE: default: parm.gravity = Gravity.CENTER; break; } mToast.setMsg(entry.msg); mToast.setLayoutParams(parm); mToast.setVisibility(VISIBLE); if (0 == entry.type) { mToast.hiddenProgress(); } else { mToast.showProgress(); } bringChildToFront(mToast); if (entry.duration > 0) { Message msg = mWindLoop.obtainMessage(F_WHANDLER_TOAST_CLOSE); mWindLoop.sendMessageDelayed(msg, entry.duration); } } private void hPopOverOpen(EBrwViewEntry entity) { if (checkPop(entity)) { return; } EBrowserView eView = new EBrowserView(mContext, entity.mType, this); // eView.setVisibility(INVISIBLE); eView.setName(entity.mViewName); eView.setRelativeUrl(entity.mRelativeUrl); eView.setDateType(entity.mDataType); LayoutParams newParm = new LayoutParams(entity.mWidth, entity.mHeight); newParm.gravity = Gravity.NO_GRAVITY; newParm.leftMargin = entity.mX; newParm.topMargin = entity.mY; newParm.bottomMargin = entity.mBottom; EBounceView bounceView = new EBounceView(mContext); EUtil.viewBaseSetting(bounceView); bounceView.setLayoutParams(newParm); bounceView.addView(eView); addView(bounceView); eView.setHWEnable(entity.mHardware); if (entity.checkFlag(EBrwViewEntry.F_FLAG_SHOULD_OP_SYS)) { eView.setShouldOpenInSystem(true); } if (!entity.hasExtraInfo) { if (entity.checkFlag(EBrwViewEntry.F_FLAG_OPAQUE)) { eView.setOpaque(true); } else { eView.setOpaque(false); } } if (entity.hasExtraInfo) { /** wanglei del 20151124*/ // eView.setBrwViewBackground(entity.mOpaque, entity.mBgColor, ""); /** wanglei add 20151124*/ bounceView.setBounceViewBackground(entity.mOpaque, entity.mBgColor, "", eView); } /** wanglei add 20151124*/ eView.setBackgroundColor(Color.TRANSPARENT); if (entity.checkFlag(EBrwViewEntry.F_FLAG_OAUTH)) { eView.setOAuth(true); } if (entity.checkFlag(EBrwViewEntry.F_FLAG_WEBAPP)) { eView.setWebApp(true); } eView.setQuery(entity.mQuery); eView.init(); eView.setDownloadCallback(entity.mDownloadCallback); eView.setUserAgent(entity.mUserAgent); if (entity.checkFlag(EBrwViewEntry.F_FLAG_GESTURE)) { eView.setSupportZoom(); } if (entity.mFontSize > 0) { eView.setDefaultFontSize(entity.mFontSize); } mPopTable.put(entity.mViewName, eView); if (checkFlag(EBrowserWindow.F_WINDOW_FLAG_OPPOP)) { mPreQueue.add(entity.mViewName); } switch (entity.mDataType) { case EBrwViewEntry.WINDOW_DATA_TYPE_URL: // if (entity.checkFlag(EBrwViewEntry.F_FLAG_OBFUSCATION)) { if ((getWidget().m_obfuscation == 1) && !entity.checkFlag(EBrwViewEntry.F_FLAG_WEBAPP)) { eView.needToEncrypt(eView, entity.mUrl, 0); } else { eView.newLoadUrl(entity.mUrl); } break; case EBrwViewEntry.WINDOW_DATA_TYPE_DATA: eView.newLoadData(entity.mData); break; case EBrwViewEntry.WINDOW_DATA_TYPE_DATA_URL: String date1 = ACEDes.decrypt(entity.mUrl, mContext, false, entity.mData); eView.loadDataWithBaseURL(entity.mUrl, date1, EBrowserView.CONTENT_MIMETYPE_HTML, EBrowserView.CONTENT_DEFAULT_CODE, entity.mUrl); break; } } private void hSetPopOverFrame(EBrwViewEntry entity) { EBrowserView pop = mPopTable.get(entity.mViewName); if (pop == null) { return; } View vParent = (View) pop.getParent(); LayoutParams lParam = new LayoutParams(entity.mWidth, entity.mHeight); lParam.gravity = Gravity.NO_GRAVITY; lParam.leftMargin = entity.mX; lParam.topMargin = entity.mY; vParent.setLayoutParams(lParam); } private void hPopOverClose(String popName) { EBrowserView target = mPopTable.get(popName); if (null != target) { mPopTable.remove(popName); if (target.supportZoom()) { target.destroyControl(); } target.stopLoading(); View parent = (View) target.getParent(); removeView(parent); target.destroy(); boolean isRootWidget = mBroWidget .checkWidgetType(EBrowserWidget.F_WIDGET_POOL_TYPE_ROOT); if (isRootWidget) { mBrw.popCloseAnalytics(target.getRelativeUrl()); } if (mChannelList != null) { for (int i = 0; i < mChannelList.size(); i++) { HashMap<String, String> item = mChannelList.get(i); if (item.containsKey(TAG_CHANNEL_WINNAME) && popName.equals(item.get(TAG_CHANNEL_WINNAME))) { mChannelList.remove(i); } } } } } private void hOpenAdd(EViewEntry entity) { if (null == mAddView) { mAddView = new EBrowserView(mContext, EBrwViewEntry.VIEW_TYPE_ADD, this); LayoutParams addParm = new LayoutParams(entity.width, entity.height); switch (entity.type) { case EViewEntry.F_ADD_LOCATION_TOP: // top addParm.gravity = Gravity.TOP | Gravity.LEFT; break; case EViewEntry.F_ADD_LOCATION_MID: // full screen // addParm.addRule(RelativeLayout.CENTER_IN_PARENT, // RelativeLayout.TRUE); break; case EViewEntry.F_ADD_LOCATION_BOTTOM: // bottom addParm.gravity = Gravity.BOTTOM | Gravity.LEFT; break; default: addParm.gravity = Gravity.TOP | Gravity.LEFT; break; } mAddView.setLayoutParams(addParm); mAddView.setVisibility(VISIBLE); if (entity.checkFlag(EBrwViewEntry.F_FLAG_SHOULD_OP_SYS)) { mAddView.setShouldOpenInSystem(true); } else { mAddView.setShouldOpenInSystem(false); } if (entity.checkFlag(EBrwViewEntry.F_FLAG_OPAQUE)) { mAddView.setOpaque(true); } addView(mAddView); mAddView.init(); } else { LayoutParams addParm = new LayoutParams(entity.width, entity.height); switch (entity.type) { case EViewEntry.F_ADD_LOCATION_TOP: // top addParm.gravity = Gravity.TOP | Gravity.LEFT; break; case EViewEntry.F_ADD_LOCATION_MID: // full screen // addParm.addRule(RelativeLayout.CENTER_IN_PARENT, // RelativeLayout.TRUE); break; case EViewEntry.F_ADD_LOCATION_BOTTOM: // bottom addParm.gravity = Gravity.BOTTOM | Gravity.LEFT; ; break; default: addParm.gravity = Gravity.TOP | Gravity.LEFT; break; } mAddView.setLayoutParams(addParm); } mAddView.newLoadUrl(entity.url); if (entity.time > 0 && entity.interval > 0) { if (null == mAddViewTimer) { mAddViewTimer = new EAdViewTimer(entity.time, entity.interval) { @Override public void onShow() { mAddView.setVisibility(VISIBLE); } @Override public void onClose() { mAddView.setVisibility(GONE); } }.start(); } else { mAddViewTimer.reStart(entity.time, entity.interval); } } else { if (null != mAddViewTimer) { mAddViewTimer.showAlway(); } } } private void hCloseAdd() { if (null != mAddViewTimer) { mAddViewTimer.cancel(); mAddView.stopLoading(); removeView(mAddView); mAddView.destroy(); mAddView = null; } } private void hBounceTask(EViewEntry bunceEnty, int what) { EBounceView BView = (EBounceView) bunceEnty.obj; switch (what) { case EViewEntry.F_BOUNCE_TASK_SHOW_BOUNCE_VIEW: BView.showBounceView(bunceEnty.type, bunceEnty.color, bunceEnty.flag); break; case EViewEntry.F_BOUNCE_TASK_HIDDEN_BOUNCE_VIEW: BView.hiddenBounceView(bunceEnty.type); break; case EViewEntry.F_BOUNCE_TASK_RESET_BOUNCE_VIEW: BView.resetBounceView(bunceEnty.type); break; case EViewEntry.F_BOUNCE_TASK_SET_BOUNCE_VIEW: BView.setBounce(bunceEnty.flag != 0 ? true : false); break; case EViewEntry.F_BOUNCE_TASK_GET_BOUNCE_VIEW: BView.getBounce(); break; case EViewEntry.F_BOUNCE_TASK_NOTIFY_BOUNCE_VIEW: BView.notifyBounceEvent(bunceEnty.type, bunceEnty.flag); break; case EViewEntry.F_BOUNCE_TASK_SET_BOUNCE_PARMS: BView.setBounceParms(bunceEnty.type, (JSONObject) bunceEnty.obj1, bunceEnty.arg1); break; case EViewEntry.F_BOUNCE_TASK_TOP_BOUNCE_VIEW_REFRESH: BView.topBounceViewRefresh(); break; } } public static final int F_WHANDLER_TOAST_SHOW = 0; public static final int F_WHANDLER_TOAST_CLOSE = 1; public static final int F_WHANDLER_SLIBING_CREATE = 2; public static final int F_WHANDLER_SLIBING_SHOW = 3; public static final int F_WHANDLER_SLIBING_CLOSE = 4; public static final int F_WHANDLER_HISTROY_BACK = 5; public static final int F_WHANDLER_HISTROY_FORWARD = 6; // public static final int F_WHANDLER_POP_OPEN = 7; // public static final int F_WHANDLER_POP_CLOSE = 8; public static final int F_WHANDLER_POP_SET = 9; public static final int F_WHANDLER_ADD_URL_TARGET = 10; public static final int F_WHANDLER_OPEN_ADD = 11; public static final int F_WHANDLER_AD_CLOSE = 12; public static final int F_WHANDLER_DIALOG = 13; public static final int F_WHANDLER_ADD_VIEW = 14; public static final int F_WHANDLER_REMOVE_VIEW = 15; public static final int F_WHANDLER_BOUNCE_TASK = 16; // public static final int F_WHANDLER_MULTIPOP_OPEN = 17; public static final int F_WHANDLER_BRING_TO_FRONT = 18; public static final int F_WHANDLER_SEND_TO_BACK = 19; public static final int F_WHANDLER_INSERT_ABOVE = 20; public static final int F_WHANDLER_INSERT_BELOW = 21; public static final int F_WHANDLER_INSERT_POPOVER_ABOVE_POPOVER = 22; public static final int F_WHANDLER_INSERT_POPOVER_BELOW_POPOVER = 23; public static final int F_WHANDLER_BING_POPOVER_TO_FRONT = 24; public static final int F_WHANDLER_BRING_MULTIPOPOVER_TO_FRONT = 25; public static final int F_WHANDLER_SEND_POPOVER_TO_BACK = 26; public static final int F_WHANDLER_SEND_MULTIPOPOVER_TO_BACK = 27; public static final int F_WHANDLER_SET_VISIBLE = 28; public static final int F_WHANDLER_MULTIPOP_CLOSE = 29; public static final int F_WHANDLER_MULTIPOP_SELECTED_CHANGE = 30; public static final int F_SHOW_SOFTKEYBOARD = 31; public static final int F_WHANDLER_MULTIPOP_SET = 32; public static final int TOTAL = F_WHANDLER_SET_VISIBLE + 1; public class WindowHander extends Handler { public WindowHander(Looper loop) { super(loop); } public void handleMessage(Message msg) { switch (msg.what) { case F_WHANDLER_TOAST_SHOW:// show hToastShow((EViewEntry) msg.obj); break; case F_WHANDLER_TOAST_CLOSE:// close if (null != mToast) { mToast.setVisibility(GONE); } break; case F_WHANDLER_SLIBING_CREATE: hOpenSlibing((EBrwViewEntry) msg.obj); break; case F_WHANDLER_SLIBING_SHOW: hShowSlibing(msg.arg1); break; case F_WHANDLER_SLIBING_CLOSE: hCloseSlibing(msg.arg1); break; case F_WHANDLER_HISTROY_BACK: mMainView.goBack(); break; case F_WHANDLER_HISTROY_FORWARD: mMainView.goForward(); break; // case F_WHANDLER_POP_OPEN: // hPopOverOpen((EBrwViewEntry) msg.obj); // break; // case F_WHANDLER_MULTIPOP_OPEN: // hMultiPopOverOpen((ArrayList<EBrwViewEntry>) msg.obj, msg.arg1); // break; case F_WHANDLER_POP_SET: hSetPopOverFrame((EBrwViewEntry) msg.obj); break; // case F_WHANDLER_POP_CLOSE: // hPopOverClose((String) msg.obj); // break; case F_WHANDLER_MULTIPOP_CLOSE: hMultiPopOverClose((String) msg.obj); break; case F_WHANDLER_MULTIPOP_SET: hSetMultiPopOverFrame((EBrwViewEntry) msg.obj); break; case F_WHANDLER_MULTIPOP_SELECTED_CHANGE: hSetMuliPopOverSelected((String) msg.obj, msg.arg1); break; case F_WHANDLER_ADD_URL_TARGET: EUriTask task = (EUriTask) msg.obj; task.exc(); break; case F_WHANDLER_OPEN_ADD: hOpenAdd((EViewEntry) msg.obj); break; case F_WHANDLER_AD_CLOSE: hCloseAdd(); break; case F_WHANDLER_DIALOG: EDialogTask dTask = (EDialogTask) msg.obj; dTask.exc(); break; case F_WHANDLER_ADD_VIEW: View childAdd = (View) msg.obj; childAdd.setTag(EViewEntry.F_PLUGIN_VIEW_TAG); Animation anim = childAdd.getAnimation(); addView(childAdd); if (null != anim) { anim.start(); } bringChildToFront(childAdd); break; case F_WHANDLER_REMOVE_VIEW: View children = (View) msg.obj; Animation removeAnim = children.getAnimation(); if (null != removeAnim) { removeAnim.start(); } removeViewList(children); msg.obj = null; break; case F_WHANDLER_BOUNCE_TASK: EViewEntry bunceEnty = (EViewEntry) msg.obj; hBounceTask(bunceEnty, msg.arg1); break; case F_WHANDLER_BRING_TO_FRONT: View child = (View) msg.obj; bringChildToFront(child); invalidate(); break; case F_WHANDLER_SEND_TO_BACK: View child1 = (View) msg.obj; removeView(child1); int it = getPopMinIndex(child1); addView(child1, it); break; case F_WHANDLER_INSERT_ABOVE: EViewEntry a = (EViewEntry) msg.obj; View c1 = (View) a.obj; View c2 = (View) a.obj1; removeView(c1); int i = indexOfChild(c2); addView(c1, i + 1); break; case F_WHANDLER_INSERT_BELOW: EViewEntry b = (EViewEntry) msg.obj; View c3 = (View) b.obj; View c4 = (View) b.obj1; removeView(c3); int j = indexOfChild(c4); addView(c3, j); break; case F_WHANDLER_INSERT_POPOVER_ABOVE_POPOVER: EViewEntry c = (EViewEntry) msg.obj; View bn1 = (View) c.obj; View bn2 = (View) c.obj1; removeView(bn1); int i2 = indexOfChild(bn2); addView(bn1, i2 + 1); break; case F_WHANDLER_INSERT_POPOVER_BELOW_POPOVER: EViewEntry d = (EViewEntry) msg.obj; View bo1 = (View) d.obj; View bo2 = (View) d.obj1; removeView(bo1); int j2 = indexOfChild(bo2); addView(bo1, j2); break; case F_WHANDLER_BING_POPOVER_TO_FRONT: View bp = (View) msg.obj; bringChildToFront(bp); invalidate(); break; case F_WHANDLER_SEND_POPOVER_TO_BACK: View bq = (View) msg.obj; removeView(bq); int ir = getPopMinIndex(bq); addView(bq, ir); break; case F_WHANDLER_SET_VISIBLE: EViewEntry entry = (EViewEntry) msg.obj; int visible = 0 == entry.flag ? View.VISIBLE : View.GONE; View target = null; if (entry.bArg1) { target = mPopTable.get(entry.arg1); } else { target = EBrowserWindow.this; } if (null != target) { target.setVisibility(visible); } break; case F_SHOW_SOFTKEYBOARD: try { InputMethodManager imm = (InputMethodManager) mContext .getSystemService(Context.INPUT_METHOD_SERVICE); if (imm.isActive()) { imm.toggleSoftInput(0, InputMethodManager.RESULT_SHOWN); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } break; } } } private void hMultiPopOverOpen(final ArrayList<EBrwViewEntry> entitys, final int index) { final ArrayList<EBounceView> viewList = new ArrayList<EBounceView>(); EBrwViewEntry mainEntry = entitys.get(0); Log.d("multi", "entitys num:" + entitys.size()); if (checkMultiPop(entitys)){ return; } EBrowserView parentBrowerview = new EBrowserView(mContext, mainEntry.mType, this); parentBrowerview.setVisibility(VISIBLE); parentBrowerview.setName(mainEntry.mViewName); parentBrowerview.setRelativeUrl(mainEntry.mRelativeUrl); parentBrowerview.setDateType(mainEntry.mDataType); LayoutParams newParm = new LayoutParams(mainEntry.mWidth, mainEntry.mHeight); // newParm.leftMargin = entity.mX; // newParm.topMargin = entity.mY; int parentRight = getRight(); int parentBottom = getBottom(); int newRight = mainEntry.mX + mainEntry.mWidth; if (newRight > parentRight) { newParm.rightMargin = parentRight - newRight; } else { newParm.rightMargin = 0; } int newBottom = mainEntry.mY + mainEntry.mHeight; if (newBottom > parentBottom) { newParm.bottomMargin = parentBottom - newBottom; } else if (0 == newBottom) { mainEntry.mY = mainEntry.mY + 1; newParm.bottomMargin = 0; } else { newParm.bottomMargin = 0; } newParm.topMargin = mainEntry.mY; newParm.leftMargin = mainEntry.mX; EBounceView bounceView = new EBounceView(mContext); EUtil.viewBaseSetting(bounceView); bounceView.setLayoutParams(newParm); bounceView.addView(parentBrowerview); addView(bounceView); if (mainEntry.hasExtraInfo) { /** wanglei del 20151124*/ // parentBrowerview.setBrwViewBackground(mainEntry.mOpaque, mainEntry.mBgColor, ""); /** wanglei add 20151124*/ bounceView.setBounceViewBackground( mainEntry.mOpaque, mainEntry.mBgColor, "", parentBrowerview); } else { if (mainEntry.checkFlag(EBrwViewEntry.F_FLAG_OPAQUE)) { parentBrowerview.setOpaque(true); } else { parentBrowerview.setOpaque(false); } } parentBrowerview.setDownloadCallback(mainEntry.mDownloadCallback); parentBrowerview.init(); for (int i = 1; i < entitys.size(); i++) { EBrwViewEntry entity = entitys.get(i); EBrowserView childView = new EBrowserView(mContext, entity.mType, this); childView.setVisibility(VISIBLE); childView.setName(entity.mViewName); childView.setRelativeUrl(entity.mRelativeUrl); childView.setDateType(entity.mDataType); EBounceView bounceViewChild = new EBounceView(mContext); EUtil.viewBaseSetting(bounceViewChild); bounceViewChild.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); if (entity.hasExtraInfo) { /** wanglei del 20151124*/ // childView.setBrwViewBackground(entity.mOpaque, entity.mBgColor, ""); /** wanglei add 20151124*/ bounceViewChild.setBounceViewBackground(entity.mOpaque, entity.mBgColor, "", childView); } bounceViewChild.addView(childView); viewList.add(bounceViewChild); } BDebug.i("multi", "viewlist num:", viewList.size()); LayoutParams pagerParm = new LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); ViewPager mPager = new ViewPager(mContext); mPager.setAdapter(new MultiPopAdapter(viewList)); mPager.setCurrentItem(index); mPager.setOnPageChangeListener(new MyPageChangedListener( parentBrowerview.getName())); mPager.setLayoutParams(pagerParm); mPager.setBackgroundColor(Color.TRANSPARENT); parentBrowerview.addView(mPager); mMultiPopPager.put(parentBrowerview.getName(), mPager); final ArrayList<EBrowserView> list = new ArrayList<EBrowserView>(); list.add(parentBrowerview); EBrowserView eBrowserView = loadOneOfMultiPop(viewList.get(index), entitys.get(index + 1), list); eBrowserView.setEBrowserViewChangeListener(new EBrowserView.OnEBrowserViewChangeListener() { @Override public void onPageFinish() { loadTheRestOfMultiPop(index, viewList, entitys, list); } }); BDebug.i("multipop", index, "load..."); mMultiPopTable.put(parentBrowerview.getName(), list); } private void loadTheRestOfMultiPop(int index, List<EBounceView> viewList, List<EBrwViewEntry> entries, ArrayList<EBrowserView> eBrowserViews) { for (int i = 0; i < viewList.size(); i++) { if (i == index) { continue; } loadOneOfMultiPop(viewList.get(i), entries.get(i + 1), eBrowserViews); BDebug.i("multipop", i, "load..."); } } private EBrowserView loadOneOfMultiPop(EBounceView eBounceView, EBrwViewEntry entity, ArrayList<EBrowserView> eBrowserViews) { EBrowserView eView = eBounceView.mBrwView; if (entity.checkFlag(EBrwViewEntry.F_FLAG_SHOULD_OP_SYS)) { eView.setShouldOpenInSystem(true); } if (!entity.hasExtraInfo) { if (entity.checkFlag(EBrwViewEntry.F_FLAG_OPAQUE)) { eView.setOpaque(true); } else { eView.setOpaque(false); } } if (entity.checkFlag(EBrwViewEntry.F_FLAG_OAUTH)) { eView.setOAuth(true); } if (entity.checkFlag(EBrwViewEntry.F_FLAG_WEBAPP)) { eView.setWebApp(true); } eView.setQuery(entity.mQuery); eView.init(); eView.setDownloadCallback(entity.mDownloadCallback); eView.setUserAgent(entity.mUserAgent); if (entity.checkFlag(EBrwViewEntry.F_FLAG_GESTURE)) { eView.setSupportZoom(); } if (entity.mFontSize > 0) { eView.setDefaultFontSize(entity.mFontSize); } switch (entity.mDataType) { case EBrwViewEntry.WINDOW_DATA_TYPE_URL: // if (entity.checkFlag(EBrwViewEntry.F_FLAG_OBFUSCATION)) { if ((getWidget().m_obfuscation == 1) && !entity.checkFlag(EBrwViewEntry.F_FLAG_WEBAPP)) { eView.needToEncrypt(eView, entity.mUrl, 0); } else { eView.newLoadUrl(entity.mUrl); } break; case EBrwViewEntry.WINDOW_DATA_TYPE_DATA: eView.newLoadData(entity.mData); break; case EBrwViewEntry.WINDOW_DATA_TYPE_DATA_URL: String date1 = ACEDes.decrypt(entity.mUrl, mContext, false, entity.mData); eView.loadDataWithBaseURL(entity.mUrl, date1, EBrowserView.CONTENT_MIMETYPE_HTML, EBrowserView.CONTENT_DEFAULT_CODE, entity.mUrl); break; } if (checkFlag(EBrowserWindow.F_WINDOW_FLAG_OPPOP)) { mPreQueue.add(entity.mViewName); } eBrowserViews.add(eView); return eView; } public void hSetMuliPopOverSelected(String obj, int arg1) { // TODO Auto-generated method stub ViewPager wvp = mMultiPopPager.get(obj); if (wvp != null) { wvp.setCurrentItem(arg1); } } private void hMultiPopOverClose(String obj) { // TODO Auto-generated method stub ArrayList<EBrowserView> list = mMultiPopTable.get(obj); if (null != list && list.size() > 1) { mMultiPopTable.remove(obj); EBrowserView mainWebview = list.get(0); View parent = (View) mainWebview.getParent(); removeView(parent); for (EBrowserView ebv : list) { if (ebv.supportZoom()) { ebv.destroyControl(); } ebv.stopLoading(); ebv.destroy(); } } if (mMultiPopPager.get(obj) != null) { mMultiPopPager.remove(obj); } } public void openMultiPopover(EUExWindow callback, ArrayList<EBrwViewEntry> popEntrys, int inIndex) { // TODO Auto-generated method stub this.mWindowCallback = callback; // Message msg = mWindLoop.obtainMessage(); // msg.what = F_WHANDLER_MULTIPOP_OPEN; // msg.obj = popEntrys; // msg.arg1 = inIndex; // mWindLoop.sendMessage(msg); hMultiPopOverOpen(popEntrys, inIndex); } public void setSelectedPopOverInMultiWindow(String name, int index) { // TODO Auto-generated method stub Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_MULTIPOP_SELECTED_CHANGE; msg.obj = name; msg.arg1 = index; mWindLoop.sendMessage(msg); } public void closeMultiPopover(String multiPopName) { // TODO Auto-generated method stub Message msg = mWindLoop.obtainMessage(); msg.what = F_WHANDLER_MULTIPOP_CLOSE; msg.obj = multiPopName; mWindLoop.sendMessage(msg); } public boolean setPopoverVisibility(String popName, int visible) { int isVisible = ((0 == visible) ? View.GONE : View.VISIBLE); View vTarget = null; EBrowserView bv = mPopTable.get(popName); if (null != bv) { vTarget = (View) bv.getParent(); } else { ArrayList<EBrowserView> list = mMultiPopTable.get(popName); if (null != list && list.size() > 1) { EBrowserView mainWebview = list.get(0); if (mainWebview != null) { vTarget = (View) mainWebview.getParent(); } } } if (vTarget != null) { vTarget.setVisibility(isVisible); return true; }else{ BDebug.e("target popover is not found"); } return false; } /** * 设置window是否开启硬件加速 * * @param flag */ public void setWindowHWEnable(int flag) { getMainView().setHWEnable(flag); } /** * 设置popover是否开启硬件加速 * * @param popName * @param flag */ public void setPopoverHardwareEnable(String popName, int flag) { EBrowserView pop = mPopTable.get(popName); if (pop != null) { pop.setHWEnable(flag); } } public class MyPageChangedListener implements ViewPager.OnPageChangeListener { public String name; public MyPageChangedListener(String name) { this.name = name; } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub /* * 此方法是在状态改变的时候调用,其中arg0这个参数 有三种状态(0,1,2)。arg0 * ==1的时辰默示正在滑动,arg0==2的时辰默示滑动完毕了,arg0==0的时辰默示什么都没做。 * 当页面开始滑动的时候,三种状态的变化顺序为(1,2,0) */ if (mWindowCallback != null) { final JSONObject jsonObject = new JSONObject(); try { jsonObject.put(EUExCallback.F_JK_MULTIPOP_NAME, name); jsonObject.put(EUExCallback.F_JK_MULTIPOP_STATE, arg0); mWindowCallback.jsCallback( EUExWindow.function_cbOpenMultiPopover, 1, EUExCallback.F_C_JSON, jsonObject.toString()); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } // 此方法是页面跳转完后得到调用,arg0是你当前选中的页面的Position(位置编号)。 @Override public void onPageSelected(int arg0) { if (mWindowCallback != null) { final JSONObject jsonObject = new JSONObject(); try { jsonObject.put(EUExCallback.F_JK_MULTIPOP_NAME, name); jsonObject.put(EUExCallback.F_JK_MULTIPOP_INDEX, arg0); mWindowCallback.jsCallback( EUExWindow.function_cbOpenMultiPopover, 0, EUExCallback.F_C_JSON, jsonObject.toString()); ArrayList<EBrowserView> views = mMultiPopTable.get(name); for (int i = 0; i < views.size(); i++) { if (i == arg0 + 1) { views.get(i).setNeedScroll(true); } else { views.get(i).setNeedScroll(false); } } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /* * 当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直得到 调用。其中三个参数的含义分别为: arg0 * :当前页面,及你点击滑动的页面 arg1:当前页面偏移的百分比 arg2:当前页面偏移的像素位置 */ @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub if (mWindowCallback != null) { final JSONObject jsonObject = new JSONObject(); try { jsonObject.put(EUExCallback.F_JK_MULTIPOP_NAME, name); jsonObject.put(EUExCallback.F_JK_MULTIPOP_INDEX, arg0); jsonObject.put(EUExCallback.F_JK_MULTIPOP_MOVE_PERCENT, arg1 * 100); jsonObject.put(EUExCallback.F_JK_MULTIPOP_MOVE_PX, arg2); mWindowCallback.jsCallback( EUExWindow.function_cbOpenMultiPopover, 2, EUExCallback.F_C_JSON, jsonObject.toString()); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } @Override protected void onSizeChanged(int l, int t, int oldl, int oldt) { super.onSizeChanged(l, t, oldl, oldt); if (t < oldt) { isShowDialog = true; } else { isShowDialog = false; } } public void createProgressDialog(String title, String content, boolean isCancel) { if (mGlobalProDialog == null) { mGlobalProDialog = new ProgressDialog(mContext,ProgressDialog.THEME_HOLO_DARK); } mGlobalProDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); if (!TextUtils.isEmpty(title)){ mGlobalProDialog.setTitle(title); } mGlobalProDialog.setMessage(content); mGlobalProDialog.setCancelable(isCancel); mGlobalProDialog.show(); } public void destroyProgressDialog() { if (mGlobalProDialog != null) { mGlobalProDialog.dismiss(); mGlobalProDialog = null; } } public void postGlobalNotification(String des) { String js = CALLBACK_POST_GLOBAL_NOTI + des + "');}"; EWindowStack windowStack = mBroWidget.getWindowStack(); ELinkedList<EBrowserWindow> eBrwWins = windowStack.getAll(); EBrowserWindow leftSlidingWin = windowStack .getSlidingWind(EBrowserWindow.rootLeftSlidingWinName); if (leftSlidingWin != null) { leftSlidingWin.addUriTask(leftSlidingWin.mMainView, js); } EBrowserWindow rightSlidingWin = windowStack .getSlidingWind(EBrowserWindow.rootRightSlidingWinName); if (rightSlidingWin != null) { rightSlidingWin.addUriTask(rightSlidingWin.mMainView, js); } for (int i = 0; i < eBrwWins.size(); i++) { EBrowserWindow eBrwWin = eBrwWins.get(i); eBrwWin.addUriTask(eBrwWin.mMainView, js); Collection<EBrowserView> eBrwViews = eBrwWin.mPopTable.values(); for (EBrowserView entry : eBrwViews) { entry.addUriTask(js); } } /*Collection<EBrowserView> eBrwViews = mPopTable.values(); for (EBrowserView entry : eBrwViews) { entry.addUriTask(js); }*/ } public void subscribeChannelNotification(String channelId, String callbackFunction, String type, String name) { if (mChannelList == null) { mChannelList = new ArrayList<HashMap<String, String>>(); } if (hasChannel(channelId, name, callbackFunction)) { return; } HashMap<String, String> item = new HashMap<String, String>(); item.put(TAG_CHANNEL_ID, channelId); item.put(TAG_CHANNEL_FUNNAME, callbackFunction); item.put(TAG_CHANNEL_TYPE, type); if (!TextUtils.isEmpty(name)) { item.put(TAG_CHANNEL_WINNAME, name); } mChannelList.add(item); } private boolean hasChannel(String channelId, String name, String callbackFunction) { for (HashMap<String,String> item:mChannelList) { if (channelId.equals(item.get(TAG_CHANNEL_ID)) && name.equals(item.get(TAG_CHANNEL_WINNAME)) && callbackFunction.equals(item.get(TAG_CHANNEL_FUNNAME))) { return true; } } return false; } public void publishChannelNotification(String channelId, String des, boolean isJson) { EWidgetStack eWidgetStack = mBroWidget.getWidgetStack(); for (int w = 0; w < eWidgetStack.length(); w++) { EWindowStack windowStack = eWidgetStack.get(w).getWindowStack(); //Sliding window EBrowserWindow leftSlidingWin = windowStack .getSlidingWind(EBrowserWindow.rootLeftSlidingWinName); if (leftSlidingWin != null) { List<HashMap<String, String>> list = leftSlidingWin.mChannelList; if (list != null && list.size() != 0) { setCallback(leftSlidingWin.mMainView, list, channelId, des, isJson, WIN_TYPE_MAIN); } } EBrowserWindow rightSlidingWin = windowStack .getSlidingWind(EBrowserWindow.rootRightSlidingWinName); if (rightSlidingWin != null) { List<HashMap<String, String>> list = rightSlidingWin.mChannelList; if (list != null && list.size() != 0) { setCallback(rightSlidingWin.mMainView, list, channelId, des, isJson, WIN_TYPE_MAIN); } } //normal window ELinkedList<EBrowserWindow> eBrwWins = windowStack.getAll(); for (int i = 0; i < eBrwWins.size(); i++) { EBrowserWindow eBrwWin = eBrwWins.get(i); List<HashMap<String, String>> list = eBrwWin.mChannelList; if (list == null || list.size() == 0) { continue; } setCallback(eBrwWin.mMainView, list, channelId, des, isJson, WIN_TYPE_MAIN); //popover window Collection<EBrowserView> eBrwViews = eBrwWin.mPopTable.values(); for (EBrowserView entry : eBrwViews) { setCallback(entry, list, channelId, des, isJson, WIN_TYPE_POP); } //multiPopover window if (eBrwWin.mMultiPopTable != null && eBrwWin.mMultiPopTable.size() > 0) { for (Map.Entry<String, ArrayList<EBrowserView>> entry : eBrwWin.mMultiPopTable .entrySet()) { ArrayList<EBrowserView> temp = entry.getValue(); if (null != temp && temp.size() > 0) { for (int j = 0; j < temp.size(); j++) { setCallback(temp.get(j), list, channelId, des, isJson, WIN_TYPE_POP); } } } } } } } private void setCallback(final EBrowserView brwView, List<HashMap<String, String>> list, String channelId, String data, boolean isJson, String type) { String js; for (int i = 0; i < list.size(); i++) { final HashMap<String, String> entry = list.get(i); if (channelId.equals(entry.get(TAG_CHANNEL_ID)) && type.equals(entry.get(TAG_CHANNEL_TYPE))) { js = CALLBACK_PUBLISH_GLOBAL_NOTI + entry.get(TAG_CHANNEL_FUNNAME) + "('" + data + "')"; if (isJson) { js = CALLBACK_PUBLISH_GLOBAL_NOTI + entry.get(TAG_CHANNEL_FUNNAME) + "(" + data + ")"; } if (type.equals(WIN_TYPE_POP) && brwView.getName().equals(entry.get(TAG_CHANNEL_WINNAME))) { brwView.addUriTask(js); } else if (type.equals(WIN_TYPE_MAIN)) { brwView.addUriTask(js); } } } } public void onLoadAppData(JSONObject json) { // TODO Auto-generated method stub if (null == mMainView) { return; } if (json != null) { String js = "javascript:if(typeof(uexWidget)!='undefined'&&uexWidget.onLoadByOtherApp)" + "{uexWidget.onLoadByOtherApp('" + json.toString() + "');}"; mMainView.addUriTask(js); } } public void showSoftKeyboard() { Message msg = mWindLoop.obtainMessage(); msg.what = F_SHOW_SOFTKEYBOARD; mWindLoop.sendMessage(msg); } public void setSpaceEnable(SpaceClickListener listener) { mBroWidget.setSpaceEnable(listener); } public void closeAboveWndByName(String windowName) { ELinkedList<EBrowserWindow> eBrwWins = mBroWidget.getWindowStack() .getAll(); if (eBrwWins.size() == 1) { ((EBrowserActivity) mContext).exitApp(true); return; } int index = getWindowPosition(eBrwWins, windowName); if (index == -1) { ((EBrowserActivity) mContext).exitApp(true); } else if (index == eBrwWins.size() - 1) { for (int i = 0; i < eBrwWins.size() - 1; i++) { EBrowserWindow eBrwWin = eBrwWins.get(i); if (eBrwWin != null) { mBroWidget.onCloseWindow(eBrwWin); } } } else { for (int i = 0; i <= index; i++) { EBrowserWindow eBrwWin = eBrwWins.get(0); if (eBrwWin != null) { mBroWidget.onCloseWindow(eBrwWin); } } } } private int getWindowPosition(ELinkedList<EBrowserWindow> eBrwWins, String windowName) { if (TextUtils.isEmpty(windowName)) { return -1; } for (int i = 0; i < eBrwWins.size(); i++) { EBrowserWindow eBrwWin = eBrwWins.get(i); String name = eBrwWin.getName(); if (windowName.equals(name)) { return i; } } return -1; } public void closeWindowByAnimation(Animation anim) { if (anim != null) { startAnimation(anim); anim.setAnimationListener(this); } else { setVisibility(GONE); if (null != mBroWidget) { mBroWidget.destoryWindow(this); } } } @Override public void onAnimationStart(Animation animation) { // TODO Auto-generated method stub } @Override public void onAnimationEnd(Animation animation) { // TODO Auto-generated method stub new Handler().post(new Runnable() { public void run() { setVisibility(GONE); if (null != mBroWidget) { mBroWidget.destoryWindow(EBrowserWindow.this); } } }); } @Override public void onAnimationRepeat(Animation animation) { // TODO Auto-generated method stub } public void addUriTaskSpeci(String winName, String js) { Log.i(TAG, "winName = " + winName + ", js = " + js); EBrowserWindow eBrwWin = mBroWidget.getEBrowserWindow(winName); if (eBrwWin != null) { EBrowserView eBrwView = eBrwWin.mMainView; if (eBrwView != null && !eBrwView.beDestroy()) { eBrwView.addUriTask(js); } } } public void onSlidingWindowStateChanged(int position) { if (null == mMainView) { return; } String js = "javascript:if(typeof(uexWindow)!='undefined'&&uexWindow.onSlidingWindowStateChanged){uexWindow.onSlidingWindowStateChanged(" + position + ");}"; mMainView.loadUrl(js); } public void reloadWindow() { mMainView.reload(); // popover Collection<EBrowserView> eBrwViews = mPopTable.values(); for (EBrowserView entry : eBrwViews) { entry.reload(); } // multiPopover if (mMultiPopTable != null && mMultiPopTable.size() > 0) { for (Map.Entry<String, ArrayList<EBrowserView>> entry : mMultiPopTable.entrySet()) { ArrayList<EBrowserView> temp = entry.getValue(); if (null != temp && temp.size() > 0) { for (int j = 0; j < temp.size(); j++) { temp.get(j).reload(); } } } } } @Keep public Map<String, ViewPager> getMultiPopPagerMap(){ return mMultiPopPager; } public void setUserAgent(String userAgent) { mMainView.setUserAgent(userAgent); } /** * 设置window是否进行下载回调 * * @param flag */ public void setDownloadCallback(int flag) { mMainView.setDownloadCallback(flag); } public void executeCbDownloadCallbackJs(EBrowserView eBrwView, int callbackType, String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { try { DownloadCallbackInfoVO info = new DownloadCallbackInfoVO(); info.setUrl(url); info.setUserAgent(userAgent); info.setContentDisposition(contentDisposition); info.setMimetype(mimetype); info.setContentLength(contentLength); if (callbackType == 1) { // 1 下载回调给主窗口,前端自己下载 String name = eBrwView.checkType(EBrwViewEntry.VIEW_TYPE_MAIN) ? "" : eBrwView.getName(); info.setWindowName(name); String js = EUExWindow.SCRIPT_HEADER + "if(" + EUExWindow.function_cbDownloadCallback + "){" + EUExWindow.function_cbDownloadCallback + "(" + DataHelper.gson.toJson(info) + ");}"; mMainView.loadUrl(js); } else if (callbackType == 2) { // 2 下载回调给当前窗口,前端自己下载; String js = EUExWindow.SCRIPT_HEADER + "if(" + EUExWindow.function_cbDownloadCallback + "){" + EUExWindow.function_cbDownloadCallback + "(" + DataHelper.gson.toJson(info) + ");}"; eBrwView.loadUrl(js); } } catch (Exception e) { e.printStackTrace(); } } }