Skip to content

Conversation

@abdulraqeeb33
Copy link
Contributor

@abdulraqeeb33 abdulraqeeb33 commented Oct 1, 2025

  • Create 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 and unify suspend and blocking thread notification
  • Add helper classes for user management (AppIdHelper, LoginHelper, LogoutHelper, UserSwitcher)
  • Ensure ANR prevention by using background threads for initialization

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

  • Notifications
    • Display
    • Open
    • Push Processing
    • Confirm Deliveries
  • Outcomes
  • Sessions
  • In-App Messaging
  • REST API requests
  • Public API changes

Checklist

Overview

  • I have filled out all REQUIRED sections above
  • PR does one thing
    • If it is hard to explain how any codes changes are related to each other then it most likely needs to be more than one PR
  • Any Public API changes are explained in the PR details and conform to existing APIs

Testing

  • I have included test coverage for these changes, or explained why they are not needed
  • All automated tests pass, or I explained why that is not possible
  • I have personally tested this on my device, or explained why that is not possible

Final pass

  • Code is as readable as possible.
    • Simplify with less code, followed by splitting up code into well named functions and variables, followed by adding comments to the code.
  • I have reviewed this PR myself, ensuring it meets each checklist item
    • WIP (Work In Progress) is ok, but explain what is still in progress and what you would like feedback on. Start the PR title with "WIP" to indicate this.

This change is Reviewable

AR Abdul Azeez 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 abdulraqeeb33 marked this pull request as ready for review October 3, 2025 00:08
@abdulraqeeb33 abdulraqeeb33 changed the base branch from 5.4.0-alpha-01-base to 5.4-main October 9, 2025 18:52
AR Abdul Azeez and others added 4 commits October 14, 2025 11:46
* 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
Copy link
Contributor Author

@abdulraqeeb33 abdulraqeeb33 left a 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.

AR Abdul Azeez added 2 commits October 15, 2025 09:15
@abdulraqeeb33 abdulraqeeb33 merged commit 66507e8 into 5.4-main Oct 15, 2025
1 check passed
@abdulraqeeb33 abdulraqeeb33 deleted the 5.4.0-alpha-01-kotlin-refactor branch October 15, 2025 20:42
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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants