Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
c563169
feat(mobile): add Android agent notifications and ongoing activity
ryanrhughes Sep 6, 2026
427b6c4
fix(mobile): harden Android notification compatibility and CI
ryanrhughes Sep 6, 2026
7c1d61f
fix(mobile): preserve Live Update promotion on current Android
ryanrhughes Sep 6, 2026
ec01afc
fix(relay): bound Firebase authorization and delivery requests
ryanrhughes Sep 6, 2026
d419bc4
chore(ci): remove standalone Android notification workflow
ryanrhughes Sep 6, 2026
94a3d77
fix(mobile): apply shared alert policy to Android delivery
juliusmarminge Sep 8, 2026
6fff76a
fix(mobile): address Android notification review findings
juliusmarminge Sep 8, 2026
8d2e363
fix(relay): preserve card alerts across notification-only jobs
juliusmarminge Sep 8, 2026
693fffa
refactor(relay): declare FCM crypto dependencies and preserve errors
juliusmarminge Sep 9, 2026
38c4221
refactor(relay): give the FCM queue sender its own service module
juliusmarminge Sep 9, 2026
7c9e303
refactor(relay): inject Web Crypto at application boundaries
juliusmarminge Sep 9, 2026
6df36b6
fix(relay): retain Android push CLI error causes
juliusmarminge Sep 9, 2026
d1d09e6
fix(relay): refresh watched Android activity timestamps
juliusmarminge Sep 9, 2026
afcbc6f
fix(relay): report unregistered Android watcher tokens
juliusmarminge Sep 9, 2026
b970b65
fix(relay): version device listing for Android compatibility
juliusmarminge Sep 9, 2026
68c7081
fix(relay): isolate FCM queue message failures
juliusmarminge Sep 9, 2026
7cc5781
fix(relay): preserve pending alerts across thread deletion
juliusmarminge Sep 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/deploy-relay.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ jobs:
AXIOM_TOKEN: ${{ secrets.AXIOM_TOKEN }}
CLERK_SECRET_KEY: ${{ secrets.CLERK_SECRET_KEY }}
APNS_PRIVATE_KEY: ${{ secrets.APNS_PRIVATE_KEY }}
FCM_SERVICE_ACCOUNT: ${{ secrets.FCM_SERVICE_ACCOUNT }}

- name: Publish relay deploy commit status
uses: actions/github-script@v8
Expand Down
9 changes: 8 additions & 1 deletion apps/mobile/app.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ const config: ExpoConfig = {
icon: variant.assets.appIcon,
userInterfaceStyle: "automatic",
updates: {
enabled: true,
enabled: repoEnv.T3CODE_MOBILE_UPDATES_ENABLED !== "0",
url: "https://u.expo.dev/d763fcb8-d37c-41ea-a773-b54a0ab4a454",
checkAutomatically: "ON_LOAD",
fallbackToCacheTimeout: 0,
Expand Down Expand Up @@ -237,6 +237,9 @@ const config: ExpoConfig = {
android: {
icon: variant.assets.appIcon,
package: variant.androidPackage,
...(repoEnv.T3CODE_ANDROID_GOOGLE_SERVICES_FILE
? { googleServicesFile: repoEnv.T3CODE_ANDROID_GOOGLE_SERVICES_FILE }
: {}),
adaptiveIcon: {
backgroundColor: variant.assets.androidAdaptiveBackgroundColor,
...(variant.assets.androidAdaptiveBackgroundImage
Expand Down Expand Up @@ -356,6 +359,10 @@ const config: ExpoConfig = {
[
"expo-build-properties",
{
android: {
// Keep the supported floor explicit and covered by native notification tests.
minSdkVersion: 24,
},
ios: {
deploymentTarget: "18.0",
// AppCheckCore 11.3+ includes Swift and needs module maps for these Objective-C dependencies.
Expand Down
34 changes: 34 additions & 0 deletions apps/mobile/modules/t3-agent-notifications/android/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
plugins {
id 'com.android.library'
id 'expo-module-gradle-plugin'
}

group = 'com.t3tools.agentnotifications'
version = '0.0.0'

android {
namespace 'expo.modules.t3agentnotifications'
defaultConfig {
versionCode 1
versionName '0.0.0'
}
testOptions {
unitTests.includeAndroidResources = true
}
}

dependencies {
implementation project(':expo-notifications')
implementation 'com.google.firebase:firebase-messaging:25.0.1'
implementation 'androidx.core:core:1.17.0'
implementation 'androidx.lifecycle:lifecycle-process:2.9.3'
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.robolectric:robolectric:4.16.1'
}

// Expo compiles modules with Java 17; Robolectric's Android 16 runtime needs 21.
tasks.withType(Test).configureEach {
javaLauncher = javaToolchains.launcherFor {
languageVersion = JavaLanguageVersion.of(21)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.POST_PROMOTED_NOTIFICATIONS" />
<application>
<service android:name="expo.modules.notifications.service.ExpoFirebaseMessagingService" tools:node="remove" />
<service android:name=".AgentMessagingService" android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<receiver android:name=".AgentActivityDismissReceiver" android:exported="false" />
<receiver android:name=".AgentActivityExpiryReceiver" android:exported="false" />
</application>
</manifest>
Loading
Loading