feat: branding, messages (edit/moderation/cross-post), WorkManager sync, push notifications (no Firebase) - #2
Open
Adron wants to merge 6 commits into
Open
feat: branding, messages (edit/moderation/cross-post), WorkManager sync, push notifications (no Firebase)#2Adron wants to merge 6 commits into
Adron wants to merge 6 commits into
Conversation
Brand refresh and dark mode: IL* design-system theme (Color/Theme/Logo), updated colors.xml/themes.xml, launcher + splash + monochrome icons, values-night/drawable-night dark resources, ThemeSettingsStore in :core:datastore, and the cross-platform brand-kit assets. Also the messages explicit-null fix (NetworkModule coerceInputValues + messages DTO/repository handling). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…I + D remainder)
Edit own messages via PATCH /api/messages/{id} (optimistic + 'edited' marker
from updatedAt); author overflow menu on others' messages with Block/Mute/Report
user (POST /api/users/{username}/block|mute|report), block/mute hide the author
locally. Self-contained in :feature:messages (no :feature:profile dep). 82 unit
tests green; :app:assembleDebug green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…g half) Composer destinations row: InterlinedList + a toggle per already-linked network (GET /api/user/identities). Post includes targets via the real create fields (mastodonProviderIds[], crossPostToBluesky/LinkedIn/Twitter); surfaces the crossPosts response status. Empty state hints to link accounts on web. OAuth connect flow deferred (needs redirect URIs). 94 unit tests green; assemble green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Make InterlinedListApplication a Configuration.Provider supplying the HiltWorkerFactory, remove the default androidx.startup WorkManager initializer (on-demand init), and schedule the periodic + one-shot delta-sync from the Documents tab, cancelling on sign-out. Device-verified: DocumentsSyncWorker runs to SUCCESS against the live API. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Background WorkManager poll of GET /api/notifications raises system-tray
notifications (NotificationCompat, per-category channels, grouped, capped),
tap deep-links into the app, respects the push channel in notification
preferences, and persists a last-seen marker (no backlog dump / no re-notify).
No FCM/Firebase/google-services. Scheduled on login, cancelled on sign-out;
POST_NOTIFICATIONS requested on Android 13+.
Also fixes a latent bug: NotificationsResponse never mapped the live 'items'
key (only data/notifications), silently emptying the in-app feed AND the poll.
Now maps items|data|notifications with a regression test.
Device-verified: Documents/NotificationsPollWorker run to SUCCESS; forcing an
older last-seen posts real tray notifications ('Adron Hall mentioned you...')
in the il_mentions channel.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Follow-up to the merged parity PR (#1). Adds branding / dark-mode, the message-coupled features, the WorkManager delta-sync bootstrap, and push notifications (no Firebase).
:app:assembleDebugis green and every part is verified on an emulator against a live account.What's in this PR
🎨 Branding + dark mode + message-fix
IL* design-system theme,
colors.xml/themes.xml, launcher + splash + monochrome icons,values-night/drawable-night,ThemeSettingsStore, the cross-platform brand-kit, and the messages explicit-null fix.💬 Messages-coupled features
PATCH /api/messages/{id}+ "edited" marker).mastodonProviderIds[],crossPostTo{Bluesky,LinkedIn,Twitter}). (OAuth account-linking deferred — needs redirect URIs.)⚙️ WorkManager delta-sync bootstrap
InterlinedListApplicationis aConfiguration.Providersupplying theHiltWorkerFactory; defaultandroidx.startupWorkManager initializer removed; doc delta-sync scheduled from the Documents tab. Device-verified:DocumentsSyncWorkerruns to SUCCESS against the live API.🔔 Push notifications — Milestone C, no Firebase (new)
Since there's no Firebase project, push is delivered the standard no-Google way: a background WorkManager poll of
GET /api/notificationsraises real system-tray notifications (NotificationCompat, per-category channels, grouped + capped), with tap deep-links, a persisted last-seen marker (no backlog dump / no re-notify), and respecting the notification-preferencespushchannel. No FCM/google-services/UnifiedPush;POST /api/push/registerisn't used (no device token without FCM).NotificationsResponsenever mapped the liveitemskey (onlydata/notifications), which had been silently emptying the in-app notifications feed and the poll. Now mapsitems | data | notificationswith a regression test.il_mentionschannel, grouped under a summary.Verified on-device (emulator, live account)
Delta-sync + notifications poll workers running to SUCCESS · real tray notifications posting to the correct channels · message edit / moderation / cross-post composer · dark-mode theme · "This device"-labeled sessions · all major surfaces — no crashes.
Product decisions
Not included — externally gated only
Testing
Module unit tests green (notifications 90, messages 94, profile 150, …);
:app:assembleDebugsucceeds; on-device smoke, delta-sync, and push-notification delivery verified.🤖 Generated with Claude Code