/* Copyright 2012-2013, Polyvi Inc. (http://polyvi.github.io/openxface) This program is distributed under the terms of the GNU General Public License. This file is part of xFace. xFace is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. xFace 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 General Public License for more details. You should have received a copy of the GNU General Public License along with xFace. If not, see <http://www.gnu.org/licenses/>. */ package com.polyvi.xface.ams; import org.apache.cordova.CallbackContext; import org.apache.cordova.PluginResult; import org.json.JSONException; import org.json.JSONObject; import com.polyvi.xface.ams.XAMSError.AMS_ERROR; /** * app的安装监听器类,负责监听app的安装进度及安装结果状态,并封装成消息,发送给mInstallHandler进行处理 */ public class XAppInstallListener implements XInstallListener { private final static String TAG_APP_ID = "appid"; private final static String TAG_INSTALL_PROGRESS = "progress"; private final static String TAG_ERROR_CODE = "errorcode"; private final static String TAG_OPERATION_TYPE = "type"; private final static String TAG_CALLBACK = "callback"; /** js回调上下文环境 */ private CallbackContext mCallbackCtx; public XAppInstallListener(CallbackContext callbackCtx) { mCallbackCtx = callbackCtx; } @Override public void onProgressUpdated(AMS_OPERATION_TYPE type, InstallStatus progressState) { JSONObject jsonObj = new JSONObject(); try { jsonObj.put(TAG_INSTALL_PROGRESS, progressState.ordinal()); jsonObj.put(TAG_OPERATION_TYPE, type.ordinal()); jsonObj.put(TAG_CALLBACK, "progress"); } catch (JSONException e) { e.printStackTrace(); } PluginResult result = new PluginResult( PluginResult.Status.OK, jsonObj); // 在安装过程中,执行js回调后,由于成功或者失败还需执行回调,故这不能删除js设置的回调 result.setKeepCallback(true); mCallbackCtx.sendPluginResult(result); } @Override public void onError(AMS_OPERATION_TYPE type, String appId, AMS_ERROR errorState) { JSONObject jsonObj = new JSONObject(); try { jsonObj.put(TAG_ERROR_CODE, errorState.ordinal()); jsonObj.put(TAG_OPERATION_TYPE, type.ordinal()); } catch (JSONException e) { e.printStackTrace(); } mCallbackCtx.error(jsonObj); } @Override public void onSuccess(AMS_OPERATION_TYPE type, String appId) { JSONObject jsonObj = new JSONObject(); try { jsonObj.put(TAG_APP_ID, appId); jsonObj.put(TAG_OPERATION_TYPE, type.ordinal()); } catch (JSONException e) { e.printStackTrace(); } mCallbackCtx.success(jsonObj); } }