From 6e582c5e037ab040fa8ad671003173cf88841193 Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Wed, 14 Oct 2026 18:32:54 +0100 Subject: [PATCH 1/2] fix(flutter,react-native): move the embedded Android Push code to its own package The Flutter plugin and the React Native module embedded the Android SDK's Push classes under io.appwrite.services and io.appwrite.exceptions, so an app depending on two of the three SDKs failed with duplicate classes and colliding manifest components. The embedded copies now live under io.appwrite.flutter and io.appwrite.reactnative, with their own broadcast actions and notification-icon meta-data key. The Android SDK keeps its packages. --- src/SDK/Language/Flutter.php | 16 +++++----- src/SDK/Language/ReactNative.php | 16 +++++----- .../library/src/main/AndroidManifest.xml.twig | 2 +- .../package/services/PushBackground.kt.twig | 2 +- .../io/package/services/PushBridge.kt.twig | 2 +- .../java/io/package/services/PushCore.kt.twig | 2 +- .../package/services/PushOpenActivity.kt.twig | 2 +- .../io/package/services/PushReceiver.kt.twig | 2 +- .../io/package/services/PushService.kt.twig | 2 +- .../io/package/services/PushWakeups.kt.twig | 2 +- templates/android/push/Exception.kt.twig | 2 +- templates/flutter/README.md.twig | 4 +-- .../io/package/flutter/PushPlugin.kt.twig | 6 ++-- templates/react-native/README.md.twig | 4 +-- .../io/package/reactnative/PushModule.kt.twig | 8 ++--- tests/generation/GenerationTest.php | 30 +++++++++++++++++++ 16 files changed, 66 insertions(+), 36 deletions(-) diff --git a/src/SDK/Language/Flutter.php b/src/SDK/Language/Flutter.php index 2b79fc306a..43d0534a30 100644 --- a/src/SDK/Language/Flutter.php +++ b/src/SDK/Language/Flutter.php @@ -223,42 +223,42 @@ public function getFiles(): array ], [ 'scope' => 'default', - 'destination' => '/android/src/main/kotlin/io/{{ spec.info.title | caseLower }}/services/PushCore.kt', + 'destination' => '/android/src/main/kotlin/io/{{ spec.info.title | caseLower }}/flutter/services/PushCore.kt', 'template' => 'android/library/src/main/java/io/package/services/PushCore.kt.twig', ], [ 'scope' => 'default', - 'destination' => '/android/src/main/kotlin/io/{{ spec.info.title | caseLower }}/services/PushBackground.kt', + 'destination' => '/android/src/main/kotlin/io/{{ spec.info.title | caseLower }}/flutter/services/PushBackground.kt', 'template' => 'android/library/src/main/java/io/package/services/PushBackground.kt.twig', ], [ 'scope' => 'default', - 'destination' => '/android/src/main/kotlin/io/{{ spec.info.title | caseLower }}/services/PushWakeups.kt', + 'destination' => '/android/src/main/kotlin/io/{{ spec.info.title | caseLower }}/flutter/services/PushWakeups.kt', 'template' => 'android/library/src/main/java/io/package/services/PushWakeups.kt.twig', ], [ 'scope' => 'default', - 'destination' => '/android/src/main/kotlin/io/{{ spec.info.title | caseLower }}/services/PushService.kt', + 'destination' => '/android/src/main/kotlin/io/{{ spec.info.title | caseLower }}/flutter/services/PushService.kt', 'template' => 'android/library/src/main/java/io/package/services/PushService.kt.twig', ], [ 'scope' => 'default', - 'destination' => '/android/src/main/kotlin/io/{{ spec.info.title | caseLower }}/services/PushReceiver.kt', + 'destination' => '/android/src/main/kotlin/io/{{ spec.info.title | caseLower }}/flutter/services/PushReceiver.kt', 'template' => 'android/library/src/main/java/io/package/services/PushReceiver.kt.twig', ], [ 'scope' => 'default', - 'destination' => '/android/src/main/kotlin/io/{{ spec.info.title | caseLower }}/services/PushOpenActivity.kt', + 'destination' => '/android/src/main/kotlin/io/{{ spec.info.title | caseLower }}/flutter/services/PushOpenActivity.kt', 'template' => 'android/library/src/main/java/io/package/services/PushOpenActivity.kt.twig', ], [ 'scope' => 'default', - 'destination' => '/android/src/main/kotlin/io/{{ spec.info.title | caseLower }}/services/PushBridge.kt', + 'destination' => '/android/src/main/kotlin/io/{{ spec.info.title | caseLower }}/flutter/services/PushBridge.kt', 'template' => 'android/library/src/main/java/io/package/services/PushBridge.kt.twig', ], [ 'scope' => 'default', - 'destination' => '/android/src/main/kotlin/io/{{ spec.info.title | caseLower }}/exceptions/{{ spec.info.title | caseUcfirst }}Exception.kt', + 'destination' => '/android/src/main/kotlin/io/{{ spec.info.title | caseLower }}/flutter/exceptions/{{ spec.info.title | caseUcfirst }}Exception.kt', 'template' => 'android/push/Exception.kt.twig', ], [ diff --git a/src/SDK/Language/ReactNative.php b/src/SDK/Language/ReactNative.php index 7d02559ac8..a1300e12e3 100644 --- a/src/SDK/Language/ReactNative.php +++ b/src/SDK/Language/ReactNative.php @@ -89,42 +89,42 @@ public function getFiles(): array ], [ 'scope' => 'default', - 'destination' => 'android/src/main/java/io/{{ spec.info.title | caseLower }}/services/PushCore.kt', + 'destination' => 'android/src/main/java/io/{{ spec.info.title | caseLower }}/reactnative/services/PushCore.kt', 'template' => 'android/library/src/main/java/io/package/services/PushCore.kt.twig', ], [ 'scope' => 'default', - 'destination' => 'android/src/main/java/io/{{ spec.info.title | caseLower }}/services/PushBackground.kt', + 'destination' => 'android/src/main/java/io/{{ spec.info.title | caseLower }}/reactnative/services/PushBackground.kt', 'template' => 'android/library/src/main/java/io/package/services/PushBackground.kt.twig', ], [ 'scope' => 'default', - 'destination' => 'android/src/main/java/io/{{ spec.info.title | caseLower }}/services/PushWakeups.kt', + 'destination' => 'android/src/main/java/io/{{ spec.info.title | caseLower }}/reactnative/services/PushWakeups.kt', 'template' => 'android/library/src/main/java/io/package/services/PushWakeups.kt.twig', ], [ 'scope' => 'default', - 'destination' => 'android/src/main/java/io/{{ spec.info.title | caseLower }}/services/PushService.kt', + 'destination' => 'android/src/main/java/io/{{ spec.info.title | caseLower }}/reactnative/services/PushService.kt', 'template' => 'android/library/src/main/java/io/package/services/PushService.kt.twig', ], [ 'scope' => 'default', - 'destination' => 'android/src/main/java/io/{{ spec.info.title | caseLower }}/services/PushReceiver.kt', + 'destination' => 'android/src/main/java/io/{{ spec.info.title | caseLower }}/reactnative/services/PushReceiver.kt', 'template' => 'android/library/src/main/java/io/package/services/PushReceiver.kt.twig', ], [ 'scope' => 'default', - 'destination' => 'android/src/main/java/io/{{ spec.info.title | caseLower }}/services/PushOpenActivity.kt', + 'destination' => 'android/src/main/java/io/{{ spec.info.title | caseLower }}/reactnative/services/PushOpenActivity.kt', 'template' => 'android/library/src/main/java/io/package/services/PushOpenActivity.kt.twig', ], [ 'scope' => 'default', - 'destination' => 'android/src/main/java/io/{{ spec.info.title | caseLower }}/services/PushBridge.kt', + 'destination' => 'android/src/main/java/io/{{ spec.info.title | caseLower }}/reactnative/services/PushBridge.kt', 'template' => 'android/library/src/main/java/io/package/services/PushBridge.kt.twig', ], [ 'scope' => 'default', - 'destination' => 'android/src/main/java/io/{{ spec.info.title | caseLower }}/exceptions/{{ spec.info.title | caseUcfirst }}Exception.kt', + 'destination' => 'android/src/main/java/io/{{ spec.info.title | caseLower }}/reactnative/exceptions/{{ spec.info.title | caseUcfirst }}Exception.kt', 'template' => 'android/push/Exception.kt.twig', ], [ diff --git a/templates/android/library/src/main/AndroidManifest.xml.twig b/templates/android/library/src/main/AndroidManifest.xml.twig index 47567ca093..27ec3f0915 100644 --- a/templates/android/library/src/main/AndroidManifest.xml.twig +++ b/templates/android/library/src/main/AndroidManifest.xml.twig @@ -1,5 +1,5 @@ -{% set pushNamespace = language.name == 'Android' ? (sdk.namespace | caseDot) : 'io.' ~ (spec.info.title | caseLower) %} +{% set pushNamespace = language.name == 'Android' ? (sdk.namespace | caseDot) : 'io.' ~ (spec.info.title | caseLower) ~ '.' ~ (language.name | lower) %} diff --git a/templates/android/library/src/main/java/io/package/services/PushBackground.kt.twig b/templates/android/library/src/main/java/io/package/services/PushBackground.kt.twig index e471940011..944032a2bd 100644 --- a/templates/android/library/src/main/java/io/package/services/PushBackground.kt.twig +++ b/templates/android/library/src/main/java/io/package/services/PushBackground.kt.twig @@ -1,4 +1,4 @@ -{%- set pushNamespace = language.name == 'Android' ? (sdk.namespace | caseDot) : 'io.' ~ (spec.info.title | caseLower) -%} +{%- set pushNamespace = language.name == 'Android' ? (sdk.namespace | caseDot) : 'io.' ~ (spec.info.title | caseLower) ~ '.' ~ (language.name | lower) -%} package {{ pushNamespace }}.services import android.Manifest diff --git a/templates/android/library/src/main/java/io/package/services/PushBridge.kt.twig b/templates/android/library/src/main/java/io/package/services/PushBridge.kt.twig index 614fa55b0f..4891b1be4b 100644 --- a/templates/android/library/src/main/java/io/package/services/PushBridge.kt.twig +++ b/templates/android/library/src/main/java/io/package/services/PushBridge.kt.twig @@ -1,4 +1,4 @@ -{%- set pushNamespace = language.name == 'Android' ? (sdk.namespace | caseDot) : 'io.' ~ (spec.info.title | caseLower) -%} +{%- set pushNamespace = language.name == 'Android' ? (sdk.namespace | caseDot) : 'io.' ~ (spec.info.title | caseLower) ~ '.' ~ (language.name | lower) -%} package {{ pushNamespace }}.services import android.content.Context diff --git a/templates/android/library/src/main/java/io/package/services/PushCore.kt.twig b/templates/android/library/src/main/java/io/package/services/PushCore.kt.twig index aa737441ec..f7528f0937 100644 --- a/templates/android/library/src/main/java/io/package/services/PushCore.kt.twig +++ b/templates/android/library/src/main/java/io/package/services/PushCore.kt.twig @@ -1,4 +1,4 @@ -{%- set pushNamespace = language.name == 'Android' ? (sdk.namespace | caseDot) : 'io.' ~ (spec.info.title | caseLower) -%} +{%- set pushNamespace = language.name == 'Android' ? (sdk.namespace | caseDot) : 'io.' ~ (spec.info.title | caseLower) ~ '.' ~ (language.name | lower) -%} package {{ pushNamespace }}.services import android.content.Context diff --git a/templates/android/library/src/main/java/io/package/services/PushOpenActivity.kt.twig b/templates/android/library/src/main/java/io/package/services/PushOpenActivity.kt.twig index 348cd6ab9b..6f7951506c 100644 --- a/templates/android/library/src/main/java/io/package/services/PushOpenActivity.kt.twig +++ b/templates/android/library/src/main/java/io/package/services/PushOpenActivity.kt.twig @@ -1,4 +1,4 @@ -{%- set pushNamespace = language.name == 'Android' ? (sdk.namespace | caseDot) : 'io.' ~ (spec.info.title | caseLower) -%} +{%- set pushNamespace = language.name == 'Android' ? (sdk.namespace | caseDot) : 'io.' ~ (spec.info.title | caseLower) ~ '.' ~ (language.name | lower) -%} package {{ pushNamespace }}.services import android.app.Activity diff --git a/templates/android/library/src/main/java/io/package/services/PushReceiver.kt.twig b/templates/android/library/src/main/java/io/package/services/PushReceiver.kt.twig index feedd63a03..0be9262902 100644 --- a/templates/android/library/src/main/java/io/package/services/PushReceiver.kt.twig +++ b/templates/android/library/src/main/java/io/package/services/PushReceiver.kt.twig @@ -1,4 +1,4 @@ -{%- set pushNamespace = language.name == 'Android' ? (sdk.namespace | caseDot) : 'io.' ~ (spec.info.title | caseLower) -%} +{%- set pushNamespace = language.name == 'Android' ? (sdk.namespace | caseDot) : 'io.' ~ (spec.info.title | caseLower) ~ '.' ~ (language.name | lower) -%} package {{ pushNamespace }}.services import android.content.BroadcastReceiver diff --git a/templates/android/library/src/main/java/io/package/services/PushService.kt.twig b/templates/android/library/src/main/java/io/package/services/PushService.kt.twig index bf657cf229..aa1ce2cd2c 100644 --- a/templates/android/library/src/main/java/io/package/services/PushService.kt.twig +++ b/templates/android/library/src/main/java/io/package/services/PushService.kt.twig @@ -1,4 +1,4 @@ -{%- set pushNamespace = language.name == 'Android' ? (sdk.namespace | caseDot) : 'io.' ~ (spec.info.title | caseLower) -%} +{%- set pushNamespace = language.name == 'Android' ? (sdk.namespace | caseDot) : 'io.' ~ (spec.info.title | caseLower) ~ '.' ~ (language.name | lower) -%} package {{ pushNamespace }}.services import android.app.Service diff --git a/templates/android/library/src/main/java/io/package/services/PushWakeups.kt.twig b/templates/android/library/src/main/java/io/package/services/PushWakeups.kt.twig index 576351a4c3..487e751c61 100644 --- a/templates/android/library/src/main/java/io/package/services/PushWakeups.kt.twig +++ b/templates/android/library/src/main/java/io/package/services/PushWakeups.kt.twig @@ -1,4 +1,4 @@ -{%- set pushNamespace = language.name == 'Android' ? (sdk.namespace | caseDot) : 'io.' ~ (spec.info.title | caseLower) -%} +{%- set pushNamespace = language.name == 'Android' ? (sdk.namespace | caseDot) : 'io.' ~ (spec.info.title | caseLower) ~ '.' ~ (language.name | lower) -%} package {{ pushNamespace }}.services import android.app.job.JobParameters diff --git a/templates/android/push/Exception.kt.twig b/templates/android/push/Exception.kt.twig index 2ad9c0d7d5..2a11549acd 100644 --- a/templates/android/push/Exception.kt.twig +++ b/templates/android/push/Exception.kt.twig @@ -1,4 +1,4 @@ -package io.{{ spec.info.title | caseLower }}.exceptions +package io.{{ spec.info.title | caseLower }}.{{ language.name | lower }}.exceptions /** A push error. When the broker explained a refusal or a disconnect, that is its message. */ class {{ spec.info.title | caseUcfirst }}Exception( diff --git a/templates/flutter/README.md.twig b/templates/flutter/README.md.twig index f96f58e375..91e0487ab6 100644 --- a/templates/flutter/README.md.twig +++ b/templates/flutter/README.md.twig @@ -87,7 +87,7 @@ await push.setForeground(true); Foreground mode runs a `remoteMessaging` foreground service, which Google Play asks apps to declare in the Play Console. Apps that never enable it can remove the service from their merged -manifest with `tools:node="remove"` on `io.{{ spec.info.title | caseLower }}.services.PushService` and +manifest with `tools:node="remove"` on `io.{{ spec.info.title | caseLower }}.flutter.services.PushService` and `android.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING`. #### Delivery while the app is closed @@ -131,7 +131,7 @@ recents), Android cancels its alarms and jobs: nothing is delivered until the ap again, and the broker then replays what was sent meanwhile. Set the notification icon with -`` in your +`` in your ``; without it a generic icon is used. ### Opening a tapped notification diff --git a/templates/flutter/android/src/main/kotlin/io/package/flutter/PushPlugin.kt.twig b/templates/flutter/android/src/main/kotlin/io/package/flutter/PushPlugin.kt.twig index a60d001a9b..24d318f6fa 100644 --- a/templates/flutter/android/src/main/kotlin/io/package/flutter/PushPlugin.kt.twig +++ b/templates/flutter/android/src/main/kotlin/io/package/flutter/PushPlugin.kt.twig @@ -8,9 +8,9 @@ import android.os.Handler import android.os.Looper import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat -import io.{{ spec.info.title | caseLower }}.services.PushBridge -import io.{{ spec.info.title | caseLower }}.services.PushMessage -import io.{{ spec.info.title | caseLower }}.services.PushTaps +import io.{{ spec.info.title | caseLower }}.flutter.services.PushBridge +import io.{{ spec.info.title | caseLower }}.flutter.services.PushMessage +import io.{{ spec.info.title | caseLower }}.flutter.services.PushTaps import io.flutter.embedding.engine.plugins.FlutterPlugin import io.flutter.embedding.engine.plugins.activity.ActivityAware import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding diff --git a/templates/react-native/README.md.twig b/templates/react-native/README.md.twig index a1a6dad290..71aeaad8ab 100644 --- a/templates/react-native/README.md.twig +++ b/templates/react-native/README.md.twig @@ -115,7 +115,7 @@ recents), Android cancels its alarms and jobs: nothing is delivered until the ap again, and the broker then replays what was sent meanwhile. Set the notification icon with -`` in your +`` in your ``; without it a generic icon is used. ```js @@ -159,7 +159,7 @@ On Android the SDK's native module reports the taps. Elsewhere they come from `e Foreground mode runs a `remoteMessaging` foreground service, which Google Play asks apps to declare in the Play Console. Apps that never enable it can remove the service from their merged -manifest with `tools:node="remove"` on `io.{{ spec.info.title | caseLower }}.services.PushService` and +manifest with `tools:node="remove"` on `io.{{ spec.info.title | caseLower }}.reactnative.services.PushService` and `android.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING`. {% if sdk.gettingStarted %} diff --git a/templates/react-native/android/src/main/java/io/package/reactnative/PushModule.kt.twig b/templates/react-native/android/src/main/java/io/package/reactnative/PushModule.kt.twig index a6358ccbb2..9a71c56eec 100644 --- a/templates/react-native/android/src/main/java/io/package/reactnative/PushModule.kt.twig +++ b/templates/react-native/android/src/main/java/io/package/reactnative/PushModule.kt.twig @@ -7,10 +7,10 @@ import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.ReactContextBaseJavaModule import com.facebook.react.bridge.ReactMethod import com.facebook.react.modules.core.DeviceEventManagerModule -import io.{{ spec.info.title | caseLower }}.services.PushBridge -import io.{{ spec.info.title | caseLower }}.services.PushMessage -import io.{{ spec.info.title | caseLower }}.services.PushTap -import io.{{ spec.info.title | caseLower }}.services.PushTaps +import io.{{ spec.info.title | caseLower }}.reactnative.services.PushBridge +import io.{{ spec.info.title | caseLower }}.reactnative.services.PushMessage +import io.{{ spec.info.title | caseLower }}.reactnative.services.PushTap +import io.{{ spec.info.title | caseLower }}.reactnative.services.PushTaps import org.json.JSONObject /** diff --git a/tests/generation/GenerationTest.php b/tests/generation/GenerationTest.php index 6c1298a661..3c5b6fef14 100644 --- a/tests/generation/GenerationTest.php +++ b/tests/generation/GenerationTest.php @@ -385,6 +385,36 @@ public function testJavascriptClientOwnership(): void } } + /** + * The Flutter plugin and the React Native module embed the Android Push code. + * An app can depend on more than one of the three SDKs, so no Android class + * may share a fully qualified name with another SDK's, or the build fails on + * duplicate classes. + */ + public function testEmbeddedAndroidPushClassesDoNotCollide(): void + { + $classes = []; + foreach (['android', 'flutter', 'react-native'] as $name) { + $classes[$name] = []; + foreach ($this->generate($name, 'client') as $path => $contents) { + if (!\str_ends_with($path, '.kt') || !\preg_match('/^package ([a-z0-9_.]+)/m', $contents, $package)) { + continue; + } + \preg_match_all('/^(?:[a-z]+ )*(?:class|object|interface) ([a-z0-9_]+)/m', $contents, $declarations); + foreach ($declarations[1] as $class) { + $classes[$name][] = $package[1] . '.' . $class; + } + } + } + + $this->assertSame([], \array_values(\array_intersect($classes['android'], $classes['flutter']))); + $this->assertSame([], \array_values(\array_intersect($classes['android'], $classes['react-native']))); + $this->assertSame([], \array_values(\array_intersect($classes['flutter'], $classes['react-native']))); + $this->assertContains('io.appwrite.flutter.services.pushservice', $classes['flutter']); + $this->assertContains('io.appwrite.reactnative.services.pushservice', $classes['react-native']); + $this->assertContains('io.appwrite.services.pushservice', $classes['android']); + } + /** * A canonical document keys `x-appwrite.auth` by platform. The fixture's * platform-auth operation lists `Project` for client and `Project, Key` for From 30f776190e3255bb204301332b491bfb8f270265 Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Wed, 14 Oct 2026 19:23:07 +0100 Subject: [PATCH 2/2] test: follow the embedded Push packages in the Flutter and React Native e2e The Robolectric projects copied the plugin's Android sources from io/appwrite/services and io/appwrite/exceptions, and imported and broadcast with the old package names. --- tests/e2e/FlutterStableTest.php | 2 +- tests/e2e/ReactNativeAndroidTest.php | 2 +- tests/e2e/languages/flutter/android-test/Tests.kt | 10 +++++----- .../languages/react-native/android-test/Tests.kt | 14 +++++++------- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/tests/e2e/FlutterStableTest.php b/tests/e2e/FlutterStableTest.php index 9ce6d0cbe0..0fc2179f67 100644 --- a/tests/e2e/FlutterStableTest.php +++ b/tests/e2e/FlutterStableTest.php @@ -34,7 +34,7 @@ final class FlutterStableTest extends Base 'mkdir -p tests/e2e/sdks/flutter/android-test/src/main/java/io/appwrite tests/e2e/sdks/flutter/android-test/src/test/java tests/e2e/sdks/flutter/android-test/gradle/wrapper', 'cp tests/e2e/languages/flutter/android-test/settings.gradle.kts tests/e2e/languages/flutter/android-test/build.gradle.kts tests/e2e/languages/flutter/android-test/gradle.properties tests/e2e/sdks/flutter/android-test/', 'cp tests/e2e/languages/flutter/android-test/Tests.kt tests/e2e/sdks/flutter/android-test/src/test/java/Tests.kt', - 'cp -R tests/e2e/sdks/flutter/android/src/main/kotlin/io/appwrite/services tests/e2e/sdks/flutter/android/src/main/kotlin/io/appwrite/exceptions tests/e2e/sdks/flutter/android/src/main/kotlin/io/appwrite/flutter tests/e2e/sdks/flutter/android-test/src/main/java/io/appwrite/', + 'cp -R tests/e2e/sdks/flutter/android/src/main/kotlin/io/appwrite/flutter tests/e2e/sdks/flutter/android-test/src/main/java/io/appwrite/', 'cp tests/e2e/sdks/flutter/android/src/main/AndroidManifest.xml tests/e2e/sdks/flutter/android-test/src/main/AndroidManifest.xml', 'cp tests/e2e/sdks/flutter/android/build.gradle tests/e2e/sdks/flutter/android-test/plugin.gradle', 'cp templates/android/gradlew tests/e2e/sdks/flutter/android-test/gradlew', diff --git a/tests/e2e/ReactNativeAndroidTest.php b/tests/e2e/ReactNativeAndroidTest.php index b063de65e4..d14fbdb07a 100644 --- a/tests/e2e/ReactNativeAndroidTest.php +++ b/tests/e2e/ReactNativeAndroidTest.php @@ -51,7 +51,7 @@ final class ReactNativeAndroidTest extends Base 'mkdir -p tests/e2e/sdks/react-native/android-test/src/main/java/io/appwrite tests/e2e/sdks/react-native/android-test/src/test/java tests/e2e/sdks/react-native/android-test/gradle/wrapper', 'cp tests/e2e/languages/react-native/android-test/settings.gradle.kts tests/e2e/languages/react-native/android-test/build.gradle.kts tests/e2e/languages/react-native/android-test/gradle.properties tests/e2e/sdks/react-native/android-test/', 'cp tests/e2e/languages/react-native/android-test/Tests.kt tests/e2e/sdks/react-native/android-test/src/test/java/Tests.kt', - 'cp -R tests/e2e/sdks/react-native/android/src/main/java/io/appwrite/services tests/e2e/sdks/react-native/android/src/main/java/io/appwrite/exceptions tests/e2e/sdks/react-native/android/src/main/java/io/appwrite/reactnative tests/e2e/sdks/react-native/android-test/src/main/java/io/appwrite/', + 'cp -R tests/e2e/sdks/react-native/android/src/main/java/io/appwrite/reactnative tests/e2e/sdks/react-native/android-test/src/main/java/io/appwrite/', 'cp tests/e2e/sdks/react-native/android/src/main/AndroidManifest.xml tests/e2e/sdks/react-native/android-test/src/main/AndroidManifest.xml', 'cp templates/android/gradlew tests/e2e/sdks/react-native/android-test/gradlew', 'cp templates/android/gradle/wrapper/gradle-wrapper.jar templates/android/gradle/wrapper/gradle-wrapper.properties tests/e2e/sdks/react-native/android-test/gradle/wrapper/', diff --git a/tests/e2e/languages/flutter/android-test/Tests.kt b/tests/e2e/languages/flutter/android-test/Tests.kt index f49103fd45..65ff64cb64 100644 --- a/tests/e2e/languages/flutter/android-test/Tests.kt +++ b/tests/e2e/languages/flutter/android-test/Tests.kt @@ -13,10 +13,10 @@ import android.os.Looper import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import io.appwrite.flutter.AppwritePushPlugin -import io.appwrite.services.PushBackground -import io.appwrite.services.PushMessage -import io.appwrite.services.PushOpenActivity -import io.appwrite.services.PushReceiver +import io.appwrite.flutter.services.PushBackground +import io.appwrite.flutter.services.PushMessage +import io.appwrite.flutter.services.PushOpenActivity +import io.appwrite.flutter.services.PushReceiver import io.flutter.embedding.engine.plugins.FlutterPlugin import io.flutter.plugin.common.BinaryMessenger import io.flutter.plugin.common.MethodCall @@ -135,7 +135,7 @@ class Tests { val notifications = context.getSystemService(NotificationManager::class.java) val alarms = shadowOf(context.getSystemService(AlarmManager::class.java)) shadowOf(context.packageManager).addResolveInfoForIntent( - Intent("io.appwrite.push.MESSAGE").setPackage(context.packageName), + Intent("io.appwrite.flutter.push.MESSAGE").setPackage(context.packageName), ResolveInfo().apply { activityInfo = ActivityInfo().apply { name = E2EPushReceiver::class.java.name diff --git a/tests/e2e/languages/react-native/android-test/Tests.kt b/tests/e2e/languages/react-native/android-test/Tests.kt index 6a7d32e8d7..46afaa8c68 100644 --- a/tests/e2e/languages/react-native/android-test/Tests.kt +++ b/tests/e2e/languages/react-native/android-test/Tests.kt @@ -22,12 +22,12 @@ import com.facebook.react.bridge.WritableMap import com.facebook.react.modules.network.ForwardingCookieHandler import io.appwrite.reactnative.AppwriteCookiesModule import io.appwrite.reactnative.AppwritePushModule -import io.appwrite.services.PushBackground -import io.appwrite.services.PushBridge -import io.appwrite.services.PushMessage -import io.appwrite.services.PushOpenActivity -import io.appwrite.services.PushReceiver -import io.appwrite.services.PushStore +import io.appwrite.reactnative.services.PushBackground +import io.appwrite.reactnative.services.PushBridge +import io.appwrite.reactnative.services.PushMessage +import io.appwrite.reactnative.services.PushOpenActivity +import io.appwrite.reactnative.services.PushReceiver +import io.appwrite.reactnative.services.PushStore import org.json.JSONArray import org.json.JSONObject import org.junit.Assert.assertFalse @@ -134,7 +134,7 @@ class Tests { val notifications = context.getSystemService(NotificationManager::class.java) val alarms = shadowOf(context.getSystemService(AlarmManager::class.java)) shadowOf(context.packageManager).addResolveInfoForIntent( - Intent("io.appwrite.push.MESSAGE").setPackage(context.packageName), + Intent("io.appwrite.reactnative.push.MESSAGE").setPackage(context.packageName), ResolveInfo().apply { activityInfo = ActivityInfo().apply { name = E2EPushReceiver::class.java.name