package mobi.monaca.framework.plugin; import java.util.ArrayList; import mobi.monaca.framework.MonacaApplication; import mobi.monaca.framework.MonacaPageActivity; import mobi.monaca.framework.nativeui.UpdateStyleQuery; import org.apache.cordova.api.Plugin; import org.apache.cordova.api.PluginResult; import org.apache.cordova.PluginResult.Status; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class MonacaNativeUIPlugin extends Plugin { protected MonacaPageActivity getMonacaPageActivity() { return (MonacaPageActivity) cordova.getActivity(); } @Override public PluginResult execute(String action, final JSONArray args, String callbackId) { if (action.equals("retrieve")) { return retrieveStyle(args.optString(0)); } else if (action.equals("update")) { JSONArray ids = args.optJSONArray(0); String id = args.optString(0); if (ids == null) { ids = new JSONArray(); try { ids.put(0, id); } catch (JSONException e) { ids = new JSONArray(); } } if (args.length() == 3) { String styleString = "{" + args.optString(1) + ":'" + args.optString(2) + "'}"; try { JSONObject styleObject = new JSONObject(styleString); return updateStyle(ids, styleObject); } catch (JSONException e) { e.printStackTrace(); return new PluginResult(Status.JSON_EXCEPTION); } } else { return updateStyle(ids, args.optJSONObject(1)); } } else if (action.equals("updateBulkily")) { return updateStyleBulkily(args); } else if (action.equals("info")) { return getInfoForJavaScript(); } else { if (action.equalsIgnoreCase("showSpinner")) { getMonacaPageActivity().runOnUiThread(new Runnable() { @Override public void run() { MonacaApplication application = (MonacaApplication) getMonacaPageActivity().getApplication(); try { application.showMonacaSpinnerDialog(getMonacaPageActivity().getUiContext(), args); // application.showMonacaSpinnerDialog(); } catch (Exception e) { e.printStackTrace(); } } }); return new PluginResult(PluginResult.Status.OK); } if (action.equalsIgnoreCase("updateSpinnerTitle")) { getMonacaPageActivity().runOnUiThread(new Runnable() { @Override public void run() { MonacaApplication application = (MonacaApplication) getMonacaPageActivity().getApplication(); try { application.updateSpinnerTitle(args.optString(0)); } catch (Exception e) { e.printStackTrace(); } } }); return new PluginResult(PluginResult.Status.OK); } if (action.equalsIgnoreCase("hideSpinner")) { getMonacaPageActivity().runOnUiThread(new Runnable() { @Override public void run() { MonacaApplication application = (MonacaApplication) getMonacaPageActivity().getApplication(); application.dismissMonacaSpinnerDialog(); } }); return new PluginResult(PluginResult.Status.OK); } } return new PluginResult(Status.INVALID_ACTION); } public PluginResult retrieveStyle(String componentId) { JSONObject style = ((MonacaPageActivity) cordova.getActivity()).getStyle(componentId); return style != null ? new PluginResult(Status.OK, style) : new PluginResult(Status.ERROR); } public PluginResult updateStyle(JSONArray ids, JSONObject style) { ((MonacaPageActivity) cordova.getActivity()).updateStyle(new UpdateStyleQuery(ids, style)); return new PluginResult(Status.OK); } public PluginResult getInfoForJavaScript() { JSONObject info = ((MonacaPageActivity) cordova.getActivity()).getInfoForJavaScript(); return info != null ? new PluginResult(Status.OK, info) : new PluginResult(Status.ERROR); } public PluginResult updateStyleBulkily(JSONArray args) { JSONArray queriesJson = args.optJSONArray(0); if (queriesJson != null) { ArrayList<UpdateStyleQuery> queries = new ArrayList<UpdateStyleQuery>(); for (int i = 0; i < queriesJson.length(); i++) { JSONObject queryJson = queriesJson.optJSONObject(i); JSONArray ids = queryJson.optJSONArray("ids"); JSONObject style = queryJson.optJSONObject("style"); queries.add(new UpdateStyleQuery(ids, style)); } ((MonacaPageActivity) cordova.getActivity()).updateStyleBulkily(queries); return new PluginResult(Status.OK); } else { return new PluginResult(Status.JSON_EXCEPTION); } } }