Evolve the Android notification experience of existing apps, with community-driven plug-ins.

Overview

Get it on Google Play

About

Nevolution is an open platform for Android to evolve the notification experience of existing apps, in a creative developer-independent way via community-driven plug-ins, without the direct involvement of the original app developer.

Background

Android supports a highly rich notification experience, and the feature set has expanded in almost every major Android version. Unfortunately, most apps in the wild only use a small set of the capabilities in their notifications, rendering them less elegant, functionality lacking and even ugly on your modern Android devices.

If you use an Google Wear OS smart watch or Android Auto powered car, it's extremely disappointing that many of your favorite apps do not provide friendly integration with them.

The Nevolution community is proactively changing the philosophy behind notifications and aims to set an example of great user experience.

Developer Community

Nevolution is currently in beta stage and open to public. Since the end-user experience largely depends on the richness of 3rd-party plug-ins, we sincerely welcome developers to join our developer community, to build various generic or app-specific plug-ins and a more powerful Nevolution platform together.

Developing a simple plug-in for Nevolution with our developer-friendly SDK is even easier than writing a tiny app. With a creative idea in your mind, just one or two hours of coding is enough to build a working plug-in. The code of sample plug-ins already shows how easy writing a plug-in could be.

We are devoted to working with the developer community to build high quality plug-ins and improve Nevolution. So developers are the most important roles to build a healthy community.

Discussion goes to the Telegram Group (for developers), while issues and formal feature request should be posted on the GitHub for better tracking.

Developers are suggested to join the BETA CHANNEL for the fast iteration on new features and APIs.

How Does Nevolution Work

Nevolution consists of one platform app and many third party plug-in apps. A plug-in is not necessarily just a single-purpose app, it can bundle several plug-ins, or be part of a regular app.

Currently the only supported plug-in type is "decorator", which receives notification and makes necessary tweaks on the fly. All decorators enabled by user work together in a pipeline to decorate any incoming notification.

A decorator plug-in is essentially a regular exported Android service component declared with an intent-filter recognized by Nevolution platform.

Nevolution does not require root, but root-capable features are being considered.

Get Started

Clone any of the sample decorator repos to start developing new plug-in for Nevolution, or fork this repo to contribute to the SDK. And yes, the official plug-ins hosted in this organization are also open for contributions.

Build and install your plug-in app on the device, Nevolution will recognize it and let you activate it for the selected app right away.

Head to wiki page for more details: Decorator Plug-in Development

