/* * WR.java * classes : cn.com.wasu.main.jsobject.WR * @author Administrator * V 1.0.0 * Create at 2014年10月16日 下午5:02:32 */ package com.wasu.cs.jsobject; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.text.TextUtils; import android.webkit.JavascriptInterface; import android.webkit.WebView; import com.wasu.authsdk.AuthListener; import com.wasu.authsdk.AuthSDK; import com.wasu.authsdk.entity.PriceInfo; import com.wasu.authsdk.entity.XHYYJEnquiryResult; import com.wasu.common.WError; import com.wasu.cs.module.LogReaderModule; import com.wasu.cs.module.LogReaderModule.WRLogHolder.logUpLoadListener; import com.wasu.cs.ui.ActivityLivePlayer; import com.wasu.cs.ui.ActivityPlayer; import com.wasu.module.log.WLog; import org.json.JSONException; import org.json.JSONObject; import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import cn.com.wasu.main.IntentConstant; import cn.com.wasu.main.IntentMap; /** * cn.com.wasu.main.jsobject.WR * * @author zhangrm@wasu.com
* create at 2014年10月16日 下午5:02:32 */ public class WR { private static final String TAG = "WR"; //letv-super-sports packagename private static final String LETV_SUPERSPORT_PACKAGENAME = "com.lesports.tv"; //migu-xuetang packagename private static final String MIGU_XUETANG_PACKAGENAME = "com.hschinamobile.hestudy"; private Context mContext; private long preTimeMills; private WebView webView; public WR(Context context) { this.mContext = context; } public WR(Context mContext, WebView webView) { this.mContext = mContext; this.webView = webView; } @JavascriptInterface public void openDetail(String playUri) { try { long currTimeMills = System.currentTimeMillis(); if (preTimeMills == 0 || currTimeMills - preTimeMills > 1000) { preTimeMills = currTimeMills; Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(playUri)); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); mContext.startActivity(intent); } } catch (Exception e) { e.toString(); } } @JavascriptInterface public void openCollection() { try { Intent intent = new Intent("com.wasutv.action.opencollection"); mContext.startActivity(intent); } catch (Exception e) { e.toString(); } } @JavascriptInterface public void openHistory() { try { Intent intent = new Intent("com.wasutv.action.openhistory"); mContext.startActivity(intent); } catch (Exception e) { e.toString(); } } @JavascriptInterface public void layoutCommandHandle(String layoutCode, String jsonUrl, String extra) { Intent i = new Intent(); if (extra == null) { extra = ""; } i.putExtra("Extra", extra); IntentMap.startIntent(mContext, i, layoutCode, jsonUrl, null); } @JavascriptInterface public void loopPlay(String jsonUrl, int playIndex) { WLog.i(TAG,"loopPlay"); if (TextUtils.isEmpty(jsonUrl)) { WLog.e(TAG, "loopPlay check params jsonUrl fail"); return; } Intent intent = new Intent(); intent.putExtra(IntentConstant.PLAY_TYPE.value(), ActivityPlayer.PLAY_TYPE_LOOP); intent.putExtra(IntentConstant.PLAY_INDEX.value(), playIndex); intent.putExtra(IntentConstant.DATAURI.value(), jsonUrl); IntentMap.startIntent(mContext, intent, null, null, ActivityPlayer.class); } @JavascriptInterface public void startApk(String json) { try { JSONObject jsonObj = new JSONObject(json); String actionName = jsonObj.optString("actionName"); String packageName = jsonObj.optString("packageName"); String download = jsonObj.optString("download"); Intent intent = null; if(!TextUtils.isEmpty(packageName) && TextUtils.equals(packageName,LETV_SUPERSPORT_PACKAGENAME)){ //special logic for letv-super-sport intent = new Intent(actionName); //letv-super-sport burrowContent will be added in the while circle bellow //just add flag according to doc intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); }else if(!TextUtils.isEmpty(packageName) && TextUtils.equals(packageName,MIGU_XUETANG_PACKAGENAME)){ // PackageManager pkgmng = TvApp.getContext().getPackageManager(); // intent = pkgmng.getLaunchIntentForPackage(packageName); // // //just add flag according to doc // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent = new Intent(); ComponentName cn = new ComponentName("com.hschinamobile.hestudy","com.chinamobile.hestudy.activity.LogoActivity"); intent.setComponent(cn); intent.setAction("android.intent.action.MAIN"); }else{ if (!TextUtils.isEmpty(packageName)) { intent = mContext.getPackageManager().getLaunchIntentForPackage(packageName); }else{ if (!TextUtils.isEmpty(actionName)) { intent = new Intent(actionName); }else { intent = new Intent(Intent.ACTION_VIEW); } } } /*if (!TextUtils.isEmpty(actionName) && !TextUtils.isEmpty(packageName)) { intent = new Intent(); intent.setComponent(new ComponentName(packageName, actionName)); } else if (!TextUtils.isEmpty(actionName)) { intent = new Intent(actionName); } else if (!TextUtils.isEmpty(packageName)) { intent = mContext.getPackageManager().getLaunchIntentForPackage(packageName); } else { intent = new Intent(Intent.ACTION_VIEW); }*/ // 遍历其他参数 Iterator keys = jsonObj.keys(); while (keys.hasNext()) { String key = keys.next(); if (!"actionName".equals(key) && !"packageName".equals(key) && !"download".equals(key)) { intent.putExtra(key, jsonObj.getString(key)); } } mContext.startActivity(intent); } catch (Exception e) { e.toString(); WLog.e(TAG, e.getMessage()); } } /** * WR日志上传 * * @param callback * 调用WebView方法的名字 */ @JavascriptInterface public void logUpload(String callback) { final String callbackName = callback; LogReaderModule.WRLogHolder.upLoadLog(new logUpLoadListener() { @Override public void onResult(boolean isSuccessful) { // TODO Auto-generated method stub if (isSuccessful) { if (webView != null) { webView.loadUrl("javascript:" + callbackName + "('0')"); } } else { if (webView != null) { webView.loadUrl("javascript:" + callbackName + "('1')"); } } } }); } /** * 支持BS专题js方法调用直播播放器 */ @JavascriptInterface public void livePlay(String jsonData, String currentResourceId, String extraJson) { if (TextUtils.isEmpty(jsonData)) { WLog.e(TAG, "调用livePlay方法入参为空"); return; } try { Intent i = new Intent(ActivityLivePlayer.ACTION); i.putExtra(ActivityLivePlayer.ASSET_PLAY_INFO, jsonData); i.putExtra(ActivityLivePlayer.ASSET_CHANNEL_ID, currentResourceId); mContext.startActivity(i); } catch (Exception e) { e.printStackTrace(); WLog.e(TAG, "调用livePlay方法出错"); } } /** * web页面调用询价接口 * * @param resourceId * 资产ID * @param resourceName * 资产名称 * @param orderType * 单点类型:在线观看为0,下载观看为1 * @param callback * 客户端回调页面的提供的回调方法 * @author Danxingxi on 2016.3.14 具体用法参见:TV4.0客户端接口规范 2.2.1.7部分 */ @JavascriptInterface public void queryPrice(String resourceId, String resourceName, String orderType, String callback) { final String mCallBack = callback; Map params = new HashMap(); params.put("resourceId", resourceId); params.put("resourceName", resourceName); params.put("orderType", orderType); AuthSDK.getInstance().queryPrice(params, new AuthListener() { @Override public void result(int error, String extraMsg, Object jsondata) { /** 标记询价是否成功: 0 成功,1 失败 **/ int isSuccess = -1; /** 价格 **/ double price = -1; /** 原价 **/ double originalPrice = -1; if (error == WError.ERROR_NONE && jsondata != null) { isSuccess = 0; PriceInfo priceInfo = (PriceInfo) jsondata; price = priceInfo.mPrice; originalPrice = priceInfo.mOriginalPrice; } else { isSuccess = 1; WLog.d(TAG, "WR queryPrice error"); } if (webView != null) { webView.loadUrl("javascript:" + mCallBack + "('" + isSuccess + "', '" + price + "', '" + originalPrice + "')"); } else { WLog.e(TAG, "WR webView == null"); } } }); } /** * BS页面调用是否订包查询接口(订包查询接口和免广告接口对应于UPM为同一个接口) * * @param callback * 客户端回调页面的提供的回调方法(返回查询结果) * @author Danxingxi on 2016.3.14 具体用法参见:TV4.0客户端接口规范 2.2.1.8部分 */ @JavascriptInterface public void isOrderVIP(final String callback) { AuthSDK.getInstance().verifyUserIsAdFree(new AuthListener() { /** 0,不免 1,免 **/ int isFree = -1; @Override public void result(int error, String extraMsg, Object jsondata) { if (error == WError.ERROR_NONE && jsondata != null) { try { JSONObject root = new JSONObject(new String((byte[]) jsondata, "utf-8")); isFree = root.optInt("isFree"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (JSONException e) { WLog.e(TAG, "WR isOrderVIP error"); e.printStackTrace(); } if (webView != null) { webView.loadUrl("javascript:" + callback + "('" + isFree + "')"); } } else { WLog.e(TAG, "WR isOrderVIP error"); } } }); } /** * web页面调用活动询价接口 * * @param jsonquery * 页面调用接口需下发的json询价参数 * @param callback * 客户端回调页面的提供的回调方法(返回询价结果) 具体用法参见:TV4.0客户端接口规范 2.2.1.9部分 */ @JavascriptInterface public void actQueryPrice(String jsonquery, final String callback) { try { JSONObject root = new JSONObject(jsonquery); String resourceId = root.optString("resourceId"); String resourceName = root.optString("resourceName"); String queryType = root.optString("queryType"); Map params = new HashMap(); params.put("resourceId", resourceId); params.put("resourceName", resourceName); params.put("queryType", queryType); AuthSDK.getInstance().xhyyjEnquiry(params, new AuthListener() { @Override public void result(int error, String extraMsg, Object jsondata) { /** 标记询价是否成功: 0 成功,1 失败 **/ int isSuccess = -1; /** 价格 **/ double price = -1; /** 原价 **/ double originalPrice = -1; /** 剩余时间 **/ int remainingFreeWatchTime = -1; if (error == WError.ERROR_NONE && jsondata != null) { isSuccess = 0; XHYYJEnquiryResult enquiryResult = (XHYYJEnquiryResult) jsondata; price = enquiryResult.getPrice(); originalPrice = enquiryResult.getOriginalPrice(); remainingFreeWatchTime = enquiryResult.getRemainingFreeWatchTime(); } else { isSuccess = 1; WLog.e(TAG, "WR actQueryPrice error"); } if (webView != null) { webView.loadUrl("javascript:" + callback + "('" + isSuccess + "', '" + price + "', '" + originalPrice + "','" + remainingFreeWatchTime + "')"); } } }); } catch (JSONException e) { WLog.e(TAG, "WR actQueryPrice error"); e.printStackTrace(); } } }