iNotifyEx is the successor of GriP that will replace the CFMessagePort-based backend with MIG subsystem for higher performance and robustness.
(The Objective-C based GriP front-end will still be kept.)
As a redesign, iNotifyEx shall have characteristics of following APIs:
- Growl-like notifications
- Android-like notifications
- Some GriP-specific addition
- Some iNotifyEx-specific addition
Growl-like notification API has the following characteristics:
- The user has the ultimate decision how the notifications be presented.
- Tickets (per-app settings) and priority (per-message-group settings).
- Coalition.
- Target-action pattern for server reply.
- How the notification should be shown is abstracted out as a theme.
Android-like notification API has the following characteristics:
- Actions are sent together with the notification as a PendingIntent.
- Ticker text.
- The view is customizable via contentView.
GriP-specific additions are:
- Suspension behavior, i.e. lock screen mode and game mode.
- GriP Modal Table View.
iNotifyEx-specific additions currently include:
- Multiple buttons (actions) in a notification
- Sub-notification grouping using coalescent ID.
There are some contradictions between the APIs. In particular, the developer-oriented contentView is mutually exclusive with the user-oriented theme capability. However, as setLatestEventInfo seems more common, contentView is a less important feature. As a result, iNotifyEx will send the following in notification packet:
- Ticket (Growl).
- Message name (Growl).
- Title (Growl; Android — 1st line of tickerText and contentTitle)
- Subtitle (Android — contentText in setLatestEventInfo ).
- Detail
- Icon (≥29x29.)
- Priority (Growl), Sticky (Growl).
- Coalescent ID (Growl)
- Confirm action (Android ~ contentIntent)
- Ignore action (Android ~ deleteIntent)
- Multi-buttons (as arrays of Button title / Remote action pairs)
- Super-notification title, subtitle, icon. (meaningful only when Coalescent ID is not null.)
(The super-notification priority and sticky will be taken as the maximum of those of all sub-notifications. Confirming and ignoring a super-notification is equivalent to doing so on all sub-notifications)
Remote Actions
The actions will be executed remotely. These remote actions will be represented as strings in the form
- module::action arg1 arg2 arg3 ...
If the
module:: part is missing, iNotifyEx will assume the module is
std. These modules, called
Action Providers shall reside in
/Library/Application Support/iNotifyEx/Action Providers/module.dylib. The remote action should be implemented as a C function with prototype
- extern void action(CFArrayRef argv);
Each argument of
argv must be a CFString, and the 0th element is that
module::action.
Arguments are space separated but parenthesis-balanced. That means
- foo bar (baz [blah 42] hello) world "abc def"
will be considered having 5 arguments (foo,
bar,
(baz [blah 42] hello),
world,
abc def).
Note: argv will be autoreleased after the function ends. Retain it if you want to use it later.
Standard remote actions include:
- open_url url
- launch displayID [remoteNotificationUserInfo]
- darwin_notification notificationName
- distributed_message centerName messageName [userInfo]
- notification messageName [userInfo] [objectPointer]
- sequence action1 action2 action3 ...
- confirm action confirmTitle [message] [ normal | destructive ]
Theming
http://twitpic.com/ne1vq
Raw Theme API
Currently only 1 function is needed.
- extern void INXShowNotification(CFBundleRef thisBundle, CFStringRef title, CFStringRef subtitle, CFDataRef detail, CFTypeRef icon, int priority, bool sticky, CFStringRef coal_id, CFStringRef super_title, CFStringRef super_subtitle, CFStringRef super_icon);
Should be a bundle as $INXROOT/Themes/myTheme.theme.
Activation
Depends on libactivator to avoid reinventing the wheel :)
<!--
Simple theme
Theming using only images.
Also a bundle as $INXROOT/Themes/myTheme.theme. But Info.plist should contain the INXSimpleTheme dictionary key.
(INXRect t -> {t.x = ?, t.y = ?, t.w = ?, t.h = ?}. ? can be like 240 or 50%.) (INXFont t -> {t.name = ?, t.size = ?}.) (INXColor t -> "#AABBCC")
(INXLabel t -> {INXRect t.frame; INXFont t.font; INXColor t.color; }) (INXImage t -> {filename t.up; filename t.down; }) (INXStretchableImage t -> {INXImage t; INXPoint t.stretch; INXColor t.color; })
Keys of INXSimpleTheme:
- bool minimized.enabled;
- INXRect minimized.frame;
- INXRect minimized.icon.frame;
- INXLabel minimized.title.frame;
- string minimized.transition.style;
- real minimized.transition.duration;
- string minimized.normalization.gesture;
- INXRect content.frame; // x, y ignored here.
- INXRect content.icon.frame;
- INXLabel content.title;
- INXLabel content.subtitle;
- INXLabel content.timestamp;
- INXStretchableImage content.background;
- INXImage content.disclosure.image;
- INXRect content.disclosure.frame;
- INXStretchableImage button.background;
- INXFont button.font;
- INXColor button.color;
- INXStretchableImage selection.background;
-->
cool!! that sounds awesome KennyTM!!
sounds good, GRIP is in a desperate need for bug fixes/an upgrade. Hope to see this ASAP.
When will it be avaiable?
Yeah when will it be available? Lokking forward to it! i hoe very soon!...Thx kenny, you are a coding poet man!
Ready to beta test it and give plenty of feedback :)
this is fantastic! exactly what I (and the iPhone) need!
Can't wait for this, checking back periodically in eager anticipation! Go Kenny!
I'm another beta tester ready as well. Still a Grip user until I have a successor to try.
we should have a wave for this :)
Count me in too
I made a Wave for this :) https://wave.google.com/wave/?pli=1#restored:wave:googlewave.com!w%252BMchyBIe-B
let´s surf it :)
Grip (iNotifyEx) and LockInfo? is the main reason I like my Iphone more than any android/nokia/SE/... Thanx for this!
Grip was a great idea but I had too many safe mode crashes for it to be useful. I hope that this new version will be more stable and useful. We all know the iPhone is seriously lacking in a good notification system.
I just hope that it is released soon.
i gave GriP a try and it is probably my favorite thing that can be done on a jailbroken iPhone. the iPhones original notification system is a absolute mess and GriP greatly improved upon it! I can't wait to see iNotifyEx will be like.
Glad to see you actively working on this KennyTM!
I know it's pestering, but any update to give us Sir Kenneth? Have designs been translated to code yet...
he updated this page tonight...
Yep..looks like he's been doing some work on the window view :D
Why all the 'X' boxes all over the design doc? Slide to dismiss is the only way you should go; this is an iPhone after all.
the x boxes are for the growl style notifications...maybe on android style, slide to dismiss is available
Any idea when we can see a release for this?
Ooooh I want!!! I love grip and this would just be the pinnacle
when are we going to see this on our phones? Im dying for it!
Seeing as he's still updating aspects of the design I wouldn't count on getting a working version of this before Christmas
yeah it's probably gonna be ready till next year, but it doesn't matter kuz I know it's gonna be worth it!!!!
Looking forward to seeing this app on my iPhone!!
I am liking the look of this. I liked grip but thought it was missing something - this could be it. It's maybe a bit early for requests (or maybe better to design them in early on) but, can you make it so that when an SMS is recieved the app that opens is customisable, so that this can be used with bitesms.
Cheers
Will inotifyex play nicely with music controls (from Phoenix3200 - BigBoss? repo)?
Yip, the one thing that grip is missing for me, is the "you've got mail" type interface when you receive a new sms. Or even by just clicking sms notification it opens the default message app (not always the apple message app).
Damn my phone needs this!!!!
Will inotifyex be able to control/modify the badge count of any app? The native push system can and as any cydia app can be given any privileges even root, there's no reason it can't. I think it will need to be able to do this. Is there any ETA yet on when it will be available?
@leeflemingster, why would it need to alter the badge count? iNotify will only intercept the display popup, the push notification will still end up telling the relevant application the specific details which means the application will then update the badge number
It would be good if it can alter the badge count like bitesms does, because if I get a text message (or an IM from beejive) if I read a preview of the message there are the 3 possible actions I want to take. 1. Reply immediately. Grip done this by touching the notification 2. Reply later. With Grip you could do this by ignoring the notification and letting it fade (or cancel it with the 'x'). Then the next time you see your springboard you will be reminded about the message you were going send (if you'd forgotten about it) 3. The message does not need a reply. Grip could not handle this case in a way I liked. If you ignore the notification you are left with a badge you do not want and have to open and close the app at some point to clear it. Or you touch the notification and then close the app just to clear the badge. Bitesms does have a mechanism to do this.
Cheers
No progress :(
Anything :D
Pooor :-(
There´s something else coming :)
http://mobilegeekdom.blogspot.com/2010/02/forget-inotifyex-notified-is-coming.html
COME ON ANYTHING?!?