package com.salama.android.webcore; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import android.annotation.SuppressLint; import android.support.v4.app.Fragment; import android.util.Log; import com.salama.android.support.ServiceSupportApplication; import com.salama.android.util.SSLog; @SuppressLint("ValidFragment") public class LocalWebViewFragment extends BaseViewController implements WebVariableStack { protected int _viewContainerId; /** * 取得容器Id * @return 容器Id */ @Override public int getViewContainerId() { return _viewContainerId; } /** * 设置容器Id * @param viewContainerId 容器Id */ @Override public void setViewContainerId(int viewContainerId) { _viewContainerId = viewContainerId; } // private int _rootViewControllerId = 0; /** * 取得根容器Id * @return 根容器Id */ // @Override // public int getRootViewControllerId() { // return _rootViewControllerId; // } /** * 设置根容器Id * @param rootViewControllerId 根容器Id */ // @Override // public void setRootViewControllerId(int rootViewControllerId) { // _rootViewControllerId = rootViewControllerId; // } protected int _backStackEntryId = -1; @Override public int getBackStackEntryId() { return _backStackEntryId; } @Override public void setBackStackEntryId(int backStackEntryId) { _backStackEntryId = backStackEntryId; } public boolean isRootViewController() { return (_backStackEntryId == getActivity().getSupportFragmentManager().getBackStackEntryAt(0).getId()); } private LocalWebView _webView = null; private String _localPage = ""; private String _thisViewServiceClassName; private ViewService _thisViewService; private ConcurrentHashMap<String, Object> _webVariableStackForScopePage = new ConcurrentHashMap<String, Object>(); private ConcurrentHashMap<String, Object> _webVariableStackForScopeTemp = new ConcurrentHashMap<String, Object>(); private ConcurrentHashMap<String, String> _transitionParams = new ConcurrentHashMap<String, String>(); //webView setting ------------------------------------- WebViewSettings _webViewSettings = new WebViewSettings(); /** * 取得本地页面 * @return */ public String getLocalPage() { return _localPage; } /** * 设置本地页面 * @param localPage */ public void setLocalPage(String localPage) { _localPage = localPage; } /** * 取得WebView实例 * @return */ public LocalWebView getWebView() { return _webView; } /** * 设置WebView实例 * @param webView */ public void setWebView(LocalWebView webView) { _webView = webView; } /** * 取得ThisViewService类型名 * @return */ public String getThisViewServiceClassName() { return _thisViewServiceClassName; } /** * 取得WebViewSetting * @return */ public WebViewSettings getWebViewSettings() { return _webViewSettings; } /** * 设置WebViewSetting * @param webViewSettings */ public void setWebViewSettings(WebViewSettings webViewSettings) { _webViewSettings = webViewSettings; } /** * 装载WebViewSetting */ public void loadWebViewSettings() { if(_webView != null) { _webViewSettings.loadWebViewSettings(_webView); } } /** * 设置thisViewService类型名 * @param thisViewServiceClassName */ public void setThisViewServiceClassName(String thisViewServiceClassName) { if(thisViewServiceClassName == null || thisViewServiceClassName.length() == 0) { return; } if(_thisViewService != null) { return; } _thisViewServiceClassName = thisViewServiceClassName; /* Change to only set once if(_thisViewService != null) { _thisViewService.setThisView(null); _thisViewService = null; } */ try { _thisViewService = (ViewService) ServiceSupportApplication.singleton().findClass(_thisViewServiceClassName).newInstance(); _thisViewService.setThisView(this); } catch(Exception e) { Log.e("LocalWebView", "setThisViewServiceClassName()", e); } } /** * 取得thisViewService * @return */ public ViewService getThisViewService() { return _thisViewService; } /** * 设置thisViewService * @param thisViewService */ public void setThisViewService(ViewService thisViewService) { _thisViewService.setThisView(this); _thisViewService = thisViewService; } public LocalWebViewFragment() { super(); } public LocalWebViewFragment(String viewServiceClassName) { super(); setThisViewServiceClassName(viewServiceClassName); } public void log(String msg) { SSLog.d(_localPage, msg); } /** * 调用JavaScript函数 * @param functionName * @param params */ public void callJavaScript(final String functionName, final List<String> params) { _webView.callJavaScript(functionName, params); } /** * 设置画面迁移参数 * @param paramValue 参数值 * @param paramName 参数名 */ public void setTransitionParam(String paramValue, String paramName) { _transitionParams.put(paramName, paramValue); } /** * 取得画面迁移参数 * @param paramName 参数名 * @return 参数值 */ public String getTransitionParamByName(String paramName) { return _transitionParams.get(paramName); } /** * 设置session值 * @param name 名称 * @param value 值 */ public void setSessionValueWithName(String name, String value) { WebManager.getWebController().setSessionValueWithName(name, value); } /** * 删除session值 * @param name 名称 */ public void removeSessionValueWithName(String name) { WebManager.getWebController().removeSessionValueWithName(name); } /** * 取得session值 * @param name 名称 * @return */ public String getSessionValueWithName(String name) { return WebManager.getWebController().getSessionValueWithName(name); } @Override public void clearVariablesOfAllScope() { _webVariableStackForScopePage.clear(); _webVariableStackForScopeTemp.clear(); } @Override public void clearVariablesOfScope(int scope) { if(scope == WebVariableStackScopeTemp) { _webVariableStackForScopeTemp.clear(); } if(scope == WebVariableStackScopePage) { _webVariableStackForScopePage.clear(); } } @Override public void setVariable(Object value, String name, int scope) { if(scope == WebVariableStackScopeTemp) { _webVariableStackForScopeTemp.put(name, value); } if(scope == WebVariableStackScopePage) { _webVariableStackForScopePage.put(name, value); } } @Override public Object getVariable(String name, int scope) { if(scope == WebVariableStackScopeTemp) { return _webVariableStackForScopeTemp.get(name); } if(scope == WebVariableStackScopePage) { return _webVariableStackForScopePage.get(name); } else { return null; } } @Override public void removeVariable(String name, int scope) { if(scope == WebVariableStackScopeTemp) { _webVariableStackForScopeTemp.remove(name); } if(scope == WebVariableStackScopePage) { _webVariableStackForScopePage.remove(name); } } }