Tusky-App-Android/gradle/libs.versions.toml

155 lines
10 KiB
TOML
Raw Normal View History

[versions]
Update dependency com.android.application to v8.5.1 (#4561) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.android.application](https://developer.android.com/studio/build) ([source](https://android.googlesource.com/platform/tools/base)) | `8.5.0` -> `8.5.1` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.android.application/8.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.android.application/8.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.android.application/8.5.0/8.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.android.application/8.5.0/8.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjUuMSIsInVwZGF0ZWRJblZlciI6IjM3LjQyNS4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Conny Duck <git@connyduck.at>
2024-07-12 11:06:22 +02:00
agp = "8.5.1"
fix(deps): update dependency androidx.activity:activity to v1.9.1 (#4582) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [androidx.activity:activity](https://developer.android.com/jetpack/androidx/releases/activity#1.9.1) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `1.9.0` -> `1.9.1` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.activity:activity/1.9.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.activity:activity/1.9.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.activity:activity/1.9.0/1.9.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.activity:activity/1.9.0/1.9.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View the [repository job log](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzguMCIsInVwZGF0ZWRJblZlciI6IjM3LjQzOC4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-02 17:12:49 +02:00
androidx-activity = "1.9.1"
Update dependency androidx.appcompat:appcompat to v1.7.0 (#4478) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [androidx.appcompat:appcompat](https://developer.android.com/jetpack/androidx/releases/appcompat#1.7.0) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `1.6.1` -> `1.7.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.appcompat:appcompat/1.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.appcompat:appcompat/1.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.appcompat:appcompat/1.6.1/1.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.appcompat:appcompat/1.6.1/1.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNzcuOCIsInVwZGF0ZWRJblZlciI6IjM3LjM3Ny44IiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-31 13:44:03 +02:00
androidx-appcompat = "1.7.0"
Update dependency androidx.browser:browser to v1.8.0 (#4311) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [androidx.browser:browser](https://developer.android.com/jetpack/androidx/releases/browser#1.8.0) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `1.7.0` -> `1.8.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.browser:browser/1.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.browser:browser/1.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.browser:browser/1.7.0/1.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.browser:browser/1.7.0/1.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMjcuMiIsInVwZGF0ZWRJblZlciI6IjM3LjIyNy4yIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCJ9--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-09 13:32:42 +01:00
androidx-browser = "1.8.0"
androidx-cardview = "1.0.0"
androidx-constraintlayout = "2.1.4"
Update dependency androidx.core:core-ktx to v1.13.1 (#4397) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [androidx.core:core-ktx](https://developer.android.com/jetpack/androidx/releases/core#1.13.1) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `1.13.0` -> `1.13.1` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.core:core-ktx/1.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.core:core-ktx/1.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.core:core-ktx/1.13.0/1.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.core:core-ktx/1.13.0/1.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMjEuMiIsInVwZGF0ZWRJblZlciI6IjM3LjMzMS4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-03 13:46:39 +02:00
androidx-core = "1.13.1"
androidx-drawerlayout = "1.2.0"
fix(deps): update dependency androidx.exifinterface:exifinterface to v1.3.7 (#4207) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [androidx.exifinterface:exifinterface](https://developer.android.com/jetpack/androidx/releases/exifinterface#1.3.7) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `1.3.6` -> `1.3.7` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.exifinterface:exifinterface/1.3.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.exifinterface:exifinterface/1.3.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.exifinterface:exifinterface/1.3.6/1.3.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.exifinterface:exifinterface/1.3.6/1.3.7?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMjEuMCIsInVwZGF0ZWRJblZlciI6IjM3LjEyMS4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCJ9--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-05 19:53:33 +01:00
androidx-exifinterface = "1.3.7"
fix(deps): update dependency androidx.fragment:fragment-ktx to v1.8.2 (#4583) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [androidx.fragment:fragment-ktx](https://developer.android.com/jetpack/androidx/releases/fragment#1.8.2) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `1.8.1` -> `1.8.2` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.fragment:fragment-ktx/1.8.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.fragment:fragment-ktx/1.8.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.fragment:fragment-ktx/1.8.1/1.8.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.fragment:fragment-ktx/1.8.1/1.8.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View the [repository job log](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzguMCIsInVwZGF0ZWRJblZlciI6IjM3LjQzOC4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-02 17:12:39 +02:00
androidx-fragment = "1.8.2"
Replace Dagger-Android with Hilt and remove Kapt (#4423) Hilt is an annotation processor built on top of Dagger which allows to remove all the Android dependency injection boilerplate code (currently around 900 lines) by writing it for us. Hilt can use KSP instead of Kapt so Kapt can be completely removed from the project. Kapt is slow, deprecated and has a few compatibility issues. Removing Kapt will improve build times since no Java stubs have to be generated for Kotlin classes anymore (Note that KSP also processes annotations in Java classes so it can completely replace Kapt). - Remove all modules related to manual dependency injection configuration. - Rename `AppModule` to `StorageModule` since it now only contains configuration to retrieve the DataBase and SharedPreferences. - Annotate all entry points (Activities, Fragments, BroadcastReceivers and Services) with `@AndroidEntryPoint`. - Annotate all injected ViewModels with `@HiltViewModel` and replace the custom ViewModel Factory with the default one (which integrates with the one generated by Hilt). - Add a public field to allow overriding the default ViewModelProvider.Factory in `BaseActivity` in tests. - Annotate tested Activities with `@OptionalInject` since Activity tests currently rely on the Activities not being injected automatically. - Annotate injected `Context` arguments with `@ApplicationContext`. Hilt provides the `Context` binding automatically but requires to specify if the Application or Activity Context is wanted. - Add WorkManager Hilt integration so all Workers are injected by Hilt automatically using `HiltWorkerFactory`. - Lazily initialize WorkManager in `TuskyApplication`. - Remove Kapt and Kapt workarounds. - ~~Remove toolchain configuration for Java 21. Toolchains force the Java bytecode to match the JDK version used to build the project, and apparently Hilt doesn't run inside the toolchain so cannot process the source code if the JDK version of the toolchain is higher than the JDK used to run Gradle. [And configuring a toolchain for an older Java version causes other issues](https://jakewharton.com/gradle-toolchains-are-rarely-a-good-idea/). **Removing toolchains configuration doesn't prevent the project from being built using JDK 21** or more recent versions but allows to build the project using older JDKs as well.~~ Added a fix to allow Hilt to properly use the JDK toolchain. - ~~Set the Java and Kotlin bytecode target to Java 17. The standard bytecode target for Android projects is usually Java 8 or 11 (any higher version doesn't provide any benefit but may cause compatibility issues). However, since the app currently uses a library built against Java 17 bytecode (`networkresult-calladapter`), it needs to target at least Java 17 bytecode as well.~~ - Update the Dagger 2 URL in the licenses screen. Hilt is part of Dagger 2 so the label wasn't changed.
2024-05-10 15:55:07 +02:00
androidx-hilt = "1.2.0"
Update dependency androidx.test.ext:junit to v1.2.1 (#4530) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [androidx.test.ext:junit](https://developer.android.com/testing) | `1.1.5` -> `1.2.1` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.test.ext:junit/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.test.ext:junit/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.test.ext:junit/1.1.5/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.test.ext:junit/1.1.5/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MTMuMiIsInVwZGF0ZWRJblZlciI6IjM3LjQxMy4yIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-03 19:53:25 +02:00
androidx-junit = "1.2.1"
fix(deps): update dependency androidx.lifecycle:lifecycle-viewmodel-ktx to v2.8.4 (#4584) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [androidx.lifecycle:lifecycle-viewmodel-ktx](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.8.4) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `2.8.3` -> `2.8.4` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.lifecycle:lifecycle-viewmodel-ktx/2.8.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.lifecycle:lifecycle-viewmodel-ktx/2.8.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.lifecycle:lifecycle-viewmodel-ktx/2.8.3/2.8.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.lifecycle:lifecycle-viewmodel-ktx/2.8.3/2.8.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View the [repository job log](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzguMCIsInVwZGF0ZWRJblZlciI6IjM3LjQ0MC43IiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-02 18:47:00 +02:00
androidx-lifecycle = "2.8.4"
fix(deps): update androidx.media3 to v1.4.0 (#4587) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [androidx.media3:media3-ui](https://togithub.com/androidx/media) | `1.3.1` -> `1.4.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-ui/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.media3:media3-ui/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.media3:media3-ui/1.3.1/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-ui/1.3.1/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [androidx.media3:media3-datasource-okhttp](https://togithub.com/androidx/media) | `1.3.1` -> `1.4.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-datasource-okhttp/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.media3:media3-datasource-okhttp/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.media3:media3-datasource-okhttp/1.3.1/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-datasource-okhttp/1.3.1/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [androidx.media3:media3-exoplayer](https://togithub.com/androidx/media) | `1.3.1` -> `1.4.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.media3:media3-exoplayer/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.media3:media3-exoplayer/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.media3:media3-exoplayer/1.3.1/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.media3:media3-exoplayer/1.3.1/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>androidx/media (androidx.media3:media3-ui)</summary> ### [`v1.4.0`](https://togithub.com/androidx/media/blob/HEAD/RELEASENOTES.md#140-2024-07-24) [Compare Source](https://togithub.com/androidx/media/compare/1.3.1...1.4.0) This release includes the following changes since the [1.3.1 release](#&#8203;131-2024-04-11): - Common Library: - Forward presumed no-op seek calls to the protected `BasePlayer.seekTo()` and `SimpleBasePlayer.handleSeek()` methods instead of ignoring them. If you are implementing these methods in a custom player, you may need to handle these additional calls with `mediaItemIndex == C.INDEX_UNSET`. - Remove compile dependency on enhanced Java 8 desugaring ([#&#8203;1312](https://togithub.com/androidx/media/issues/1312)). - Ensure the duration passed to `MediaItem.Builder.setImageDurationMs()` is ignored for a non-image `MediaItem` (as documented). - Add `Format.customData` to store app-provided custom information about `Format` instances. - ExoPlayer: - Add `BasePreloadManager` which coordinates the preloading for multiple sources based on the priorities defined by their `rankingData`. Customization is possible by extending this class. Add `DefaultPreloadManager` which uses `PreloadMediaSource` to preload media samples of the sources into memory, and uses an integer `rankingData` that indicates the index of an item on the UI. - Add `PlayerId` to most methods of `LoadControl` to enable `LoadControl` implementations to support multiple players. - Remove `Buffer.isDecodeOnly()` and `C.BUFFER_FLAG_DECODE_ONLY`. There is no need to set this flag as renderers and decoders will decide to skip buffers based on timestamp. Custom `Renderer` implementations should check if the buffer time is at least `BaseRenderer.getLastResetPositionUs()` to decide whether a sample should be shown. Custom `SimpleDecoder` implementations can check `isAtLeastOutputStartTimeUs()` if needed or mark other buffers with `DecoderOutputBuffer.shouldBeSkipped` to skip them. - Allow a null value to be returned by `TargetPreloadStatusControl.getTargetPreloadStatus(T)` to indicate not to preload a `MediaSource` with the given `rankingData`. - Add `remove(MediaSource)` to `BasePreloadManager`. - Add `reset()` to `BasePreloadManager` to release all the holding sources while keep the preload manager instance. - Add `ExoPlayer.setPriority()` (and `Builder.setPriority()`) to define the priority value used in `PriorityTaskManager` and for MediaCodec importance from API 35. - Fix issue with updating the last rebuffer time which resulted in incorrect `bs` (buffer starvation) key in CMCD ([#&#8203;1124](https://togithub.com/androidx/media/issues/1124)). - Add `PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)` to indicate that the source has loaded to the end. This allows the `DefaultPreloadManager` and the custom `PreloadMediaSource.PreloadControl` implementations to preload the next source or take other actions. - Fix bug where silence skipping at the end of items can trigger a playback exception. - Add `clear` to `PreloadMediaSource` to discard the preloading period. - Add new error code `PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED` that is used when codec resources are reclaimed for higher priority tasks. - Let `AdsMediaSource` load preroll ads before initial content media preparation completes ([#&#8203;1358](https://togithub.com/androidx/media/issues/1358)). - Fix bug where playback moved to `STATE_ENDED` when re-preparing a multi-period DASH live stream after the original period was already removed from the manifest. - Rename `onTimelineRefreshed()` to `onSourcePrepared()` and `onPrepared()` to `onTracksSelected()` in `PreloadMediaSource.PreloadControl`. Also rename the IntDefs in `DefaultPreloadManager.Stage` accordingly. - Add experimental support for dynamic scheduling to better align work with CPU wake-cycles and delay waking up to when renderers can progress. You can enable this using `experimentalSetDynamicSchedulingEnabled()` when setting up your ExoPlayer instance. - Add `Renderer.getDurationToProgressUs()`. A `Renderer` can implement this method to return to ExoPlayer the duration that playback must advance for the renderer to progress. If `ExoPlayer` is set with `experimentalSetDynamicSchedulingEnabled()` then `ExoPlayer` will call this method when calculating the time to schedule its work task. - Add `MediaCodecAdapter#OnBufferAvailableListener` to alert when input and output buffers are available for use by `MediaCodecRenderer`. `MediaCodecRenderer` will signal `ExoPlayer` when receiving these callbacks and if `ExoPlayer` is set with `experimentalSetDynamicSchedulingEnabled()`, then `ExoPlayer` will schedule its work loop as renderers can make progress. - Use data class for `LoadControl` methods instead of individual parameters. - Add `ExoPlayer.isReleased()` to check whether `Exoplayer.release()` has been called. - Add `ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()` to configure the maximum position for which `seekToPrevious()` seeks to the previous item ([#&#8203;1425](https://togithub.com/androidx/media/issues/1425)). - Fix some audio focus inconsistencies, e.g. not reporting full or transient focus loss while the player is paused ([#&#8203;1436](https://togithub.com/androidx/media/issues/1436)). - Fix potential `IndexOutOfBoundsException` caused by extractors reporting additional tracks after the initial preparation step ([#&#8203;1476](https://togithub.com/androidx/media/issues/1476)). - `Effects` in `ExoPlayer.setVideoEffect()` will receive the timestamps with the renderer offset removed ([#&#8203;1098](https://togithub.com/androidx/media/issues/1098)). - Fix potential `IllegalArgumentException` when handling player error that happened while reading ahead into another playlist item ([#&#8203;1483](https://togithub.com/androidx/media/issues/1483)). - Transformer: - Add `audioConversionProcess` and `videoConversionProcess` to `ExportResult` indicating how the respective track in the output file was made. - Relax trim optimization H.264 level checks. - Add support for changing between SDR and HDR input media in a sequence. - Add support for composition-level audio effects. - Add support for transcoding Ultra HDR images into HDR videos. - Fix issue where the `DefaultAudioMixer` does not output the correct amount of bytes after being reset and reused. - Work around a decoder bug where the number of audio channels was capped at stereo when handling PCM input. - When selecting tracks in `ExoPlayerAssetLoader`, ignore audio channel count constraints as they only apply for playback. - Replace `androidx.media3.transformer.Muxer` interface with `androidx.media3.muxer.Muxer` and remove `androidx.media3.transformer.Muxer`. - Fix HEIC image loading from content URI schemes. ([#&#8203;1373](https://togithub.com/androidx/media/issues/1373)). - Adjust audio track duration in `AudioGraphInput` to improve AV sync. - Remove `ExportResult.processedInputs` field. If you use this field for codec details, then use `DefaultDecoderFactory.listener` instead. In case of a codec exception, codec details will be available in the `ExportException.codecInfo`. - Extractors: - MPEG-TS: Roll forward the change ensuring the last frame is rendered by passing the last access unit of a stream to the sample queue ([#&#8203;7909](https://togithub.com/google/ExoPlayer/issues/7909)). Incorporating fixes to resolve the issues that emerged in I-frame only HLS streams([#&#8203;1150](https://togithub.com/androidx/media/issues/1150)) and H.262 HLS streams ([#&#8203;1126](https://togithub.com/androidx/media/issues/1126)). - MP3: Prefer the data size from an `Info` frame over the size reported by the underlying stream (e.g. file size, or HTTP `Content-Length` header). This helps to exclude non-playable trailer data (e.g. album artwork) from constant bitrate seeking calculations, making seeks more accurate ([#&#8203;1376](https://togithub.com/androidx/media/issues/1376)). - MP3: Use the frame count and other data in an `Info` frame (if present) to compute an average bitrate for constant bitrate seeking, rather than extrapolating from the bitrate of the frame after the `Info` frame, which may be artificially small, e.g. `PCUT` frame ([#&#8203;1376](https://togithub.com/androidx/media/issues/1376)). - Fix PCM audio format extraction in AVI containers. - Audio: - Fix DTS:X Profile 2 encoding attributes for passthrough playback ([#&#8203;1299](https://togithub.com/androidx/media/pull/1299)). - For offloaded playback, reset the tracking field for stream completion in `DefaultAudioSink` prior to calling `AudioTrack.stop()` so that `AudioTrack.StreamEventCallback#onPresentationEnded` correctly identifies when all pending data has been played. - Fix bug in `SilenceSkippingAudioProcessor` where transitions between different audio formats (for example stereo to mono) can cause the processor to throw an exception ([#&#8203;1352](https://togithub.com/androidx/media/issues/1352)). - Implement `MediaCodecAudioRenderer.getDurationToProgressUs()` so that ExoPlayer will dynamically schedule its main work loop to when the MediaCodecAudioRenderer can make progress. - Video: - Fix issue where `Listener.onRenderedFirstFrame()` arrives too early when switching surfaces mid-playback. - Fix decoder fallback logic for Dolby Vision to use a compatible AV1 decoder if needed ([#&#8203;1389](https://togithub.com/androidx/media/pull/1389)). - Fix codec exception that may be caused by enabling a video renderer mid-playback. - Text: - Fix issue where subtitles starting before a seek position are skipped. This issue was only introduced in Media3 1.4.0-alpha01. - Change default subtitle parsing behavior so it happens during extraction instead of during rendering (see [ExoPlayer's architecture diagram](https://developer.android.com/media/media3/exoplayer/glossary#exoplayer) for the difference between extraction and rendering). - This change can be overridden by calling **both** `MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)` and `TextRenderer.experimentalSetLegacyDecodingEnabled(true)`. See the [docs on customization](https://developer.android.com/media/media3/exoplayer/customization) for how to plumb these components into an `ExoPlayer` instance. These methods (and all support for legacy subtitle decoding) will be removed in a future release. - Apps with custom `SubtitleDecoder` implementations need to update them to implement `SubtitleParser` instead (and `SubtitleParser.Factory` instead of `SubtitleDecoderFactory`). - PGS: Fix run-length decoding to resolve `0` as a color index, instead of a literal color value ([#&#8203;1367](https://togithub.com/androidx/media/pull/1367)). - CEA-708: Ignore `rowLock` value. The CEA-708-E S-2023 spec states that `rowLock` and `columnLock` should both be assumed to be true, regardless of the values present in the stream (`columnLock` support is not implemented, so it's effectively assumed to always be false). - This was originally included in the `1.3.0-alpha01` release notes, but the change was accidentally reverted before the `1.3.0-rc01` release. This is now fixed, so the change is present again. - CEA-708: Avoid duplicate newlines being added by ExoPlayer's naive handling of the 'set pen location' command ([#&#8203;1315](https://togithub.com/androidx/media/pull/1315)). - Fix an `IllegalArgumentException` from `LegacySubtitleUtil` when a WebVTT subtitle sample contains no cues, e.g. as part of a DASH stream ([#&#8203;1516](https://togithub.com/androidx/media/issues/1516)). - Metadata: - Fix mapping of MP4 to ID3 sort tags. Previously the 'album sort' (`soal`), 'artist sort' (`soar`) and 'album artist sort' (`soaa`) MP4 tags were wrongly mapped to the `TSO2`, `TSOA` and `TSOP` ID3 tags ([#&#8203;1302](https://togithub.com/androidx/media/issues/1302)). - Fix reading of MP4 (/iTunes) numeric `gnre` (genre) and `tmpo` (tempo) tags when the value is more than one byte long. - Propagate ID3 `TCON` frame to `MediaMetadata.genre` ([#&#8203;1305](https://togithub.com/androidx/media/issues/1305)). - Image: - Add support for non-square DASH thumbnail grids ([#&#8203;1300](https://togithub.com/androidx/media/pull/1300)). - Add support for AVIF for API 34+. - Allow `null` as parameter for `ExoPlayer.setImageOutput()` to clear a previously set `ImageOutput`. - DataSource: - Implement support for `android.resource://package/id` raw resource URIs where `package` is different to the package of the current application. This wasn't previously documented to work, but is a more efficient way of accessing resources in another package than by name. - Eagerly check `url` is non-null in the `DataSpec` constructors. This parameter was already annotated to be non-null. - Allow `ByteArrayDataSource` to resolve a URI to a byte array during `open()`, instead of being hard-coded at construction ([#&#8203;1405](https://togithub.com/androidx/media/issues/1405)). - DRM: - Allow setting a `LoadErrorHandlingPolicy` on `DefaultDrmSessionManagerProvider` ([#&#8203;1271](https://togithub.com/androidx/media/issues/1271)). - Effect: - Support multiple speed changes within the same `EditedMediaItem` or `Composition` in `SpeedChangeEffect`. - Support for HLG and PQ output from ultra HDR bitmap input. - Add support for EGL_GL_COLORSPACE_BT2020\_HLG_EXT, which improves HLG surface output in ExoPlayer.setVideoEffect and Transformer's Debug SurfaceView. - Update Overlay matrix implementation to make it consistent with the documentation by flipping the x and y values applied in `setOverlayFrameAnchor()`. If using `OverlaySettings.Builder.setOverlayFrameAnchor()`, flip their x and y values by multiplying them by `-1`. - Fix bug where `TimestampWrapper` crashes when used with `ExoPlayer#setVideoEffects` ([#&#8203;821](https://togithub.com/androidx/media/issues/821)). - Change default SDR color working space from linear colors to electrical BT 709 SDR video. Also provide third option to retain the original colorspace. - Allow defining indeterminate z-order of EditedMediaItemSequences ([#&#8203;1055](https://togithub.com/androidx/media/pull/1055)). - Maintain a consistent luminance range across different pieces of HDR content (uses the HLG range). - Add support for Ultra HDR (bitmap) overlays on HDR content. - Allow `SeparableConvolution` effects to be used before API 26. - Remove unused `OverlaySettings.useHdr` since dynamic range of overlay and frame must match. - Add HDR support for `TextOverlay`. Luminance of the text overlay can be adjusted with `OverlaySettings.Builder.setHdrLuminanceMultiplier()`. - IMA extension: - Promote API that is required for apps to play [DAI ad streams](https://developers.google.com/ad-manager/dynamic-ad-insertion/full-service) to stable. - Add `replaceAdTagParameters(Map <String, String>)` to `ImaServerSideAdInsertionMediaSource.AdLoader` that allows replacing ad tag parameters at runtime. - Fix bug where `VideoAdPlayer.VideoAdPlayerCallback.onError()` was not called when a player error happened during ad playback ([#&#8203;1334](https://togithub.com/androidx/media/issues/1334)). - Bump IMA SDK version to 3.33.0 to fix a `NullPointerException` when using `data://` ad tag URIs ([#&#8203;700](https://togithub.com/androidx/media/issues/700)). - Session: - Change default of `CommandButton.enabled` to `true` and ensure the value can stay false for controllers even if the associated command is available. - Add icon constants for `CommandButton` that should be used instead of custom icon resources. - Add `MediaSessionService.isPlaybackOngoing()` to let apps query whether the service needs to be stopped in `onTaskRemoved()` ([#&#8203;1219](https://togithub.com/androidx/media/issues/1219)). - Add `MediaSessionService.pauseAllPlayersAndStopSelf()` that conveniently allows to pause playback of all sessions and call `stopSelf()` to terminate the lifecycle of the `MediaSessionService`. - Override `MediaSessionService.onTaskRemoved(Intent)` to provide a safe default implementation that keeps the service running in the foreground if playback is ongoing or stops the service otherwise. - Hide seekbar in the media notification for live streams by not setting the duration into the platform session metadata ([#&#8203;1256](https://togithub.com/androidx/media/issues/1256)). - Align conversion of `MediaMetadata` to `MediaDescriptionCompat`, to use the same preferred order and logic when selecting metadata properties as in media1. - Add `MediaSession.sendError()` that allows sending non-fatal errors to Media3 controller. When using the notification controller (see `MediaSession.getMediaNotificationControllerInfo()`), the custom error is used to update the `PlaybackState` of the platform session to an error state with the given error information ([#&#8203;543](https://togithub.com/androidx/media/issues/543)). - Add `MediaSession.Callback.onPlayerInteractionFinished()` to inform sessions when a series of player interactions from a specific controller finished. - Add `SessionError` and use it in `SessionResult` and `LibraryResult` instead of the error code to provide more information about the error and how to resolve the error if possible. - Publish the code for the media3 controller test app that can be used to test interactions with apps publishing a media session. - Propagate extras passed to media3's `MediaSession[Builder].setSessionExtras()` to a media1 controller's `PlaybackStateCompat.getExtras()`. - Map fatal and non-fatal errors to and from the platform session. A `PlaybackException` is mapped to a fatal error state of the `PlaybackStateCompat`. A `SessionError` sent to the media notification controller with `MediaSession.sendError(ControllerInfo, SessionError)` is mapped to a non-fatal error in `PlaybackStateCompat` which means that error code and message are set but the state of the platform session remains different to `STATE_ERROR`. - Allow the session activity to be set per controller to override the global session activity. The session activity can be defined for a controller at connection time by creating a `ConnectionResult` with `AcceptedResultBuilder.setSessionActivivty(PendingIntent)`. Once connected, the session activity can be updated with `MediaSession.setSessionActivity(ControllerInfo, PendingIntent)`. - Improve error replication of calls to `MediaLibrarySession.Callback`. Error replication can now be configured by using `MediaLibrarySession.Builder.setLibraryErrorReplicationMode()` for choosing the error type or opt-ing out of error replication which is on by default. - UI: - Add image display support to `PlayerView` when connected to an `ExoPlayer` ([#&#8203;1144](https://togithub.com/androidx/media/issues/1144)). - Add customization of various icons in `PlayerControlView` through xml attributes to allow different drawables per `PlayerView` instance, rather than global overrides ([#&#8203;1200](https://togithub.com/androidx/media/issues/1200)). - Work around a platform bug causing stretched/cropped video when using `SurfaceView` inside a Compose `AndroidView` on API 34 ([#&#8203;1237](https://togithub.com/androidx/media/issues/1237)). - Downloads: - Ensure that `DownloadHelper` does not leak unreleased `Renderer` instances, which can eventually result in an app crashing with `IllegalStateException: Too many receivers, total of 1000, registered for pid` ([#&#8203;1224](https://togithub.com/androidx/media/issues/1224)). - Cronet Extension: - Fix `SocketTimeoutException` in `CronetDataSource`. In some versions of Cronet, the request provided by the callback is not always the same. This leads to callback not completing and request timing out (https://issuetracker.google.com/328442628). - HLS Extension: - Fix bug where pending EMSG samples waiting for a discontinuity were delegated in `HlsSampleStreamWrapper` with an incorrect offset causing an `IndexOutOfBoundsException` or an `IllegalArgumentException` ([#&#8203;1002](https://togithub.com/androidx/media/issues/1002)). - Fix bug where non-primary playlists keep reloading for LL-HLS streams ([#&#8203;1240](https://togithub.com/androidx/media/issues/1240)). - Fix bug where enabling CMCD for HLS with initialization segments resulted in `Source Error` and `IllegalArgumentException`. - Fix bug where non-primary playing playlists are not refreshed during live playback ([#&#8203;1240](https://togithub.com/androidx/media/issues/1240)). - Fix bug where enabling CMCD for HLS live streams causes `ArrayIndexOutOfBoundsException` ([#&#8203;1395](https://togithub.com/androidx/media/issues/1395)). - DASH Extension: - Fix bug where re-preparing a multi-period live stream can throw an `IndexOutOfBoundsException` ([#&#8203;1329](https://togithub.com/androidx/media/issues/1329)). - Add support for `dashif:Laurl` license urls ([#&#8203;1345](https://togithub.com/androidx/media/issues/1345)). - Cast Extension: - Fix bug that converted the album title of the `MediaQueueItem` to the artist in the Media3 media item ([#&#8203;1255](https://togithub.com/androidx/media/pull/1255)). - Test Utilities: - Implement `onInit()` and `onRelease()` in `FakeRenderer`. - Change `TestPlayerRunHelper.runUntil()/playUntil()` methods to fail on nonfatal errors (e.g. those reported to `AnalyticsListener.onVideoCodecError()`). Use the new `TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()` method chain to disable this behavior. - Demo app: - Use `DefaultPreloadManager` in the short form demo app. - Allow setting repeat mode with `Intent` arguments from command line ([#&#8203;1266](https://togithub.com/androidx/media/pull/1266)). - Use `HttpEngineDataSource` as the `HttpDataSource` when supported by the device. - Remove deprecated symbols: - Remove `CronetDataSourceFactory`. Use `CronetDataSource.Factory` instead. - Remove some `DataSpec` constructors. Use `DataSpec.Builder` instead. - Remove `setContentTypePredicate(Predicate)` method from `DefaultHttpDataSource`, `OkHttpDataSource` and `CronetDataSource`. Use the equivalent method on each `XXXDataSource.Factory` instead. - Remove `OkHttpDataSource` constructors and `OkHttpDataSourceFactory`. Use `OkHttpDataSource.Factory` instead. - Remove `PlayerMessage.setHandler(Handler)`. Use `setLooper(Looper)` instead. - Remove `Timeline.Window.isLive` field. Use the `isLive()` method instead. - Remove `DefaultHttpDataSource` constructors. Use `DefaultHttpDataSource.Factory` instead. - Remove `DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS`. Use `DashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS` instead. - Remove `MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)`. Use `MediaCodecInfo.canReuseCodec(Format, Format)` instead. - Remove `DrmSessionManager.DUMMY` and `getDummyDrmSessionManager()` method. Use `DrmSessionManager.DRM_UNSUPPORTED` instead. - Remove `AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)`, `AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)`, `AudioRendererEventListener.onAudioInputFormatChanged(Format)`, `VideoRendererEventListener.onVideoInputFormatChanged(Format)`. Use the overloads that take a `DecoderReuseEvaluation` instead. - Remove `RendererSupport.FormatSupport` IntDef and `FORMAT_HANDLED`, `FORMAT_EXCEEDS_CAPABILITIES`, `FORMAT_UNSUPPORTED_DRM`, `FORMAT_UNSUPPORTED_SUBTYPE`, `FORMAT_UNSUPPORTED_TYPE` constants. Use the equivalent IntDef and constants in `androidx.media3.common.C` instead (e.g. `C.FORMAT_HANDLED`). - Remove `Bundleable` interface. This includes removing all `Bundleable.Creator<Foo> CREATOR` constant fields. Callers should use the `Bundle toBundle()` and `static Foo fromBundle(Bundle)` methods on each type instead. </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View the [repository job log](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzguMCIsInVwZGF0ZWRJblZlciI6IjM3LjQzOC4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-02 17:08:54 +02:00
androidx-media3 = "1.4.0"
Update dependency androidx.paging:paging-runtime-ktx to v3.3.0 (#4451) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [androidx.paging:paging-runtime-ktx](https://developer.android.com/jetpack/androidx/releases/paging#3.3.0) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `3.2.1` -> `3.3.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.paging:paging-runtime-ktx/3.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.paging:paging-runtime-ktx/3.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.paging:paging-runtime-ktx/3.2.1/3.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.paging:paging-runtime-ktx/3.2.1/3.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNTEuMiIsInVwZGF0ZWRJblZlciI6IjM3LjM1MS4yIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-15 18:45:33 +02:00
androidx-paging = "3.3.0"
Update dependency androidx.preference:preference-ktx to v1.2.1 (#3944) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [androidx.preference:preference-ktx](https://developer.android.com/jetpack/androidx/releases/preference#1.2.1) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `1.2.0` -> `1.2.1` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.preference:preference-ktx/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.preference:preference-ktx/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.preference:preference-ktx/1.2.0/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.preference:preference-ktx/1.2.0/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi40MC4zIiwidXBkYXRlZEluVmVyIjoiMzcuMzEuNSIsInRhcmdldEJyYW5jaCI6ImRldmVsb3AifQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-01 11:39:08 +01:00
androidx-preference = "1.2.1"
Update dependency androidx.recyclerview:recyclerview to v1.3.2 (#3885) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [androidx.recyclerview:recyclerview](https://developer.android.com/jetpack/androidx/releases/recyclerview#1.3.2) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `1.3.0` -> `1.3.2` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.recyclerview:recyclerview/1.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.recyclerview:recyclerview/1.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.recyclerview:recyclerview/1.3.0/1.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.recyclerview:recyclerview/1.3.0/1.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi4xMS4wIiwidXBkYXRlZEluVmVyIjoiMzcuMzIxLjIiLCJ0YXJnZXRCcmFuY2giOiJkZXZlbG9wIn0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-15 18:45:13 +02:00
androidx-recyclerview = "1.3.2"
androidx-sharetarget = "1.2.0"
androidx-splashscreen = "1.2.0-alpha01"
androidx-swiperefresh-layout = "1.1.0"
androidx-testing = "2.2.0"
Update dependency androidx.viewpager2:viewpager2 to v1.1.0 (#4452) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [androidx.viewpager2:viewpager2](https://developer.android.com/jetpack/androidx/releases/viewpager2#1.1.0) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `1.0.0` -> `1.1.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.viewpager2:viewpager2/1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.viewpager2:viewpager2/1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.viewpager2:viewpager2/1.0.0/1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.viewpager2:viewpager2/1.0.0/1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNTEuMiIsInVwZGF0ZWRJblZlciI6IjM3LjM1MS4yIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-15 18:45:23 +02:00
androidx-viewpager2 = "1.1.0"
Update androidx.work to v2.9.0 (#4266) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [androidx.work:work-testing](https://developer.android.com/jetpack/androidx/releases/work#2.9.0) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `2.8.1` -> `2.9.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.work:work-testing/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.work:work-testing/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.work:work-testing/2.8.1/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.work:work-testing/2.8.1/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [androidx.work:work-runtime-ktx](https://developer.android.com/jetpack/androidx/releases/work#2.9.0) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `2.8.1` -> `2.9.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.work:work-runtime-ktx/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.work:work-runtime-ktx/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.work:work-runtime-ktx/2.8.1/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.work:work-runtime-ktx/2.8.1/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMDAuMCIsInVwZGF0ZWRJblZlciI6IjM3LjIwMC4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCJ9--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-23 12:52:36 +01:00
androidx-work = "2.9.0"
androidx-room = "2.6.1"
bouncycastle = "1.70"
conscrypt = "2.5.2"
Update Kotlin (#4427) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.devtools.ksp](https://goo.gle/ksp) ([source](https://togithub.com/google/ksp)) | `1.9.23-1.0.20` -> `1.9.24-1.0.20` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.devtools.ksp/1.9.24-1.0.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.google.devtools.ksp/1.9.24-1.0.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.google.devtools.ksp/1.9.23-1.0.20/1.9.24-1.0.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.devtools.ksp/1.9.23-1.0.20/1.9.24-1.0.20?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | org.jetbrains.kotlin.plugin.parcelize | `1.9.23` -> `1.9.24` | [![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlin.plugin.parcelize/1.9.24?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlin.plugin.parcelize/1.9.24?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlin.plugin.parcelize/1.9.23/1.9.24?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlin.plugin.parcelize/1.9.23/1.9.24?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | org.jetbrains.kotlin.android | `1.9.23` -> `1.9.24` | [![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlin.android/1.9.24?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlin.android/1.9.24?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlin.android/1.9.23/1.9.24?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlin.android/1.9.23/1.9.24?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [org.jetbrains.kotlinx:kotlinx-coroutines-test](https://togithub.com/Kotlin/kotlinx.coroutines) | `1.8.0` -> `1.8.1` | [![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlinx:kotlinx-coroutines-test/1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlinx:kotlinx-coroutines-test/1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlinx:kotlinx-coroutines-test/1.8.0/1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlinx:kotlinx-coroutines-test/1.8.0/1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [org.jetbrains.kotlinx:kotlinx-coroutines-android](https://togithub.com/Kotlin/kotlinx.coroutines) | `1.8.0` -> `1.8.1` | [![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlinx:kotlinx-coroutines-android/1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlinx:kotlinx-coroutines-android/1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlinx:kotlinx-coroutines-android/1.8.0/1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlinx:kotlinx-coroutines-android/1.8.0/1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>google/ksp (com.google.devtools.ksp)</summary> ### [`v1.9.24-1.0.20`](https://togithub.com/google/ksp/releases/tag/1.9.24-1.0.20) [Compare Source](https://togithub.com/google/ksp/compare/1.9.23-1.0.20...1.9.24-1.0.20) KSP 1.0.20 for kotlin compiler version 1.9.24 </details> <details> <summary>Kotlin/kotlinx.coroutines (org.jetbrains.kotlinx:kotlinx-coroutines-test)</summary> ### [`v1.8.1`](https://togithub.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-181) [Compare Source](https://togithub.com/Kotlin/kotlinx.coroutines/compare/1.8.0...1.8.1) - Remove the `@ExperimentalTime` annotation from usages of `TimeSource` ([#&#8203;4046](https://togithub.com/Kotlin/kotlinx.coroutines/issues/4046)). Thanks, [@&#8203;hfhbd](https://togithub.com/hfhbd)! - Introduce a workaround for an Android bug that caused an occasional `NullPointerException` when setting the `StateFlow` value on old Android devices ([#&#8203;3820](https://togithub.com/Kotlin/kotlinx.coroutines/issues/3820)). - No longer use `kotlin.random.Random` as part of `Dispatchers.Default` and `Dispatchers.IO` initialization ([#&#8203;4051](https://togithub.com/Kotlin/kotlinx.coroutines/issues/4051)). - `Flow.timeout` throws the exception with which the channel was closed ([#&#8203;4071](https://togithub.com/Kotlin/kotlinx.coroutines/issues/4071)). - Small tweaks and documentation fixes. ##### Changelog relative to version 1.8.1-Beta - `Flow.timeout` throws the exception with which the channel was closed ([#&#8203;4071](https://togithub.com/Kotlin/kotlinx.coroutines/issues/4071)). - Small documentation fixes. </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNDAuMTAiLCJ1cGRhdGVkSW5WZXIiOiIzNy4zNTEuMiIsInRhcmdldEJyYW5jaCI6ImRldmVsb3AiLCJsYWJlbHMiOltdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-10 16:23:43 +02:00
coroutines = "1.8.1"
diffx = "1.1.1"
Update emoji2 to v1.4.0 (#3948) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [androidx.emoji2:emoji2-views-helper](https://developer.android.com/jetpack/androidx/releases/emoji2#1.4.0) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `1.3.0` -> `1.4.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.emoji2:emoji2-views-helper/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.emoji2:emoji2-views-helper/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.emoji2:emoji2-views-helper/1.3.0/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.emoji2:emoji2-views-helper/1.3.0/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [androidx.emoji2:emoji2-views](https://developer.android.com/jetpack/androidx/releases/emoji2#1.4.0) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `1.3.0` -> `1.4.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.emoji2:emoji2-views/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.emoji2:emoji2-views/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.emoji2:emoji2-views/1.3.0/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.emoji2:emoji2-views/1.3.0/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [androidx.emoji2:emoji2](https://developer.android.com/jetpack/androidx/releases/emoji2#1.4.0) ([source](https://cs.android.com/androidx/platform/frameworks/support)) | `1.3.0` -> `1.4.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.emoji2:emoji2/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.emoji2:emoji2/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.emoji2:emoji2/1.3.0/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.emoji2:emoji2/1.3.0/1.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi40MC4zIiwidXBkYXRlZEluVmVyIjoiMzcuMjAwLjAiLCJ0YXJnZXRCcmFuY2giOiJkZXZlbG9wIn0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-23 11:28:14 +01:00
emoji2 = "1.4.0"
Update dependency androidx.test.espresso:espresso-core to v3.6.1 (#4529) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [androidx.test.espresso:espresso-core](https://developer.android.com/testing) | `3.5.1` -> `3.6.1` | [![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.test.espresso:espresso-core/3.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.test.espresso:espresso-core/3.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.test.espresso:espresso-core/3.5.1/3.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.test.espresso:espresso-core/3.5.1/3.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MTMuMiIsInVwZGF0ZWRJblZlciI6IjM3LjQxMy4yIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-03 19:53:16 +02:00
espresso = "3.6.1"
filemoji-compat = "3.2.7"
2023-09-11 19:29:50 +02:00
glide = "4.16.0"
# Deliberate downgrade, https://github.com/tuskyapp/Tusky/issues/3631
glide-animation-plugin = "2.23.0"
Replace Dagger-Android with Hilt and remove Kapt (#4423) Hilt is an annotation processor built on top of Dagger which allows to remove all the Android dependency injection boilerplate code (currently around 900 lines) by writing it for us. Hilt can use KSP instead of Kapt so Kapt can be completely removed from the project. Kapt is slow, deprecated and has a few compatibility issues. Removing Kapt will improve build times since no Java stubs have to be generated for Kotlin classes anymore (Note that KSP also processes annotations in Java classes so it can completely replace Kapt). - Remove all modules related to manual dependency injection configuration. - Rename `AppModule` to `StorageModule` since it now only contains configuration to retrieve the DataBase and SharedPreferences. - Annotate all entry points (Activities, Fragments, BroadcastReceivers and Services) with `@AndroidEntryPoint`. - Annotate all injected ViewModels with `@HiltViewModel` and replace the custom ViewModel Factory with the default one (which integrates with the one generated by Hilt). - Add a public field to allow overriding the default ViewModelProvider.Factory in `BaseActivity` in tests. - Annotate tested Activities with `@OptionalInject` since Activity tests currently rely on the Activities not being injected automatically. - Annotate injected `Context` arguments with `@ApplicationContext`. Hilt provides the `Context` binding automatically but requires to specify if the Application or Activity Context is wanted. - Add WorkManager Hilt integration so all Workers are injected by Hilt automatically using `HiltWorkerFactory`. - Lazily initialize WorkManager in `TuskyApplication`. - Remove Kapt and Kapt workarounds. - ~~Remove toolchain configuration for Java 21. Toolchains force the Java bytecode to match the JDK version used to build the project, and apparently Hilt doesn't run inside the toolchain so cannot process the source code if the JDK version of the toolchain is higher than the JDK used to run Gradle. [And configuring a toolchain for an older Java version causes other issues](https://jakewharton.com/gradle-toolchains-are-rarely-a-good-idea/). **Removing toolchains configuration doesn't prevent the project from being built using JDK 21** or more recent versions but allows to build the project using older JDKs as well.~~ Added a fix to allow Hilt to properly use the JDK toolchain. - ~~Set the Java and Kotlin bytecode target to Java 17. The standard bytecode target for Android projects is usually Java 8 or 11 (any higher version doesn't provide any benefit but may cause compatibility issues). However, since the app currently uses a library built against Java 17 bytecode (`networkresult-calladapter`), it needs to target at least Java 17 bytecode as well.~~ - Update the Dagger 2 URL in the licenses screen. Hilt is part of Dagger 2 so the label wasn't changed.
2024-05-10 15:55:07 +02:00
hilt = "2.51.1"
2024-05-23 21:51:25 +02:00
kotlin = "2.0.0"
image-cropper = "4.3.2"
Update dependency com.google.android.material:material to v1.12.0 (#4407) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.android.material:material](https://togithub.com/material-components/material-components-android) | `1.11.0` -> `1.12.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.android.material:material/1.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.google.android.material:material/1.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.google.android.material:material/1.11.0/1.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.android.material:material/1.11.0/1.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>material-components/material-components-android (com.google.android.material:material)</summary> ### [`v1.12.0`](https://togithub.com/material-components/material-components-android/releases/tag/1.12.0) [Compare Source](https://togithub.com/material-components/material-components-android/compare/1.11.0...1.12.0) ### What's new since 1.11.0 - `Slider` and `Progress Indicator` have been updated to better support Non-Text Contrast Accessibility requirements. - Predictive Back Fragment/View support added to Material motion transitions (`MaterialSharedAxis`, `MaterialFadeThrough`, `MaterialFade`, `MaterialElevationScale`). #### Important Required `minSdkVersion` is now 19 or higher, for Material and AndroidX ([blog post](https://android-developers.googleblog.com/2023/10/androidx-minsdkversion-19.html)). #### Dependency Updates | Dependency | Previous version | New version | | - | - | - | | androidx.transition | 1.2.0 | 1.5.0 | #### Library Updates - `Gradle` - Update library minSdkVersion to 19. ([`1bbb43d`](https://togithub.com/material-components/material-components-android/commit/1bbb43d155df64d24463455fe6fb291b6940a7b2)) - Upgrade to //third_party/gradle to 8.4 ([`1756f23`](https://togithub.com/material-components/material-components-android/commit/1756f233ec3ac2085c07acf26a65b94e11038bd3)) - `Carousel` - Shifted keylines in contained strategies when there exists padding, and clipToPadding=false ([`1ef42e2`](https://togithub.com/material-components/material-components-android/commit/1ef42e2f23a5ce21d5963c62fe2a7332dadaf296)) - Fixed Javadoc formatting error in `FullScreenCarouselStrategy` class documentation. ([`a0a1c6e`](https://togithub.com/material-components/material-components-android/commit/a0a1c6e04499c324b61c0a5b7b628cd4f9fc3cbc)) - Added support for cross axis wrap_content RecyclerViews ([`e88a1b9`](https://togithub.com/material-components/material-components-android/commit/e88a1b98d240c451a8f1f3920958be28cd2ac563)) - Added documentation recommending snapping for multi-browse strategy ([`9e64a1f`](https://togithub.com/material-components/material-components-android/commit/9e64a1f5f682f435018b6ba4546085745f1b4a8f)) - Add attributes to change small item size ([`92a5444`](https://togithub.com/material-components/material-components-android/commit/92a5444de95501dbf5bc12eaaa7a969b44fe2151)) - `CollapsingToolbarLayout` - Fix text shadow fading when transitioning between expanded and collapsed states ([`7674e12`](https://togithub.com/material-components/material-components-android/commit/7674e12ea818793fe654f7691941f0bdc97c75f3)) - `Checkbox` - Updated string translations ([`198e08c`](https://togithub.com/material-components/material-components-android/commit/198e08cf5ebf77b140c194d6267270d6e52f99ed)) - `Dialog` - Unified scrim opacity in Material themes/theme overlays. ([`f3e4439`](https://togithub.com/material-components/material-components-android/commit/f3e4439ca69f993baa6626ad6a82937c2d283155)) - `Divider` - Fixed divider instantly appearing or disappearing on insertion or removal ([`ef4a0c5`](https://togithub.com/material-components/material-components-android/commit/ef4a0c5e36315904d7bce7f0f33d59b734f2657b)) - `i18n` - Update translated strings ([`a8307ef`](https://togithub.com/material-components/material-components-android/commit/a8307ef79280c1db52728127ae12809e58b82e8f)) - `MaterialDatePicker` - Fix date validation on Samsung devices ([`5aa6edf`](https://togithub.com/material-components/material-components-android/commit/5aa6edfaed08a6dff8439b51e91cd43e2ffb0386)) - `MaterialAutoCompleteTextView` - Enabled switch access in MaterialAutoCompleteTextView. ([`14a7b40`](https://togithub.com/material-components/material-components-android/commit/14a7b4036334e4d0573a46731ea18a388f87dc98)) - `NavigationDrawer` - Fixed wrong item selected after click ([`a3af20a`](https://togithub.com/material-components/material-components-android/commit/a3af20a86970a77c6225c5254c6540bb81bdc049)) - `NavigationRail` - Added label padding for when the label is long enough to reach the sides of the nav rail ([`2439dc0`](https://togithub.com/material-components/material-components-android/commit/2439dc0e8141a44418d32148c16e0cfc7a5beba7)) - Increased padding in between items as per design specs ([`16eca7e`](https://togithub.com/material-components/material-components-android/commit/16eca7eef3af53fe594d66440db796dab8762777)) - `Predictive Back` - Animated corners during predictive back when no drawerLayoutCornerSize is set ([`c8b9b1c`](https://togithub.com/material-components/material-components-android/commit/c8b9b1c0bb8e51501246c902073acc45aedeebd6)) - `ProgressIndicator` - Updated inactive track color from primary container to secondary container. ([`c8cb0c6`](https://togithub.com/material-components/material-components-android/commit/c8cb0c60379adfd76efbf54adeac316a9bfaec4e)) - Updated the setter of track thickness to not update track corner radius. ([`540f5ee`](https://togithub.com/material-components/material-components-android/commit/540f5ee9839ca3472e990f597d6f0a2b203b1b4f)) - Added the limit to not have stop indicator size bigger than track thickness. ([`689e04f`](https://togithub.com/material-components/material-components-android/commit/689e04f9edd1398f53bfc149aa78a2ab864953ba)) - Fixed the rounded ends overlapping bug with semi-transparent track/indicator color in Circular default style. ([`8167c11`](https://togithub.com/material-components/material-components-android/commit/8167c115e34e6b206a8446d98ce22c574d8a1584)) - Removed the call to draw a transparent full track. ([`3f80fdb`](https://togithub.com/material-components/material-components-android/commit/3f80fdb9e1f31df4c970025e34450726bbb822ec)) - Flipped the canvas for different circular directions. ([`bcc27a3`](https://togithub.com/material-components/material-components-android/commit/bcc27a36381d00212056b7f2b0befabb73a12b42)) - Split stop indicator drawing from indicator drawing. ([`76207cb`](https://togithub.com/material-components/material-components-android/commit/76207cb27004025adfa351e86ab5e75138c567c3)) - Added ActiveIndicator to improve readability. ([`6fd920a`](https://togithub.com/material-components/material-components-android/commit/6fd920a2c1fbaf2dec5627fe30dbe0912d458550)) - Fixed ESCAPE animation in linear and added ESCAPE animation in circular. ([`98284e7`](https://togithub.com/material-components/material-components-android/commit/98284e74ad2960bbca2763d0d415c01f6afd3c6e)) - Updated to use the same drawing delegate object between determinate drawable and indeterminate drawable to prevent inconsistent drawings when specs update. ([`52b4845`](https://togithub.com/material-components/material-components-android/commit/52b48450fc63a8aa48ba3d89ae888069e31b874a)) - Added missing graphics updates when spec changes. ([`93b3010`](https://togithub.com/material-components/material-components-android/commit/93b30109b0ccfd1c268a074f4673eb29536467ed)) - Update styles for new Accessibility updates ([`15b533f`](https://togithub.com/material-components/material-components-android/commit/15b533fffbeb1bfbd97b95fcd6b21cbad1ef2bb5)) - Added static drawable for Circular type when system animator is disabled. ([`22e054b`](https://togithub.com/material-components/material-components-android/commit/22e054ba680ecd1618b2ae4f2f48e4f7d13bbde8)) - `Search` - Excluded icons from search bar handwriting bounds ([`387f59b`](https://togithub.com/material-components/material-components-android/commit/387f59b7068866fea34a88bf065c6de96ea6868d)) - Made `searchbar_scrolling_view_behavior` string public ([`ce386e4`](https://togithub.com/material-components/material-components-android/commit/ce386e4c20343d0e5adb08bb001eb05d08c07ff5)) - Updated string translations ([`198e08c`](https://togithub.com/material-components/material-components-android/commit/198e08cf5ebf77b140c194d6267270d6e52f99ed)) - `SideSheet` - Moved the modal side sheet default width/height into style so they can be customized - Updated string translations ([`198e08c`](https://togithub.com/material-components/material-components-android/commit/198e08cf5ebf77b140c194d6267270d6e52f99ed)) - `Slider` - Made tick size defaults to the stop indicator size if set ([`92bc02c`](https://togithub.com/material-components/material-components-android/commit/92bc02c37c1c37c0cf1f84f50d54b49c6caee607)) - Fixed incorrect style of stop indicators near handles ([`d61cffd`](https://togithub.com/material-components/material-components-android/commit/d61cffd7eb0fe8fcd26a2c3927cb8a6ac2dafea1)) - Resolved issues that crash when assigning a large value to `valueTo` ([`4d1b9e5`](https://togithub.com/material-components/material-components-android/commit/4d1b9e58a5ffe11d8bcfc41486e0ea7e021ca436)) - Updated the track drawing for some corner cases. ([`10484df`](https://togithub.com/material-components/material-components-android/commit/10484df4074e0d3de907c2db1d4a241792edbc07)) - Fixed ripple not transparent on API 33 ([`cd4f618`](https://togithub.com/material-components/material-components-android/commit/cd4f618d383c23d09f99f86e56e5583f405fd861)) - Updated documentation ([`a641e18`](https://togithub.com/material-components/material-components-android/commit/a641e18b6ab3bfe7f972c6216ce820fd9bfdd662)) - Updated styles ([`c218b3c`](https://togithub.com/material-components/material-components-android/commit/c218b3c983000f42c7c94dd8a39499cd2762e850))([`3b278d7`](https://togithub.com/material-components/material-components-android/commit/3b278d709756e0a0d2ba856697ef4bcb76ae1544)) - Fixed slider label not moving while scrolling ([`144b515`](https://togithub.com/material-components/material-components-android/commit/144b5159ce414211cf37946ecb819cc976cedae1)) - `Tabs` - Fixed title being announced twice when there's a badge in TalkBack mode. ([`aaa7034`](https://togithub.com/material-components/material-components-android/commit/aaa7034cbf238c9415462c3a6dff888800aafefd)) - `Theming` - Add NoActionBar dynamic color themes ([`81d1b77`](https://togithub.com/material-components/material-components-android/commit/81d1b772b97ee8df94efbb2dfda8d9cd8fe49f29)) - Update Shape Theming bottom sheet text color ([`8ca016f`](https://togithub.com/material-components/material-components-android/commit/8ca016fb01f4bc73d506ae3286e3739ea046df0a)) - `Tokens` - Update tokens to v4.0.0. ([`88acfcd`](https://togithub.com/material-components/material-components-android/commit/88acfcdb63281714d64e863d2e7da3b53b8da9ce)) - Added formatting to break long lines and differentiate different comments. ([`857d6a2`](https://togithub.com/material-components/material-components-android/commit/857d6a2fd9505d25c8a4154e1a9892c47e7cbaae)) - `TopAppBar` - Use an accessibility delegate to add and perform actions ([`929c80f`](https://togithub.com/material-components/material-components-android/commit/929c80f7535bfcef1b306e051cf15e3722c687a4)) - Fixed compress effect clipping on API 21-24 ([`2ac8c1c`](https://togithub.com/material-components/material-components-android/commit/2ac8c1cbf6cb5aea7d60ef5655bed7d014e5f930)) - `TextInputLayout` - Limited the min height reset in text change listener only when line count changes. ([`9b9449c`](https://togithub.com/material-components/material-components-android/commit/9b9449cde18424348cba0d6acc315e07b43dd0f7)) - Fixed unnecessary min height when losing focus with multiple lines. ([`4a2654a`](https://togithub.com/material-components/material-components-android/commit/4a2654a3f389d44f7f7d76da30472c2bc0163ef6)) - `Transitions / Motion` - Updated androidx transition dep to version 1.5.0-beta01 ([`8c63848`](https://togithub.com/material-components/material-components-android/commit/8c638488293a22809d086d053ebb96ffe99cf703)) - Added predictive fade through fragment transition demo to Catalog. ([`6092a7d`](https://togithub.com/material-components/material-components-android/commit/6092a7dfe9a6d50a43b935f6d7e00d859e5d9934)) - Added titles to fade through demo fragments in Catalog. ([`104043c`](https://togithub.com/material-components/material-components-android/commit/104043caeef12bc390e7c06cfe32366017880b03)) - Added predictive transition support for fragments and views to the Material motion library, and enabled it in shared axis fragment transition demo. ([`8ccec33`](https://togithub.com/material-components/material-components-android/commit/8ccec334bda49b12c11d1384190457d27ca78961)) #### Full list of release notes - [1.12.0-alpha01](https://togithub.com/material-components/material-components-android/releases/tag/1.12.0-alpha01) - [1.12.0-alpha02](https://togithub.com/material-components/material-components-android/releases/tag/1.12.0-alpha02) - [1.12.0-alpha03](https://togithub.com/material-components/material-components-android/releases/tag/1.12.0-alpha03) - [1.12.0-beta01](https://togithub.com/material-components/material-components-android/releases/tag/1.12.0-beta01) - [1.12.0-rc01](https://togithub.com/material-components/material-components-android/releases/tag/1.12.0-rc01) #### Full list of changes </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMzEuMCIsInVwZGF0ZWRJblZlciI6IjM3LjMzMS4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-03 13:25:26 +02:00
material = "1.12.0"
material-drawer = "8.4.5"
Update dependency com.mikepenz:google-material-typeface to v4.0.0.3-kotlin (#4479) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.mikepenz:google-material-typeface](https://togithub.com/mikepenz/Android-Iconics) | `4.0.0.2-kotlin` -> `4.0.0.3-kotlin` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.mikepenz:google-material-typeface/4.0.0.3-kotlin?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.mikepenz:google-material-typeface/4.0.0.3-kotlin?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.mikepenz:google-material-typeface/4.0.0.2-kotlin/4.0.0.3-kotlin?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.mikepenz:google-material-typeface/4.0.0.2-kotlin/4.0.0.3-kotlin?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNzcuOCIsInVwZGF0ZWRJblZlciI6IjM3LjM3Ny44IiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-31 13:44:13 +02:00
material-typeface = "4.0.0.3-kotlin"
mockito-inline = "5.2.0"
Update dependency org.mockito.kotlin:mockito-kotlin to v5.4.0 (#4556) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.mockito.kotlin:mockito-kotlin](https://togithub.com/mockito/mockito-kotlin) | `5.3.1` -> `5.4.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/org.mockito.kotlin:mockito-kotlin/5.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.mockito.kotlin:mockito-kotlin/5.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.mockito.kotlin:mockito-kotlin/5.3.1/5.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.mockito.kotlin:mockito-kotlin/5.3.1/5.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>mockito/mockito-kotlin (org.mockito.kotlin:mockito-kotlin)</summary> ### [`v5.4.0`](https://togithub.com/mockito/mockito-kotlin/releases/tag/5.4.0) [Compare Source](https://togithub.com/mockito/mockito-kotlin/compare/5.3.1...5.4.0) <sup><sup>*Changelog generated by [Shipkit Changelog Gradle Plugin](https://togithub.com/shipkit/shipkit-changelog)*</sup></sup> ##### 5.4.0 - 2024-07-09 - [2 commit(s)](https://togithub.com/mockito/mockito-kotlin/compare/5.3.1...5.4.0) by Lars - Added value class support [(#&#8203;522)](https://togithub.com/mockito/mockito-kotlin/pull/522) - Update mockito to 5.12 [(#&#8203;521)](https://togithub.com/mockito/mockito-kotlin/pull/521) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjUuMSIsInVwZGF0ZWRJblZlciI6IjM3LjQyNS4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-12 09:40:13 +02:00
mockito-kotlin = "5.4.0"
Replace Gson library with Moshi (#4309) **! ! Warning**: Do not merge before testing every API call and database read involving JSON ! **Gson** is obsolete and has been superseded by **Moshi**. But more importantly, parsing Kotlin objects using Gson is _dangerous_ because Gson uses Java serialization and is **not Kotlin-aware**. This has two main consequences: - Fields of non-null types may end up null at runtime. Parsing will succeed, but the code may crash later with a `NullPointerException` when trying to access a field member; - Default values of constructor parameters are always ignored. When absent, reference types will be null, booleans will be false and integers will be zero. On the other hand, Kotlin-aware parsers like **Moshi** or **Kotlin Serialization** will validate at parsing time that all received fields comply with the Kotlin contract and avoid errors at runtime, making apps more stable and schema mismatches easier to detect (as long as logs are accessible): - Receiving a null value for a non-null type will generate a parsing error; - Optional types are declared explicitly by adding a default value. **A missing value with no default value declaration will generate a parsing error.** Migrating the entity declarations from Gson to Moshi will make the code more robust but is not an easy task because of the semantic differences. With Gson, both nullable and optional fields are represented with a null value. After converting to Moshi, some nullable entities can become non-null with a default value (if they are optional and not nullable), others can stay nullable with no default value (if they are mandatory and nullable), and others can become **nullable with a default value of null** (if they are optional _or_ nullable _or_ both). That third option is the safest bet when it's not clear if a field is optional or not, except for lists which can usually be declared as non-null with a default value of an empty list (I have yet to see a nullable array type in the Mastodon API). Fields that are currently declared as non-null present another challenge. In theory, they should remain as-is and everything will work fine. In practice, **because Gson is not aware of nullable types at all**, it's possible that some non-null fields currently hold a null value in some cases but the app does not report any error because the field is not accessed by Kotlin code in that scenario. After migrating to Moshi however, parsing such a field will now fail early if a null value or no value is received. These fields will have to be identified by heavily testing the app and looking for parsing errors (`JsonDataException`) and/or by going through the Mastodon documentation. A default value needs to be added for missing optional fields, and their type could optionally be changed to nullable, depending on the case. Gson is also currently used to serialize and deserialize objects to and from the local database, which is also challenging because backwards compatibility needs to be preserved. Fortunately, by default Gson omits writing null fields, so a field of type `List<T>?` could be replaced with a field of type `List<T>` with a default value of `emptyList()` and reading back the old data should still work. However, nullable lists that are written directly (not as a field of another object) will still be serialized to JSON as `"null"` so the deserializing code must still be handling null properly. Finally, changing the database schema is out of scope for this pull request, so database entities that also happen to be serialized with Gson will keep their original types even if they could be made non-null as an improvement. In the end this is all for the best, because the app will be more reliable and errors will be easier to detect by showing up earlier with a clear error message. Not to mention the performance benefits of using Moshi compared to Gson. - Replace Gson reflection with Moshi Kotlin codegen to generate all parsers at compile time. - Replace custom `Rfc3339DateJsonAdapter` with the one provided by moshi-adapters. - Replace custom `JsonDeserializer` classes for Enum types with `EnumJsonAdapter.create(T).withUnknownFallback()` from moshi-adapters to support fallback values. - Replace `GuardedBooleanAdapter` with the more generic `GuardedAdapter` which works with any type. Any nullable field may now be annotated with `@Guarded`. - Remove Proguard rules related to Json entities. Each Json entity needs to be annotated with `@JsonClass` with no exception, and adding this annotation will ensure that R8/Proguard will handle the entities properly. - Replace some nullable Boolean fields with non-null Boolean fields with a default value where possible. - Replace some nullable list fields with non-null list fields with a default value of `emptyList()` where possible. - Update `TimelineDao` to perform all Json conversions internally using `Converters` so no Gson or Moshi instance has to be passed to its methods. - ~~Create a custom `DraftAttachmentJsonAdapter` to serialize and deserialize `DraftAttachment` which is a special entity that supports more than one json name per field. A custom adapter is necessary because there is not direct equivalent of `@SerializedName(alternate = [...])` in Moshi.~~ Remove alternate names for some `DraftAttachment` fields which were used as a workaround to deserialize local data in 2-years old builds of Tusky. - Update tests to make them work with Moshi. - Simplify a few `equals()` implementations. - Change a few functions to `val`s - Turn `NetworkModule` into an `object` (since it contains no abstract methods). Please test the app thoroughly before merging. There may be some fields currently declared as mandatory that are actually optional.
2024-04-02 21:01:04 +02:00
moshi = "1.15.1"
fix(deps): update dependency at.connyduck:networkresult-calladapter to v1.2.0 (#4572) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [at.connyduck:networkresult-calladapter](https://togithub.com/connyduck/networkresult-calladapter) | `1.1.0` -> `1.2.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/at.connyduck:networkresult-calladapter/1.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/at.connyduck:networkresult-calladapter/1.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/at.connyduck:networkresult-calladapter/1.1.0/1.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/at.connyduck:networkresult-calladapter/1.1.0/1.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>connyduck/networkresult-calladapter (at.connyduck:networkresult-calladapter)</summary> ### [`v1.2.0`](https://togithub.com/connyduck/networkresult-calladapter/releases/tag/v1.2.0): NetworkResult Calladapter 1.2.0 - New method `NetworkResult<T>.toResult(): Result<T>` to convert a `NetworkResult` to a `kotlin.Result`. - Dependency Updates: - Kotlin 1.9.22 -> 2.0.0 - Kotlin Coroutines 1.8.0 -> 1.8.1 - Retrofit 2.9.0 -> 2.11.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzEuNCIsInVwZGF0ZWRJblZlciI6IjM3LjQzMS40IiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-15 21:48:12 +02:00
networkresult-calladapter = "1.2.0"
Update okhttp monorepo to v4.12.0 (#4276) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.squareup.okhttp3:logging-interceptor](https://square.github.io/okhttp/) ([source](https://togithub.com/square/okhttp)) | `4.11.0` -> `4.12.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.squareup.okhttp3:logging-interceptor/4.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.squareup.okhttp3:logging-interceptor/4.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.squareup.okhttp3:logging-interceptor/4.11.0/4.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.squareup.okhttp3:logging-interceptor/4.11.0/4.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [com.squareup.okhttp3:okhttp](https://square.github.io/okhttp/) ([source](https://togithub.com/square/okhttp)) | `4.11.0` -> `4.12.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.squareup.okhttp3:okhttp/4.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.squareup.okhttp3:okhttp/4.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.squareup.okhttp3:okhttp/4.11.0/4.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.squareup.okhttp3:okhttp/4.11.0/4.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [com.squareup.okhttp3:mockwebserver](https://square.github.io/okhttp/) ([source](https://togithub.com/square/okhttp)) | `4.11.0` -> `4.12.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.squareup.okhttp3:mockwebserver/4.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.squareup.okhttp3:mockwebserver/4.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.squareup.okhttp3:mockwebserver/4.11.0/4.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.squareup.okhttp3:mockwebserver/4.11.0/4.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMDAuMCIsInVwZGF0ZWRJblZlciI6IjM3LjIwMC4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCJ9--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-23 20:02:17 +01:00
okhttp = "4.12.0"
okio = "3.9.0"
fix(deps): update retrofit to v2.11.0 (#4342) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.squareup.retrofit2:retrofit](https://togithub.com/square/retrofit) | `2.10.0` -> `2.11.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.squareup.retrofit2:retrofit/2.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.squareup.retrofit2:retrofit/2.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.squareup.retrofit2:retrofit/2.10.0/2.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.squareup.retrofit2:retrofit/2.10.0/2.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [com.squareup.retrofit2:converter-gson](https://togithub.com/square/retrofit) | `2.10.0` -> `2.11.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.squareup.retrofit2:converter-gson/2.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.squareup.retrofit2:converter-gson/2.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.squareup.retrofit2:converter-gson/2.10.0/2.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.squareup.retrofit2:converter-gson/2.10.0/2.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>square/retrofit (com.squareup.retrofit2:retrofit)</summary> ### [`v2.11.0`](https://togithub.com/square/retrofit/blob/HEAD/CHANGELOG.md#2110---2024-03-28) [Compare Source](https://togithub.com/square/retrofit/compare/2.10.0...2.11.0) **New** - The built-in `OptionalConverterFactory` is now public to allow installing it before other converters which consume all types (e.g., Moshi, Gson, Jackson, etc.). **Fixed** - Ensure that exceptions thrown from failure to parse method annotations can be observed by multiple threads/callers. Previously only the first caller would see the actual parsing exception and other callers would get a cryptic `ClassCastException`. </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNjkuMiIsInVwZGF0ZWRJblZlciI6IjM3LjI2OS4yIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCJ9--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-29 10:16:03 +01:00
retrofit = "2.11.0"
Update dependency org.robolectric:robolectric to v4.13 (#4551) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [org.robolectric:robolectric](http://robolectric.org) ([source](https://togithub.com/robolectric/robolectric)) | `4.12.2` -> `4.13` | [![age](https://developer.mend.io/api/mc/badges/age/maven/org.robolectric:robolectric/4.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.robolectric:robolectric/4.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.robolectric:robolectric/4.12.2/4.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.robolectric:robolectric/4.12.2/4.13?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjEuOSIsInVwZGF0ZWRJblZlciI6IjM3LjQyMS45IiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-12 09:40:03 +02:00
robolectric = "4.13"
2023-09-10 10:05:11 +02:00
sparkbutton = "4.2.0"
Update dependency com.github.MikeOrtiz:TouchImageView to v3.6 (#4097) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.github.MikeOrtiz:TouchImageView](https://togithub.com/MikeOrtiz/TouchImageView) | `3.5` -> `3.6` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.github.MikeOrtiz:TouchImageView/3.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.github.MikeOrtiz:TouchImageView/3.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.github.MikeOrtiz:TouchImageView/3.5/3.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.github.MikeOrtiz:TouchImageView/3.5/3.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>MikeOrtiz/TouchImageView (com.github.MikeOrtiz:TouchImageView)</summary> ### [`v3.6`](https://togithub.com/MikeOrtiz/TouchImageView/releases/tag/3.6) [Compare Source](https://togithub.com/MikeOrtiz/TouchImageView/compare/3.5...3.6) <!-- Release notes generated using configuration in .github/release.yml at 3.6 --> #### What's Changed ##### Exciting New Features 🎉 - api34 by [@&#8203;hannesa2](https://togithub.com/hannesa2) in [https://github.com/MikeOrtiz/TouchImageView/pull/555](https://togithub.com/MikeOrtiz/TouchImageView/pull/555) ##### Other Changes - Bump androidx.recyclerview:recyclerview from 1.3.0 to 1.3.1 by [@&#8203;dependabot](https://togithub.com/dependabot) in [https://github.com/MikeOrtiz/TouchImageView/pull/546](https://togithub.com/MikeOrtiz/TouchImageView/pull/546) - Bump Kotlin 1.9 by [@&#8203;hannesa2](https://togithub.com/hannesa2) in [https://github.com/MikeOrtiz/TouchImageView/pull/548](https://togithub.com/MikeOrtiz/TouchImageView/pull/548) - Bump com.github.bumptech.glide:glide from 4.15.1 to 4.16.0 by [@&#8203;dependabot](https://togithub.com/dependabot) in [https://github.com/MikeOrtiz/TouchImageView/pull/549](https://togithub.com/MikeOrtiz/TouchImageView/pull/549) - Bump kotlin_version from 1.9.0 to 1.9.10 by [@&#8203;dependabot](https://togithub.com/dependabot) in [https://github.com/MikeOrtiz/TouchImageView/pull/551](https://togithub.com/MikeOrtiz/TouchImageView/pull/551) - Bump actions/checkout from 3 to 4 by [@&#8203;dependabot](https://togithub.com/dependabot) in [https://github.com/MikeOrtiz/TouchImageView/pull/553](https://togithub.com/MikeOrtiz/TouchImageView/pull/553) - Fix compileSdk deprecation by [@&#8203;hannesa2](https://togithub.com/hannesa2) in [https://github.com/MikeOrtiz/TouchImageView/pull/556](https://togithub.com/MikeOrtiz/TouchImageView/pull/556) - Remove Froyo method by [@&#8203;hannesa2](https://togithub.com/hannesa2) in [https://github.com/MikeOrtiz/TouchImageView/pull/557](https://togithub.com/MikeOrtiz/TouchImageView/pull/557) - Bump com.android.tools.build:gradle from 8.1.0 to 8.1.1 by [@&#8203;dependabot](https://togithub.com/dependabot) in [https://github.com/MikeOrtiz/TouchImageView/pull/550](https://togithub.com/MikeOrtiz/TouchImageView/pull/550) - Bump androidx.core:core-ktx from 1.10.1 to 1.12.0 by [@&#8203;dependabot](https://togithub.com/dependabot) in [https://github.com/MikeOrtiz/TouchImageView/pull/552](https://togithub.com/MikeOrtiz/TouchImageView/pull/552) **Full Changelog**: https://github.com/MikeOrtiz/TouchImageView/compare/3.5...3.6 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMS41IiwidXBkYXRlZEluVmVyIjoiMzcuMTUzLjIiLCJ0YXJnZXRCcmFuY2giOiJkZXZlbG9wIn0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-23 10:29:37 +01:00
touchimageview = "3.6"
Update dependency com.google.truth:truth to v1.4.4 (#4570) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.truth:truth](https://togithub.com/google/truth) | `1.4.3` -> `1.4.4` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.truth:truth/1.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.google.truth:truth/1.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.google.truth:truth/1.4.3/1.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.truth:truth/1.4.3/1.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>google/truth (com.google.truth:truth)</summary> ### [`v1.4.4`](https://togithub.com/google/truth/releases/tag/v1.4.4) - Annotated the rest of the main package for nullness, and moved the `@NullMarked` annotation from individual classes up to the package to avoid [a warning under `--release 8`](https://togithub.com/google/truth/issues/1320). ([`e107aea`](https://togithub.com/google/truth/commit/e107aeadc)) - Improved the failure message for `matches` to conditionally suggest using `containsMatch`. ([`7e9fc7a`](https://togithub.com/google/truth/commit/7e9fc7aec)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjUuMSIsInVwZGF0ZWRJblZlciI6IjM3LjQyNS4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-14 09:02:19 +02:00
truth = "1.4.4"
Update dependency app.cash.turbine:turbine to v1.1.0 (#4310) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [app.cash.turbine:turbine](https://togithub.com/cashapp/turbine) | `1.0.0` -> `1.1.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/app.cash.turbine:turbine/1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/app.cash.turbine:turbine/1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/app.cash.turbine:turbine/1.0.0/1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/app.cash.turbine:turbine/1.0.0/1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>cashapp/turbine (app.cash.turbine:turbine)</summary> ### [`v1.1.0`](https://togithub.com/cashapp/turbine/blob/HEAD/CHANGELOG.md#110---2024-03-06) [Compare Source](https://togithub.com/cashapp/turbine/compare/1.0.0...1.1.0) [1.1.0]: https://togithub.com/cashapp/turbine/releases/tag/1.1.0 ##### Changed - Add `wasmJs` target, remove `iosArm32` and `watchosX86` targets. - Throw unconsumed events if scope is externally canceled. </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMjcuMiIsInVwZGF0ZWRJblZlciI6IjM3LjIyNy4yIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCJ9--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-09 13:32:30 +01:00
turbine = "1.1.0"
Update dependency com.github.UnifiedPush:android-connector to v2.4.0 (#4098) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.github.UnifiedPush:android-connector](https://togithub.com/UnifiedPush/android-connector) | `2.1.1` -> `2.4.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.github.UnifiedPush:android-connector/2.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.github.UnifiedPush:android-connector/2.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.github.UnifiedPush:android-connector/2.1.1/2.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.github.UnifiedPush:android-connector/2.1.1/2.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>UnifiedPush/android-connector (com.github.UnifiedPush:android-connector)</summary> ### [`v2.4.0`](https://togithub.com/UnifiedPush/android-connector/releases/tag/2.4.0) [Compare Source](https://togithub.com/UnifiedPush/android-connector/compare/2.3.1...2.4.0) - Use jvmToolchain(8) with kotlin 1.7.20 to improve compatibility - Remove FCM embedded distributor from distributors if PlayServices is not installed ### [`v2.3.1`](https://togithub.com/UnifiedPush/android-connector/releases/tag/2.3.1) [Compare Source](https://togithub.com/UnifiedPush/android-connector/compare/2.3.0...2.3.1) - Make DEFAULT_FEATURES static ##### 2.3.0 changes: - Change default features to bytes_message :warning: - Introduce getAckDistributor and getSavedDistributor, deprecate getDistributor :warning: - Fix inconsistent JVM-target compatibility - Bump dependencies ### [`v2.3.0`](https://togithub.com/UnifiedPush/android-connector/releases/tag/2.3.0) [Compare Source](https://togithub.com/UnifiedPush/android-connector/compare/2.2.0...2.3.0) - Change default features to bytes_message :warning: - Introduce getAckDistributor and getSavedDistributor, deprecate getDistributor :warning: - Fix inconsistent JVM-target compatibility - Bump dependencies ### [`v2.2.0`](https://togithub.com/UnifiedPush/android-connector/releases/tag/2.2.0) [Compare Source](https://togithub.com/UnifiedPush/android-connector/compare/2.1.1...2.2.0) Bump dependencies Target SDK 34 Avoid race conditions with token, instances and distributors </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMS41IiwidXBkYXRlZEluVmVyIjoiMzcuMTUzLjIiLCJ0YXJnZXRCcmFuY2giOiJkZXZlbG9wIn0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-23 10:53:31 +01:00
unified-push = "2.4.0"
xmlwriter = "1.0.4"
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
chore(deps): update plugin google-ksp to v2.0.0-1.0.24 (#4591) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.devtools.ksp](https://goo.gle/ksp) ([source](https://togithub.com/google/ksp)) | `2.0.0-1.0.23` -> `2.0.0-1.0.24` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.devtools.ksp/2.0.0-1.0.24?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.google.devtools.ksp/2.0.0-1.0.24?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.google.devtools.ksp/2.0.0-1.0.23/2.0.0-1.0.24?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.devtools.ksp/2.0.0-1.0.23/2.0.0-1.0.24?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>google/ksp (com.google.devtools.ksp)</summary> ### [`v2.0.0-1.0.24`](https://togithub.com/google/ksp/releases/tag/2.0.0-1.0.24) [Compare Source](https://togithub.com/google/ksp/compare/2.0.0-1.0.23...2.0.0-1.0.24) ##### What's Changed [#&#8203;2013](https://togithub.com/google/ksp/issues/2013) Handle edge cases of KtAnnotated.annotations [#&#8203;2009](https://togithub.com/google/ksp/issues/2009) Fix :kotlin-analysis-api:shadowJar failing on Windows [#&#8203;2006](https://togithub.com/google/ksp/issues/2006) Use symbol-processing-aa-embeddable in Gradle ##### Bugs Fixed [#&#8203;1956](https://togithub.com/google/ksp/issues/1956) IllegalAccessError in Dagger with KSP2.0.0-1.0.22 and KSP2 [#&#8203;1998](https://togithub.com/google/ksp/issues/1998) KSP2 version 2.0.0-1.0.23 crashes on Moshi codegen with NoSuchElementException: Collection contains no element matching the predicate. **Full Changelog**: https://github.com/google/ksp/compare/e8807446b16ba19e110cc23f6b852054614f7ec8...c63864cc1268bcb1c83e058494b6ff4b25947251 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View the [repository job log](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40NDAuNyIsInVwZGF0ZWRJblZlciI6IjM3LjQ0MC43IiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-02 17:09:09 +02:00
google-ksp = "com.google.devtools.ksp:2.0.0-1.0.24"
Replace Dagger-Android with Hilt and remove Kapt (#4423) Hilt is an annotation processor built on top of Dagger which allows to remove all the Android dependency injection boilerplate code (currently around 900 lines) by writing it for us. Hilt can use KSP instead of Kapt so Kapt can be completely removed from the project. Kapt is slow, deprecated and has a few compatibility issues. Removing Kapt will improve build times since no Java stubs have to be generated for Kotlin classes anymore (Note that KSP also processes annotations in Java classes so it can completely replace Kapt). - Remove all modules related to manual dependency injection configuration. - Rename `AppModule` to `StorageModule` since it now only contains configuration to retrieve the DataBase and SharedPreferences. - Annotate all entry points (Activities, Fragments, BroadcastReceivers and Services) with `@AndroidEntryPoint`. - Annotate all injected ViewModels with `@HiltViewModel` and replace the custom ViewModel Factory with the default one (which integrates with the one generated by Hilt). - Add a public field to allow overriding the default ViewModelProvider.Factory in `BaseActivity` in tests. - Annotate tested Activities with `@OptionalInject` since Activity tests currently rely on the Activities not being injected automatically. - Annotate injected `Context` arguments with `@ApplicationContext`. Hilt provides the `Context` binding automatically but requires to specify if the Application or Activity Context is wanted. - Add WorkManager Hilt integration so all Workers are injected by Hilt automatically using `HiltWorkerFactory`. - Lazily initialize WorkManager in `TuskyApplication`. - Remove Kapt and Kapt workarounds. - ~~Remove toolchain configuration for Java 21. Toolchains force the Java bytecode to match the JDK version used to build the project, and apparently Hilt doesn't run inside the toolchain so cannot process the source code if the JDK version of the toolchain is higher than the JDK used to run Gradle. [And configuring a toolchain for an older Java version causes other issues](https://jakewharton.com/gradle-toolchains-are-rarely-a-good-idea/). **Removing toolchains configuration doesn't prevent the project from being built using JDK 21** or more recent versions but allows to build the project using older JDKs as well.~~ Added a fix to allow Hilt to properly use the JDK toolchain. - ~~Set the Java and Kotlin bytecode target to Java 17. The standard bytecode target for Android projects is usually Java 8 or 11 (any higher version doesn't provide any benefit but may cause compatibility issues). However, since the app currently uses a library built against Java 17 bytecode (`networkresult-calladapter`), it needs to target at least Java 17 bytecode as well.~~ - Update the Dagger 2 URL in the licenses screen. Hilt is part of Dagger 2 so the label wasn't changed.
2024-05-10 15:55:07 +02:00
hilt-android = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" }
Update plugin ktlint to v12.1.1 (#4428) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | org.jlleitschuh.gradle.ktlint | `12.1.0` -> `12.1.1` | [![age](https://developer.mend.io/api/mc/badges/age/maven/org.jlleitschuh.gradle.ktlint/12.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jlleitschuh.gradle.ktlint/12.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jlleitschuh.gradle.ktlint/12.1.0/12.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jlleitschuh.gradle.ktlint/12.1.0/12.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/tuskyapp/Tusky). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNDAuMTAiLCJ1cGRhdGVkSW5WZXIiOiIzNy4zNDAuMTAiLCJ0YXJnZXRCcmFuY2giOiJkZXZlbG9wIiwibGFiZWxzIjpbXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-10 15:55:54 +02:00
ktlint = "org.jlleitschuh.gradle.ktlint:12.1.1"
[libraries]
android-material = { module = "com.google.android.material:material", version.ref = "material" }
androidx-activity = { module = "androidx.activity:activity", version.ref = "androidx-activity" }
androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" }
androidx-browser = { module = "androidx.browser:browser", version.ref = "androidx-browser" }
androidx-cardview = { module = "androidx.cardview:cardview", version.ref = "androidx-cardview" }
androidx-constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "androidx-constraintlayout" }
androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-core" }
androidx-core-splashscreen = { module = "androidx.core:core-splashscreen", version.ref = "androidx-splashscreen" }
androidx-core-testing = { module = "androidx.arch.core:core-testing", version.ref = "androidx-testing" }
androidx-drawerlayout = { group = "androidx.drawerlayout", name = "drawerlayout", version.ref = "androidx-drawerlayout" }
androidx-emoji2-core = { module = "androidx.emoji2:emoji2", version.ref = "emoji2" }
androidx-emoji2-views-core = { module = "androidx.emoji2:emoji2-views", version.ref = "emoji2" }
androidx-emoji2-view-helper = { module = "androidx.emoji2:emoji2-views-helper", version.ref = "emoji2" }
androidx-exifinterface = { module = "androidx.exifinterface:exifinterface", version.ref = "androidx-exifinterface" }
androidx-fragment-ktx = { module = "androidx.fragment:fragment-ktx", version.ref = "androidx-fragment" }
Replace Dagger-Android with Hilt and remove Kapt (#4423) Hilt is an annotation processor built on top of Dagger which allows to remove all the Android dependency injection boilerplate code (currently around 900 lines) by writing it for us. Hilt can use KSP instead of Kapt so Kapt can be completely removed from the project. Kapt is slow, deprecated and has a few compatibility issues. Removing Kapt will improve build times since no Java stubs have to be generated for Kotlin classes anymore (Note that KSP also processes annotations in Java classes so it can completely replace Kapt). - Remove all modules related to manual dependency injection configuration. - Rename `AppModule` to `StorageModule` since it now only contains configuration to retrieve the DataBase and SharedPreferences. - Annotate all entry points (Activities, Fragments, BroadcastReceivers and Services) with `@AndroidEntryPoint`. - Annotate all injected ViewModels with `@HiltViewModel` and replace the custom ViewModel Factory with the default one (which integrates with the one generated by Hilt). - Add a public field to allow overriding the default ViewModelProvider.Factory in `BaseActivity` in tests. - Annotate tested Activities with `@OptionalInject` since Activity tests currently rely on the Activities not being injected automatically. - Annotate injected `Context` arguments with `@ApplicationContext`. Hilt provides the `Context` binding automatically but requires to specify if the Application or Activity Context is wanted. - Add WorkManager Hilt integration so all Workers are injected by Hilt automatically using `HiltWorkerFactory`. - Lazily initialize WorkManager in `TuskyApplication`. - Remove Kapt and Kapt workarounds. - ~~Remove toolchain configuration for Java 21. Toolchains force the Java bytecode to match the JDK version used to build the project, and apparently Hilt doesn't run inside the toolchain so cannot process the source code if the JDK version of the toolchain is higher than the JDK used to run Gradle. [And configuring a toolchain for an older Java version causes other issues](https://jakewharton.com/gradle-toolchains-are-rarely-a-good-idea/). **Removing toolchains configuration doesn't prevent the project from being built using JDK 21** or more recent versions but allows to build the project using older JDKs as well.~~ Added a fix to allow Hilt to properly use the JDK toolchain. - ~~Set the Java and Kotlin bytecode target to Java 17. The standard bytecode target for Android projects is usually Java 8 or 11 (any higher version doesn't provide any benefit but may cause compatibility issues). However, since the app currently uses a library built against Java 17 bytecode (`networkresult-calladapter`), it needs to target at least Java 17 bytecode as well.~~ - Update the Dagger 2 URL in the licenses screen. Hilt is part of Dagger 2 so the label wasn't changed.
2024-05-10 15:55:07 +02:00
androidx-hilt-compiler = { module = "androidx.hilt:hilt-compiler", version.ref = "androidx-hilt" }
androidx-hilt-work = { module = "androidx.hilt:hilt-work", version.ref = "androidx-hilt" }
androidx-lifecycle-viewmodel-ktx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "androidx-lifecycle" }
androidx-media3-exoplayer = { module = "androidx.media3:media3-exoplayer", version.ref = "androidx-media3" }
androidx-media3-datasource-okhttp = { module = "androidx.media3:media3-datasource-okhttp", version.ref = "androidx-media3" }
androidx-media3-ui = { module = "androidx.media3:media3-ui", version.ref = "androidx-media3" }
androidx-paging-runtime-ktx = { module = "androidx.paging:paging-runtime-ktx", version.ref = "androidx-paging" }
androidx-preference-ktx = { module = "androidx.preference:preference-ktx", version.ref = "androidx-preference" }
androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "androidx-room" }
androidx-room-paging = { module = "androidx.room:room-paging", version.ref = "androidx-room" }
androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "androidx-room" }
androidx-room-testing = { module = "androidx.room:room-testing", version.ref = "androidx-room" }
androidx-recyclerview = { module = "androidx.recyclerview:recyclerview", version.ref = "androidx-recyclerview" }
androidx-sharetarget = { module = "androidx.sharetarget:sharetarget", version.ref = "androidx-sharetarget" }
androidx-swiperefreshlayout = { module = "androidx.swiperefreshlayout:swiperefreshlayout", version.ref = "androidx-swiperefresh-layout" }
androidx-test-junit = { module = "androidx.test.ext:junit", version.ref = "androidx-junit" }
androidx-viewpager2 = { module = "androidx.viewpager2:viewpager2", version.ref = "androidx-viewpager2" }
androidx-work-runtime-ktx = { module = "androidx.work:work-runtime-ktx", version.ref = "androidx-work" }
androidx-work-testing = { module = "androidx.work:work-testing", version.ref = "androidx-work" }
bouncycastle = { module = "org.bouncycastle:bcprov-jdk15on", version.ref = "bouncycastle" }
conscrypt-android = { module = "org.conscrypt:conscrypt-android", version.ref = "conscrypt" }
Replace Dagger-Android with Hilt and remove Kapt (#4423) Hilt is an annotation processor built on top of Dagger which allows to remove all the Android dependency injection boilerplate code (currently around 900 lines) by writing it for us. Hilt can use KSP instead of Kapt so Kapt can be completely removed from the project. Kapt is slow, deprecated and has a few compatibility issues. Removing Kapt will improve build times since no Java stubs have to be generated for Kotlin classes anymore (Note that KSP also processes annotations in Java classes so it can completely replace Kapt). - Remove all modules related to manual dependency injection configuration. - Rename `AppModule` to `StorageModule` since it now only contains configuration to retrieve the DataBase and SharedPreferences. - Annotate all entry points (Activities, Fragments, BroadcastReceivers and Services) with `@AndroidEntryPoint`. - Annotate all injected ViewModels with `@HiltViewModel` and replace the custom ViewModel Factory with the default one (which integrates with the one generated by Hilt). - Add a public field to allow overriding the default ViewModelProvider.Factory in `BaseActivity` in tests. - Annotate tested Activities with `@OptionalInject` since Activity tests currently rely on the Activities not being injected automatically. - Annotate injected `Context` arguments with `@ApplicationContext`. Hilt provides the `Context` binding automatically but requires to specify if the Application or Activity Context is wanted. - Add WorkManager Hilt integration so all Workers are injected by Hilt automatically using `HiltWorkerFactory`. - Lazily initialize WorkManager in `TuskyApplication`. - Remove Kapt and Kapt workarounds. - ~~Remove toolchain configuration for Java 21. Toolchains force the Java bytecode to match the JDK version used to build the project, and apparently Hilt doesn't run inside the toolchain so cannot process the source code if the JDK version of the toolchain is higher than the JDK used to run Gradle. [And configuring a toolchain for an older Java version causes other issues](https://jakewharton.com/gradle-toolchains-are-rarely-a-good-idea/). **Removing toolchains configuration doesn't prevent the project from being built using JDK 21** or more recent versions but allows to build the project using older JDKs as well.~~ Added a fix to allow Hilt to properly use the JDK toolchain. - ~~Set the Java and Kotlin bytecode target to Java 17. The standard bytecode target for Android projects is usually Java 8 or 11 (any higher version doesn't provide any benefit but may cause compatibility issues). However, since the app currently uses a library built against Java 17 bytecode (`networkresult-calladapter`), it needs to target at least Java 17 bytecode as well.~~ - Update the Dagger 2 URL in the licenses screen. Hilt is part of Dagger 2 so the label wasn't changed.
2024-05-10 15:55:07 +02:00
hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" }
hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler", version.ref = "hilt" }
diffx = { module = "org.pageseeder.diffx:pso-diffx", version.ref = "diffx" }
espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "espresso" }
filemojicompat-core = { module = "de.c1710:filemojicompat", version.ref = "filemoji-compat" }
filemojicompat-defaults = { module = "de.c1710:filemojicompat-defaults", version.ref = "filemoji-compat" }
filemojicompat-ui = { module = "de.c1710:filemojicompat-ui", version.ref = "filemoji-compat" }
glide-animation-plugin = { module = "com.github.penfeizhou.android.animation:glide-plugin", version.ref = "glide-animation-plugin" }
2023-07-11 15:34:14 +02:00
glide-compiler = { module = "com.github.bumptech.glide:ksp", version.ref = "glide" }
glide-core = { module = "com.github.bumptech.glide:glide", version.ref = "glide" }
glide-okhttp3-integration = { module = "com.github.bumptech.glide:okhttp3-integration", version.ref = "glide" }
kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "coroutines" }
kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutines" }
image-cropper = { module = "com.github.CanHub:Android-Image-Cropper", version.ref = "image-cropper" }
material-drawer-core = { module = "com.mikepenz:materialdrawer", version.ref = "material-drawer" }
material-drawer-iconics = { module = "com.mikepenz:materialdrawer-iconics", version.ref = "material-drawer" }
material-typeface = { module = "com.mikepenz:google-material-typeface", version.ref = "material-typeface" }
mockito-kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version.ref = "mockito-kotlin" }
mockito-inline = { module = "org.mockito:mockito-inline", version.ref = "mockito-inline" }
mockwebserver = { module = "com.squareup.okhttp3:mockwebserver", version.ref = "okhttp" }
Replace Gson library with Moshi (#4309) **! ! Warning**: Do not merge before testing every API call and database read involving JSON ! **Gson** is obsolete and has been superseded by **Moshi**. But more importantly, parsing Kotlin objects using Gson is _dangerous_ because Gson uses Java serialization and is **not Kotlin-aware**. This has two main consequences: - Fields of non-null types may end up null at runtime. Parsing will succeed, but the code may crash later with a `NullPointerException` when trying to access a field member; - Default values of constructor parameters are always ignored. When absent, reference types will be null, booleans will be false and integers will be zero. On the other hand, Kotlin-aware parsers like **Moshi** or **Kotlin Serialization** will validate at parsing time that all received fields comply with the Kotlin contract and avoid errors at runtime, making apps more stable and schema mismatches easier to detect (as long as logs are accessible): - Receiving a null value for a non-null type will generate a parsing error; - Optional types are declared explicitly by adding a default value. **A missing value with no default value declaration will generate a parsing error.** Migrating the entity declarations from Gson to Moshi will make the code more robust but is not an easy task because of the semantic differences. With Gson, both nullable and optional fields are represented with a null value. After converting to Moshi, some nullable entities can become non-null with a default value (if they are optional and not nullable), others can stay nullable with no default value (if they are mandatory and nullable), and others can become **nullable with a default value of null** (if they are optional _or_ nullable _or_ both). That third option is the safest bet when it's not clear if a field is optional or not, except for lists which can usually be declared as non-null with a default value of an empty list (I have yet to see a nullable array type in the Mastodon API). Fields that are currently declared as non-null present another challenge. In theory, they should remain as-is and everything will work fine. In practice, **because Gson is not aware of nullable types at all**, it's possible that some non-null fields currently hold a null value in some cases but the app does not report any error because the field is not accessed by Kotlin code in that scenario. After migrating to Moshi however, parsing such a field will now fail early if a null value or no value is received. These fields will have to be identified by heavily testing the app and looking for parsing errors (`JsonDataException`) and/or by going through the Mastodon documentation. A default value needs to be added for missing optional fields, and their type could optionally be changed to nullable, depending on the case. Gson is also currently used to serialize and deserialize objects to and from the local database, which is also challenging because backwards compatibility needs to be preserved. Fortunately, by default Gson omits writing null fields, so a field of type `List<T>?` could be replaced with a field of type `List<T>` with a default value of `emptyList()` and reading back the old data should still work. However, nullable lists that are written directly (not as a field of another object) will still be serialized to JSON as `"null"` so the deserializing code must still be handling null properly. Finally, changing the database schema is out of scope for this pull request, so database entities that also happen to be serialized with Gson will keep their original types even if they could be made non-null as an improvement. In the end this is all for the best, because the app will be more reliable and errors will be easier to detect by showing up earlier with a clear error message. Not to mention the performance benefits of using Moshi compared to Gson. - Replace Gson reflection with Moshi Kotlin codegen to generate all parsers at compile time. - Replace custom `Rfc3339DateJsonAdapter` with the one provided by moshi-adapters. - Replace custom `JsonDeserializer` classes for Enum types with `EnumJsonAdapter.create(T).withUnknownFallback()` from moshi-adapters to support fallback values. - Replace `GuardedBooleanAdapter` with the more generic `GuardedAdapter` which works with any type. Any nullable field may now be annotated with `@Guarded`. - Remove Proguard rules related to Json entities. Each Json entity needs to be annotated with `@JsonClass` with no exception, and adding this annotation will ensure that R8/Proguard will handle the entities properly. - Replace some nullable Boolean fields with non-null Boolean fields with a default value where possible. - Replace some nullable list fields with non-null list fields with a default value of `emptyList()` where possible. - Update `TimelineDao` to perform all Json conversions internally using `Converters` so no Gson or Moshi instance has to be passed to its methods. - ~~Create a custom `DraftAttachmentJsonAdapter` to serialize and deserialize `DraftAttachment` which is a special entity that supports more than one json name per field. A custom adapter is necessary because there is not direct equivalent of `@SerializedName(alternate = [...])` in Moshi.~~ Remove alternate names for some `DraftAttachment` fields which were used as a workaround to deserialize local data in 2-years old builds of Tusky. - Update tests to make them work with Moshi. - Simplify a few `equals()` implementations. - Change a few functions to `val`s - Turn `NetworkModule` into an `object` (since it contains no abstract methods). Please test the app thoroughly before merging. There may be some fields currently declared as mandatory that are actually optional.
2024-04-02 21:01:04 +02:00
moshi-core = { module = "com.squareup.moshi:moshi", version.ref = "moshi" }
moshi-adapters = { module = "com.squareup.moshi:moshi-adapters", version.ref = "moshi" }
moshi-kotlin-codegen = { module = "com.squareup.moshi:moshi-kotlin-codegen", version.ref = "moshi" }
networkresult-calladapter = { module = "at.connyduck:networkresult-calladapter", version.ref = "networkresult-calladapter" }
okhttp-core = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" }
okhttp-logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "okhttp" }
okio = { module = "com.squareup.okio:okio", version.ref = "okio" }
Replace Gson library with Moshi (#4309) **! ! Warning**: Do not merge before testing every API call and database read involving JSON ! **Gson** is obsolete and has been superseded by **Moshi**. But more importantly, parsing Kotlin objects using Gson is _dangerous_ because Gson uses Java serialization and is **not Kotlin-aware**. This has two main consequences: - Fields of non-null types may end up null at runtime. Parsing will succeed, but the code may crash later with a `NullPointerException` when trying to access a field member; - Default values of constructor parameters are always ignored. When absent, reference types will be null, booleans will be false and integers will be zero. On the other hand, Kotlin-aware parsers like **Moshi** or **Kotlin Serialization** will validate at parsing time that all received fields comply with the Kotlin contract and avoid errors at runtime, making apps more stable and schema mismatches easier to detect (as long as logs are accessible): - Receiving a null value for a non-null type will generate a parsing error; - Optional types are declared explicitly by adding a default value. **A missing value with no default value declaration will generate a parsing error.** Migrating the entity declarations from Gson to Moshi will make the code more robust but is not an easy task because of the semantic differences. With Gson, both nullable and optional fields are represented with a null value. After converting to Moshi, some nullable entities can become non-null with a default value (if they are optional and not nullable), others can stay nullable with no default value (if they are mandatory and nullable), and others can become **nullable with a default value of null** (if they are optional _or_ nullable _or_ both). That third option is the safest bet when it's not clear if a field is optional or not, except for lists which can usually be declared as non-null with a default value of an empty list (I have yet to see a nullable array type in the Mastodon API). Fields that are currently declared as non-null present another challenge. In theory, they should remain as-is and everything will work fine. In practice, **because Gson is not aware of nullable types at all**, it's possible that some non-null fields currently hold a null value in some cases but the app does not report any error because the field is not accessed by Kotlin code in that scenario. After migrating to Moshi however, parsing such a field will now fail early if a null value or no value is received. These fields will have to be identified by heavily testing the app and looking for parsing errors (`JsonDataException`) and/or by going through the Mastodon documentation. A default value needs to be added for missing optional fields, and their type could optionally be changed to nullable, depending on the case. Gson is also currently used to serialize and deserialize objects to and from the local database, which is also challenging because backwards compatibility needs to be preserved. Fortunately, by default Gson omits writing null fields, so a field of type `List<T>?` could be replaced with a field of type `List<T>` with a default value of `emptyList()` and reading back the old data should still work. However, nullable lists that are written directly (not as a field of another object) will still be serialized to JSON as `"null"` so the deserializing code must still be handling null properly. Finally, changing the database schema is out of scope for this pull request, so database entities that also happen to be serialized with Gson will keep their original types even if they could be made non-null as an improvement. In the end this is all for the best, because the app will be more reliable and errors will be easier to detect by showing up earlier with a clear error message. Not to mention the performance benefits of using Moshi compared to Gson. - Replace Gson reflection with Moshi Kotlin codegen to generate all parsers at compile time. - Replace custom `Rfc3339DateJsonAdapter` with the one provided by moshi-adapters. - Replace custom `JsonDeserializer` classes for Enum types with `EnumJsonAdapter.create(T).withUnknownFallback()` from moshi-adapters to support fallback values. - Replace `GuardedBooleanAdapter` with the more generic `GuardedAdapter` which works with any type. Any nullable field may now be annotated with `@Guarded`. - Remove Proguard rules related to Json entities. Each Json entity needs to be annotated with `@JsonClass` with no exception, and adding this annotation will ensure that R8/Proguard will handle the entities properly. - Replace some nullable Boolean fields with non-null Boolean fields with a default value where possible. - Replace some nullable list fields with non-null list fields with a default value of `emptyList()` where possible. - Update `TimelineDao` to perform all Json conversions internally using `Converters` so no Gson or Moshi instance has to be passed to its methods. - ~~Create a custom `DraftAttachmentJsonAdapter` to serialize and deserialize `DraftAttachment` which is a special entity that supports more than one json name per field. A custom adapter is necessary because there is not direct equivalent of `@SerializedName(alternate = [...])` in Moshi.~~ Remove alternate names for some `DraftAttachment` fields which were used as a workaround to deserialize local data in 2-years old builds of Tusky. - Update tests to make them work with Moshi. - Simplify a few `equals()` implementations. - Change a few functions to `val`s - Turn `NetworkModule` into an `object` (since it contains no abstract methods). Please test the app thoroughly before merging. There may be some fields currently declared as mandatory that are actually optional.
2024-04-02 21:01:04 +02:00
retrofit-converter-moshi = { module = "com.squareup.retrofit2:converter-moshi", version.ref = "retrofit" }
retrofit-core = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" }
robolectric = { module = "org.robolectric:robolectric", version.ref = "robolectric" }
2023-09-10 10:05:11 +02:00
sparkbutton = { module = "at.connyduck.sparkbutton:sparkbutton", version.ref = "sparkbutton" }
touchimageview = { module = "com.github.MikeOrtiz:TouchImageView", version.ref = "touchimageview" }
Convert NotificationsFragment and related code to Kotlin, use the Paging library (#3159) * Unmodified output from "Convert Java to Kotlin" on NotificationsFragment.java * Bare minimum changes to get this to compile and run - Use `lateinit` for `eventhub`, `adapter`, `preferences`, and `scrolllistener` - Removed override for accountManager, it can be used from the superclass - Add `?.` where non-nullity could not (yet) be guaranteed - Remove `?` from type lists where non-nullity is guaranteed - Explicitly convert lists to mutable where necessary - Delete unused function `findReplyPosition` * Remove all unnecessary non-null (!!) assertions The previous change meant some values are no longer nullable. Remove the non-null assertions. * Lint ListStatusAccessibilityDelegate call - Remove redundant constructor - Move block outside of `()` * Use `let` when handling compose button visibility on scroll * Replace a `requireNonNull` with `!!` * Remove redundant return values * Remove or rename unused lambda parameters * Remove unnecessary type parameters * Remove unnecessary null checks * Replace cascading-if statement with `when` * Simplify calculation of `topId` * Use more appropriate list properties and methods - Access the last value with `.last()` - Access the last index with `.lastIndex` - Replace logical-chain with `asRightOrNull` and `?.` - `.isNotEmpty()`, not `!...isEmpty()` * Inline unnecessary variable * Use PrefKeys constants instead of bare strings * Use `requireContext()` instead of `context!!` * Replace deprecated `onActivityCreated()` with `onViewCreated()` * Remove unnecessary variable setting * Replace `size == 0` check with `isEmpty()` * Format with ktlint, no functionality changes * Convert NotifcationsAdapter to Kotlin Does not compile, this is the unchanged output of the "Convert to Kotlin" function * Minimum changes to get NotificationsAdapter to compile * Remove unnecessary visibility modifiers * Use `isNotEmpty()` * Remove unused lambda parameters * Convert cascading-if to `when` * Simplifiy assignment op * Use explicit argument names with `copy()` * Use `.firstOrNull()` instead of `if` * Mark as lateinit to avoid unnecessary null checks * Format with ktlint, whitespace changes only * Bare minimum necessary to demonstrate paging in notifications Create `NotificationsPagingSource`. This uses a new `notifications2()` API call, which will exist until all the code has been adapted. Instead of using placeholders, Create `NotificationsPagingAdapter` (will replace `NotificationsAdapater`) to consume this data. Expose the paging source view a new `NotificationsViewModel` `flow`, and submit new pages to the adapter as they are available in `NotificationsFragment`. Comment out any other code in `NotificationsFragment` that deals with loading data from the network. This will be updated as necessary, either here, or in the view model. Lots of functionality is missing, including: - Different views for different notification types - Starting at the remembered notification position - Interacting with notifications - Adjusting the UI state to match the loading state These will be added incrementally. * Migrate StatusNotificationViewHolder impl. to NotificationsPagingAdapter With this change `NotificationsPagingAdapter` shows notifications about a status correctly. - Introduce a `ViewHolder` abstract class that all Notification view holders derive from. Modify the fallback view holder to use this. - Implement `StatusNotificationViewHolder`. Much of the code is from the existing implementation in the `NotificationAdapater`. - The original code split the code that binds values to views between the adapter's `bindViewHolder` method and the view holder's methods. In this code, all of the binding code is in the view holder, in a `bind` method. This is called by the adapter's `bindViewHolder` method. This keeps all the binding logic in the view holder, where it belongs. - The new `StatusNotificationViewHolder` uses view binding to access its views instead of `findViewById`. - Logically, information about whether to show sensitive media, or open content warnings should be part of the `StatusDisplayOptions`. So add those as fields, and populate them appropriately. This affects code outside notification handling, which will be adjusted later. * Note some TODOs to complete before the PR is finished * Extract StatusNotificationViewHolder to a new file * Add TODO for NotificationViewData.Concrete * Convert the adapter to take NotificationViewData.Concrete * Add a view holder for regular status notifications * Migrate Follow and FollowRequest notifications * Migrate report notifications * Convert onViewThread to use the adapter data * Convert onViewMedia to use the adapter data * Convert onMore to use the adapter data * Convert onReply to use the adapter data * Convert NotificationViewData to Kotlin * Re-implement the reblog functionality - Move reblogging in to the view model - Update the UI via the adapter's `snapshot()` and `notifyItemChanged()` methods * Re-implement the favourite functionality Same approach as reblog * Re-implement the bookmark functionality Same approach as reblog * Add TODO re StatusActionListener interface * Add TODO re event handling * Re-implementing the voting functionality * Re-implement viewing hidden content - Hidden media - Content behind a content warning * Add a TODO re pinning * Re-implement "Show more" / "Show less" * Delete unused updateStatus() function * Comment out the scroll listener for the moment * Re-implement applying filters to notifications Introduce `NotificationsRepository`, to provide access to the notifications stream. When changing the filters the flow is as follows: - User clicks "Apply" in the fragment. - Fragment calls `viewModel.accept()` with a `UiAction.ApplyFilter` (new class). - View model maintains a private flow of incoming UI actions. The new action is emitted to that flow. - In view model, `notificationFilter` waits for `.ApplyFilter` actions, and ensures the filter is saved, then emits it. - In view model, `pagingDataFlow` waits for new items from `notificationsFilter` and fetches the notifications from the repository in response. The repository provides `Notification`, so the model maps them to `NotificationViewData.Concrete` for display by the adapter. - In view model the UI state also waits for new items from `notificationsFilter` and emits a new `UiState` every time the filter is changed. When opening the fragment for the first time: - All of the above machinery, but `notificationFilter` also fetches the filter from the active account and emits that first. This triggers the first fetch and the first update of `uiState`. Also: - Add TODOs for functionality that is not implemented yet - Delete a lot of dead code from NotificationsFragment * Include important preference values in `uiState` Listen to the flow of eventHub events, filtered to preference changes that are relevant to the notification view. When preferences change (or when the view model starts), fetch the current values, and include them in `uiState`. Remove preference handling from `NotificationsFragment`, and just use the values from `uiState`. Adjust how the `useAbsoluteTime` preference is handled. The previous code loaded new content (via a diffutil) in to the adapter, which would trigger a re-binding of the timestamp. As the adapter content is immutable, the new code simply triggers a re-binding of the views that are currently visible on screen. * Update UI in response to different load states Notifications can be loaded at the top and bottom of the timeline. Add a new layout to show the progress of these loads, and any errors that can occur. Catch network errors in `NotificationsPagingSource` and convert to `LoadState.Error`. Add a header/footer to the notifications list to show the load state. Collect the load state from the adapter, use this to drive the visibility of different views. * Save and restore the last read notification ID Use this when fetching notifications, to centre the list around the notification that was last read. * Call notifyItemRangeChanged with the correct parameters * Don't try and save list position if there are no items in the list * Show/hide the "Nothing to see" view appropriately * Update comments * Handle the case where the notification key no longer exists * Re-implement support for showMediaPreview and other settings * Re-implement "hide FAB when scrolling" preference * Delete dead code * Delete Notifications Adapater and Placeholder types * Remove NotificationViewData.Concrete subclass Now there's no Placeholder, everything is a NotificationViewData. * Improve how notification pages are loaded if the first notification is missing or filtered * Re-implement clear notifications, show errors * s/default/from/ * Add missing headers * Don't process bookmarking via EventHub - Initiating a bookmark is triggered by the fragment sending a StatusUiAction.Bookmark - View model receives this, makes API call, waits for response, emits either a success or failure state - Fragment collects success/failure states, updates the UI accordingly * Don't process favourites via EventHub * Don't process reblog via EventHub * Don't process poll votes with EventHub This removes EventHub from the fragment * Respond to follow requests via the view model * Docs and cleanup * Typo and editing pass * Minor edits for clarity * Remove newline in diagram * Reorder sequence diagram * s/authorize/accept/ * s/pagingDataFlow/pagingData/ * Add brief KDoc * Try and fetch a full first page of notifications * Call the API method `notifications` again * Log UI errors at the point of handling * Remove unused variable * Replace String.format() with interpolation * Convert NotificationViewData to data class * Rename copy() to make(), to avoid confusion with default copy() method * Lint * Update app/src/main/res/layout/simple_list_item_1.xml * Update app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationsPagingAdapter.kt * Update app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationsViewModel.kt * Update app/src/main/java/com/keylesspalace/tusky/fragment/NotificationsFragment.kt * Update app/src/main/java/com/keylesspalace/tusky/viewdata/NotificationViewData.kt * Initial NotificationsViewModel tests * Add missing import * More tests, some cleanup * Comments, re-order some code * Set StateRestorationPolicy.PREVENT_WHEN_EMPTY * Mark clearNotifications() as "suspend" * Catch exceptions from clearNotifications and emit * Update TODOs with explanations * Ensure initial fetch uses a null ID * Stop/start collecting pagingData based on the lifecycle * Don't hide the list while refreshing * Refresh notifications on mutes and blocks * Update tests now clearNotifications is a suspend fun * Add "Refresh" menu to NotificationsFragment * Use account.name over account.displayName * Update app/src/main/java/com/keylesspalace/tusky/fragment/NotificationsFragment.kt Co-authored-by: Konrad Pozniak <connyduck@users.noreply.github.com> * Mark layoutmanager as lateinit * Mark layoutmanager as lateinit * Refactor generating UI text * Add Copyright header * Correctly apply notification filters * Show follow request header in notifications * Wait for follow request actions to complete, so the reqeuest is sent * Remove duplicate copyright header * Revert copyright change in unmodified file * Null check response body * Move NotificationsFragment to component.notifications * Use viewlifecycleowner.lifecyclescope * Show notification filter as a dialog rather than a popup window The popup window: - Is inconsistent UI - Requires a custom layout - Didn't play nicely with viewbinding * Refresh adapter on block/mute * Scroll up slightly when new content is loaded * Restore progressbar * Lint * Update app/src/main/res/layout/simple_list_item_1.xml --------- Co-authored-by: Konrad Pozniak <connyduck@users.noreply.github.com>
2023-03-10 20:12:33 +01:00
truth = { module = "com.google.truth:truth", version.ref = "truth" }
turbine = { module = "app.cash.turbine:turbine", version.ref = "turbine" }
unified-push = { module = "com.github.UnifiedPush:android-connector", version.ref = "unified-push" }
xmlwriter = { module = "org.pageseeder.xmlwriter:pso-xmlwriter", version.ref = "xmlwriter" }
[bundles]
androidx = ["androidx-core-ktx", "androidx-appcompat", "androidx-fragment-ktx", "androidx-browser", "androidx-swiperefreshlayout",
"androidx-recyclerview", "androidx-exifinterface", "androidx-cardview", "androidx-preference-ktx", "androidx-sharetarget",
"androidx-emoji2-core", "androidx-emoji2-views-core", "androidx-emoji2-view-helper", "androidx-lifecycle-viewmodel-ktx",
"androidx-constraintlayout", "androidx-paging-runtime-ktx", "androidx-viewpager2", "androidx-work-runtime-ktx",
Move ExoPlayer initialization to a Dagger module and optimize its dependencies (#4296) Currently, ExoPlayer is initialized explicitly in `ViewMediaFragment` with all its dependencies, including many that are not useful for viewing Mastodon media attachments. This pull request moves most ExoPlayer initialization and configuration to a new Dagger module, and instead a `Provider<ExoPlayer>` factory is injected in the Fragment so it can create new instances when needed. The following ExoPlayer components will be configured: - **Renderers**: all of them (audio, video, metadata, subtitles) except for the `CameraMotionRenderer`. - **Extractors**: FLAC, Wav, Mp4, Ogg, Matroska/WebM and MP3 containers, to provide the same support as Firefox or Chrome browsers. Other container formats that are either image formats (already covered by Glide), not web-friendly or reserved for live streaming are skipped. - **MediaSource**: only progressive download (through OkHttp) is provided. Live streaming support using protocols like RTSP, MPEG/Dash or HLS is skipped, because Mastodon servers don't use these protocols to download attachments. The Mastodon documentation mentions the [supported media formats for attachments](https://docs.joinmastodon.org/user/posting/#media) and this covers them and even more. The docs also mentions that the video and audio files are transcoded to MP4 and MP3 upon upload but that was not the case in the past (for example WebM was used) and it could change again in the future. Specifying these components manually allows reducing the APK size by about 200 KB thanks to R8 shrinking. There are also a few extra code changes: - Remove the code specific to API < 24 since the min SDK of the app is now 24. - Add support for pausing a video when unplugging headphones. - Specify the audio attributes according to content type to help the Android audio mixer.
2024-03-09 11:04:04 +01:00
"androidx-core-splashscreen", "androidx-activity", "androidx-media3-exoplayer", "androidx-media3-datasource-okhttp",
"androidx-media3-ui", "androidx-drawerlayout"]
filemojicompat = ["filemojicompat-core", "filemojicompat-ui", "filemojicompat-defaults"]
glide = ["glide-core", "glide-okhttp3-integration", "glide-animation-plugin"]
material-drawer = ["material-drawer-core", "material-drawer-iconics"]
mockito = ["mockito-kotlin", "mockito-inline"]
Replace Gson library with Moshi (#4309) **! ! Warning**: Do not merge before testing every API call and database read involving JSON ! **Gson** is obsolete and has been superseded by **Moshi**. But more importantly, parsing Kotlin objects using Gson is _dangerous_ because Gson uses Java serialization and is **not Kotlin-aware**. This has two main consequences: - Fields of non-null types may end up null at runtime. Parsing will succeed, but the code may crash later with a `NullPointerException` when trying to access a field member; - Default values of constructor parameters are always ignored. When absent, reference types will be null, booleans will be false and integers will be zero. On the other hand, Kotlin-aware parsers like **Moshi** or **Kotlin Serialization** will validate at parsing time that all received fields comply with the Kotlin contract and avoid errors at runtime, making apps more stable and schema mismatches easier to detect (as long as logs are accessible): - Receiving a null value for a non-null type will generate a parsing error; - Optional types are declared explicitly by adding a default value. **A missing value with no default value declaration will generate a parsing error.** Migrating the entity declarations from Gson to Moshi will make the code more robust but is not an easy task because of the semantic differences. With Gson, both nullable and optional fields are represented with a null value. After converting to Moshi, some nullable entities can become non-null with a default value (if they are optional and not nullable), others can stay nullable with no default value (if they are mandatory and nullable), and others can become **nullable with a default value of null** (if they are optional _or_ nullable _or_ both). That third option is the safest bet when it's not clear if a field is optional or not, except for lists which can usually be declared as non-null with a default value of an empty list (I have yet to see a nullable array type in the Mastodon API). Fields that are currently declared as non-null present another challenge. In theory, they should remain as-is and everything will work fine. In practice, **because Gson is not aware of nullable types at all**, it's possible that some non-null fields currently hold a null value in some cases but the app does not report any error because the field is not accessed by Kotlin code in that scenario. After migrating to Moshi however, parsing such a field will now fail early if a null value or no value is received. These fields will have to be identified by heavily testing the app and looking for parsing errors (`JsonDataException`) and/or by going through the Mastodon documentation. A default value needs to be added for missing optional fields, and their type could optionally be changed to nullable, depending on the case. Gson is also currently used to serialize and deserialize objects to and from the local database, which is also challenging because backwards compatibility needs to be preserved. Fortunately, by default Gson omits writing null fields, so a field of type `List<T>?` could be replaced with a field of type `List<T>` with a default value of `emptyList()` and reading back the old data should still work. However, nullable lists that are written directly (not as a field of another object) will still be serialized to JSON as `"null"` so the deserializing code must still be handling null properly. Finally, changing the database schema is out of scope for this pull request, so database entities that also happen to be serialized with Gson will keep their original types even if they could be made non-null as an improvement. In the end this is all for the best, because the app will be more reliable and errors will be easier to detect by showing up earlier with a clear error message. Not to mention the performance benefits of using Moshi compared to Gson. - Replace Gson reflection with Moshi Kotlin codegen to generate all parsers at compile time. - Replace custom `Rfc3339DateJsonAdapter` with the one provided by moshi-adapters. - Replace custom `JsonDeserializer` classes for Enum types with `EnumJsonAdapter.create(T).withUnknownFallback()` from moshi-adapters to support fallback values. - Replace `GuardedBooleanAdapter` with the more generic `GuardedAdapter` which works with any type. Any nullable field may now be annotated with `@Guarded`. - Remove Proguard rules related to Json entities. Each Json entity needs to be annotated with `@JsonClass` with no exception, and adding this annotation will ensure that R8/Proguard will handle the entities properly. - Replace some nullable Boolean fields with non-null Boolean fields with a default value where possible. - Replace some nullable list fields with non-null list fields with a default value of `emptyList()` where possible. - Update `TimelineDao` to perform all Json conversions internally using `Converters` so no Gson or Moshi instance has to be passed to its methods. - ~~Create a custom `DraftAttachmentJsonAdapter` to serialize and deserialize `DraftAttachment` which is a special entity that supports more than one json name per field. A custom adapter is necessary because there is not direct equivalent of `@SerializedName(alternate = [...])` in Moshi.~~ Remove alternate names for some `DraftAttachment` fields which were used as a workaround to deserialize local data in 2-years old builds of Tusky. - Update tests to make them work with Moshi. - Simplify a few `equals()` implementations. - Change a few functions to `val`s - Turn `NetworkModule` into an `object` (since it contains no abstract methods). Please test the app thoroughly before merging. There may be some fields currently declared as mandatory that are actually optional.
2024-04-02 21:01:04 +02:00
moshi = ["moshi-core", "moshi-adapters"]
okhttp = ["okhttp-core", "okhttp-logging-interceptor"]
Replace Gson library with Moshi (#4309) **! ! Warning**: Do not merge before testing every API call and database read involving JSON ! **Gson** is obsolete and has been superseded by **Moshi**. But more importantly, parsing Kotlin objects using Gson is _dangerous_ because Gson uses Java serialization and is **not Kotlin-aware**. This has two main consequences: - Fields of non-null types may end up null at runtime. Parsing will succeed, but the code may crash later with a `NullPointerException` when trying to access a field member; - Default values of constructor parameters are always ignored. When absent, reference types will be null, booleans will be false and integers will be zero. On the other hand, Kotlin-aware parsers like **Moshi** or **Kotlin Serialization** will validate at parsing time that all received fields comply with the Kotlin contract and avoid errors at runtime, making apps more stable and schema mismatches easier to detect (as long as logs are accessible): - Receiving a null value for a non-null type will generate a parsing error; - Optional types are declared explicitly by adding a default value. **A missing value with no default value declaration will generate a parsing error.** Migrating the entity declarations from Gson to Moshi will make the code more robust but is not an easy task because of the semantic differences. With Gson, both nullable and optional fields are represented with a null value. After converting to Moshi, some nullable entities can become non-null with a default value (if they are optional and not nullable), others can stay nullable with no default value (if they are mandatory and nullable), and others can become **nullable with a default value of null** (if they are optional _or_ nullable _or_ both). That third option is the safest bet when it's not clear if a field is optional or not, except for lists which can usually be declared as non-null with a default value of an empty list (I have yet to see a nullable array type in the Mastodon API). Fields that are currently declared as non-null present another challenge. In theory, they should remain as-is and everything will work fine. In practice, **because Gson is not aware of nullable types at all**, it's possible that some non-null fields currently hold a null value in some cases but the app does not report any error because the field is not accessed by Kotlin code in that scenario. After migrating to Moshi however, parsing such a field will now fail early if a null value or no value is received. These fields will have to be identified by heavily testing the app and looking for parsing errors (`JsonDataException`) and/or by going through the Mastodon documentation. A default value needs to be added for missing optional fields, and their type could optionally be changed to nullable, depending on the case. Gson is also currently used to serialize and deserialize objects to and from the local database, which is also challenging because backwards compatibility needs to be preserved. Fortunately, by default Gson omits writing null fields, so a field of type `List<T>?` could be replaced with a field of type `List<T>` with a default value of `emptyList()` and reading back the old data should still work. However, nullable lists that are written directly (not as a field of another object) will still be serialized to JSON as `"null"` so the deserializing code must still be handling null properly. Finally, changing the database schema is out of scope for this pull request, so database entities that also happen to be serialized with Gson will keep their original types even if they could be made non-null as an improvement. In the end this is all for the best, because the app will be more reliable and errors will be easier to detect by showing up earlier with a clear error message. Not to mention the performance benefits of using Moshi compared to Gson. - Replace Gson reflection with Moshi Kotlin codegen to generate all parsers at compile time. - Replace custom `Rfc3339DateJsonAdapter` with the one provided by moshi-adapters. - Replace custom `JsonDeserializer` classes for Enum types with `EnumJsonAdapter.create(T).withUnknownFallback()` from moshi-adapters to support fallback values. - Replace `GuardedBooleanAdapter` with the more generic `GuardedAdapter` which works with any type. Any nullable field may now be annotated with `@Guarded`. - Remove Proguard rules related to Json entities. Each Json entity needs to be annotated with `@JsonClass` with no exception, and adding this annotation will ensure that R8/Proguard will handle the entities properly. - Replace some nullable Boolean fields with non-null Boolean fields with a default value where possible. - Replace some nullable list fields with non-null list fields with a default value of `emptyList()` where possible. - Update `TimelineDao` to perform all Json conversions internally using `Converters` so no Gson or Moshi instance has to be passed to its methods. - ~~Create a custom `DraftAttachmentJsonAdapter` to serialize and deserialize `DraftAttachment` which is a special entity that supports more than one json name per field. A custom adapter is necessary because there is not direct equivalent of `@SerializedName(alternate = [...])` in Moshi.~~ Remove alternate names for some `DraftAttachment` fields which were used as a workaround to deserialize local data in 2-years old builds of Tusky. - Update tests to make them work with Moshi. - Simplify a few `equals()` implementations. - Change a few functions to `val`s - Turn `NetworkModule` into an `object` (since it contains no abstract methods). Please test the app thoroughly before merging. There may be some fields currently declared as mandatory that are actually optional.
2024-04-02 21:01:04 +02:00
retrofit = ["retrofit-core", "retrofit-converter-moshi"]
room = ["androidx-room-ktx", "androidx-room-paging"]
xmldiff = ["diffx", "xmlwriter"]