Comments
  • MIUI每次重启都没法启动nevo,必须卸载重装

    MIUI每次重启都没法启动nevo,必须卸载重装

    最近特意抓了一遍logcat,似乎是这里

    01-18 17:05:04.732  2535  2799 E adTracker: Value Nevo.NUI of type java.lang.String cannot be converted to JSONObject
    01-18 17:05:04.733  2535  2799 E adTracker: Value Nevo.NUI|AppBgSettings of type java.lang.String cannot be converted to JSONObject
    
    opened by notxx 8
  • Unable to bind decorator service

    Unable to bind decorator service

    开坑写Nevo模块的时候,在Nevo设置该模块Logcat就会捕捉到这个错误。

    Unable to bind decorator service: Intent { act=com.oasisfeng.nevo.Decorator cmp=com.retrox.aodmod/.StackDecorator }
    

    之后applyonNotification Removed回调也会报出Decorator Not Ready的错误。自定义模块也无法生效。

    这是我的测试代码

    package com.retrox.aodmod.nevo
    
    import android.app.Notification
    import android.util.Log
    import com.oasisfeng.nevo.sdk.MutableStatusBarNotification
    import com.oasisfeng.nevo.sdk.NevoDecoratorService
    
    class EnhancedBigTextDeco : NevoDecoratorService() {
        val TAG2 = "EnhancedBigTextDeco"
    
        override fun apply(evolving: MutableStatusBarNotification) {
            Log.d(TAG2, "apply key -> ${evolving.key}")
        }
    
        override fun onNotificationRemoved(key: String?, reason: Int) {
            super.onNotificationRemoved(key, reason)
            Log.d(TAG2, "removed -> ${key}")
    
    
        }
    }
    
            <service
                    android:name=".nevo.EnhancedBigTextDeco"
                    android:description="@string/app_name"
                    android:label="@string/app_name"
                    android:permission="com.oasisfeng.nevo.permission.BIND_DECORATOR_SERVICE"
                    android:directBootAware="true"
                    android:process="com.oasisfeng.nevo.decorators">
                <intent-filter android:priority="6">
                    <action android:name="com.oasisfeng.nevo.Decorator" />
                </intent-filter>
    
            </service>
    
    opened by life2015 6
  • setSmallIcon()没有生效

    setSmallIcon()没有生效

    试图做个Decorator来搞定MIUI中难看的彩色小图标,不过setSmallIcon()似乎不生效(改color、title和largeIcon都生效了……)。

        @Override
        protected void apply(MutableStatusBarNotification evolving) {
            final MutableNotification n = evolving.getNotification();
            Log.d(TAG, "begin modifying");
            Icon icon = Icon.createWithResource(this, R.drawable.ic_stat_name);
            n.extras.putParcelable("nevo.icon", icon);
            n.extras.putParcelable("android.icon", icon);
            n.setSmallIcon(icon);
            n.setLargeIcon(icon);
            n.color = Color.RED;
            n.extras.putCharSequence(Notification.EXTRA_TITLE, "title replaced");
            Log.d(TAG, "end modifying");
        }
    

    这是为啥呢

    opened by notxx 5
  • Notification sound/vibration loss and no automatic removal.

    Notification sound/vibration loss and no automatic removal.

    Nexus 6P, Android 6.0.1 WeChat 6.3.15, Nevolution 1.0 beta 3 with Extension Pack

    Turn on WeChat Tweaks, with all other tweaks turned off for WeChat. Then I met two issues:

    1. No sound / vibration for new messages though I have not turned them off. The notification for new messages (message content, instead of conversation prompt) hits me correctly.
    2. When I receive messages from contact A, I launch WeChat, enter the conversation with A, then the notification for A doesn't disappear - I need to manually swipe to clear.
    opened by EraserKing 5
  • Sound Modification Possible?

    Sound Modification Possible?

    I found Nevolution as I was searching for an app to override notification sounds per app. The few that I tested were doing some funky "dialing home" though I couldn't tell what the data was exactly. I'd rather not run a firewall to block net access just for those apps, so they got the boot.

    On to Nevolution - it seems like a wonderful platform for doing exactly what I was after. And I'm curious if this platform would allow for that. I'm willing to do the development to bring the feature to the app via a plugin, but is it even possible?

    opened by shellscape 3
  • What is this permission request?

    What is this permission request?

    Hi,

    With the latest Nevolution release in the Beta channel, there is this new permission request that does not make sense.

    "Permission required to read notification channels (Click to pick any device to grant permission)"

    However, once the said notification was tapped, what it displays are WiFi hotspots the phone can detect, not devices.

    Secondly, the WiFi setting is off so I don't understand how the new Nevolution can detect the WiFi around me.

    Third, if the app is opening the WiFi setting, it is not getting reflected anywhere nor were there permission requests to turn-on the WiFi.

    Lastly, what "devices" was it supposed to display? Was it supposed to detect bluetooth devices?

    Thank you for the clarifications.

    Great update.

    opened by techmagus 2
  • 微信新消息没有声音和震动

    微信新消息没有声音和震动

    微信来新消息时没有声音和震动 小米6 Android 8.0 MIUI 10.0.1.0 | 稳定版 微信版本:play版7.0.0 Nevo 3.0.2 工作模式:insider 未开启高级模式(执行命令报错) 未安装Extension Pack

    其它信息: 微信和Nevo,Nevo-Wechat的通知都打开了。 看酷安说很多人升级到微信7.0后都出现了没有声音的情况,具体情况未知(荣耀v10,华为Mate 20 Pro,三星Galaxy S9+,一加3T) 未使用此软件时微信只有震动没有声音,已知另一位小米6用户也有此问题。 微信更新到7.0后,声音与震动的设置发生了变化(如图) 另一部手机红米Note 4x,Android 7.0,miui10,微信play7.0,微信的声音和震动设置未发生变化,Nevo有声音和震动。 screenshot_2019-01-23-09-27-46-239_com tencent mm

    opened by ddggh5566 2
  • No whatsapp notifications on Samsung Gear S2

    No whatsapp notifications on Samsung Gear S2

    Though the gear s2 is connected to my Galaxy Note 4, whatsapp notifications don't get sent through to the watch. Uninstalling Nevolution will make then work again.

    Smses and phonecalls still manage to send their notifications through to the Gear S2.

    opened by coolfire77 2
  • Make multiple plug-ins visible

    Make multiple plug-ins visible

    By adding some sort of info or arrows that encourages the user to scroll left/right on the card to switch between them.

    I, for one, thought there was only 1 plug-in (whatever random one I got when opening the app).

    opened by licaon-kter 2
  • AndroidManifest.xml中的service::meta-data[name=package]应该怎么用

    AndroidManifest.xml中的service::meta-data[name=package]应该怎么用

    我试着抄了一下decorator-wechat的 <meta-data android:name="packages" android:value="com.xiaomi.xmsf" /> 这样在女娲石新增配方的时候很方便,直接可以给小米服务框架加修饰器。 但是这样的效果是只有小米服务框架可以用这个修饰器,其他包用不了了。 有没有办法可以既方便新增,又可以让别的包用这个修饰器呢

    opened by notxx 1
  • 系统界面已停止运行

    系统界面已停止运行

    任何时候只要打开过 Nevolution,之后每次试图进入最近任务界面时都会提示“系统界面已停止运行”,然后系统回到锁屏界面,此时系统其他功能正常,Nevolution 也正常运行。重启后一切正常,且 Nevolution 进程也正常运行,但点击 Nevolution icon 打开设置后会再次出现上面的情况,除非重启,否则无法恢复正常。

    使用 Nevolution 3.0.2,LOS 15.1(8.1),Mi 5。

    部分错误日志:

    --------- beginning of crash
    01-13 15:11:59.334  1631  1631 E AndroidRuntime: FATAL EXCEPTION: main
    01-13 15:11:59.334  1631  1631 E AndroidRuntime: Process: com.android.systemui, PID: 1631
    01-13 15:11:59.334  1631  1631 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.android.server.wm.TaskWindowContainerController.getBounds(android.graphics.Rect)' on a null object reference
    01-13 15:11:59.334  1631  1631 E AndroidRuntime: 	at android.os.Parcel.readException(Parcel.java:2019)
    01-13 15:11:59.334  1631  1631 E AndroidRuntime: 	at android.os.Parcel.readException(Parcel.java:1959)
    01-13 15:11:59.334  1631  1631 E AndroidRuntime: 	at android.app.IActivityManager$Stub$Proxy.getAllStackInfos(IActivityManager.java:7773)
    01-13 15:11:59.334  1631  1631 E AndroidRuntime: 	at com.android.systemui.recents.misc.SystemServicesProxy.isRecentsActivityVisible(SystemServicesProxy.java:520)
    01-13 15:11:59.334  1631  1631 E AndroidRuntime: 	at com.android.systemui.recents.RecentsImpl.lambda$-com_android_systemui_recents_RecentsImpl_22230(RecentsImpl.java:477)
    01-13 15:11:59.334  1631  1631 E AndroidRuntime: 	at com.android.systemui.recents.-$Lambda$pgmD0Bxm8kFYR7cdcGYk6DUhgds.$m$0(Unknown Source:8)
    01-13 15:11:59.334  1631  1631 E AndroidRuntime: 	at com.android.systemui.recents.-$Lambda$pgmD0Bxm8kFYR7cdcGYk6DUhgds.run(Unknown Source:0)
    01-13 15:11:59.334  1631  1631 E AndroidRuntime: 	at android.os.Handler.handleCallback(Handler.java:790)
    01-13 15:11:59.334  1631  1631 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:99)
    01-13 15:11:59.334  1631  1631 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:164)
    01-13 15:11:59.334  1631  1631 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:6494)
    01-13 15:11:59.334  1631  1631 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
    01-13 15:11:59.334  1631  1631 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:440)
    01-13 15:11:59.334  1631  1631 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
    ...
    01-13 15:12:44.746  2730  2958 E CrashlyticsCore: Error occurred sending report bq@87ba7c1
    01-13 15:12:44.746  2730  2958 E CrashlyticsCore: aie$c: java.io.FileNotFoundException: /data/user/0/com.oasisfeng.nevo/files/.Fabric/com.crashlytics.sdk.android.crashlytics-core/invalidClsFiles/5C3AE3AF00CA-0001-09A6-D32A1AF1313CSessionEvent0000000000.cls_temp (No such file or directory)
    01-13 15:12:44.746  2730  2958 E CrashlyticsCore: 	at aie.a(SourceFile:2619)
    01-13 15:12:44.746  2730  2958 E CrashlyticsCore: 	at bm.a(SourceFile:102)
    01-13 15:12:44.746  2730  2958 E CrashlyticsCore: 	at bm.a(SourceFile:61)
    01-13 15:12:44.746  2730  2958 E CrashlyticsCore: 	at ay.a(SourceFile:18)
    01-13 15:12:44.746  2730  2958 E CrashlyticsCore: 	at cg.a(SourceFile:104)
    01-13 15:12:44.746  2730  2958 E CrashlyticsCore: 	at cg$e.b(SourceFile:242)
    01-13 15:12:44.746  2730  2958 E CrashlyticsCore: 	at cg$e.a(SourceFile:185)
    01-13 15:12:44.746  2730  2958 E CrashlyticsCore: 	at agm.run(SourceFile:30)
    01-13 15:12:44.746  2730  2958 E CrashlyticsCore: 	at java.lang.Thread.run(Thread.java:764)
    01-13 15:12:44.746  2730  2958 E CrashlyticsCore: Caused by: java.io.FileNotFoundException: /data/user/0/com.oasisfeng.nevo/files/.Fabric/com.crashlytics.sdk.android.crashlytics-core/invalidClsFiles/5C3AE3AF00CA-0001-09A6-D32A1AF1313CSessionEvent0000000000.cls_temp (No such file or directory)
    01-13 15:12:44.746  2730  2958 E CrashlyticsCore: 	at java.io.FileInputStream.open0(Native Method)
    01-13 15:12:44.746  2730  2958 E CrashlyticsCore: 	at java.io.FileInputStream.open(FileInputStream.java:200)
    01-13 15:12:44.746  2730  2958 E CrashlyticsCore: 	at java.io.FileInputStream.<init>(FileInputStream.java:150)
    01-13 15:12:44.746  2730  2958 E CrashlyticsCore: 	at aie.a(SourceFile:2616)
    01-13 15:12:44.746  2730  2958 E CrashlyticsCore: 	... 8 more
    

    日志较长,不确定是否找到了关键日志,见谅

    opened by yrccondor 1
  • onNotificationRemoved() not fired when bubble visible

    onNotificationRemoved() not fired when bubble visible

    On the latest dev version, when a bubble is showing, onNotificationRemoved() will not fire until the bubble is removed. Not sure whether this is a bug or not. I tested this with the wechat decorator specifically.

    opened by MolotovCherry 2
  • NevoDecoratorService. getArchivedNotifications(final String key, final int limit)的实现不够完善

    NevoDecoratorService. getArchivedNotifications(final String key, final int limit)的实现不够完善

    在改进微信撤回通知的过程中,我发现消息撤回后getArchivedNotifications的结果与预期不一致。

    
    1. 发送1
    2. 发送2
    3. 发送3
    4. 发送4
    5. 发送5
    6. 发送6
    7. 撤回2
    8. 撤回5
    
    

    那么getArchivedNotifications的结果应该是操作日志式(1、2、3、4、5、6、撤回2、撤回5)的或者操作结果式的(1、3、4、6)。 但是现在的情况是返回值更接近于操作日志式的,但是存在两个问题:

    1. 撤回的消息中没有与之前消息的对应关系,也就是最终只知道发送了123456然后撤回了两条,但是哪两条不知道;
    2. 有的时候返回结果会不包括在一些没有被撤回的消息,这是通过与android auto消息对比得出的结果;

    以下附上日志

    06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: archive 11
    06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: [X]: 0, [X]: 0, 1559751734358
    06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: [X]: 1, [2条][X]: 1, 1559751745028
    06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: [X]: 2, [3条][X]: 2, 1559751746614
    06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: [X]: 3, [4条][X]: 3, 1559751748067
    06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: [X]: 4, [5条][X]: 4, 1559751749290
    06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: [X]: 5, [6条][X]: 5, 1559751750722
    06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: [X]: 6, [7条][X]: 6, 1559751751851
    06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: null, [6条]"❌" 撤回了一条消息, 1559751756958
    06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: null, [5条]"❌" 撤回了一条消息, 1559751806277
    06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: [X]: 8, [7条][X]: 8, 1559751875553
    06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: [X]: 9, [8条][X]: 9, 1559751890243
    06-06 00:24:50.273 24145 24164 D Nevo.Decorator[WeChat]: messages 8
    06-06 00:24:50.273 24145 24164 D Nevo.Decorator[WeChat]: message.text 0
    06-06 00:24:50.273 24145 24164 D Nevo.Decorator[WeChat]: message.text 1
    06-06 00:24:50.273 24145 24164 D Nevo.Decorator[WeChat]: message.text 2
    06-06 00:24:50.273 24145 24164 D Nevo.Decorator[WeChat]: message.text 4
    06-06 00:24:50.273 24145 24164 D Nevo.Decorator[WeChat]: message.text 6
    06-06 00:24:50.273 24145 24164 D Nevo.Decorator[WeChat]: message.text 7
    06-06 00:24:50.273 24145 24164 D Nevo.Decorator[WeChat]: message.text 8
    06-06 00:24:50.274 24145 24164 D Nevo.Decorator[WeChat]: message.text 9
    

    其中7就是神秘失踪的消息

    opened by notxx 3
