Commit 452e572b by Sebastián Katzer

Cleanup and added launch flag for Android

parent 3b97aa4a
......@@ -166,11 +166,15 @@
target-dir="src/de/appplant/cordova/plugin/localnotification" />
-->
<source-file
src="src/android/notification/activity/AbstractClickActivity.java"
target-dir="src/de/appplant/cordova/plugin/notification/activity" />
src="src/android/notification/action/Action.java"
target-dir="src/de/appplant/cordova/plugin/notification/action" />
<source-file
src="src/android/notification/activity/ClickActivity.java"
src="src/android/notification/action/ActionGroup.java"
target-dir="src/de/appplant/cordova/plugin/notification/action" />
<source-file
src="src/android/notification/activity/AbstractClickActivity.java"
target-dir="src/de/appplant/cordova/plugin/notification/activity" />
<source-file
......@@ -186,14 +190,6 @@
target-dir="src/de/appplant/cordova/plugin/notification/receiver" />
<source-file
src="src/android/notification/receiver/ClearReceiver.java"
target-dir="src/de/appplant/cordova/plugin/notification/receiver" />
<source-file
src="src/android/notification/receiver/TriggerReceiver.java"
target-dir="src/de/appplant/cordova/plugin/notification/receiver" />
<source-file
src="src/android/notification/trigger/DateTrigger.java"
target-dir="src/de/appplant/cordova/plugin/notification/trigger" />
......@@ -214,14 +210,6 @@
target-dir="src/de/appplant/cordova/plugin/notification/util" />
<source-file
src="src/android/notification/Action.java"
target-dir="src/de/appplant/cordova/plugin/notification" />
<source-file
src="src/android/notification/ActionGroup.java"
target-dir="src/de/appplant/cordova/plugin/notification" />
<source-file
src="src/android/notification/Builder.java"
target-dir="src/de/appplant/cordova/plugin/notification" />
......
......@@ -22,6 +22,7 @@
package de.appplant.cordova.plugin.localnotification;
import de.appplant.cordova.plugin.notification.Notification;
import de.appplant.cordova.plugin.notification.receiver.AbstractClearReceiver;
/**
......@@ -29,7 +30,7 @@ import de.appplant.cordova.plugin.notification.Notification;
* notification manually. It un-persists the cleared notification from the
* shared preferences.
*/
public class ClearReceiver extends de.appplant.cordova.plugin.notification.receiver.ClearReceiver {
public class ClearReceiver extends AbstractClearReceiver {
/**
* Called when a local notification was cleared from outside of the app.
......@@ -38,7 +39,7 @@ public class ClearReceiver extends de.appplant.cordova.plugin.notification.recei
*/
@Override
public void onClear (Notification notification) {
super.onClear(notification);
notification.clear();
LocalNotification.fireEvent("clear", notification);
}
......
......@@ -21,6 +21,7 @@
package de.appplant.cordova.plugin.localnotification;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.RemoteInput;
......@@ -28,13 +29,15 @@ import org.json.JSONException;
import org.json.JSONObject;
import de.appplant.cordova.plugin.notification.Notification;
import de.appplant.cordova.plugin.notification.Options;
import de.appplant.cordova.plugin.notification.activity.AbstractClickActivity;
/**
* The receiver activity is triggered when a notification is clicked by a user.
* The activity calls the background callback and brings the launch intent
* up to foreground.
*/
public class ClickActivity extends de.appplant.cordova.plugin.notification.activity.ClickActivity {
public class ClickActivity extends AbstractClickActivity {
/**
* Called when local notification was clicked by the user.
......@@ -45,7 +48,10 @@ public class ClickActivity extends de.appplant.cordova.plugin.notification.activ
@Override
public void onClick(String action, Notification notification) {
JSONObject data = new JSONObject();
Bundle input = RemoteInput.getResultsFromIntent(getIntent());
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
Bundle input = RemoteInput.getResultsFromIntent(intent);
boolean doLaunch = bundle.getBoolean(Options.EXTRA_LAUNCH, true);
if (input != null) {
try {
......@@ -55,9 +61,20 @@ public class ClickActivity extends de.appplant.cordova.plugin.notification.activ
}
}
if (doLaunch) {
launchApp();
}
LocalNotification.fireEvent(action, notification, data);
super.onClick(action, notification);
if (notification.getOptions().isSticky())
return;
if (notification.isRepeating()) {
notification.clear();
} else {
notification.cancel();
}
}
}
......@@ -34,10 +34,9 @@ import org.json.JSONObject;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.lang.Exception;
import de.appplant.cordova.plugin.notification.ActionGroup;
import de.appplant.cordova.plugin.notification.action.ActionGroup;
import de.appplant.cordova.plugin.notification.Manager;
import de.appplant.cordova.plugin.notification.Notification;
import de.appplant.cordova.plugin.notification.Options;
......
......@@ -23,6 +23,7 @@ package de.appplant.cordova.plugin.localnotification;
import de.appplant.cordova.plugin.notification.Builder;
import de.appplant.cordova.plugin.notification.Notification;
import de.appplant.cordova.plugin.notification.receiver.AbstractTriggerReceiver;
/**
* The alarm receiver is triggered when a scheduled alarm is fired. This class
......@@ -30,7 +31,7 @@ import de.appplant.cordova.plugin.notification.Notification;
* Android notification bar. The notification uses the default notification
* sound and it vibrates the phone.
*/
public class TriggerReceiver extends de.appplant.cordova.plugin.notification.receiver.TriggerReceiver {
public class TriggerReceiver extends AbstractTriggerReceiver {
/**
* Called when a local notification was triggered. Does present the local
......@@ -41,7 +42,7 @@ public class TriggerReceiver extends de.appplant.cordova.plugin.notification.rec
*/
@Override
public void onTrigger (Notification notification, boolean updated) {
super.onTrigger(notification, updated);
notification.show();
if (!updated) {
LocalNotification.fireEvent("trigger", notification);
......
......@@ -33,8 +33,7 @@ import android.support.v4.app.NotificationCompat.MessagingStyle.Message;
import java.util.List;
import java.util.Random;
import de.appplant.cordova.plugin.notification.activity.ClickActivity;
import de.appplant.cordova.plugin.notification.receiver.ClearReceiver;
import de.appplant.cordova.plugin.notification.action.Action;
/**
* Builder class for local notifications. Build fully configured local
......@@ -49,10 +48,10 @@ public final class Builder {
private final Options options;
// Receiver to handle the clear event
private Class<?> clearReceiver = ClearReceiver.class;
private Class<?> clearReceiver;
// Activity to handle the click event
private Class<?> clickActivity = ClickActivity.class;
private Class<?> clickActivity;
/**
* Constructor
......@@ -101,11 +100,12 @@ public final class Builder {
Bundle extras = new Bundle();
extras.putString(Options.EXTRA, options.toString());
extras.putString(Options.SOUND_EXTRA, sound.toString());
extras.putString(Options.EXTRA_SOUND, sound.toString());
builder = new NotificationCompat.Builder(context, Manager.CHANNEL_ID)
.setDefaults(options.getDefaults())
.setExtras(extras)
.setOnlyAlertOnce(true)
.setChannelId(options.getChannel())
.setContentTitle(options.getTitle())
.setContentText(options.getText())
......@@ -288,7 +288,8 @@ public final class Builder {
Intent intent = new Intent(context, clickActivity)
.putExtra(Options.EXTRA, options.toString())
.putExtra(Action.EXTRA, Action.CLICK_ACTION_ID)
.putExtra(Options.EXTRA_LAUNCH, options.isLaunchingApp())
.putExtra(Action.EXTRA_ID, Action.CLICK_ACTION_ID)
.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
int reqCode = new Random().nextInt();
......@@ -333,7 +334,8 @@ public final class Builder {
private PendingIntent getPendingIntentForAction (Action action) {
Intent intent = new Intent(context, clickActivity)
.putExtra(Options.EXTRA, options.toString())
.putExtra(Action.EXTRA, action.getId())
.putExtra(Options.EXTRA_LAUNCH, action.isLaunchingApp())
.putExtra(Action.EXTRA_ID, action.getId())
.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
int requestCode = new Random().nextInt();
......
......@@ -28,22 +28,9 @@ import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Build;
import android.support.v4.app.NotificationManagerCompat;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import de.appplant.cordova.plugin.notification.receiver.TriggerReceiver;
import static android.os.Build.VERSION.SDK_INT;
import static android.os.Build.VERSION_CODES.O;
......
......@@ -23,23 +23,16 @@ package de.appplant.cordova.plugin.notification;
import android.app.AlarmManager;
import android.app.NotificationChannelGroup;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Build;
import android.support.v4.app.NotificationCompat;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Date;
import de.appplant.cordova.plugin.notification.receiver.TriggerReceiver;
/**
* Wrapper class around OS notification class. Handles basic operations
* like show, delete, cancel for a single local notification instance.
......@@ -193,7 +186,7 @@ public final class Notification {
if (builder == null)
return;
String sound = builder.getExtras().getString(Options.SOUND_EXTRA);
String sound = builder.getExtras().getString(Options.EXTRA_SOUND);
Uri soundUri = Uri.parse(sound);
context.grantUriPermission("com.android.systemui", soundUri,
......
......@@ -36,6 +36,8 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import de.appplant.cordova.plugin.notification.action.Action;
import de.appplant.cordova.plugin.notification.action.ActionGroup;
import de.appplant.cordova.plugin.notification.util.AssetUtil;
import static android.support.v4.app.NotificationCompat.DEFAULT_LIGHTS;
......@@ -57,7 +59,10 @@ public final class Options {
public static final String EXTRA = "NOTIFICATION_OPTIONS";
// Key name for bundled sound extra
public static final String SOUND_EXTRA = "NOTIFICATION_SOUND";
static final String EXTRA_SOUND = "NOTIFICATION_SOUND";
// Key name for bundled launch extra
public static final String EXTRA_LAUNCH = "NOTIFICATION_LAUNCH";
// Default icon path
private static final String DEFAULT_ICON = "res://icon";
......@@ -176,6 +181,13 @@ public final class Options {
}
/**
* launch flag for the notification.
*/
boolean isLaunchingApp() {
return options.optBoolean("launch", true);
}
/**
* The channel id of that notification.
*/
String getChannel() {
......
......@@ -30,12 +30,16 @@ import java.util.Calendar;
import java.util.Date;
import java.util.List;
import de.appplant.cordova.plugin.notification.trigger.MatchTrigger;
import de.appplant.cordova.plugin.notification.trigger.DateTrigger;
import de.appplant.cordova.plugin.notification.trigger.IntervalTrigger;
import de.appplant.cordova.plugin.notification.trigger.MatchTrigger;
import static de.appplant.cordova.plugin.notification.trigger.IntervalTrigger.Unit;
/**
* An object you use to specify a notification’s content and the condition
* that triggers its delivery.
*/
public final class Request {
// Key name for bundled extras
......
......@@ -19,7 +19,7 @@
* limitations under the License.
*/
package de.appplant.cordova.plugin.notification;
package de.appplant.cordova.plugin.notification.action;
import android.content.Context;
import android.support.v4.app.RemoteInput;
......@@ -38,7 +38,7 @@ import de.appplant.cordova.plugin.notification.util.AssetUtil;
public final class Action {
// Key name for bundled extras
public static final String EXTRA = "NOTIFICATION_ACTION_ID";
public static final String EXTRA_ID = "NOTIFICATION_ACTION_ID";
// The id for the click action
public static final String CLICK_ACTION_ID = "click";
......@@ -100,7 +100,7 @@ public final class Action {
/**
* Gets the type for the action.
*/
boolean isWithInput() {
public boolean isWithInput() {
String type = options.optString("type");
return type.equals("input");
}
......@@ -108,7 +108,7 @@ public final class Action {
/**
* Gets the input config in case of the action is of type input.
*/
RemoteInput getInput() {
public RemoteInput getInput() {
return new RemoteInput.Builder(getId())
.setLabel(options.optString("emptyText"))
.setAllowFreeFormInput(options.optBoolean("editable", true))
......
......@@ -19,7 +19,7 @@
* limitations under the License.
*/
package de.appplant.cordova.plugin.notification;
package de.appplant.cordova.plugin.notification.action;
import android.content.Context;
import android.util.Log;
......@@ -57,7 +57,7 @@ public final class ActionGroup {
*
* @return Null if no group was found.
*/
static ActionGroup lookup (String id) {
public static ActionGroup lookup(String id) {
return groups.get(id);
}
......
......@@ -29,11 +29,11 @@ import android.os.Bundle;
import org.json.JSONException;
import org.json.JSONObject;
import de.appplant.cordova.plugin.notification.Action;
import de.appplant.cordova.plugin.notification.action.Action;
import de.appplant.cordova.plugin.notification.Notification;
import de.appplant.cordova.plugin.notification.Options;
import static de.appplant.cordova.plugin.notification.Action.CLICK_ACTION_ID;
import static de.appplant.cordova.plugin.notification.action.Action.CLICK_ACTION_ID;
/**
* Abstract content receiver activity for local notifications. Creates the
......@@ -55,7 +55,7 @@ abstract public class AbstractClickActivity extends Activity {
Context context = getApplicationContext();
try {
String action = bundle.getString(Action.EXTRA, CLICK_ACTION_ID);
String action = bundle.getString(Action.EXTRA_ID, CLICK_ACTION_ID);
String data = bundle.getString(Options.EXTRA);
JSONObject dict = new JSONObject(data);
Options options = new Options(context, dict);
......
......@@ -67,6 +67,7 @@ exports.applyPlatformSpecificOptions = function () {
defaults.defaults = 0;
defaults.priority = 0;
defaults.channel = undefined;
defaults.launch = true;
break;
}
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment