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
52aa742a
Commit
52aa742a
authored
Aug 31, 2013
by
Sebastián Katzer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Merged AlarmHelper into LocalNotification
parent
5d6a0c79
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
72 additions
and
264 deletions
+72
-264
plugin.xml
plugin.xml
+1
-2
AlarmHelper.java
src/android/AlarmHelper.java
+0
-110
AlarmOptions.java
src/android/AlarmOptions.java
+0
-112
LocalNotification.java
src/android/LocalNotification.java
+67
-36
LocalNotificationOptions.java
src/android/LocalNotificationOptions.java
+4
-4
No files found.
plugin.xml
View file @
52aa742a
...
...
@@ -44,8 +44,7 @@
</config-file>
<source-file
src=
"src/android/AlarmReceiver.java"
target-dir=
"src/de/appplant/cordova/plugin"
/>
<source-file
src=
"src/android/AlarmHelper.java"
target-dir=
"src/de/appplant/cordova/plugin"
/>
<source-file
src=
"src/android/AlarmOptions.java"
target-dir=
"src/de/appplant/cordova/plugin"
/>
<source-file
src=
"src/android/LocalNotificationOptions.java"
target-dir=
"src/de/appplant/cordova/plugin"
/>
<source-file
src=
"src/android/AlarmRestoreOnBoot.java"
target-dir=
"src/de/appplant/cordova/plugin"
/>
<source-file
src=
"src/android/LocalNotification.java"
target-dir=
"src/de/appplant/cordova/plugin"
/>
...
...
src/android/AlarmHelper.java
deleted
100644 → 0
View file @
5d6a0c79
package
de
.
appplant
.
cordova
.
plugin
;
import
java.util.Calendar
;
import
java.util.Map
;
import
java.util.Set
;
import
android.app.AlarmManager
;
import
android.app.PendingIntent
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.content.SharedPreferences
;
import
android.util.Log
;
/**
* Helper class for the LocalNotification plugin. This class is reused by the
* AlarmRestoreOnBoot.
*
* @see LocalNotification
* @see AlarmRestoreOnBoot
*
* @author dvtoever
*/
public
class
AlarmHelper
{
private
Context
ctx
;
public
AlarmHelper
(
Context
context
)
{
this
.
ctx
=
context
;
}
/**
* @see LocalNotification#add(boolean, String, String, String, int,
* Calendar)
*/
public
boolean
addAlarm
(
boolean
repeatDaily
,
String
alarmTitle
,
String
alarmSubTitle
,
String
alarmTicker
,
String
notificationId
,
Calendar
cal
)
{
final
long
triggerTime
=
cal
.
getTimeInMillis
();
final
Intent
intent
=
new
Intent
(
this
.
ctx
,
AlarmReceiver
.
class
);
final
int
hour
=
cal
.
get
(
Calendar
.
HOUR_OF_DAY
);
final
int
min
=
cal
.
get
(
Calendar
.
MINUTE
);
intent
.
setAction
(
""
+
notificationId
);
intent
.
putExtra
(
AlarmReceiver
.
TITLE
,
alarmTitle
);
intent
.
putExtra
(
AlarmReceiver
.
SUBTITLE
,
alarmSubTitle
);
intent
.
putExtra
(
AlarmReceiver
.
TICKER_TEXT
,
alarmTicker
);
intent
.
putExtra
(
AlarmReceiver
.
NOTIFICATION_ID
,
notificationId
);
intent
.
putExtra
(
AlarmReceiver
.
HOUR_OF_DAY
,
hour
);
intent
.
putExtra
(
AlarmReceiver
.
MINUTE
,
min
);
final
PendingIntent
sender
=
PendingIntent
.
getBroadcast
(
this
.
ctx
,
0
,
intent
,
PendingIntent
.
FLAG_CANCEL_CURRENT
);
/* Get the AlarmManager service */
final
AlarmManager
am
=
getAlarmManager
();
if
(
repeatDaily
)
{
am
.
setRepeating
(
AlarmManager
.
RTC_WAKEUP
,
triggerTime
,
AlarmManager
.
INTERVAL_DAY
,
sender
);
}
else
{
am
.
set
(
AlarmManager
.
RTC_WAKEUP
,
triggerTime
,
sender
);
}
return
true
;
}
/**
* @see LocalNotification#cancelNotification(int)
*/
public
boolean
cancelAlarm
(
String
notificationId
)
{
/*
* Create an intent that looks similar, to the one that was registered
* using add. 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.
*/
final
Intent
intent
=
new
Intent
(
this
.
ctx
,
AlarmReceiver
.
class
);
intent
.
setAction
(
""
+
notificationId
);
final
PendingIntent
pi
=
PendingIntent
.
getBroadcast
(
this
.
ctx
,
0
,
intent
,
PendingIntent
.
FLAG_CANCEL_CURRENT
);
final
AlarmManager
am
=
getAlarmManager
();
try
{
am
.
cancel
(
pi
);
}
catch
(
Exception
e
)
{
return
false
;
}
return
true
;
}
/**
* @see LocalNotification#cancelAllNotifications()
*/
public
boolean
cancelAll
(
SharedPreferences
alarmSettings
)
{
final
Map
<
String
,
?>
allAlarms
=
alarmSettings
.
getAll
();
final
Set
<
String
>
alarmIds
=
allAlarms
.
keySet
();
for
(
String
alarmId
:
alarmIds
)
{
Log
.
d
(
LocalNotification
.
PLUGIN_NAME
,
"Canceling notification with id: "
+
alarmId
);
String
alarmInt
=
alarmId
;
cancelAlarm
(
alarmInt
);
}
return
true
;
}
private
AlarmManager
getAlarmManager
()
{
final
AlarmManager
am
=
(
AlarmManager
)
this
.
ctx
.
getSystemService
(
Context
.
ALARM_SERVICE
);
return
am
;
}
}
\ No newline at end of file
src/android/AlarmOptions.java
deleted
100644 → 0
View file @
5d6a0c79
package
de
.
appplant
.
cordova
.
plugin
;
import
java.util.Calendar
;
import
org.json.JSONArray
;
import
org.json.JSONObject
;
/**
* Class that helps to store the options that can be specified per alarm.
*
* @author dvtoever
*/
public
class
AlarmOptions
{
/*
* Options that can be set when this plugin is invoked
*/
private
Calendar
cal
=
Calendar
.
getInstance
();
private
String
alarmTitle
=
""
;
private
String
alarmSubTitle
=
""
;
private
String
alarmTicker
=
""
;
private
boolean
repeatDaily
=
false
;
private
String
notificationId
=
""
;
/**
* Parse options passed from javascript part of this plugin.
*
* @param optionsArr
* JSON Array containing the list options.
*/
public
void
parseOptions
(
JSONArray
optionsArr
)
{
final
JSONObject
options
=
optionsArr
.
optJSONObject
(
0
);
if
(
options
!=
null
)
{
// Parse string representing the date
String
textDate
=
options
.
optString
(
"date"
);
if
(!
""
.
equals
(
textDate
))
{
String
[]
datePart
=
textDate
.
split
(
"/"
);
int
month
=
Integer
.
parseInt
(
datePart
[
0
]);
int
day
=
Integer
.
parseInt
(
datePart
[
1
]);
int
year
=
Integer
.
parseInt
(
datePart
[
2
]);
int
hour
=
Integer
.
parseInt
(
datePart
[
3
]);
int
min
=
Integer
.
parseInt
(
datePart
[
4
]);
cal
.
set
(
year
,
month
,
day
,
hour
,
min
);
}
String
optString
=
options
.
optString
(
"message"
);
if
(!
""
.
equals
(
optString
))
{
String
lines
[]
=
optString
.
split
(
"\\r?\\n"
);
alarmTitle
=
lines
[
0
];
if
(
lines
.
length
>
1
)
alarmSubTitle
=
lines
[
1
];
}
alarmTicker
=
options
.
optString
(
"ticker"
);
repeatDaily
=
options
.
optBoolean
(
"repeatDaily"
);
notificationId
=
options
.
optString
(
"id"
);
}
}
public
Calendar
getCal
()
{
return
cal
;
}
public
void
setCal
(
Calendar
cal
)
{
this
.
cal
=
cal
;
}
public
String
getAlarmTitle
()
{
return
alarmTitle
;
}
public
void
setAlarmTitle
(
String
alarmTitle
)
{
this
.
alarmTitle
=
alarmTitle
;
}
public
String
getAlarmSubTitle
()
{
return
alarmSubTitle
;
}
public
void
setAlarmSubTitle
(
String
alarmSubTitle
)
{
this
.
alarmSubTitle
=
alarmSubTitle
;
}
public
String
getAlarmTicker
()
{
return
alarmTicker
;
}
public
void
setAlarmTicker
(
String
alarmTicker
)
{
this
.
alarmTicker
=
alarmTicker
;
}
public
boolean
isRepeatDaily
()
{
return
repeatDaily
;
}
public
void
setRepeatDaily
(
boolean
repeatDaily
)
{
this
.
repeatDaily
=
repeatDaily
;
}
public
String
getNotificationId
()
{
return
notificationId
;
}
public
void
setNotificationId
(
String
notificationId
)
{
this
.
notificationId
=
notificationId
;
}
}
\ No newline at end of file
src/android/LocalNotification.java
View file @
52aa742a
...
...
@@ -9,11 +9,18 @@
package
de
.
appplant
.
cordova
.
plugin
;
import
java.util.Calendar
;
import
java.util.Map
;
import
java.util.Set
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
android.content.Intent
;
import
android.content.Context
;
import
android.app.AlarmManager
;
import
android.app.PendingIntent
;
import
android.content.SharedPreferences
;
import
android.content.SharedPreferences.Editor
;
...
...
@@ -30,12 +37,6 @@ public class LocalNotification extends CordovaPlugin {
public
static
final
String
PLUGIN_NAME
=
"LocalNotification"
;
/**
* Delegate object that does the actual alarm registration. Is reused by the
* AlarmRestoreOnBoot class.
*/
private
AlarmHelper
alarm
=
null
;
@Override
public
boolean
execute
(
String
action
,
JSONArray
args
,
CallbackContext
callbackContext
)
throws
JSONException
{
JSONObject
arguments
=
args
.
getJSONObject
(
0
);
...
...
@@ -45,8 +46,6 @@ public class LocalNotification extends CordovaPlugin {
String
alarmId
=
options
.
getNotificationId
();
alarm
=
new
AlarmHelper
(
cordova
.
getActivity
());
if
(
action
.
equalsIgnoreCase
(
"add"
))
{
persist
(
alarmId
,
args
);
add
(
options
);
...
...
@@ -76,21 +75,34 @@ public class LocalNotification extends CordovaPlugin {
/**
* Set an alarm
*
* @param repeatDaily
* If true, the alarm interval will be set to one day.
* @param title
* The title of the alarm as shown in the Android notification
* panel
* @param subTitle
* The subtitle of the alarm
* @param alarmId
* The unique ID of the notification
* @param calender
* A calendar object that represents the time at which the alarm
* should first be started
* @param options
* The options that can be specified per alarm.
*/
public
void
add
(
LocalNotificationOptions
options
)
{
alarm
.
add
(
options
);
Calendar
calendar
=
options
.
getCalendar
();
long
triggerTime
=
calendar
.
getTimeInMillis
();
int
hour
=
calendar
.
get
(
Calendar
.
HOUR_OF_DAY
);
int
min
=
calendar
.
get
(
Calendar
.
MINUTE
);
Intent
intent
=
new
Intent
(
cordova
.
getActivity
(),
AlarmReceiver
.
class
);
intent
.
setAction
(
""
+
options
.
getNotificationId
());
intent
.
putExtra
(
AlarmReceiver
.
TITLE
,
options
.
getTitle
());
intent
.
putExtra
(
AlarmReceiver
.
SUBTITLE
,
options
.
getSubTitle
());
intent
.
putExtra
(
AlarmReceiver
.
TICKER_TEXT
,
options
.
getTicker
());
intent
.
putExtra
(
AlarmReceiver
.
NOTIFICATION_ID
,
options
.
getNotificationId
());
intent
.
putExtra
(
AlarmReceiver
.
HOUR_OF_DAY
,
hour
);
intent
.
putExtra
(
AlarmReceiver
.
MINUTE
,
min
);
PendingIntent
sender
=
PendingIntent
.
getBroadcast
(
cordova
.
getActivity
(),
0
,
intent
,
PendingIntent
.
FLAG_CANCEL_CURRENT
);
/* Get the AlarmManager service */
AlarmManager
am
=
getAlarmManager
();
if
(
options
.
isRepeatDaily
())
{
am
.
setRepeating
(
AlarmManager
.
RTC_WAKEUP
,
triggerTime
,
AlarmManager
.
INTERVAL_DAY
,
sender
);
}
else
{
am
.
set
(
AlarmManager
.
RTC_WAKEUP
,
triggerTime
,
sender
);
}
}
/**
...
...
@@ -101,22 +113,40 @@ public class LocalNotification extends CordovaPlugin {
* registered using add()
*/
public
void
cancel
(
String
notificationId
)
{
alarm
.
cancel
(
notificationId
);
/*
* Create an intent that looks similar, to the one that was registered
* using add. 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.
*/
Intent
intent
=
new
Intent
(
cordova
.
getActivity
(),
AlarmReceiver
.
class
);
intent
.
setAction
(
""
+
notificationId
);
PendingIntent
pi
=
PendingIntent
.
getBroadcast
(
cordova
.
getActivity
(),
0
,
intent
,
PendingIntent
.
FLAG_CANCEL_CURRENT
);
AlarmManager
am
=
getAlarmManager
();
try
{
am
.
cancel
(
pi
);
}
catch
(
Exception
e
)
{}
}
/**
* Cancel all notifications that were created by this plugin.
*
* Android can only unregister a specific alarm. There is no such thing
* as cancelAll. Therefore we rely on the Shared Preferences which holds
* all our alarms to loop through these alarms and unregister them one
* by one.
*/
public
void
cancelAll
()
{
/*
* Android can only unregister a specific alarm. There is no such thing
* as cancelAll. Therefore we rely on the Shared Preferences which holds
* all our alarms to loop through these alarms and unregister them one
* by one.
*/
SharedPreferences
settings
=
cordova
.
getActivity
().
getSharedPreferences
(
PLUGIN_NAME
,
Context
.
MODE_PRIVATE
);
Map
<
String
,
?>
alarms
=
settings
.
getAll
();
Set
<
String
>
alarmIds
=
alarms
.
keySet
();
alarm
.
cancelAll
(
settings
);
for
(
String
alarmId
:
alarmIds
)
{
cancel
(
alarmId
);
}
}
/**
...
...
@@ -124,17 +154,13 @@ public class LocalNotification extends CordovaPlugin {
* This will allow the application to restore the alarm upon device reboot.
* Also this is used by the cancelAll method.
*
* @see #cancelAllNotifications()
*
* @param optionsArr
* @param args
* The assumption is that parse has been called already.
*
* @return true when successfull, otherwise false
*/
private
void
persist
(
String
alarmId
,
JSONArray
optionsArr
)
{
private
void
persist
(
String
alarmId
,
JSONArray
args
)
{
Editor
editor
=
cordova
.
getActivity
().
getSharedPreferences
(
PLUGIN_NAME
,
Context
.
MODE_PRIVATE
).
edit
();
editor
.
putString
(
alarmId
,
optionsArr
.
toString
());
editor
.
putString
(
alarmId
,
args
.
toString
());
editor
.
commit
();
}
...
...
@@ -160,4 +186,8 @@ public class LocalNotification extends CordovaPlugin {
editor
.
clear
();
editor
.
commit
();
}
private
AlarmManager
getAlarmManager
()
{
return
(
AlarmManager
)
cordova
.
getActivity
().
getSystemService
(
Context
.
ALARM_SERVICE
);
}
}
\ No newline at end of file
src/android/LocalNotificationOptions.java
View file @
52aa742a
...
...
@@ -21,7 +21,7 @@ public class LocalNotificationOptions {
/*
* Options that can be set when this plugin is invoked
*/
private
Calendar
calend
e
r
=
Calendar
.
getInstance
();
private
Calendar
calend
a
r
=
Calendar
.
getInstance
();
private
String
title
=
""
;
private
String
subTitle
=
""
;
private
String
ticker
=
""
;
...
...
@@ -45,7 +45,7 @@ public class LocalNotificationOptions {
int
hour
=
Integer
.
parseInt
(
dateParts
[
3
]);
int
min
=
Integer
.
parseInt
(
dateParts
[
4
]);
calend
e
r
.
set
(
year
,
month
,
day
,
hour
,
min
);
calend
a
r
.
set
(
year
,
month
,
day
,
hour
,
min
);
}
if
(!
""
.
equals
(
message
))
{
...
...
@@ -65,8 +65,8 @@ public class LocalNotificationOptions {
/**
* Gibt den Kalender mit dem Datum der nächsten Notification an.
*/
public
Calendar
getCalend
e
r
()
{
return
calend
e
r
;
public
Calendar
getCalend
a
r
()
{
return
calend
a
r
;
}
/**
...
...
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