You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by st...@apache.org on 2013/04/30 23:35:34 UTC
[18/53] Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/cordova-android into gutting
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/7ab30348/framework/src/org/apache/cordova/core/Notification.java
----------------------------------------------------------------------
diff --cc framework/src/org/apache/cordova/core/Notification.java
index 14f27f6,0000000..4050ed4
mode 100755,000000..100755
--- a/framework/src/org/apache/cordova/core/Notification.java
+++ b/framework/src/org/apache/cordova/core/Notification.java
@@@ -1,346 -1,0 +1,450 @@@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+*/
+package org.apache.cordova.core;
+
+import org.apache.cordova.api.CallbackContext;
+import org.apache.cordova.api.CordovaInterface;
+import org.apache.cordova.api.CordovaPlugin;
+import org.apache.cordova.api.PluginResult;
+import org.json.JSONArray;
+import org.json.JSONException;
++import org.json.JSONObject;
+import android.app.AlertDialog;
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.media.Ringtone;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.os.Vibrator;
++import android.widget.EditText;
+
+/**
+ * This class provides access to notifications on the device.
+ */
+public class Notification extends CordovaPlugin {
+
+ public int confirmResult = -1;
+ public ProgressDialog spinnerDialog = null;
+ public ProgressDialog progressDialog = null;
+
+ /**
+ * Constructor.
+ */
+ public Notification() {
+ }
+
+ /**
+ * Executes the request and returns PluginResult.
+ *
+ * @param action The action to execute.
+ * @param args JSONArray of arguments for the plugin.
+ * @param callbackContext The callback context used when calling back into JavaScript.
+ * @return True when the action was valid, false otherwise.
+ */
+ public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
+ if (action.equals("beep")) {
+ this.beep(args.getLong(0));
+ }
+ else if (action.equals("vibrate")) {
+ this.vibrate(args.getLong(0));
+ }
+ else if (action.equals("alert")) {
+ this.alert(args.getString(0), args.getString(1), args.getString(2), callbackContext);
+ return true;
+ }
+ else if (action.equals("confirm")) {
+ this.confirm(args.getString(0), args.getString(1), args.getJSONArray(2), callbackContext);
+ return true;
+ }
++ else if (action.equals("prompt")) {
++ this.prompt(args.getString(0), args.getString(1), args.getJSONArray(2), callbackContext);
++ return true;
++ }
+ else if (action.equals("activityStart")) {
+ this.activityStart(args.getString(0), args.getString(1));
+ }
+ else if (action.equals("activityStop")) {
+ this.activityStop();
+ }
+ else if (action.equals("progressStart")) {
+ this.progressStart(args.getString(0), args.getString(1));
+ }
+ else if (action.equals("progressValue")) {
+ this.progressValue(args.getInt(0));
+ }
+ else if (action.equals("progressStop")) {
+ this.progressStop();
+ }
+ else {
+ return false;
+ }
+
+ // Only alert and confirm are async.
+ callbackContext.success();
+ return true;
+ }
+
+ //--------------------------------------------------------------------------
+ // LOCAL METHODS
+ //--------------------------------------------------------------------------
+
+ /**
+ * Beep plays the default notification ringtone.
+ *
+ * @param count Number of times to play notification
+ */
+ public void beep(long count) {
+ Uri ringtone = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
+ Ringtone notification = RingtoneManager.getRingtone(this.cordova.getActivity().getBaseContext(), ringtone);
+
+ // If phone is not set to silent mode
+ if (notification != null) {
+ for (long i = 0; i < count; ++i) {
+ notification.play();
+ long timeout = 5000;
+ while (notification.isPlaying() && (timeout > 0)) {
+ timeout = timeout - 100;
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Vibrates the device for the specified amount of time.
+ *
+ * @param time Time to vibrate in ms.
+ */
+ public void vibrate(long time) {
+ // Start the vibration, 0 defaults to half a second.
+ if (time == 0) {
+ time = 500;
+ }
+ Vibrator vibrator = (Vibrator) this.cordova.getActivity().getSystemService(Context.VIBRATOR_SERVICE);
+ vibrator.vibrate(time);
+ }
+
+ /**
+ * Builds and shows a native Android alert with given Strings
+ * @param message The message the alert should display
+ * @param title The title of the alert
+ * @param buttonLabel The label of the button
+ * @param callbackContext The callback context
+ */
+ public synchronized void alert(final String message, final String title, final String buttonLabel, final CallbackContext callbackContext) {
+
+ final CordovaInterface cordova = this.cordova;
+
+ Runnable runnable = new Runnable() {
+ public void run() {
+
+ AlertDialog.Builder dlg = new AlertDialog.Builder(cordova.getActivity());
+ dlg.setMessage(message);
+ dlg.setTitle(title);
+ dlg.setCancelable(true);
+ dlg.setPositiveButton(buttonLabel,
+ new AlertDialog.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 0));
+ }
+ });
+ dlg.setOnCancelListener(new AlertDialog.OnCancelListener() {
+ public void onCancel(DialogInterface dialog)
+ {
+ dialog.dismiss();
+ callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 0));
+ }
+ });
+
+ dlg.create();
+ dlg.show();
+ };
+ };
+ this.cordova.getActivity().runOnUiThread(runnable);
+ }
+
+ /**
+ * Builds and shows a native Android confirm dialog with given title, message, buttons.
+ * This dialog only shows up to 3 buttons. Any labels after that will be ignored.
+ * The index of the button pressed will be returned to the JavaScript callback identified by callbackId.
+ *
+ * @param message The message the dialog should display
+ * @param title The title of the dialog
+ * @param buttonLabels A comma separated list of button labels (Up to 3 buttons)
+ * @param callbackContext The callback context.
+ */
+ public synchronized void confirm(final String message, final String title, final JSONArray buttonLabels, final CallbackContext callbackContext) {
+
+ final CordovaInterface cordova = this.cordova;
+
+ Runnable runnable = new Runnable() {
+ public void run() {
+ AlertDialog.Builder dlg = new AlertDialog.Builder(cordova.getActivity());
+ dlg.setMessage(message);
+ dlg.setTitle(title);
+ dlg.setCancelable(true);
+
+ // First button
+ if (buttonLabels.length() > 0) {
+ try {
+ dlg.setNegativeButton(buttonLabels.getString(0),
+ new AlertDialog.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 1));
+ }
+ });
+ } catch (JSONException e) { }
+ }
+
+ // Second button
+ if (buttonLabels.length() > 1) {
+ try {
+ dlg.setNeutralButton(buttonLabels.getString(1),
+ new AlertDialog.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 2));
+ }
+ });
+ } catch (JSONException e) { }
+ }
+
+ // Third button
+ if (buttonLabels.length() > 2) {
+ try {
+ dlg.setPositiveButton(buttonLabels.getString(2),
+ new AlertDialog.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 3));
+ }
+ }
+ );
+ } catch (JSONException e) { }
+ }
+ dlg.setOnCancelListener(new AlertDialog.OnCancelListener() {
+ public void onCancel(DialogInterface dialog)
+ {
+ dialog.dismiss();
+ callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 0));
+ }
+ });
+
+ dlg.create();
+ dlg.show();
+ };
+ };
+ this.cordova.getActivity().runOnUiThread(runnable);
+ }
+
+ /**
++ * Builds and shows a native Android prompt dialog with given title, message, buttons.
++ * This dialog only shows up to 3 buttons. Any labels after that will be ignored.
++ * The following results are returned to the JavaScript callback identified by callbackId:
++ * buttonIndex Index number of the button selected
++ * input1 The text entered in the prompt dialog box
++ *
++ * @param message The message the dialog should display
++ * @param title The title of the dialog
++ * @param buttonLabels A comma separated list of button labels (Up to 3 buttons)
++ * @param callbackContext The callback context.
++ */
++ public synchronized void prompt(final String message, final String title, final JSONArray buttonLabels, final CallbackContext callbackContext) {
++
++ final CordovaInterface cordova = this.cordova;
++ final EditText promptInput = new EditText(cordova.getActivity());
++
++ Runnable runnable = new Runnable() {
++ public void run() {
++ AlertDialog.Builder dlg = new AlertDialog.Builder(cordova.getActivity());
++ dlg.setMessage(message);
++ dlg.setTitle(title);
++ dlg.setCancelable(true);
++
++ dlg.setView(promptInput);
++
++ final JSONObject result = new JSONObject();
++
++ // First button
++ if (buttonLabels.length() > 0) {
++ try {
++ dlg.setNegativeButton(buttonLabels.getString(0),
++ new AlertDialog.OnClickListener() {
++ public void onClick(DialogInterface dialog, int which) {
++ dialog.dismiss();
++ try {
++ result.put("buttonIndex",1);
++ result.put("input1", promptInput.getText());
++ } catch (JSONException e) { e.printStackTrace(); }
++ callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result));
++ }
++ });
++ } catch (JSONException e) { }
++ }
++
++ // Second button
++ if (buttonLabels.length() > 1) {
++ try {
++ dlg.setNeutralButton(buttonLabels.getString(1),
++ new AlertDialog.OnClickListener() {
++ public void onClick(DialogInterface dialog, int which) {
++ dialog.dismiss();
++ try {
++ result.put("buttonIndex",2);
++ result.put("input1", promptInput.getText());
++ } catch (JSONException e) { e.printStackTrace(); }
++ callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result));
++ }
++ });
++ } catch (JSONException e) { }
++ }
++
++ // Third button
++ if (buttonLabels.length() > 2) {
++ try {
++ dlg.setPositiveButton(buttonLabels.getString(2),
++ new AlertDialog.OnClickListener() {
++ public void onClick(DialogInterface dialog, int which) {
++ dialog.dismiss();
++ try {
++ result.put("buttonIndex",3);
++ result.put("input1", promptInput.getText());
++ } catch (JSONException e) { e.printStackTrace(); }
++ callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result));
++ }
++ }
++ );
++ } catch (JSONException e) { }
++ }
++ dlg.setOnCancelListener(new AlertDialog.OnCancelListener() {
++ public void onCancel(DialogInterface dialog)
++ {
++ dialog.dismiss();
++ try {
++ result.put("buttonIndex",0);
++ result.put("input1", promptInput.getText());
++ } catch (JSONException e) { e.printStackTrace(); }
++ callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result));
++ }
++ });
++
++ dlg.create();
++ dlg.show();
++
++ };
++ };
++ this.cordova.getActivity().runOnUiThread(runnable);
++ }
++ /**
+ * Show the spinner.
+ *
+ * @param title Title of the dialog
+ * @param message The message of the dialog
+ */
+ public synchronized void activityStart(final String title, final String message) {
+ if (this.spinnerDialog != null) {
+ this.spinnerDialog.dismiss();
+ this.spinnerDialog = null;
+ }
+ final CordovaInterface cordova = this.cordova;
+ Runnable runnable = new Runnable() {
+ public void run() {
+ Notification.this.spinnerDialog = ProgressDialog.show(cordova.getActivity(), title, message, true, true,
+ new DialogInterface.OnCancelListener() {
+ public void onCancel(DialogInterface dialog) {
+ Notification.this.spinnerDialog = null;
+ }
+ });
+ }
+ };
+ this.cordova.getActivity().runOnUiThread(runnable);
+ }
+
+ /**
+ * Stop spinner.
+ */
+ public synchronized void activityStop() {
+ if (this.spinnerDialog != null) {
+ this.spinnerDialog.dismiss();
+ this.spinnerDialog = null;
+ }
+ }
+
+ /**
+ * Show the progress dialog.
+ *
+ * @param title Title of the dialog
+ * @param message The message of the dialog
+ */
+ public synchronized void progressStart(final String title, final String message) {
+ if (this.progressDialog != null) {
+ this.progressDialog.dismiss();
+ this.progressDialog = null;
+ }
+ final Notification notification = this;
+ final CordovaInterface cordova = this.cordova;
+ Runnable runnable = new Runnable() {
+ public void run() {
+ notification.progressDialog = new ProgressDialog(cordova.getActivity());
+ notification.progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ notification.progressDialog.setTitle(title);
+ notification.progressDialog.setMessage(message);
+ notification.progressDialog.setCancelable(true);
+ notification.progressDialog.setMax(100);
+ notification.progressDialog.setProgress(0);
+ notification.progressDialog.setOnCancelListener(
+ new DialogInterface.OnCancelListener() {
+ public void onCancel(DialogInterface dialog) {
+ notification.progressDialog = null;
+ }
+ });
+ notification.progressDialog.show();
+ }
+ };
+ this.cordova.getActivity().runOnUiThread(runnable);
+ }
+
+ /**
+ * Set value of progress bar.
+ *
+ * @param value 0-100
+ */
+ public synchronized void progressValue(int value) {
+ if (this.progressDialog != null) {
+ this.progressDialog.setProgress(value);
+ }
+ }
+
+ /**
+ * Stop progress dialog.
+ */
+ public synchronized void progressStop() {
+ if (this.progressDialog != null) {
+ this.progressDialog.dismiss();
+ this.progressDialog = null;
+ }
+ }
+
+}