/* * 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.content.ActivityNotFoundException; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.Message; import android.text.TextUtils; import android.util.Log; import android.view.WindowManager; import android.webkit.MimeTypeMap; import android.widget.Toast; 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.JsConst; import org.zywx.wbpalmstar.base.ResoureFinder; import org.zywx.wbpalmstar.base.util.AppCanAPI; import org.zywx.wbpalmstar.base.vo.AppInstalledVO; import org.zywx.wbpalmstar.base.vo.ErrorResultVO; import org.zywx.wbpalmstar.base.vo.StartAppVO; import org.zywx.wbpalmstar.base.vo.WidgetCheckUpdateResultVO; import org.zywx.wbpalmstar.base.vo.WidgetFinishVO; import org.zywx.wbpalmstar.base.vo.WidgetStartVO; import org.zywx.wbpalmstar.engine.*; import org.zywx.wbpalmstar.engine.universalex.wrapper.WidgetJsonWrapper; import org.zywx.wbpalmstar.platform.push.report.PushReportConstants; import org.zywx.wbpalmstar.widgetone.dataservice.ReData; import org.zywx.wbpalmstar.widgetone.dataservice.WDataManager; import org.zywx.wbpalmstar.widgetone.dataservice.WWidgetData; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import java.util.List; import java.util.Set; public class EUExWidget extends EUExBase { public static final String tag = "uexWidget"; public static final int LOADAPP_RQ_CODE = 1000001; public static final String function_getOpenerInfo = "uexWidget.cbGetOpenerInfo"; public static final String function_checkUpdate = "uexWidget.cbCheckUpdate"; public static final String function_startWidget = "uexWidget.cbStartWidget"; public static final String function_removeWidget = "uexWidget.cbRemoveWidget"; public static final String function_getPushInfo = "uexWidget.cbGetPushInfo"; public static final String function_getPushState = "uexWidget.cbGetPushState"; public static final String function_onSpaceClick = "uexWidget.onSpaceClick"; public static final String function_loadApp = "uexWidget.cbLoadApp"; public static final String function_getMBaaSHost = "uexWidget.cbGetMBaaSHost"; private static final String BUNDLE_DATA = "data"; private static final String BUNDLE_MESSAGE = "message"; private static final String PUSH_MSG_BODY = "0"; private static final String PUSH_MSG_ALL = "1"; private static final int MSG_IS_APP_INSTALLED = 0; private static final int MSG_RELOAD_WIDGET_BY_APPID= 1; public EUExWidget(Context context, EBrowserView inParent) { super(context, inParent); } @AppCanAPI public boolean startWidget(String[] parm) { int callbackId=-1; if (isJsonString(parm[0])){ if (parm.length>1){ callbackId=valueOfCallbackId(parm[1]); } WidgetStartVO startVO= DataHelper.gson.fromJson(parm[0], WidgetStartVO.class); parm=new String[]{ startVO.appId, String.valueOf(startVO.animId), startVO.funcName, startVO.info, String.valueOf(startVO.animDuration) }; } if (parm.length < 4) { return false; } EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return false; } String inAppId = parm[0]; String inAnimiId = parm[1]; String inForResult = parm[2]; String inInfo = parm[3]; String animDuration = null; String appKey = null; if (parm.length >= 5) { animDuration = parm[4]; } if (parm.length >= 6) { appKey = parm[5]; } int animId = EBrowserAnimation.ANIM_ID_NONE; long duration = EBrowserAnimation.defaultDuration; try { if (null != inAnimiId && inAnimiId.length() != 0) { animId = Integer.parseInt(inAnimiId); } if (null != animDuration && animDuration.length() != 0) { duration = Long.parseLong(animDuration); } } catch (Exception e) { ; } try { WDataManager widgetData = new WDataManager(mContext); // WWidgetData data = widgetData.getWidgetDataByAppId(inAppId, // mBrwView.getCurrentWidget()); // 修改可以子widget可以打开子widget WWidgetData data = widgetData.getWidgetDataByAppId(inAppId, mBrwView.getRootWidget()); if (data == null) { showErrorAlert(String.format(EUExUtil.getString("platform_widget_not_exist") , inAppId + "")); resultStartWidget(false,callbackId); return false; } data.m_appkey = appKey; EWgtResultInfo info = new EWgtResultInfo(inForResult, inInfo); info.setAnimiId(animId); info.setDuration(duration); if (startWidget(data, info)) { resultStartWidget(true,callbackId); return true; } else { resultStartWidget(false,callbackId); return false; } } catch (Exception e) { if (BDebug.DEBUG) { e.printStackTrace(); } resultStartWidget(false,callbackId); showErrorAlert(EUExUtil.getString("platform_widget_search_failed")); return false; } } private void resultStartWidget(boolean result,int callbackId){ if (callbackId==-1){ jsCallback(function_startWidget, 0, EUExCallback.F_C_INT, EUExCallback.F_C_FAILED); }else{ callbackToJs(callbackId,false,result?0:1); } } private void showErrorAlert(final String msg) { /*Runnable ui = new Runnable() { @Override public void run() { final AlertDialog.Builder dialog = new AlertDialog.Builder( mContext); dialog.setTitle("提示"); dialog.setMessage(msg); dialog.setCancelable(false); dialog.setPositiveButton("确定", new OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); dialog.create(); dialog.show(); } }; Activity uiThread = (Activity) mContext; uiThread.runOnUiThread(ui);*/ } public void setSpaceEnable(String[] params) { mBrwView.getBrowserWindow().setSpaceEnable(new SpaceClickListener() { @Override public void onSpaceClick() { jsCallback(function_onSpaceClick, 0, 0, 0); } }); } public void setLogServerIp(String[] params) { if (params.length < 2) { return; } int debug = 0; WWidgetData widgetData = mBrwView.getCurrentWidget(); widgetData.m_logServerIp = params[0]; try { debug = Integer.parseInt(params[1]); } catch (NumberFormatException e) { e.printStackTrace(); } widgetData.m_appdebug = debug; mBrwView.setRemoteDebug(debug == 1); } public void delPushInfo(String[] params) { String host_pushBindUser = ResoureFinder.getInstance().getString(mContext, "bindUser_host"); if (host_pushBindUser.indexOf("push") > 0 || host_pushBindUser.indexOf("mms") > 0) { String uId = ""; String uNickName = ""; if (params.length > 0) { uId = params[0]; } if (params.length > 1) { uNickName = params[1]; } AppCan.getInstance().delPushInfo(uId, uNickName, mContext, mBrwView); } else { AppCan.getInstance().deviceUnBind(mContext, mBrwView); } } @AppCanAPI public boolean startApp(String[] params) { if (params.length < 2) { BDebug.e(tag, "startApp has error params!!!"); return false; } String startMode = params[0]; Intent intent = null; String extraJson = null; // 是否通过NEW_TASK启动第三方Activity的开关_by_waka boolean switchNewTask = true;// 默认为使用NEW_TASk启动 if (!TextUtils.isEmpty(startMode)) { if ("0".equals(startMode)) { String pkgName = params[1]; String clsName = null; if (TextUtils.isEmpty(pkgName)) { BDebug.e(tag, "startApp has error pkgName!!!"); callBackPluginJs(JsConst.CALLBACK_START_APP, "error params"); return false; } if (params.length > 2) { clsName = params[2]; } if (TextUtils.isEmpty(clsName)) { clsName = getMainActivity(pkgName); } if (TextUtils.isEmpty(clsName)) { BDebug.e(tag, "startApp has error clsName!!!"); callBackPluginJs(JsConst.CALLBACK_START_APP, "package is not exist!"); return false; } ComponentName component = new ComponentName(pkgName, clsName); intent = new Intent(); intent.setComponent(component); } else if ("1".equals(startMode)) { String action = params[1]; String filterJson = null; intent = new Intent(action); if (params.length > 2) { filterJson = params[2]; } if (!TextUtils.isEmpty(filterJson)) { intent = setIntentFilter(intent, filterJson); } } else { BDebug.e(tag, "startApp has error startMode!!!"); callBackPluginJs(JsConst.CALLBACK_START_APP, "error params!"); return false; } } StartAppVO extraVO = null; if (params.length > 4) { extraVO = DataHelper.gson.fromJson(params[4], StartAppVO.class); } if (extraVO != null && extraVO.getData() != null) { Uri contentUrl = Uri.parse(extraVO.getData()); intent.setData(contentUrl); } // 如果isNewTask.equals("0") by waka if (extraVO != null && "0".equals(extraVO.getIsNewTask())) { switchNewTask = false;// NEW_TASK开关置为false } if (intent == null) { BDebug.e(tag, "startApp has error params!!!"); callBackPluginJs(JsConst.CALLBACK_START_APP, "error params!"); return false; } if (params.length > 3) { extraJson = params[3]; if (!TextUtils.isEmpty(extraJson)) { intent = setIntentExtras(intent, extraJson); } } try { // 如果NEW_TASK开关打开 if (switchNewTask) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);// 添加NEW_TASK_FLAG } startActivity(intent); return true; } catch (ActivityNotFoundException e) { callBackPluginJs(JsConst.CALLBACK_START_APP, e.getMessage()); return false; } } private Intent setIntentFilter(Intent intent, String filterJson) { try { JSONObject json = new JSONObject(filterJson); if (json.has("category")) { JSONArray category = json.getJSONArray("category"); if (category != null) { for (int i = 0; i < category.length(); i++) { String ctg = category.opt(i).toString(); if (!TextUtils.isEmpty(ctg)) { intent.addCategory(ctg); } } } } if (json.has("data")) { JSONObject dataJson = json.getJSONObject("data"); String mimeType = null; String scheme = null; if (dataJson != null) { if (dataJson.has("mimeType")) { mimeType = dataJson.getString("mimeType"); } if (dataJson.has("scheme")) { scheme = dataJson.getString("scheme"); } if (TextUtils.isEmpty(mimeType) && !TextUtils.isEmpty(scheme)) { intent.setData(Uri.parse(scheme)); } else if (!TextUtils.isEmpty(mimeType) && !TextUtils.isEmpty(scheme)) { intent.setDataAndType(Uri.parse(scheme), mimeType); } else if (!TextUtils.isEmpty(mimeType) && TextUtils.isEmpty(scheme)) { intent.setType(mimeType); } } } } catch (JSONException e) { e.printStackTrace(); } return intent; } private String getMainActivity(String pkgName) { String className = null; PackageInfo pi = null; try { pi = mContext.getPackageManager().getPackageInfo(pkgName, 0); } catch (NameNotFoundException e) { e.printStackTrace(); } if (pi == null) return null; Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); resolveIntent.setPackage(pi.packageName); List<ResolveInfo> apps = mContext.getPackageManager().queryIntentActivities(resolveIntent, 0); if (apps == null || apps.size() == 0) return null; ResolveInfo ri = apps.iterator().next(); if (ri != null) { className = ri.activityInfo.name; } return className; } private Intent setIntentExtras(Intent intent, String extraJson) { String arrayString = "[" + extraJson + "]"; try { JSONArray array = new JSONArray(arrayString); int length = array.length(); for (int i = 0; i < length; i++) { JSONObject json = array.getJSONObject(i); Iterator<?> keys = json.keys(); while (keys.hasNext()) { String key = (String) keys.next(); String value = json.optString(key); if (!TextUtils.isEmpty(key) && !TextUtils.isEmpty(value)) { intent.putExtra(key, value); } } } } catch (Exception e) { e.printStackTrace(); } return intent; } public void startWidgetWithPath(String[] parm) { if (parm.length < 4) { return; } EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } String path = parm[0]; String inAnimiId = parm[1]; String inForResult = parm[2]; String inInfo = parm[3]; String animDuration = null; String appKey = null; if (parm.length >= 5) { animDuration = parm[4]; } if (parm.length >= 6) { appKey = parm[5]; } int animId = EBrowserAnimation.ANIM_ID_NONE; long duration = EBrowserAnimation.defaultDuration; try { if (null != inAnimiId && inAnimiId.length() != 0) { animId = Integer.parseInt(inAnimiId); } if (null != animDuration && animDuration.length() != 0) { duration = Long.parseLong(animDuration); } } catch (Exception e) { ; } try { WDataManager widgetData = new WDataManager(mContext); WWidgetData data = widgetData.getWidgetDataByAppPath(path); if (data == null) { showErrorAlert(String.format(EUExUtil.getString("platform_widget_path_not_exist"), path)); jsCallback(function_startWidget, 0, EUExCallback.F_C_INT, EUExCallback.F_C_FAILED); return; } data.m_appkey = appKey; EWgtResultInfo info = new EWgtResultInfo(inForResult, inInfo); info.setAnimiId(animId); info.setDuration(duration); if (startWidget(data, info)) { jsCallback(function_startWidget, 0, EUExCallback.F_C_INT, EUExCallback.F_C_SUCCESS); } else { jsCallback(function_startWidget, 0, EUExCallback.F_C_INT, EUExCallback.F_C_FAILED); } } catch (Exception e) { e.printStackTrace(); showErrorAlert(EUExUtil.getString("platform_widget_search_failed")); jsCallback(function_startWidget, 0, EUExCallback.F_C_INT, EUExCallback.F_C_FAILED); } } public void finishWidget(String[] parm) { if (isFirstParamExistAndIsJson(parm)){ WidgetFinishVO finishVO=DataHelper.gson.fromJson(parm[0],WidgetFinishVO.class); WidgetJsonWrapper.finishWidget(this,finishVO); } if (parm.length < 1) { return; } EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } String inResultInfo = parm[0]; String appId = null; boolean isWgtBG = false; String inAnimiId = ""; if (parm.length > 1) { if (!TextUtils.isEmpty(parm[1]) && parm[1].trim().length() != 0) { appId = parm[1]; } } if (parm.length > 2) { if (!TextUtils.isEmpty(parm[2]) && parm[2].trim().length() != 0) { isWgtBG = "1".equals(parm[2]); } } if (parm.length > 3) { if (!TextUtils.isEmpty(parm[3]) && parm[3].trim().length() != 0) { inAnimiId = parm[3]; } } finishWidget(inResultInfo, appId, isWgtBG, inAnimiId); } @AppCanAPI public boolean removeWidget(String[] parm) { if (parm.length < 1) { return false; } String inAppId = parm[0]; WDataManager dm = new WDataManager(mContext); String info = dm.removeWgtByAppID(inAppId); if (info.equals("0")) { jsCallback(function_removeWidget, 0, EUExCallback.F_C_INT, EUExCallback.F_C_SUCCESS); return true; } else { jsCallback(function_removeWidget, 0, EUExCallback.F_C_INT, EUExCallback.F_C_FAILED); return false; } } public void closeLoading(String[] params) { ((EBrowserActivity) mContext).setContentViewVisible(0); } public void loadApp(String[] parm) { if (parm.length < 3) { return; } String inAppInfo = parm[0]; String inFilter = parm[1]; String inDataUri = parm[2]; String data = null; if (4 == parm.length) { data = parm[3]; } if (null == inAppInfo || 0 == inAppInfo.length()) { return; } Intent intent = new Intent(inAppInfo); if ((null != inDataUri && 0 != inDataUri.length()) && (null != inFilter && 0 != inFilter.length())) { Uri uri = Uri.parse(inDataUri); intent.setDataAndType(uri, inFilter); } else { if (null != inDataUri && 0 != inDataUri.length()) { Uri uri = Uri.parse(inDataUri); intent.setData(uri); } if (null != inFilter && 0 != inFilter.length()) { intent.setType(inFilter); } } if (null != data) { try { JSONObject json = new JSONObject(data); Iterator<?> keys = json.keys(); while (keys.hasNext()) { String key = (String) keys.next(); String value = json.optString(key); if (null != key && null != value) { intent.putExtra(key, value); } } } catch (Exception e) { e.printStackTrace(); } } try { startActivityForResult(Intent.createChooser(intent, EUExUtil.getString("platform_choose_app")), LOADAPP_RQ_CODE); } catch (Exception e) { Toast.makeText(mContext, "not find any app", Toast.LENGTH_SHORT) .show(); } /** * load UC intent.putExtra("UC_LOADURL", inDataInfo); * intent.putExtra("time_stamp", System.currentTimeMillis()); * intent.putExtra("recall_action", "com.test.openintenttouc"); */ } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == LOADAPP_RQ_CODE) { JSONObject json = new JSONObject(); JSONObject jValue = new JSONObject(); try { if (null != data) { Bundle bundle = data.getExtras(); if (null != bundle) { Set<String> keys = bundle.keySet(); if (null != keys) { for (String key : keys) { Object value = bundle.get(key); jValue.put(key, value); } } } } } catch (Exception e) { e.printStackTrace(); } try { json.put("value", jValue); if (resultCode == Activity.RESULT_OK) { json.put("resultCode", 1); } else { json.put("resultCode", 0); } } catch (Exception e) { e.printStackTrace(); } jsCallback(function_loadApp, 0, EUExCallback.F_C_JSON, json.toString()); } } public void installApp(String[] parm) { if (parm.length < 1) { return; } EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } String inAppPath = parm[0]; if (null == inAppPath || 0 == inAppPath.trim().length()) { return; } inAppPath = BUtility.makeRealPath(inAppPath, mBrwView.getCurrentWidget().m_widgetPath, curWind.getWidgetType()); if (inAppPath.contains("wgtRes")) { InputStream is; try { // String tPath = m_eContext.getCacheDir().getAbsolutePath() + // "/temp.apk"; String tPath = Environment.getExternalStorageDirectory().getPath() + "/temp.apk"; is = mContext.getAssets().open(inAppPath); File file = new File(tPath); file.createNewFile(); FileOutputStream fos = new FileOutputStream(file); byte[] temp = new byte[8 * 1024]; int i = 0; while ((i = is.read(temp)) > 0) { fos.write(temp, 0, i); } fos.close(); is.close(); inAppPath = tPath; // modify permission // String command = "chmod777" + " " + inAppPath; // Runtime.getRuntime().exec(command); } catch (IOException e) { Toast.makeText( mContext, ResoureFinder.getInstance().getString(mContext, "error_sdcard_is_not_available"), Toast.LENGTH_SHORT).show(); return; } } // install apk. Intent intent = new Intent(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); MimeTypeMap type = MimeTypeMap.getSingleton(); String mime = type.getMimeTypeFromExtension("apk"); intent.setDataAndType(Uri.parse("file://" + inAppPath), mime); mContext.startActivity(intent); } public void setMySpaceInfo(String[] parm) { if (parm.length < 3) { return; } EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } String inForResult = parm[0]; String inAnimiId = parm[1]; String inInfo = parm[2]; curWind.getBrowser().setMySpaceInfo(inForResult, inAnimiId, inInfo); } @AppCanAPI public String getOpenerInfo(String[] parm) { EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return null; } String opener=curWind.getOpener(); jsCallback(function_getOpenerInfo, 0, EUExCallback.F_C_TEXT, opener); return opener; } public void setPushNotifyCallback(String[] parm) { mBrwView.getBrowserWindow().getEBrowserWidget() .setPushNotify(mBrwView.getWindowName(), parm[0], mBrwView.getCurrentWidget().m_appId); } public void checkUpdate(String[] parm) { int callbackId=-1; if (parm.length>0){ callbackId=valueOfCallbackId(parm[0]); } final WWidgetData widgetData = mBrwView.getCurrentWidget(); final int finalCallbackId = callbackId; new Thread("Appcan-uexWidgetCheckUpdate") { public void run() { WidgetCheckUpdateResultVO resultVO = new WidgetCheckUpdateResultVO(); ErrorResultVO errorResultVO = new ErrorResultVO(); if (widgetData != null) { // if (widgetData.m_appId != null // && widgetData.m_appId.length() > 0) { WDataManager dataManager = new WDataManager(mContext); ReData reData = dataManager.ChekeUpdate(mContext, widgetData.m_updateurl, widgetData.m_appId, widgetData.m_ver); if (reData == null) { errorResultVO.errorCode = 2; resultVO.result = 2; if (finalCallbackId != -1) { callbackToJs(finalCallbackId, false, DataHelper.gson.toJsonTree(errorResultVO), DataHelper.gson.toJsonTree(resultVO)); } else { jsCallback(function_checkUpdate, 0, EUExCallback.F_C_JSON, DataHelper.gson.toJson(resultVO)); } return; } else if (!TextUtils.isEmpty(reData.fileUrl)) { resultVO.result = 0; resultVO.name = reData.fileName; resultVO.size = reData.fileSize; resultVO.url = reData.fileUrl; resultVO.version = reData.version; } else { resultVO.result = 1; } if (finalCallbackId != -1) { callbackToJs(finalCallbackId, false, null, DataHelper.gson.toJsonTree(resultVO)); } else { jsCallback(function_checkUpdate, 0, EUExCallback.F_C_JSON, DataHelper.gson.toJson(resultVO)); } } } }.start(); } public void setPushInfo(String[] parm) { if (parm.length != 2) { parm = new String[]{"", ""}; } final String userId = parm[0]; final String userNick = parm[1]; String host_pushBindUser = ResoureFinder.getInstance().getString(mContext, "bindUser_host"); if (host_pushBindUser.indexOf("push") > 0 || host_pushBindUser.indexOf("mms") > 0) { AppCan.getInstance().setPushInfo(userId, userNick, mContext, mBrwView); } else { AppCan.getInstance().deviceBind(userId, userNick, mContext, mBrwView); } } public void setPushState(String[] parm) { if (parm.length != 1) { return; } AppCan.getInstance().setPushState(Integer.parseInt(parm[0])); } public void setKeyboardMode(final String[] param) { if (param.length <= 0) { return; } ((Activity) mContext).runOnUiThread(new Runnable() { @Override public void run() { try { JSONObject jsonObject = new JSONObject(param[0]); int mode = jsonObject.optInt("mode", 0); if (mode == 0) { ((Activity) mContext).getWindow().setSoftInputMode(WindowManager.LayoutParams .SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); } else { ((Activity) mContext).getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); } } catch (JSONException e) { } } }); } @AppCanAPI public String getMBaaSHost(String[] parm) { String mbaas_host = ResoureFinder.getInstance().getString(mContext, "mbaas_host"); jsCallback(function_getMBaaSHost, 0, EUExCallback.F_C_TEXT, mbaas_host); return mbaas_host; } @AppCanAPI public boolean getPushState(String[] parm) { SharedPreferences sp = mContext.getSharedPreferences("saveData", Context.MODE_MULTI_PROCESS); String pushMes = sp.getString("pushMes", "0"); String localPushMes = sp.getString("localPushMes", pushMes); jsCallback(function_getPushState, 0, EUExCallback.F_C_INT, Integer.parseInt(localPushMes)); return "1".equals(localPushMes); } @AppCanAPI public String getPushInfo(String[] parm) { String type = PUSH_MSG_BODY; if (parm.length >= 1) { type = parm[0]; } SharedPreferences sp = mContext.getSharedPreferences( PushReportConstants.PUSH_DATA_SHAREPRE, Context.MODE_PRIVATE); String userInfo = null; if (PUSH_MSG_ALL.equals(type)) { // 获取推送消息所有内容 userInfo = sp.getString( PushReportConstants.PUSH_DATA_SHAREPRE_MESSAGE, ""); } else { userInfo = sp.getString( PushReportConstants.PUSH_DATA_SHAREPRE_DATA, ""); } if (!TextUtils.isEmpty(userInfo)) { AppCan.getInstance().getPushInfo( userInfo, System.currentTimeMillis() + ""); jsCallback(function_getPushInfo, 0, EUExCallback.F_C_TEXT, userInfo); } return userInfo; } public void share(String inShareTitle, String inSubject, String inContent) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType(MimeTypeMap.getSingleton().getMimeTypeFromExtension( "txt")); intent.putExtra(Intent.EXTRA_SUBJECT, inSubject); intent.putExtra(Intent.EXTRA_TEXT, inContent); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivity(Intent.createChooser(intent, inShareTitle)); } public void moveToBack(String[] params) { ((Activity) mContext).moveTaskToBack(true); } public void openFile(String path) { if (null == path || path.trim().length() == 0) { return; } Intent in = new Intent(Intent.ACTION_VIEW); MimeTypeMap type = MimeTypeMap.getSingleton(); String mime = MimeTypeMap.getFileExtensionFromUrl(path); mime = type.getMimeTypeFromExtension(mime); if (null != mime && mime.length() != 0) { File file = new File(path); Uri ri = Uri.fromFile(file); in.setDataAndType(ri, mime); } if (appExist(in)) { mContext.startActivity(Intent.createChooser(in, "choose one:")); } else { ; } } private boolean appExist(Intent intent) { List<ResolveInfo> list = mContext.getPackageManager() .queryIntentActivities(intent, 0); if (list.size() > 0) { return true; } return false; } @AppCanAPI public boolean isAppInstalled(String[] params) { if (params == null || params.length < 1) { errorCallback(0, 0, "error params!"); return false; } String json = params[0]; AppInstalledVO data = DataHelper.gson.fromJson(json, AppInstalledVO.class); String packageName = data.getAppData(); if (TextUtils.isEmpty(packageName)) { errorCallback(0, 0, "error params!"); return false; } JSONObject jsonObject = new JSONObject(); int result; try { mContext.getPackageManager().getPackageInfo( packageName, PackageManager.GET_ACTIVITIES); result = EUExCallback.F_C_SUCCESS; } catch (NameNotFoundException e) { result = EUExCallback.F_C_FAILED; } try { jsonObject.put(JsConst.INSTALLED, result); } catch (JSONException e) { e.printStackTrace(); } callBackPluginJs(JsConst.CALLBACK_IS_APP_INSTALLED, jsonObject.toString()); return result==0; } public void reloadWidgetByAppId(String[] params){ if (params.length < 1) { return; } Message msg = mHandler.obtainMessage(); msg.what = MSG_RELOAD_WIDGET_BY_APPID; msg.obj = this; Bundle bd = new Bundle(); bd.putStringArray(BUNDLE_DATA, params); msg.setData(bd); mHandler.sendMessage(msg); } private void reloadWidgetByAppIdMsg(String[] params) { if (params == null || params.length < 1){ errorCallback(0, 0 , "error params!"); return; } String appId = params[0]; if (TextUtils.isEmpty(appId)) { Log.e("reloadWidgetByAppId", "appId is empty!!!"); return; } EBrowserWindow curWind = mBrwView.getBrowserWindow(); if (null == curWind) { return; } EBrowserWidget widget = curWind.getWGT(appId); if (null == widget) { return; } widget.reloadWidget(); } private void callBackPluginJs(String methodName, String jsonData) { String js = SCRIPT_HEADER + "if(" + methodName + "){" + methodName + "('" + jsonData + "');}"; onCallback(js); } @Override public boolean clean() { return true; } @Override public void onHandleMessage(Message message) { if (message == null) { return; } Bundle bundle = message.getData(); switch (message.what) { case MSG_RELOAD_WIDGET_BY_APPID: reloadWidgetByAppIdMsg(bundle.getStringArray(BUNDLE_DATA)); break; default: super.onHandleMessage(message); } } class CheckUpdateThread extends Thread { public CheckUpdateThread() { setName("Appcan-uexWidgetCheckUpdate"); } public void shutDown() { } @Override public void run() { JSONObject obj = new JSONObject(); try { WWidgetData widgetData = mBrwView.getCurrentWidget(); if (widgetData != null) { // if (widgetData.m_appId != null // && widgetData.m_appId.length() > 0) { WDataManager dataManager = new WDataManager(mContext); ReData reData = dataManager.ChekeUpdate(mContext, widgetData.m_updateurl, widgetData.m_appId, widgetData.m_ver); if (reData == null) { obj.put(EUExCallback.F_JK_RESULT, EUExCallback.F_JV_ERROR); jsCallback(function_checkUpdate, 0, EUExCallback.F_C_JSON, obj.toString()); return; } else if (!TextUtils.isEmpty(reData.fileUrl)) { obj.put(EUExCallback.F_JK_RESULT, EUExCallback.F_JV_UPDATE); obj.put(EUExCallback.F_JK_NAME, reData.fileName); obj.put(EUExCallback.F_JK_SIZE, reData.fileSize); obj.put(EUExCallback.F_JK_URL, reData.fileUrl); obj.put(EUExCallback.F_JK_VERSION, reData.version); } else { obj.put(EUExCallback.F_JK_RESULT, EUExCallback.F_JV_NO_UPDATE); } jsCallback(function_checkUpdate, 0, EUExCallback.F_C_JSON, obj.toString()); // } else { // obj.put(EUExCallback.F_JK_RESULT, // EUExCallback.F_JV_NO_REGIST); // jsCallback(function_checkUpdate, 0, // EUExCallback.F_C_JSON, obj.toString()); // } return; } obj.put(EUExCallback.F_JK_RESULT, EUExCallback.F_JV_ERROR); jsCallback(function_checkUpdate, 0, EUExCallback.F_C_JSON, obj.toString()); } catch (Exception e) { try { obj.put(EUExCallback.F_JK_RESULT, EUExCallback.F_JV_ERROR); } catch (JSONException e1) { } jsCallback(function_checkUpdate, 0, EUExCallback.F_C_JSON, obj.toString()); } } } public interface SpaceClickListener { public void onSpaceClick(); } }