Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
cordova-plugin-local-notifications
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Nabil Sadki
cordova-plugin-local-notifications
Commits
402e3a09
Commit
402e3a09
authored
Oct 16, 2017
by
Sebastián Katzer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Support for messaging styled notifications
parent
2ca56e6c
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
212 additions
and
162 deletions
+212
-162
ClickActivity.java
src/android/ClickActivity.java
+4
-4
Builder.java
src/android/notification/Builder.java
+85
-19
Notification.java
src/android/notification/Notification.java
+51
-97
Options.java
src/android/notification/Options.java
+66
-32
ClickActivity.java
src/android/notification/activity/ClickActivity.java
+5
-5
ClearReceiver.java
src/android/notification/receiver/ClearReceiver.java
+1
-1
local-notification-util.js
www/local-notification-util.js
+0
-4
No files found.
src/android/ClickActivity.java
View file @
402e3a09
...
...
@@ -41,11 +41,11 @@ public class ClickActivity extends de.appplant.cordova.plugin.notification.activ
super
.
onClick
(
notification
);
// if (notification.getOptions().isOngoing
())
//
return;
if
(
notification
.
getOptions
().
isSticky
())
return
;
//
String event = notification.isRepeating() ? "clear" : "cancel";
//
LocalNotification.fireEvent(event, notification);
String
event
=
notification
.
isRepeating
()
?
"clear"
:
"cancel"
;
LocalNotification
.
fireEvent
(
event
,
notification
);
}
}
src/android/notification/Builder.java
View file @
402e3a09
...
...
@@ -26,6 +26,7 @@ import android.content.Context;
import
android.content.Intent
;
import
android.graphics.Bitmap
;
import
android.support.v4.app.NotificationCompat
;
import
android.support.v4.app.NotificationCompat.MessagingStyle.Message
;
import
java.util.List
;
import
java.util.Random
;
...
...
@@ -137,43 +138,108 @@ public final class Builder {
/**
* Find out and set the notification style.
*
* @param builder Local notification builder instance
* @param builder Local notification builder instance
.
*/
private
void
applyStyle
(
NotificationCompat
.
Builder
builder
)
{
Message
[]
messages
=
options
.
getMessages
();
String
summary
=
options
.
getSummary
();
if
(
messages
!=
null
)
{
applyMessagingStyle
(
builder
,
messages
);
return
;
}
List
<
Bitmap
>
pics
=
options
.
getAttachments
();
if
(
pics
.
size
()
>
0
)
{
applyBigPictureStyle
(
builder
,
pics
);
return
;
}
String
text
=
options
.
getText
();
if
(
text
!=
null
&&
text
.
contains
(
"\n"
))
{
applyInboxStyle
(
builder
);
return
;
}
if
(
text
==
null
||
summary
==
null
&&
text
.
length
()
<
45
)
return
;
applyBigTextStyle
(
builder
);
}
/**
* Apply inbox style.
*
* @param builder Local notification builder instance.
* @param messages The messages to add to the conversation.
*/
private
void
applyMessagingStyle
(
NotificationCompat
.
Builder
builder
,
Message
[]
messages
)
{
NotificationCompat
.
MessagingStyle
style
;
style
=
new
NotificationCompat
.
MessagingStyle
(
"Me"
)
.
setConversationTitle
(
options
.
getTitle
());
for
(
Message
msg
:
messages
)
{
style
.
addMessage
(
msg
);
}
builder
.
setStyle
(
style
);
}
/**
* Apply inbox style.
*
* @param builder Local notification builder instance.
* @param pics The pictures to show.
*/
private
void
applyBigPictureStyle
(
NotificationCompat
.
Builder
builder
,
List
<
Bitmap
>
pics
)
{
NotificationCompat
.
BigPictureStyle
style
;
String
summary
=
options
.
getSummary
();
String
text
=
options
.
getText
();
if
(
pics
.
size
()
>
0
)
{
NotificationCompat
.
BigPictureStyle
style
=
new
NotificationCompat
.
BigPictureStyle
(
builder
)
style
=
new
NotificationCompat
.
BigPictureStyle
(
builder
)
.
setSummaryText
(
summary
==
null
?
text
:
summary
)
.
bigPicture
(
pics
.
get
(
0
));
builder
.
setStyle
(
style
);
return
;
}
if
(
text
!=
null
&&
text
.
contains
(
"\n"
))
{
NotificationCompat
.
InboxStyle
style
=
new
NotificationCompat
.
InboxStyle
(
builder
)
.
setSummaryText
(
summary
);
/**
* Apply inbox style.
*
* @param builder Local notification builder instance.
*/
private
void
applyInboxStyle
(
NotificationCompat
.
Builder
builder
)
{
NotificationCompat
.
InboxStyle
style
;
String
text
=
options
.
getText
();
style
=
new
NotificationCompat
.
InboxStyle
(
builder
)
.
setSummaryText
(
options
.
getSummary
());
for
(
String
line
:
text
.
split
(
"\n"
))
{
style
.
addLine
(
line
);
}
builder
.
setStyle
(
style
);
return
;
}
if
(
text
==
null
||
summary
==
null
&&
text
.
length
()
<
45
)
return
;
/**
* Apply big text style.
*
* @param builder Local notification builder instance.
*/
private
void
applyBigTextStyle
(
NotificationCompat
.
Builder
builder
)
{
NotificationCompat
.
BigTextStyle
style
;
NotificationCompat
.
BigTextStyle
style
=
new
NotificationCompat
.
BigTextStyle
(
builder
)
.
setSummaryText
(
summary
)
.
bigText
(
text
);
style
=
new
NotificationCompat
.
BigTextStyle
(
builder
)
.
setSummaryText
(
options
.
getSummary
())
.
bigText
(
options
.
getText
());
builder
.
setStyle
(
style
);
}
...
...
@@ -182,7 +248,7 @@ public final class Builder {
* Set intent to handle the delete event. Will clean up some persisted
* preferences.
*
* @param builder Local notification builder instance
* @param builder Local notification builder instance
.
*/
private
void
applyDeleteReceiver
(
NotificationCompat
.
Builder
builder
)
{
...
...
@@ -203,7 +269,7 @@ public final class Builder {
* Set intent to handle the click event. Will bring the app to
* foreground.
*
* @param builder Local notification builder instance
* @param builder Local notification builder instance
.
*/
private
void
applyContentReceiver
(
NotificationCompat
.
Builder
builder
)
{
...
...
@@ -225,7 +291,7 @@ public final class Builder {
/**
* Add all actions to the builder if there are any actions.
*
* @param builder Local notification builder instance
* @param builder Local notification builder instance
.
*/
private
void
applyActions
(
NotificationCompat
.
Builder
builder
)
{
Action
[]
actions
=
options
.
getActions
();
...
...
src/android/notification/Notification.java
View file @
402e3a09
...
...
@@ -108,19 +108,12 @@ public final class Notification {
return
options
.
getId
();
}
// /**
// * If it's a repeating notification.
// */
// public boolean isRepeating () {
// return getOptions().getRepeatInterval() > 0;
// }
// /**
// * If the notification was in the past.
// */
// public boolean wasInThePast () {
// return new Date().after(options.getTriggerDate());
// }
/**
* If it's a repeating notification.
*/
public
boolean
isRepeating
()
{
return
getOptions
().
getTrigger
().
has
(
"every"
);
}
// /**
// * If the notification is scheduled.
...
...
@@ -160,50 +153,26 @@ public final class Notification {
// }
/**
*
Schedule the local notification
.
*
Clear the local notification without canceling repeating alarms
.
*/
public
void
schedule
()
{
// long triggerTime = options.getTriggerTime();
// persist();
// // Intent gets called when the Notification gets fired
// Intent intent = new Intent(context, receiver)
// .setAction(options.getIdStr())
// .putExtra(Options.EXTRA, options.toString());
// PendingIntent pi = PendingIntent.getBroadcast(
// context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
// if (isRepeating()) {
// getAlarmMgr().setRepeating(AlarmManager.RTC_WAKEUP,
// triggerTime, options.getRepeatInterval(), pi);
// } else {
// getAlarmMgr().set(AlarmManager.RTC_WAKEUP, triggerTime, pi);
// }
}
// /**
// * Clear the local notification without canceling repeating alarms.
// */
// public void clear () {
public
void
clear
()
{
// if (!isRepeating() && wasInThePast())
// unpersist();
// if (!isRepeating())
// getNotMgr().cancel(getId());
//
}
}
/
/ /
**
//
* Cancel the local notification.
//
*
//
* Create an intent that looks similar, to the one that was registered
//
* using schedule. Making sure the notification id in the action is the
//
* same. Now we can search for such an intent using the 'getService'
//
* method and cancel it.
//
*/
//
public void cancel() {
/**
* Cancel the local notification.
*
* Create an intent that looks similar, to the one that was registered
* using schedule. Making sure the notification id in the action is the
* same. Now we can search for such an intent using the 'getService'
* method and cancel it.
*/
public
void
cancel
()
{
// Intent intent = new Intent(context, receiver)
// .setAction(options.getIdStr());
...
...
@@ -214,7 +183,7 @@ public final class Notification {
// getNotMgr().cancel(options.getId());
// unpersist();
//
}
}
/**
* Present the local notification to user.
...
...
@@ -249,58 +218,43 @@ public final class Notification {
// return (int) ((now - triggerTime) / options.getRepeatInterval());
// }
// /**
// * Encode options to JSON.
// */
// public String toString() {
// JSONObject dict = options.getDict();
// JSONObject json = new JSONObject();
// try {
// json = new JSONObject(dict.toString());
// } catch (JSONException e) {
// e.printStackTrace();
// }
// json.remove("firstAt");
// json.remove("updated");
// json.remove("soundUri");
// json.remove("iconUri");
// return json.toString();
// }
// /**
// * Persist the information of this notification to the Android Shared
// * Preferences. This will allow the application to restore the notification
// * upon device reboot, app restart, retrieve notifications, aso.
// */
// private void persist () {
// SharedPreferences.Editor editor = getPrefs().edit();
/**
* Encode options to JSON.
*/
public
String
toString
()
{
JSONObject
dict
=
options
.
getDict
();
JSONObject
json
=
new
JSONObject
();
try
{
json
=
new
JSONObject
(
dict
.
toString
());
}
catch
(
JSONException
e
)
{
e
.
printStackTrace
();
}
// editor.putString(options.getIdStr(), options.toString());
return
json
.
toString
();
}
// if (Build.VERSION.SDK_INT < 9) {
// editor.commit();
// } else {
// editor.apply();
// }
// }
/**
* Persist the information of this notification to the Android Shared
* Preferences. This will allow the application to restore the notification
* upon device reboot, app restart, retrieve notifications, aso.
*/
private
void
persist
()
{
SharedPreferences
.
Editor
editor
=
getPrefs
().
edit
();
// /**
// * Remove the notification from the Android shared Preferences.
// */
// private void unpersist () {
// SharedPreferences.Editor editor = getPrefs().edit();
editor
.
putString
(
options
.
getIdentifier
(),
options
.
toString
());
editor
.
apply
();
}
// editor.remove(options.getIdStr());
/**
* Remove the notification from the Android shared Preferences.
*/
private
void
unpersist
()
{
SharedPreferences
.
Editor
editor
=
getPrefs
().
edit
();
// if (Build.VERSION.SDK_INT < 9) {
// editor.commit();
// } else {
// editor.apply();
// }
// }
editor
.
remove
(
options
.
getIdentifier
());
editor
.
apply
();
}
/**
* Shared private preferences for the application.
...
...
src/android/notification/Options.java
View file @
402e3a09
...
...
@@ -26,12 +26,14 @@ import android.graphics.Bitmap;
import
android.graphics.Color
;
import
android.net.Uri
;
import
android.support.v4.app.NotificationCompat
;
import
android.support.v4.app.NotificationCompat.MessagingStyle.Message
;
import
org.json.JSONArray
;
import
org.json.JSONObject
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
de.appplant.cordova.plugin.notification.util.AssetUtil
;
...
...
@@ -122,13 +124,6 @@ public final class Options {
}
/**
* Text for the local notification.
*/
public
String
getText
()
{
return
options
.
optString
(
"text"
,
""
);
}
/**
* Badge number for the local notification.
*/
int
getBadgeNumber
()
{
...
...
@@ -138,7 +133,7 @@ public final class Options {
/**
* ongoing flag for local notifications.
*/
Boolean
isSticky
()
{
public
Boolean
isSticky
()
{
return
options
.
optBoolean
(
"sticky"
,
false
);
}
...
...
@@ -150,6 +145,42 @@ public final class Options {
}
/**
* Gets the raw trigger spec as provided by the user.
*/
public
JSONObject
getTrigger
()
{
return
options
.
optJSONObject
(
"trigger"
);
}
/**
* Gets the value of the silent flag.
*/
boolean
isSilent
()
{
return
options
.
optBoolean
(
"silent"
,
false
);
}
/**
* The group for that notification.
*/
String
getGroup
()
{
return
options
.
optString
(
"group"
,
null
);
}
/**
* If the group shall show a summary.
*/
boolean
getGroupSummary
()
{
return
options
.
optBoolean
(
"groupSummary"
,
false
);
}
/**
* Text for the local notification.
*/
public
String
getText
()
{
Object
text
=
options
.
opt
(
"text"
);
return
text
instanceof
String
?
(
String
)
text
:
""
;
}
/**
* Title for the local notification.
*/
public
String
getTitle
()
{
...
...
@@ -498,27 +529,6 @@ public final class Options {
}
/**
* The group for that notification.
*/
String
getGroup
()
{
return
options
.
optString
(
"group"
,
null
);
}
/**
* If the group shall show a summary.
*/
boolean
getGroupSummary
()
{
return
options
.
optBoolean
(
"groupSummary"
,
false
);
}
/**
* Gets the value of the silent flag.
*/
boolean
isSilent
()
{
return
options
.
optBoolean
(
"silent"
,
false
);
}
/**
* Gets the list of actions to display.
*/
Action
[]
getActions
()
{
...
...
@@ -543,10 +553,34 @@ public final class Options {
}
/**
* Gets the raw trigger spec as provided by the user.
* Gets the list of messages to display.
*
* @return null if there are no messages.
*/
public
JSONObject
getTrigger
()
{
return
options
.
optJSONObject
(
"trigger"
);
Message
[]
getMessages
()
{
Object
value
=
options
.
opt
(
"text"
);
if
(
value
==
null
||
value
instanceof
String
)
return
null
;
JSONArray
list
=
(
JSONArray
)
value
;
if
(
list
.
length
()
==
0
)
return
null
;
Message
[]
messages
=
new
Message
[
list
.
length
()];
long
now
=
new
Date
().
getTime
();
for
(
int
i
=
0
;
i
<
messages
.
length
;
i
++)
{
JSONObject
msg
=
list
.
optJSONObject
(
i
);
String
text
=
msg
.
optString
(
"text"
);
long
timestamp
=
msg
.
optLong
(
"date"
,
now
);
String
person
=
msg
.
optString
(
"person"
,
null
);
messages
[
i
]
=
new
Message
(
text
,
timestamp
,
person
);
}
return
messages
;
}
/**
...
...
src/android/notification/activity/ClickActivity.java
View file @
402e3a09
...
...
@@ -40,11 +40,11 @@ public class ClickActivity extends AbstractClickActivity {
public
void
onClick
(
Notification
notification
)
{
launchApp
();
//
if (notification.isRepeating()) {
//
notification.clear();
//
} else {
//
notification.cancel();
//
}
if
(
notification
.
isRepeating
())
{
notification
.
clear
();
}
else
{
notification
.
cancel
();
}
}
}
src/android/notification/receiver/ClearReceiver.java
View file @
402e3a09
...
...
@@ -37,7 +37,7 @@ public class ClearReceiver extends AbstractClearReceiver {
*/
@Override
public
void
onClear
(
Notification
notification
)
{
//
notification.clear();
notification
.
clear
();
}
}
www/local-notification-util.js
View file @
402e3a09
...
...
@@ -141,10 +141,6 @@ exports.convertProperties = function (options) {
options
.
title
=
options
.
title
.
toString
();
}
if
(
options
.
text
)
{
options
.
text
=
options
.
text
.
toString
();
}
if
(
options
.
badge
)
{
options
.
badge
=
parseToInt
(
'badge'
,
options
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment