* Create `PushHandlingWakeLock` to start a foreground service:
When receiving a push and scheduling the notification fetching, several problems can happen:
1. Some async operation is waiting for a timeout and it takes way longer than that to finish (i.e. timeout of 10s but it took 30s to advance).
2. The same, but when starting new coroutines. I've seen the time between scheduling a coroutine and it running sometimes take up to 1 minute.
3. Notification fetching can be scheduled immediately, but it can take a while to actually run because the OS understands the app is now in Doze.
Having a wakelock that runs as soon as the push handling starts fixes these: it continues the previous wakelock held by either Firebase or the UnifiedPush distributor.
* Acquire the wakelock as soon as we received the pushes in both receivers
* Also release the wakelock ahead of time if possible
* Add `getForegroundInfo` implementation to try to fix issues with WorkManager on Android 12 and below
This may be a MIUI-only issue as I couldn't reproduce it with several emulators on Android 11, 12 and 13.
* Use `setExpedited` only on Android 13 or higher, it's not needed on older versions
* Use an actual string resource, fix tests
* Fix review comments
* Fix broken test with Element Pro:
Instead of using Robolectric with API < 33 (since Pro uses minSdk 33) use a `BuildVersionSdkIntProvider`
* Remove `getForegroundInfo` and the associated permission, as we expect it to be dead code
* Fix lint issues
* Cleanup NotificationIdProvider
---------
Co-authored-by: Benoit Marty <benoit@matrix.org>
2 replace all actions have been performed:
- "SPDX-License-Identifier: AGPL-3.0-only" to "SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial"
- "Please see LICENSE in the repository root for full details." to "Please see LICENSE files in the repository root for full details."