diff --git a/src/SDK/Language/Flutter.php b/src/SDK/Language/Flutter.php index e9dfc723cf..9d6205ed6d 100644 --- a/src/SDK/Language/Flutter.php +++ b/src/SDK/Language/Flutter.php @@ -228,42 +228,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/e2e/FlutterStableTest.php b/tests/e2e/FlutterStableTest.php index 93cc5e0d23..3e1e46b9a4 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 diff --git a/tests/generation/GenerationTest.php b/tests/generation/GenerationTest.php index e58df8563f..1c628fbcb0 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 `{}` spec default decodes to an empty PHP array, and a number param * without an example used to print `null`; both must keep their declared