Owner
null
An Android library for simple notification displayed inside ViewGroup instead of system.

SimpleNotificationBar SimpleNotificationBar is an Android library that helps developers to easily create a Notification inside a view group, instead o

Tristan Le 2 Jul 29, 2022
Notification - Notifications provide short, timely information about events in your app while it's not in use

Notification ⭐ Notifications provide short, timely information about events in y

BEYZANUR AKKUZU 1 Jan 13, 2022
Android Real Time Chat & Messaging SDK

Android Chat SDK Overview Applozic brings real-time engagement with chat, video, and voice to your web, mobile, and conversational apps. We power emer

Applozic 659 May 14, 2022
Kommunicate.io Android Chat SDK for Customer Support

Kommunicate Android Chat SDK for Customer Support An Open Source Android Live Chat SDK for Customer Support Overview Kommunicate provides open source

Kommunicate 68 Jan 3, 2023
A simple library for creating animated warnings/dialogs/alerts for Android.

Noty A simple library for creating animated warnings/notifications for Android. Examples Show me code Show me code Show me code Show me code Show me c

Emre 144 Nov 29, 2022
Android has a built in microphone through which you can capture audio and store it , or play it in your phone. There are many ways to do that but with this dialog you can do all thats with only one dialog.

# Media Recorder Dialog ![](https://img.shields.io/badge/Platform-Android-brightgreen.svg) ![](https://img.shields.io/badge/Android-CustomView-blue.sv

