An LSPosed module for rooted TCL Flip 2 phones that suppresses duplicate calendar notifications from the stock TCL/Android Calendar when you use a non-stock calendar app such as Google Calendar.
The TCL Flip 2 stock Calendar (com.android.calendar) can continue posting reminders even when Google Calendar, OneCalendar, or another calendar client is the app you actually use. That can produce two notifications for the same event: one from the stock Calendar and another from the non-stock calendar app.
This module suppresses notification posts from the stock Calendar process only. It does not suppress notifications from Google Calendar or other third-party calendar apps.
The TCL firmware also defines a native Notifications preference for the stock Calendar, then removes the entire Alerts category from its settings screen. The module preserves that firmware-hidden category so the native setting remains visible, while independently blocking the stock Calendar's notification posts.
- Target package:
com.android.calendar - Required LSPosed scope: stock Calendar only, user 0
- Hooks
NotificationManager.notify(...)andnotifyAsUser(...)inside the scoped stock Calendar process and returns before the notification is posted. - Preserves the stock Calendar preference category keyed as
preferences_alerts_category. - Does not modify Calendar preferences, event data, account data, Calendar Storage, or notification settings belonging to other apps.
- Does not target:
- Google Calendar (
com.google.android.calendar) - OneCalendar
- Calendar Storage (
com.android.providers.calendar) - Any other calendar client
- Google Calendar (
Because this blocks every notification posted by the stock Calendar process, use it only when another calendar client is responsible for your reminders.
- TCL Flip 2 / TCL 4058 family running the compatible Android 11 firmware
- Root with Magisk/Zygisk
- LSPosed API 93 or newer
- Android SDK command-line build tools to build the APK locally
The implementation is intentionally narrow, but firmware variants can differ. Unknown devices and Calendar builds have not been validated.
-
Build and install the APK, or install a separately verified APK built from this source.
-
Open LSPosed.
-
Enable Calendar Notification Override.
-
Set its scope to exactly:
com.android.calendar — user 0 -
Do not select Google Calendar, OneCalendar, Calendar Storage, Android System, or any other package.
-
Restart the stock Calendar process or reboot the phone.
-
Confirm the stock Calendar no longer posts a duplicate reminder while your chosen non-stock calendar still does.
Disable or uninstall Calendar Notification Override, then restart the stock Calendar process or reboot. Stock Calendar notification posting and the firmware-hidden settings behavior will return.
The module does not rewrite preferences or event data, so rollback does not require restoring a database or settings backup.
The build script expects Android SDK platform 34 and build-tools 35.0.0 by default. Override paths with the standard ANDROID_SDK_ROOT and JAVA_HOME environment variables.
Signing credentials are intentionally external to the repository:
export CALENDAR_TOGGLE_KEYSTORE=/absolute/path/to/calendar-alert-toggle.jks
export CALENDAR_TOGGLE_STOREPASS='...'
export CALENDAR_TOGGLE_KEYPASS='...'
./build.shOutput:
build/Calendar-Notification-Override-v1.1.0.apk
No keystore, signing password, generated APK, or device evidence is included in this repository.
./test.shThe tests verify the exact target-package allowlist, rejection of Google Calendar, preservation of only the intended preference category, and source-level notification-hook safeguards.
If a modern Google Calendar build reports Calendar Storage disabled on a TCL Flip 2 even though Calendar Storage is enabled, see TCL-Flip-2-Google-Calendar. That package-visibility repair and this duplicate-notification suppression module solve separate problems.
The module has no network code, exported Android components, telemetry, account access, or event-data access. See SECURITY.md for reporting instructions and the supported scope.
MIT — see LICENSE.