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
fc41c7d0
Commit
fc41c7d0
authored
Feb 20, 2018
by
Sebastián Katzer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Internal changes related with action groups
parent
ca137432
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
186 additions
and
137 deletions
+186
-137
plugin.xml
plugin.xml
+3
-0
LocalNotification.java
src/android/LocalNotification.java
+4
-3
Options.java
src/android/notification/Options.java
+1
-1
ActionGroup.java
src/android/notification/action/ActionGroup.java
+15
-18
APPLocalNotification.m
src/ios/APPLocalNotification.m
+8
-9
APPNotificationCategory.h
src/ios/APPNotificationCategory.h
+28
-0
APPNotificationCategory.m
src/ios/APPNotificationCategory.m
+111
-0
APPNotificationContent.h
src/ios/APPNotificationContent.h
+0
-1
APPNotificationContent.m
src/ios/APPNotificationContent.m
+0
-19
APPNotificationOptions.h
src/ios/APPNotificationOptions.h
+0
-1
APPNotificationOptions.m
src/ios/APPNotificationOptions.m
+12
-80
LocalNotificationProxy.js
src/windows/LocalNotificationProxy.js
+3
-3
local-notification.js
www/local-notification.js
+1
-2
No files found.
plugin.xml
View file @
fc41c7d0
...
...
@@ -72,6 +72,9 @@
<header-file
src=
"src/ios/APPLocalNotification.h"
/>
<source-file
src=
"src/ios/APPLocalNotification.m"
/>
<header-file
src=
"src/ios/APPNotificationCategory.h"
/>
<source-file
src=
"src/ios/APPNotificationCategory.m"
/>
<header-file
src=
"src/ios/APPNotificationContent.h"
/>
<source-file
src=
"src/ios/APPNotificationContent.m"
/>
...
...
src/android/LocalNotification.java
View file @
fc41c7d0
...
...
@@ -232,12 +232,13 @@ public class LocalNotification extends CordovaPlugin {
private
void
actions
(
JSONArray
args
,
CallbackContext
command
)
{
int
task
=
args
.
optInt
(
0
);
String
id
=
args
.
optString
(
1
);
JSONObject
spec
=
args
.
optJSONObject
(
2
);
JSONArray
list
=
args
.
optJSONArray
(
2
);
Context
context
=
cordova
.
getActivity
();
switch
(
task
)
{
case
0
:
ActionGroup
group
=
ActionGroup
.
parse
(
co
rdova
.
getActivity
(),
spec
);
if
(
group
!=
null
)
ActionGroup
.
register
(
group
);
ActionGroup
group
=
ActionGroup
.
parse
(
co
ntext
,
id
,
list
);
ActionGroup
.
register
(
group
);
command
.
success
();
break
;
case
1
:
...
...
src/android/notification/Options.java
View file @
fc41c7d0
...
...
@@ -612,7 +612,7 @@ public final class Options {
group
=
ActionGroup
.
lookup
(
groupId
);
}
else
if
(
actions
!=
null
&&
actions
.
length
()
>
0
)
{
group
=
ActionGroup
.
parse
(
context
,
op
tions
);
group
=
ActionGroup
.
parse
(
context
,
ac
tions
);
}
return
(
group
!=
null
)
?
group
.
getActions
()
:
null
;
...
...
src/android/notification/action/ActionGroup.java
View file @
fc41c7d0
...
...
@@ -37,12 +37,8 @@ import static android.os.Build.VERSION_CODES.N;
public
final
class
ActionGroup
{
// Default action group id
private
static
final
String
GENERAL_ACTION_GROUP
=
"DEFAULT_GROUP"
;
// Saves all groups for later lookup.
private
static
final
Map
<
String
,
ActionGroup
>
groups
=
new
HashMap
<
String
,
ActionGroup
>();
private
static
final
Map
<
String
,
ActionGroup
>
groups
=
new
HashMap
<
String
,
ActionGroup
>();
// The ID of the action group.
private
final
String
id
;
...
...
@@ -67,9 +63,7 @@ public final class ActionGroup {
* @param group The action group to register.
*/
public
static
void
register
(
ActionGroup
group
)
{
if
(!
group
.
getId
().
equalsIgnoreCase
(
GENERAL_ACTION_GROUP
))
{
groups
.
put
(
group
.
getId
(),
group
);
}
groups
.
put
(
group
.
getId
(),
group
);
}
/**
...
...
@@ -93,17 +87,23 @@ public final class ActionGroup {
/**
* Creates an action group by parsing the specified action specs.
*
* @param
spec The action group spec containing the id and
list of actions.
* @param
list The
list of actions.
*
* @return A new action group.
*/
public
static
ActionGroup
parse
(
Context
context
,
JSONObject
spec
)
{
String
id
=
spec
.
optString
(
"actionGroupId"
,
GENERAL_ACTION_GROUP
);
JSONArray
list
=
spec
.
optJSONArray
(
"actions"
);
if
(
list
==
null
||
list
.
length
()
==
0
)
return
null
;
public
static
ActionGroup
parse
(
Context
context
,
JSONArray
list
)
{
return
parse
(
context
,
null
,
list
);
}
/**
* Creates an action group by parsing the specified action specs.
*
* @param id The id for the action group.
* @param list The list of actions.
*
* @return A new action group.
*/
public
static
ActionGroup
parse
(
Context
context
,
String
id
,
JSONArray
list
)
{
List
<
Action
>
actions
=
new
ArrayList
<
Action
>(
list
.
length
());
for
(
int
i
=
0
;
i
<
list
.
length
();
i
++)
{
...
...
@@ -123,9 +123,6 @@ public final class ActionGroup {
actions
.
add
(
new
Action
(
context
,
opts
));
}
if
(
actions
.
isEmpty
())
return
null
;
return
new
ActionGroup
(
id
,
actions
.
toArray
(
new
Action
[
actions
.
size
()]));
}
...
...
src/ios/APPLocalNotification.m
View file @
fc41c7d0
...
...
@@ -20,10 +20,11 @@
*/
#import "APPLocalNotification.h"
#import "APPNotificationContent.h"
#import "APPNotificationOptions.h"
#import "APPNotificationCategory.h"
#import "UNUserNotificationCenter+APPLocalNotification.h"
#import "UNNotificationRequest+APPLocalNotification.h"
#import "APPNotificationContent.h"
@interface
APPLocalNotification
()
...
...
@@ -398,18 +399,16 @@ UNNotificationPresentationOptions const OptionAlert = UNNotificationPresentation
-
(
void
)
actions
:(
CDVInvokedUrlCommand
*
)
command
{
[
self
.
commandDelegate
runInBackground
:
^
{
int
code
=
[
command
.
arguments
[
0
]
intValue
];
NSString
*
identifier
=
[
command
argumentAtIndex
:
1
];
NS
Dictionary
*
options
=
[
command
argumentAtIndex
:
2
];
APPNotificationContent
*
notification
;
int
code
=
[
command
.
arguments
[
0
]
intValue
];
NSString
*
identifier
=
[
command
argumentAtIndex
:
1
];
NS
Array
*
actions
=
[
command
argumentAtIndex
:
2
];
UNNotificationCategory
*
group
;
BOOL
found
;
switch
(
code
)
{
case
0
:
notification
=
[[
APPNotificationContent
alloc
]
initWithOptions
:
options
];
[
_center
addActionGroup
:
notification
.
category
];
group
=
[
APPNotificationCategory
parse
:
actions
withId
:
identifier
];
[
_center
addActionGroup
:
group
];
[
self
execCallback
:
command
];
break
;
case
1
:
...
...
src/ios/APPNotificationCategory.h
0 → 100644
View file @
fc41c7d0
/*
* Apache 2.0 License
*
* Copyright (c) Sebastian Katzer 2017
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apache License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://opensource.org/licenses/Apache-2.0/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*/
@import
UserNotifications
;
@interface
APPNotificationCategory
:
NSObject
+
(
UNNotificationCategory
*
)
parse
:(
NSArray
*
)
list
withId
:(
NSString
*
)
groupId
;
@end
src/ios/APPNotificationCategory.m
0 → 100644
View file @
fc41c7d0
/*
* Apache 2.0 License
*
* Copyright (c) Sebastian Katzer 2017
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apache License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://opensource.org/licenses/Apache-2.0/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*/
#import "APPNotificationCategory.h"
@import
UserNotifications
;
@implementation
APPNotificationCategory
:
NSObject
#pragma mark -
#pragma mark Public
/**
* Parse the provided spec map into an action group.
*
* @param [ NSDictionary* ] spec A key-value property map.
* Must contain an id and a list of actions.
*
* @return [ UNNotificationCategory* ]
*/
+
(
UNNotificationCategory
*
)
parse
:(
NSArray
*
)
list
withId
:(
NSString
*
)
groupId
{
NSArray
*
actions
=
[
self
parseActions
:
list
];
return
[
UNNotificationCategory
categoryWithIdentifier
:
groupId
actions
:
actions
intentIdentifiers:
@[]
options:
UNNotificationCategoryOptionCustomDismissAction
];
}
#pragma mark -
#pragma mark Private
/**
* The actions of the action group.
*
* @return [ NSArray* ]
*/
+
(
NSArray
<
UNNotificationAction
*>
*
)
parseActions
:(
NSArray
*
)
items
{
NSMutableArray
*
actions
=
[[
NSMutableArray
alloc
]
init
];
for
(
NSDictionary
*
item
in
items
)
{
NSString
*
id
=
item
[
@"id"
];
NSString
*
title
=
item
[
@"title"
];
NSString
*
type
=
item
[
@"type"
];
UNNotificationActionOptions
options
=
UNNotificationActionOptionNone
;
UNNotificationAction
*
action
;
if
([
item
[
@"launch"
]
boolValue
])
{
options
=
UNNotificationActionOptionForeground
;
}
if
([
item
[
@"ui"
]
isEqualToString
:
@"decline"
])
{
options
=
options
|
UNNotificationActionOptionDestructive
;
}
if
([
item
[
@"needsAuth"
]
boolValue
])
{
options
=
options
|
UNNotificationActionOptionAuthenticationRequired
;
}
if
([
type
isEqualToString
:
@"input"
])
{
NSString
*
submitTitle
=
item
[
@"submitTitle"
];
NSString
*
placeholder
=
item
[
@"emptyText"
];
if
(
!
submitTitle
.
length
)
{
submitTitle
=
@"Submit"
;
}
action
=
[
UNTextInputNotificationAction
actionWithIdentifier
:
id
title
:
title
options:
options
textInputButtonTitle:
submitTitle
textInputPlaceholder:
placeholder
];
}
else
if
(
!
type
.
length
||
[
type
isEqualToString
:
@"button"
])
{
action
=
[
UNNotificationAction
actionWithIdentifier
:
id
title
:
title
options:
options
];
}
else
{
NSLog
(
@"Unknown action type: %@"
,
type
);
}
if
(
action
)
{
[
actions
addObject
:
action
];
}
}
return
actions
;
}
@end
src/ios/APPNotificationContent.h
View file @
fc41c7d0
...
...
@@ -28,6 +28,5 @@
-
(
id
)
initWithOptions
:(
NSDictionary
*
)
dict
;
-
(
APPNotificationOptions
*
)
options
;
-
(
UNNotificationRequest
*
)
request
;
-
(
UNNotificationCategory
*
)
category
;
@end
src/ios/APPNotificationContent.m
View file @
fc41c7d0
...
...
@@ -104,25 +104,6 @@ static char optionsKey;
trigger
:
opts
.
trigger
];
}
/**
* The category for the notification with all the actions.
*
* @return [ UNNotificationCategory* ]
*/
-
(
UNNotificationCategory
*
)
category
{
NSString
*
categoryId
=
self
.
categoryIdentifier
;
NSArray
*
actions
=
self
.
options
.
actions
;
if
(
!
actions
.
count
)
return
NULL
;
return
[
UNNotificationCategory
categoryWithIdentifier
:
categoryId
actions
:
actions
intentIdentifiers
:
@[]
options
:
UNNotificationCategoryOptionCustomDismissAction
];
}
#pragma mark -
#pragma mark Private
...
...
src/ios/APPNotificationOptions.h
View file @
fc41c7d0
...
...
@@ -34,7 +34,6 @@
@property
(
readonly
,
getter
=
priority
)
int
priority
;
@property
(
readonly
,
getter
=
sound
)
UNNotificationSound
*
sound
;
@property
(
readonly
,
getter
=
userInfo
)
NSDictionary
*
userInfo
;
@property
(
readonly
,
getter
=
actions
)
NSArray
<
UNNotificationAction
*>*
actions
;
@property
(
readonly
,
getter
=
attachments
)
NSArray
<
UNNotificationAttachment
*>*
attachments
;
-
(
id
)
initWithDict
:(
NSDictionary
*
)
dict
;
...
...
src/ios/APPNotificationOptions.m
View file @
fc41c7d0
...
...
@@ -67,7 +67,7 @@ static NSInteger WEEKDAYS[8] = { 0, 2, 3, 4, 5, 6, 7, 1 };
*/
-
(
NSNumber
*
)
id
{
NSInteger
id
=
[
[
dict
objectForKey
:
@"id"
]
integerValue
];
NSInteger
id
=
[
dict
[
@"id"
]
integerValue
];
return
[
NSNumber
numberWithInteger
:
id
];
}
...
...
@@ -89,7 +89,7 @@ static NSInteger WEEKDAYS[8] = { 0, 2, 3, 4, 5, 6, 7, 1 };
*/
-
(
NSString
*
)
title
{
return
[
dict
objectForKey
:
@"title"
];
return
dict
[
@"title"
];
}
/**
...
...
@@ -111,7 +111,7 @@ static NSInteger WEEKDAYS[8] = { 0, 2, 3, 4, 5, 6, 7, 1 };
*/
-
(
NSString
*
)
text
{
return
[
dict
objectForKey
:
@"text"
];
return
dict
[
@"text"
];
}
/**
...
...
@@ -121,7 +121,7 @@ static NSInteger WEEKDAYS[8] = { 0, 2, 3, 4, 5, 6, 7, 1 };
*/
-
(
BOOL
)
silent
{
return
[
[
dict
objectForKey
:
@"silent"
]
boolValue
];
return
[
dict
[
@"silent"
]
boolValue
];
}
/**
...
...
@@ -131,7 +131,7 @@ static NSInteger WEEKDAYS[8] = { 0, 2, 3, 4, 5, 6, 7, 1 };
*/
-
(
int
)
priority
{
return
[
[
dict
objectForKey
:
@"priority"
]
intValue
];
return
[
dict
[
@"priority"
]
intValue
];
}
/**
...
...
@@ -141,7 +141,7 @@ static NSInteger WEEKDAYS[8] = { 0, 2, 3, 4, 5, 6, 7, 1 };
*/
-
(
NSNumber
*
)
badge
{
id
value
=
[
dict
objectForKey
:
@"badge"
];
id
value
=
dict
[
@"badge"
];
return
(
value
==
NULL
)
?
NULL
:
[
NSNumber
numberWithInt
:[
value
intValue
]];
}
...
...
@@ -153,14 +153,9 @@ static NSInteger WEEKDAYS[8] = { 0, 2, 3, 4, 5, 6, 7, 1 };
*/
-
(
NSString
*
)
actionGroupId
{
id
actions
=
[
dict
objectForKey
:
@"actions"
];
id
actions
=
dict
[
@"actions"
];
if
([
actions
isKindOfClass
:
NSString
.
class
])
return
actions
;
NSString
*
value
=
[
dict
objectForKey
:
@"actionGroupId"
];
return
value
.
length
?
value
:
kAPPGeneralCategory
;
return
([
actions
isKindOfClass
:
NSString
.
class
])
?
actions
:
kAPPGeneralCategory
;
}
/**
...
...
@@ -170,7 +165,7 @@ static NSInteger WEEKDAYS[8] = { 0, 2, 3, 4, 5, 6, 7, 1 };
*/
-
(
UNNotificationSound
*
)
sound
{
NSString
*
path
=
[
dict
objectForKey
:
@"sound"
];
NSString
*
path
=
dict
[
@"sound"
];
NSString
*
file
;
if
([
path
isKindOfClass
:
NSNumber
.
class
])
{
...
...
@@ -198,7 +193,7 @@ static NSInteger WEEKDAYS[8] = { 0, 2, 3, 4, 5, 6, 7, 1 };
*/
-
(
NSArray
<
UNNotificationAttachment
*>
*
)
attachments
{
NSArray
*
paths
=
[
dict
objectForKey
:
@"attachments"
];
NSArray
*
paths
=
dict
[
@"attachments"
];
NSMutableArray
*
attachments
=
[[
NSMutableArray
alloc
]
init
];
if
(
!
paths
)
...
...
@@ -221,69 +216,6 @@ static NSInteger WEEKDAYS[8] = { 0, 2, 3, 4, 5, 6, 7, 1 };
return
attachments
;
}
/**
* Additional actions for the notification.
*
* @return [ NSArray* ]
*/
-
(
NSArray
<
UNNotificationAction
*>
*
)
actions
{
NSArray
*
items
=
[
dict
objectForKey
:
@"actions"
];
NSMutableArray
*
actions
=
[[
NSMutableArray
alloc
]
init
];
if
(
!
items
)
return
actions
;
for
(
NSDictionary
*
item
in
items
)
{
NSString
*
id
=
[
item
objectForKey
:
@"id"
];
NSString
*
title
=
[
item
objectForKey
:
@"title"
];
NSString
*
type
=
[
item
objectForKey
:
@"type"
];
UNNotificationActionOptions
options
=
UNNotificationActionOptionNone
;
UNNotificationAction
*
action
;
if
([[
item
objectForKey
:
@"launch"
]
boolValue
])
{
options
=
UNNotificationActionOptionForeground
;
}
if
([[
item
objectForKey
:
@"ui"
]
isEqualToString
:
@"decline"
])
{
options
=
options
|
UNNotificationActionOptionDestructive
;
}
if
([[
item
objectForKey
:
@"needsAuth"
]
boolValue
])
{
options
=
options
|
UNNotificationActionOptionAuthenticationRequired
;
}
if
([
type
isEqualToString
:
@"input"
])
{
NSString
*
submitTitle
=
[
item
objectForKey
:
@"submitTitle"
];
NSString
*
placeholder
=
[
item
objectForKey
:
@"emptyText"
];
if
(
!
submitTitle
.
length
)
{
submitTitle
=
@"Submit"
;
}
action
=
[
UNTextInputNotificationAction
actionWithIdentifier
:
id
title
:
title
options
:
options
textInputButtonTitle
:
submitTitle
textInputPlaceholder
:
placeholder
];
}
else
if
(
!
type
.
length
||
[
type
isEqualToString
:
@"button"
])
{
action
=
[
UNNotificationAction
actionWithIdentifier
:
id
title
:
title
options
:
options
];
}
else
{
NSLog
(
@"Unknown action type: %@"
,
type
);
}
if
(
action
)
{
[
actions
addObject
:
action
];
}
}
return
actions
;
}
#pragma mark -
#pragma mark Public
...
...
@@ -315,7 +247,7 @@ static NSInteger WEEKDAYS[8] = { 0, 2, 3, 4, 5, 6, 7, 1 };
*/
-
(
NSDictionary
*
)
userInfo
{
if
(
[
dict
objectForKey
:
@"updatedAt"
])
{
if
(
dict
[
@"updatedAt"
])
{
NSMutableDictionary
*
data
=
[
dict
mutableCopy
];
[
data
removeObjectForKey
:
@"updatedAt"
];
...
...
@@ -331,7 +263,7 @@ static NSInteger WEEKDAYS[8] = { 0, 2, 3, 4, 5, 6, 7, 1 };
-
(
id
)
valueForTriggerOption
:
(
NSString
*
)
key
{
return
[[
dict
objectForKey
:
@"trigger"
]
objectForKey
:
key
];
return
dict
[
@"trigger"
][
key
];
}
/**
...
...
src/windows/LocalNotificationProxy.js
View file @
fc41c7d0
...
...
@@ -271,12 +271,12 @@ exports.actions = function (success, error, args) {
code
=
args
[
0
],
id
=
args
[
1
],
res
=
[],
opts
,
group
;
list
,
group
;
switch
(
code
)
{
case
0
:
opts
=
exports
.
parseOptions
(
args
[
2
]
);
group
=
new
ActionGroup
(
id
,
opts
.
actions
);
list
=
exports
.
parseActions
({
actions
:
args
[
2
]
}
);
group
=
new
ActionGroup
(
id
,
list
);
ActionGroup
.
register
(
group
);
break
;
...
...
www/local-notification.js
View file @
fc41c7d0
...
...
@@ -393,8 +393,7 @@ exports.getTriggered = function (callback, scope) {
* @return [ Void ]
*/
exports
.
addActions
=
function
(
id
,
actions
,
callback
,
scope
)
{
var
config
=
{
actionGroupId
:
id
,
actions
:
actions
};
this
.
_exec
(
'actions'
,
[
0
,
id
,
config
],
callback
,
scope
);
this
.
_exec
(
'actions'
,
[
0
,
id
,
actions
],
callback
,
scope
);
};
/**
...
...
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