Abdullah Alhazmy 73 Nov 29, 2022
Conversations is an open source XMPP/Jabber client for Android

Conversations Conversations: the very last word in instant messaging Design principles Be as beautiful and easy to use as possible without sacrificing

Daniel Gultsch 4.2k Dec 30, 2022
Email-based instant messaging for Android.

Delta Chat Android Client This is the Android client for Delta Chat. It is available on F-Droid and the Google Play Store. The APK can also be downloa

Delta Chat 897 Jan 2, 2023
A glossy Matrix collaboration client for Android.

Element Android Element Android is an Android Matrix Client provided by Element. It is a total rewrite of Riot-Android with a new user experience. Nig

Element (formerly New Vector) 2.6k Dec 30, 2022
The most beautiful SMS messenger for Android

QKSMS QKSMS is an open source replacement to the stock messaging app on Android. It is currently available on the Google Play Store and on F-Droid Rep

Moez Bhatti 3.9k Dec 30, 2022
Unofficial, FOSS-friendly fork of the original Telegram client for Android

or 1McafEgMvqAVujNLtcJumZHxp2UfaNByqs Telegram-FOSS Telegram is a messaging app with a focus on speed and security. It’s superfast, simple and free. T

null 2k Jan 1, 2023
Official Android client for the Kontalk messaging system

