package com.qmusic.webdoengine; import org.json.JSONException; import org.json.JSONObject; import android.content.DialogInterface; import android.content.Intent; import android.os.AsyncTask; import android.support.v4.app.FragmentActivity; import android.text.TextUtils; import com.qmusic.activities.LoginActivity; import com.qmusic.common.IAsyncDataCallback; import com.qmusic.controls.dialogs.AlertDialogFragment; import com.qmusic.controls.dialogs.LoadingDialogFragment; import com.qmusic.controls.dialogs.SimpleFragmentDialogCallback; import com.qmusic.uitls.BLog; public class BJSInterface { static final String TAG = BJSInterface.class.getSimpleName(); BWebHost webHost; public BJSInterface(BWebHost webHost) { this.webHost = webHost; } public void alert(final String title, final String msg, final String positiveStr, final String negativeStr, final String args) { final FragmentActivity context = webHost.getHost(); final BWebView webView = webHost.getWebView(); if (context != null && webView != null) { AlertDialogFragment fragment = AlertDialogFragment.getInstance(title, msg, positiveStr, negativeStr); fragment.getArguments().putInt("icon", android.R.drawable.ic_dialog_info); fragment.setCallback(new SimpleFragmentDialogCallback() { @Override public void onClick(DialogInterface dialog, int which) { if (which == DialogInterface.BUTTON_POSITIVE) { webView.sendJavascript(String.format("Qm.callback('%s',true)", args)); } else if (which == DialogInterface.BUTTON_NEGATIVE) { webView.sendJavascript(String.format("Qm.callback('%s',false)", args)); } } @Override public void cancel() { webView.sendJavascript(String.format("Qm.callback('%s',false)", args)); } }); fragment.show(context.getSupportFragmentManager()); } } /** * Jump to another activity * * @param params * : { page:'page name', callback:'the callback function',... } */ public void jumpTo(String params) { final FragmentActivity activity = webHost.getHost(); if (activity != null && !TextUtils.isEmpty(params)) { JSONObject json = null; try { json = new JSONObject(params); } catch (JSONException e) { e.printStackTrace(); return; } final String jsCallback = json.optString("callback"); final String page = json.optString("page"); Class<?> classInfo = null; if ("login".equalsIgnoreCase(page)) { classInfo = LoginActivity.class; } if (classInfo == null) { BLog.e(TAG, "Can't open page:" + page); return; } Intent intent = new Intent(activity, classInfo); BRoutingHelper.putExtra(intent, json); if (TextUtils.isEmpty(jsCallback)) { activity.startActivity(intent); } else { final IAsyncDataCallback<Intent> callback = new IAsyncDataCallback<Intent>() { @Override public void callback(final int result, final Intent data) { final BWebView webView = webHost.getWebView(); // Note: handler the Intent case by case webView.sendJavascript(String.format("%s(%d,%s)", jsCallback, result, "")); } }; webHost.startActivityForResult(intent, callback); } } } public void longTimeCallback(final String callback) { final BWebView webView = webHost.getWebView(); if (webView != null) { final LoadingDialogFragment fragment = LoadingDialogFragment.getInstance(); final FragmentActivity activity = webHost.getHost(); final AsyncTask<Void, Void, Object> asyncTask = new AsyncTask<Void, Void, Object>() { @Override protected void onPreExecute() { fragment.show(activity.getSupportFragmentManager()); } @Override protected Object doInBackground(Void... params) { try { Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); } return "OK" + System.currentTimeMillis(); } @Override protected void onPostExecute(Object result) { fragment.dismissAllowingStateLoss(); webView.sendJavascript(String.format("%s('%s');", callback, result)); } }; asyncTask.execute(); } } public void loadImage(final String url, final String jsCallback, final String tag) { final String ASSERT_PREFEX = "file:///android_asset/"; final BWebView webView = webHost.getWebView(); if (webView == null) { BLog.w(TAG, "webview is null"); return; } if (url.startsWith(ASSERT_PREFEX)) { webView.sendJavascript(String.format("%s('%s','%s');", jsCallback, url, tag)); } else { // TODO: webView.sendJavascript(String.format("%s('%s','%s');", jsCallback, "", tag)); } } }