Compare commits

...

1325 Commits
13.11 ... main

Author SHA1 Message Date
Alex Baker a8e6e43811 compose-bom 2025.12.01 1 day ago
Alex Baker 7628fe9ad3 Kotlin 2.2.20 1 day ago
Alex Baker ac19d1977e Fix opening keyboard for new tasks 2 days ago
Alex Baker 2b27c43188 New SystemEventReceiver 2 days ago
Alex Baker 2d29672198 Catch interruption during widget refresh 2 days ago
dependabot[bot] 22f63feede
Bump rexml from 3.4.1 to 3.4.2 (#3898)
Bumps [rexml](https://github.com/ruby/rexml) from 3.4.1 to 3.4.2.
- [Release notes](https://github.com/ruby/rexml/releases)
- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)
- [Commits](https://github.com/ruby/rexml/compare/v3.4.1...v3.4.2)

---
updated-dependencies:
- dependency-name: rexml
  dependency-version: 3.4.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2 days ago
dependabot[bot] 583aaac767
Bump aws-sdk-s3 from 1.191.0 to 1.208.0 (#4040)
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.191.0 to 1.208.0.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-version: 1.208.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2 days ago
Paulo e2486fcb0c Translated using Weblate (Portuguese)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt/
2 days ago
Alex Baker 62622b5979 Fix more widget icon mappings 3 days ago
Alex Baker 7a8aca0dbb Add optional limit to queries 3 days ago
Alex Baker 14530aa7a6 Disable Iconics animation processors to avoid ANRs 3 days ago
Alex Baker f1019a24fc Report missing widget icons 3 days ago
Alex Baker f0c57a0287 Fix widget icon mappings 3 days ago
Alex Baker 533aca1ac5 Fix crash in SignInActivity 1 week ago
ngocanhtve 50489708b5 Translated using Weblate (Vietnamese)
Currently translated at 92.6% (608 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/vi/
1 week ago
ngocanhtve 93db824b99 Translated using Weblate (Vietnamese)
Currently translated at 87.8% (29 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/vi/
1 week ago
Alex Baker d1dd5c1d99 Remove What's New dialog 1 week ago
Alex Baker 1ac39cc6bf Restore task edit state if activity is lost 1 week ago
Alex Baker fc38b8e676 Preserve timezone when modifying DateTime 1 week ago
Alex Baker ef0c1ac981 Handle timezone when calculating start of day 1 week ago
Alex Baker 46412a92c4 Handle loops when calculating subtask count 1 week ago
renovate[bot] ee10f1b62e
Update dependency com.google.apis:google-api-services-drive to v3-rev20251210-2.0.0 (#4007)
* Update dependency com.google.apis:google-api-services-drive to v3-rev20251210-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 weeks ago
renovate[bot] 1affa8264f
Update dependency androidx.datastore:datastore-preferences to v1.2.0 (#4055)
* Update dependency androidx.datastore:datastore-preferences to v1.2.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 weeks ago
Alex Baker 3ba6d7a384 Merge branch '14.8.4' 2 weeks ago
Alex Baker b12defea20 Update version and changelog 2 weeks ago
renovate[bot] d2e28e3807
Update dependency androidx.activity:activity-compose to v1.12.2 (#4052)
* Update dependency androidx.activity:activity-compose to v1.12.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 weeks ago
Alex Baker 14c5d3fe7d Fix widget race conditions 2 weeks ago
Alex Baker 76baf2ee9e Restore widget update period 2 weeks ago
Alex Baker d7dc131c08 Update widget list contents after config change 2 weeks ago
Alex Baker e73a906076 Specify UTF_8 2 weeks ago
renovate[bot] a409600a7c
Update protobuf monorepo to v4.33.2 (#4049)
* Update protobuf monorepo to v4.33.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 weeks ago
renovate[bot] c12979808b
Update okhttp monorepo to v5.3.2 (#4047)
* Update okhttp monorepo to v5.3.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 weeks ago
Norara 6f2f274672 Translated using Weblate (Japanese)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ja/
2 weeks ago
Sina 8df099bd39 Translated using Weblate (Persian)
Currently translated at 34.2% (225 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fa/
2 weeks ago
Xana 138cdd2252 Translated using Weblate (Asturian)
Currently translated at 68.9% (452 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ast/
2 weeks ago
Norara 4d3769f99d Translated using Weblate (Japanese)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/ja/
2 weeks ago
Anonymous be030d0967 Translated using Weblate (Asturian)
Currently translated at 48.4% (16 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/ast/
2 weeks ago
Sina 97be0d9dd1 Translated using Weblate (Persian)
Currently translated at 81.8% (27 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/fa/
2 weeks ago
Xana 8a8a82dc17 Translated using Weblate (Asturian)
Currently translated at 21.2% (7 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/ast/
2 weeks ago
renovate[bot] e8a1484355
Update dependency androidx.swiperefreshlayout:swiperefreshlayout to v1.2.0 (#4056)
* Update dependency androidx.swiperefreshlayout:swiperefreshlayout to v1.2.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 weeks ago
renovate[bot] ff72308af2
Update lifecycle to v2.10.0 (#4061)
* Update lifecycle to v2.10.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 weeks ago
renovate[bot] da174933e5
Update wearCompose to v1.5.6 (#4051)
* Update wearCompose to v1.5.6

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 weeks ago
renovate[bot] dd0fe7d7c0
Update room to v2.8.4 (#4050)
* Update room to v2.8.4

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 weeks ago
renovate[bot] cfbaea6958
Update plugin protobuf to v0.9.6 (#4048)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2 weeks ago
renovate[bot] 22bf0d2357
Update ktor monorepo to v3.3.3 (#4046)
* Update ktor monorepo to v3.3.3

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 weeks ago
renovate[bot] c8cfa59ad9
Update dependency ruby to v3.4.8 (#4045)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2 weeks ago
renovate[bot] 76d92cd951
Update dependency com.google.android.gms:oss-licenses-plugin to v0.10.10 (#4042)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2 weeks ago
renovate[bot] 0d61461c5c
Update agp to v8.13.2 (#4041)
* Update agp to v8.13.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 weeks ago
renovate[bot] 1b99122e19
Update mockito monorepo to v5.21.0 (#4062)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2 weeks ago
renovate[bot] d1406839ee
Update actions/checkout action to v6 (#4063)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2 weeks ago
renovate[bot] ac5a019a38
Update GitHub Artifact Actions (major) (#4064)
Update GitHub Artifact Actions

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2 weeks ago
renovate[bot] fbfcbdc555
Update dependency androidx.sqlite:sqlite-bundled to v2.6.2 (#4006)
* Update dependency androidx.sqlite:sqlite-bundled to v2.6.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 month ago
renovate[bot] 51e347f22b
Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.9.5 (#4005)
* Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.9.5

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 month ago
renovate[bot] d0c28baf7b
Update dependency androidx.compose:compose-bom to v2025.11.01 (#4002)
* Update dependency androidx.compose:compose-bom to v2025.11.01

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 month ago
Pierfrancesco Passerini 3d4d44849e Translated using Weblate (Italian)
Currently translated at 99.6% (654 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
2 months ago
renovate[bot] dfa41c515a
Update protobuf monorepo to v4.33.1 (#3998)
* Update protobuf monorepo to v4.33.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
M a539b3a3e4
Remove codebeat badge (#3996) 2 months ago
renovate[bot] 8d6de19b2a
Update agp to v8.13.1 (#3997)
* Update agp to v8.13.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
Alex Baker 2a6e1638c9 Update version and changelog 2 months ago
Alex Baker 9190930745 Random reminder fixes
- Make random reminder calculation deterministic
- Don't fire reminders immediately on recurring tasks
2 months ago
Alex Baker 40961dad87 Refactor custom and random reminder dialogs 2 months ago
renovate[bot] 9fbe27345d
Update dependency com.google.android.gms:oss-licenses-plugin to v0.10.9 (#3968)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2 months ago
renovate[bot] 5f67e0ea3a
Update okhttp monorepo to v5 (major) (#3710)
* Update okhttp monorepo to v5

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
renovate[bot] d51171b17e
Update plugin jetbrains-compose to v1.9.3 (#3983)
* Update plugin jetbrains-compose to v1.9.3

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
renovate[bot] b657773a2d
Update wearCompose to v1.5.5 (#3973)
* Update wearCompose to v1.5.5

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
renovate[bot] d84effc447
Update dependency androidx.compose.material3.adaptive:adaptive-navigation-android to v1.2.0 (#3976)
* Update dependency androidx.compose.material3.adaptive:adaptive-navigation-android to v1.2.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
renovate[bot] 21db540614
Update dependency androidx.core:core-splashscreen to v1.2.0 (#3977)
* Update dependency androidx.core:core-splashscreen to v1.2.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
Alex Baker 8e9f27c46e Fall back to internal storage...
if external private storage is unavailable
2 months ago
Alex Baker 94ad2a381e Remove use of internal padding 2 months ago
renovate[bot] 747928c8c7
Update dependency io.grpc:grpc-kotlin-stub to v1.5.0 (#3981)
* Update dependency io.grpc:grpc-kotlin-stub to v1.5.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
renovate[bot] 9a28f1062b
Update dependency com.google.apis:google-api-services-tasks to v1-rev20251102-2.0.0 (#3970)
* Update dependency com.google.apis:google-api-services-tasks to v1-rev20251102-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
renovate[bot] ffe749bf0c
Update dependency androidx.compose.material3.adaptive:adaptive-layout-android to v1.2.0 (#3975)
* Update dependency androidx.compose.material3.adaptive:adaptive-layout-android to v1.2.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
renovate[bot] b0ae0129ae
Update ktor monorepo to v3.3.2 (#3702)
* Update ktor monorepo to v3.3.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
renovate[bot] 6715369d93
Update dependency androidx.work:work-runtime-ktx to v2.11.0 (#3979)
* Update dependency androidx.work:work-runtime-ktx to v2.11.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
renovate[bot] 4efb678699
Update dependency androidx.sqlite:sqlite-bundled to v2.6.1 (#3978)
* Update dependency androidx.sqlite:sqlite-bundled to v2.6.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
renovate[bot] 581b789a0b
Update lifecycle to v2.9.4 (#3972)
* Update lifecycle to v2.9.4

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
renovate[bot] 15d8b3aa59
Update dependency com.google.gms:google-services to v4.4.4 (#3971)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2 months ago
renovate[bot] dcd5d8c094
Update mockito monorepo to v5.20.0 (#3982)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2 months ago
renovate[bot] f3253e6188
Update protobuf monorepo to v4.33.0 (#3984)
* Update protobuf monorepo to v4.33.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
renovate[bot] 34b0c62ef8
Update dependency androidx.navigation:navigation-compose to v2.9.6 (#3967)
* Update dependency androidx.navigation:navigation-compose to v2.9.6

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
renovate[bot] 3754196714
Update room to v2.8.3 (#3985)
* Update room to v2.8.3

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
Igor Sorocean b94a91efbe Translated using Weblate (Romanian)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ro/
2 months ago
renovate[bot] 2c6066c378
Update dependency androidx.compose:compose-bom to v2025.11.00 (#3974)
* Update dependency androidx.compose:compose-bom to v2025.11.00

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
renovate[bot] 03e15a8c35
Update GitHub Artifact Actions (major) (#3987)
Update GitHub Artifact Actions

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2 months ago
renovate[bot] e63add73bc
Update dagger.hilt to v2.57.2 (#3965)
* Update dagger.hilt to v2.57.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
renovate[bot] bf676bcea7
Update dependency ruby to v3.4.7 (#3896)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2 months ago
renovate[bot] 6de8fe2fa0
Update dependency com.google.apis:google-api-services-drive to v3-rev20251019-2.0.0 (#3969)
* Update dependency com.google.apis:google-api-services-drive to v3-rev20251019-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
renovate[bot] 5907f27172
Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.9.4 (#3966)
* Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.9.4

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2 months ago
Alex Baker 38119d4560 Update version and changelog 2 months ago
Alex Baker 52848a5308 Attempt to fix flashing widgets 2 months ago
Alex Baker 4c492120b3 Update Google Play Billing to 7.1.1 2 months ago
Alex Baker 20e995b19b Fix locale support for Hebrew and Indonesian 2 months ago
Alex Baker 2b63e33de2 Fix reentrant deadlock 2 months ago
hasak 5980bd497d Translated using Weblate (Bosnian)
Currently translated at 17.0% (112 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bs/
3 months ago
Erigmac X e16b5cd6cd Translated using Weblate (Indonesian)
Currently translated at 84.8% (28 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/id/
3 months ago
Akihiko Suzuki (array) 3d9945c798 Translated using Weblate (Japanese)
Currently translated at 87.8% (29 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/ja/
3 months ago
Petri Hämäläinen 5c9eb1c35f Translated using Weblate (Finnish)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/fi/
3 months ago
Petri Hämäläinen 6b594a3213 Translated using Weblate (Finnish)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fi/
3 months ago
Alex Baker 9e0e01f89b Custom filter creation improvements 3 months ago
Alex Baker 932b8b0540 Update version and changelog 4 months ago
Alex Baker 152a9684e5 Downgrade Room and BundledSQLite
https://issuetracker.google.com/issues/442032108
4 months ago
renovate[bot] 88c817b770
Update room to v2.8.0 (#3895)
* Update room to v2.8.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
renovate[bot] a368960073
Update hilt to v1.3.0 (#3891)
* Update hilt to v1.3.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
Alex Baker 4f1cc5ab8e Update version and changelog 4 months ago
Alex Baker 17f54b6d32 Disable updatePeriodMillis, limit to 50 items 4 months ago
Alex Baker 6a44bed0e8 Update version and changelog 4 months ago
Alex Baker 7fa90396b3 Limit widgets to 175 rows
200 rows gave me binder size warnings
4 months ago
Alex Baker d1df39d12c Remove limit on widget items 4 months ago
Alex Baker d9ddd45f13 Add WidgetIconProvider 4 months ago
renovate[bot] 27b21118eb
Update dependency com.google.android.gms:play-services-oss-licenses to v17.3.0 (#3889)
* Update dependency com.google.android.gms:play-services-oss-licenses to v17.3.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
renovate[bot] f725365f87
Update dependency androidx.sqlite:sqlite-bundled to v2.6.0 (#3888)
* Update dependency androidx.sqlite:sqlite-bundled to v2.6.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
Alex Baker 7377e4672d Fix tests 4 months ago
renovate[bot] 8c90b1ec87
Update dependency androidx.compose:compose-bom to v2025.09.00 (#3887)
* Update dependency androidx.compose:compose-bom to v2025.09.00

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
Alex Baker 5b50f45a5b Fix nextcloud sharing by username 4 months ago
Alex Baker 882338f554 Fix microsoft sync issues
- fix sync on empty categories
- apply parent completion time to checklist items
4 months ago
renovate[bot] 930e980550
Update dependency androidx.activity:activity-compose to v1.11.0 (#3886)
* Update dependency androidx.activity:activity-compose to v1.11.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
renovate[bot] fb243c7aaf
Update protobuf monorepo to v4.32.1 (#3884)
* Update protobuf monorepo to v4.32.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
renovate[bot] c3842fd2f7
Update wearCompose to v1.5.1 (#3885)
* Update wearCompose to v1.5.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
renovate[bot] 81ecb322e9
Update dependency androidx.wear:wear-input to v1.2.0 (#3882)
* Update dependency androidx.wear:wear-input to v1.2.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
renovate[bot] 1b386458b8
Update dependency androidx.work:work-runtime-ktx to v2.10.4 (#3883)
* Update dependency androidx.work:work-runtime-ktx to v2.10.4

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
renovate[bot] 7dca092831
Update dependency androidx.navigation:navigation-compose to v2.9.4 (#3881)
* Update dependency androidx.navigation:navigation-compose to v2.9.4

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
renovate[bot] 2749b029c5
Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.9.1 (#3880) 4 months ago
Alex Baker 0cb19221c4 Update version and changelog 4 months ago
Alex Baker d900f72a5c Fix Microsoft To Do patching
Encode null in patch so you can remove values
4 months ago
Alex Baker 0d8979b72c Fix moving data to a Google Tasks account
When moving data to a Google Tasks account from any other synchronized
account, the app could fail to delete the data from the source account
4 months ago
Alex Baker 703322f510 Force refresh on resume
Previously visible unstarted or not-due tasks that are now started or
overdue need to be updated
4 months ago
Alex Baker 192351a4b8 Add ScreenUnlockReceiver 4 months ago
Alex Baker 844a3a0ff8 Update version and changelog 4 months ago
Alex Baker e6bbc8d361 Attempt to address Android 16 widget changes 4 months ago
Alex Baker 04ab41f622 Use task ids for widget click intents 4 months ago
Alex Baker 4946b0ca06 Apply missing obj fix to etebase, caldav deletion 4 months ago
Alex Baker 2c29194ff2 Try to recover from missing caldav obj 4 months ago
renovate[bot] 1aaaad86da
Update dependency com.google.apis:google-api-services-drive to v3-rev20250829-2.0.0 (#3860)
* Update dependency com.google.apis:google-api-services-drive to v3-rev20250829-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
Alex Baker 68601873fd Add RefreshBroadcaster interface 4 months ago
Alex Baker c9721790ce Remove broadcastRefreshList 4 months ago
renovate[bot] 6f16a29fd7
Update dependency com.google.auth:google-auth-library-oauth2-http to v1.39.0 (#3863)
* Update dependency com.google.auth:google-auth-library-oauth2-http to v1.39.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
happy happy a501b81bfc Added translation using Weblate (Hindi) 4 months ago
happy happy fded7fbdd5 Added translation using Weblate (Hindi) 4 months ago
Alex Baker 3ff4a2339b Move KeyStoreEncryption to kmp 4 months ago
vale-decem e400594e5b Translated using Weblate (Serbian)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sr/
4 months ago
Alex Baker 8bbbc1dcac Update version and changelog 4 months ago
github-actions[bot] 38d27b262a Update dependency diffs 4 months ago
Alex Baker b61842646b Update ical4android
Fixes alarm synchronization
4 months ago
Alex Baker 29cbb33a42 Move VtodoCache to kmp 4 months ago
renovate[bot] 2418b664e9
Update agp to v8.13.0 (#3850)
* Update agp to v8.13.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
vale-decem 0e3803c28d Translated using Weblate (Serbian)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sr/
4 months ago
glemco c0bb7b306a Translated using Weblate (Italian)
Currently translated at 99.6% (654 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
4 months ago
Alex Baker 903412fdea Update version and changelog 4 months ago
Alex Baker 12b1127e6b Fix clear completed crash when grouping by list 4 months ago
Alex Baker c3ce7a43fb Fix all day calendar events 4 months ago
bittin1ddc447d824349b2 a391dff9bc Translated using Weblate (Swedish)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sv/
4 months ago
renovate[bot] 28e12110fa
Update lifecycle to v2.9.3 (#3839)
* Update lifecycle to v2.9.3

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
renovate[bot] 0bba2c4a63
Update wearCompose to v1.5.0 (#3840)
* Update wearCompose to v1.5.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
renovate[bot] 700421c5ce
Update dependency com.google.android.gms:oss-licenses-plugin to v0.10.8 (#3838)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
4 months ago
renovate[bot] d4a742b136
Update agp to v8.12.2 (#3837)
* Update agp to v8.12.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
renovate[bot] 585967c601
Update dependency androidx.wear:wear-input to v1.2.0-rc01 (#3836)
* Update dependency androidx.wear:wear-input to v1.2.0-rc01

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
renovate[bot] d279f7c42e
Update dependency androidx.compose:compose-bom to v2025.08.01 (#3835)
* Update dependency androidx.compose:compose-bom to v2025.08.01

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
Milo Ivir 5cfbe9c8cb Translated using Weblate (Croatian)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/hr/
4 months ago
Frits van Bommel f591b1846c Translated using Weblate (Dutch)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/nl/
4 months ago
MisterTechnik 3401a59716 Translated using Weblate (German)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
4 months ago
renovate[bot] d0328b378a
Update dependency com.google.apis:google-api-services-drive to v3-rev20250819-2.0.0 (#3823)
* Update dependency com.google.apis:google-api-services-drive to v3-rev20250819-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
Alex Baker f9d859a33e Update version and changelog 4 months ago
Alex Baker 5a1560e513 System bar scrim improvements 4 months ago
renovate[bot] 655cdc1a9d
Update dependency com.google.auth:google-auth-library-oauth2-http to v1.38.0 (#3820)
* Update dependency com.google.auth:google-auth-library-oauth2-http to v1.38.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
renovate[bot] f2235e6aa6
Update dependency com.microsoft.identity.client:msal to v7.0.3 (#3818)
* Update dependency com.microsoft.identity.client:msal to v7.0.3

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
renovate[bot] 09baafb47f
Update actions/setup-java action to v5 (#3819)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
4 months ago
renovate[bot] 2d0cfaa04d
Update dependency co.touchlab:kermit to v2.0.8 (#3817)
* Update dependency co.touchlab:kermit to v2.0.8

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
renovate[bot] e60d516fcf
Update dagger.hilt to v2.57.1 (#3816)
* Update dagger.hilt to v2.57.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
4 months ago
Jiho Min 9ba82c3a01 Translated using Weblate (Korean)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/ko/
4 months ago
Jiho Min b7abdfe2ea Translated using Weblate (Korean)
Currently translated at 99.6% (654 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ko/
4 months ago
renovate[bot] 3da6f67ace
Update dependency com.microsoft.identity.client:msal to v7.0.2 (#3810)
* Update dependency com.microsoft.identity.client:msal to v7.0.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
5 months ago
renovate[bot] eec3ae447a
Update actions/checkout action to v5 (#3806)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
5 months ago
renovate[bot] 7a9a27eae0
Update agp to v8.12.1 (#3809)
* Update agp to v8.12.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
5 months ago
Hugoren Martinako 05b5f1470a Translated using Weblate (Galician)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/gl/
5 months ago
Don Zouras 2a94af70fd Translated using Weblate (Esperanto)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/eo/
5 months ago
Hugoren Martinako 464903bf4d Translated using Weblate (Portuguese)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt/
5 months ago
Iago 0542f24c29 Translated using Weblate (Galician)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/gl/
5 months ago
Hugoren Martinako 0fe834b46c Translated using Weblate (Galician)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/gl/
5 months ago
Iago 997810af4c Translated using Weblate (Galician)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/gl/
5 months ago
Hugoren Martinako 6829f3f690 Translated using Weblate (Galician)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/gl/
5 months ago
ferranpujolcamins cec5c1e4b8 Translated using Weblate (Catalan)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ca/
5 months ago
Hugoren Martinako d3a12b039a Translated using Weblate (Catalan)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ca/
5 months ago
renovate[bot] 67dcc1db38
Update mockito monorepo to v5.19.0 (#3804)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
5 months ago
renovate[bot] 83ae176288
Update protobuf monorepo to v4.32.0 (#3805)
* Update protobuf monorepo to v4.32.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
5 months ago
renovate[bot] 5e535b6d46
Update dependency androidx.compose:compose-bom to v2025.08.00 (#3802)
* Update dependency androidx.compose:compose-bom to v2025.08.00

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
5 months ago
renovate[bot] 5c124047e8
Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.9.0 (#3803)
* Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.9.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
5 months ago
renovate[bot] 8a332c8b2a
Update dependency com.microsoft.identity.client:msal to v7.0.1 (#3801)
* Update dependency com.microsoft.identity.client:msal to v7.0.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
5 months ago
renovate[bot] 9d6a925fca
Update dependency androidx.fragment:fragment-compose to v1.8.9 (#3799)
* Update dependency androidx.fragment:fragment-compose to v1.8.9

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
5 months ago
renovate[bot] 8cc28aa88b
Update dependency com.google.android.gms:play-services-oss-licenses to v17.2.2 (#3800)
* Update dependency com.google.android.gms:play-services-oss-licenses to v17.2.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
5 months ago
Hugoren Martinako 99ea6cb0eb Translated using Weblate (Spanish)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/es/
5 months ago
Hugoren Martinako a698236f4d Translated using Weblate (Spanish)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/es/
5 months ago
Alex Baker ad616472b3 Attempt to recover from HTTP 400 errors 5 months ago
Alex Baker d5cda9e84b Always fetch and apply remote order and parents
Subtasks are sorted manually by default, so the app should try to remain
consistent with remote order
5 months ago
Алексей Ежков 9808ca1745 Translated using Weblate (Russian)
Currently translated at 99.8% (655 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ru/
5 months ago
Alex Baker 0b76caa9a8 Don't log missing wear api stacktrace 5 months ago
Alex Baker 07ac9f9ead Fix crash when looking up ALWAYS_FINISH_ACTIVITIES 5 months ago
Alex Baker 977edf4d8d Add proguard rule for microsoft 5 months ago
Alex Baker 071d670c6d Attempt to fix crash in menu search bar 5 months ago
Alex Baker eb89cc689a Two panes on medium width, like z folds 5 months ago
renovate[bot] a5c73ccc24
Update dependency com.google.android.gms:oss-licenses-plugin to v0.10.7 (#3784)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
5 months ago
renovate[bot] 51884d46f2
Update dependency com.google.firebase:firebase-crashlytics-gradle to v3.0.6 (#3785)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
5 months ago
Antoni Jurczyk 101d7f2357 Translated using Weblate (Polish)
Currently translated at 84.8% (28 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/pl/
5 months ago
renovate[bot] 75563b6a61
Update dependency com.microsoft.identity.client:msal to v7 (#3787)
* Update dependency com.microsoft.identity.client:msal to v7

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
5 months ago
Tamas Gervai 3028d492b2 Translated using Weblate (Hungarian)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/hu/
5 months ago
Antoni Jurczyk ab2fc34e98 Translated using Weblate (Polish)
Currently translated at 95.1% (624 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pl/
5 months ago
renovate[bot] 852ac708b5
Update actions/download-artifact action to v5 (#3779)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
5 months ago
Pierfrancesco Passerini 092f357719 Translated using Weblate (Italian)
Currently translated at 99.5% (653 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
5 months ago
ERYpTION ad1ace8fbf Translated using Weblate (Danish)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/da/
5 months ago
odnankenobi 204f49fc25 Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.8% (655 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt_BR/
5 months ago
Alex Baker 9ef95291c8 Update version and changelog 5 months ago
Alex Baker 3e034ab91f Target Android 15
Need to update some back handler stuff for Android 16
5 months ago
Alex Baker 6f89ac3b93 Fix some window inset issues 5 months ago
Alex Baker 7d2ebf9cdf Use ExistingPeriodicWorkPolicy.UPDATE 5 months ago
Alex Baker 16011b1963 Target Android 16 5 months ago
Alex Baker 2f6348c53d Return to last viewed filter after search 5 months ago
renovate[bot] 566c22c17e
Update agp to v8.12.0 (#3764)
* Update agp to v8.12.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
5 months ago
Ihor Hordiichuk 2c33be700a Translated using Weblate (Ukrainian)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/uk/
5 months ago
renovate[bot] 7a24f43387
Update horologist to v0.7.15 (#3763)
* Update horologist to v0.7.15

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
5 months ago
renovate[bot] 370ac149d3
Update dependency androidx.test.ext:junit to v1.3.0 (#3762)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
5 months ago
renovate[bot] 4c851ce7f3
Update dependency androidx.test:core to v1.7.0 (#3759)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
5 months ago
renovate[bot] 7c78854663
Update dependency androidx.test:runner to v1.7.0 (#3760)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
5 months ago
Ihor Hordiichuk d05730399d Translated using Weblate (Ukrainian)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/uk/
5 months ago
Xo c8f564d2d5 Translated using Weblate (Hebrew)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/he/
5 months ago
Alex Baker 65db4ab926 Remove shadow from date picker sheet 5 months ago
renovate[bot] 1476e7fb27
Update dependency androidx.navigation:navigation-compose to v2.9.3 (#3756)
* Update dependency androidx.navigation:navigation-compose to v2.9.3

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
5 months ago
renovate[bot] 2ee0939564
Update dependency androidx.wear:wear-input to v1.2.0-beta01 (#3757)
* Update dependency androidx.wear:wear-input to v1.2.0-beta01

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
5 months ago
renovate[bot] 4c530a5de3
Update dependency androidx.work:work-runtime-ktx to v2.10.3 (#3758)
* Update dependency androidx.work:work-runtime-ktx to v2.10.3

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
5 months ago
Alex Baker fcd62c6801 Update version and changelog 5 months ago
Alex Baker aedd29982a Fix test compilation 5 months ago
Alex Baker 3a37d6481e Synchronize list icons with CalDAV 5 months ago
Alex Baker c5f8583146 Simplify fetching calendars 5 months ago
Alex Baker 9d96bed5b3 Add helper method to check if list is read only 5 months ago
renovate[bot] 2f268c8c70
Update dependency com.google.apis:google-api-services-drive to v3-rev20250723-2.0.0 (#3749)
* Update dependency com.google.apis:google-api-services-drive to v3-rev20250723-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
5 months ago
renovate[bot] 130a29d7e3
Update dependency com.google.apis:google-api-services-drive to v3-rev20250717-2.0.0 (#3746)
* Update dependency com.google.apis:google-api-services-drive to v3-rev20250717-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
5 months ago
Emin Tufan Çetin dcb69394be Translated using Weblate (Turkish)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/tr/
5 months ago
renovate[bot] 2cf3438e07
Update dependency com.google.firebase:firebase-crashlytics-gradle to v3.0.5 (#3742)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
5 months ago
Frits van Bommel 06e9da41d6 Translated using Weblate (Dutch)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/nl/
5 months ago
Pierfrancesco Passerini 7b34e33c0e Translated using Weblate (Italian)
Currently translated at 99.6% (654 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
5 months ago
Florian Trayon be51651779 Translated using Weblate (French)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fr/
5 months ago
ColorfulRhino 627b05a575 Translated using Weblate (German)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
5 months ago
Sketch6580 8207f30c5f Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/zh_Hans/
6 months ago
Priit Jõerüüt 6811677d21 Translated using Weblate (Estonian)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/et/
6 months ago
Fjuro 9d88c5b3a0 Translated using Weblate (Czech)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/cs/
6 months ago
109247019824 1f24a371fb Translated using Weblate (Bulgarian)
Currently translated at 100.0% (656 of 656 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bg/
6 months ago
Pierfrancesco Passerini 877a2cd6a5 Translated using Weblate (Italian)
Currently translated at 99.6% (653 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
6 months ago
109247019824 299b5b4d21 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bg/
6 months ago
renovate[bot] e6320d42a7
Update dependency androidx.compose:compose-bom to v2025.07.00 (#3732)
* Update dependency androidx.compose:compose-bom to v2025.07.00

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
6 months ago
renovate[bot] 84c36a1a90
Update lifecycle to v2.9.2 (#3730)
* Update lifecycle to v2.9.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
6 months ago
renovate[bot] 73c0e38991
Update dagger.hilt to v2.57 (#3731)
* Update dagger.hilt to v2.57

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
6 months ago
renovate[bot] 773e822f14
Update dependency androidx.navigation:navigation-compose to v2.9.2 (#3727)
* Update dependency androidx.navigation:navigation-compose to v2.9.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
6 months ago
renovate[bot] 6f167b5ae0
Update dependency androidx.wear:wear-input to v1.2.0-alpha04 (#3728)
* Update dependency androidx.wear:wear-input to v1.2.0-alpha04

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
6 months ago
renovate[bot] ba0cd26abc
Update dependency com.google.android.gms:play-services-oss-licenses to v17.2.1 (#3724)
* Update dependency com.google.android.gms:play-services-oss-licenses to v17.2.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
6 months ago
renovate[bot] 3450db4006
Update dependency ruby to v3.4.5 (#3725)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
6 months ago
Alex Baker 7c2cf38788 Update version and changelog 6 months ago
Alex Baker e576a48eba Fix widget 'View more tasks' text color 6 months ago
renovate[bot] 803593a3a7
Update dependency com.microsoft.identity.client:msal to v6.2.0 (#3721)
* Update dependency com.microsoft.identity.client:msal to v6.2.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
6 months ago
renovate[bot] c4fc7fbadb
Update dependency com.google.android.gms:play-services-oss-licenses to v17.2.0 (#3720)
* Update dependency com.google.android.gms:play-services-oss-licenses to v17.2.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
6 months ago
github-actions[bot] 75d53fb8ac Update dependency diffs 6 months ago
renovate[bot] 769802c10a
Update agp to v8.11.1 (#3718)
* Update agp to v8.11.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
6 months ago
renovate[bot] 14ff0086fa
Update dependency gradle to v8.14.3 (#3719)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
6 months ago
Alex Baker 761d4afeef Widget sort groups ascending by default 6 months ago
Alex Baker c7336589cd Limit widget task list size on Android 16+
Android 16 really slows down on large binder transactions
6 months ago
Alex Baker e30c583d5a Fix widget update race condition 6 months ago
Alex Baker 38527aef0a Update compileSdk to Android 16 6 months ago
Alex Baker c9cdc4d50f Log if "Don't keep activities" is enabled 6 months ago
renovate[bot] 80753f607c
Update dependency com.google.apis:google-api-services-drive to v3-rev20250701-2.0.0 (#3712)
* Update dependency com.google.apis:google-api-services-drive to v3-rev20250701-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
6 months ago
Milo Ivir 32cb067ffd Translated using Weblate (Croatian)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/hr/
6 months ago
தமிழ்நேரம் e93d0735d4 Translated using Weblate (Tamil)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ta/
6 months ago
renovate[bot] 103e7eaa60
Update dependency androidx.navigation:navigation-compose to v2.9.1 (#3709)
* Update dependency androidx.navigation:navigation-compose to v2.9.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
6 months ago
Nick Wick a490307251 Translated using Weblate (Swedish)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/sv/
6 months ago
Nick Wick 976df68671 Translated using Weblate (Swedish)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sv/
6 months ago
vale-decem 384f6e4604 Translated using Weblate (Serbian)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sr/
6 months ago
vale-decem b68439b0e7 Translated using Weblate (Serbian)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sr/
6 months ago
vale-decem 3611593307 Translated using Weblate (Serbian)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sr/
6 months ago
vale-decem c7a7384cf5 Translated using Weblate (Serbian)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sr/
6 months ago
vale-decem f89789dd10 Translated using Weblate (Serbian)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sr/
6 months ago
vale-decem 91da4bc661 Translated using Weblate (Serbian)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sr/
6 months ago
vale-decem 30abeba683 Translated using Weblate (Serbian)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sr/
6 months ago
vale-decem 8f567a153a Translated using Weblate (Serbian)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sr/
6 months ago
vale-decem 2fbffa20cc Translated using Weblate (Serbian)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sr/
6 months ago
vale-decem a071b05a71 Translated using Weblate (Serbian)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sr/
6 months ago
vale-decem 63dbb48d96 Translated using Weblate (Serbian)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sr/
6 months ago
vale-decem e2c65c06a1 Translated using Weblate (Serbian)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sr/
6 months ago
vale-decem 03b1d78feb Translated using Weblate (Serbian)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sr/
6 months ago
vale-decem fe72301c55 Translated using Weblate (Serbian)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sr/
6 months ago
vale-decem ee40b72b02 Translated using Weblate (Serbian)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sr/
6 months ago
vale-decem 6181351db7 Translated using Weblate (Serbian)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sr/
6 months ago
vale-decem 8263ab2935 Translated using Weblate (Serbian)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sr/
6 months ago
Kachelkaiser 38dbbe379b Translated using Weblate (German)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
6 months ago
vale-decem 58d5eea978 Translated using Weblate (Serbian)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/sr/
6 months ago
vale-decem f902ff38b0 Translated using Weblate (Serbian)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/sr/
6 months ago
Alex Baker 7c970eec95 Update proguard 6 months ago
renovate[bot] 9ec448aedd
Update dependency fastlane to v2.228.0 (#3700)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
6 months ago
renovate[bot] 2fb1bb4873
Update dependency com.google.firebase:firebase-bom to v33.16.0 (#3699)
* Update dependency com.google.firebase:firebase-bom to v33.16.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
6 months ago
Alex Baker c64e581fd4 Update proguard 6 months ago
renovate[bot] 36ec47e9bd
Update dependency gradle to v8.14.2 (#3695)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
6 months ago
renovate[bot] 2942554ec8
Update room to v2.7.2 (#3697)
* Update room to v2.7.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
6 months ago
renovate[bot] b6b624ce5b
Update plugin jetbrains-compose to v1.8.2 (#3696)
* Update plugin jetbrains-compose to v1.8.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
6 months ago
renovate[bot] 1267c803c6
Update agp to v8.11.0 (#3698)
* Update agp to v8.11.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
6 months ago
renovate[bot] 7a17943142
Update dependency com.google.gms:google-services to v4.4.3 (#3694)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
6 months ago
renovate[bot] d73b8496cb
Update dependency com.google.auth:google-auth-library-oauth2-http to v1.37.1 (#3693)
* Update dependency com.google.auth:google-auth-library-oauth2-http to v1.37.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
6 months ago
renovate[bot] eda6eeaf62
Update dependency androidx.work:work-runtime-ktx to v2.10.2 (#3692)
* Update dependency androidx.work:work-runtime-ktx to v2.10.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
6 months ago
renovate[bot] 6d89f2cb02
Update dependency androidx.sqlite:sqlite-bundled to v2.5.2 (#3691)
* Update dependency androidx.sqlite:sqlite-bundled to v2.5.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
6 months ago
renovate[bot] 273fbf9153
Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.8.3 (#3689)
* Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.8.3

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
6 months ago
renovate[bot] 2b1ad31f76
Update dependency androidx.compose:compose-bom to v2025.06.01 (#3688)
* Update dependency androidx.compose:compose-bom to v2025.06.01

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
6 months ago
renovate[bot] fdd1fc4989 Migrate config renovate.json 6 months ago
github-actions[bot] ff6a8ae0f1 Update dependency diffs 6 months ago
devn1x d1da6dc970 Update libs.versions.toml 6 months ago
devn1x a3dac4a397 Update dependency ical4android
Fixes #2870
6 months ago
devn1x 30060d8faf Update dependency ical4android
Fixes #2870
6 months ago
Alex Baker a299363fe8 New Compose color picker 6 months ago
大王叫我来巡山 36b20f47fd Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/zh_Hans/
7 months ago
大王叫我来巡山 5b1aff00df Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/zh_Hans/
7 months ago
Anonymous f53aec3e8c Translated using Weblate (Slovak)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/sk/
7 months ago
renovate[bot] 079d7867f1
Update dependency co.touchlab:kermit to v2.0.6 (#3676)
* Update dependency co.touchlab:kermit to v2.0.6

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
7 months ago
pitroig 8b99e8feb2 Translated using Weblate (Catalan)
Currently translated at 64.2% (422 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ca/
7 months ago
Alex Baker 1a9b371bda Update version and changelog 7 months ago
Alex Baker dfc311ff31 Remove redundant string 7 months ago
Alex Baker cbcb812150 Create a local list if there are no lists 7 months ago
Alex Baker 70793f2433 Remove libera.chat links 7 months ago
Xo a198846902 Translated using Weblate (Hebrew)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/he/
7 months ago
Alex Baker 86a3b2b426 Don't post summaries when canNotify is false 7 months ago
Alex Baker bbac4da7d0 Additional debug info in application logs 7 months ago
Maria Eduarda Weiland Machado Bratti f4e0d519d7 Translated using Weblate (Portuguese)
Currently translated at 99.8% (656 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt/
7 months ago
Alex Baker 9a584c851b Fix dynamic color setting 7 months ago
Alex Baker 704edaa0ab Fix Microsoft To Do serialization crash 7 months ago
Sina 71833adf21 Translated using Weblate (Persian)
Currently translated at 60.6% (20 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/fa/
7 months ago
renovate[bot] 4aad9bf00e
Update dependency com.google.firebase:firebase-crashlytics-gradle to v3.0.4 (#3660)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
7 months ago
Frits van Bommel d4b1a0dd09 Translated using Weblate (Dutch)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/nl/
7 months ago
renovate[bot] 0f1508f59a
Update dependency com.google.auth:google-auth-library-oauth2-http to v1.37.0 (#3656)
* Update dependency com.google.auth:google-auth-library-oauth2-http to v1.37.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
7 months ago
renovate[bot] 266fe1281e
Update dependency androidx.wear.tiles:tiles-proto to v1.5.0 (#3655)
* Update dependency androidx.wear.tiles:tiles-proto to v1.5.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
7 months ago
renovate[bot] 7e99762814
Update lifecycle to v2.9.1 (#3653)
* Update lifecycle to v2.9.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
7 months ago
renovate[bot] 56ec24d2f9
Update dependency androidx.compose:compose-bom to v2025.06.00 (#3654)
* Update dependency androidx.compose:compose-bom to v2025.06.00

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
7 months ago
renovate[bot] fad3ab6ce3
Update dependency androidx.fragment:fragment-compose to v1.8.8 (#3652)
* Update dependency androidx.fragment:fragment-compose to v1.8.8

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
7 months ago
renovate[bot] 522bd6e304
Update dependency androidx.appcompat:appcompat to v1.7.1 (#3651)
* Update dependency androidx.appcompat:appcompat to v1.7.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
7 months ago
109247019824 119572971d Translated using Weblate (Bulgarian)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bg/
7 months ago
Nicklas 48270d6f2c Translated using Weblate (Swedish)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sv/
7 months ago
M_Haruki 44d15556c6 Translated using Weblate (Japanese)
Currently translated at 99.8% (656 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ja/
7 months ago
Anael G. P 33611d12bd Translated using Weblate (Spanish)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/es/
7 months ago
Don Zouras caa5916ad7 Translated using Weblate (Esperanto)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/eo/
7 months ago
Emin Tufan Çetin 821e8e0ee4 Translated using Weblate (Turkish)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/tr/
7 months ago
Florian Trayon fe4bd73d62 Translated using Weblate (French)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fr/
7 months ago
Anael G. P b0493fdd7d Translated using Weblate (Spanish)
Currently translated at 99.8% (656 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/es/
7 months ago
Anonymous f330daa764 Translated using Weblate (Vietnamese)
Currently translated at 92.3% (607 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/vi/
7 months ago
Anonymous 017dd17021 Translated using Weblate (Croatian)
Currently translated at 98.7% (649 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/hr/
7 months ago
Anonymous aa535981c3 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 95.4% (627 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/zh_Hant/
7 months ago
Anonymous 6f39614b5b Translated using Weblate (Polish)
Currently translated at 91.6% (602 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pl/
7 months ago
Anonymous d33d87b6cb Translated using Weblate (Norwegian Bokmål)
Currently translated at 95.4% (627 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/nb_NO/
7 months ago
Anonymous a828d510e3 Translated using Weblate (Lithuanian)
Currently translated at 89.1% (586 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/lt/
7 months ago
Anonymous 898f84e3c8 Translated using Weblate (Finnish)
Currently translated at 96.0% (631 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fi/
7 months ago
Yurt Page a1711fa0ea Translated using Weblate (Russian)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ru/
7 months ago
Yurt Page 542ba69870 Translated using Weblate (Russian)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/ru/
7 months ago
Alex Baker 01d07cccbd Fix case on "Default reminder" settings 7 months ago
renovate[bot] 3e8838bdb6
Update dependency com.google.auth:google-auth-library-oauth2-http to v1.36.0 (#3636)
* Update dependency com.google.auth:google-auth-library-oauth2-http to v1.36.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
7 months ago
renovate[bot] ac4c610841
Update dependency com.google.protobuf:protoc to v4.31.1 (#3635)
* Update dependency com.google.protobuf:protoc to v4.31.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
7 months ago
renovate[bot] 6bea199a75
Update agp to v8.10.1 (#3634)
* Update agp to v8.10.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
7 months ago
renovate[bot] 1efb8c8ee0
Update grpc-java monorepo to v1.73.0 (#3631)
* Update grpc-java monorepo to v1.73.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
7 months ago
Igor Sorocean d2c23a79de Translated using Weblate (Romanian)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/ro/
7 months ago
Igor Sorocean 0091f80945 Translated using Weblate (Romanian)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ro/
7 months ago
renovate[bot] 5cb770e722
Update dependency ruby to v3.4.4 (#3206)
* Update dependency ruby to v3.4.4

* Fix fastlane

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Alex Baker <alex@tasks.org>
7 months ago
renovate[bot] 81759305c5
Update protobuf monorepo to v4.31.0 (#3616)
* Update protobuf monorepo to v4.31.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
7 months ago
renovate[bot] 1692a98d3d
Update mockito monorepo to v5.18.0 (#3615)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
7 months ago
renovate[bot] 9174855f2f
Update dependency com.google.firebase:firebase-bom to v33.14.0 (#3613)
* Update dependency com.google.firebase:firebase-bom to v33.14.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
7 months ago
renovate[bot] 9632ea61d2
Update dependency org.jetbrains.kotlinx:kotlinx-collections-immutable to v0.4.0 (#3614)
* Update dependency org.jetbrains.kotlinx:kotlinx-collections-immutable to v0.4.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
7 months ago
renovate[bot] e2ca2a2251
Update dependency com.google.apis:google-api-services-tasks to v1-rev20250518-2.0.0 (#3611)
* Update dependency com.google.apis:google-api-services-tasks to v1-rev20250518-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
7 months ago
renovate[bot] dad35aafd3
Update plugin jetbrains-compose to v1.8.1 (#3612)
* Update plugin jetbrains-compose to v1.8.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
7 months ago
renovate[bot] 0735cb5e1d
Update dependency gradle to v8.14.1 (#3550)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
7 months ago
renovate[bot] 55c8ab6e3a
Update dependency androidx.fragment:fragment-compose to v1.8.7 (#3610)
* Update dependency androidx.fragment:fragment-compose to v1.8.7

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
7 months ago
renovate[bot] 5c4b345695
Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.8.2 (#3607)
* Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.8.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
7 months ago
renovate[bot] 2c6b1644dc
Update dependency androidx.datastore:datastore-preferences to v1.1.7 (#3609)
* Update dependency androidx.datastore:datastore-preferences to v1.1.7

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
7 months ago
renovate[bot] efaa2cf472
Update dependency androidx.compose:compose-bom to v2025.05.01 (#3606)
* Update dependency androidx.compose:compose-bom to v2025.05.01

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
7 months ago
Alex Baker c4e160a21a Update version and changelog 7 months ago
Alex Baker 7d6c20aec0 Fix null pointer exception 7 months ago
renovate[bot] 3960b57242
Update dependency com.google.apis:google-api-services-drive to v3-rev20250511-2.0.0 (#3599)
* Update dependency com.google.apis:google-api-services-drive to v3-rev20250511-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
Alex Baker 0e5e6e9b05 Update version and changelog 8 months ago
Alex Baker 147c9f44d2 Remove erroneously added contacts permission 8 months ago
Alex Baker ad7141a1c9 Fix wallpaper theme 8 months ago
abdelbasset jabrane 6a99e75115 Translated using Weblate (Arabic)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/ar/
8 months ago
Hugoren Martinako b4f9770344 Translated using Weblate (Spanish)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/es/
8 months ago
Hugoren Martinako f6ffcf8397 Translated using Weblate (Catalan)
Currently translated at 61.3% (403 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ca/
8 months ago
109247019824 a23c541195 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bg/
8 months ago
renovate[bot] dea9783ce5
Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.8.1 (#3544)
* Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.8.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
renovate[bot] 93e7a16850
Update kotlin (#3594)
* Update kotlin

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
renovate[bot] 760bd1d58b
Update plugin jetbrains-compose to v1.8.0 (#3586)
* Update plugin jetbrains-compose to v1.8.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
Alex Baker e580ced066 Fix handling multiple shared attachments 8 months ago
Alex Baker 169140cc0b Allow video attachments 8 months ago
Alex Baker 8f5c41051b compose-bom 2025.05.00 8 months ago
renovate[bot] a2098c1876
Update dependency androidx.datastore:datastore-preferences to v1.1.6 (#3539)
* Update dependency androidx.datastore:datastore-preferences to v1.1.6

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
Alex Baker d446e009b4 Fix lint 8 months ago
Alex Baker 35161972c1 Revert "Update kotlin to v2.1.21 (#3593)"
This reverts commit c996462e32.
8 months ago
Alex Baker 6a8a9dec80 AGP 8.10 8 months ago
Alex Baker 627ada6679 Replace deprecated method call 8 months ago
renovate[bot] c996462e32
Update kotlin to v2.1.21 (#3593)
* Update kotlin to v2.1.21

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
renovate[bot] cd5a89960d
Update dependency com.google.auth:google-auth-library-oauth2-http to v1.35.0 (#3592)
* Update dependency com.google.auth:google-auth-library-oauth2-http to v1.35.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
cat 805b7d23df Translated using Weblate (Danish)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/da/
8 months ago
Alex Baker a4ca8b28aa msal for Google Play, AppAuth for F-Droid 8 months ago
renovate[bot] a519a06c3b
Update dependency com.google.apis:google-api-services-drive to v3-rev20250506-2.0.0 (#3587)
* Update dependency com.google.apis:google-api-services-drive to v3-rev20250506-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
renovate[bot] c22384d789
Update lifecycle to v2.9.0 (#3585)
* Update lifecycle to v2.9.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
renovate[bot] 247c286e61
Update dependency androidx.navigation:navigation-compose to v2.9.0 (#3583)
* Update dependency androidx.navigation:navigation-compose to v2.9.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
renovate[bot] 15c7bc2fc0
Update dependency androidx.sqlite:sqlite-bundled to v2.5.1 (#3582)
* Update dependency androidx.sqlite:sqlite-bundled to v2.5.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
Kaci 08fa635ce9 Translated using Weblate (Hungarian)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/hu/
8 months ago
Priit Jõerüüt 2946133eb2 Translated using Weblate (Estonian)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/et/
8 months ago
Don Zouras e8f6276b5b Translated using Weblate (Esperanto)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/eo/
8 months ago
renovate[bot] 83e8044bc5
Update dependency com.microsoft.identity.client:msal to v6.0.1 (#3574)
* Update dependency com.microsoft.identity.client:msal to v6.0.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
Don Zouras 892beb83f7 Translated using Weblate (Esperanto)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/eo/
8 months ago
Ihor Hordiichuk a623a7bd97 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/uk/
8 months ago
Emin Tufan Çetin 98ae90a6ad Translated using Weblate (Turkish)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/tr/
8 months ago
renovate[bot] 9b1078dc16
Update ktor monorepo to v3.1.3 (#3570)
* Update ktor monorepo to v3.1.3

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
renovate[bot] cb220654cf
Update dependency fastlane to v2.227.2 (#3569)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
8 months ago
Frits van Bommel 65533d3675 Translated using Weblate (Dutch)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/nl/
8 months ago
Pierfrancesco Passerini cdb11e631f Translated using Weblate (Italian)
Currently translated at 99.8% (656 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
8 months ago
Priit Jõerüüt 1fd0fe232a Translated using Weblate (Estonian)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/et/
8 months ago
Fjuro ec05fed425 Translated using Weblate (Czech)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/cs/
8 months ago
renovate[bot] 1d7cc3794a
Update dependency com.google.auth:google-auth-library-oauth2-http to v1.34.0 (#3566)
* Update dependency com.google.auth:google-auth-library-oauth2-http to v1.34.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
Alex Baker 3d3c16b297 Update version and changelog 8 months ago
Alex Baker deefb20481 Fix activity finishing itself 8 months ago
Alex Baker 83bc9798d6 Automatically set default Microsoft To Do list 8 months ago
Alex Baker 3d04f93aae Use lazy initializers for firebase 8 months ago
Alex Baker 15aada7f7f Limit drawer headers to 1 line 8 months ago
Alex Baker 20e1b802cd Reduce db query log level 8 months ago
Alex Baker bb4db1e63d Fix link in changelog 8 months ago
Sketch6580 6a5e8896b8 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/zh_Hans/
8 months ago
Jose Delvani e469a2ea97 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt_BR/
8 months ago
Florian Trayon bfb5529b73 Translated using Weblate (French)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fr/
8 months ago
Kachelkaiser 89101a22d4 Translated using Weblate (German)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
8 months ago
abdelbasset jabrane 221efb9bef Translated using Weblate (Arabic)
Currently translated at 100.0% (657 of 657 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ar/
8 months ago
Abdullhakim Sami Alshanqiti 2757821f4e Translated using Weblate (Arabic)
Currently translated at 97.8% (641 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ar/
8 months ago
abdelbasset jabrane ceb7da1e2c Translated using Weblate (Arabic)
Currently translated at 97.7% (640 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ar/
8 months ago
abdelbasset jabrane d5f737b6ac Translated using Weblate (Arabic)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/ar/
8 months ago
Alex Baker ff33989020 Update version and changelog 8 months ago
Alex Baker 4c01ab2e66 Import backup file in two passes
Import non-task data before loading tasks
8 months ago
Alex Baker 93674075cb Fix crash on search back handler 8 months ago
Alex Baker 6fe8175012 Prevent renaming or deleting the default list 8 months ago
Alex Baker d72b0f352b Fix crash when creating new list 8 months ago
Maksim_220 Кабанов 6b92cbee44 Translated using Weblate (Russian)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/ru/
8 months ago
renovate[bot] de2aca2877
chore(deps): update plugin ksp to v2.1.20-2.0.1 (#3559)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
8 months ago
renovate[bot] 1616d9903d
fix(deps): update dependency com.google.apis:google-api-services-drive to v3-rev20250427-2.0.0 (#3561)
* fix(deps): update dependency com.google.apis:google-api-services-drive to v3-rev20250427-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
Alex Baker 5f1ebd528d Don't create microsoft service on main 8 months ago
Alex Baker 6091410bcd Update version and changelog 8 months ago
Alex Baker 44eac87c9c Fix tests 8 months ago
Alex Baker ac9cdb7120 Initiate sync after signing in to Microsoft To Do 8 months ago
Alex Baker 0dea530c50 Prompt for sync at install time 8 months ago
renovate[bot] 267ebfe86e
fix(deps): update dependency com.google.accompanist:accompanist-permissions to v0.37.3 (#3552)
* fix(deps): update dependency com.google.accompanist:accompanist-permissions to v0.37.3

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
Alex Baker be3ca88f46 Add microsoft_config for f-droid, fix proguard 8 months ago
Alex Baker eaab2196e7 Fix generic build and remove some non-free deps 8 months ago
Alex Baker c3e10bde94 Add support for microsoft organization accounts 8 months ago
Alex Baker 68d7a02db8 Remove ManageSpaceActivity 8 months ago
தமிழ்நேரம் e48839b314 Translated using Weblate (Tamil)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ta/
8 months ago
renovate[bot] 0296008f8a
fix(deps): update dependency com.google.firebase:firebase-bom to v33.13.0 (#3548)
* fix(deps): update dependency com.google.firebase:firebase-bom to v33.13.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
Jose Riha 7c918bbb84 Translated using Weblate (Slovak)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sk/
8 months ago
Alex Baker 202af2d451 Launch new list activities from HomeScreen 8 months ago
Alex Baker a779dc331a Don't check for xml extension for backups 8 months ago
renovate[bot] 8480f03a96
fix(deps): update dependency com.google.apis:google-api-services-tasks to v1-rev20250415-2.0.0 (#3545)
* fix(deps): update dependency com.google.apis:google-api-services-tasks to v1-rev20250415-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
renovate[bot] c18296e7d0
fix(deps): update dependency androidx.work:work-runtime-ktx to v2.10.1 (#3541)
* fix(deps): update dependency androidx.work:work-runtime-ktx to v2.10.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
renovate[bot] 520fd0cebe
fix(deps): update dependency io.grpc:grpc-kotlin-stub to v1.4.3 (#3543)
* fix(deps): update dependency io.grpc:grpc-kotlin-stub to v1.4.3

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
renovate[bot] bd555f4003
fix(deps): update room to v2.7.1 (#3542)
* fix(deps): update room to v2.7.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
renovate[bot] b4b6abac19
fix(deps): update dependency com.google.apis:google-api-services-drive to v3-rev20250329-2.0.0 (#3537)
* fix(deps): update dependency com.google.apis:google-api-services-drive to v3-rev20250329-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
Alex Baker e578263149 Remove drop shadows to match icons 8 months ago
renovate[bot] b6989ba9a0
fix(deps): update agp to v8.9.2 (#3535)
* fix(deps): update agp to v8.9.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
8 months ago
Alex Baker 93d4eab92f Fix viewmodel 9 months ago
Alex Baker 8abf1f0342 Add splash screen 9 months ago
Alex Baker d3fed98e64 Add navigation and HomeScreenDestination 9 months ago
தமிழ்நேரம் e8b8fc0c87 Translated using Weblate (Tamil)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/ta/
9 months ago
Fjuro 939bcef641 Translated using Weblate (Czech)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/cs/
9 months ago
renovate[bot] d49ee12271
fix(deps): update dagger.hilt to v2.56.2 (#3527)
* fix(deps): update dagger.hilt to v2.56.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
9 months ago
DiamondtipDR 3a05d410b0 Translated using Weblate (Spanish)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/es/
9 months ago
renovate[bot] 591998b9fd
chore(deps): update plugin jetbrains-compose to v1.7.3 (#3196)
* chore(deps): update plugin jetbrains-compose to v1.7.3

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
9 months ago
renovate[bot] 5d8b39d8f1
chore(deps): update plugin redacted to v1.13.0 (#3140)
* chore(deps): update plugin redacted to v1.13.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
9 months ago
renovate[bot] c445f0dff0
fix(deps): update mockito monorepo to v5.17.0 (#3485)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
9 months ago
renovate[bot] 20e696d65d
fix(deps): update kotlin (#3430)
* fix(deps): update kotlin

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
9 months ago
codokie bce545944f
Fix text input alignment/direction (#3489)
* Revert text alignment change

* Set text direction of input fields based on content
9 months ago
leo 72aaf43db5 fix: Back Button closes app after using search #3426 9 months ago
renovate[bot] 966a529a51
Update grpc-java monorepo to v1.72.0 (#3521)
* Update grpc-java monorepo to v1.72.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
9 months ago
Alex Baker 08bf839e95 Fix crash in Intent.flagsToString 9 months ago
Alex Baker 286d031fca Hide start date = due date for OpenTasks sync 9 months ago
renovate[bot] 428d04eb46
Update dependency com.google.android.gms:play-services-maps to v19.2.0 (#3518)
* Update dependency com.google.android.gms:play-services-maps to v19.2.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
9 months ago
Alex Baker fc6f09f097 Use system language picker on Android 33+ 9 months ago
Maria Eduarda Weiland Machado Bratti dafc677374 Translated using Weblate (Portuguese)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt/
9 months ago
min7-i 00bf17c9ed Translated using Weblate (German)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
9 months ago
Maria Eduarda Weiland Machado Bratti f622209e97 Translated using Weblate (Portuguese)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/pt/
9 months ago
codokie 6d03cf6a6a
Automirrored icons fix (#3499)
* Fix arrow direction in RTL

* Fix help icon when locale is Hebrew

* Fix help icon in other RTL locales
9 months ago
Jay Tromp cd729bb04c Translated using Weblate (Dutch)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/nl/
9 months ago
Nucl3arSnake 7d32ada1e4 Translated using Weblate (Spanish)
Currently translated at 99.8% (654 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/es/
9 months ago
Alex Baker 526107ce1d Fix start date chip when grouping by start date 9 months ago
Hady 858a5475ad Translated using Weblate (Russian)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ru/
9 months ago
dedakir923 0c9d2d724a Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt_BR/
9 months ago
renovate[bot] 446fdd817f
Update dependency androidx.compose:compose-bom to v2025.04.00 (#3507)
* Update dependency androidx.compose:compose-bom to v2025.04.00

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
9 months ago
renovate[bot] b833c0cc5d
Update room to v2.7.0 (#3506)
* Update room to v2.7.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
9 months ago
renovate[bot] 5499a74dcc
Update dependency androidx.sqlite:sqlite-bundled to v2.5.0 (#3505)
* Update dependency androidx.sqlite:sqlite-bundled to v2.5.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
9 months ago
Alex Baker 6c3185da50 Add missing locales 9 months ago
sobeitnow0 6f0a6787fd Translated using Weblate (Portuguese)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt/
9 months ago
sobeitnow0 848aad76d6 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt_BR/
9 months ago
renovate[bot] 1ace1bc618
Update dependency fastlane to v2.227.1 (#3502)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
9 months ago
renovate[bot] cda3e91933
Update dependency com.android.tools:desugar_jdk_libs to v2.1.5 (#3198)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
9 months ago
Xo 2c1246ea5c Translated using Weblate (Hebrew)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/he/
9 months ago
Xo 5731ca2579 Translated using Weblate (Hebrew)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/he/
9 months ago
Xo b04b16e24e Translated using Weblate (Hebrew)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/he/
9 months ago
Xo 53e43b58cd Translated using Weblate (Hebrew)
Currently translated at 99.6% (653 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/he/
9 months ago
Alex Baker 0c7bc22eb9 Merge tag '14.6.2' 9 months ago
Alex Baker 46a6412a34 Update version 9 months ago
Alex Baker 44249ff1c9 Replace auto migration
Room does a foreign key check and it was causing crashes on someones
device
9 months ago
Alex Baker 35e340c936 Reapply "Set minSdk to 26 (Android 8)"
This reverts commit 660b6c8df5.
9 months ago
Alex Baker c4cb9e7d6a Update version and changelog 9 months ago
Alex Baker 137f437d78 Additional CaldavTask indexes 9 months ago
Alex Baker 660b6c8df5 Revert "Set minSdk to 26 (Android 8)"
This reverts commit a909ea53c4.
9 months ago
Alex Baker c186471ff3 Add index on CaldavTask 9 months ago
Alex Baker 0efb341be2 Add 'Create tasks' to debug menu 9 months ago
Jose Riha 001950bba5 Translated using Weblate (Slovak)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sk/
9 months ago
abdelbasset jabrane 56f443666c Translated using Weblate (Arabic)
Currently translated at 95.5% (626 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ar/
9 months ago
Alex Baker a0712b436d Error indicator for alarms when dates are set
If a new task has a due or start date set, but no reminders added, show
an error indicator
9 months ago
Alex Baker 03cfe259f0 Error indicators for relative alarms
Use error colors if a relative start or end alarm is set without a start
or end date
9 months ago
Alex Baker 5692f48e75 Fix populating clock picker 9 months ago
Alex Baker 4ef434e7f4 Fix displaying selected calendar month 9 months ago
elid acab5586fd Translated using Weblate (Hebrew)
Currently translated at 85.4% (560 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/he/
9 months ago
elid ed1044f5ae Translated using Weblate (Hebrew)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/he/
9 months ago
Francesco Saltori ff84f2a9db Translated using Weblate (Italian)
Currently translated at 99.8% (654 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
9 months ago
renovate[bot] 1fef936e55
Update dependency com.google.firebase:firebase-bom to v33.12.0 (#3471)
* Update dependency com.google.firebase:firebase-bom to v33.12.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
9 months ago
renovate[bot] 751bba5d01
Update plugin protobuf to v0.9.5 (#3470)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
9 months ago
Don Zouras eee89a6f3a Translated using Weblate (Esperanto)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/eo/
9 months ago
Alex Baker 0a121f4d05 Fix grouping by start date descending 9 months ago
Alex Baker 84d00294f9 Change sort icon 9 months ago
Emin Tufan Çetin f4990275d7 Translated using Weblate (Turkish)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/tr/
9 months ago
Alex Baker 2a182ad910 Merge branch '14.6.1' 9 months ago
Alex Baker 9fd50c117c Update version and changelog 9 months ago
Alex Baker 291cad4e5a Fix grouping by due date descending 9 months ago
Alex Baker f63632e223 Sort group ascending by default 9 months ago
Alex Baker e40c0553e1 Preserve previous sort defaults for existing users 9 months ago
cat 657f79e67a Translated using Weblate (Danish)
Currently translated at 100.0% (655 of 655 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/da/
9 months ago
cat 7f8ee59595 Translated using Weblate (Danish)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/da/
9 months ago
renovate[bot] 56cd8eef72
Update ktor monorepo to v3.1.2 (#3460)
* Update ktor monorepo to v3.1.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
9 months ago
Kachelkaiser 6f0abcb4fa Translated using Weblate (German)
Currently translated at 100.0% (660 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
9 months ago
Alex Baker a909ea53c4 Set minSdk to 26 (Android 8) 9 months ago
renovate[bot] 0d526dc2fd
Update protobuf monorepo to v4.30.2 (#3457)
* Update protobuf monorepo to v4.30.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
9 months ago
renovate[bot] 22c05853b0
Update room to v2.7.0-rc03 (#3458)
* Update room to v2.7.0-rc03

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
9 months ago
renovate[bot] a53e962c7e
Update dependency androidx.sqlite:sqlite-bundled to v2.5.0-rc03 (#3456)
* Update dependency androidx.sqlite:sqlite-bundled to v2.5.0-rc03

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
9 months ago
renovate[bot] 5ed4ce5fa0
Update dependency androidx.datastore:datastore-preferences to v1.1.4 (#3455)
* Update dependency androidx.datastore:datastore-preferences to v1.1.4

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
9 months ago
renovate[bot] ccf1ed5266
Update dependency androidx.compose:compose-bom to v2025.03.01 (#3454)
* Update dependency androidx.compose:compose-bom to v2025.03.01

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
9 months ago
Alex Baker 6a529009ae Remove shadow from icons 9 months ago
Alex Baker ea313d9b1f Update version and changelog 9 months ago
renovate[bot] ae8b4b9c73
Update dagger.hilt to v2.56.1 (#3451)
* Update dagger.hilt to v2.56.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
9 months ago
Alex Baker fe7a55f909 Fix tests 9 months ago
Sebastian Gustavsson c567a16f68 Translated using Weblate (Swedish)
Currently translated at 99.8% (659 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sv/
9 months ago
YuzuMikan 01140cd3fd Translated using Weblate (Japanese)
Currently translated at 99.5% (657 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ja/
9 months ago
Pierfrancesco Passerini 8853fb9956 Translated using Weblate (Italian)
Currently translated at 99.3% (656 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
9 months ago
Alex Baker 700e99e547 Set theme color everywhere 9 months ago
Alex Baker e494f7cc13 Don't show start chip if it matches start of day 9 months ago
Alex Baker 326b90800d Don't show start date chip if it matches due date 9 months ago
Alex Baker 1fe59ab50b Add IntentExtensions 9 months ago
Alex Baker d5dbddaab8 Dynamic color setting 9 months ago
Sketch6580 e9eac51726 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (660 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/zh_Hans/
9 months ago
109247019824 9101a4c96c Translated using Weblate (Bulgarian)
Currently translated at 100.0% (660 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bg/
9 months ago
Ihor Hordiichuk dc6c8b0e35 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (660 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/uk/
9 months ago
dedakir923 4f94becac0 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (660 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt_BR/
9 months ago
Priit Jõerüüt 9b6f18e4f1 Translated using Weblate (Estonian)
Currently translated at 100.0% (660 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/et/
9 months ago
renovate[bot] 3111bbd57a
Update agp to v8.9.1 (#3445)
* Update agp to v8.9.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
9 months ago
Alex Baker 78699dd58d Update version and changelog 9 months ago
Alex Baker 055c8e122f Preserve default sort mode for existing widgets 9 months ago
Kaci 7f7469caa8 Translated using Weblate (Hungarian)
Currently translated at 100.0% (660 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/hu/
9 months ago
Alex Baker 508852ff49 Update version and changelog 9 months ago
Alex Baker 3be3bb82ad Update intent debug logging 9 months ago
Alex Baker f6e206fbc2 Restart activities so insets are applied correctly 9 months ago
Alex Baker 37fd688af7 Fix navbar padding for 3 button nav in landscape 9 months ago
Alex Baker bd4888390f Restore option to save task on keyboard done 9 months ago
Alex Baker 69f012a4b1 Set default group and sort mode to due date 9 months ago
Alex Baker 61876e881a Start calendar at current selected date 9 months ago
Alex Baker c24d1da566 Apply date changes when dismissing bottom sheet 9 months ago
Alex Baker 41f2f51c37 Add DueDatePicker preview and fix layout issues 9 months ago
Emin Tufan Çetin 7ee578ba64 Translated using Weblate (Turkish)
Currently translated at 100.0% (660 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/tr/
9 months ago
Frits van Bommel c1187ab8dc Translated using Weblate (Dutch)
Currently translated at 100.0% (660 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/nl/
9 months ago
Florian Trayon 41dcf062dc Translated using Weblate (French)
Currently translated at 100.0% (660 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fr/
9 months ago
Priit Jõerüüt 9c72200dd8 Translated using Weblate (Estonian)
Currently translated at 100.0% (660 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/et/
9 months ago
C. Rüdinger 2c5817665d Translated using Weblate (German)
Currently translated at 100.0% (660 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
9 months ago
Pierfrancesco Passerini b19e86bb3d Translated using Weblate (Italian)
Currently translated at 99.5% (657 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
9 months ago
Sketch6580 7b0dc106ef Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (660 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/zh_Hans/
10 months ago
dedakir923 7bcff7a629 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (660 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt_BR/
10 months ago
109247019824 4158445949 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (660 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bg/
10 months ago
Alex Baker 62f8e7fcdb Streaming backup file import 10 months ago
Alex Baker 4c4d5cdc14 Stream data to backup files 10 months ago
Alex Baker 1e3b863dd8 Fix translation errors 10 months ago
Igor Sorocean 0567972488 Translated using Weblate (Romanian)
Currently translated at 100.0% (663 of 663 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ro/
10 months ago
Igor Sorocean ec77a0dabd Translated using Weblate (Romanian)
Currently translated at 96.3% (639 of 663 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ro/
10 months ago
தமிழ்நேரம் 98b411131b Translated using Weblate (Tamil)
Currently translated at 97.4% (646 of 663 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ta/
10 months ago
தமிழ்நேரம் 87d27a326e Translated using Weblate (Tamil)
Currently translated at 81.9% (543 of 663 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ta/
10 months ago
Alex Baker eb9dd40103 Material date time pickers everywhere
Also remove calendar and clock style preferences. App will keep track of
what type of input you use when you switch
10 months ago
Hady 70ff2ad79f
fix of two minor misbehaviors in date-time handling (#3248) 10 months ago
Alex Baker a90b4b510f Add AppUpdatedBanner 10 months ago
renovate[bot] 07f1677d1a
Update dependency com.google.firebase:firebase-bom to v33.11.0 (#3432)
* Update dependency com.google.firebase:firebase-bom to v33.11.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
Alex Baker dab03ff580 Update version and changelog 10 months ago
Alex Baker c78ec022a5 Add buttons to date picker bottom sheet 10 months ago
renovate[bot] de42915ced
Update dagger.hilt to v2.56 (#3429)
* Update dagger.hilt to v2.56

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
renovate[bot] 9b160aed5b
Update dependency com.google.apis:google-api-services-tasks to v1-rev20250316-2.0.0 (#3428)
* Update dependency com.google.apis:google-api-services-tasks to v1-rev20250316-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
Alex Baker 33a7a0a53f Compose date time pickers 10 months ago
abdelbasset jabrane 2f42d0ad28 Translated using Weblate (Arabic)
Currently translated at 93.8% (622 of 663 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ar/
10 months ago
abdelbasset jabrane 4540352645 Translated using Weblate (Arabic)
Currently translated at 78.7% (26 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/ar/
10 months ago
renovate[bot] ce6259109f
Update mockito monorepo to v5.16.1 (#3420)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
10 months ago
Alex Baker 2a5544b66f Remove 'Start of week' preference 10 months ago
Alex Baker 9941c0bd8d Update version and changelog 10 months ago
Clouds Liberty a561fb63f4 Translated using Weblate (Malayalam)
Currently translated at 15.0% (100 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ml/
10 months ago
GREAT DNG 6098c7e449 Translated using Weblate (Russian)
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ru/
10 months ago
Clouds Liberty 894e347e91 Translated using Weblate (Malayalam)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/ml/
10 months ago
Alex Baker 5427305e09 Check for tasks.org accounts via caldav 10 months ago
Alex Baker fb6af08917 Upgrade reduces beg cooldown 10 months ago
renovate[bot] 827c3fdd6b
Update dependency androidx.compose:compose-bom to v2025.03.00 (#3415)
* Update dependency androidx.compose:compose-bom to v2025.03.00

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
Alex Baker 9e1dad7a02 Remove HingePolicy.AlwaysAvoid 10 months ago
renovate[bot] e3d826883b
Update protobuf monorepo to v4.30.1 (#3413)
* Update protobuf monorepo to v4.30.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
renovate[bot] 8c07489fe5
Update dependency androidx.compose.material3.adaptive:adaptive-navigation-android to v1.1.0 (#3417)
* Update dependency androidx.compose.material3.adaptive:adaptive-navigation-android to v1.1.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
renovate[bot] 0af5be4a36
Update dependency androidx.compose.material3.adaptive:adaptive-layout-android to v1.1.0 (#3416)
* Update dependency androidx.compose.material3.adaptive:adaptive-layout-android to v1.1.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
renovate[bot] d90a4398a6
Update dependency androidx.sqlite:sqlite-bundled to v2.5.0-rc02 (#3412)
* Update dependency androidx.sqlite:sqlite-bundled to v2.5.0-rc02

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
renovate[bot] c51908c235
Update room to v2.7.0-rc02 (#3414)
* Update room to v2.7.0-rc02

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
renovate[bot] da2b4520bb Update dependency fastlane to v2.227.0 10 months ago
bittin1ddc447d824349b2 33298c435d Translated using Weblate (Swedish)
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sv/
10 months ago
Alex Baker 2c5fcca38d Fix content padding on drawer 10 months ago
Øjvind Fritjof Arnfred b012c41683 Translated using Weblate (Danish)
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/da/
10 months ago
Øjvind Fritjof Arnfred 29d4c8c952 Translated using Weblate (Danish)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/da/
10 months ago
தமிழ்நேரம் 6e5a79d83c Translated using Weblate (Tamil)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/ta/
10 months ago
Kaci 47fce71be7 Translated using Weblate (Hungarian)
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/hu/
10 months ago
renovate[bot] 0e40be1d19
Update dependency androidx.compose:compose-bom to v2025 (#3262)
* Update dependency androidx.compose:compose-bom to v2025

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
renovate[bot] 5198e8a7a4
Update mockito monorepo to v5.16.0 (#3383)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
10 months ago
Alex Baker 1455914d2f Update version and changelog 10 months ago
Alex Baker d3e2fe0ed4 Fix microsoft authentication crash 10 months ago
Alex Baker 037ed76589 Fix crash when applying insets 10 months ago
renovate[bot] 06829dd859
Update dependency com.google.apis:google-api-services-drive to v3-rev20250220-2.0.0 (#3396)
* Update dependency com.google.apis:google-api-services-drive to v3-rev20250220-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
dedakir923 ce25cc9c44 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt_BR/
10 months ago
dedakir923 c906f6d2f3 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/pt_BR/
10 months ago
Ihor Hordiichuk bfc9669ac1 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/uk/
10 months ago
Don Zouras 207ff9e134 Translated using Weblate (Esperanto)
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/eo/
10 months ago
109247019824 a2ddeeabae Translated using Weblate (Bulgarian)
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bg/
10 months ago
Alex Baker 1a10b0d820 Update version and changelog 10 months ago
Alex Baker 80d1ab66f9 Fix special placeholder characters 10 months ago
Abilash S 0a4e57524e Translated using Weblate (Kannada)
Currently translated at 6.3% (42 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/kn/
10 months ago
Pierfrancesco Passerini 9a469a1a9d Translated using Weblate (Italian)
Currently translated at 99.5% (662 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
10 months ago
Florian Trayon 783f335488 Translated using Weblate (French)
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fr/
10 months ago
ColorfulRhino 68e8342f43 Translated using Weblate (German)
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
10 months ago
Frits van Bommel 2052f1232b Translated using Weblate (Dutch)
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/nl/
10 months ago
大王叫我来巡山 1e479c36e4 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/zh_Hans/
10 months ago
Priit Jõerüüt 5f7943478d Translated using Weblate (Estonian)
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/et/
10 months ago
Mamad Zahiri a19a76d5a4 Translated using Weblate (Persian)
Currently translated at 33.6% (224 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fa/
10 months ago
Alex Baker 886e848172 Load icons off main 10 months ago
Alex Baker 1608aaeb54 Fix some filter stability issues 10 months ago
Alex Baker 0d2bf1a3ff Use hilt @TestInstallIn 10 months ago
renovate[bot] c1cbc3fc7d
Update horologist to v0.6.23 (#3389)
* Update horologist to v0.6.23

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
renovate[bot] 0a9a158c55
Update dependency com.google.apis:google-api-services-tasks to v1-rev20250302-2.0.0 (#3388)
* Update dependency com.google.apis:google-api-services-tasks to v1-rev20250302-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
renovate[bot] 9903d36908
Update protobuf monorepo to v4.30.0 (#3387)
* Update protobuf monorepo to v4.30.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
renovate[bot] a341d51b5e
Update grpc-java monorepo to v1.71.0 (#3386)
* Update grpc-java monorepo to v1.71.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
renovate[bot] 5103325f06
Update agp to v8.9.0 (#3385)
* Update agp to v8.9.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
Alex Baker 012a0e5949 Update version and changelog 10 months ago
Alex Baker 870ecadc56 Fix drawer recompositions 10 months ago
Alex Baker cf5f810f18 Replace sealed interfaces 10 months ago
Alex Baker 3cd169dd87 Update compose metrics 10 months ago
Alex Baker bc5e102e06 Fix recursive self-loop 10 months ago
Alex Baker 2ac328e1df Bottom search bar on all Android levels 10 months ago
Alex Baker 1d44605539 Move settings to top toolbar 10 months ago
Alex Baker d306dda2f9 Remove GREY_900 theme, fix black/white theme 10 months ago
Alex Baker aafe4b37b0 Subtask count includes all descendents 10 months ago
Alex Baker bfea931495 Completed subtasks at bottom 10 months ago
Alex Baker b411441ba9 Move search button to bottom bar 10 months ago
renovate[bot] 317aae1e3e
Update dependency gradle to v8.13 (#3381)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
10 months ago
renovate[bot] 2208e7149a
Update dependency com.google.firebase:firebase-bom to v33.10.0 (#3380)
* Update dependency com.google.firebase:firebase-bom to v33.10.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
Alex Baker 454137cad8 Update version and changelog 10 months ago
Alex Baker ba66deaddc Material 3 - WIP 10 months ago
renovate[bot] 759b418dfb
Update plugin ksp to v2.1.10-1.0.31 (#3378)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
10 months ago
renovate[bot] 62e83555c2
Update room to v2.7.0-rc01 (#3379)
* Update room to v2.7.0-rc01

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
renovate[bot] d6c8575926
Update dependency com.google.auth:google-auth-library-oauth2-http to v1.33.1 (#3377)
* Update dependency com.google.auth:google-auth-library-oauth2-http to v1.33.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
renovate[bot] 54ef54f97e
Update dependency androidx.sqlite:sqlite-bundled to v2.5.0-rc01 (#3376)
* Update dependency androidx.sqlite:sqlite-bundled to v2.5.0-rc01

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
renovate[bot] 66ad4ca561
Update dependency androidx.datastore:datastore-preferences to v1.1.3 (#3375)
* Update dependency androidx.datastore:datastore-preferences to v1.1.3

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
renovate[bot] eae848b1cb
Update dependency androidx.constraintlayout:constraintlayout to v2.2.1 (#3374)
* Update dependency androidx.constraintlayout:constraintlayout to v2.2.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
renovate[bot] 8b19d054a0
Update dependency androidx.activity:activity-compose to v1.10.1 (#3373)
* Update dependency androidx.activity:activity-compose to v1.10.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
renovate[bot] f40a7d625e
Update agp to v8.8.2 (#3372)
* Update agp to v8.8.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
Languages add-on b40bec1e50 Added translation using Weblate (Nahuatl) 10 months ago
Benjamin Bruce 0e65d2a57f Translated using Weblate (Nahuatl)
Currently translated at 0.1% (1 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/nah/
10 months ago
Benjamin Bruce 3c6526db01 Added translation using Weblate (Nahuatl) 10 months ago
Alex Baker cafe3abf23 Ignore relationship loops created remotely 10 months ago
Alex Baker 32c4fe2511 Only check path on subtasks 10 months ago
Alex Baker e796da6e37 Prevent infinite recursion in queries 10 months ago
renovate[bot] 3364e8c8ee
Update dependency com.google.auth:google-auth-library-oauth2-http to v1.33.0 (#3365)
* Update dependency com.google.auth:google-auth-library-oauth2-http to v1.33.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
M_Haruki cb4be5f1cf Translated using Weblate (Japanese)
Currently translated at 98.7% (657 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ja/
10 months ago
renovate[bot] a94e136b8c
Update ktor monorepo to v3.1.1 (#3364)
* Update ktor monorepo to v3.1.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
Alex Baker 586dbacb0f Update caldav sync error message logging 10 months ago
Alex Baker 8867b79b70 Fix crash on null displayName in Microsoft To Do 10 months ago
github-actions[bot] ed9609bf77 Update dependency diffs 10 months ago
Alex Baker d43bc55c02 Side navigation drawer 10 months ago
Alex Baker 840049b206 Refactoring TaskEditControlFragments 10 months ago
Alex Baker 2d8df0bb67 Refactoring TaskEditFragment 10 months ago
M_Haruki ea08976c06 Translated using Weblate (Japanese)
Currently translated at 97.7% (650 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ja/
10 months ago
M_Haruki 58423824ca Translated using Weblate (Japanese)
Currently translated at 96.8% (644 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ja/
10 months ago
Alex Baker 80168565d8 Don't update Android task description 10 months ago
renovate[bot] 9724590703
Update dependency com.google.apis:google-api-services-drive to v3-rev20250216-2.0.0 (#3359)
* Update dependency com.google.apis:google-api-services-drive to v3-rev20250216-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
renovate[bot] c7ddb524a2
Update dependency com.google.accompanist:accompanist-permissions to v0.37.2 (#3357)
* Update dependency com.google.accompanist:accompanist-permissions to v0.37.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
renovate[bot] b6c99b234f
Update dependency com.google.android.gms:play-services-maps to v19.1.0 (#3356)
* Update dependency com.google.android.gms:play-services-maps to v19.1.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
10 months ago
Andrey Mukamolov 9bd2f40da9 Translated using Weblate (Belarusian)
Currently translated at 13.5% (90 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/be/
11 months ago
M_Haruki 5c4b772931 Translated using Weblate (Japanese)
Currently translated at 96.0% (639 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ja/
11 months ago
M_Haruki 079d5b2d07 Translated using Weblate (Japanese)
Currently translated at 95.1% (633 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ja/
11 months ago
renovate[bot] 21e6605f3c
Update dependency com.google.accompanist:accompanist-permissions to v0.37.1 (#3353)
* Update dependency com.google.accompanist:accompanist-permissions to v0.37.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
11 months ago
Alex Baker d88541e0a6 Use default scaffold width 11 months ago
Andrey Mukamolov 6f9cffb8de Translated using Weblate (Belarusian)
Currently translated at 10.8% (72 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/be/
11 months ago
Andrey Mukamolov 86ebbf022c Translated using Weblate (Belarusian)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/be/
11 months ago
Alex Baker f6d243e929 Update version and changelog 11 months ago
Alex Baker c21c65b62b Fix tests 11 months ago
renovate[bot] 16a16500fb
Update dependency com.google.firebase:firebase-bom to v33.9.0 (#3344)
* Update dependency com.google.firebase:firebase-bom to v33.9.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
11 months ago
renovate[bot] 89de501bf7
Update ktor monorepo to v3.1.0 (#3345)
* Update ktor monorepo to v3.1.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
11 months ago
Alex Baker dce5433837 Add imePadding to edit screen 11 months ago
Alex Baker 9b80a02d03 Update TaskEditViewModel initialization 11 months ago
Alex Baker 69b189b29c Add device info to logs 11 months ago
Alex Baker 1b84c13937 Add logging for uncaught exceptions 11 months ago
renovate[bot] 6d177f643e
Update wearCompose to v1.4.1 (#3343)
* Update wearCompose to v1.4.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
11 months ago
renovate[bot] a8e4923ecd
Update ksp and kotlinx.datetime (#3342)
* Update kotlin

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
11 months ago
renovate[bot] 74cdc0ba81
Update dependency com.google.apis:google-api-services-drive to v3-rev20250210-2.0.0 (#3341)
* Update dependency com.google.apis:google-api-services-drive to v3-rev20250210-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
11 months ago
renovate[bot] 050841d202
Update dependency androidx.fragment:fragment-compose to v1.8.6 (#3339)
* Update dependency androidx.fragment:fragment-compose to v1.8.6

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
11 months ago
renovate[bot] 7327ca464e
Update dependency androidx.paging:paging-compose to v3.3.6 (#3340)
* Update dependency androidx.paging:paging-compose to v3.3.6

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
11 months ago
renovate[bot] d2fad22922
Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.7.8 (#3338)
* Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.7.8

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
11 months ago
renovate[bot] d4434c4065
Update dependency com.google.auth:google-auth-library-oauth2-http to v1.32.1 (#3290)
* Update dependency com.google.auth:google-auth-library-oauth2-http to v1.32.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
11 months ago
renovate[bot] 9277f61964
Update agp to v8.8.1 (#3336)
* Update agp to v8.8.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
11 months ago
Alex Baker 00fadd10e1 Fixed back handler when resuming from background 11 months ago
Alex Baker 77eaf219b4 Fix test compile 11 months ago
renovate[bot] 7b930f11be
Update dependency com.google.firebase:firebase-crashlytics-gradle to v3.0.3 (#3323)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
11 months ago
Alex Baker 3bcdc773ba room 2.7.0-beta01, sqlite 2.5.0-beta01 11 months ago
Alex Baker 05389f8b83 Fix navigation issues 11 months ago
Alex Baker c9c984142e Set busy timeout on all connections 11 months ago
github-actions[bot] f72dd1fe74 Update dependency diffs 11 months ago
Alex Baker 3ada78b0f1 Fix saving files to Nextcloud 11 months ago
Alex Baker 1f659c3dc6 Adaptive layout 11 months ago
Ihor Hordiichuk c48cfc32d1 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/uk/
11 months ago
ColorfulRhino 145e078a5e Translated using Weblate (German)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
11 months ago
Alex Baker 289f73f72b Fix comment bar 11 months ago
Alex Baker b6426cc2fb Remove extra translations 11 months ago
Alex Baker 6ed85f15bc Use enableEdgeToEdge in MainActivity 11 months ago
Alex Baker 5409173830 Remove top app bar and collapsing bar preferences 11 months ago
Priit Jõerüüt c471a94a0d Translated using Weblate (Estonian)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/et/
11 months ago
Jose Riha f44b6223fe Translated using Weblate (Slovak)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sk/
11 months ago
Anonymous 615598b434 Translated using Weblate (Nepali)
Currently translated at 21.2% (7 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/ne/
11 months ago
Alex Baker 0b9a168f69 Fix cancel button in notification dialog 11 months ago
Alex Baker 809c5622f9 Fix list chip when subtask in top level 11 months ago
Alex Baker 1a1eefbbab Update version and changelog 11 months ago
Alex Baker 6fe9b0b255 RIP Flipper 11 months ago
Alex Baker 7ed406fbbc
Update CHANGELOG.md 11 months ago
Alex Baker 1385524ee8 Log widget clicks 11 months ago
Alex Baker 8a0014a50d Fix ANRs in AppWidgetManager 11 months ago
Alex Baker e8f5a72a08 Improve recursive task list query 11 months ago
Alex Baker 11f55aa702 Log SQL queries in debug mode 11 months ago
Alex Baker c0067091fa Move some work outside of the transaction 11 months ago
Alex Baker 349ff9451f Update version and changelog 11 months ago
Alex Baker 281d929ede Update logging 11 months ago
Alex Baker 7ede174adf Use platform SQLite on Android 11+ 11 months ago
Sagun Khatri a35176d093 Translated using Weblate (Nepali)
Currently translated at 11.0% (74 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ne/
11 months ago
Kachelkaiser 7eb91be1a0 Translated using Weblate (German)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
11 months ago
Sagun Khatri 0e28b8a028 Translated using Weblate (Nepali)
Currently translated at 9.0% (3 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/ne/
11 months ago
Alex Baker 7aca6c0743 Update version and changelog 11 months ago
Alex Baker 88217e50c7 Improve updating parents query 11 months ago
Alex Baker 0098c69f67 Redact google tasks requests 11 months ago
Alex Baker 5b5ba97bb2 Limit chip updates 11 months ago
Kachelkaiser c8d1d379a8 Translated using Weblate (German)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
11 months ago
ColorfulRhino 68d856914f Translated using Weblate (German)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
11 months ago
Alex Baker 6e0105683e Update version and changelog 11 months ago
Alex Baker 5d2e25ec4e Fix recursive query 11 months ago
Alex Baker 951d4de52d Fix test compile 11 months ago
Alex Baker 8a27f5df4b Use transaction annotation 11 months ago
Kachelkaiser 8ef23c1593 Translated using Weblate (German)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/de/
11 months ago
Alex Baker 1b031134db Add collapsed state to header 11 months ago
Priit Jõerüüt 9ab75fcfd2 Translated using Weblate (Estonian)
Currently translated at 88.1% (590 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/et/
11 months ago
Kachelkaiser 96b5cbaf16 Translated using Weblate (German)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
11 months ago
Alex Baker cc398b2b3d Update version and changelog 11 months ago
Alex Baker f0cd4644c1 Improved recursive query 11 months ago
Alex Baker 7c1ac86e33 Use BundledSQLiteDriver again 11 months ago
renovate[bot] 728029e949
Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.7.7 (#3306)
* Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.7.7

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
11 months ago
Alex Baker defb9f76ce Don't update drawer unless its open 11 months ago
Alex Baker 69a5376dde Room 2.7.0-alpha13 11 months ago
renovate[bot] 44ba64e06b Update plugin ksp to v2.1.10-1.0.29 11 months ago
github-actions[bot] 1bbe171921 Update dependency diffs 11 months ago
renovate[bot] e62521474c Update kotlin to v2.1.10 11 months ago
Nick Wick e907671e9a Translated using Weblate (Swedish)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sv/
11 months ago
Kachelkaiser 65333d2930 Translated using Weblate (German)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
11 months ago
Kachelkaiser 3f276028ae Translated using Weblate (German)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
11 months ago
C. Rüdinger 35b282b574 Translated using Weblate (German)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
11 months ago
Kachelkaiser 853fdc10a9 Translated using Weblate (German)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
11 months ago
ERYpTION 3f8a611277 Translated using Weblate (Danish)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/da/
11 months ago
Alex Baker a7e860164b Update version and changelog 11 months ago
Alex Baker 04c97354f9 Additional logging 11 months ago
Alex Baker 91eafc80b4 Remove unused method in OpenTaskDao 11 months ago
Alex Baker 429ace38ee Reduce unnecessary notification summary updates 11 months ago
Alex Baker 87f6ad01f2 Log preference changes 11 months ago
Alex Baker e7396c39e6 Move useReaderConnection to content provider 11 months ago
Alex Baker bd550f68eb Separate timings for building query 11 months ago
Alex Baker 9016a7b628 Use ColumnInfo for recursive fields 11 months ago
Alex Baker 70dd8932a9 Use RoomRawQuery 11 months ago
Sagun Khatri 803a005dd8 Translated using Weblate (Nepali)
Currently translated at 0.8% (6 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ne/
11 months ago
Sunjae Choi d4cd7cd4d7 Translated using Weblate (Korean)
Currently translated at 99.2% (664 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ko/
11 months ago
ERYpTION 80e468f3e3 Translated using Weblate (Danish)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/da/
11 months ago
renovate[bot] 2b6ccb8f49
Update dependency com.google.apis:google-api-services-drive to v3-rev20250122-2.0.0 (#3295)
* Update dependency com.google.apis:google-api-services-drive to v3-rev20250122-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
11 months ago
renovate[bot] 0da5e98402
Update dependency gradle to v8.12.1 (#3294)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
11 months ago
Priit Jõerüüt c8e34e3b61 Translated using Weblate (Estonian)
Currently translated at 79.2% (530 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/et/
11 months ago
ColorfulRhino a902ae2cbb Translated using Weblate (German)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
11 months ago
C. Rüdinger 703f7d58d9 Translated using Weblate (German)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
11 months ago
ColorfulRhino aa6a5a1892 Translated using Weblate (German)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
11 months ago
C. Rüdinger 702bee14a5 Translated using Weblate (German)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
11 months ago
Jose Riha 8bcb4384ab Translated using Weblate (Slovak)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sk/
11 months ago
Pierfrancesco Passerini d8dfeac3c6 Translated using Weblate (Italian)
Currently translated at 99.4% (665 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
11 months ago
renovate[bot] 7a82100b43
Update grpc-java monorepo to v1.70.0 (#3289)
* Update grpc-java monorepo to v1.70.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
11 months ago
Alex Baker 86807a433b Update version and changelog 11 months ago
Alex Baker 274111f286 Revert database improvements
Too many database locked crashes
https://issuetracker.google.com/issues/380088809
11 months ago
Pierfrancesco Passerini 828c5872b3 Translated using Weblate (Italian)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/it/
12 months ago
Priit Jõerüüt 970d49ac06 Translated using Weblate (Estonian)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/et/
12 months ago
hasak 39f593da5d Translated using Weblate (Bosnian)
Currently translated at 16.2% (109 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bs/
12 months ago
Pierfrancesco Passerini 20b69b798b Translated using Weblate (Italian)
Currently translated at 99.1% (663 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
12 months ago
Don 9c8afbd99f Translated using Weblate (Estonian)
Currently translated at 75.1% (503 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/et/
12 months ago
Priit Jõerüüt 484ef470b5 Translated using Weblate (Estonian)
Currently translated at 75.1% (503 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/et/
12 months ago
Priit Jõerüüt 7270b225d7 Translated using Weblate (Estonian)
Currently translated at 70.2% (470 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/et/
12 months ago
Sagun Khatri 4cb4a1d9be Translated using Weblate (Nepali)
Currently translated at 0.7% (5 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ne/
12 months ago
Priit Jõerüüt 9bd64e5c32 Translated using Weblate (Estonian)
Currently translated at 70.1% (469 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/et/
12 months ago
Alex Baker 44ed6ea444 Clean up ComposeViews in fragments 12 months ago
Alex Baker ae40b31945 Merge branch '14.4.5' 12 months ago
Sagun Khatri bf80eb3bf9 Added translation using Weblate (Nepali) 12 months ago
Languages add-on 2e779b17a5 Added translation using Weblate (Nepali) 12 months ago
Alex Baker 6499dc7385 Update version and changelog 12 months ago
Alex Baker fb72f10153 Throttle OpenTask sync requests 12 months ago
Alex Baker 4c3ba4cb72 Throttle drawer updates 12 months ago
Alex Baker f6805f325c Minor recursive query reformatting 12 months ago
Alex Baker ac9bb17f83 Use bundled sqlite driver for tests 12 months ago
Alex Baker e979573e7e Fix test compilation 12 months ago
Don Zouras fa29cb9ff4 Translated using Weblate (Esperanto)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/eo/
12 months ago
Alex Baker e21ea78f66 Remove temp table from recursive query 12 months ago
Alex Baker bb61bc1ab3 Update version and changelog 12 months ago
Alex Baker f588551bca Fix list pickers 12 months ago
Alex Baker d31c7a820b Use bundled sqlite library 12 months ago
Alex Baker 05896fd46a Update version and changelog 12 months ago
Ihor Hordiichuk 48dbebbe04 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/uk/
12 months ago
Emin Tufan Çetin 0048262158 Translated using Weblate (Turkish)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/tr/
12 months ago
Alex Baker 56e95749f6 Preserve repeating alarms when copying tasks 12 months ago
Alex Baker f4ecbdf93b Invalidate task list on resume 12 months ago
Alex Baker eac13c07a3 Fix chips for local lists 12 months ago
Alex Baker 4698b0f372 Fix change loss when completing from edit screen 12 months ago
C. Rüdinger 2f1e36a1be Translated using Weblate (German)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
12 months ago
renovate[bot] 839e92a3f7
Update dependency com.google.firebase:firebase-bom to v33.8.0 (#3264)
* Update dependency com.google.firebase:firebase-bom to v33.8.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
12 months ago
renovate[bot] 1a8f88e9a2
Update grpc-java monorepo to v1.69.1 (#3263)
* Update grpc-java monorepo to v1.69.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
12 months ago
Alex Baker 5e7c145eec Update version and changelog 12 months ago
Alex Baker 17f305379c Fix crash for missing account in getAnyList 12 months ago
renovate[bot] 1140c28cff
Update dependency androidx.recyclerview:recyclerview to v1.4.0 (#3261)
* Update dependency androidx.recyclerview:recyclerview to v1.4.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
12 months ago
renovate[bot] d7bccd69c3
Update dependency androidx.activity:activity-compose to v1.10.0 (#3260)
* Update dependency androidx.activity:activity-compose to v1.10.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
12 months ago
renovate[bot] 1b5104c5e6
Update dependency androidx.datastore:datastore-preferences to v1.1.2 (#3259)
* Update dependency androidx.datastore:datastore-preferences to v1.1.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
12 months ago
Milo Ivir afde8ef461 Translated using Weblate (Croatian)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/hr/
12 months ago
Pierfrancesco Passerini 57ef5845cf Translated using Weblate (Italian)
Currently translated at 98.2% (657 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
12 months ago
CennoxX c1945f1bc1 Translated using Weblate (German)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
12 months ago
Kaci 17aadb20bc Translated using Weblate (Hungarian)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/hu/
12 months ago
Florian Trayon e50aaf4bba Translated using Weblate (French)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fr/
12 months ago
C. Rüdinger ce6a85cef4 Translated using Weblate (German)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
12 months ago
Alex Baker 2ec8badfe4 Default to 'name your price' 12 months ago
Don Zouras 0be76dd0da Translated using Weblate (Esperanto)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/eo/
12 months ago
Sketch6580 c6258fe2f9 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/zh_Hans/
12 months ago
Hady 57ecf9a8f0 Translated using Weblate (Russian)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ru/
12 months ago
Frits van Bommel 44f962f6dd Translated using Weblate (Dutch)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/nl/
12 months ago
Ihor Hordiichuk 0c789ca59a Translated using Weblate (Ukrainian)
Currently translated at 97.3% (651 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/uk/
12 months ago
Jose Riha ccdae2f814 Translated using Weblate (Slovak)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sk/
12 months ago
Hady dbfa0d410d Translated using Weblate (Russian)
Currently translated at 98.8% (661 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ru/
12 months ago
109247019824 45502adf4f Translated using Weblate (Bulgarian)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bg/
12 months ago
renovate[bot] 1921153e16 Update dependency fastlane to v2.226.0 12 months ago
Jose Riha 8cd293a355 Translated using Weblate (Slovak)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sk/
12 months ago
Jose Riha 7e6ee2383b Translated using Weblate (Slovak)
Currently translated at 100.0% (668 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sk/
12 months ago
Hady 4ef72d5047 Translated using Weblate (Russian)
Currently translated at 97.9% (654 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ru/
12 months ago
Pierfrancesco Passerini 765e8e4aad Translated using Weblate (Italian)
Currently translated at 98.3% (657 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
12 months ago
Jose Riha 6cc6292f01 Translated using Weblate (Slovak)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/sk/
12 months ago
Alex Baker cb9160025f Update version and changelog 12 months ago
Alex Baker 600492942b Use @jheld's color picker fork 12 months ago
Alex Baker a20f1ae0ba Fix editing filter with gtasks filter criteria 12 months ago
Alex Baker 38cae54103 Dismiss microsoft/gtasks banners on action 12 months ago
Alex Baker 1353fba9fd Disable multilevel subtasks for Microsoft To Do 12 months ago
Emin Tufan Çetin 07ea6489a6 Translated using Weblate (Turkish)
Currently translated at 100.0% (668 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/tr/
12 months ago
Jose Riha 06581d6183 Translated using Weblate (Slovak)
Currently translated at 93.4% (624 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sk/
12 months ago
Laurent FAVOLE c6e17d5aaf Translated using Weblate (French)
Currently translated at 100.0% (668 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fr/
12 months ago
Emin Tufan Çetin a4749a0855 Translated using Weblate (Turkish)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/tr/
12 months ago
Jose Riha 5f3ca0581a Translated using Weblate (Slovak)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/sk/
12 months ago
Jose Riha 1da304d8e7 Translated using Weblate (Slovak)
Currently translated at 77.3% (517 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sk/
12 months ago
ColorfulRhino 59d8f0a68c Translated using Weblate (German)
Currently translated at 100.0% (668 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
12 months ago
AtmosphericIgnition 65263bcae3 Translated using Weblate (Czech)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/cs/
12 months ago
AtmosphericIgnition 56caf9eb18 Translated using Weblate (Czech)
Currently translated at 100.0% (668 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/cs/
12 months ago
Don Zouras 794655a231 Translated using Weblate (Esperanto)
Currently translated at 100.0% (668 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/eo/
12 months ago
renovate[bot] b354e7c107
Update dependency com.google.dagger:hilt-android-testing to v2.55 (#3237)
* Update dependency com.google.dagger:hilt-android-testing to v2.55

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
12 months ago
renovate[bot] 9d3070dd76
Update agp to v8.8.0 (#3236)
* Update agp to v8.8.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
12 months ago
renovate[bot] f634c6952f
Update protobuf to v4.29.3 (#3235)
* Update protobuf to v4.29.3

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
12 months ago
Colorful Rhino 974d2d0510 Translated using Weblate (German)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/de/
12 months ago
Colorful Rhino 715c8cb702 Translated using Weblate (German)
Currently translated at 100.0% (668 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
12 months ago
109247019824 be984a1011 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (668 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bg/
12 months ago
Colorful Rhino 309fc42e2b Translated using Weblate (German)
Currently translated at 100.0% (668 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
12 months ago
大王叫我来巡山 a5cc735c37 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (668 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/zh_Hans/
12 months ago
bittin1ddc447d824349b2 584ff8fe48 Translated using Weblate (Swedish)
Currently translated at 100.0% (668 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sv/
12 months ago
Jose Riha 2fc301a5f4 Translated using Weblate (Slovak)
Currently translated at 62.5% (418 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sk/
12 months ago
bittin1ddc447d824349b2 ac0f2feddc Translated using Weblate (Swedish)
Currently translated at 100.0% (663 of 663 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sv/
12 months ago
Pierfrancesco Passerini e71de27797 Translated using Weblate (Italian)
Currently translated at 99.0% (657 of 663 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
12 months ago
Florian Trayon cc0f5ba490 Translated using Weblate (French)
Currently translated at 98.6% (654 of 663 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fr/
12 months ago
Sketch6580 9c97e3ddef Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/zh_Hans/
12 months ago
renovate[bot] b4fa64579e
Update dependency com.google.apis:google-api-services-tasks to v1-rev20250105-2.0.0 (#3230)
* Update dependency com.google.apis:google-api-services-tasks to v1-rev20250105-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
12 months ago
Alex Baker 2f1dff04f1 Update version and changelog 12 months ago
Alex Baker b21472da47 Warn microsoft and google tasks users 12 months ago
Don Zouras 35de97b130 Translated using Weblate (Esperanto)
Currently translated at 100.0% (663 of 663 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/eo/
12 months ago
Sketch6580 4c216d77bb Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (663 of 663 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/zh_Hans/
12 months ago
Frits van Bommel cd66a87b06 Translated using Weblate (Dutch)
Currently translated at 100.0% (663 of 663 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/nl/
12 months ago
Kaci bc0f5b7ac9 Translated using Weblate (Hungarian)
Currently translated at 100.0% (663 of 663 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/hu/
12 months ago
C. Rüdinger 55dd479779 Translated using Weblate (German)
Currently translated at 99.8% (662 of 663 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
12 months ago
109247019824 1af581efe7 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (663 of 663 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bg/
12 months ago
Alex Baker 5622fd8c09 Fix test compile 12 months ago
Alex Baker 791041cc5d Refactor task list banners 12 months ago
renovate[bot] 80f24fdc17
Update dependency org.jetbrains.kotlinx:kotlinx-serialization-json to v1.8.0 (#3225)
* Update dependency org.jetbrains.kotlinx:kotlinx-serialization-json to v1.8.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
Alex Baker 22c85c379f Update version and changelog 1 year ago
Sebastian Gustavsson 343b06fefa Translated using Weblate (Swedish)
Currently translated at 100.0% (662 of 662 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sv/
1 year ago
Alex Baker 12e4e39ec6 Fix displaying multiline titles 1 year ago
Alex Baker 4c6de03135 Update version and changelog 1 year ago
Alex Baker 7649e59203 Fix long press referencing old comment 1 year ago
Alex Baker d09e013ac0 Merge branch 'TonSilver-develop' 1 year ago
renovate[bot] 10c2614fcf Update mockito monorepo to v5.15.2 1 year ago
Don Zouras f674a54182 Translated using Weblate (Esperanto)
Currently translated at 100.0% (659 of 659 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/eo/
1 year ago
大王叫我来巡山 4f0eb9f17a Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (659 of 659 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/zh_Hans/
1 year ago
Alex Baker 435d276a64 Add configuration option for newlines in title 1 year ago
Don Zouras 8493175733 Translated using Weblate (Esperanto)
Currently translated at 100.0% (660 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/eo/
1 year ago
AtmosphericIgnition 450d33276f Translated using Weblate (Czech)
Currently translated at 99.3% (656 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/cs/
1 year ago
Alex Baker d6d069f24b Update version and changelog 1 year ago
Alex Baker 4b81ff5d55 Fix tests 1 year ago
Anonymous 84669a39bc Translated using Weblate (Bosnian)
Currently translated at 12.1% (4 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/bs/
1 year ago
Pierfrancesco Passerini 10b96f7029 Translated using Weblate (Italian)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/it/
1 year ago
Alex Baker 79f329bb53 Add preference for Microsoft To Do sync 1 year ago
Alex Baker 95ae988fd7 Added TaskEditScreen - WIP 1 year ago
Alex Baker 833eb81114 Microsoft Graph API doesn't support order 1 year ago
Alex Baker 8edf0de950 Fix tests 1 year ago
Alex Baker 0af6ac3cf4 Prevent menu search bar from auto focusing 1 year ago
Alex Baker 163cc29471 Don't allow empty shortcut labels 1 year ago
Alex Baker efbdfd6fda Remove GOOGLE_TASKS subheader type 1 year ago
Alex Baker dd06decc40 Remove GtasksFilter 1 year ago
Alex Baker e5d6723e23 Remove GoogleTaskListDao 1 year ago
Alex Baker 67b6a6ef64 Fix donation nagging 1 year ago
Alex Baker c227fcc39a Add cost info to sync account dialog 1 year ago
Alex Baker 719c117779 Remove paywall from Google Tasks & Microsoft To Do 1 year ago
Alex Baker a468db8c9c Remove paywall from tasker 1 year ago
Alex Baker bc5823f857 Update version and changelog 1 year ago
Alex Baker e74920cc3d Fix scrolling in custom filter list pickers 1 year ago
Alex Baker 53209226a0 Microsoft To Do checklist support 1 year ago
Alex Baker 74c69a0799 Don't cancel bundle for single notification 1 year ago
Alex Baker 983727cbc8 Microsoft sync - WIP 1 year ago
Alex Baker 8475be4683 Change microsoft test file extensions 1 year ago
Sunjae Choi c32f1aead1 Translated using Weblate (Korean)
Currently translated at 99.8% (659 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ko/
1 year ago
Anton Serebryakov ecb129d5d4 Comment: copy to clipboard (on long tap) 1 year ago
Pierfrancesco Passerini 09e3469572 Translated using Weblate (Italian)
Currently translated at 99.5% (657 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
1 year ago
Florian Trayon e35cac5f9e Translated using Weblate (French)
Currently translated at 99.0% (654 of 660 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fr/
1 year ago
Alex Baker 084a66c630 Add description test, redact descriptions 1 year ago
Alex Baker d1305f67bb Add ktor logging 1 year ago
Alex Baker df153da8cf Use local time zone for microsoft tasks 1 year ago
大王叫我来巡山 fc04f722fb Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/zh_Hans/
1 year ago
Frits van Bommel 11d071ad30 Translated using Weblate (Dutch)
Currently translated at 99.0% (659 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/nl/
1 year ago
Paul Rogalski b5e29ff728 Translated using Weblate (German)
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
1 year ago
109247019824 4d7d7e4680 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (665 of 665 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bg/
1 year ago
Alex Baker 343312d67d Redact task and task list titles 1 year ago
Alex Baker 0ba7753437 Replace retrofit with ktor 1 year ago
Alex Baker ec75c8c24c Stop refreshing when there are no tasks 1 year ago
Alex Baker e59b5cfdc7 Minor microsoft sync changes 1 year ago
Alex Baker 43f4465d41 Remove nullable from parameter 1 year ago
Alex Baker aa477a7b11 vtodo cache improvements 1 year ago
Alex Baker f17a287e4f Fix parameter name 1 year ago
Alex Baker 8658123223 Fix compilation 1 year ago
bittin1ddc447d824349b2 fdca6908f3 Translated using Weblate (Swedish)
Currently translated at 100.0% (663 of 663 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sv/
1 year ago
Alex Baker 4e0ed50e08 Remove colorState from list settings viewmodel 1 year ago
Alex Baker a4cbbd2ed2 Remove option to override map theme 1 year ago
Alex Baker d6266226b2 Remove option to disable desaturation 1 year ago
Alex Baker cc64952032 Fix edit screen disappearing on rotation 1 year ago
Alex Baker 0d14bb2815 Update version and changelog 1 year ago
Alex Baker 7a51e72ca4 Ensure unique broadcasts 1 year ago
Alex Baker f4863b813a Add "Add widget to home screen" to list settings 1 year ago
Alex Baker 1d74527bc4 Add 'shortcut' to 'Add shortcut to home screen' 1 year ago
Alex Baker 60a9b018ec Fix state loss issues in list settings activities 1 year ago
Alex Baker e48f7e61c3 Report missing icons 1 year ago
Alex Baker 8ac6147302 Map missing icon 1 year ago
Alex Baker d39a63d590 Update version and changelog 1 year ago
Alex Baker 3191de2473 Fix nested scrolling crash 1 year ago
Alex Baker 761ba583b5 "Add to home screen" shortcut in list settings 1 year ago
Alex Baker ece1fd4ef3 Convert list settings to use scaffold 1 year ago
Alex Baker b3f29dc0fb Fix deleting lists 1 year ago
Pierfrancesco Passerini 932d9eec75 Translated using Weblate (Italian)
Currently translated at 99.8% (662 of 663 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
1 year ago
109247019824 f62c1f784e Translated using Weblate (Bulgarian)
Currently translated at 100.0% (663 of 663 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bg/
1 year ago
大王叫我来巡山 7ad5463619 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (663 of 663 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/zh_Hans/
1 year ago
renovate[bot] 1550719ac6
Update dependency com.google.apis:google-api-services-drive to v3-rev20241206-2.0.0 (#3203)
* Update dependency com.google.apis:google-api-services-drive to v3-rev20241206-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
Alex Baker b2f39bd7e3 Update version and changelog 1 year ago
Alex Baker c67263392f Fix generic compile 1 year ago
Alex Baker d2a0dda6c5 Show subscription prices in local currency 1 year ago
Alex Baker efa664dd70 Show error messages in purchase screen 1 year ago
renovate[bot] 1a6f44c4ff
Update dependency gradle to v8.12 (#3201)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1 year ago
renovate[bot] 80356292eb
Update dagger.hilt to v2.54 (#3200)
* Update dagger.hilt to v2.54

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
renovate[bot] 2768013250
Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-test to v1.10.1 (#3199)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1 year ago
Alex Baker 04a7eef174 Add PurchaseActivityViewModel 1 year ago
Alex Baker 93231f3c10
Get android-plugin-api-for-locale from central 1 year ago
renovate[bot] b2135d27c3
Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-test to v1.10.0 (#3197)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1 year ago
Alex Baker d9a0a047d5 Move BaseSettingsContent to separate file 1 year ago
Alex Baker be5a4dfc01 Begin refactoring FilterSettingsActivity 1 year ago
Alex Baker e3edd4797a Remove unused code and resources 1 year ago
renovate[bot] 597075faf6
Update protobuf to v4.29.2 (#3193)
* Update protobuf to v4.29.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
Alex Baker 5e3da97b29 Update version and changelog 1 year ago
Alex Baker 5d44fa5753 WorkManager 2.10.0 1 year ago
renovate[bot] 90e2048c22 Kotlin 2.1.0 1 year ago
Alex Baker e17a6762d9 Update list settings
* Remove unused resources
* Fix check for icon changes
* Break out composables
1 year ago
renovate[bot] dc031da1b9 Update dependency fastlane to v2.226.0 1 year ago
hasak b1272e709f Translated using Weblate (Bosnian)
Currently translated at 12.8% (86 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bs/
1 year ago
Hady 8e5b93fc10
Convert list settings to compose (#3163) 1 year ago
Alex Baker 87c5ec9f14 Rename Tasks to TasksApplication 1 year ago
renovate[bot] 6eba2d68d0
Update dagger.hilt to v2.53.1 (#2779)
* Update dagger.hilt to v2.53.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
Alex Baker 5da81979a1 Update application startup and logging 1 year ago
Alex Baker a0a944fae3 Less aggressive OpenTasks sync 1 year ago
Alex Baker 52757f7947 Dagger 2.53 1 year ago
hasak f5d8501933 Translated using Weblate (Bosnian)
Currently translated at 11.9% (80 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bs/
1 year ago
renovate[bot] 4f0501b5e9
Update dependency fastlane to v2.226.0 (#3187)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1 year ago
Weblate (bot) a8112d4a6c
Translations update from Hosted Weblate (#3186)
Translated using Weblate (Croatian)

Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/hr/

Co-authored-by: Milo Ivir <mail@milotype.de>
1 year ago
renovate[bot] 856983dfdd
Update dependency fastlane to v2.226.0 (#3185)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1 year ago
renovate[bot] ec2e56eb5a
Update dependency com.google.accompanist:accompanist-permissions to v0.37.0 (#3181)
* Update dependency com.google.accompanist:accompanist-permissions to v0.37.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
Alex Baker 85d6760499 Remove accompanist-flowlayout 1 year ago
Alex Baker 9c45a638c0 Revert "Update dependency androidx.compose:compose-bom to v2024.12.01 (#3178)"
This reverts commit 71b88c9ea0.

Conflicts with horologist
1 year ago
renovate[bot] 9bfa1d939b
Update dependency fastlane to v2.226.0 (#3182)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1 year ago
Alex Baker 7e83023180
Use gradle action for caching (#3183) 1 year ago
renovate[bot] 7eeaff5654
Update dependency androidx.paging:paging-compose to v3.3.5 (#3175)
* Update dependency androidx.paging:paging-compose to v3.3.5

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
Alex Baker d501603c87 enableEdgeToEdge in SortActivity 1 year ago
renovate[bot] 4661e55d2a
Update dependency fastlane to v2.226.0 (#3179)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1 year ago
renovate[bot] 71b88c9ea0
Update dependency androidx.compose:compose-bom to v2024.12.01 (#3178)
* Update dependency androidx.compose:compose-bom to v2024.12.01

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
renovate[bot] a62ee7201f
Update dependency com.google.auth:google-auth-library-oauth2-http to v1.30.1 (#3176)
* Update dependency com.google.auth:google-auth-library-oauth2-http to v1.30.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
renovate[bot] c5dd39c749
Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.7.6 (#3173)
* Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.7.6

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
renovate[bot] 85119faa5a
Update room to v2.7.0-alpha12 (#3174)
* Update room to v2.7.0-alpha12

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
renovate[bot] bf3a577ff0 Update dependency fastlane to v2.226.0 1 year ago
hasak 4273b8b515 Translated using Weblate (Bosnian)
Currently translated at 8.5% (57 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bs/
1 year ago
Nick Wick dde8543728 Translated using Weblate (Swedish)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sv/
1 year ago
renovate[bot] 85a05b789f
Update grpc-java monorepo to v1.69.0 (#3169)
* Update grpc-java monorepo to v1.69.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
renovate[bot] d70b68ca3e
Update dependency fastlane to v2.226.0 (#3168)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1 year ago
renovate[bot] 55950ee3f3
Update dependency com.google.android.horologist:horologist-compose-material to v0.6.22 (#3167)
* Update dependency com.google.android.horologist:horologist-compose-material to v0.6.22

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
hasak 50d3b4e465 Translated using Weblate (Bosnian)
Currently translated at 8.2% (55 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bs/
1 year ago
Kaci f2b99b494c Translated using Weblate (Hungarian)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/hu/
1 year ago
Sunjae Choi f7c328fb23 Translated using Weblate (Korean)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ko/
1 year ago
Ettore Atalan 9b5a546426 Translated using Weblate (German)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
1 year ago
renovate[bot] bd4ce840e1
Update dependency com.google.firebase:firebase-bom to v33.7.0 (#3155)
* Update dependency com.google.firebase:firebase-bom to v33.7.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
renovate[bot] 9431242460
Update horologist to v0.6.21 (#3160)
* Update horologist to v0.6.21

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
Ricky Tigg b41b309660 Translated using Weblate (Finnish)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fi/
1 year ago
Ricky Tigg fe62120c7d Translated using Weblate (Finnish)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/fi/
1 year ago
Ricky Tigg 4b28580843 Translated using Weblate (Finnish)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/fi/
1 year ago
hasak 2bdded2c05 Translated using Weblate (Bosnian)
Currently translated at 4.7% (32 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bs/
1 year ago
大王叫我来巡山 fd7aa9eec1 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/zh_Hans/
1 year ago
Ricky Tigg 680c44615b Translated using Weblate (Finnish)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fi/
1 year ago
gallegonovato c8d4611d36 Translated using Weblate (Spanish)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/es/
1 year ago
C. Rüdinger 9e1e2b28ed Translated using Weblate (German)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
1 year ago
109247019824 fa74e904fa Translated using Weblate (Bulgarian)
Currently translated at 100.0% (669 of 669 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bg/
1 year ago
renovate[bot] bad7bd148a
Update dependency com.google.protobuf:protobuf-kotlin-lite to v4.29.1 (#3152)
* Update dependency com.google.protobuf:protobuf-kotlin-lite to v4.29.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
Alex Baker 45862bbd15 Don't send every Wear OS build to beta 1 year ago
Don Zouras 8b0464b9ef Translated using Weblate (Esperanto)
Currently translated at 100.0% (668 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/eo/
1 year ago
Petri Hämäläinen ba6aaa58dc Translated using Weblate (Finnish)
Currently translated at 99.1% (662 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fi/
1 year ago
Paul Rogalski bf42aeb7b0 Translated using Weblate (German)
Currently translated at 100.0% (668 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
1 year ago
Alex Baker fdf641aaa9 Update version and changelog 1 year ago
Alex Baker 20ca293ef3 Fix back button 1 year ago
Alex Baker 80009b3a89 Update version and changelog 1 year ago
Alex Baker 6420bee858 Fix beast mode labels 1 year ago
Alex Baker a976052ac4 Merge branch '14.2' 1 year ago
renovate[bot] cb1346ad57
Update agp to v8.7.3 (#3145)
* Update agp to v8.7.3

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
Alex Baker 4f6608d2e7 Update version and changelog 1 year ago
Alex Baker bfcff55854 Convert edit screen to use compose scaffold
Remove collapsing toolbar and fab
1 year ago
Alex Baker 82ceda7108 Fix some compose theme issues 1 year ago
Alex Baker f48224e555 Add separate alarms and reminders banner 1 year ago
Alex Baker 2def074096 Capitalize tag picker text field 1 year ago
gallegonovato f441492ead Translated using Weblate (Spanish)
Currently translated at 100.0% (668 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/es/
1 year ago
raulmagdalena 191fe46e59 Translated using Weblate (Catalan)
Currently translated at 62.8% (420 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ca/
1 year ago
nathalier 7eb95f6bc4 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (668 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/uk/
1 year ago
Pierfrancesco Passerini c55cc09d8b Translated using Weblate (Italian)
Currently translated at 99.8% (667 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
1 year ago
Florian Trayon d72801719b Translated using Weblate (French)
Currently translated at 100.0% (668 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fr/
1 year ago
renovate[bot] c2f5ccbe5b
Update grpc-java monorepo to v1.68.2 (#3138)
* Update grpc-java monorepo to v1.68.2

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
github-actions[bot] eedda1f82a Update dependency diffs 1 year ago
renovate[bot] c525701055 Update dependency com.google.protobuf:protobuf-kotlin-lite to v4.29.0 1 year ago
大王叫我来巡山 5be2601f97 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (668 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/zh_Hans/
1 year ago
Frits van Bommel ee751e92bf Translated using Weblate (Dutch)
Currently translated at 100.0% (668 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/nl/
1 year ago
109247019824 c27744e408 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (668 of 668 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bg/
1 year ago
Alex Baker 3e3cafe5d4 Update version and changelog 1 year ago
Anonymous dcd1424e6e
Translated using Weblate (Bosnian)
Currently translated at 3.0% (1 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/bs/
1 year ago
Alex Baker 2178b4bc1c Remove escape characters from compose resources 1 year ago
Alex Baker 2501e588fe Fix comment delete button color 1 year ago
Przemysław Romanik 1cae87e8fc Translated using Weblate (Polish)
Currently translated at 96.1% (641 of 667 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pl/
1 year ago
Pierfrancesco Passerini ad82f276e2 Translated using Weblate (Italian)
Currently translated at 99.8% (666 of 667 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
1 year ago
gallegonovato fc28c8ea96 Translated using Weblate (Spanish)
Currently translated at 100.0% (667 of 667 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/es/
1 year ago
Alex Baker 5579f0c657 Show banner when quiet hours are in effect 1 year ago
Alex Baker 4c2febf402 Rearrange default edit screen order 1 year ago
Alex Baker 71ccad0559 Show name your price screen first 1 year ago
renovate[bot] 22f001c7ee
Update protobuf to v4.28.3 (#3112)
* Update protobuf to v4.28.3

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
renovate[bot] 7104a987b5
Update lifecycle to v2.8.7 (#3110)
* Update lifecycle to v2.8.7

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
renovate[bot] 2da1ef0d48
Update grpc-java monorepo to v1.68.1 (#3109)
* Update grpc-java monorepo to v1.68.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
renovate[bot] 4580983c87
Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.7.5 (#3103)
* Update dependency androidx.compose.ui:ui-tooling-preview-android to v1.7.5

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
renovate[bot] 1b41f22a02
Update dependency com.google.android.gms:play-services-wearable to v19 (#3131)
* Update dependency com.google.android.gms:play-services-wearable to v19

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
renovate[bot] bc224f1fc1
Update coil to v2.7.0 (#2979)
* Update coil to v2.7.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
renovate[bot] 1e8faec871
Update flipper to v0.273.0 (#3130)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1 year ago
renovate[bot] 03160c69de
Update dependency co.touchlab:kermit to v2.0.5 (#3129)
* Update dependency co.touchlab:kermit to v2.0.5

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
renovate[bot] a2980f659e
Update accompanist to v0.36.0 (#3114)
* Update accompanist to v0.36.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
renovate[bot] 150559d49f
Update dependency com.android.tools:desugar_jdk_libs to v2.1.3 (#3105)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1 year ago
renovate[bot] d287c5d6ea
Update dependency androidx.compose:compose-bom to v2024.11.00 (#3115)
* Update dependency androidx.compose:compose-bom to v2024.11.00

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
renovate[bot] 8a10784da8
Update plugin ksp to v2.0.21-1.0.28 (#3111)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1 year ago
renovate[bot] f4c54a02fe
Update dependency androidx.constraintlayout:constraintlayout to v2.2.0 (#3116)
* Update dependency androidx.constraintlayout:constraintlayout to v2.2.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
renovate[bot] a698d6876a
Update dependency com.facebook.soloader:soloader to v0.12.1 (#3117)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1 year ago
renovate[bot] 749b614bb6
Update dependency com.google.firebase:firebase-bom to v33.6.0 (#3118)
* Update dependency com.google.firebase:firebase-bom to v33.6.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
renovate[bot] 426a15a5be
Update mockito monorepo to v5.14.2 (#3122)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1 year ago
Alex Baker 39dcd3d649 Update update_dependency_diff script 1 year ago
renovate[bot] 8092da03d3
Update plugin jetbrains-compose to v1.7.1 (#3123)
* Update plugin jetbrains-compose to v1.7.1

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
renovate[bot] 306f7ec053
Update room to v2.7.0-alpha11 (#3113)
* Update room to v2.7.0-alpha11

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
renovate[bot] 2d86a73e94
Update dependency com.google.apis:google-api-services-drive to v3-rev20241027-2.0.0 (#3107)
* Update dependency com.google.apis:google-api-services-drive to v3-rev20241027-2.0.0

* Update dependency diffs

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 year ago
Alex Baker fb5619a08a Add dependency_diff action 1 year ago
Milo Ivir 0db5686c52 Translated using Weblate (Croatian)
Currently translated at 100.0% (667 of 667 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/hr/
1 year ago
Nick Wick e4c515008a Translated using Weblate (Swedish)
Currently translated at 100.0% (667 of 667 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sv/
1 year ago
Frits van Bommel 6f3616ee47 Translated using Weblate (Dutch)
Currently translated at 100.0% (667 of 667 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/nl/
1 year ago
Kaci 907d08bdd5 Translated using Weblate (Hungarian)
Currently translated at 96.4% (643 of 667 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/hu/
1 year ago
Florian Trayon 4337f6d76c Translated using Weblate (French)
Currently translated at 100.0% (667 of 667 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fr/
1 year ago
大王叫我来巡山 8ed347fa2d Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (667 of 667 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/zh_Hans/
1 year ago
Pierfrancesco Passerini 7d8b804d8a Translated using Weblate (Italian)
Currently translated at 99.8% (666 of 667 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
1 year ago
109247019824 5280d6f35e Translated using Weblate (Bulgarian)
Currently translated at 100.0% (667 of 667 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bg/
1 year ago
Anonymous 84a044e658 Translated using Weblate (Slovenian)
Currently translated at 16.1% (108 of 667 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sl/
1 year ago
Anonymous 23635f383e Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.7% (665 of 667 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt_BR/
1 year ago
Anonymous 43e3a80f83 Translated using Weblate (Hungarian)
Currently translated at 96.2% (642 of 667 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/hu/
1 year ago
Anonymous 93fbca8397 Translated using Weblate (Finnish)
Currently translated at 97.1% (648 of 667 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fi/
1 year ago
hasak 1f43666fb4 Translated using Weblate (Bosnian)
Currently translated at 4.6% (31 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/bs/
1 year ago
Don Zouras 91dd4e10a6 Translated using Weblate (Esperanto)
Currently translated at 100.0% (666 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/eo/
1 year ago
raulmagdalena 3a64ad6394 Translated using Weblate (Catalan)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/ca/
1 year ago
renovate[bot] 69d99f1bdf Update dependency com.google.android.play:review-ktx to v2.0.2 1 year ago
Alex Baker b4133b7a3f Revert renovate change
Only works on self-hosted instances 😢
1 year ago
Alex Baker 26cd7cc8c2 Have renovate run update_dependency_diff 1 year ago
renovate[bot] bcb0f66c03
Update dependency gradle to v8.11.1 (#3120)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1 year ago
Alex Baker a209ddbda3 Update version and changelog 1 year ago
renovate[bot] febf14e415
Update flipper to v0.272.0 (#3121)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1 year ago
renovate[bot] d70341954f
Update dependency fastlane to v2.225.0 (#3119)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1 year ago
renovate[bot] 07caf18ed0
Update dependency ruby to v3.3.6 (#3108)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1 year ago
Alex Baker 2d59bb365d Add deploy github action 1 year ago
renovate[bot] 8135a9d542 Update dependency androidx.paging:paging-compose to v3.3.4 1 year ago
renovate[bot] f005a17c63 Update dependency com.android.billingclient:billing-ktx to v6.2.1 1 year ago
renovate[bot] 42af7f9292 Update dependency com.google.auth:google-auth-library-oauth2-http to v1.30.0 1 year ago
renovate[bot] 5118009840 Update dependency androidx.fragment:fragment-ktx to v1.8.5 1 year ago
renovate[bot] f0e8cc41ae Update dependency org.osmdroid:osmdroid-android to v6.1.20 1 year ago
renovate[bot] d34a176151 Update dependency androidx.activity:activity-compose to v1.9.3 1 year ago
Alex Baker 387640d850 Don't sync on startup if there are no accounts 1 year ago
min7-i 2e651bb1ef Translated using Weblate (German)
Currently translated at 100.0% (666 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
1 year ago
hasak a3b6e414f3 Added translation using Weblate (Bosnian) 1 year ago
Milo Ivir e609497b04 Translated using Weblate (Croatian)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/hr/
1 year ago
kowih83264 5c55b75d29 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/pt_BR/
1 year ago
Languages add-on bf3d7cf673 Added translation using Weblate (Bosnian) 1 year ago
Alex Baker baadbef820 Update file logging
* Add ability to send logs
* Log app exit info
* Redact sensitive info from logs
1 year ago
Alex Baker c7d10f69e7 Remove usage of external cache 1 year ago
Alex Baker 31afc842bd Add file logger 1 year ago
Alex Baker ed1f584daf Remove unnecessary join when sending tasks 1 year ago
Alex Baker 812c0be413 Delete snoozed reminders when completing tasks 1 year ago
Alex Baker c32df5485b Update version and changelog 1 year ago
Alex Baker 1327610457 Fix etesync sync failure on empty color 1 year ago
Alex Baker 916175a5e1 Minor Wear OS fixes
* Add padding to top of menu to address Play Store rejection
* Exit new task screen if no title is entered
* Keep menu items in memory
1 year ago
Alex Baker 48304b59ba Update funding 1 year ago
Alex Baker f99bf0e33f Update version and changelog 1 year ago
Alex Baker 83e62cd48a Update locales_config 1 year ago
Naren Sirigere 64d5e6286c Translated using Weblate (Marathi)
Currently translated at 21.2% (7 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/mr/
1 year ago
Anonymous 1a59080e23 Translated using Weblate (Kannada)
Currently translated at 9.0% (3 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/kn/
1 year ago
Naren Sirigere 06d5ccdfe2 Translated using Weblate (Kannada)
Currently translated at 9.0% (3 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/kn/
1 year ago
gallegonovato c260f339dc Translated using Weblate (Spanish)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/es/
1 year ago
Naren Sirigere 5f8e44f747 Added translation using Weblate (Marathi) 1 year ago
Naren Sirigere 789aa9e0b2 Translated using Weblate (Kannada)
Currently translated at 6.0% (2 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/kn/
1 year ago
Pierfrancesco Passerini 6cb9c6fae0 Translated using Weblate (Italian)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/it/
1 year ago
bittin1ddc447d824349b2 7a0f4d4799 Translated using Weblate (Swedish)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/sv/
1 year ago
Kaci 692c419271 Translated using Weblate (Hungarian)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/hu/
1 year ago
Naren Sirigere 24564dd236 Translated using Weblate (Marathi)
Currently translated at 0.1% (1 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/mr/
1 year ago
Languages add-on 46a2ee844f Added translation using Weblate (Marathi) 1 year ago
Naren Sirigere b11f85ab16 Translated using Weblate (Kannada)
Currently translated at 3.9% (26 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/kn/
1 year ago
Alex Baker d1379fff43 Address CVE-2024-7254 warning 1 year ago
Alex Baker a3b9b7b3fa Add dependency diff for wear app 1 year ago
Alex Baker 27eef75a94 Fix widget crash 1 year ago
Alex Baker c7392025af Update Wear OS splash screen icon
Addresses play store rejection
1 year ago
Florian Trayon 9fa28c9cfb
Translated using Weblate (French)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/fr/
1 year ago
Frits van Bommel 4739e4131a
Translated using Weblate (Dutch)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/nl/
1 year ago
Ihor Hordiichuk c1771b248e
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/uk/
1 year ago
C. Rüdinger ffd4a6138f
Translated using Weblate (German)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/de/
1 year ago
大王叫我来巡山 44e6a85198
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/zh_Hans/
1 year ago
109247019824 9f7c0d9a95
Translated using Weblate (Bulgarian)
Currently translated at 100.0% (33 of 33 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/bg/
1 year ago
Alex Baker 4796f1d2d8 Update version and changelog 1 year ago
Alex Baker 675b43ff95 Show task timestamp on WearOS 1 year ago
Alex Baker d4aeb34b87 Update logic for creating tasks on WearOS 1 year ago
Alex Baker e5fc31f307 Update version and changelog 1 year ago
renovate[bot] 6743d058b0 Update plugin ksp to v2.0.21-1.0.26 1 year ago
Don Zouras acc041e456 Translated using Weblate (Esperanto)
Currently translated at 100.0% (666 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/eo/
1 year ago
Olli dcd5b27666 Translated using Weblate (Finnish)
Currently translated at 97.4% (649 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fi/
1 year ago
Petri Hämäläinen 244cf349e3 Translated using Weblate (Finnish)
Currently translated at 96.3% (642 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/fi/
1 year ago
hugoalh dc2efefe01 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (31 of 31 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/zh_Hant/
1 year ago
Alex Baker 96392cb618 Update WearOS edit screen
* Set complete from edit screen
* Edit existing tasks
1 year ago
Alex Baker f0e9eb453c AGP 8.7.2 1 year ago
Alex Baker 4e7e05c8af WearOS task edit screen - WIP 1 year ago
dependabot[bot] b6f1722350
Bump rexml from 3.3.6 to 3.3.9 (#3080)
Bumps [rexml](https://github.com/ruby/rexml) from 3.3.6 to 3.3.9.
- [Release notes](https://github.com/ruby/rexml/releases)
- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)
- [Commits](https://github.com/ruby/rexml/compare/v3.3.6...v3.3.9)

---
updated-dependencies:
- dependency-name: rexml
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
1 year ago
Alex Baker 4126ea1175 Fix WearOS proguard 1 year ago
Alex Baker 8741987ca4 Move Checkbox to components 1 year ago
Alex Baker 34a8dcb2c4 Remove AD_ID permission from WearOS 1 year ago
Alex Baker 9c1967cf8a Update version and changelog 1 year ago
Alex Baker 647c473d1d Update proguard config for WearOS 1 year ago
Alex Baker 94e2e2ee3b firebase-bom 33.5.1 1 year ago
Alex Baker f1afd1974c Log more errors on WearOS 1 year ago
Alex Baker 393ad4977b Add timber to wear app 1 year ago
Alex Baker 4b2bb87ecf Minor drawer item fixes 1 year ago
Alex Baker e92703a392 Placeholder edit screen on WearOS 1 year ago
Alex Baker 5aa2070700 Shorten date headers on WearOS 1 year ago
Alex Baker 8fc7e4d011 Prevent jumping to completed task on WearOS 1 year ago
Alex Baker 6aff9bd4b5 Only move drawer search results to bottom 1 year ago
Alex Baker c13cf982b7 Check if app installed on phone 1 year ago
Alex Baker f36e900627 Update version and changelog 1 year ago
Alex Baker 8b1ef2e0d9 Fix generic compile 1 year ago
Alex Baker 5fa00ea53d Update subscription screen to fix rejection 1 year ago
Alex Baker a289cb80fd Catch error when wearable API is missing 1 year ago
Alex Baker ec2eb15118 Move app version to gradle catalog 1 year ago
Paul Rogalski c731206eb3 Translated using Weblate (German)
Currently translated at 100.0% (31 of 31 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/de/
1 year ago
Anonymous 48ed7ec3ef Automated translations from weblate 1 year ago
Pierfrancesco Passerini 9bbede77b2 Translated using Weblate (Italian)
Currently translated at 100.0% (29 of 29 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/it/
1 year ago
Ihor Hordiichuk fc910e2743 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (29 of 29 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/uk/
1 year ago
pogoyar888@avzong.com 4e8c68edd8 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (29 of 29 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/pt_BR/
1 year ago
Alex Baker b583d04e8f
Bundle wear app (#3074) 1 year ago
Alex Baker 105757af53 Implement drawer for Android Wear 1 year ago
Alex Baker 689cd20a88 Add firebase event for task completions 1 year ago
大王叫我来巡山 257bf826b6 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (29 of 29 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/zh_Hans/
1 year ago
bittin1ddc447d824349b2 d17f500de2 Translated using Weblate (Swedish)
Currently translated at 100.0% (29 of 29 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/sv/
1 year ago
Florian Trayon 02a7c664f3 Translated using Weblate (French)
Currently translated at 100.0% (29 of 29 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/fr/
1 year ago
gallegonovato 2e4857a864 Translated using Weblate (Spanish)
Currently translated at 100.0% (29 of 29 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/es/
1 year ago
Frits van Bommel 9559d5d740 Translated using Weblate (Dutch)
Currently translated at 100.0% (29 of 29 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/nl/
1 year ago
Kaci 30630c6dfe Translated using Weblate (Hungarian)
Currently translated at 100.0% (29 of 29 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/hu/
1 year ago
109247019824 f2b7792f69 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (29 of 29 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/bg/
1 year ago
Oğuz Ersen 426b8dc7a6 Translated using Weblate (Turkish)
Currently translated at 100.0% (29 of 29 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/tr/
1 year ago
Alex Baker 54afbfeecc Toggle completed from Android Wear 1 year ago
Alex Baker 1200a7625a Remove wear strings 1 year ago
Alex Baker a971a1372d Fix wear refresher race condition 1 year ago
Alex Baker 45fbb2794d Subtask support on Android Wear 1 year ago
Alex Baker 751c8aabc1 Toggle hidden tasks from Android Wear 1 year ago
Alex Baker 7c23d48117 Apply alpha to hidden tasks on Android Wear 1 year ago
Alex Baker 1a346d5922 Mark not completed from Android Wear 1 year ago
Alex Baker 502f7c07d5 Collapsible sort groups on Android Wear 1 year ago
Pierfrancesco Passerini f083083850 Translated using Weblate (Italian)
Currently translated at 100.0% (28 of 28 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/it/
1 year ago
Pierfrancesco Passerini bb4bf56fea Translated using Weblate (Italian)
Currently translated at 92.8% (26 of 28 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/it/
1 year ago
Pierfrancesco Passerini 58ff276fae Translated using Weblate (Italian)
Currently translated at 100.0% (666 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
1 year ago
Nicolas Suzuki 310eb6f432 Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.6% (664 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt_BR/
1 year ago
Pierfrancesco Passerini 30ac9a9b22 Translated using Weblate (Italian)
Currently translated at 100.0% (666 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
1 year ago
Paul Rogalski 572c2644ee Translated using Weblate (German)
Currently translated at 100.0% (666 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
1 year ago
Luna d134e40be0 Translated using Weblate (Danish)
Currently translated at 95.6% (637 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/da/
1 year ago
renovate[bot] 659461fe87 Update kotlin 1 year ago
renovate[bot] 82dc9114ab Update dependency ruby to v3.3.5 1 year ago
Alex Baker 3b60a5bcaf Add 'Add task' button to Android Wear
Button doesn't do anything yet
1 year ago
Alex Baker a8977f02fe Android Wear paging improvements 1 year ago
Alex Baker dd6ba730e9 Use paged data on Android Wear 1 year ago
Alex Baker 31cbe8fbab Ignore lint error 1 year ago
Alex Baker d2ff0519be Group separators on Android Wear 1 year ago
Alex Baker d5f9c24da4 Check if watch is connected before refreshing 1 year ago
Alex Baker 627259a723 Remove TasksSerializer 1 year ago
Alex Baker d3cc532ff5 AGP 8.7.1 1 year ago
Alex Baker da94f55ab0 Refresh watch data on changes 1 year ago
Alex Baker ff1f7e1d01 Android Wear - WIP 1 year ago
Alex Baker 1112881411 AGP 8.7.0 1 year ago
Alex Baker 58dc1427a8 Update version and changelog 1 year ago
Alex Baker 9baa95ac81 Target Android 14 1 year ago
Alex Baker ac00a81751 Trigger overdue notifications immediately 1 year ago
Alex Baker cf6ff06843 Fix disabling minimum touch target size 1 year ago
Alex Baker 4e9342d75e Update desugar libs to 2.1. 1 year ago
Alex Baker f95b7059bf Update lifecycle to 2.8.6 1 year ago
Alex Baker ec14d5f02b Update ui-tooling-preview-android to 1.7.2 1 year ago
Alex Baker f941141cff Update compose bom to 2024.09.02 1 year ago
renovate[bot] 4c44b7a9a3 Update dependency androidx.fragment:fragment-ktx to v1.8.3 1 year ago
renovate[bot] 12d9bd7acf Update dependency androidx.activity:activity-compose to v1.9.2 1 year ago
Alex Baker fb5038c50e Update room to 2.7.0-alpha08 1 year ago
renovate[bot] 5e60af1a65 Update dependency com.google.apis:google-api-services-drive to v3-rev20240914-2.0.0 1 year ago
renovate[bot] 9cf76ab124 Update dependency androidx.test:runner to v1.6.2 1 year ago
dependabot[bot] 4abfd4b30e Bump rexml from 3.3.3 to 3.3.6
Bumps [rexml](https://github.com/ruby/rexml) from 3.3.3 to 3.3.6.
- [Release notes](https://github.com/ruby/rexml/releases)
- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)
- [Commits](https://github.com/ruby/rexml/compare/v3.3.3...v3.3.6)

---
updated-dependencies:
- dependency-name: rexml
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
1 year ago
Josep Mengual d9b0bc5925 Translated using Weblate (Catalan)
Currently translated at 100.0% (28 of 28 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/ca/
1 year ago
Anonymous e15656282c Translated using Weblate (Estonian)
Currently translated at 96.4% (27 of 28 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/et/
1 year ago
atmosphericignition d2ee2b18bb Translated using Weblate (Czech)
Currently translated at 100.0% (28 of 28 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/cs/
1 year ago
Don 1e1d1fc481 Translated using Weblate (Estonian)
Currently translated at 89.2% (25 of 28 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/et/
1 year ago
tct123 a216b4bac6 Translated using Weblate (German)
Currently translated at 100.0% (28 of 28 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/de/
1 year ago
Josep Mengual 331593b145 Translated using Weblate (Catalan)
Currently translated at 58.5% (390 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ca/
1 year ago
abc0922001 1d3ad03c58 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (666 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/zh_Hant/
1 year ago
raulmagdalena 830dc77179 Translated using Weblate (Catalan)
Currently translated at 58.4% (389 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ca/
1 year ago
Don f075266bcb Translated using Weblate (Estonian)
Currently translated at 72.3% (482 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/et/
1 year ago
Don 065264fb85 Translated using Weblate (Estonian)
Currently translated at 66.9% (446 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/et/
1 year ago
atmosphericignition 65af76bd72 Translated using Weblate (Czech)
Currently translated at 100.0% (666 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/cs/
1 year ago
Alex Baker 8dc11dbe93 Update agp to v8.6.1 1 year ago
renovate[bot] 26e5e2c29b Update dependency gradle to v8.10.2 1 year ago
renovate[bot] 3986fe1431 Update agp to v8.5.2 1 year ago
renovate[bot] ceac030ca5 Update room to v2.7.0-alpha06 1 year ago
renovate[bot] 66ef650e2c Update kotlin 1 year ago
renovate[bot] 73529cfe35 Update dependency com.google.apis:google-api-services-drive to v3-rev20240730-2.0.0 1 year ago
renovate[bot] 41e2ee3416 Update flipper to v0.262.0 1 year ago
Don Zouras 456d063243 Translated using Weblate (Esperanto)
Currently translated at 100.0% (666 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/eo/
1 year ago
Abdullhakim Sami Alshanqiti aff90cb740 Translated using Weblate (Arabic)
Currently translated at 95.6% (637 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/ar/
1 year ago
Don Zouras ecfdac5401 Translated using Weblate (Esperanto)
Currently translated at 100.0% (666 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/eo/
1 year ago
tct123 0f8199b1c8 Translated using Weblate (German)
Currently translated at 100.0% (666 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/de/
1 year ago
Luna d7f77913ff Translated using Weblate (Danish)
Currently translated at 95.4% (636 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/da/
1 year ago
Don Zouras a4d1b683dd Translated using Weblate (Esperanto)
Currently translated at 100.0% (666 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/eo/
1 year ago
bittin1ddc447d824349b2 4d5b1a604a Translated using Weblate (Swedish)
Currently translated at 100.0% (666 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sv/
1 year ago
bittin1ddc447d824349b2 f6e103d4e1 Translated using Weblate (Swedish)
Currently translated at 100.0% (28 of 28 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/sv/
1 year ago
Anonymous 1e3850127e Update automatic translations 1 year ago
Ettore Atalan e24eb0d933 Translated using Weblate (German)
Currently translated at 94.4% (17 of 18 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/de/
1 year ago
dependabot[bot] 13d4c029e8 Bump rexml from 3.3.2 to 3.3.3
Bumps [rexml](https://github.com/ruby/rexml) from 3.3.2 to 3.3.3.
- [Release notes](https://github.com/ruby/rexml/releases)
- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)
- [Commits](https://github.com/ruby/rexml/compare/v3.3.2...v3.3.3)

---
updated-dependencies:
- dependency-name: rexml
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
1 year ago
renovate[bot] 17bb50efb4 Update flipper to v0.261.0 1 year ago
renovate[bot] 8b685da563 Update plugin ksp to v2.0.0-1.0.24 1 year ago
dependabot[bot] 6dce036427 Bump rexml from 3.2.9 to 3.3.2
Bumps [rexml](https://github.com/ruby/rexml) from 3.2.9 to 3.3.2.
- [Release notes](https://github.com/ruby/rexml/releases)
- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)
- [Commits](https://github.com/ruby/rexml/compare/v3.2.9...v3.3.2)

---
updated-dependencies:
- dependency-name: rexml
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
1 year ago
renovate[bot] a6c05fe600 Update dependency fastlane to v2.222.0 1 year ago
renovate[bot] adb4d20c12 Update flipper to v0.260.0 1 year ago
Alex Baker 865cec7220 Move DateUtilities to kmp 1 year ago
Jose Delvani fcc4b2ef2a Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (666 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt_BR/
1 year ago
Luna 2a194bdcb0 Translated using Weblate (Danish)
Currently translated at 94.7% (631 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/da/
1 year ago
Pierfrancesco Passerini 0b463fe331 Translated using Weblate (Italian)
Currently translated at 98.9% (659 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
1 year ago
Luna 0b34b2630c Translated using Weblate (Danish)
Currently translated at 94.7% (631 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/da/
1 year ago
renovate[bot] 46cc225ceb Update dependency androidx.activity:activity-compose to v1.9.1 1 year ago
renovate[bot] 34750e052c Update dependency androidx.fragment:fragment-ktx to v1.8.2 1 year ago
renovate[bot] 71cdabad8b Update lifecycle to v2.8.4 1 year ago
Jose Delvani ffd5806bc8 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (18 of 18 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/pt_BR/
1 year ago
Pierfrancesco Passerini 33734e031f
Translated using Weblate (Italian)
Currently translated at 98.6% (657 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/it/
1 year ago
Kat Alimpieva b67f849c53
Translated using Weblate (Belarusian)
Currently translated at 5.8% (39 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/be/
1 year ago
Jose Delvani e88220cc70
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (666 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/pt_BR/
1 year ago
RonnyAL182e77f4e26446af b4ced4698a
Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (666 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/nb_NO/
1 year ago
Alex Baker 4aee7ee2fe Fix renovate.json 1 year ago
Alex Baker 3ab672bfbc Move some ColorProvider stuff to kmp 1 year ago
Alex Baker f66df67592 Use default arch thread pool 1 year ago
renovate[bot] 4f3df04921 Update flipper to v0.259.0 1 year ago
Alex Baker 25557579f9 Fix crash on invalid icon name 1 year ago
Jonatan Nyberg 40ec1d86f7 Translated using Weblate (Swedish)
Currently translated at 99.8% (665 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/sv/
1 year ago
Tntdruid 42d4cbc7fb Translated using Weblate (Danish)
Currently translated at 94.4% (629 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/da/
1 year ago
Milo Ivir fb2cd132de Translated using Weblate (Croatian)
Currently translated at 100.0% (666 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/hr/
1 year ago
Marc Van Impe 435c42920d Translated using Weblate (Dutch)
Currently translated at 100.0% (666 of 666 strings)

Translation: Tasks.org/Android
Translate-URL: https://hosted.weblate.org/projects/tasks/android/nl/
1 year ago
Tntdruid 8373e8238e Translated using Weblate (Danish)
Currently translated at 100.0% (18 of 18 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/da/
1 year ago
Milo Ivir e1f50c5cf4 Translated using Weblate (Croatian)
Currently translated at 100.0% (18 of 18 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/hr/
1 year ago
renovate[bot] 75f1f057aa Update flipper to v0.258.0 1 year ago
Alex Baker 2566b86fec Update version and changelog 1 year ago
Alex Baker e6cb93c57d Fix crash in vtodo cache migration 1 year ago
Alex Baker 5314736958 Update version and changelog 1 year ago
Alex Baker 12f8ba360c Fix managed DAVx5 account type 1 year ago
Alex Baker 5f0b6b668a Fix collapsing filter picker sections 1 year ago
109247019824 aadcb6355f Translated using Weblate (Bulgarian)
Currently translated at 100.0% (18 of 18 strings)

Translation: Tasks.org/Desktop
Translate-URL: https://hosted.weblate.org/projects/tasks/multiplatform/bg/
1 year ago
renovate[bot] 4491eb1cc6 Update dependency com.google.android.gms:play-services-maps to v19 1 year ago
renovate[bot] 6d023303cf Update dependency com.google.apis:google-api-services-drive to v3-rev20240628-2.0.0 1 year ago
renovate[bot] 81dd8fc2ea Update dependency com.google.firebase:firebase-bom to v33.1.2 1 year ago
renovate[bot] bb7209a07f Update dependency com.google.auth:google-auth-library-oauth2-http to v1.24.0 1 year ago
renovate[bot] a7b92ecb4b Update dependency gradle to v8.9 1 year ago

@ -1,5 +1,4 @@
github: abaker
liberapay: tasks
open_collective: tasks
patreon: tasks
custom: tasks.org/donate

@ -5,6 +5,7 @@ on:
branches:
- main
workflow_dispatch:
workflow_call:
permissions:
contents: read
@ -19,18 +20,20 @@ jobs:
- name: Decode Keystore
run: |
echo ${{ secrets.KEY_STORE }} | base64 -di > "${RUNNER_TEMP}"/keystore.jks
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- name: Set up JDK 17
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '17'
cache: 'gradle'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
java-version: '21'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Bundle
env:
KEY_PATH: ${{ runner.temp }}/keystore.jks
@ -41,7 +44,9 @@ jobs:
GOOGLE_KEY: ${{ secrets.GOOGLE_KEY }}
run: bundle exec fastlane bundle
- name: Upload artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: release
path: app/build/outputs/**
path: |
app/build/outputs/**
wear/build/outputs/**

@ -11,22 +11,25 @@ jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- name: Set up JDK 17
uses: actions/setup-java@v4
- name: Set up JDK 21
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '17'
cache: 'gradle'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
java-version: '21'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Lint checks
run: bundle exec fastlane lint
- name: Archive lint reports
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
if: ${{ always() }}
with:
name: lint-reports
@ -40,14 +43,16 @@ jobs:
api-level: [29]
steps:
- name: checkout
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Set up JDK 17
uses: actions/setup-java@v4
- name: Set up JDK 21
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '17'
cache: 'gradle'
java-version: '21'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Enable KVM
run: |
@ -84,7 +89,7 @@ jobs:
script: ./gradlew -Pcoverage app:test${{ matrix.flavor }}DebugUnitTest app:connected${{ matrix.flavor }}DebugAndroidTest
- name: Upload test reports
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
if: ${{ always() }}
with:
name: test-reports-${{ matrix.flavor }}

@ -0,0 +1,47 @@
name: Update Dependency Diff
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
push:
branches:
- main
paths:
- 'gradle/libs.versions.toml'
pull_request:
paths:
- 'gradle/libs.versions.toml'
workflow_dispatch:
jobs:
update-deps:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v6
with:
ref: ${{ github.head_ref }}
- name: Set up JDK
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '21'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Update dependency diffs
run: ./update_dependency_diff
- name: Commit changes
run: |
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git add deps_*.txt
git diff --staged --quiet || git commit -m "Update dependency diffs"
git push

@ -0,0 +1,32 @@
name: Deploy
on:
workflow_dispatch:
permissions:
contents: read
env:
FASTLANE: ${{ secrets.FASTLANE }}
jobs:
bundle:
uses: ./.github/workflows/bundle.yml
secrets: inherit
deploy:
runs-on: ubuntu-latest
needs: [ bundle ]
steps:
- uses: actions/checkout@v6
- name: Fastlane key
run: |
echo "$FASTLANE" > ./fastlane.json
- uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- uses: actions/download-artifact@v7
with:
name: release
path: .
- name: Deploy
run: bundle exec fastlane deploy

1
.gitignore vendored

@ -11,3 +11,4 @@ Thumbs.db
/captures/
/fastlane/report.xml
/compose-metrics/
.DS_Store

@ -1 +1 @@
3.3.4
3.4.8

@ -0,0 +1,70 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="wear" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false" singleton="true">
<module name="tasks.Tasks.wear.main" />
<option name="DEPLOY" value="true" />
<option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
<option name="DEPLOY_AS_INSTANT" value="false" />
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="CLEAR_APP_STORAGE" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="RESTORE_ENABLED" value="false" />
<option name="RESTORE_FILE" value="" />
<option name="CLEAR_LOGCAT" value="true" />
<option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
<option name="TARGET_SELECTION_MODE" value="DEVICE_AND_SNAPSHOT_COMBO_BOX" />
<option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
<option name="DEBUGGER_TYPE" value="Auto" />
<Auto>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Auto>
<Hybrid>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Hybrid>
<Java>
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Java>
<Native>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Native>
<Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="false" />
<option name="STARTUP_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Java/Kotlin Method Sample (legacy)" />
<option name="STARTUP_NATIVE_MEMORY_PROFILING_ENABLED" value="false" />
<option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" />
</Profilers>
<option name="DEEP_LINK" value="" />
<option name="ACTIVITY_CLASS" value="" />
<option name="SEARCH_ACTIVITY_IN_GLOBAL_SCOPE" value="false" />
<option name="SKIP_ACTIVITY_VALIDATION" value="false" />
<method v="2">
<option name="Android.Gradle.BeforeRunTask" enabled="true" />
</method>
</configuration>
</component>

@ -1,3 +1,564 @@
### 14.8.4 (2025-12-20)
* Fix flashing widgets [#3902](https://github.com/tasks/tasks/issues/3902)
* Fix random reminder scheduling
* Fix random reminders firing immediately on recurring tasks [#3904](https://github.com/tasks/tasks/issues/3904)
* Fix deadlock when adding new task
* Fix crash in settings when backup location unavailable [#3989](https://github.com/tasks/tasks/issues/3989)
* Fix Hebrew and Indonesian support [#3928](https://github.com/tasks/tasks/issues/3928)
* Update translations
* Asturian - Xana
* Bosnian - @hasak
* Finnish - @pHamala
* Indonesian - @erigmac
* Japanese - @array, Norara
* Persian - @theuser17
* Romanian - @ygorigor
### 14.8.3 (2025-09-16)
* Fix crash on Android 10 and below
### 14.8.2 (2025-09-14)
* Fix blank widgets on Android 16 QPR1 [#3847](https://github.com/tasks/tasks/issues/3847)
* Fix all-day calendar events [#1534](https://github.com/tasks/tasks/issues/1534)
* Fix alarm synchronization [#3859](https://github.com/tasks/tasks/issues/3859)
* Fix sync failure when migrating data from EteSync to CalDAV [#3869](https://github.com/tasks/tasks/issues/3869)
* Fix removing values from Microsoft To Do [#3862](https://github.com/tasks/tasks/issues/3862)
* Fix share invites for Nextcloud [#2386](https://github.com/tasks/tasks/issues/2386)
* Fix failure to delete source data when moving to Google Tasks [#3867](https://github.com/tasks/tasks/issues/3867)
* Fix crash when clearing completed while grouping by lists
* Update translations
* Croatian - @milotype
* Dutch - @fvbommel
* German - @MisterTechnik
* Italian - @glemco
* Serbian - @vale-decem
### 14.8.1 (2025-08-24)
* System bar scrim improvements
* Recover from Google Task 'Bad request' errors
* Improve layout on Z Folds
* Crash fixes
* Update translations
* Brazilian Portuguese - odnankenobi
* Catalan - @Crashillo, @ferranpujolcamins
* Danish - ERYpTION
* Esperanto - Don Zouras
* Galician - @Crashillo, @delthia
* Hungarian - @Antmajgra, @gthrepwood
* Italian - @ppasserini
* Korean - Jiho Min
* Polish - @Antmajgra
* Portuguese - @Crashillo
* Russian - Алексей Ежков
* Spanish - @Crashillo
### 14.8 (2025-08-02)
* Synchronize **list** icons for Tasks.org and CalDAV accounts
* Does not apply to Microsoft To Do, Google Tasks, DAVx5, EteSync, or DecSync
CC accounts
* Does not apply to tags or filters
* CalDAV server must support extensible properties, e.g. Nextcloud or sabre/dav
* Target Android 15
* Return to previous view after searching
* Remove shadow from date picker sheet
* Fix updating list names and colors for Tasks.org and CalDAV accounts
* Update translations
* Bulgarian - 109247019824
* Chinese (Simplified) - Sketch6580
* Czech - @Fjuro
* Dutch - @fvbommel
* Estonian - Priit Jõerüüt
* French - @FlorianLeChat
* German - @Colorful Rhino
* Hebrew - Xo
* Italian - @ppasserini
* Turkish - @emintufan
* Ukrainian - @IhorHordiichuk
### 14.7.4 (2025-07-12)
* @devn1x: Fix escaping quotes in iCalendar [#3645](https://github.com/tasks/tasks/pull/3645)
* Limit widget to 25 items on Android 16+
* Android 16 nerfed widget performance 😢
* Fix bug when reconfiguring widget
* Fix default widget group sort order
* Update translations
* Catalan - pitroig
* Chinese (Simplified) - 大王叫我来巡山
* Croatian - @milotype
* German - @Kachelkaiser
* Serbian - @vale-decem
* Swedish - Nick Wick
* Tamil - @TamilNeram
### 14.7.3 (2025-06-13)
* Fix dynamic color
* Fix Microsoft To Do sync failure
* Fix crash after deleting last list
* Fix notifications when 'Alarms & reminders' not allowed
* Update translations
* Bulgarian - 109247019824
* Dutch - @fvbommel
* Esperanto - Don Zouras
* French - @FlorianLeChat
* Hebrew - Xo
* Japanese - M_Haruki
* Persian - @theuser17
* Portuguese - @nero-bratti
* Romanian - @ygorigor
* Russian - @yurtpage
* Spanish - @orionn333
* Swedish - @Nicklasfox
* Turkish - @emintufan
### 14.7.2 (2025-05-23)
* Remove Microsoft Authentication Library from F-Droid builds [#3581](https://github.com/tasks/tasks/issues/3581)
* Remove contacts permission added by Microsoft Authentication Library
* Enable video attachments
* Fix wallpaper theme
* Fix handling multiple attachments
* Update translations
* Arabic - abdelbasset jabrane
* Bulgarian - 109247019824
* Catalan - @Crashillo
* Czech - @Fjuro
* Danish - @catsnote
* Dutch - @fvbommel
* Esperanto - Don Zouras
* Estonian - Priit Jõerüüt
* Hungarian - Kaci
* Italian - @ppasserini
* Turkish - @emintufan
* Ukrainian - @IhorHordiichuk
### 14.7.1 (2025-05-04)
* Fix app closing itself automatically [#3366](https://github.com/tasks/tasks/issues/3366)
* Automatically set default list when connecting Microsoft To Do account
* Update translations
* Arabic - abdelbasset jabrane, @kemo-1
* Brazilian Portuguese - Jose Delvani
* Chinese (Simplified) - Sketch6580
* French - @FlorianLeChat
* German - @Kachelkaiser
### 14.7 (2025-05-03)
* Add support for Microsoft To Do work & school accounts [#3267](https://github.com/tasks/tasks/issues/3267)
* Add ability to rename or delete local account
* Prompt to sign in or import backup on first launch
* @BeaterGhalio: Fix back button closing app after search [#3426](https://github.com/tasks/tasks/issues/3426)
* @codokie: Automirrored icons fix [#3499](https://github.com/tasks/tasks/pull/3499)
* @codokie: Fix ltr-rtl alignment for text input [#3489](https://github.com/tasks/tasks/pull/3489)
* Use system language picker on Android 33+
* Don't show 'due date' as a start date option for DAVx5, EteSync, DecSync CC [#1558](https://github.com/tasks/tasks/issues/1558)
* Prevent attempts to delete or rename Microsoft To Do default list
* Don't handle system 'Clear storage' button
* Update minimum Android version to 8
* Fix backup import dropping tags [#3556](https://github.com/tasks/tasks/issues/3556)
* Fix start date chip when grouping by start date [#3509](https://github.com/tasks/tasks/issues/3509)
* Update translations
* Brazilian Portuguese - @sobeitnow0, dedakir923
* Czech - @Fjuro
* Dutch - Jay Tromp
* German - min7-i
* Hebrew - Xo
* Portuguese - @wm-pucrs
* Russian - @hady-exc, Maksim_220 Кабанов
* Slovak - @jose1711
* Spanish - Nucl3arSnake, @diamondtipdr
* Tamil - @TamilNeram
### 14.6.2 (2025-04-06)
* Show error indicators if 'When started' or 'When due' reminders are used
without start or due times
* Fix delay when saving tasks
* Fix populating clock picker with initial value instead of 00:00
* Fix displaying selected calendar month
* Fix grouping by start date in descending order
* Update translations
* Arabic - abdelbasset jabrane
* Danish - @catsnote
* Esperanto - Don Zouras
* German - @Kachelkaiser
* Hebrew - @elid34
* Italian - @Fs00
* Slovak - @jose1711
* Turkish - @emintufan
### 14.6.1 (2025-03-30)
* Restore default sort mode for existing installs
* Fix grouping by due date descending
* Remove shadow from launcher icons
### 14.6 (2025-03-25)
* Add dynamic theme color - requires pro subscription
* Update translation
* Brazilian Portuguese - dedakir923
* Bulgarian - 109247019824
* Chinese (Simplified) - Sketch6580
* Estonian - Priit Jõerüüt
* Italian - @ppasserini
* Japanese - YuzuMikan
* Swedish - @Ziron
* Ukrainian - @IhorHordiichuk
### 14.5.4 (2025-03-24)
* Updated remaining date and time pickers to Material 3
* App will remember if you change calendar or clock to text input
* Text input now supported on start and due date pickers
* Remove calendar and clock mode settings
* Open date picker to currently selected month
* Replaced upgrade pop-up with a banner [#1429](https://github.com/tasks/tasks/issues/1429)
* @hady-exc: Fix date picker time zone issues [#3248](https://github.com/tasks/tasks/pull/3248)
* Fix date time picker font scaling issues [#3437](https://github.com/tasks/tasks/issues/3437)
* Fix save task on keyboard done [#3288](https://github.com/tasks/tasks/issues/3288)
* Fix applying date time when dismissing date time pickers
* Fix 3 button navigation bar padding in landscape mode
* Fix out of memory errors in backup import/export
* Update translations
* Brazilian Portuguese - dedakir923
* Bulgarian - 109247019824
* Chinese (Simplified) - Sketch6580
* Dutch - @fvbommel
* Estonian - Priit Jõerüüt
* French - @FlorianLeChat
* German - @franconian
* Hungarian - Kaci
* Italian - @ppasserini
* Romanian - @ygorigor
* Tamil - @TamilNeram
* Turkish - @emintufan
### 14.5.3 (2025-03-20)
* Updated date and time pickers to Material 3
* Remove 'Start of week' preference
* This feature can't be supported with Material 3 calendars
### 14.5.2 (2025-03-15)
* Fix items hidden under menu search bar [#3406](https://github.com/tasks/tasks/issues/3406)
* Attempt to fix layout on some foldables
* Fix checking for tasks.org account [#3397](https://github.com/tasks/tasks/issues/3397)
* Slightly reduce donation nagging frequency [#3397](https://github.com/tasks/tasks/issues/3397)
* Update translations
* Danish - Øjvind Fritjof Arnfred
* Hungarian - Kaci
* Malayalam - Clouds Liberty
* Russian - @GREAT-DNG
* Swedish - @bittin
* Tamil - @TamilNeram
### 14.5.1 (2025-03-11)
* Fix performance issue when opening search
* Fix Microsoft To Do authentication crash
* Fix crash on task list screen
* Update translation
* Brazilian Portuguese - dedakir923
* Bulgarian - 109247019824
* Chinese (Simplified) - 大王叫我来巡山
* Dutch - @fvbommel
* Esperanto - Don Zouras
* Estonian - Priit Jõerüüt
* French - @FlorianLeChat
* German - Colorful Rhino
* Italian - @ppasserini
* Kannada - Abilash S
* Persian - @mamad-zahiri
* Ukrainian - @IhorHordiichuk
### 14.5 (2025-03-04)
* Material 3 - work in progress
* Side navigation drawer
* Improve support for foldables
* Improve edge-to-edge support
* Remove options for top app bar and disabling collapsing app bar
* Some features are being removed in order to make development easier for the
upcoming desktop app. The features may return again in a future release.
* Save backup files and attachments to Nextcloud [#1289](https://github.com/tasks/tasks/issues/1289)
* Dismiss notification dialog when pressing cancel [#2116](https://github.com/tasks/tasks/issues/2116)
* Performance improvements
* Fix Microsoft To Do sync failure
* Fix missing list chips for subtasks in custom filters
* Fix for database timeouts
* Fix infinite subtask recursion
* Update translations
* Belarusian - @fobo66
* Estonian - Priit Jõerüüt
* German - Colorful Rhino
* Japanese - M_Haruki
* Nahuatl - Benjamin Bruce
* Slovak - @jose1711
* Ukrainian - @IhorHordiichuk
### 14.4.8 (2025-02-04)
* Performance improvements
* Update translations
* German - Colorful Rhino, @Kachelkaiser
* Nepali - Sagun Khatri
### 14.4.7 (2025-02-01)
* Database improvements
* Update translations
* Estonian - Priit Jõerüüt
* German - @Kachelkaiser
### 14.4.6 (2025-01-29)
* Database performance improvements
* Additional debug logging
* Update translations
* Danish - ERYpTION
* Estonian - Priit Jõerüüt
* German - @franconian, Colorful Rhino, @Kachelkaiser
* Italian - @ppasserini
* Korean - Sunjae Choi
* Nepali - Sagun Khatri
* Slovak - @jose1711
* Swedish - Nick Wick
### 14.4.5 (2025-01-22)
* Performance improvements
* DAVx5 sync performance improvements
* Update translations
* Bosnian - @hasak
* Esperanto - Don Zouras
* Estonian - Priit Jõerüüt, @dermezl
* Italian - @ppasserini
* Nepali - @sagunkhatri
### 14.4.4 (2025-01-19)
* Fix list pickers [#3269](https://github.com/tasks/tasks/issues/3269)
### 14.4.3 (2025-01-18)
* Preserve reminder recurrence when copying tasks
* Refresh task list after changing settings
* Fix missing chips for local lists
* Fix changes being lost when completing task from edit screen
* Update translations
* German - @franconian
* Turkish - @emintufan
* Ukrainian - @IhorHordiichuk
### 14.4.2 (2025-01-16)
* Fix crash on missing account
* Update translations
* Bulgarian - 109247019824
* Chinese (Simplified) - Sketch6580
* Croatian - @milotype
* Dutch - @fvbommel
* Esperanto - Don Zouras
* French - @FlorianLeChat, @CennoxX
* German - @franconian
* Hungarian - Kaci
* Italian - @ppasserini
* Russian - @hady-exc
* Slovak - @jose1711
* Ukrainian - @IhorHordiichuk
### 14.4.1 (2025-01-11)
* Microsoft To Do support [#2011](https://github.com/tasks/tasks/issues/2011)
* This feature is in early access, please report any bugs!
* Enable under 'Advanced' settings
* Add configuration option for new lines in titles
* @TonSilver - Copy comments to clipboard with long press [#3212](https://github.com/tasks/tasks/pull/3212)
* @jheld - Attempt to fix F-Droid build with colorpicker fork [#2028](https://github.com/tasks/tasks/issues/2028)
* Subscription changes
* Multiple Google Task accounts are now free to use
* Tasker plugins are now free to use
* Fix crash on empty shortcut labels
* Fix missing settings button on Android 10 and below
* Update translations
* Bulgarian - 109247019824
* Chinese (Simplified) - 大王叫我来巡山, Sketch6580
* Czech - @AtmosphericIgnition
* Dutch - @fvbommel
* Esperanto - Don Zouras
* French - @FlorianLeChat, @lfavole
* German - @franconian, Colorful Rhino
* Hungarian - Kaci
* Italian - @ppasserini
* Slovak - @jose1711
* Swedish - @Ziron, @bittin
* Turkish - @emintufan
### 14.3.1 (2025-01-02)
* Fix edit screen disappearing on rotation
* Fix notification bundling issue
* Fix scrolling in custom filter settings
* Remove map theme and desaturation options
* Update translations
* Bulgarian - @StoyanDimitrov
* Chinese (Simplified) - 大王叫我来巡山
* Dutch - @fvbommel
* French - @FlorianLeChat
* German - @p-rogalski
* Italian - @ppasserini
* Korean - Sunjae Choi
* Swedish - @bittin
### 14.3 (2024-12-24)
* "Add widget to home screen" shortcut in list settings
* "Add shortcut to home screen" shortcut in list settings
* Shortcuts use list icon and color
* Fix long running sync indicators [#3045](https://github.com/tasks/tasks/issues/3045)
* @hady-exc: Migrate list setting screens to Compose [#3163](https://github.com/tasks/tasks/pull/3163)
* Update translations
* Bosnian - @hasak
* Bulgarian - @StoyanDimitrov
* Chinese (Simplified) - 大王叫我来巡山
* Croatian - @milotype
* Esperanto - Don Zouras
* Finnish - @pHamala, @Ricky-Tigg
* German - @p-rogalski, @franconian, @Atalanttore
* Hungarian - Kaci
* Italian - @ppasserini
* Korean - Sunjae Choi
* Spanish - gallegonovato
* Swedish - Nick Wick
### 14.2.1 (2024-12-03)
* Fix save button when 'Back button saves task' is enabled [#3149](https://github.com/tasks/tasks/issues/3149)
* Fix customizing edit screen order screen
### 14.2 (2024-12-02)
* Updated edit screen task title
* Show full title
* Removed collapse on scroll
* Removed floating action button
* Add separate alarms and reminders warning
* Capitalize tag picker text field
* Update translations
* Bulgarian - @StoyanDimitrov
* Catalan - raulmagdalena
* Chinese (Simplified) - 大王叫我来巡山
* Dutch - @fvbommel
* French - @FlorianLeChat
* Italian - @ppasserini
* Spanish - gallegonovato
* Ukrainian - @nathalier
### 14.1.1 (2024-11-26)
* Show warning when quiet hours are in effect
* Fix escape character in some localizations [#3046](https://github.com/tasks/tasks/issues/3046)
* Fix comment delete button color [#3102](https://github.com/tasks/tasks/issues/3102)
* Update translations
* Bosnian - @hasak
* Bulgarian - @StoyanDimitrov
* Catalan - raulmagdalena
* Chinese (Simplified) - 大王叫我来巡山
* Croatian - @milotype
* Dutch - @fvbommel
* Esperanto - Don Zouras
* French - @FlorianLeChat
* Hungarian - Kaci
* Italian - @ppasserini
* Polish - @rom4nik
* Spanish - gallegonovato
* Swedish - Nick Wick
### 14.1 (2024-11-20)
* Add 'Help & Feedback > Send application logs'
* Delete snoozed reminders when completing tasks
* Fix duplicated tasks when using 'Share' [#2404](https://github.com/tasks/tasks/issues/2404)
* Don't show sync indicator on startup when sync is not used
* Update translations
* Bosnian - @hasak
* Brazilian Portuguese - kowih83264
* Croatian - @milotype
* German - min7-i
### 14.0.1 (2024-11-10)
* Fix widget crash
* Fix EteSync sync failure [#3092](https://github.com/tasks/tasks/issues/3092)
* Minor Wear OS improvements
* Update translations
* Hungarian - Kaci
* Italian - @ppasserini
* Kannada - @historicattle
* Marathi - @historicattle
* Spanish - gallegonovato
* Swedish - @bittin
### 14.0 (2024-11-05)
* Wear OS support (Google Play only)
* Move drawer items to top unless searching
* Fix drawer item layout issues
* Update translations
* Brazilian Portuguese - Nicolas Suzuki, pogoyar888
* Bulgarian - @StoyanDimitrov
* Chinese (Simplified) - 大王叫我来巡山
* Chinese (Traditional) - hugoalh
* Dutch - Luna, @fvbommel
* French - @FlorianLeChat
* German - @p-rogalski, @franconian
* Hungarian - Kaci
* Italian - @ppasserini
* Spanish - gallegonovato
* Swedish - @bittin
* Turkish - @oersen
* Ukrainian - @IhorHordiichuk
### 13.11.2 (2024-09-29)
* Target Android 14
* Fix crash in location picker [#2990](https://github.com/tasks/tasks/issues/2990)
* Fix SQLite crash [#3045](https://github.com/tasks/tasks/issues/3045)
* Update translations
* Arabic - @sanabel-al-firdaws
* Belarusian - @katalim
* Brazilian Portuguese - Jose Delvani
* Catalan - raulmagdalena, @truita
* Chinese (Traditional) - @abc0922001
* Croatian - @milotype
* Czech - atmosphericignition
* Danish - Tntdruid, Luna
* Dutch - @VIMVa
* Esperanto - Don Zouras
* Estonian - @dermezl
* German - @Atalanttore, @tct123
* Italian - @ppasserini
* Norwegian Bokmål - @RonnyAL
* Swedish - @JonatanWick, @bittin
### 13.11.1 (2024-07-15)
* Fix crash when collapsing list picker sections
* Fix crash in database migration
* Enabled Managed DAVx5
* Update translations
* Bulgarian - @StoyanDimitrov
### 13.11 (2024-07-14)
* New icon picker with over 2,100 icons! (pro feature)
@ -22,7 +583,7 @@
* Android 13+ users must grant additional reminder permissions
* Fix completing task multiple times from notification
* Fix deleting new subtasks from edit screen
* Enable Managed DAVx5
* ~~Enable Managed DAVx5~~
* Update translations
* Arabic - @islam2hamy
* Brazilian Portuguese - Jose Delvani

@ -1,3 +1,4 @@
source "https://rubygems.org"
gem "fastlane"
gem "abbrev"

@ -5,41 +5,46 @@ GEM
base64
nkf
rexml
addressable (2.8.6)
public_suffix (>= 2.0.2, < 6.0)
abbrev (0.1.2)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
artifactory (3.0.17)
atomos (0.1.3)
aws-eventstream (1.3.0)
aws-partitions (1.944.0)
aws-sdk-core (3.197.1)
aws-eventstream (1.4.0)
aws-partitions (1.1196.0)
aws-sdk-core (3.240.0)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.8)
aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9)
base64
bigdecimal
jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.85.0)
aws-sdk-core (~> 3, >= 3.197.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.152.3)
aws-sdk-core (~> 3, >= 3.197.0)
logger
aws-sdk-kms (1.118.0)
aws-sdk-core (~> 3, >= 3.239.1)
aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.208.0)
aws-sdk-core (~> 3, >= 3.234.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.8)
aws-sigv4 (1.8.0)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.12.1)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
base64 (0.2.0)
base64 (0.3.0)
bigdecimal (4.0.1)
claide (1.1.0)
colored (1.2)
colored2 (3.1.2)
commander (4.6.0)
highline (~> 2.0.0)
declarative (0.0.20)
digest-crc (0.6.5)
digest-crc (0.7.0)
rake (>= 12.0.0, < 14.0.0)
domain_name (0.6.20240107)
dotenv (2.8.1)
emoji_regex (3.2.3)
excon (0.110.0)
faraday (1.10.3)
excon (0.112.0)
faraday (1.10.4)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
@ -55,20 +60,20 @@ GEM
faraday (>= 0.8.0)
http-cookie (~> 1.0.0)
faraday-em_http (1.0.0)
faraday-em_synchrony (1.0.0)
faraday-em_synchrony (1.0.1)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
faraday-multipart (1.0.4)
multipart-post (~> 2)
faraday-net_http (1.0.1)
faraday-multipart (1.1.1)
multipart-post (~> 2.0)
faraday-net_http (1.0.2)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
faraday-retry (1.0.3)
faraday_middleware (1.2.0)
faraday_middleware (1.2.1)
faraday (~> 1.0)
fastimage (2.3.1)
fastlane (2.221.1)
fastimage (2.4.0)
fastlane (2.228.0)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
@ -84,6 +89,7 @@ GEM
faraday-cookie_jar (~> 0.0.6)
faraday_middleware (~> 1.0)
fastimage (>= 2.1.0, < 3.0.0)
fastlane-sirp (>= 1.0.0)
gh_inspector (>= 1.1.2, < 2.0.0)
google-apis-androidpublisher_v3 (~> 0.3)
google-apis-playcustomapp_v1 (~> 0.1)
@ -107,8 +113,10 @@ GEM
tty-spinner (>= 0.8.0, < 1.0.0)
word_wrap (~> 1.0.0)
xcodeproj (>= 1.13.0, < 2.0.0)
xcpretty (~> 0.3.0)
xcpretty (~> 0.4.1)
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
fastlane-sirp (1.0.0)
sysrandom (~> 1.0)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.54.0)
google-apis-core (>= 0.11.0, < 2.a)
@ -126,12 +134,12 @@ GEM
google-apis-core (>= 0.11.0, < 2.a)
google-apis-storage_v1 (0.31.0)
google-apis-core (>= 0.11.0, < 2.a)
google-cloud-core (1.7.0)
google-cloud-core (1.8.0)
google-cloud-env (>= 1.0, < 3.a)
google-cloud-errors (~> 1.0)
google-cloud-env (1.6.0)
faraday (>= 0.17.3, < 3.0)
google-cloud-errors (1.4.0)
google-cloud-errors (1.5.0)
google-cloud-storage (1.47.0)
addressable (~> 2.8)
digest-crc (~> 0.4)
@ -147,37 +155,39 @@ GEM
os (>= 0.9, < 2.0)
signet (>= 0.16, < 2.a)
highline (2.0.3)
http-cookie (1.0.6)
http-cookie (1.0.8)
domain_name (~> 0.5)
httpclient (2.8.3)
httpclient (2.9.0)
mutex_m
jmespath (1.6.2)
json (2.7.2)
jwt (2.8.2)
json (2.12.2)
jwt (2.10.2)
base64
mini_magick (4.13.1)
logger (1.7.0)
mini_magick (4.13.2)
mini_mime (1.1.5)
multi_json (1.15.0)
multipart-post (2.4.1)
nanaimo (0.3.0)
naturally (2.2.1)
mutex_m (0.3.0)
nanaimo (0.4.0)
naturally (2.3.0)
nkf (0.2.0)
optparse (0.5.0)
optparse (0.6.0)
os (1.1.4)
plist (3.7.1)
public_suffix (5.1.1)
rake (13.2.1)
plist (3.7.2)
public_suffix (6.0.2)
rake (13.3.0)
representable (3.2.0)
declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
uber (< 0.2.0)
retriable (3.1.2)
rexml (3.2.9)
strscan
rouge (2.0.7)
rexml (3.4.2)
rouge (3.28.0)
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
rubyzip (2.4.1)
security (0.1.5)
signet (0.19.0)
signet (0.20.0)
addressable (~> 2.8)
faraday (>= 0.17.5, < 3.a)
jwt (>= 1.5, < 3.0)
@ -185,7 +195,7 @@ GEM
simctl (1.6.10)
CFPropertyList
naturally
strscan (3.1.0)
sysrandom (1.0.5)
terminal-notifier (2.0.0)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
@ -195,17 +205,17 @@ GEM
tty-spinner (0.9.3)
tty-cursor (~> 0.7)
uber (0.1.0)
unicode-display_width (2.5.0)
unicode-display_width (2.6.0)
word_wrap (1.0.0)
xcodeproj (1.24.0)
xcodeproj (1.27.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
nanaimo (~> 0.3.0)
rexml (~> 3.2.4)
xcpretty (0.3.0)
rouge (~> 2.0.7)
nanaimo (~> 0.4.0)
rexml (>= 3.3.6, < 4.0)
xcpretty (0.4.1)
rouge (~> 3.28.0)
xcpretty-travis-formatter (1.0.1)
xcpretty (~> 0.2, >= 0.0.7)
@ -213,7 +223,8 @@ PLATFORMS
ruby
DEPENDENCIES
abbrev
fastlane
BUNDLED WITH
2.2.32
2.6.9

@ -15,7 +15,7 @@ Please visit [tasks.org](https://tasks.org) for end user documentation and suppo
[![PayPal donate button](https://img.shields.io/badge/paypal-donate-yellow.svg?logo=paypal)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=alex@tasks.org)
[![Liberapay donate button](https://img.shields.io/liberapay/receives/tasks.svg?logo=liberapay)](https://liberapay.com/tasks/donate)
[![build](https://github.com/tasks/tasks/actions/workflows/bundle.yml/badge.svg)](https://github.com/tasks/tasks/actions/workflows/bundle.yml) [![weblate](https://hosted.weblate.org/widgets/tasks/-/android/svg-badge.svg)](https://hosted.weblate.org/engage/tasks/?utm_source=widget) [![codebeat badge](https://codebeat.co/badges/07924fca-2f18-4eff-99a3-120ec5ac2d5f)](https://codebeat.co/projects/github-com-tasks-tasks-main)
[![build](https://github.com/tasks/tasks/actions/workflows/bundle.yml/badge.svg)](https://github.com/tasks/tasks/actions/workflows/bundle.yml) [![weblate](https://hosted.weblate.org/widgets/tasks/-/android/svg-badge.svg)](https://hosted.weblate.org/engage/tasks/?utm_source=widget)
### Contributing
@ -23,8 +23,6 @@ Contributions are always welcome! Whether translations, code changes, bug report
### Communication
Join the #tasks channel on Libera Chat to chat with the Tasks team and other people. [Link to webchat](https://web.libera.chat/#tasks)
You can also use [GitHub Discussions](https://github.com/tasks/tasks/discussions).
You can submit questions to [GitHub Discussions](https://github.com/tasks/tasks/discussions).
If you have a suggestion or want to report a bug, please see [CONTRIBUTING.md](CONTRIBUTING.md).

@ -51,8 +51,8 @@ android {
defaultConfig {
testApplicationId = "org.tasks.test"
applicationId = "org.tasks"
versionCode = 131104
versionName = "13.11"
versionCode = libs.versions.versionCode.get().toInt()
versionName = libs.versions.versionName.get()
targetSdk = libs.versions.android.targetSdk.get().toInt()
minSdk = libs.versions.android.minSdk.get().toInt()
testInstrumentationRunner = "org.tasks.TestRunner"
@ -154,6 +154,8 @@ dependencies {
implementation(projects.data)
implementation(projects.kmp)
implementation(projects.icons)
implementation(libs.androidx.navigation)
implementation(libs.androidx.adaptive.navigation.android)
coreLibraryDesugaring(libs.desugar.jdk.libs)
implementation(libs.bitfire.dav4jvm) {
exclude(group = "junit")
@ -176,14 +178,17 @@ dependencies {
implementation(libs.dagger.hilt)
ksp(libs.dagger.hilt.compiler)
ksp(libs.androidx.hilt.compiler)
implementation(libs.androidx.hilt.navigation)
implementation(libs.androidx.hilt.work)
implementation(libs.androidx.core.splashscreen)
implementation(libs.androidx.datastore)
implementation(libs.androidx.fragment.ktx)
implementation(libs.androidx.fragment.compose)
implementation(libs.androidx.lifecycle.runtime)
implementation(libs.androidx.lifecycle.runtime.compose)
implementation(libs.androidx.lifecycle.viewmodel)
implementation(libs.androidx.room)
implementation(libs.androidx.sqlite)
implementation(libs.androidx.appcompat)
implementation(libs.iconics)
implementation(libs.markwon)
@ -193,9 +198,6 @@ dependencies {
implementation(libs.markwon.tables)
implementation(libs.markwon.tasklist)
debugImplementation(libs.facebook.flipper)
debugImplementation(libs.facebook.flipper.network)
debugImplementation(libs.facebook.soloader)
debugImplementation(libs.leakcanary)
debugImplementation("androidx.compose.ui:ui-tooling")
debugImplementation(libs.kotlin.reflect)
@ -207,6 +209,7 @@ dependencies {
implementation(libs.persistent.cookiejar)
implementation(libs.material)
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.compose.material3.adaptive)
implementation(libs.androidx.constraintlayout)
implementation(libs.androidx.swiperefreshlayout)
implementation(libs.androidx.preference)
@ -227,8 +230,6 @@ dependencies {
implementation(libs.colorpicker)
implementation(libs.appauth)
implementation(libs.osmdroid)
implementation(libs.retrofit)
implementation(libs.retrofit.moshi)
implementation(libs.androidx.recyclerview)
implementation(platform(libs.androidx.compose))
@ -237,30 +238,40 @@ dependencies {
implementation("androidx.compose.material:material")
implementation("androidx.compose.runtime:runtime-livedata")
implementation(libs.androidx.activity.compose)
implementation("androidx.compose.material:material-icons-extended")
implementation(libs.androidx.material.icons.extended)
implementation(libs.androidx.lifecycle.viewmodel.compose)
implementation("androidx.compose.ui:ui-viewbinding")
implementation("androidx.compose.ui:ui-tooling-preview")
implementation(libs.coil.compose)
implementation(libs.coil.video)
implementation(libs.coil.svg)
implementation(libs.coil.gif)
implementation(libs.accompanist.flowlayout)
implementation(libs.ktor)
implementation(libs.ktor.client.logging)
implementation(libs.ktor.content.negotiation)
implementation(libs.ktor.serialization)
implementation(libs.accompanist.permissions)
implementation(libs.accompanist.systemuicontroller)
googleplayImplementation(platform(libs.firebase))
googleplayImplementation("com.google.firebase:firebase-crashlytics")
googleplayImplementation("com.google.firebase:firebase-analytics") {
googleplayImplementation(libs.firebase.crashlytics)
googleplayImplementation(libs.firebase.analytics) {
exclude("com.google.android.gms", "play-services-ads-identifier")
}
googleplayImplementation("com.google.firebase:firebase-config-ktx")
googleplayImplementation(libs.firebase.config.ktx)
googleplayImplementation(libs.play.services.location)
googleplayImplementation(libs.play.services.maps)
googleplayImplementation(libs.play.billing.ktx)
googleplayImplementation(libs.play.review)
googleplayImplementation(libs.play.services.oss.licenses)
googleplayImplementation(libs.horologist.datalayer.phone)
googleplayImplementation(libs.horologist.datalayer.grpc)
googleplayImplementation(libs.horologist.datalayer.core)
googleplayImplementation(libs.play.services.wearable)
googleplayImplementation(libs.microsoft.authentication) {
exclude("com.microsoft.device.display", "display-mask")
}
googleplayImplementation(projects.wearDatalayer)
androidTestImplementation(libs.dagger.hilt.testing)
kspAndroidTest(libs.dagger.hilt.compiler)

@ -0,0 +1,20 @@
{
"version": 3,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "org.tasks.ak",
"variantName": "genericRelease",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 130804,
"versionName": "14.0.6",
"outputFile": "app-generic-release.apk"
}
],
"elementType": "File"
}

19
app/proguard.pro vendored

@ -2,13 +2,6 @@
-keep class org.tasks.** { *; }
# remove logging statements
-assumenosideeffects class timber.log.Timber* {
public static *** v(...);
public static *** d(...);
public static *** i(...);
}
# guava
-dontwarn sun.misc.Unsafe
-dontwarn java.lang.ClassValue
@ -33,6 +26,8 @@
-dontwarn net.fortuna.ical4j.model.**
-dontwarn org.codehaus.groovy.**
-dontwarn org.apache.log4j.** # ignore warnings from log4j dependency
-dontwarn com.github.erosb.jsonsKema.** # ical4android
-dontwarn org.jparsec.** # ical4android
-keep class net.fortuna.ical4j.** { *; } # keep all model classes (properties/factories, created at runtime)
-keep class at.bitfire.** { *; } # all DAVdroid code is required
@ -57,3 +52,13 @@
# material icons
-keep class androidx.compose.material.icons.outlined.** { *; }
# microsoft authentication
-dontwarn com.microsoft.device.display.DisplayMask
-dontwarn com.google.android.libraries.identity.**
-dontwarn edu.umd.cs.findbugs.annotations.**
-dontwarn com.google.crypto.tink.subtle.**
-dontwarn net.jcip.annotations.**
-keepclassmembers class * extends com.google.protobuf.GeneratedMessageLite { <fields>; }

@ -5,452 +5,372 @@
*/
package com.todoroo.andlib.utility
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import kotlinx.coroutines.runBlocking
import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
import org.tasks.Freeze.Companion.freezeAt
import org.tasks.SuspendFreeze
import org.tasks.SuspendFreeze.Companion.freezeAt
import org.tasks.TestUtilities.withLocale
import org.tasks.date.DateTimeUtils
import org.tasks.extensions.Context.is24HourFormat
import org.tasks.extensions.Context.is24HourOverride
import org.tasks.kmp.formatDayOfWeek
import org.tasks.kmp.org.tasks.time.DateStyle
import org.tasks.kmp.org.tasks.time.TextStyle
import org.tasks.kmp.org.tasks.time.getRelativeDateTime
import org.tasks.kmp.org.tasks.time.getRelativeDay
import org.tasks.kmp.org.tasks.time.getTimeString
import org.tasks.time.DateTime
import java.time.format.FormatStyle
import java.util.Locale
@RunWith(AndroidJUnit4::class)
class DateUtilitiesTest {
@After
fun after() {
DateUtilities.is24HourOverride = null
is24HourOverride = null
}
@Test
fun testGet24HourTime() {
DateUtilities.is24HourOverride = true
assertEquals("09:05", DateUtilities.getTimeString(ApplicationProvider.getApplicationContext(), DateTime(2014, 1, 4, 9, 5, 36)))
assertEquals("13:00", DateUtilities.getTimeString(ApplicationProvider.getApplicationContext(), DateTime(2014, 1, 4, 13, 0, 1)))
is24HourOverride = true
assertEquals("09:05", getTimeString(DateTime(2014, 1, 4, 9, 5, 36).millis, is24HourFormat))
assertEquals("13:00", getTimeString(DateTime(2014, 1, 4, 13, 0, 1).millis, is24HourFormat))
}
@Test
fun testGetTime() {
DateUtilities.is24HourOverride = false
assertEquals("9:05 AM", DateUtilities.getTimeString(ApplicationProvider.getApplicationContext(), DateTime(2014, 1, 4, 9, 5, 36)))
assertEquals("1:05 PM", DateUtilities.getTimeString(ApplicationProvider.getApplicationContext(), DateTime(2014, 1, 4, 13, 5, 36)))
is24HourOverride = false
assertEquals("9:05 AM", getTimeString(DateTime(2014, 1, 4, 9, 5, 36).millis, is24HourFormat))
assertEquals("1:05 PM", getTimeString(DateTime(2014, 1, 4, 13, 5, 36).millis, is24HourFormat))
}
@Test
fun testGetTimeWithNoMinutes() {
DateUtilities.is24HourOverride = false
assertEquals("1 PM", DateUtilities.getTimeString(ApplicationProvider.getApplicationContext(), DateTime(2014, 1, 4, 13, 0, 59))) // derp?
is24HourOverride = false
assertEquals("1 PM", getTimeString(DateTime(2014, 1, 4, 13, 0, 59).millis, is24HourFormat)) // derp?
}
@Test
fun testGetDateStringWithYear() {
assertEquals("Jan 4, 2014", DateUtilities.getDateString(ApplicationProvider.getApplicationContext(), DateTime(2014, 1, 4, 0, 0, 0)))
fun testGetDateStringWithYear() = runBlocking {
assertEquals("Jan 4, 2014", getRelativeDay(DateTime(2014, 1, 4, 0, 0, 0).millis))
}
@Test
fun testGetDateStringHidingYear() {
fun testGetDateStringHidingYear() = runBlocking {
freezeAt(DateTimeUtils.newDate(2014, 2, 1)) {
assertEquals("Jan 1", DateUtilities.getDateString(ApplicationProvider.getApplicationContext(), DateTime(2014, 1, 1)))
assertEquals("Jan 1", getRelativeDay(DateTime(2014, 1, 1).millis))
}
}
@Test
fun testGetDateStringWithDifferentYear() {
fun testGetDateStringWithDifferentYear() = runBlocking {
freezeAt(DateTimeUtils.newDate(2013, 12, 1)) {
assertEquals("Jan 1, 2014", DateUtilities.getDateString(ApplicationProvider.getApplicationContext(), DateTime(2014, 1, 1, 0, 0, 0)))
assertEquals("Jan 1, 2014", getRelativeDay(DateTime(2014, 1, 1, 0, 0, 0).millis))
}
}
@Test
fun testGetWeekdayLongString() {
assertEquals("Sunday", DateUtilities.getWeekday(DateTimeUtils.newDate(2013, 12, 29), Locale.US))
assertEquals("Monday", DateUtilities.getWeekday(DateTimeUtils.newDate(2013, 12, 30), Locale.US))
assertEquals("Tuesday", DateUtilities.getWeekday(DateTimeUtils.newDate(2013, 12, 31), Locale.US))
assertEquals("Wednesday", DateUtilities.getWeekday(DateTimeUtils.newDate(2014, 1, 1), Locale.US))
assertEquals("Thursday", DateUtilities.getWeekday(DateTimeUtils.newDate(2014, 1, 2), Locale.US))
assertEquals("Friday", DateUtilities.getWeekday(DateTimeUtils.newDate(2014, 1, 3), Locale.US))
assertEquals("Saturday", DateUtilities.getWeekday(DateTimeUtils.newDate(2014, 1, 4), Locale.US))
fun testGetWeekdayLongString() = withLocale(Locale.US) {
assertEquals("Sunday", formatDayOfWeek(DateTimeUtils.newDate(2013, 12, 29).millis, TextStyle.FULL))
assertEquals("Monday", formatDayOfWeek(DateTimeUtils.newDate(2013, 12, 30).millis, TextStyle.FULL))
assertEquals("Tuesday", formatDayOfWeek(DateTimeUtils.newDate(2013, 12, 31).millis, TextStyle.FULL))
assertEquals("Wednesday", formatDayOfWeek(DateTimeUtils.newDate(2014, 1, 1).millis, TextStyle.FULL))
assertEquals("Thursday", formatDayOfWeek(DateTimeUtils.newDate(2014, 1, 2).millis, TextStyle.FULL))
assertEquals("Friday", formatDayOfWeek(DateTimeUtils.newDate(2014, 1, 3).millis, TextStyle.FULL))
assertEquals("Saturday", formatDayOfWeek(DateTimeUtils.newDate(2014, 1, 4).millis, TextStyle.FULL))
}
@Test
fun testGetWeekdayShortString() {
assertEquals("Sun", DateUtilities.getWeekdayShort(DateTimeUtils.newDate(2013, 12, 29), Locale.US))
assertEquals("Mon", DateUtilities.getWeekdayShort(DateTimeUtils.newDate(2013, 12, 30), Locale.US))
assertEquals("Tue", DateUtilities.getWeekdayShort(DateTimeUtils.newDate(2013, 12, 31), Locale.US))
assertEquals("Wed", DateUtilities.getWeekdayShort(DateTimeUtils.newDate(2014, 1, 1), Locale.US))
assertEquals("Thu", DateUtilities.getWeekdayShort(DateTimeUtils.newDate(2014, 1, 2), Locale.US))
assertEquals("Fri", DateUtilities.getWeekdayShort(DateTimeUtils.newDate(2014, 1, 3), Locale.US))
assertEquals("Sat", DateUtilities.getWeekdayShort(DateTimeUtils.newDate(2014, 1, 4), Locale.US))
fun testGetWeekdayShortString() = withLocale(Locale.US) {
assertEquals("Sun", formatDayOfWeek(DateTimeUtils.newDate(2013, 12, 29).millis, TextStyle.SHORT))
assertEquals("Mon", formatDayOfWeek(DateTimeUtils.newDate(2013, 12, 30).millis, TextStyle.SHORT))
assertEquals("Tue", formatDayOfWeek(DateTimeUtils.newDate(2013, 12, 31).millis, TextStyle.SHORT))
assertEquals("Wed", formatDayOfWeek(DateTimeUtils.newDate(2014, 1, 1).millis, TextStyle.SHORT))
assertEquals("Thu", formatDayOfWeek(DateTimeUtils.newDate(2014, 1, 2).millis, TextStyle.SHORT))
assertEquals("Fri", formatDayOfWeek(DateTimeUtils.newDate(2014, 1, 3).millis, TextStyle.SHORT))
assertEquals("Sat", formatDayOfWeek(DateTimeUtils.newDate(2014, 1, 4).millis, TextStyle.SHORT))
}
@Test
fun getRelativeFullDate() {
fun getRelativeFullDate() = withLocale(Locale.US) {
freezeAt(DateTime(2018, 1, 1)) {
assertEquals(
"Sunday, January 14",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14).millis,
Locale.US,
FormatStyle.FULL))
"Sunday, January 14",
getRelativeDateTime(DateTime(2018, 1, 14).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun getRelativeFullDateWithYear() {
fun getRelativeFullDateWithYear() = withLocale(Locale.US) {
freezeAt(DateTime(2017, 12, 12)) {
assertEquals(
"Sunday, January 14, 2018",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14).millis,
Locale.US,
FormatStyle.FULL))
"Sunday, January 14, 2018",
getRelativeDateTime(DateTime(2018, 1, 14).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun getRelativeFullDateTime() {
fun getRelativeFullDateTime() = withLocale(Locale.US) {
freezeAt(DateTime(2018, 1, 1)) {
assertMatches(
"Sunday, January 14( at)? 1:43 PM",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14, 13, 43, 1).millis,
Locale.US,
FormatStyle.FULL))
"Sunday, January 14( at)? 1:43 PM",
getRelativeDateTime(DateTime(2018, 1, 14, 13, 43, 1).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
@Ignore("Fails on CI - need to investigate")
fun getRelativeDateTimeWithAlwaysDisplayFullDateOption() {
fun getRelativeDateTimeWithAlwaysDisplayFullDateOption() = withLocale(Locale.US) {
freezeAt(DateTime(2020, 1, 1)) {
assertMatches(
"Thursday, January 2 at 11:50 AM",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2020, 1, 2, 11, 50, 1).millis,
Locale.US,
FormatStyle.FULL,
true,
false
))
"Thursday, January 2 at 11:50 AM",
getRelativeDateTime(DateTime(2020, 1, 2, 11, 50, 1).millis, is24HourFormat, DateStyle.FULL, true, false)
)
}
}
@Test
fun getRelativeFullDateTimeWithYear() {
fun getRelativeFullDateTimeWithYear() = withLocale(Locale.US) {
freezeAt(DateTime(2017, 12, 12)) {
assertMatches(
"Sunday, January 14, 2018( at)? 11:50 AM",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14, 11, 50, 1).millis,
Locale.US,
FormatStyle.FULL))
"Sunday, January 14, 2018( at)? 11:50 AM",
getRelativeDateTime(DateTime(2018, 1, 14, 11, 50, 1).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun getRelativeDayWithAlwaysDisplayFullDateOption() {
fun getRelativeDayWithAlwaysDisplayFullDateOption() = withLocale(Locale.US) {
freezeAt(DateTime(2020, 1, 1)) {
assertEquals(
"Thursday, January 2",
DateUtilities.getRelativeDay(
ApplicationProvider.getApplicationContext(),
DateTime(2020, 1, 2, 11, 50, 1).millis,
Locale.US,
FormatStyle.FULL,
true,
true
)
getRelativeDay(DateTime(2020, 1, 2, 11, 50, 1).millis, DateStyle.FULL, alwaysDisplayFullDate = true, lowercase = true)
)
}
}
@Test
fun getRelativeDayWithoutAlwaysDisplayFullDateOption() {
fun getRelativeDayWithoutAlwaysDisplayFullDateOption() = withLocale(Locale.US) {
freezeAt(DateTime(2020, 1, 1)) {
assertEquals(
"tomorrow",
DateUtilities.getRelativeDay(
ApplicationProvider.getApplicationContext(),
DateTime(2020, 1, 2, 11, 50, 1).millis,
Locale.US,
FormatStyle.FULL,
false,
true
)
getRelativeDay(DateTime(2020, 1, 2, 11, 50, 1).millis, DateStyle.FULL, lowercase = true)
)
}
}
@Test
fun germanDateNoYear() {
fun germanDateNoYear() = withLocale(Locale.GERMAN) {
freezeAt(DateTime(2018, 1, 1)) {
assertEquals(
"Sonntag, 14. Januar",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14).millis,
Locale.GERMAN,
FormatStyle.FULL))
"Sonntag, 14. Januar",
getRelativeDateTime(DateTime(2018, 1, 14).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun germanDateWithYear() {
fun germanDateWithYear() = withLocale(Locale.GERMAN) {
freezeAt(DateTime(2017, 12, 12)) {
assertEquals(
"Sonntag, 14. Januar 2018",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14).millis,
Locale.GERMAN,
FormatStyle.FULL))
"Sonntag, 14. Januar 2018",
getRelativeDateTime(DateTime(2018, 1, 14).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun koreanDateNoYear() {
fun koreanDateNoYear() = withLocale(Locale.KOREAN) {
freezeAt(DateTime(2018, 1, 1)) {
assertEquals(
"1월 14일 일요일",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14).millis,
Locale.KOREAN,
FormatStyle.FULL))
"1월 14일 일요일",
getRelativeDateTime(DateTime(2018, 1, 14).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun koreanDateWithYear() {
fun koreanDateWithYear() = withLocale(Locale.KOREAN) {
freezeAt(DateTime(2017, 12, 12)) {
assertEquals(
"2018년 1월 14일 일요일",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14).millis,
Locale.KOREAN,
FormatStyle.FULL))
"2018년 1월 14일 일요일",
getRelativeDateTime(DateTime(2018, 1, 14).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun japaneseDateNoYear() {
fun japaneseDateNoYear() = withLocale(Locale.JAPANESE) {
freezeAt(DateTime(2018, 1, 1)) {
assertEquals(
"1月14日日曜日",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14).millis,
Locale.JAPANESE,
FormatStyle.FULL))
"1月14日日曜日",
getRelativeDateTime(DateTime(2018, 1, 14).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun japaneseDateWithYear() {
fun japaneseDateWithYear() = withLocale(Locale.JAPANESE) {
freezeAt(DateTime(2017, 12, 12)) {
assertEquals(
"2018年1月14日日曜日",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14).millis,
Locale.JAPANESE,
FormatStyle.FULL))
"2018年1月14日日曜日",
getRelativeDateTime(DateTime(2018, 1, 14).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun chineseDateNoYear() {
fun chineseDateNoYear() = withLocale(Locale.CHINESE) {
freezeAt(DateTime(2018, 1, 1)) {
assertEquals(
"1月14日星期日",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14).millis,
Locale.CHINESE,
FormatStyle.FULL))
"1月14日星期日",
getRelativeDateTime(DateTime(2018, 1, 14).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun chineseDateWithYear() {
freezeAt(DateTime(2017, 12, 12)) {
fun chineseDateWithYear() = withLocale(Locale.CHINESE) {
SuspendFreeze.freezeAt(DateTime(2017, 12, 12)) {
assertEquals(
"2018年1月14日星期日",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14).millis,
Locale.CHINESE,
FormatStyle.FULL))
"2018年1月14日星期日",
getRelativeDateTime(DateTime(2018, 1, 14).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun chineseDateTimeNoYear() {
fun chineseDateTimeNoYear() = withLocale(Locale.CHINESE) {
freezeAt(DateTime(2018, 1, 1)) {
assertEquals(
"1月14日星期日 上午11:53",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14, 11, 53, 1).millis,
Locale.CHINESE,
FormatStyle.FULL))
"1月14日星期日 上午11:53",
getRelativeDateTime(DateTime(2018, 1, 14, 11, 53, 1).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun chineseDateTimeWithYear() {
fun chineseDateTimeWithYear() = withLocale(Locale.CHINESE) {
freezeAt(DateTime(2017, 12, 12)) {
assertEquals(
"2018年1月14日星期日 下午1:45",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14, 13, 45, 1).millis,
Locale.CHINESE,
FormatStyle.FULL))
"2018年1月14日星期日 下午1:45",
getRelativeDateTime(DateTime(2018, 1, 14, 13, 45, 1).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun frenchDateTimeWithYear() {
fun frenchDateTimeWithYear() = withLocale(Locale.FRENCH) {
freezeAt(DateTime(2017, 12, 12)) {
assertMatches(
"dimanche 14 janvier 2018( à)? 13:45",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14, 13, 45, 1).millis,
Locale.FRENCH,
FormatStyle.FULL))
"dimanche 14 janvier 2018( à)? 13:45",
getRelativeDateTime(DateTime(2018, 1, 14, 13, 45, 1).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun indiaDateTimeWithYear() {
fun indiaDateTimeWithYear() = withLocale(Locale.forLanguageTag("hi-IN")) {
freezeAt(DateTime(2017, 12, 12)) {
assertMatches(
"रविवार, 14 जनवरी 2018( को)? 1:45 pm",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14, 13, 45, 1).millis,
Locale.forLanguageTag("hi-IN"),
FormatStyle.FULL))
"रविवार, 14 जनवरी 2018( को)? 1:45 pm",
getRelativeDateTime(DateTime(2018, 1, 14, 13, 45, 1).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun russiaDateTimeNoYear() {
fun russiaDateTimeNoYear() = withLocale(Locale.forLanguageTag("ru")) {
freezeAt(DateTime(2018, 12, 12)) {
assertMatches(
"воскресенье, 14 января,? 13:45",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14, 13, 45, 1).millis,
Locale.forLanguageTag("ru"),
FormatStyle.FULL))
"воскресенье, 14 января,? 13:45",
getRelativeDateTime(DateTime(2018, 1, 14, 13, 45, 1).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun russiaDateTimeWithYear() {
fun russiaDateTimeWithYear() = withLocale(Locale.forLanguageTag("ru")) {
freezeAt(DateTime(2017, 12, 12)) {
assertMatches(
"воскресенье, 14 января 2018 г.,? 13:45",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14, 13, 45, 1).millis,
Locale.forLanguageTag("ru"),
FormatStyle.FULL))
"воскресенье, 14 января 2018 г.,? 13:45",
getRelativeDateTime(DateTime(2018, 1, 14, 13, 45, 1).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun brazilDateTimeNoYear() {
fun brazilDateTimeNoYear() = withLocale(Locale.forLanguageTag("pt-br")) {
freezeAt(DateTime(2018, 12, 12)) {
assertEquals(
"domingo, 14 de janeiro 13:45",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14, 13, 45, 1).millis,
Locale.forLanguageTag("pt-br"),
FormatStyle.FULL))
"domingo, 14 de janeiro 13:45",
getRelativeDateTime(DateTime(2018, 1, 14, 13, 45, 1).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun brazilDateTimeWithYear() {
fun brazilDateTimeWithYear() = withLocale(Locale.forLanguageTag("pt-br")) {
freezeAt(DateTime(2017, 12, 12)) {
assertEquals(
"domingo, 14 de janeiro de 2018 13:45",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14, 13, 45, 1).millis,
Locale.forLanguageTag("pt-br"),
FormatStyle.FULL))
"domingo, 14 de janeiro de 2018 13:45",
getRelativeDateTime(DateTime(2018, 1, 14, 13, 45, 1).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun spainDateTimeNoYear() {
fun spainDateTimeNoYear() = withLocale(Locale.forLanguageTag("es")) {
freezeAt(DateTime(2018, 12, 12)) {
assertMatches(
"domingo, 14 de enero,? 13:45",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14, 13, 45, 1).millis,
Locale.forLanguageTag("es"),
FormatStyle.FULL))
"domingo, 14 de enero,? 13:45",
getRelativeDateTime(DateTime(2018, 1, 14, 13, 45, 1).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun spainDateTimeWithYear() {
fun spainDateTimeWithYear() = withLocale(Locale.forLanguageTag("es")) {
freezeAt(DateTime(2017, 12, 12)) {
assertMatches(
"domingo, 14 de enero de 2018,? 13:45",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14, 13, 45, 1).millis,
Locale.forLanguageTag("es"),
FormatStyle.FULL))
"domingo, 14 de enero de 2018,? 13:45",
getRelativeDateTime(DateTime(2018, 1, 14, 13, 45, 1).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun hebrewDateTimeNoYear() {
fun hebrewDateTimeNoYear() = withLocale(Locale.forLanguageTag("he")) {
freezeAt(DateTime(2018, 12, 12)) {
assertMatches(
"יום ראשון, 14 בינואר( בשעה)? 13:45",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14, 13, 45, 1).millis,
Locale.forLanguageTag("iw"),
FormatStyle.FULL))
"יום ראשון, 14 בינואר( בשעה)? 13:45",
getRelativeDateTime(DateTime(2018, 1, 14, 13, 45, 1).millis, is24HourFormat, DateStyle.FULL)
)
}
}
@Test
fun hebrewDateTimeWithYear() {
fun hebrewDateTimeWithYear() = withLocale(Locale.forLanguageTag("he")) {
freezeAt(DateTime(2017, 12, 12)) {
assertMatches(
"יום ראשון, 14 בינואר 2018( בשעה)? 13:45",
DateUtilities.getRelativeDateTime(
ApplicationProvider.getApplicationContext(),
DateTime(2018, 1, 14, 13, 45, 1).millis,
Locale.forLanguageTag("iw"),
FormatStyle.FULL))
"יום ראשון, 14 בינואר 2018( בשעה)? 13:45",
getRelativeDateTime(DateTime(2018, 1, 14, 13, 45, 1).millis, is24HourFormat, DateStyle.FULL)
)
}
}
private fun assertMatches(regex: String, actual: String) =
assertTrue("expected=$regex\nactual=$actual", actual.matches(Regex(regex)))
private val is24HourFormat: Boolean
get() = InstrumentationRegistry.getInstrumentation().targetContext.is24HourFormat
}

@ -1,16 +1,17 @@
package com.todoroo.andlib.utility
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import kotlinx.coroutines.runBlocking
import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.tasks.Freeze
import org.tasks.kmp.org.tasks.time.DateStyle
import org.tasks.kmp.org.tasks.time.getRelativeDay
import org.tasks.time.DateTime
import java.time.format.FormatStyle
import java.util.*
import java.util.Locale
@RunWith(AndroidJUnit4::class)
class RelativeDayTest {
@ -67,12 +68,12 @@ class RelativeDayTest {
checkRelativeDay(DateTime().plusDays(7), "January 7, 2014", "Jan 7, 2014")
}
private fun checkRelativeDay(now: DateTime, full: String, abbreviated: String) {
private fun checkRelativeDay(now: DateTime, full: String, abbreviated: String) = runBlocking {
assertEquals(
full,
DateUtilities.getRelativeDay(ApplicationProvider.getApplicationContext(), now.millis, Locale.US, FormatStyle.LONG))
getRelativeDay(now.millis, DateStyle.LONG))
assertEquals(
abbreviated,
DateUtilities.getRelativeDay(ApplicationProvider.getApplicationContext(), now.millis, Locale.US, FormatStyle.MEDIUM))
getRelativeDay(now.millis))
}
}

@ -4,11 +4,11 @@ import android.content.Intent
import android.content.Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
import android.content.Intent.FLAG_ACTIVITY_NEW_TASK
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.todoroo.astrid.activity.MainActivity.Companion.isFromHistory
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
import org.tasks.extensions.isFromHistory
@RunWith(AndroidJUnit4::class)
class MainActivityTest {

@ -2,12 +2,9 @@ package com.todoroo.astrid.adapter
import com.natpryce.makeiteasy.MakeItEasy.with
import com.natpryce.makeiteasy.PropertyValue
import org.tasks.filters.CaldavFilter
import com.todoroo.astrid.dao.TaskDao
import org.tasks.data.entity.Task
import com.todoroo.astrid.service.TaskMover
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
@ -15,13 +12,16 @@ import org.junit.Before
import org.junit.Test
import org.tasks.LocalBroadcastManager
import org.tasks.R
import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.TaskContainer
import org.tasks.data.TaskListQuery.getQuery
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_CALDAV
import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.entity.Task
import org.tasks.filters.CaldavFilter
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.makers.CaldavTaskMaker.CALENDAR
import org.tasks.makers.CaldavTaskMaker.REMOTE_PARENT
import org.tasks.makers.CaldavTaskMaker.TASK
@ -33,7 +33,6 @@ import org.tasks.preferences.Preferences
import org.tasks.time.DateTime
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class CaldavManualSortTaskAdapterTest : InjectingTestCase() {
@Inject lateinit var googleTaskDao: GoogleTaskDao
@ -45,7 +44,10 @@ class CaldavManualSortTaskAdapterTest : InjectingTestCase() {
private lateinit var adapter: CaldavManualSortTaskAdapter
private val tasks = ArrayList<TaskContainer>()
private val filter = CaldavFilter(CaldavCalendar(name = "calendar", uuid = "1234"))
private val filter = CaldavFilter(
calendar = CaldavCalendar(name = "calendar", uuid = "1234"),
account = CaldavAccount(accountType = TYPE_CALDAV)
)
private val dataSource = object : TaskAdapterDataSource {
override fun getItem(position: Int) = tasks[position]
@ -218,7 +220,7 @@ class CaldavManualSortTaskAdapterTest : InjectingTestCase() {
}
private fun move(from: Int, to: Int, indent: Int = 0) = runBlocking {
tasks.addAll(taskDao.fetchTasks { getQuery(preferences, filter) })
tasks.addAll(taskDao.fetchTasks(getQuery(preferences, filter)))
val adjustedTo = if (from < to) to + 1 else to // match DragAndDropRecyclerAdapter behavior
adapter.moved(from, adjustedTo, indent)
}

@ -5,7 +5,6 @@ import com.natpryce.makeiteasy.PropertyValue
import com.todoroo.astrid.dao.TaskDao
import com.todoroo.astrid.service.TaskMover
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.*
import org.junit.Before
@ -16,12 +15,10 @@ import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.entity.CaldavTask
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.makers.TaskContainerMaker.PARENT
import org.tasks.makers.TaskContainerMaker.newTaskContainer
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class CaldavTaskAdapterTest : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao

@ -2,11 +2,9 @@ package com.todoroo.astrid.adapter
import com.natpryce.makeiteasy.MakeItEasy.with
import com.natpryce.makeiteasy.PropertyValue
import org.tasks.filters.GtasksFilter
import com.todoroo.astrid.dao.TaskDao
import com.todoroo.astrid.service.TaskMover
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Before
@ -17,10 +15,12 @@ import org.tasks.data.TaskContainer
import org.tasks.data.TaskListQuery.getQuery
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS
import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.entity.Task
import org.tasks.filters.CaldavFilter
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.makers.CaldavTaskMaker.CALENDAR
import org.tasks.makers.CaldavTaskMaker.TASK
import org.tasks.makers.CaldavTaskMaker.newCaldavTask
@ -29,7 +29,6 @@ import org.tasks.makers.TaskMaker.newTask
import org.tasks.preferences.Preferences
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class GoogleTaskManualSortAdapterTest : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao
@ -41,7 +40,10 @@ class GoogleTaskManualSortAdapterTest : InjectingTestCase() {
private lateinit var adapter: GoogleTaskManualSortAdapter
private val tasks = ArrayList<TaskContainer>()
private val filter = GtasksFilter(CaldavCalendar(uuid = "1234"))
private val filter = CaldavFilter(
calendar = CaldavCalendar(uuid = "1234"),
account = CaldavAccount(accountType = TYPE_GOOGLE_TASKS)
)
private val dataSource = object : TaskAdapterDataSource {
override fun getItem(position: Int) = tasks[position]
@ -421,7 +423,7 @@ class GoogleTaskManualSortAdapterTest : InjectingTestCase() {
}
private fun move(from: Int, to: Int, indent: Int = 0) = runBlocking {
tasks.addAll(taskDao.fetchTasks { getQuery(preferences, filter) })
tasks.addAll(taskDao.fetchTasks(getQuery(preferences, filter)))
val adjustedTo = if (from < to) to + 1 else to
adapter.moved(from, adjustedTo, indent)
}

@ -3,53 +3,32 @@ package com.todoroo.astrid.adapter
import com.natpryce.makeiteasy.MakeItEasy.with
import com.natpryce.makeiteasy.PropertyValue
import com.todoroo.astrid.dao.TaskDao
import com.todoroo.astrid.service.TaskMover
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.tasks.LocalBroadcastManager
import org.tasks.data.TaskContainer
import org.tasks.data.TaskListQuery.getQuery
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.entity.Task
import org.tasks.filters.MyTasksFilter
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.makers.TaskMaker.PARENT
import org.tasks.makers.TaskMaker.newTask
import org.tasks.preferences.Preferences
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class OfflineSubtaskTest : InjectingTestCase() {
@Inject lateinit var googleTaskDao: GoogleTaskDao
@Inject lateinit var caldavDao: CaldavDao
@Inject lateinit var taskDao: TaskDao
@Inject lateinit var preferences: Preferences
@Inject lateinit var localBroadcastManager: LocalBroadcastManager
@Inject lateinit var taskMover: TaskMover
private lateinit var adapter: TaskAdapter
private val tasks = ArrayList<TaskContainer>()
private val filter = runBlocking { MyTasksFilter.create() }
private val dataSource = object : TaskAdapterDataSource {
override fun getItem(position: Int) = tasks[position]
override fun getTaskCount() = tasks.size
}
@Before
override fun setUp() {
super.setUp()
preferences.clear()
tasks.clear()
adapter = TaskAdapter(false, googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover)
adapter.setDataSource(dataSource)
}
@Test
@ -57,7 +36,7 @@ class OfflineSubtaskTest : InjectingTestCase() {
val parent = addTask()
val child = addTask(with(PARENT, parent))
query()
val tasks = query()
assertEquals(child, tasks[1].id)
assertEquals(parent, tasks[1].parent)
@ -70,20 +49,81 @@ class OfflineSubtaskTest : InjectingTestCase() {
val parent = addTask(with(PARENT, grandparent))
val child = addTask(with(PARENT, parent))
query()
val tasks = query()
assertEquals(child, tasks[2].id)
assertEquals(parent, tasks[2].parent)
assertEquals(2, tasks[2].indent)
}
@Test
fun parentWithOneChildHasChildrenCountOne() {
val parent = addTask()
addTask(with(PARENT, parent))
val tasks = query()
val parentTask = tasks.find { it.id == parent }!!
assertEquals(1, parentTask.children)
}
@Test
fun parentWithMultipleChildrenHasCorrectCount() {
val parent = addTask()
addTask(with(PARENT, parent))
addTask(with(PARENT, parent))
addTask(with(PARENT, parent))
val tasks = query()
val parentTask = tasks.find { it.id == parent }!!
assertEquals(3, parentTask.children)
}
@Test
fun grandparentCountsAllDescendants() {
val grandparent = addTask()
val parent = addTask(with(PARENT, grandparent))
addTask(with(PARENT, parent))
val tasks = query()
val grandparentTask = tasks.find { it.id == grandparent }!!
assertEquals(2, grandparentTask.children)
}
@Test
fun leafTaskHasNoChildren() {
val parent = addTask()
val child = addTask(with(PARENT, parent))
val tasks = query()
val childTask = tasks.find { it.id == child }!!
assertEquals(0, childTask.children)
}
@Test
fun deepHierarchyCountsAllDescendants() {
val root = addTask()
val level1 = addTask(with(PARENT, root))
val level2 = addTask(with(PARENT, level1))
val level3 = addTask(with(PARENT, level2))
addTask(with(PARENT, level3))
val tasks = query()
val rootTask = tasks.find { it.id == root }!!
assertEquals(4, rootTask.children)
}
private fun addTask(vararg properties: PropertyValue<in Task?, *>): Long = runBlocking {
val task = newTask(*properties)
taskDao.createNew(task)
task.id
}
private fun query() = runBlocking {
tasks.addAll(taskDao.fetchTasks { getQuery(preferences, filter) })
private fun query(): List<TaskContainer> = runBlocking {
taskDao.fetchTasks(getQuery(preferences, filter))
}
}
}

@ -4,25 +4,21 @@ import com.natpryce.makeiteasy.MakeItEasy.with
import com.natpryce.makeiteasy.PropertyValue
import com.todoroo.astrid.dao.TaskDao
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Ignore
import org.junit.Test
import org.tasks.data.TaskListQuery.getQuery
import org.tasks.data.entity.Task
import org.tasks.date.DateTimeUtils.newDateTime
import org.tasks.filters.TodayFilter
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.makers.TaskMaker.DUE_DATE
import org.tasks.makers.TaskMaker.PARENT
import org.tasks.makers.TaskMaker.newTask
import org.tasks.preferences.Preferences
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class RecursiveLoopTest : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao
@ -35,7 +31,6 @@ class RecursiveLoopTest : InjectingTestCase() {
}
@Test
@Ignore("infinite loop")
fun handleSelfLoop() = runBlocking {
addTask(with(DUE_DATE, newDateTime()), with(PARENT, 1L))
@ -46,7 +41,6 @@ class RecursiveLoopTest : InjectingTestCase() {
}
@Test
@Ignore("infinite loop")
fun handleSingleLevelLoop() = runBlocking {
val parent = addTask(with(DUE_DATE, newDateTime()))
val child = addTask(with(PARENT, parent))
@ -60,7 +54,6 @@ class RecursiveLoopTest : InjectingTestCase() {
}
@Test
@Ignore("infinite loop")
fun handleMultiLevelLoop() = runBlocking {
val parent = addTask(with(DUE_DATE, newDateTime()))
val child = addTask(with(PARENT, parent))
@ -75,10 +68,21 @@ class RecursiveLoopTest : InjectingTestCase() {
assertEquals(grandchild, tasks[2].id)
}
private suspend fun getTasks() = taskDao.fetchTasks {
getQuery(preferences, TodayFilter.create())
@Test
fun descendantsRecursiveLoopBothMatchFilter() = runBlocking {
val parent = addTask(with(DUE_DATE, newDateTime()))
val child = addTask(with(DUE_DATE, newDateTime()), with(PARENT, parent))
taskDao.setParent(child, listOf(parent))
val tasks = getTasks()
assertEquals(2, tasks.size)
}
private suspend fun getTasks() = taskDao.fetchTasks(
getQuery(preferences, TodayFilter.create())
)
private suspend fun addTask(vararg properties: PropertyValue<in Task?, *>): Long {
val task = newTask(*properties)
taskDao.createNew(task)

@ -1,7 +1,6 @@
package com.todoroo.astrid.alarms
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Test
@ -12,13 +11,11 @@ import org.tasks.data.entity.Alarm
import org.tasks.data.entity.Notification
import org.tasks.data.entity.Task
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.time.DateTime
import org.tasks.time.DateTimeUtils2
import java.util.concurrent.TimeUnit
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class AlarmJobServiceTest : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao

@ -8,16 +8,13 @@ package com.todoroo.astrid.dao
import org.tasks.data.entity.Task
import com.todoroo.astrid.service.TaskDeleter
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.*
import org.junit.Test
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.time.DateTimeUtils2.currentTimeMillis
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class TaskDaoTests : InjectingTestCase() {

@ -0,0 +1,142 @@
package com.todoroo.astrid.gcal
import android.Manifest
import android.content.ContentUris
import android.content.ContentValues
import android.content.Context
import android.provider.CalendarContract
import android.provider.CalendarContract.Calendars
import android.provider.CalendarContract.Events
import androidx.core.net.toUri
import androidx.test.core.app.ApplicationProvider
import androidx.test.rule.GrantPermissionRule
import dagger.hilt.android.testing.HiltAndroidTest
import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.tasks.TestUtilities.withTZ
import org.tasks.data.entity.Task
import org.tasks.injection.InjectingTestCase
import org.tasks.time.DateTime
import timber.log.Timber
import javax.inject.Inject
@HiltAndroidTest
class GCalHelperTest : InjectingTestCase() {
@get:Rule
val grantPermissionRule: GrantPermissionRule = GrantPermissionRule.grant(
Manifest.permission.READ_CALENDAR,
Manifest.permission.WRITE_CALENDAR
)
@Inject lateinit var gcalHelper: GCalHelper
private var testCalendarId: Long = -1
@Before
override fun setUp() {
super.setUp()
testCalendarId = createTestCalendar()
}
@After
fun tearDown() {
if (testCalendarId > 0) {
try {
val context = ApplicationProvider.getApplicationContext<Context>()
context.contentResolver.delete(
ContentUris.withAppendedId(Calendars.CONTENT_URI, testCalendarId),
null,
null
)
} catch (e: Exception) {
Timber.e(e)
}
}
}
@Test fun allDayEventInNewYork() = assertAllDayEvent("America/New_York") // UTC-5
@Test fun allDayEventInBerlin() = assertAllDayEvent("Europe/Berlin") // UTC+1
@Test fun allDayEventInAuckland() = assertAllDayEvent("Pacific/Auckland") // UTC+13
@Test fun allDayEventInTokyo() = assertAllDayEvent("Asia/Tokyo") // UTC+9
@Test fun allDayEventInHonolulu() = assertAllDayEvent("Pacific/Honolulu") // UTC-10
@Test fun allDayEventInChatham() = assertAllDayEvent("Pacific/Chatham") // UTC+13:45
private fun assertAllDayEvent(timezone: String) = withTZ(timezone) {
val task = Task(dueDate = DateTime(2024, 12, 20).millis)
val eventUri = gcalHelper.createTaskEvent(task, testCalendarId.toString())
?: throw RuntimeException("Event not created")
val event = queryEvent(eventUri.toString()) ?: throw RuntimeException("Event not found")
assertEquals(
"DTSTART should be Dec 20 00:00 UTC",
DateTime(2024, 12, 20, timeZone = DateTime.UTC).millis,
event.dtStart
)
assertEquals(
"DTEND should be Dec 21 00:00 UTC",
DateTime(2024, 12, 21, timeZone = DateTime.UTC).millis,
event.dtEnd
)
}
private fun createTestCalendar(): Long {
val context = ApplicationProvider.getApplicationContext<Context>()
val values = ContentValues().apply {
put(Calendars.ACCOUNT_NAME, "test@test.com")
put(Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL)
put(Calendars.NAME, "Test Calendar")
put(Calendars.CALENDAR_DISPLAY_NAME, "Test Calendar")
put(Calendars.CALENDAR_COLOR, 0xFF0000)
put(Calendars.CALENDAR_ACCESS_LEVEL, Calendars.CAL_ACCESS_OWNER)
put(Calendars.OWNER_ACCOUNT, "test@test.com")
put(Calendars.VISIBLE, 1)
put(Calendars.SYNC_EVENTS, 1)
}
val uri = Calendars.CONTENT_URI.buildUpon()
.appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
.appendQueryParameter(Calendars.ACCOUNT_NAME, "test@test.com")
.appendQueryParameter(Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL)
.build()
val calendarUri = context.contentResolver.insert(uri, values)
return ContentUris.parseId(calendarUri!!)
}
private fun queryEvent(eventUri: String): CalendarEvent? {
val context = ApplicationProvider.getApplicationContext<Context>()
val cursor = context.contentResolver.query(
eventUri.toUri(),
arrayOf(
Events.DTSTART,
Events.DTEND,
Events.ALL_DAY,
Events.EVENT_TIMEZONE
),
null,
null,
null
)
return cursor?.use {
if (it.moveToFirst()) {
CalendarEvent(
dtStart = it.getLong(0),
dtEnd = it.getLong(1),
allDay = it.getInt(2) == 1,
timezone = it.getString(3)
)
} else null
}
}
private data class CalendarEvent(
val dtStart: Long,
val dtEnd: Long,
val allDay: Boolean,
val timezone: String?
)
}

@ -4,7 +4,6 @@ import com.google.api.services.tasks.model.TaskList
import com.natpryce.makeiteasy.MakeItEasy.with
import com.todoroo.astrid.service.TaskDeleter
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
@ -12,21 +11,17 @@ import org.junit.Before
import org.junit.Test
import org.tasks.LocalBroadcastManager
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskListDao
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavCalendar
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.makers.RemoteGtaskListMaker
import org.tasks.makers.RemoteGtaskListMaker.newRemoteList
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class GtasksListServiceTest : InjectingTestCase() {
@Inject lateinit var taskDeleter: TaskDeleter
@Inject lateinit var localBroadcastManager: LocalBroadcastManager
@Inject lateinit var googleTaskListDao: GoogleTaskListDao
@Inject lateinit var caldavDao: CaldavDao
private lateinit var gtasksListService: GtasksListService
@ -34,7 +29,7 @@ class GtasksListServiceTest : InjectingTestCase() {
@Before
override fun setUp() {
super.setUp()
gtasksListService = GtasksListService(googleTaskListDao, taskDeleter, localBroadcastManager)
gtasksListService = GtasksListService(caldavDao, taskDeleter, localBroadcastManager)
}
@Test
@ -44,48 +39,47 @@ class GtasksListServiceTest : InjectingTestCase() {
with(RemoteGtaskListMaker.REMOTE_ID, "1"), with(RemoteGtaskListMaker.NAME, "Default")))
assertEquals(
CaldavCalendar(id = 1, account = "account", uuid = "1", name = "Default"),
googleTaskListDao.getById(1L)
caldavDao.getCalendarById(1L)
)
}
@Test
fun testGetListByRemoteId() = runBlocking {
val list = CaldavCalendar(uuid = "1")
list.id = googleTaskListDao.insertOrReplace(list)
assertEquals(list, googleTaskListDao.getByRemoteId("1"))
caldavDao.insert(list)
assertEquals(list, caldavDao.getCalendarByUuid("1"))
}
@Test
fun testGetListReturnsNullWhenNotFound() = runBlocking {
assertNull(googleTaskListDao.getByRemoteId("1"))
assertNull(caldavDao.getCalendarByUuid("1"))
}
@Test
fun testDeleteMissingList() = runBlocking {
googleTaskListDao.insertOrReplace(CaldavCalendar(id = 1, account = "account", uuid = "1"))
caldavDao.insert(CaldavCalendar(account = "account", uuid = "1"))
val taskList = newRemoteList(with(RemoteGtaskListMaker.REMOTE_ID, "2"))
setLists(taskList)
assertEquals(
listOf(CaldavCalendar(id = 2, account = "account", uuid = "2", name = "Default")),
googleTaskListDao.getLists("account")
caldavDao.getCalendarsByAccount("account")
)
}
@Test
fun testUpdateListName() = runBlocking {
googleTaskListDao.insertOrReplace(
CaldavCalendar(id = 1, uuid = "1", name = "oldName", account = "account")
)
val calendar = CaldavCalendar(uuid = "1", name = "oldName", account = "account")
caldavDao.insert(calendar)
setLists(
newRemoteList(
with(RemoteGtaskListMaker.REMOTE_ID, "1"), with(RemoteGtaskListMaker.NAME, "newName")))
assertEquals("newName", googleTaskListDao.getById(1)!!.name)
assertEquals("newName", caldavDao.getCalendarById(calendar.id)!!.name)
}
@Test
fun testNewListLastSyncIsZero() = runBlocking {
setLists(TaskList().setId("1"))
assertEquals(0L, googleTaskListDao.getByRemoteId("1")!!.lastSync)
assertEquals(0L, caldavDao.getCalendarByUuid("1")!!.lastSync)
}
private suspend fun setLists(vararg list: TaskList) {

@ -3,17 +3,14 @@ package com.todoroo.astrid.model
import com.todoroo.astrid.dao.TaskDao
import org.tasks.data.entity.Task
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Test
import org.tasks.SuspendFreeze.Companion.freezeClock
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.time.DateTimeUtils2.currentTimeMillis
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class TaskTest : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao

@ -3,18 +3,15 @@ package com.todoroo.astrid.repeats
import org.tasks.data.entity.Task
import com.todoroo.astrid.service.TaskCompleter
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
import org.tasks.data.dao.TaskDao
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.time.DateTimeUtils2.currentTimeMillis
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class RepeatWithSubtasksTests : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao

@ -8,17 +8,14 @@ package com.todoroo.astrid.service
import org.tasks.data.entity.Task
import com.todoroo.astrid.utility.TitleParser
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Test
import org.tasks.data.dao.TagDataDao
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import java.util.*
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class QuickAddMarkupTest : InjectingTestCase() {
private val tags = ArrayList<String>()

@ -8,7 +8,6 @@ import org.tasks.data.entity.Task.Companion.DUE_DATE
import org.tasks.data.entity.Task.Companion.HIDE_UNTIL
import org.tasks.data.entity.Task.Companion.URGENCY_SPECIFIC_DAY
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Test
@ -16,12 +15,10 @@ import org.tasks.R
import org.tasks.SuspendFreeze.Companion.freezeAt
import org.tasks.data.createDueDate
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.preferences.Preferences
import org.tasks.time.DateTime
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class TaskCreatorTest : InjectingTestCase() {
@Inject lateinit var preferences: Preferences

@ -2,17 +2,14 @@ package com.todoroo.astrid.service
import org.tasks.data.entity.Task
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
import org.tasks.data.dao.TaskDao
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class TaskDeleterTest : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao

@ -1,11 +1,8 @@
package com.todoroo.astrid.service
import com.natpryce.makeiteasy.MakeItEasy.with
import org.tasks.filters.CaldavFilter
import org.tasks.filters.GtasksFilter
import com.todoroo.astrid.dao.TaskDao
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
@ -17,9 +14,8 @@ import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_CALDAV
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS
import org.tasks.data.entity.CaldavCalendar
import org.tasks.filters.CaldavFilter
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.jobs.WorkManager
import org.tasks.makers.CaldavTaskMaker.CALENDAR
import org.tasks.makers.CaldavTaskMaker.REMOTE_ID
import org.tasks.makers.CaldavTaskMaker.REMOTE_PARENT
@ -30,13 +26,10 @@ import org.tasks.makers.TaskMaker.PARENT
import org.tasks.makers.TaskMaker.newTask
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class TaskMoverTest : InjectingTestCase() {
@Inject lateinit var taskDaoAsync: TaskDao
@Inject lateinit var taskDao: TaskDao
@Inject lateinit var googleTaskDao: GoogleTaskDao
@Inject lateinit var workManager: WorkManager
@Inject lateinit var caldavDao: CaldavDao
@Inject lateinit var taskMover: TaskMover
@ -63,7 +56,7 @@ class TaskMoverTest : InjectingTestCase() {
createTasks(1)
googleTaskDao.insert(newCaldavTask(with(TASK, 1), with(CALENDAR, "1")))
moveToGoogleTasks("2", 1)
val deleted = googleTaskDao.getDeletedByTaskId(1)
val deleted = googleTaskDao.getDeletedByTaskId(1, "account1")
assertEquals(1, deleted.size.toLong())
assertEquals(1, deleted[0].task)
assertTrue(deleted[0].deleted > 0)
@ -78,7 +71,7 @@ class TaskMoverTest : InjectingTestCase() {
googleTaskDao.insert(newCaldavTask(with(TASK, 1), with(CALENDAR, "1")))
googleTaskDao.insert(newCaldavTask(with(TASK, 2), with(CALENDAR, "1")))
moveToGoogleTasks("2", 1)
val deleted = googleTaskDao.getDeletedByTaskId(2)
val deleted = googleTaskDao.getDeletedByTaskId(2, "account1")
assertEquals(1, deleted.size.toLong())
assertEquals(2, deleted[0].task)
assertTrue(deleted[0].deleted > 0)
@ -139,9 +132,9 @@ class TaskMoverTest : InjectingTestCase() {
createSubtask(2, 1)
googleTaskDao.insert(newCaldavTask(with(TASK, 1), with(CALENDAR, "1")))
googleTaskDao.insert(newCaldavTask(with(TASK, 2), with(CALENDAR, "1")))
moveToCaldavList("1", 1)
moveToCaldavList("2", 1)
val task = caldavDao.getTask(2)
assertEquals("1", task!!.calendar)
assertEquals("2", task!!.calendar)
assertEquals(1L, taskDao.fetch(2)?.parent)
}
@ -188,7 +181,7 @@ class TaskMoverTest : InjectingTestCase() {
with(TASK, 3L),
with(CALENDAR, "1"),
with(REMOTE_PARENT, "b"))))
moveToGoogleTasks("1", 1)
moveToGoogleTasks("2", 1)
val task = taskDao.fetch(3L)
assertEquals(1L, task?.parent)
}
@ -256,7 +249,7 @@ class TaskMoverTest : InjectingTestCase() {
createTasks(1)
googleTaskDao.insert(newCaldavTask(with(TASK, 1), with(CALENDAR, "1")))
moveToGoogleTasks("1", 1)
assertTrue(googleTaskDao.getDeletedByTaskId(1).isEmpty())
assertTrue(googleTaskDao.getDeletedByTaskId(1, "account1").isEmpty())
assertEquals(1, googleTaskDao.getAllByTaskId(1).size.toLong())
}
@ -306,11 +299,23 @@ class TaskMoverTest : InjectingTestCase() {
}
private suspend fun moveToGoogleTasks(list: String, vararg tasks: Long) {
taskMover.move(tasks.toList(), GtasksFilter(CaldavCalendar(uuid = list)))
taskMover.move(
tasks.toList(),
CaldavFilter(
calendar = CaldavCalendar(uuid = list),
account = CaldavAccount(accountType = TYPE_GOOGLE_TASKS)
)
)
}
private suspend fun moveToCaldavList(calendar: String, vararg tasks: Long) {
taskMover.move(tasks.toList(), CaldavFilter(CaldavCalendar(name = "", uuid = calendar)))
taskMover.move(
tasks.toList(),
CaldavFilter(
CaldavCalendar(name = "", uuid = calendar),
account = CaldavAccount(accountType = TYPE_CALDAV)
)
)
}
private suspend fun setAccountType(account: String, type: Int) {

@ -5,37 +5,45 @@
*/
package com.todoroo.astrid.service
import org.tasks.data.entity.Task
import com.todoroo.astrid.utility.TitleParser
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import net.fortuna.ical4j.model.Recur.Frequency.*
import org.junit.Assert.*
import net.fortuna.ical4j.model.Recur.Frequency.DAILY
import net.fortuna.ical4j.model.Recur.Frequency.MONTHLY
import net.fortuna.ical4j.model.Recur.Frequency.WEEKLY
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNotSame
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Ignore
import org.junit.Test
import org.tasks.R
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.TagDataDao
import org.tasks.data.entity.Task
import org.tasks.data.newLocalAccount
import org.tasks.date.DateTimeUtils
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.preferences.Preferences
import org.tasks.repeats.RecurrenceUtils.newRecur
import java.util.*
import java.util.Calendar
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class TitleParserTest : InjectingTestCase() {
@Inject lateinit var tagDataDao: TagDataDao
@Inject lateinit var preferences: Preferences
@Inject lateinit var taskCreator: TaskCreator
@Inject lateinit var caldavDao: CaldavDao
@Before
override fun setUp() {
super.setUp()
preferences.setStringFromInteger(R.string.p_default_urgency_key, 0)
runBlocking {
super.setUp()
preferences.setStringFromInteger(R.string.p_default_urgency_key, 0)
caldavDao.newLocalAccount()
}
}
/**

@ -4,7 +4,6 @@ package com.todoroo.astrid.service
import com.natpryce.makeiteasy.MakeItEasy.with
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Before
import org.junit.Test
@ -16,7 +15,6 @@ import org.tasks.data.dao.TaskDao
import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.entity.Task
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.makers.CaldavTaskMaker.CALENDAR
import org.tasks.makers.CaldavTaskMaker.REMOTE_ID
import org.tasks.makers.CaldavTaskMaker.TASK
@ -29,7 +27,6 @@ import org.tasks.opentasks.TestOpenTaskDao
import org.tasks.time.DateTime
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class Upgrade_11_3_Test : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao

@ -2,15 +2,12 @@ package com.todoroo.astrid.subtasks
import org.tasks.data.entity.Task
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.tasks.data.entity.TaskListMetadata
import org.tasks.injection.ProductionModule
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class SubtasksHelperTest : SubtasksTestCase() {
@Before

@ -2,14 +2,11 @@ package com.todoroo.astrid.subtasks
import org.tasks.data.entity.Task
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Before
import org.junit.Test
import org.tasks.data.entity.TaskListMetadata
import org.tasks.injection.ProductionModule
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class SubtasksMovingTest : SubtasksTestCase() {
private lateinit var A: Task

@ -2,13 +2,10 @@ package com.todoroo.astrid.sync
import org.tasks.data.entity.Task
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertNotEquals
import org.junit.Test
import org.tasks.injection.ProductionModule
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class SyncModelTest : NewSyncTestCase() {

@ -1,14 +1,11 @@
package org.tasks.caldav
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Test
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class CaldavClientTest : InjectingTestCase() {

@ -3,14 +3,12 @@ package org.tasks.caldav
import com.natpryce.makeiteasy.MakeItEasy.with
import org.tasks.data.UUIDHelper
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavCalendar
import org.tasks.injection.ProductionModule
import org.tasks.makers.CaldavTaskMaker.CALENDAR
import org.tasks.makers.CaldavTaskMaker.ETAG
import org.tasks.makers.CaldavTaskMaker.OBJECT
@ -18,7 +16,6 @@ import org.tasks.makers.CaldavTaskMaker.TASK
import org.tasks.makers.CaldavTaskMaker.newCaldavTask
import org.tasks.makers.TaskMaker.newTask
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class CaldavSynchronizerTest : CaldavTest() {

@ -1,22 +1,19 @@
package org.tasks.caldav
import org.tasks.data.UUIDHelper
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Test
import org.tasks.data.UUIDHelper
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.SERVER_NEXTCLOUD
import org.tasks.data.entity.CaldavAccount.Companion.SERVER_OPEN_XCHANGE
import org.tasks.data.entity.CaldavAccount.Companion.SERVER_OWNCLOUD
import org.tasks.data.entity.CaldavAccount.Companion.SERVER_SABREDAV
import org.tasks.data.entity.CaldavAccount.Companion.SERVER_TASKS
import org.tasks.data.entity.CaldavAccount.Companion.SERVER_UNKNOWN
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_CALDAV
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_TASKS
import org.tasks.injection.ProductionModule
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class ServerDetectionTest : CaldavTest() {
@ -39,7 +36,7 @@ class ServerDetectionTest : CaldavTest() {
sync()
assertEquals(SERVER_OWNCLOUD, loadAccount().serverType)
assertEquals(SERVER_NEXTCLOUD, loadAccount().serverType)
}
@Test

@ -2,7 +2,6 @@ package org.tasks.caldav
import org.tasks.data.UUIDHelper
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
@ -11,10 +10,8 @@ import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_READ_WRITE
import org.tasks.data.dao.PrincipalDao
import org.tasks.injection.ProductionModule
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class SharingMailboxDotOrgTest : CaldavTest() {

@ -2,7 +2,6 @@ package org.tasks.caldav
import org.tasks.data.UUIDHelper
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.*
import org.junit.Test
@ -11,10 +10,8 @@ import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_OWNER
import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_READ_ONLY
import org.tasks.data.dao.PrincipalDao
import org.tasks.injection.ProductionModule
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class SharingOwncloudTest : CaldavTest() {

@ -2,7 +2,6 @@ package org.tasks.caldav
import org.tasks.data.UUIDHelper
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
@ -13,10 +12,8 @@ import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_OWNER
import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_READ_WRITE
import org.tasks.data.entity.CaldavCalendar.Companion.INVITE_ACCEPTED
import org.tasks.data.dao.PrincipalDao
import org.tasks.injection.ProductionModule
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class SharingSabredavTest : CaldavTest() {

@ -0,0 +1,25 @@
package org.tasks.data
import dagger.hilt.android.testing.HiltAndroidTest
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withTimeout
import org.junit.Assert.assertTrue
import org.junit.Test
import org.tasks.data.dao.CaldavDao
import org.tasks.data.entity.CaldavAccount
import org.tasks.injection.InjectingTestCase
import javax.inject.Inject
@HiltAndroidTest
class CaldavDaoExtensionsTest : InjectingTestCase() {
@Inject lateinit var caldavDao: CaldavDao
@Test
fun getLocalListCreatesAccountIfNeeded() = runBlocking {
withTimeout(5000L) {
assertTrue(caldavDao.getAccounts().isEmpty())
caldavDao.getLocalList()
assertTrue(caldavDao.getAccounts(CaldavAccount.TYPE_LOCAL).isNotEmpty())
}
}
}

@ -3,7 +3,6 @@ package org.tasks.data
import com.natpryce.makeiteasy.MakeItEasy.with
import com.natpryce.makeiteasy.PropertyValue
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
@ -13,14 +12,12 @@ import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.TaskDao
import org.tasks.data.entity.CaldavTask
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.makers.TaskContainerMaker
import org.tasks.makers.TaskContainerMaker.CREATED
import org.tasks.time.DateTime
import org.tasks.time.DateTimeUtils2.currentTimeMillis
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class CaldavDaoShiftTests : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao

@ -3,7 +3,6 @@ package org.tasks.data
import com.natpryce.makeiteasy.MakeItEasy.with
import com.todoroo.astrid.dao.TaskDao
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
@ -15,13 +14,11 @@ import org.tasks.data.dao.TagDataDao
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavTask
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.makers.TaskMaker.CREATION_TIME
import org.tasks.makers.TaskMaker.newTask
import org.tasks.time.DateTime
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class CaldavDaoTests : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao

@ -3,20 +3,18 @@ package org.tasks.data
import com.natpryce.makeiteasy.MakeItEasy.with
import com.todoroo.astrid.dao.TaskDao
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
import org.junit.Test
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.CaldavDao.Companion.LOCAL
import org.tasks.data.dao.DeletionDao
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.entity.CaldavTask
import org.tasks.date.DateTimeUtils.newDateTime
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.makers.TaskMaker.CREATION_TIME
import org.tasks.makers.TaskMaker.DELETION_TIME
import org.tasks.makers.TaskMaker.newTask
@ -24,7 +22,6 @@ import org.tasks.time.DateTime
import org.tasks.time.DateTimeUtils2.currentTimeMillis
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class DeletionDaoTests : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao
@ -33,19 +30,19 @@ class DeletionDaoTests : InjectingTestCase() {
@Test
fun deleting1000DoesntCrash() = runBlocking {
deletionDao.delete((1L..1000L).toList())
deletionDao.delete((1L..1000L).toList(), {})
}
@Test
fun marking998ForDeletionDoesntCrash() = runBlocking {
deletionDao.markDeleted(1L..1000L)
deletionDao.markDeleted(1L..1000L, {})
}
@Test
fun markDeletedUpdatesModificationTime() = runBlocking {
var task = newTask(with(CREATION_TIME, DateTime().minusMinutes(1)))
taskDao.createNew(task)
deletionDao.markDeleted(listOf(task.id))
deletionDao.markDeleted(listOf(task.id), {})
task = taskDao.fetch(task.id)!!
assertTrue(task.modificationDate > task.creationDate)
assertTrue(task.modificationDate < currentTimeMillis())
@ -55,7 +52,7 @@ class DeletionDaoTests : InjectingTestCase() {
fun markDeletedUpdatesDeletionTime() = runBlocking {
var task = newTask(with(CREATION_TIME, DateTime().minusMinutes(1)))
taskDao.createNew(task)
deletionDao.markDeleted(listOf(task.id))
deletionDao.markDeleted(listOf(task.id), {})
task = taskDao.fetch(task.id)!!
assertTrue(task.deletionDate > task.creationDate)
assertTrue(task.deletionDate < currentTimeMillis())
@ -65,7 +62,8 @@ class DeletionDaoTests : InjectingTestCase() {
fun purgeDeletedLocalTask() = runBlocking {
val task = newTask(with(DELETION_TIME, newDateTime()))
taskDao.createNew(task)
caldavDao.insert(CaldavCalendar(name = "", uuid = "1234", account = LOCAL))
caldavDao.insert(CaldavAccount(uuid = "abcd", accountType = CaldavAccount.TYPE_LOCAL))
caldavDao.insert(CaldavCalendar(name = "", uuid = "1234", account = "abcd"))
caldavDao.insert(CaldavTask(task = task.id, calendar = "1234"))
deletionDao.purgeDeleted()
@ -77,7 +75,8 @@ class DeletionDaoTests : InjectingTestCase() {
fun dontPurgeActiveTasks() = runBlocking {
val task = newTask()
taskDao.createNew(task)
caldavDao.insert(CaldavCalendar(name = "", uuid = "1234", account = LOCAL))
caldavDao.insert(CaldavAccount(uuid = "abcd", accountType = CaldavAccount.TYPE_LOCAL))
caldavDao.insert(CaldavCalendar(name = "", uuid = "1234", account = "abcd"))
caldavDao.insert(CaldavTask(task = task.id, calendar = "1234"))
deletionDao.purgeDeleted()

@ -3,7 +3,6 @@ package org.tasks.data
import com.natpryce.makeiteasy.MakeItEasy.with
import com.todoroo.astrid.dao.TaskDao
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
@ -11,13 +10,11 @@ import org.junit.Before
import org.junit.Test
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.dao.GoogleTaskListDao
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS
import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.entity.CaldavTask
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.makers.CaldavTaskMaker.CALENDAR
import org.tasks.makers.CaldavTaskMaker.REMOTE_ID
import org.tasks.makers.CaldavTaskMaker.REMOTE_PARENT
@ -26,10 +23,8 @@ import org.tasks.makers.CaldavTaskMaker.newCaldavTask
import org.tasks.makers.TaskMaker.newTask
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class GoogleTaskDaoTests : InjectingTestCase() {
@Inject lateinit var googleTaskListDao: GoogleTaskListDao
@Inject lateinit var googleTaskDao: GoogleTaskDao
@Inject lateinit var taskDao: TaskDao
@Inject lateinit var caldavDao: CaldavDao
@ -185,6 +180,21 @@ class GoogleTaskDaoTests : InjectingTestCase() {
assertEquals("abcd", googleTaskDao.getByTaskId(1)!!.remoteParent)
}
@Test
fun ignoreSelfParent() = runBlocking {
insert(
newCaldavTask(
with(TASK, 1),
with(REMOTE_ID, "123"),
with(REMOTE_PARENT, "123")
)
)
caldavDao.updateParents()
assertEquals(0, taskDao.fetch(1)!!.parent)
}
@Test
fun updateParents() = runBlocking {
insert(newCaldavTask(with(TASK, 1), with(REMOTE_ID, "123")))

@ -1,21 +1,16 @@
package org.tasks.data
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertTrue
import org.junit.Test
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskListDao
import org.tasks.data.entity.CaldavAccount
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class GoogleTaskListDaoTest : InjectingTestCase() {
@Inject lateinit var googleTaskListDao: GoogleTaskListDao
@Inject lateinit var caldavDao: CaldavDao
@Test
@ -26,6 +21,6 @@ class GoogleTaskListDaoTest : InjectingTestCase() {
)
caldavDao.insert(account)
assertTrue(googleTaskListDao.getGoogleTaskFilters(account.username!!).isEmpty())
assertTrue(caldavDao.getCaldavFilters(account.username!!).isEmpty())
}
}

@ -3,7 +3,6 @@ package org.tasks.data
import com.natpryce.makeiteasy.MakeItEasy.with
import com.todoroo.astrid.dao.TaskDao
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
@ -21,7 +20,6 @@ import org.tasks.data.entity.Place
import org.tasks.data.entity.Task
import org.tasks.date.DateTimeUtils.newDateTime
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.makers.TaskMaker.COMPLETION_TIME
import org.tasks.makers.TaskMaker.DELETION_TIME
import org.tasks.makers.TaskMaker.DUE_TIME
@ -31,7 +29,6 @@ import org.tasks.makers.TaskMaker.newTask
import org.tasks.time.DateTimeUtils2.currentTimeMillis
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class LocationDaoTest : InjectingTestCase() {
@Inject lateinit var locationDao: LocationDao

@ -1,10 +1,8 @@
package org.tasks.data
import com.natpryce.makeiteasy.MakeItEasy.with
import org.tasks.filters.GtasksFilter
import com.todoroo.astrid.dao.TaskDao
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Before
@ -13,9 +11,10 @@ import org.tasks.R
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.GoogleTaskDao
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS
import org.tasks.data.entity.CaldavCalendar
import org.tasks.filters.CaldavFilter
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.makers.CaldavTaskMaker.CALENDAR
import org.tasks.makers.CaldavTaskMaker.TASK
import org.tasks.makers.CaldavTaskMaker.newCaldavTask
@ -26,14 +25,13 @@ import org.tasks.makers.TaskMaker.PARENT
import org.tasks.preferences.Preferences
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class ManualGoogleTaskQueryTest : InjectingTestCase() {
@Inject lateinit var caldavDao: CaldavDao
@Inject lateinit var googleTaskDao: GoogleTaskDao
@Inject lateinit var taskDao: TaskDao
@Inject lateinit var preferences: Preferences
private lateinit var filter: GtasksFilter
private lateinit var filter: CaldavFilter
@Before
override fun setUp() {
@ -45,7 +43,7 @@ class ManualGoogleTaskQueryTest : InjectingTestCase() {
caldavDao.insert(CaldavAccount())
caldavDao.insert(calendar)
}
filter = GtasksFilter(calendar)
filter = CaldavFilter(calendar, account = CaldavAccount(accountType = TYPE_GOOGLE_TASKS))
}
@Test
@ -101,10 +99,10 @@ class ManualGoogleTaskQueryTest : InjectingTestCase() {
with(ORDER, order),
with(PARENT, parent),
))
googleTaskDao.insert(newCaldavTask(with(CALENDAR, filter.list.uuid), with(TASK, id)))
googleTaskDao.insert(newCaldavTask(with(CALENDAR, filter.uuid), with(TASK, id)))
}
private suspend fun query(): List<TaskContainer> = taskDao.fetchTasks {
private suspend fun query(): List<TaskContainer> = taskDao.fetchTasks(
TaskListQuery.getQuery(preferences, filter)
}
)
}

@ -3,7 +3,6 @@ package org.tasks.data
import com.natpryce.makeiteasy.MakeItEasy.with
import com.todoroo.astrid.dao.TaskDao
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
@ -13,12 +12,10 @@ import org.tasks.data.dao.TagDataDao
import org.tasks.data.entity.Tag
import org.tasks.data.entity.TagData
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.makers.TaskMaker.ID
import org.tasks.makers.TaskMaker.newTask
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class TagDataDaoTest : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao

@ -9,20 +9,17 @@ import com.natpryce.makeiteasy.MakeItEasy.with
import org.tasks.data.entity.Task
import com.todoroo.astrid.service.TaskDeleter
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
import org.junit.Test
import org.tasks.data.dao.TaskDao
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.makers.TaskMaker.PARENT
import org.tasks.makers.TaskMaker.newTask
import org.tasks.time.DateTimeUtils2.currentTimeMillis
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class TaskDaoTests : InjectingTestCase() {

@ -3,7 +3,6 @@ package org.tasks.data
import com.natpryce.makeiteasy.MakeItEasy
import com.todoroo.astrid.dao.TaskDao
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
@ -16,11 +15,9 @@ import org.tasks.data.entity.CaldavTask
import org.tasks.data.entity.Tag
import org.tasks.data.entity.TagData
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.makers.TaskMaker
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class UpgraderDaoTests : InjectingTestCase() {

@ -4,9 +4,9 @@ import android.content.Context
import androidx.room.Room
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import dagger.hilt.testing.TestInstallIn
import org.mockito.Mockito.mock
import org.tasks.TestUtilities
import org.tasks.data.db.Database
@ -19,15 +19,19 @@ import org.tasks.preferences.Preferences
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
@TestInstallIn(
components = [SingletonComponent::class],
replaces = [ProductionModule::class]
)
class TestModule {
@Provides
@Singleton
fun getDatabase(@ApplicationContext context: Context): Database {
return Room.inMemoryDatabaseBuilder(context, Database::class.java)
.fallbackToDestructiveMigration(dropAllTables = true)
.build()
}
fun getDatabase(@ApplicationContext context: Context): Database =
Room
.inMemoryDatabaseBuilder(context, Database::class.java)
.fallbackToDestructiveMigration(dropAllTables = true)
.setDriver()
.build()
@Provides
fun getPermissionChecker(@ApplicationContext context: Context): PermissionChecker {

@ -10,7 +10,6 @@ import androidx.test.InstrumentationRegistry
import com.todoroo.astrid.dao.TaskDao
import org.tasks.data.entity.Task
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.After
import org.junit.Assert.assertEquals
@ -22,13 +21,11 @@ import org.tasks.backup.BackupConstants.BACKUP_CLEANUP_MATCHER
import org.tasks.backup.TasksJsonExporter
import org.tasks.backup.TasksJsonExporter.ExportType
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.preferences.Preferences
import java.io.File
import java.io.IOException
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class BackupServiceTests : InjectingTestCase() {
@Inject lateinit var jsonExporter: TasksJsonExporter

@ -4,17 +4,14 @@ import android.location.Location
import android.location.LocationManager.GPS_PROVIDER
import android.location.LocationManager.NETWORK_PROVIDER
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
import org.junit.Test
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.time.DateTime
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class LocationServiceAndroidTest : InjectingTestCase() {
@Inject lateinit var service: LocationServiceAndroid

@ -3,12 +3,10 @@ package org.tasks.opentasks
import com.natpryce.makeiteasy.MakeItEasy.with
import org.tasks.data.entity.Task
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Test
import org.tasks.TestUtilities.withTZ
import org.tasks.injection.ProductionModule
import org.tasks.makers.CaldavTaskMaker
import org.tasks.makers.CaldavTaskMaker.newCaldavTask
import org.tasks.makers.TaskMaker
@ -16,7 +14,6 @@ import org.tasks.makers.TaskMaker.newTask
import org.tasks.time.DateTime
import java.util.*
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class OpenTasksDueDateTests : OpenTasksTest() {

@ -2,7 +2,6 @@ package org.tasks.opentasks
import com.natpryce.makeiteasy.MakeItEasy.with
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
@ -23,7 +22,6 @@ import org.tasks.data.entity.Alarm.Companion.TYPE_SNOOZE
import org.tasks.data.entity.Tag
import org.tasks.data.entity.TagData
import org.tasks.data.entity.Task
import org.tasks.injection.ProductionModule
import org.tasks.makers.CaldavTaskMaker
import org.tasks.makers.CaldavTaskMaker.CALENDAR
import org.tasks.makers.CaldavTaskMaker.REMOTE_ID
@ -36,7 +34,6 @@ import org.tasks.time.DateTime
import java.util.TimeZone
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class OpenTasksPropertiesTests : OpenTasksTest() {

@ -2,7 +2,6 @@ package org.tasks.opentasks
import com.natpryce.makeiteasy.MakeItEasy.with
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
@ -11,7 +10,6 @@ import org.junit.Test
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_OPENTASKS
import org.tasks.data.entity.CaldavCalendar
import org.tasks.injection.ProductionModule
import org.tasks.makers.CaldavTaskMaker.CALENDAR
import org.tasks.makers.CaldavTaskMaker.REMOTE_ID
import org.tasks.makers.CaldavTaskMaker.TASK
@ -19,7 +17,6 @@ import org.tasks.makers.CaldavTaskMaker.newCaldavTask
import org.tasks.makers.TaskMaker.RECUR
import org.tasks.makers.TaskMaker.newTask
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class OpenTasksSynchronizerTest : OpenTasksTest() {

@ -6,8 +6,6 @@ import dagger.hilt.android.qualifiers.ApplicationContext
class PermissivePermissionChecker(@ApplicationContext context: Context) : PermissionChecker(context) {
override fun canAccessCalendars() = true
override fun canAccessAccounts() = true
override fun canAccessForegroundLocation() = true
override fun canAccessBackgroundLocation() = true

@ -1,21 +1,18 @@
package org.tasks.repeats
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import org.junit.Assert.assertEquals
import org.junit.Test
import org.tasks.Freeze
import org.tasks.TestUtilities.withTZ
import org.tasks.analytics.Firebase
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.time.DateTime
import java.text.ParseException
import java.util.Locale
import java.util.TimeZone
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class RepeatRuleToStringTest : InjectingTestCase() {
@Inject lateinit var firebase: Firebase

@ -3,9 +3,7 @@ package org.tasks.ui.editviewmodel
import androidx.lifecycle.SavedStateHandle
import com.todoroo.astrid.activity.TaskEditFragment
import com.todoroo.astrid.alarms.AlarmService
import org.tasks.data.db.Database
import com.todoroo.astrid.dao.TaskDao
import org.tasks.data.entity.Task
import com.todoroo.astrid.gcal.GCalHelper
import com.todoroo.astrid.service.TaskCompleter
import com.todoroo.astrid.service.TaskDeleter
@ -14,12 +12,16 @@ import com.todoroo.astrid.timers.TimerPlugin
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.runBlocking
import org.junit.Before
import org.tasks.calendars.CalendarEventProvider
import org.tasks.data.dao.AlarmDao
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.LocationDao
import org.tasks.data.dao.TagDataDao
import org.tasks.data.dao.UserActivityDao
import org.tasks.data.getLocation
import org.tasks.data.db.Database
import org.tasks.data.entity.Task
import org.tasks.data.newLocalAccount
import org.tasks.injection.InjectingTestCase
import org.tasks.location.GeofenceApi
import org.tasks.preferences.DefaultFilterProvider
@ -45,18 +47,23 @@ open class BaseTaskEditViewModelTest : InjectingTestCase() {
@Inject lateinit var tagDataDao: TagDataDao
@Inject lateinit var alarmDao: AlarmDao
@Inject lateinit var userActivityDao: UserActivityDao
@Inject lateinit var caldavDao: CaldavDao
protected lateinit var viewModel: TaskEditViewModel
@Before
override fun setUp() {
runBlocking {
super.setUp()
caldavDao.newLocalAccount()
}
}
protected fun setup(task: Task) = runBlocking {
viewModel = TaskEditViewModel(
context,
SavedStateHandle().apply {
set(TaskEditFragment.EXTRA_TASK, task)
set(TaskEditFragment.EXTRA_LIST, defaultFilterProvider.getList(task))
set(TaskEditFragment.EXTRA_LOCATION, locationDao.getLocation(task, preferences))
set(TaskEditFragment.EXTRA_TAGS, tagDataDao.getTags(task))
set(TaskEditFragment.EXTRA_ALARMS, alarmDao.getAlarms(task))
},
taskDao,
taskDeleter,
@ -75,10 +82,10 @@ open class BaseTaskEditViewModelTest : InjectingTestCase() {
taskCompleter,
alarmService,
MutableSharedFlow(),
MutableSharedFlow(),
userActivityDao = userActivityDao,
taskAttachmentDao = db.taskAttachmentDao(),
alarmDao = db.alarmDao(),
defaultFilterProvider = defaultFilterProvider,
)
}

@ -1,22 +1,19 @@
package org.tasks.ui.editviewmodel
import com.natpryce.makeiteasy.MakeItEasy
import org.tasks.data.entity.Task
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import org.junit.Assert
import org.junit.Test
import org.tasks.injection.ProductionModule
import org.tasks.data.entity.Task
import org.tasks.makers.TaskMaker
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class PriorityTests : BaseTaskEditViewModelTest() {
@Test
fun changePriorityCausesChange() {
setup(TaskMaker.newTask(MakeItEasy.with(TaskMaker.PRIORITY, Task.Priority.HIGH)))
viewModel.priority.value = Task.Priority.MEDIUM
viewModel.setPriority(Task.Priority.MEDIUM)
Assert.assertTrue(viewModel.hasChanges())
}
@ -25,7 +22,7 @@ class PriorityTests : BaseTaskEditViewModelTest() {
fun applyPriorityChange() {
val task = TaskMaker.newTask(MakeItEasy.with(TaskMaker.PRIORITY, Task.Priority.HIGH))
setup(task)
viewModel.priority.value = Task.Priority.MEDIUM
viewModel.setPriority(Task.Priority.MEDIUM)
save()
@ -36,8 +33,8 @@ class PriorityTests : BaseTaskEditViewModelTest() {
fun noChangeWhenRevertingPriority() {
setup(TaskMaker.newTask(MakeItEasy.with(TaskMaker.PRIORITY, Task.Priority.HIGH)))
viewModel.priority.value = Task.Priority.MEDIUM
viewModel.priority.value = Task.Priority.HIGH
viewModel.setPriority(Task.Priority.MEDIUM)
viewModel.setPriority(Task.Priority.HIGH)
Assert.assertFalse(viewModel.hasChanges())
}

@ -3,7 +3,7 @@ package org.tasks.ui.editviewmodel
import com.natpryce.makeiteasy.MakeItEasy.with
import com.todoroo.astrid.service.TaskCreator.Companion.setDefaultReminders
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.collections.immutable.persistentSetOf
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
@ -16,14 +16,12 @@ import org.tasks.data.entity.Alarm.Companion.whenDue
import org.tasks.data.entity.Alarm.Companion.whenOverdue
import org.tasks.data.entity.Alarm.Companion.whenStarted
import org.tasks.data.entity.Task
import org.tasks.injection.ProductionModule
import org.tasks.makers.TaskMaker.DUE_TIME
import org.tasks.makers.TaskMaker.START_DATE
import org.tasks.makers.TaskMaker.newTask
import org.tasks.time.DateTime
import org.tasks.time.DateTimeUtils2.currentTimeMillis
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class ReminderTests : BaseTaskEditViewModelTest() {
@Test
@ -38,8 +36,8 @@ class ReminderTests : BaseTaskEditViewModelTest() {
setup(task)
assertEquals(
listOf(Alarm(type = Alarm.TYPE_REL_START)),
viewModel.selectedAlarms.value
persistentSetOf(Alarm(type = Alarm.TYPE_REL_START)),
viewModel.viewState.value.alarms
)
}
@ -55,8 +53,8 @@ class ReminderTests : BaseTaskEditViewModelTest() {
setup(task)
assertEquals(
listOf(Alarm(type = Alarm.TYPE_REL_END)),
viewModel.selectedAlarms.value
persistentSetOf(Alarm(type = Alarm.TYPE_REL_END)),
viewModel.viewState.value.alarms
)
}
@ -72,8 +70,8 @@ class ReminderTests : BaseTaskEditViewModelTest() {
setup(task)
assertEquals(
listOf(whenOverdue(0)),
viewModel.selectedAlarms.value
persistentSetOf(whenOverdue(0)),
viewModel.viewState.value.alarms
)
}

@ -1,16 +1,13 @@
package org.tasks.ui.editviewmodel
import org.tasks.data.entity.Task
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
import org.tasks.injection.ProductionModule
import org.tasks.data.entity.Task
import org.tasks.makers.TaskMaker.newTask
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class TaskEditViewModelTest : BaseTaskEditViewModelTest() {
@Test
@ -33,7 +30,7 @@ class TaskEditViewModelTest : BaseTaskEditViewModelTest() {
fun dontSaveTaskTwice() = runBlocking {
setup(newTask())
viewModel.priority.value = Task.Priority.HIGH
viewModel.setPriority(Task.Priority.HIGH)
assertTrue(save())

@ -2,7 +2,6 @@ package org.tasks.ui.editviewmodel
import com.todoroo.astrid.service.TaskDeleter
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
@ -11,18 +10,18 @@ import org.junit.Test
import org.tasks.LocalBroadcastManager
import org.tasks.analytics.Firebase
import org.tasks.billing.Inventory
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.DeletionDao
import org.tasks.data.dao.TaskDao
import org.tasks.data.entity.Task
import org.tasks.filters.MyTasksFilter
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.preferences.PermissivePermissionChecker
import org.tasks.preferences.Preferences
import org.tasks.time.DateTimeUtils2.currentTimeMillis
import org.tasks.ui.TaskListViewModel
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class TaskListViewModelTest : InjectingTestCase() {
private lateinit var viewModel: TaskListViewModel
@ -33,12 +32,13 @@ class TaskListViewModelTest : InjectingTestCase() {
@Inject lateinit var localBroadcastManager: LocalBroadcastManager
@Inject lateinit var inventory: Inventory
@Inject lateinit var firebase: Firebase
@Inject lateinit var caldavDao: CaldavDao
@Before
override fun setUp() {
super.setUp()
viewModel = TaskListViewModel(
context = context,
applicationContext = context,
preferences = preferences,
taskDao = taskDao,
deletionDao = deletionDao,
@ -46,6 +46,8 @@ class TaskListViewModelTest : InjectingTestCase() {
localBroadcastManager = localBroadcastManager,
inventory = inventory,
firebase = firebase,
permissionChecker = PermissivePermissionChecker(context),
caldavDao = caldavDao,
)
viewModel.setFilter(runBlocking { MyTasksFilter.create() })
}

@ -1,25 +1,22 @@
package org.tasks.ui.editviewmodel
import com.natpryce.makeiteasy.MakeItEasy.with
import org.tasks.data.entity.Task.Priority.Companion.HIGH
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Test
import org.tasks.injection.ProductionModule
import org.tasks.data.entity.Task.Priority.Companion.HIGH
import org.tasks.makers.TaskMaker
import org.tasks.makers.TaskMaker.newTask
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class TitleTests : BaseTaskEditViewModelTest() {
@Test
fun changeTitleCausesChange() {
setup(newTask())
viewModel.title = "Test"
viewModel.setTitle("Test")
assertTrue(viewModel.hasChanges())
}
@ -29,7 +26,7 @@ class TitleTests : BaseTaskEditViewModelTest() {
val task = newTask()
setup(task)
viewModel.priority.value = HIGH
viewModel.setPriority(HIGH)
save()

@ -1,19 +1,18 @@
package org.tasks.billing
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.json.JSONObject
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Test
import org.tasks.LocalBroadcastManager
import org.tasks.data.dao.CaldavDao
import org.tasks.data.entity.CaldavAccount
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.preferences.Preferences
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class InventoryTest : InjectingTestCase() {
@ -24,6 +23,24 @@ class InventoryTest : InjectingTestCase() {
lateinit var inventory: Inventory
@Test
fun hasTasksAccount() = runBlocking {
caldavDao.insert(CaldavAccount(accountType = CaldavAccount.TYPE_TASKS, url = "https://caldav.tasks.org/calendars/"))
initInventory()
inventory.updateTasksAccount()
assertTrue(inventory.hasTasksAccount)
}
@Test
fun hasTasksAccountWithCaldav() = runBlocking {
caldavDao.insert(CaldavAccount(accountType = CaldavAccount.TYPE_CALDAV, url = "https://caldav.tasks.org/calendars/"))
initInventory()
inventory.updateTasksAccount()
assertTrue(inventory.hasTasksAccount)
}
@Test
fun monthlyIsPro() {
withPurchases(monthly01)
@ -72,13 +89,17 @@ class InventoryTest : InjectingTestCase() {
}
.map(::Purchase)
preferences.setPurchases(asPurchases)
initInventory()
}
private fun initInventory() {
runOnMainSync {
inventory = Inventory(
context,
preferences,
signatureVerifier,
localBroadcastManager,
caldavDao
context,
preferences,
signatureVerifier,
localBroadcastManager,
caldavDao
)
}
}

@ -3,17 +3,14 @@ package org.tasks.caldav
import androidx.test.annotation.UiThreadTest
import org.tasks.data.UUIDHelper
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Test
import org.tasks.R
import org.tasks.billing.Inventory
import org.tasks.data.entity.CaldavAccount
import org.tasks.injection.ProductionModule
import javax.inject.Inject
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class CaldavSubscriptionTest : CaldavTest() {
@Inject lateinit var inventory: Inventory

@ -1,14 +1,11 @@
package org.tasks.opentasks
import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Test
import org.tasks.R
import org.tasks.injection.ProductionModule
@UninstallModules(ProductionModule::class)
@HiltAndroidTest
class OpenTasksSubscriptionTest : OpenTasksTest() {
@Test

@ -7,10 +7,6 @@
android:networkSecurityConfig="@xml/network_security_config"
tools:ignore="GoogleAppIndexingWarning">
<activity
android:exported="true"
android:name="com.facebook.flipper.android.diagnostics.FlipperDiagnosticActivity"/>
</application>
</manifest>

@ -3,40 +3,24 @@ package org.tasks
import android.app.Application
import android.os.StrictMode
import android.os.StrictMode.VmPolicy
import com.facebook.flipper.android.AndroidFlipperClient
import com.facebook.flipper.android.utils.FlipperUtils
import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin
import com.facebook.flipper.plugins.inspector.DescriptorMapping
import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin
import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin
import com.facebook.soloader.SoLoader
import com.todoroo.andlib.utility.AndroidUtilities.atLeastOreo
import com.todoroo.andlib.utility.AndroidUtilities.atLeastQ
import leakcanary.AppWatcher
import org.tasks.logging.FileLogger
import org.tasks.preferences.Preferences
import timber.log.Timber
import timber.log.Timber.DebugTree
import javax.inject.Inject
class BuildSetup @Inject constructor(
private val context: Application,
private val preferences: Preferences) {
private val context: Application,
private val preferences: Preferences,
private val fileLogger: FileLogger,
) {
fun setup() {
Timber.plant(DebugTree())
SoLoader.init(context, false)
Timber.plant(Timber.DebugTree())
Timber.plant(fileLogger)
if (preferences.getBoolean(R.string.p_leakcanary, false)) {
AppWatcher.manualInstall(context)
}
if (preferences.getBoolean(R.string.p_flipper, false) && FlipperUtils.shouldEnableFlipper(context)) {
val client = AndroidFlipperClient.getInstance(context)
client.addPlugin(InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()))
client.addPlugin(DatabasesFlipperPlugin(context))
client.addPlugin(NetworkFlipperPlugin())
client.addPlugin(SharedPreferencesFlipperPlugin(context))
client.start()
}
if (preferences.getBoolean(R.string.p_strict_mode_thread, false)) {
val builder = StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog()
if (preferences.getBoolean(R.string.p_crash_main_queries, false)) {
@ -52,9 +36,7 @@ class BuildSetup @Inject constructor(
.detectLeakedClosableObjects()
.detectFileUriExposure()
.penaltyLog()
if (atLeastOreo()) {
builder.detectContentUriWithoutPermission()
}
.detectContentUriWithoutPermission()
if (atLeastQ()) {
builder
.detectCredentialProtectedWhileLocked()
@ -63,4 +45,4 @@ class BuildSetup @Inject constructor(
StrictMode.setVmPolicy(builder.build())
}
}
}
}

@ -1,39 +0,0 @@
package org.tasks
import android.content.Context
import com.facebook.flipper.android.AndroidFlipperClient
import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin
import com.google.api.client.http.HttpRequest
import com.google.api.client.http.HttpResponse
import dagger.hilt.android.qualifiers.ApplicationContext
import okhttp3.OkHttpClient
import java.io.IOException
import javax.inject.Inject
class DebugNetworkInterceptor @Inject constructor(@param:ApplicationContext private val context: Context) {
fun apply(builder: OkHttpClient.Builder?) {
builder?.addNetworkInterceptor(FlipperOkhttpInterceptor(getNetworkPlugin(context)))
}
@Throws(IOException::class)
fun <T> execute(request: HttpRequest, responseClass: Class<T>): T? {
val interceptor = FlipperHttpInterceptor(getNetworkPlugin(context), responseClass)
request
.setInterceptor(interceptor)
.setResponseInterceptor(interceptor)
.execute()
return interceptor.response
}
@Throws(IOException::class)
fun <T> report(httpResponse: HttpResponse, responseClass: Class<T>, start: Long, finish: Long): T? {
val interceptor = FlipperHttpInterceptor(getNetworkPlugin(context), responseClass)
interceptor.report(httpResponse, start, finish)
return interceptor.response
}
private fun getNetworkPlugin(context: Context): NetworkFlipperPlugin {
return AndroidFlipperClient.getInstance(context).getPlugin(NetworkFlipperPlugin.ID)!!
}
}

@ -1,82 +0,0 @@
package org.tasks
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin
import com.facebook.flipper.plugins.network.NetworkReporter
import com.facebook.flipper.plugins.network.NetworkReporter.ResponseInfo
import com.google.api.client.http.*
import com.google.api.client.json.GenericJson
import org.tasks.data.UUIDHelper
import org.tasks.time.DateTimeUtils2.currentTimeMillis
import timber.log.Timber
import java.io.ByteArrayOutputStream
import java.io.IOException
internal class FlipperHttpInterceptor<T>(private val plugin: NetworkFlipperPlugin, private val responseClass: Class<T>) : HttpExecuteInterceptor, HttpResponseInterceptor {
private val requestId = UUIDHelper.newUUID()
var response: T? = null
private set
override fun intercept(request: HttpRequest) {
plugin.reportRequest(toRequestInfo(request, currentTimeMillis()))
}
@Throws(IOException::class)
override fun interceptResponse(response: HttpResponse) {
plugin.reportResponse(toResponseInfo(response, currentTimeMillis()))
}
@Throws(IOException::class)
fun report(response: HttpResponse, start: Long, end: Long) {
plugin.reportRequest(toRequestInfo(response.request, start))
plugin.reportResponse(toResponseInfo(response, end))
}
private fun toRequestInfo(request: HttpRequest, timestamp: Long): NetworkReporter.RequestInfo {
val requestInfo = NetworkReporter.RequestInfo()
requestInfo.method = request.requestMethod
requestInfo.body = bodyToByteArray(request.content)
requestInfo.headers = getHeaders(request.headers)
requestInfo.requestId = requestId
requestInfo.timeStamp = timestamp
requestInfo.uri = request.url.toString()
return requestInfo
}
@Throws(IOException::class)
private fun toResponseInfo(response: HttpResponse, timestamp: Long): ResponseInfo {
val responseInfo = ResponseInfo()
responseInfo.timeStamp = timestamp
responseInfo.headers = getHeaders(response.headers)
responseInfo.requestId = requestId
responseInfo.statusCode = response.statusCode
responseInfo.statusReason = response.statusMessage
this.response = response.parseAs(responseClass)
if (this.response is GenericJson) {
try {
responseInfo.body = (this.response as GenericJson).toPrettyString().toByteArray()
} catch (e: IOException) {
Timber.e(e)
}
}
return responseInfo
}
private fun getHeaders(headers: HttpHeaders): List<NetworkReporter.Header> {
return headers.map { (name, value) -> NetworkReporter.Header(name, value.toString()) }
}
private fun bodyToByteArray(content: HttpContent?): ByteArray? {
if (content == null) {
return null
}
val output = ByteArrayOutputStream()
try {
content.writeTo(output)
} catch (e: IOException) {
Timber.e(e)
return null
}
return output.toByteArray()
}
}

@ -1,15 +1,19 @@
package org.tasks.preferences.fragments
import android.os.Bundle
import android.widget.Toast
import androidx.annotation.StringRes
import androidx.lifecycle.lifecycleScope
import androidx.preference.Preference
import at.bitfire.cert4android.CustomCertManager.Companion.resetCertificates
import com.todoroo.astrid.service.TaskCreator
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import org.tasks.R
import org.tasks.billing.BillingClient
import org.tasks.billing.Inventory
import org.tasks.data.createDueDate
import org.tasks.data.entity.Task
import org.tasks.extensions.Context.toast
import org.tasks.injection.InjectingPreferenceFragment
import org.tasks.preferences.Preferences
@ -24,13 +28,14 @@ class Debug : InjectingPreferenceFragment() {
@Inject lateinit var inventory: Inventory
@Inject lateinit var billingClient: BillingClient
@Inject lateinit var preferences: Preferences
@Inject lateinit var taskCreator: TaskCreator
@Inject lateinit var taskDao: com.todoroo.astrid.dao.TaskDao
override fun getPreferenceXml() = R.xml.preferences_debug
override suspend fun setupPreferences(savedInstanceState: Bundle?) {
for (pref in listOf(
R.string.p_leakcanary,
R.string.p_flipper,
R.string.p_strict_mode_vm,
R.string.p_strict_mode_thread,
R.string.p_crash_main_queries
@ -54,7 +59,6 @@ class Debug : InjectingPreferenceFragment() {
}
setupIap(R.string.debug_themes, Inventory.SKU_THEMES)
setupIap(R.string.debug_tasker, Inventory.SKU_TASKER)
findPreference(R.string.debug_crash_app).setOnPreferenceClickListener {
throw RuntimeException("Crashed app from debug preferences")
@ -66,7 +70,25 @@ class Debug : InjectingPreferenceFragment() {
preferences.lastSubscribeRequest = 0L
preferences.lastReviewRequest = 0L
preferences.shownBeastModeHint = false
preferences.warnMicrosoft = true
preferences.warnGoogleTasks = true
preferences.warnQuietHoursDisabled = true
preferences.setBoolean(R.string.p_just_updated, true)
true
}
findPreference(R.string.debug_create_tasks).setOnPreferenceClickListener {
lifecycleScope.launch {
val count = 5000
for (i in 1..count) {
val task = taskCreator.createWithValues("")
taskDao.createNew(task)
task.title = "Task ${task.id}"
task.dueDate = createDueDate(Task.URGENCY_SPECIFIC_DAY, currentTimeMillis())
taskDao.save(task)
}
Toast.makeText(context, "Created $count tasks", Toast.LENGTH_SHORT).show()
}
false
}
}

@ -0,0 +1,20 @@
{
"client_id" : "9d4babd5-e7ba-4286-ba4b-17274495a901",
"authorization_user_agent" : "DEFAULT",
"redirect_uri" : "msauth://org.tasks/8wnYBRqh5nnQgFzbIXfxXSs41xE%3D",
"account_mode" : "MULTIPLE",
"authorities" : [
{
"type": "AAD",
"audience": {
"type": "AzureADandPersonalMicrosoftAccount",
"tenant_id": "common"
}
}
],
"logging": {
"level": "verbose",
"logcat_enabled": true,
"pii_enabled": true
}
}

@ -4,16 +4,16 @@
<string name="debug_strict_mode_thread">Strict mode - Thread</string>
<string name="debug_strict_mode_vm">Strict mode - VM</string>
<string name="debug_leakcanary">LeakCanary</string>
<string name="debug_flipper">Flipper</string>
<string name="debug_pro">Unlock pro</string>
<string name="debug_purchase">Purchase %s</string>
<string name="debug_consume">Consume %s</string>
<string name="debug_themes">debug_themes</string>
<string name="debug_tasker">debug_tasker</string>
<string name="debug_reset_ssl">Reset SSL certificates</string>
<string name="debug_crash_app">Crash app now</string>
<string name="debug_create_tasks">Create tasks</string>
<string name="debug_main_queries">Crash on violation</string>
<string name="debug_force_restart">Restart app</string>
<string name="debug_clear_hints">Clear hints</string>
<string name="google_oauth_scheme">com.googleusercontent.apps.1006257750459-vf4mvft1b3rfda8b4c4bl4k4418abqlf</string>
<string name="microsoft_oauth_path">/8wnYBRqh5nnQgFzbIXfxXSs41xE=</string>
</resources>

@ -6,11 +6,6 @@
android:key="@string/p_leakcanary"
android:title="@string/debug_leakcanary" />
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="@string/p_flipper"
android:title="@string/debug_flipper"/>
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="@string/p_strict_mode_vm"
@ -46,11 +41,12 @@
<Preference
android:key="@string/debug_themes"/>
<Preference
android:key="@string/debug_tasker"/>
<Preference
android:key="@string/debug_clear_hints"
android:title="@string/debug_clear_hints" />
<Preference
android:key="@string/debug_create_tasks"
android:title="@string/debug_create_tasks"/>
</PreferenceScreen>

@ -1,6 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<manifest xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">
<application/>
<application tools:ignore="MissingApplicationIcon">
<activity
android:name=".auth.MicrosoftAuthenticationActivity"
android:theme="@style/TranslucentDialog"/>
<activity
android:name="net.openid.appauth.RedirectUriReceiverActivity"
android:exported="true"
tools:node="merge">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data
android:host="${applicationId}"
android:scheme="msauth" />
</intent-filter>
</activity>
</application>
</manifest>

@ -1,19 +1,40 @@
package org.tasks.analytics
import android.content.Context
import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.R
import org.tasks.preferences.Preferences
import org.tasks.time.DateTimeUtils2.currentTimeMillis
import timber.log.Timber
import java.util.concurrent.TimeUnit
import javax.inject.Inject
@Suppress("UNUSED_PARAMETER")
class Firebase @Inject constructor() {
class Firebase @Inject constructor(
@param:ApplicationContext val context: Context,
private val preferences: Preferences
) {
fun reportException(t: Throwable) = Timber.e(t)
fun updateRemoteConfig() {}
fun logEvent(event: Int, vararg params: Pair<Int, Any>) {}
fun logEvent(event: Int, vararg params: Pair<Int, Any>) {
Timber.d("${context.getString(event)} -> $params")
}
fun addTask(source: String) {}
fun addTask(source: String) =
logEvent(R.string.event_add_task, R.string.param_type to source)
val subscribeCooldown = false
val moreOptionsBadge = false
val moreOptionsSolid = false
}
fun completeTask(source: String) =
logEvent(R.string.event_complete_task, R.string.param_type to source)
val subscribeCooldown: Boolean
get() = installCooldown
|| preferences.lastSubscribeRequest + days(28L) > currentTimeMillis()
private val installCooldown: Boolean
get() = preferences.installDate + days(7L) > currentTimeMillis()
private fun days(default: Long): Long =
TimeUnit.DAYS.toMillis(default)
}

@ -0,0 +1,38 @@
package org.tasks.auth
import android.net.Uri
import androidx.core.net.toUri
import net.openid.appauth.AuthorizationServiceConfiguration
import kotlin.coroutines.suspendCoroutine
data class IdentityProvider(
val name: String,
val discoveryEndpoint: Uri,
val clientId: String,
val redirectUri: Uri,
val scope: String
) {
suspend fun retrieveConfig(): AuthorizationServiceConfiguration {
return suspendCoroutine { cont ->
AuthorizationServiceConfiguration.fetchFromUrl(discoveryEndpoint) { serviceConfiguration, ex ->
cont.resumeWith(
when {
ex != null -> Result.failure(ex)
serviceConfiguration != null -> Result.success(serviceConfiguration)
else -> Result.failure(IllegalStateException())
}
)
}
}
}
companion object {
val MICROSOFT = IdentityProvider(
"Microsoft",
"https://login.microsoftonline.com/consumers/v2.0/.well-known/openid-configuration".toUri(),
"9d4babd5-e7ba-4286-ba4b-17274495a901",
"msauth://org.tasks/8wnYBRqh5nnQgFzbIXfxXSs41xE%3D".toUri(),
"user.read Tasks.ReadWrite openid offline_access email"
)
}
}

@ -21,7 +21,6 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties
import androidx.lifecycle.lifecycleScope
import org.tasks.data.UUIDHelper
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@ -35,11 +34,15 @@ import org.json.JSONObject
import org.tasks.R
import org.tasks.analytics.Constants
import org.tasks.analytics.Firebase
import org.tasks.data.UUIDHelper
import org.tasks.data.dao.CaldavDao
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_MICROSOFT
import org.tasks.data.dao.CaldavDao
import org.tasks.http.HttpClientFactory
import org.tasks.jobs.WorkManager
import org.tasks.preferences.fragments.TasksAccountViewModel.Companion.getStringOrNull
import org.tasks.security.KeyStoreEncryption
import org.tasks.sync.SyncAdapters
import org.tasks.sync.microsoft.requestTokenExchange
import javax.inject.Inject
@ -50,6 +53,8 @@ class MicrosoftAuthenticationActivity : ComponentActivity() {
@Inject lateinit var encryption: KeyStoreEncryption
@Inject lateinit var httpClientFactory: HttpClientFactory
@Inject lateinit var firebase: Firebase
@Inject lateinit var syncAdapters: SyncAdapters
@Inject lateinit var workManager: WorkManager
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -92,6 +97,8 @@ class MicrosoftAuthenticationActivity : ComponentActivity() {
R.string.param_type to Constants.SYNC_TYPE_MICROSOFT
)
}
syncAdapters.sync(true)
workManager.updateBackgroundSync()
finish()
} else {
error(ex?.message ?: "Token exchange failed")
@ -136,7 +143,7 @@ class MicrosoftAuthenticationActivity : ComponentActivity() {
)
.execute()
val response = userInfo.body?.string() ?: return@withContext null
JSONObject(response).getString("email")
JSONObject(response).getStringOrNull("email")
}
private fun error(message: String) {
@ -148,4 +155,3 @@ class MicrosoftAuthenticationActivity : ComponentActivity() {
const val EXTRA_SERVICE_DISCOVERY = "extra_service_discovery"
}
}

@ -21,6 +21,7 @@ class BillingClientImpl(
) {}
override suspend fun acknowledge(purchase: Purchase) {}
override suspend fun getSkus(skus: List<String>): List<Sku> = emptyList()
override suspend fun consume(sku: String) {}

@ -4,7 +4,13 @@ import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import org.tasks.location.*
import org.tasks.location.Geocoder
import org.tasks.location.GeocoderNominatim
import org.tasks.location.LocationService
import org.tasks.location.LocationServiceAndroid
import org.tasks.location.MapFragment
import org.tasks.location.OsmMapFragment
import org.tasks.wear.WearRefresher
@Module
@InstallIn(SingletonComponent::class)
@ -17,4 +23,9 @@ class FlavorModule {
@Provides
fun getGeocoder(nominatim: GeocoderNominatim): Geocoder = nominatim
@Provides
fun getWearRefresher(): WearRefresher = object : WearRefresher {
override suspend fun refresh() = Unit
}
}

@ -1,24 +1,14 @@
package org.tasks.sync.microsoft
import android.content.Context
import net.openid.appauth.*
import org.tasks.auth.IdentityProvider
import net.openid.appauth.AuthState
import net.openid.appauth.AuthorizationException
import net.openid.appauth.AuthorizationResponse
import net.openid.appauth.AuthorizationService
import net.openid.appauth.TokenRequest
import net.openid.appauth.TokenResponse
import kotlin.coroutines.suspendCoroutine
suspend fun IdentityProvider.retrieveConfig(): AuthorizationServiceConfiguration {
return suspendCoroutine { cont ->
AuthorizationServiceConfiguration.fetchFromUrl(discoveryEndpoint) { serviceConfiguration, ex ->
cont.resumeWith(
when {
ex != null -> Result.failure(ex)
serviceConfiguration != null -> Result.success(serviceConfiguration)
else -> Result.failure(IllegalStateException())
}
)
}
}
}
suspend fun Context.requestTokenRefresh(state: AuthState) =
requestToken(state.createTokenRefreshRequest())

@ -0,0 +1,29 @@
package org.tasks.sync.microsoft
import android.content.Context
import dagger.hilt.android.qualifiers.ApplicationContext
import net.openid.appauth.AuthState
import org.tasks.data.entity.CaldavAccount
import org.tasks.security.KeyStoreEncryption
import javax.inject.Inject
class MicrosoftTokenProvider @Inject constructor(
@ApplicationContext private val context: Context,
private val encryption: KeyStoreEncryption,
) {
suspend fun getToken(account: CaldavAccount): String {
val authState = encryption.decrypt(account.password)?.let { AuthState.jsonDeserialize(it) }
?: throw RuntimeException("Missing credentials")
if (authState.needsTokenRefresh) {
val (token, ex) = context.requestTokenRefresh(authState)
authState.update(token, ex)
if (authState.isAuthorized) {
account.password = encryption.encrypt(authState.jsonSerializeString())
}
}
if (!authState.isAuthorized) {
throw RuntimeException("Needs authentication")
}
return authState.accessToken!!
}
}

@ -40,6 +40,33 @@
android:name=".location.GoogleGeofenceTransitionIntentService"
android:permission="android.permission.BIND_JOB_SERVICE"/>
<service
android:name=".wear.WearDataService"
android:exported="true"
tools:ignore="ExportedService">
<intent-filter>
<action android:name="com.google.android.gms.wearable.REQUEST_RECEIVED" />
<data
android:host="*"
android:pathPrefix="/grpc/"
android:scheme="wear" />
</intent-filter>
</service>
<activity
android:name="com.microsoft.identity.client.BrowserTabActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="${applicationId}"
android:path="@string/microsoft_oauth_path"
android:scheme="msauth" />
</intent-filter>
</activity>
</application>
</manifest>

@ -19,13 +19,42 @@ import javax.inject.Singleton
@Singleton
class Firebase @Inject constructor(
@param:ApplicationContext val context: Context,
@ApplicationContext private val context: Context,
private val preferences: Preferences
) {
private var crashlytics: FirebaseCrashlytics? = null
private var analytics: FirebaseAnalytics? = null
private var remoteConfig: FirebaseRemoteConfig? = null
private val crashlytics by lazy {
if (preferences.isTrackingEnabled) {
FirebaseCrashlytics.getInstance().apply {
setCrashlyticsCollectionEnabled(true)
}
} else {
null
}
}
private val analytics by lazy {
if (preferences.isTrackingEnabled) {
FirebaseAnalytics.getInstance(context).apply {
setAnalyticsCollectionEnabled(true)
}
} else {
null
}
}
private val remoteConfig by lazy {
if (preferences.isTrackingEnabled) {
FirebaseRemoteConfig.getInstance().apply {
setConfigSettingsAsync(remoteConfigSettings {
minimumFetchIntervalInSeconds =
TimeUnit.HOURS.toSeconds(WorkManager.REMOTE_CONFIG_INTERVAL_HOURS)
})
setDefaultsAsync(R.xml.remote_config_defaults)
}
} else {
null
}
}
fun reportException(t: Throwable) {
Timber.e(t)
@ -50,8 +79,13 @@ class Firebase @Inject constructor(
fun addTask(source: String) =
logEvent(R.string.event_add_task, R.string.param_type to source)
fun completeTask(source: String) =
logEvent(R.string.event_complete_task, R.string.param_type to source)
fun logEvent(@StringRes event: Int, vararg p: Pair<Int, Any>) {
analytics?.logEvent(context.getString(event), Bundle().apply {
val eventName = context.getString(event)
Timber.d("$eventName -> $p")
analytics?.logEvent(eventName, Bundle().apply {
p.forEach {
val key = context.getString(it.first)
when (it.second::class) {
@ -73,30 +107,6 @@ class Firebase @Inject constructor(
get() = installCooldown
|| preferences.lastSubscribeRequest + days("subscribe_cooldown", 30L) > currentTimeMillis()
val moreOptionsBadge: Boolean
get() = remoteConfig?.getBoolean("more_options_badge") ?: false
val moreOptionsSolid: Boolean
get() = remoteConfig?.getBoolean("more_options_solid") ?: false
private fun days(key: String, default: Long): Long =
TimeUnit.DAYS.toMillis(remoteConfig?.getLong(key) ?: default)
init {
if (preferences.isTrackingEnabled) {
analytics = FirebaseAnalytics.getInstance(context).apply {
setAnalyticsCollectionEnabled(true)
}
crashlytics = FirebaseCrashlytics.getInstance().apply {
setCrashlyticsCollectionEnabled(true)
}
remoteConfig = FirebaseRemoteConfig.getInstance().apply {
setConfigSettingsAsync(remoteConfigSettings {
minimumFetchIntervalInSeconds =
TimeUnit.HOURS.toSeconds(WorkManager.REMOTE_CONFIG_INTERVAL_HOURS)
})
setDefaultsAsync(R.xml.remote_config_defaults)
}
}
}
}

@ -4,21 +4,19 @@ import android.app.Activity
import android.content.Context
import com.android.billingclient.api.AcknowledgePurchaseParams
import com.android.billingclient.api.BillingClient.BillingResponseCode
import com.android.billingclient.api.BillingClient.SkuType
import com.android.billingclient.api.BillingClient.ProductType
import com.android.billingclient.api.BillingClient.newBuilder
import com.android.billingclient.api.BillingClientStateListener
import com.android.billingclient.api.BillingFlowParams
import com.android.billingclient.api.BillingFlowParams.ProrationMode
import com.android.billingclient.api.BillingFlowParams.ProductDetailsParams
import com.android.billingclient.api.BillingFlowParams.SubscriptionUpdateParams
import com.android.billingclient.api.BillingResult
import com.android.billingclient.api.ConsumeParams
import com.android.billingclient.api.Purchase.PurchaseState
import com.android.billingclient.api.PurchasesResult
import com.android.billingclient.api.PurchasesUpdatedListener
import com.android.billingclient.api.SkuDetailsParams
import com.android.billingclient.api.QueryProductDetailsParams
import com.android.billingclient.api.QueryPurchasesParams
import com.android.billingclient.api.consumePurchase
import com.android.billingclient.api.queryPurchasesAsync
import com.android.billingclient.api.querySkuDetails
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.NonCancellable
@ -46,11 +44,63 @@ class BillingClientImpl(
private var connected = false
private var onPurchasesUpdated: OnPurchasesUpdated? = null
override suspend fun getSkus(skus: List<String>): List<Sku> =
executeServiceRequest {
val productList = skus.map {
QueryProductDetailsParams.Product.newBuilder()
.setProductId(it)
.setProductType(ProductType.SUBS)
.build()
}
val params = QueryProductDetailsParams.newBuilder()
.setProductList(productList)
.build()
val productDetailsResult = withContext(Dispatchers.IO) {
suspendCoroutine { cont ->
billingClient.queryProductDetailsAsync(params) { billingResult, productDetailsList ->
cont.resume(billingResult to productDetailsList)
}
}
}
productDetailsResult.first.let {
if (!it.success) {
throw IllegalStateException(it.responseCodeString)
}
}
productDetailsResult.second?.map { productDetails ->
Sku(
productId = productDetails.productId,
price = productDetails.subscriptionOfferDetails?.firstOrNull()?.pricingPhases?.pricingPhaseList?.firstOrNull()?.formattedPrice
?: productDetails.oneTimePurchaseOfferDetails?.formattedPrice
?: ""
)
} ?: emptyList()
}
override suspend fun queryPurchases(throwError: Boolean) = try {
executeServiceRequest {
withContext(Dispatchers.IO + NonCancellable) {
val subs = billingClient.queryPurchasesAsync(SkuType.SUBS)
val iaps = billingClient.queryPurchasesAsync(SkuType.INAPP)
val subsParams = QueryPurchasesParams.newBuilder()
.setProductType(ProductType.SUBS)
.build()
val iapsParams = QueryPurchasesParams.newBuilder()
.setProductType(ProductType.INAPP)
.build()
val subs = suspendCoroutine { cont ->
billingClient.queryPurchasesAsync(subsParams) { billingResult, purchases ->
cont.resume(PurchasesResult(billingResult, purchases))
}
}
val iaps = suspendCoroutine { cont ->
billingClient.queryPurchasesAsync(iapsParams) { billingResult, purchases ->
cont.resume(PurchasesResult(billingResult, purchases))
}
}
if (subs.success || iaps.success) {
withContext(Dispatchers.Main) {
inventory.clear()
@ -81,7 +131,7 @@ class BillingClientImpl(
purchases?.forEach {
firebase.reportIabResult(
result.responseCodeString,
it.skus.joinToString(","),
it.products.joinToString(","),
it.purchaseState.purchaseStateString
)
}
@ -98,31 +148,57 @@ class BillingClientImpl(
oldPurchase: Purchase?
) {
executeServiceRequest {
val skuDetailsResult = withContext(Dispatchers.IO) {
billingClient.querySkuDetails(
SkuDetailsParams.newBuilder().setSkusList(listOf(sku)).setType(skuType)
.build()
)
val productList = listOf(
QueryProductDetailsParams.Product.newBuilder()
.setProductId(sku)
.setProductType(skuType)
.build()
)
val queryParams = QueryProductDetailsParams.newBuilder()
.setProductList(productList)
.build()
val productDetailsResult = withContext(Dispatchers.IO) {
suspendCoroutine { cont ->
billingClient.queryProductDetailsAsync(queryParams) { billingResult, productDetailsList ->
cont.resume(billingResult to productDetailsList)
}
}
}
skuDetailsResult.billingResult.let {
productDetailsResult.first.let {
if (!it.success) {
throw IllegalStateException(it.responseCodeString)
}
}
val skuDetails =
skuDetailsResult
.skuDetailsList
?.firstOrNull()
?: throw IllegalStateException("Sku $sku not found")
val params = BillingFlowParams.newBuilder().setSkuDetails(skuDetails)
val productDetails = productDetailsResult.second?.firstOrNull()
?: throw IllegalStateException("Product $sku not found")
val productDetailsParamsBuilder = ProductDetailsParams.newBuilder()
.setProductDetails(productDetails)
// For subscriptions (including legacy subscriptions), we need to provide an offer token
if (skuType == ProductType.SUBS) {
val offerToken = productDetails.subscriptionOfferDetails?.firstOrNull()?.offerToken
?: throw IllegalStateException("No offer token found for subscription $sku")
productDetailsParamsBuilder.setOfferToken(offerToken)
}
val productDetailsParams = productDetailsParamsBuilder.build()
val params = BillingFlowParams.newBuilder()
.setProductDetailsParamsList(listOf(productDetailsParams))
oldPurchase?.let {
params.setSubscriptionUpdateParams(
SubscriptionUpdateParams.newBuilder()
.setOldSkuPurchaseToken(it.purchaseToken)
.setReplaceSkusProrationMode(ProrationMode.IMMEDIATE_WITH_TIME_PRORATION)
.setOldPurchaseToken(it.purchaseToken)
.setSubscriptionReplacementMode(BillingFlowParams.SubscriptionUpdateParams.ReplacementMode.WITH_TIME_PRORATION)
.build()
)
}
if (activity is OnPurchasesUpdated) {
onPurchasesUpdated = activity
}
@ -174,11 +250,11 @@ class BillingClientImpl(
)
}
private suspend fun executeServiceRequest(runnable: suspend () -> Unit) {
private suspend fun <T> executeServiceRequest(runnable: suspend () -> T): T {
if (!connected) {
connect()
}
runnable()
return runnable()
}
override suspend fun consume(sku: String) {
@ -190,17 +266,28 @@ class BillingClientImpl(
ConsumeParams.newBuilder().setPurchaseToken(purchase.purchaseToken).build(),
)
Timber.d("consume purchase: ${result.billingResult.responseCodeString}")
queryPurchases()
queryPurchases(throwError = false)
}
}
private data class PurchasesResult(
val billingResult: BillingResult,
val purchasesList: List<com.android.billingclient.api.Purchase>
) {
val success: Boolean
get() = billingResult.responseCode == BillingResponseCode.OK
val responseCodeString: String
get() = billingResult.responseCodeString
val purchases: List<com.android.billingclient.api.Purchase>
get() = purchasesList
}
companion object {
const val TYPE_SUBS = SkuType.SUBS
const val TYPE_SUBS = ProductType.SUBS
const val STATE_PURCHASED = PurchaseState.PURCHASED
private val PurchasesResult.success: Boolean
get() = billingResult.responseCode == BillingResponseCode.OK
private val BillingResult.success: Boolean
get() = responseCode == BillingResponseCode.OK
@ -227,11 +314,5 @@ class BillingClientImpl(
PurchaseState.PENDING -> "PENDING"
else -> this.toString()
}
private val PurchasesResult.responseCodeString: String
get() = billingResult.responseCodeString
private val PurchasesResult.purchases: List<com.android.billingclient.api.Purchase>
get() = purchasesList
}
}

@ -31,7 +31,7 @@ class Purchase(private val purchase: Purchase) {
get() = purchase.signature
val sku: String
get() = purchase.skus.first()
get() = purchase.products.first()
val purchaseToken: String
get() = purchase.purchaseToken
@ -55,7 +55,7 @@ class Purchase(private val purchase: Purchase) {
get() {
val matcher = PATTERN.matcher(sku)
if (matcher.matches()) {
val price = matcher.group(2).toInt()
val price = matcher.group(2)?.toInt()
return if (price == 499) 5 else price
}
return null

@ -1,10 +1,17 @@
package org.tasks.injection
import android.content.Context
import com.google.android.horologist.annotations.ExperimentalHorologistApi
import com.google.android.horologist.data.WearDataLayerRegistry
import com.google.android.horologist.datalayer.phone.PhoneDataLayerAppHelper
import dagger.Lazy
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import kotlinx.coroutines.CoroutineScope
import org.tasks.extensions.wearDataLayerRegistry
import org.tasks.location.Geocoder
import org.tasks.location.GeocoderMapbox
import org.tasks.location.GoogleMapFragment
@ -14,6 +21,9 @@ import org.tasks.location.LocationServiceGooglePlay
import org.tasks.location.MapFragment
import org.tasks.location.OsmMapFragment
import org.tasks.play.PlayServices
import org.tasks.wear.WearRefresher
import org.tasks.wear.WearRefresherImpl
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
@ -34,4 +44,30 @@ class FlavorModule {
@Provides
fun getGeocoder(mapbox: GeocoderMapbox): Geocoder = mapbox
@OptIn(ExperimentalHorologistApi::class)
@Provides
fun wearDataLayerRegistry(
@ApplicationContext applicationContext: Context,
@ApplicationScope coroutineScope: CoroutineScope,
) = applicationContext.wearDataLayerRegistry(coroutineScope)
@OptIn(ExperimentalHorologistApi::class)
@Provides
fun phoneDataLayerAppHelper(
@ApplicationContext applicationContext: Context,
wearDataLayerRegistry: WearDataLayerRegistry,
) = PhoneDataLayerAppHelper(
context = applicationContext,
registry = wearDataLayerRegistry,
)
@OptIn(ExperimentalHorologistApi::class)
@Provides
@Singleton
fun getWearRefresher(
phoneDataLayerAppHelper: PhoneDataLayerAppHelper,
wearDataLayerRegistry: WearDataLayerRegistry,
@ApplicationScope scope: CoroutineScope,
): WearRefresher = WearRefresherImpl(phoneDataLayerAppHelper, wearDataLayerRegistry, scope)
}

@ -2,6 +2,7 @@ package org.tasks.location
import android.annotation.SuppressLint
import android.content.Context
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.maps.CameraUpdateFactory
import com.google.android.gms.maps.GoogleMap
@ -23,14 +24,18 @@ class GoogleMapFragment @Inject constructor(
private var map: GoogleMap? = null
private var circle: Circle? = null
override fun init(activity: AppCompatActivity, callback: MapFragmentCallback, dark: Boolean) {
override fun init(activity: AppCompatActivity, callback: MapFragmentCallback, dark: Boolean, parent: ViewGroup?) {
this.callback = callback
this.dark = dark
val fragmentManager = activity.supportFragmentManager
var mapFragment = fragmentManager.findFragmentByTag(FRAG_TAG_MAP) as SupportMapFragment?
if (mapFragment == null) {
mapFragment = SupportMapFragment()
fragmentManager.beginTransaction().replace(R.id.map, mapFragment).commit()
if (parent == null) {
fragmentManager.beginTransaction().replace(R.id.map, mapFragment).commit()
} else {
fragmentManager.beginTransaction().add(parent, mapFragment, null).commit()
}
}
mapFragment.getMapAsync(this)
}

@ -0,0 +1,100 @@
package org.tasks.sync.microsoft
import android.app.Activity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.microsoft.identity.client.AcquireTokenParameters
import com.microsoft.identity.client.AuthenticationCallback
import com.microsoft.identity.client.IAuthenticationResult
import com.microsoft.identity.client.Prompt
import com.microsoft.identity.client.PublicClientApplication
import com.microsoft.identity.client.exception.MsalException
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.tasks.R
import org.tasks.analytics.Constants
import org.tasks.analytics.Firebase
import org.tasks.data.UUIDHelper
import org.tasks.data.dao.CaldavDao
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_MICROSOFT
import org.tasks.extensions.Context.toast
import org.tasks.jobs.WorkManager
import org.tasks.sync.SyncAdapters
import timber.log.Timber
import javax.inject.Inject
@HiltViewModel
class MicrosoftSignInViewModel @Inject constructor(
private val caldavDao: CaldavDao,
private val firebase: Firebase,
private val syncAdapters: SyncAdapters,
private val workManager: WorkManager,
) : ViewModel() {
fun signIn(activity: Activity) {
viewModelScope.launch(Dispatchers.IO) {
val app = PublicClientApplication.createMultipleAccountPublicClientApplication(
activity,
R.raw.microsoft_config
)
val parameters = AcquireTokenParameters.Builder()
.startAuthorizationFromActivity(activity)
.withScopes(scopes)
.withPrompt(Prompt.SELECT_ACCOUNT)
.withCallback(object : AuthenticationCallback {
override fun onSuccess(authenticationResult: IAuthenticationResult) {
val email = authenticationResult.account.claims?.get("preferred_username") as? String
if (email == null) {
Timber.e("No email found")
return
}
Timber.d("Successfully signed in")
viewModelScope.launch {
caldavDao
.getAccount(TYPE_MICROSOFT, email)
?.let {
caldavDao.update(
it.copy(error = null)
)
}
?: caldavDao
.insert(
CaldavAccount(
uuid = UUIDHelper.newUUID(),
name = email,
username = email,
accountType = TYPE_MICROSOFT,
)
)
.also {
firebase.logEvent(
R.string.event_sync_add_account,
R.string.param_type to Constants.SYNC_TYPE_MICROSOFT
)
}
syncAdapters.sync(true)
workManager.updateBackgroundSync()
}
}
override fun onError(exception: MsalException?) {
Timber.e(exception)
activity.toast(exception?.message ?: exception?.javaClass?.simpleName ?: "Sign in failed")
}
override fun onCancel() {
Timber.d("onCancel")
}
})
.build()
app.acquireToken(parameters)
}
}
companion object {
val scopes = listOf("https://graph.microsoft.com/.default")
}
}

@ -0,0 +1,39 @@
package org.tasks.sync.microsoft
import android.content.Context
import com.microsoft.identity.client.AcquireTokenSilentParameters
import com.microsoft.identity.client.PublicClientApplication
import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.R
import org.tasks.data.entity.CaldavAccount
import timber.log.Timber
import javax.inject.Inject
class MicrosoftTokenProvider @Inject constructor(
@ApplicationContext private val context: Context,
) {
fun getToken(account: CaldavAccount): String {
val app = PublicClientApplication.createMultipleAccountPublicClientApplication(
context,
R.raw.microsoft_config
)
val result = try {
val msalAccount = app.accounts.firstOrNull { it.username == account.username }
?: throw RuntimeException("No matching account found")
val parameters = AcquireTokenSilentParameters.Builder()
.withScopes(MicrosoftSignInViewModel.scopes)
.forAccount(msalAccount)
.fromAuthority(msalAccount.authority)
.forceRefresh(true)
.build()
app.acquireTokenSilent(parameters)
} catch (e: Exception) {
Timber.e(e)
throw RuntimeException("Authentication failed: ${e.message}")
}
return result.accessToken
}
}

@ -0,0 +1,65 @@
package org.tasks.wear
import android.text.format.DateFormat
import androidx.datastore.core.DataStore
import androidx.lifecycle.lifecycleScope
import com.google.android.horologist.annotations.ExperimentalHorologistApi
import com.google.android.horologist.data.ProtoDataStoreHelper.protoDataStore
import com.google.android.horologist.data.WearDataLayerRegistry
import com.google.android.horologist.datalayer.grpc.server.BaseGrpcDataService
import com.todoroo.astrid.dao.TaskDao
import com.todoroo.astrid.service.TaskCompleter
import com.todoroo.astrid.service.TaskCreator
import dagger.hilt.android.AndroidEntryPoint
import org.tasks.GrpcProto.Settings
import org.tasks.WearServiceGrpcKt
import org.tasks.analytics.Firebase
import org.tasks.billing.Inventory
import org.tasks.extensions.wearDataLayerRegistry
import org.tasks.filters.FilterProvider
import org.tasks.preferences.DefaultFilterProvider
import org.tasks.preferences.Preferences
import org.tasks.tasklist.HeaderFormatter
import org.tasks.themes.ColorProvider
import javax.inject.Inject
@OptIn(ExperimentalHorologistApi::class)
@AndroidEntryPoint
class WearDataService : BaseGrpcDataService<WearServiceGrpcKt.WearServiceCoroutineImplBase>() {
@Inject lateinit var taskDao: TaskDao
@Inject lateinit var preferences: Preferences
@Inject lateinit var taskCompleter: TaskCompleter
@Inject lateinit var headerFormatter: HeaderFormatter
@Inject lateinit var firebase: Firebase
@Inject lateinit var filterProvider: FilterProvider
@Inject lateinit var inventory: Inventory
@Inject lateinit var colorProvider: ColorProvider
@Inject lateinit var defaultFilterProvider: DefaultFilterProvider
@Inject lateinit var taskCreator: TaskCreator
override val registry: WearDataLayerRegistry by lazy {
applicationContext.wearDataLayerRegistry(lifecycleScope)
}
private val settings: DataStore<Settings> by lazy {
registry.protoDataStore(lifecycleScope)
}
override fun buildService(): WearServiceGrpcKt.WearServiceCoroutineImplBase {
return WearService(
taskDao = taskDao,
appPreferences = preferences,
taskCompleter = taskCompleter,
headerFormatter = headerFormatter,
settings = settings,
firebase = firebase,
filterProvider = filterProvider,
inventory = inventory,
colorProvider = colorProvider,
defaultFilterProvider = defaultFilterProvider,
taskCreator = taskCreator,
is24HourTime = DateFormat.is24HourFormat(applicationContext),
)
}
}

@ -0,0 +1,16 @@
package org.tasks.wear
import org.tasks.GrpcProto.Settings
import org.tasks.preferences.Preferences
import org.tasks.preferences.QueryPreferences
class WearPreferences(
preferences: Preferences,
private val settings: Settings,
): QueryPreferences by preferences {
override val showHidden: Boolean
get() = settings.showHidden
override val showCompleted: Boolean
get() = settings.showCompleted
}

@ -0,0 +1,50 @@
package org.tasks.wear
import androidx.datastore.core.DataStore
import com.google.android.horologist.annotations.ExperimentalHorologistApi
import com.google.android.horologist.data.ProtoDataStoreHelper.protoDataStore
import com.google.android.horologist.data.WearDataLayerRegistry
import com.google.android.horologist.datalayer.phone.PhoneDataLayerAppHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import org.tasks.GrpcProto.LastUpdate
import org.tasks.copy
import timber.log.Timber
@OptIn(ExperimentalHorologistApi::class)
class WearRefresherImpl(
phoneDataLayerAppHelper: PhoneDataLayerAppHelper,
private val registry: WearDataLayerRegistry,
private val scope: CoroutineScope,
) : WearRefresher {
private var watchConnected = false
init {
phoneDataLayerAppHelper
.connectedAndInstalledNodes
.catch { Timber.e("${it.message}") }
.onEach { nodes ->
Timber.d("Connected nodes: ${nodes.joinToString()}")
watchConnected = nodes.isNotEmpty()
lastUpdate.update()
}
.launchIn(scope)
}
private val lastUpdate: DataStore<LastUpdate> by lazy {
registry.protoDataStore<LastUpdate>(scope)
}
override suspend fun refresh() {
if (watchConnected) {
lastUpdate.update()
}
}
}
private suspend fun DataStore<LastUpdate>.update() {
updateData { it.copy { now = System.currentTimeMillis() } }
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save