This is the official Android client for the Kontalk messaging system. It always implements the latest protocol.

Kontalk 563 Dec 24, 2022
Open Source Messenger App For Android - Real-time Messaging, Voice and Video Calls

Open Source Messenger App For Android - Real-time Messaging, Voice and Video Calls

mesibo 630 Dec 7, 2022
Sample Android App for WebRTC with Firebase as backend

Simple Demo App for Android WebRTC video call using Firebase Realtime Database as Signalling server.

Devesh Chaudhari 19 Dec 17, 2022
A hybrid chat android application based on the features of Instagram and Whatsapp having UI just as Telegram.

A hybrid chat android application based on the features of Instagram and Whatsapp having UI just as Telegram.

Ratik Tiwari 1 May 22, 2022
A private-chat-only Android App for Secure Scuttlebutt

Tremola README Tremola is a Secure Scuttlebutt (SSB) client for Android that only supports private chat. Tremola aims at having the same functionality

Computer Networks Group 29 Oct 30, 2022
💙 Android sample Avengers chat application using Stream Chat SDK based on MVVM (ViewModel, Coroutines, Room, Hilt, Repository) architecture.

Avengers Chat AvengersChat is a demo application based on modern Android tech stacks and Stream Chat SDK. Previews Download Go to the Releases to down

Jaewoong Eum 352 Dec 25, 2022
AvengersChat is a demo application based on modern Android tech stacks and Stream Chat SDK.

?? Android sample Avengers chat application using Stream Chat SDK based on MVVM (ViewModel, Coroutines, Room, Hilt, Repository) architecture.

Stream 352 Dec 25, 2022
Telegram client based on official Android sources

Telegram messenger for Android Telegram is a messaging app with a focus on speed and security. It’s superfast, simple and free. This repo contains the

Dmitry Kotov 12 Dec 25, 2022