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));
}
}
}