-
Notifications
You must be signed in to change notification settings - Fork 376
feat: Add Kotlin MainApplication and suspend initialization support #2374
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Conversation
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
- 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 <[email protected]>
…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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@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
abdulraqeeb33
commented
Oct 15, 2025
...gnalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/application/SDKInitTests.kt
Outdated
Show resolved
Hide resolved
jkasten2
approved these changes
Oct 15, 2025
abdulraqeeb33
added a commit
that referenced
this pull request
Oct 29, 2025
* 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 <[email protected]> * 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 <[email protected]> * 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 <[email protected]> * 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 <[email protected]> Co-authored-by: AR Abdul Azeez <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
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