diff --git a/src/android/com/adobe/phonegap/push/GCMIntentService.java b/src/android/com/adobe/phonegap/push/GCMIntentService.java index 6e20772aa..9adf325ae 100644 --- a/src/android/com/adobe/phonegap/push/GCMIntentService.java +++ b/src/android/com/adobe/phonegap/push/GCMIntentService.java @@ -1,5 +1,7 @@ package com.adobe.phonegap.push; +import java.util.UUID; + import org.json.JSONException; import org.json.JSONObject; @@ -7,8 +9,10 @@ import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; +import android.content.ContentResolver; import android.content.Context; import android.content.Intent; +import android.net.Uri; import android.os.Bundle; import android.support.v4.app.NotificationCompat; import android.util.Log; @@ -18,49 +22,49 @@ @SuppressLint("NewApi") public class GCMIntentService extends GCMBaseIntentService { - private static final String LOG_TAG = "PushPlugin_GCMIntentService"; - - public GCMIntentService() { - super("GCMIntentService"); - } + private static final String LOG_TAG = "PushPlugin_GCMIntentService"; + + public GCMIntentService() { + super("GCMIntentService"); + } - @Override - public void onRegistered(Context context, String regId) { + @Override + public void onRegistered(Context context, String regId) { - Log.v(LOG_TAG, "onRegistered: "+ regId); + Log.v(LOG_TAG, "onRegistered: "+ regId); - try { - JSONObject json = new JSONObject().put("registrationId", regId); + try { + JSONObject json = new JSONObject().put("registrationId", regId); - Log.v(LOG_TAG, "onRegistered: " + json.toString()); + Log.v(LOG_TAG, "onRegistered: " + json.toString()); - PushPlugin.sendEvent( json ); - } - catch(JSONException e) { - // No message to the user is sent, JSON failed - Log.e(LOG_TAG, "onRegistered: JSON exception"); - } - } + PushPlugin.sendEvent( json ); + } + catch(JSONException e) { + // No message to the user is sent, JSON failed + Log.e(LOG_TAG, "onRegistered: JSON exception"); + } + } - @Override - public void onUnregistered(Context context, String regId) { - Log.d(LOG_TAG, "onUnregistered - regId: " + regId); - } + @Override + public void onUnregistered(Context context, String regId) { + Log.d(LOG_TAG, "onUnregistered - regId: " + regId); + } - @Override - protected void onMessage(Context context, Intent intent) { - Log.d(LOG_TAG, "onMessage - context: " + context); + @Override + protected void onMessage(Context context, Intent intent) { + Log.d(LOG_TAG, "onMessage - context: " + context); - // Extract the payload from the message - Bundle extras = intent.getExtras(); - if (extras != null) { - // if we are in the foreground, just surface the payload, else post it to the statusbar + // Extract the payload from the message + Bundle extras = intent.getExtras(); + if (extras != null) { + // if we are in the foreground, just surface the payload, else post it to the statusbar if (PushPlugin.isInForeground()) { - extras.putBoolean("foreground", true); + extras.putBoolean("foreground", true); PushPlugin.sendExtras(extras); - } - else { - extras.putBoolean("foreground", false); + } + else { + extras.putBoolean("foreground", false); // Send a notification if there is a message if (extras.getString("message") != null && extras.getString("message").length() != 0) { @@ -68,71 +72,79 @@ protected void onMessage(Context context, Intent intent) { } } } - } - - public void createNotification(Context context, Bundle extras) { - NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - String appName = getAppName(this); - - Intent notificationIntent = new Intent(this, PushHandlerActivity.class); - notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); - notificationIntent.putExtra("pushBundle", extras); - - PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); - - int defaults = Notification.DEFAULT_ALL; - - if (extras.getString("defaults") != null) { - try { - defaults = Integer.parseInt(extras.getString("defaults")); - } catch (NumberFormatException e) {} - } - - NotificationCompat.Builder mBuilder = - new NotificationCompat.Builder(context) - .setDefaults(defaults) - .setSmallIcon(context.getApplicationInfo().icon) - .setWhen(System.currentTimeMillis()) - .setContentTitle(extras.getString("title")) - .setTicker(extras.getString("title")) - .setContentIntent(contentIntent) - .setAutoCancel(true); - - String message = extras.getString("message"); - if (message != null) { - mBuilder.setContentText(message); - } else { - mBuilder.setContentText(""); - } - - String msgcnt = extras.getString("msgcnt"); - if (msgcnt != null) { - mBuilder.setNumber(Integer.parseInt(msgcnt)); - } - - int notId = 0; - - try { - notId = Integer.parseInt(extras.getString("notId")); - } - catch(NumberFormatException e) { - Log.e(LOG_TAG, "Number format exception - Error parsing Notification ID: " + e.getMessage()); - } - catch(Exception e) { - Log.e(LOG_TAG, "Number format exception - Error parsing Notification ID" + e.getMessage()); - } - - mNotificationManager.notify((String) appName, notId, mBuilder.build()); - } - - private static String getAppName(Context context) { - CharSequence appName = context.getPackageManager().getApplicationLabel(context.getApplicationInfo()); - return (String)appName; - } - - @Override - public void onError(Context context, String errorId) { - Log.e(LOG_TAG, "onError - errorId: " + errorId); - } + } + + public void createNotification(Context context, Bundle extras) { + NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + String appName = getAppName(this); + + Intent notificationIntent = new Intent(this, PushHandlerActivity.class); + notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); + notificationIntent.putExtra("pushBundle", extras); + + PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); + + int defaults = Notification.DEFAULT_ALL; + + if (extras.getString("defaults") != null) { + try { + defaults = Integer.parseInt(extras.getString("defaults")); + } catch (NumberFormatException e) {} + } + + NotificationCompat.Builder mBuilder = + new NotificationCompat.Builder(context) + //.setDefaults(defaults) + .setSmallIcon(context.getApplicationInfo().icon) + .setWhen(System.currentTimeMillis()) + .setContentTitle(extras.getString("title")) + .setTicker(extras.getString("title")) + .setContentIntent(contentIntent) + .setAutoCancel(true); + + String soundname = extras.getString("soundname"); + if (soundname != null) { + Uri sound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + + "://" + context.getPackageName() + "/raw/" + soundname); + Log.d(LOG_TAG, sound.toString()); + mBuilder.setSound(sound); + } + + String message = extras.getString("message"); + if (message != null) { + mBuilder.setContentText(message); + } else { + mBuilder.setContentText(""); + } + + String msgcnt = extras.getString("msgcnt"); + if (msgcnt != null) { + mBuilder.setNumber(Integer.parseInt(msgcnt)); + } + + int notId = UUID.randomUUID().hashCode(); + + try { + notId = Integer.parseInt(extras.getString("notId")); + } + catch(NumberFormatException e) { + Log.e(LOG_TAG, "Number format exception - Error parsing Notification ID: " + e.getMessage()); + } + catch(Exception e) { + Log.e(LOG_TAG, "Number format exception - Error parsing Notification ID" + e.getMessage()); + } + + mNotificationManager.notify((String) appName, notId, mBuilder.build()); + } + + private static String getAppName(Context context) { + CharSequence appName = context.getPackageManager().getApplicationLabel(context.getApplicationInfo()); + return (String)appName; + } + + @Override + public void onError(Context context, String errorId) { + Log.e(LOG_TAG, "onError - errorId: " + errorId); + } }