feat: Add Kotlin MainApplication and suspend initialization support#2374
Merged
abdulraqeeb33 merged 21 commits into5.4-mainfrom Oct 15, 2025
Merged
feat: Add Kotlin MainApplication and suspend initialization support#2374abdulraqeeb33 merged 21 commits into5.4-mainfrom
abdulraqeeb33 merged 21 commits into5.4-mainfrom
Conversation
added 6 commits
October 1, 2025 16:19
- Add MainApplicationKT.kt as Kotlin version of MainApplication.java - Add initWithContextSuspend() method for async initialization - Refactor OneSignalImp to use IO dispatcher internally for initialization - Add comprehensive unit tests for suspend initialization - Rename LatchAwaiter to CompletionAwaiter for better semantics - Add helper classes for user management (AppIdHelper, LoginHelper, LogoutHelper, UserSwitcher) - Update build.gradle to include Kotlin coroutines dependency - Ensure ANR prevention by using background threads for initialization
abdulraqeeb33
commented
Oct 3, 2025
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/startup/StartupService.kt
Outdated
Show resolved
Hide resolved
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt
Show resolved
Hide resolved
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt
Show resolved
Hide resolved
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt
Show resolved
Hide resolved
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt
Show resolved
Hide resolved
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/IOneSignal.kt
Outdated
Show resolved
Hide resolved
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/IOneSignal.kt
Outdated
Show resolved
Hide resolved
jkasten2
reviewed
Oct 3, 2025
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/IOneSignal.kt
Outdated
Show resolved
Hide resolved
jkasten2
requested changes
Oct 13, 2025
...esignal/core/src/main/java/com/onesignal/core/internal/preferences/PreferencesExtensionV4.kt
Show resolved
Hide resolved
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/startup/StartupService.kt
Outdated
Show resolved
Hide resolved
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/AppIdResolution.kt
Outdated
Show resolved
Hide resolved
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/AppIdResolution.kt
Outdated
Show resolved
Hide resolved
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/LoginHelper.kt
Outdated
Show resolved
Hide resolved
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/LogoutHelper.kt
Outdated
Show resolved
Hide resolved
...nalSDK/onesignal/core/src/test/java/com/onesignal/common/threading/CompletionAwaiterTests.kt
Outdated
Show resolved
Hide resolved
* Using dispatcher * Update threads to 2 * Updated methods * linting * readme * using the same thread pool * lint * making sure initstate has the right value * lint * Clear state and skip performance tests * lint * clear preferences * fixing tests * fixing tests * fixing tests * fixing tests * fixing tests * addressed PR comments * Addressed comments and fixed tests * lint * lint * fix test * lint * rewrote the test * fix test * made the test more robust * clear all preferences and simplified mocks * added more robustness --------- Co-authored-by: AR Abdul Azeez <abdul@onesignal.com>
…alls - Replace coVerifyOrder with individual coVerify(exactly = 1) calls - Makes tests more resilient to timing variations in CI/CD environments - Maintains verification of all critical operations while allowing flexibility in exact timing
jkasten2
requested changes
Oct 14, 2025
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/AppIdResolution.kt
Outdated
Show resolved
Hide resolved
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt
Show resolved
Hide resolved
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/UserSwitcher.kt
Show resolved
Hide resolved
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/UserSwitcher.kt
Outdated
Show resolved
Hide resolved
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/UserSwitcher.kt
Outdated
Show resolved
Hide resolved
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/UserSwitcher.kt
Outdated
Show resolved
Hide resolved
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/UserSwitcher.kt
Show resolved
Hide resolved
abdulraqeeb33
commented
Oct 15, 2025
Contributor
Author
abdulraqeeb33
left a comment
There was a problem hiding this comment.
@jkasten2 please check the latest comments as well.
OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/http/impl/HttpClient.kt
Show resolved
Hide resolved
...signal/core/src/main/java/com/onesignal/core/internal/preferences/impl/PreferencesService.kt
Show resolved
Hide resolved
...signal/core/src/main/java/com/onesignal/core/internal/preferences/impl/PreferencesService.kt
Outdated
Show resolved
Hide resolved
...gnal/core/src/main/java/com/onesignal/user/internal/migrations/RecoverFromDroppedLoginBug.kt
Show resolved
Hide resolved
...l/in-app-messages/src/main/java/com/onesignal/inAppMessages/internal/InAppMessagesManager.kt
Show resolved
Hide resolved
...java/com/onesignal/notifications/internal/generation/impl/NotificationGenerationProcessor.kt
Show resolved
Hide resolved
...java/com/onesignal/notifications/internal/generation/impl/NotificationGenerationProcessor.kt
Show resolved
Hide resolved
...va/com/onesignal/notifications/internal/permissions/impl/NotificationPermissionController.kt
Show resolved
Hide resolved
added 2 commits
October 15, 2025 09:15
abdulraqeeb33
commented
Oct 15, 2025
...gnalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/application/SDKInitTests.kt
Outdated
Show resolved
Hide resolved
This was referenced Dec 4, 2025
This was referenced Jan 5, 2026
jinliu9508
added a commit
that referenced
this pull request
Jan 6, 2026
* refactor: move initialization process off main thread * Release 5.4.0-alpha-01 * feat: Add Kotlin MainApplication and suspend initialization support (#2374) * feat: Add Kotlin MainApplication and suspend initialization support - Add MainApplicationKT.kt as Kotlin version of MainApplication.java - Add initWithContextSuspend() method for async initialization - Refactor OneSignalImp to use IO dispatcher internally for initialization - Add comprehensive unit tests for suspend initialization - Rename LatchAwaiter to CompletionAwaiter for better semantics - Add helper classes for user management (AppIdHelper, LoginHelper, LogoutHelper, UserSwitcher) - Update build.gradle to include Kotlin coroutines dependency - Ensure ANR prevention by using background threads for initialization * Added more tests * mandating passing app id in the login/logout methods * linting * Made app id mandatory for login and logout. * cleanup * reduce the forks * Time out, deprecate annotation and appid,context * ktlin * include MainApplication.java, locks, early returns * chore: Dispatcher Threads (#2375) * Using dispatcher * Update threads to 2 * Updated methods * linting * readme * using the same thread pool * lint * making sure initstate has the right value * lint * Clear state and skip performance tests * lint * clear preferences * fixing tests * fixing tests * fixing tests * fixing tests * fixing tests * addressed PR comments * Addressed comments and fixed tests * lint * lint * fix test * lint * rewrote the test * fix test * made the test more robust * clear all preferences and simplified mocks * added more robustness --------- Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> * Fix OperationRepoTests CI/CD flakiness by using individual coVerify calls - Replace coVerifyOrder with individual coVerify(exactly = 1) calls - Makes tests more resilient to timing variations in CI/CD environments - Maintains verification of all critical operations while allowing flexibility in exact timing * remove try catch and lint * Addressed comments, removed global scope launches, broke down userswitcher * fixed flag * fix tests * making sure using the name instead of value * test isolation * logout test * comments * cleanup --------- Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> * chore: bump SDK_VERSION to 5.4.0-alpha-02 (#2386) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Fix permissions activity (#2388) * broke down permissions activity * fixed the permissions dialog * cleanup * permissions tests * lint * waiting to false for pause * added some tests for pause * uncommented the code * removed duplicate class * fixed wrong import * fixed imports * fixed bug to display the dialog after cancelling * formatting ktlint * tests * lint * adding delay * removing the theme and going back to production * add a delay * add a delay --------- Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> * chore: bump SDK_VERSION to 5.4.0-alpha-03 (#2392) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * spotless check * added more time * added more time --------- Co-authored-by: jinliu9508 <jinliu9508@gmail.com> Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
jinliu9508
added a commit
that referenced
this pull request
Jan 6, 2026
* refactor: move initialization process off main thread * Release 5.4.0-alpha-01 * feat: Add Kotlin MainApplication and suspend initialization support (#2374) * feat: Add Kotlin MainApplication and suspend initialization support - Add MainApplicationKT.kt as Kotlin version of MainApplication.java - Add initWithContextSuspend() method for async initialization - Refactor OneSignalImp to use IO dispatcher internally for initialization - Add comprehensive unit tests for suspend initialization - Rename LatchAwaiter to CompletionAwaiter for better semantics - Add helper classes for user management (AppIdHelper, LoginHelper, LogoutHelper, UserSwitcher) - Update build.gradle to include Kotlin coroutines dependency - Ensure ANR prevention by using background threads for initialization * Added more tests * mandating passing app id in the login/logout methods * linting * Made app id mandatory for login and logout. * cleanup * reduce the forks * Time out, deprecate annotation and appid,context * ktlin * include MainApplication.java, locks, early returns * chore: Dispatcher Threads (#2375) * Using dispatcher * Update threads to 2 * Updated methods * linting * readme * using the same thread pool * lint * making sure initstate has the right value * lint * Clear state and skip performance tests * lint * clear preferences * fixing tests * fixing tests * fixing tests * fixing tests * fixing tests * addressed PR comments * Addressed comments and fixed tests * lint * lint * fix test * lint * rewrote the test * fix test * made the test more robust * clear all preferences and simplified mocks * added more robustness --------- Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> * Fix OperationRepoTests CI/CD flakiness by using individual coVerify calls - Replace coVerifyOrder with individual coVerify(exactly = 1) calls - Makes tests more resilient to timing variations in CI/CD environments - Maintains verification of all critical operations while allowing flexibility in exact timing * remove try catch and lint * Addressed comments, removed global scope launches, broke down userswitcher * fixed flag * fix tests * making sure using the name instead of value * test isolation * logout test * comments * cleanup --------- Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> * chore: bump SDK_VERSION to 5.4.0-alpha-02 (#2386) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Fix permissions activity (#2388) * broke down permissions activity * fixed the permissions dialog * cleanup * permissions tests * lint * waiting to false for pause * added some tests for pause * uncommented the code * removed duplicate class * fixed wrong import * fixed imports * fixed bug to display the dialog after cancelling * formatting ktlint * tests * lint * adding delay * removing the theme and going back to production * add a delay * add a delay --------- Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> * chore: bump SDK_VERSION to 5.4.0-alpha-03 (#2392) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * spotless check * added more time * added more time --------- Co-authored-by: jinliu9508 <jinliu9508@gmail.com> Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> # Conflicts: # OneSignalSDK/build.gradle # OneSignalSDK/onesignal/core/src/main/java/com/onesignal/session/internal/session/impl/SessionListener.kt
jinliu9508
added a commit
that referenced
this pull request
Jan 8, 2026
* refactor: move initialization process off main thread * Release 5.4.0-alpha-01 * feat: Add Kotlin MainApplication and suspend initialization support (#2374) * feat: Add Kotlin MainApplication and suspend initialization support - Add MainApplicationKT.kt as Kotlin version of MainApplication.java - Add initWithContextSuspend() method for async initialization - Refactor OneSignalImp to use IO dispatcher internally for initialization - Add comprehensive unit tests for suspend initialization - Rename LatchAwaiter to CompletionAwaiter for better semantics - Add helper classes for user management (AppIdHelper, LoginHelper, LogoutHelper, UserSwitcher) - Update build.gradle to include Kotlin coroutines dependency - Ensure ANR prevention by using background threads for initialization * Added more tests * mandating passing app id in the login/logout methods * linting * Made app id mandatory for login and logout. * cleanup * reduce the forks * Time out, deprecate annotation and appid,context * ktlin * include MainApplication.java, locks, early returns * chore: Dispatcher Threads (#2375) * Using dispatcher * Update threads to 2 * Updated methods * linting * readme * using the same thread pool * lint * making sure initstate has the right value * lint * Clear state and skip performance tests * lint * clear preferences * fixing tests * fixing tests * fixing tests * fixing tests * fixing tests * addressed PR comments * Addressed comments and fixed tests * lint * lint * fix test * lint * rewrote the test * fix test * made the test more robust * clear all preferences and simplified mocks * added more robustness --------- Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> * Fix OperationRepoTests CI/CD flakiness by using individual coVerify calls - Replace coVerifyOrder with individual coVerify(exactly = 1) calls - Makes tests more resilient to timing variations in CI/CD environments - Maintains verification of all critical operations while allowing flexibility in exact timing * remove try catch and lint * Addressed comments, removed global scope launches, broke down userswitcher * fixed flag * fix tests * making sure using the name instead of value * test isolation * logout test * comments * cleanup --------- Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> * chore: bump SDK_VERSION to 5.4.0-alpha-02 (#2386) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Fix permissions activity (#2388) * broke down permissions activity * fixed the permissions dialog * cleanup * permissions tests * lint * waiting to false for pause * added some tests for pause * uncommented the code * removed duplicate class * fixed wrong import * fixed imports * fixed bug to display the dialog after cancelling * formatting ktlint * tests * lint * adding delay * removing the theme and going back to production * add a delay * add a delay --------- Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> * chore: bump SDK_VERSION to 5.4.0-alpha-03 (#2392) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * spotless check * added more time * added more time --------- Co-authored-by: jinliu9508 <jinliu9508@gmail.com> Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> # Conflicts: # OneSignalSDK/build.gradle # OneSignalSDK/onesignal/core/src/main/java/com/onesignal/session/internal/session/impl/SessionListener.kt
jinliu9508
added a commit
that referenced
this pull request
Jan 8, 2026
* refactor: move initialization process off main thread * Release 5.4.0-alpha-01 * feat: Add Kotlin MainApplication and suspend initialization support (#2374) * feat: Add Kotlin MainApplication and suspend initialization support - Add MainApplicationKT.kt as Kotlin version of MainApplication.java - Add initWithContextSuspend() method for async initialization - Refactor OneSignalImp to use IO dispatcher internally for initialization - Add comprehensive unit tests for suspend initialization - Rename LatchAwaiter to CompletionAwaiter for better semantics - Add helper classes for user management (AppIdHelper, LoginHelper, LogoutHelper, UserSwitcher) - Update build.gradle to include Kotlin coroutines dependency - Ensure ANR prevention by using background threads for initialization * Added more tests * mandating passing app id in the login/logout methods * linting * Made app id mandatory for login and logout. * cleanup * reduce the forks * Time out, deprecate annotation and appid,context * ktlin * include MainApplication.java, locks, early returns * chore: Dispatcher Threads (#2375) * Using dispatcher * Update threads to 2 * Updated methods * linting * readme * using the same thread pool * lint * making sure initstate has the right value * lint * Clear state and skip performance tests * lint * clear preferences * fixing tests * fixing tests * fixing tests * fixing tests * fixing tests * addressed PR comments * Addressed comments and fixed tests * lint * lint * fix test * lint * rewrote the test * fix test * made the test more robust * clear all preferences and simplified mocks * added more robustness --------- Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> * Fix OperationRepoTests CI/CD flakiness by using individual coVerify calls - Replace coVerifyOrder with individual coVerify(exactly = 1) calls - Makes tests more resilient to timing variations in CI/CD environments - Maintains verification of all critical operations while allowing flexibility in exact timing * remove try catch and lint * Addressed comments, removed global scope launches, broke down userswitcher * fixed flag * fix tests * making sure using the name instead of value * test isolation * logout test * comments * cleanup --------- Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> * chore: bump SDK_VERSION to 5.4.0-alpha-02 (#2386) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Fix permissions activity (#2388) * broke down permissions activity * fixed the permissions dialog * cleanup * permissions tests * lint * waiting to false for pause * added some tests for pause * uncommented the code * removed duplicate class * fixed wrong import * fixed imports * fixed bug to display the dialog after cancelling * formatting ktlint * tests * lint * adding delay * removing the theme and going back to production * add a delay * add a delay --------- Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> * chore: bump SDK_VERSION to 5.4.0-alpha-03 (#2392) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * spotless check * added more time * added more time --------- Co-authored-by: jinliu9508 <jinliu9508@gmail.com> Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> # Conflicts: # OneSignalSDK/build.gradle # OneSignalSDK/onesignal/core/src/main/java/com/onesignal/session/internal/session/impl/SessionListener.kt
jinliu9508
pushed a commit
that referenced
this pull request
Jan 8, 2026
* refactor: move initialization process off main thread * Release 5.4.0-alpha-01 * feat: Add Kotlin MainApplication and suspend initialization support (#2374) * feat: Add Kotlin MainApplication and suspend initialization support - Add MainApplicationKT.kt as Kotlin version of MainApplication.java - Add initWithContextSuspend() method for async initialization - Refactor OneSignalImp to use IO dispatcher internally for initialization - Add comprehensive unit tests for suspend initialization - Rename LatchAwaiter to CompletionAwaiter for better semantics - Add helper classes for user management (AppIdHelper, LoginHelper, LogoutHelper, UserSwitcher) - Update build.gradle to include Kotlin coroutines dependency - Ensure ANR prevention by using background threads for initialization * Added more tests * mandating passing app id in the login/logout methods * linting * Made app id mandatory for login and logout. * cleanup * reduce the forks * Time out, deprecate annotation and appid,context * ktlin * include MainApplication.java, locks, early returns * chore: Dispatcher Threads (#2375) * Using dispatcher * Update threads to 2 * Updated methods * linting * readme * using the same thread pool * lint * making sure initstate has the right value * lint * Clear state and skip performance tests * lint * clear preferences * fixing tests * fixing tests * fixing tests * fixing tests * fixing tests * addressed PR comments * Addressed comments and fixed tests * lint * lint * fix test * lint * rewrote the test * fix test * made the test more robust * clear all preferences and simplified mocks * added more robustness --------- Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> * Fix OperationRepoTests CI/CD flakiness by using individual coVerify calls - Replace coVerifyOrder with individual coVerify(exactly = 1) calls - Makes tests more resilient to timing variations in CI/CD environments - Maintains verification of all critical operations while allowing flexibility in exact timing * remove try catch and lint * Addressed comments, removed global scope launches, broke down userswitcher * fixed flag * fix tests * making sure using the name instead of value * test isolation * logout test * comments * cleanup --------- Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> * chore: bump SDK_VERSION to 5.4.0-alpha-02 (#2386) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Fix permissions activity (#2388) * broke down permissions activity * fixed the permissions dialog * cleanup * permissions tests * lint * waiting to false for pause * added some tests for pause * uncommented the code * removed duplicate class * fixed wrong import * fixed imports * fixed bug to display the dialog after cancelling * formatting ktlint * tests * lint * adding delay * removing the theme and going back to production * add a delay * add a delay --------- Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> * chore: bump SDK_VERSION to 5.4.0-alpha-03 (#2392) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * spotless check * added more time * added more time --------- Co-authored-by: jinliu9508 <jinliu9508@gmail.com> Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> # Conflicts: # OneSignalSDK/build.gradle # OneSignalSDK/onesignal/core/src/main/java/com/onesignal/session/internal/session/impl/SessionListener.kt # Conflicts: # Examples/OneSignalDemo/gradle.properties # OneSignalSDK/gradle.properties
jinliu9508
pushed a commit
that referenced
this pull request
Jan 8, 2026
* refactor: move initialization process off main thread * Release 5.4.0-alpha-01 * feat: Add Kotlin MainApplication and suspend initialization support (#2374) * feat: Add Kotlin MainApplication and suspend initialization support - Add MainApplicationKT.kt as Kotlin version of MainApplication.java - Add initWithContextSuspend() method for async initialization - Refactor OneSignalImp to use IO dispatcher internally for initialization - Add comprehensive unit tests for suspend initialization - Rename LatchAwaiter to CompletionAwaiter for better semantics - Add helper classes for user management (AppIdHelper, LoginHelper, LogoutHelper, UserSwitcher) - Update build.gradle to include Kotlin coroutines dependency - Ensure ANR prevention by using background threads for initialization * Added more tests * mandating passing app id in the login/logout methods * linting * Made app id mandatory for login and logout. * cleanup * reduce the forks * Time out, deprecate annotation and appid,context * ktlin * include MainApplication.java, locks, early returns * chore: Dispatcher Threads (#2375) * Using dispatcher * Update threads to 2 * Updated methods * linting * readme * using the same thread pool * lint * making sure initstate has the right value * lint * Clear state and skip performance tests * lint * clear preferences * fixing tests * fixing tests * fixing tests * fixing tests * fixing tests * addressed PR comments * Addressed comments and fixed tests * lint * lint * fix test * lint * rewrote the test * fix test * made the test more robust * clear all preferences and simplified mocks * added more robustness --------- Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> * Fix OperationRepoTests CI/CD flakiness by using individual coVerify calls - Replace coVerifyOrder with individual coVerify(exactly = 1) calls - Makes tests more resilient to timing variations in CI/CD environments - Maintains verification of all critical operations while allowing flexibility in exact timing * remove try catch and lint * Addressed comments, removed global scope launches, broke down userswitcher * fixed flag * fix tests * making sure using the name instead of value * test isolation * logout test * comments * cleanup --------- Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> * chore: bump SDK_VERSION to 5.4.0-alpha-02 (#2386) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Fix permissions activity (#2388) * broke down permissions activity * fixed the permissions dialog * cleanup * permissions tests * lint * waiting to false for pause * added some tests for pause * uncommented the code * removed duplicate class * fixed wrong import * fixed imports * fixed bug to display the dialog after cancelling * formatting ktlint * tests * lint * adding delay * removing the theme and going back to production * add a delay * add a delay --------- Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> * chore: bump SDK_VERSION to 5.4.0-alpha-03 (#2392) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * spotless check * added more time * added more time --------- Co-authored-by: jinliu9508 <jinliu9508@gmail.com> Co-authored-by: AR Abdul Azeez <abdul@onesignal.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> # Conflicts: # OneSignalSDK/build.gradle # OneSignalSDK/onesignal/core/src/main/java/com/onesignal/session/internal/session/impl/SessionListener.kt # Conflicts: # Examples/OneSignalDemo/gradle.properties # OneSignalSDK/gradle.properties # OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/threading/OneSignalDispatchers.kt # OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/activities/PermissionsActivity.kt # OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/operations/impl/OperationRepo.kt # OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/permissions/PermissionsViewModel.kt # OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/services/SyncJobService.kt # OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt # OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/application/SDKInitSuspendTests.kt # OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/application/SDKInitTests.kt # OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/operations/OperationRepoTests.kt # OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/permissions/PermissionsViewModelTests.kt # OneSignalSDK/onesignal/core/src/test/java/com/onesignal/internal/OneSignalImpTests.kt # OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/generation/impl/NotificationGenerationProcessor.kt # OneSignalSDK/onesignal/notifications/src/test/java/com/onesignal/notifications/internal/generation/NotificationGenerationProcessorTests.kt
This was referenced Jan 8, 2026
This was referenced Jan 26, 2026
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.
Description
One Line Summary
Modernizing the SDK to use Kotlin Coroutines
Details
Motivation
Convert MainApplication from Java to Kotlin with modern async handling using coroutines, add suspend methods to OneSignal SDK for better ANR prevention, and deprecate the Java implementation to encourage migration to the improved Kotlin version.
Scope
SDK Initialization
Added new public APIs
Testing
Unit testing
Added a bunch of tests
Manual testing
Tested happy path
Affected code checklist
Checklist
Overview
Testing
Final pass
This change is