mirror of https://github.com/tasks/tasks
Compare commits
No commits in common. 'main' and '11.9.2' have entirely different histories.
@ -1,4 +1,5 @@
|
||||
github: abaker
|
||||
liberapay: tasks
|
||||
open_collective: tasks
|
||||
patreon: tasks
|
||||
custom: tasks.org/donate
|
||||
|
@ -1,49 +0,0 @@
|
||||
name: Assemble bundle
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
check:
|
||||
uses: ./.github/workflows/check.yml
|
||||
bundle:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [ check ]
|
||||
steps:
|
||||
- name: Decode Keystore
|
||||
run: |
|
||||
echo ${{ secrets.KEY_STORE }} | base64 -di > "${RUNNER_TEMP}"/keystore.jks
|
||||
- uses: actions/checkout@v4
|
||||
- uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '17'
|
||||
cache: 'gradle'
|
||||
- name: Grant execute permission for gradlew
|
||||
run: chmod +x gradlew
|
||||
- name: Bundle
|
||||
env:
|
||||
KEY_PATH: ${{ runner.temp }}/keystore.jks
|
||||
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
|
||||
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
|
||||
KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
|
||||
MAPBOX_KEY: ${{ secrets.MAPBOX_KEY }}
|
||||
GOOGLE_KEY: ${{ secrets.GOOGLE_KEY }}
|
||||
run: bundle exec fastlane bundle
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: release
|
||||
path: |
|
||||
app/build/outputs/**
|
||||
wear/build/outputs/**
|
@ -1,91 +0,0 @@
|
||||
name: Run automated checks
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
workflow_call:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '17'
|
||||
cache: 'gradle'
|
||||
- name: Grant execute permission for gradlew
|
||||
run: chmod +x gradlew
|
||||
- name: Lint checks
|
||||
run: bundle exec fastlane lint
|
||||
- name: Archive lint reports
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ always() }}
|
||||
with:
|
||||
name: lint-reports
|
||||
path: app/build/reports/*.html
|
||||
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
flavor: [Googleplay, Generic]
|
||||
api-level: [29]
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '17'
|
||||
cache: 'gradle'
|
||||
|
||||
- name: Enable KVM
|
||||
run: |
|
||||
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
|
||||
sudo udevadm control --reload-rules
|
||||
sudo udevadm trigger --name-match=kvm
|
||||
|
||||
# - name: AVD cache
|
||||
# uses: actions/cache@v4
|
||||
# id: avd-cache
|
||||
# with:
|
||||
# path: |
|
||||
# ~/.android/avd/*
|
||||
# ~/.android/adb*
|
||||
# key: avd-${{ matrix.api-level }}
|
||||
#
|
||||
# - name: create AVD and generate snapshot for caching
|
||||
# if: steps.avd-cache.outputs.cache-hit != 'true'
|
||||
# uses: reactivecircus/android-emulator-runner@v2
|
||||
# with:
|
||||
# api-level: ${{ matrix.api-level }}
|
||||
# force-avd-creation: false
|
||||
# emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
|
||||
# disable-animations: false
|
||||
# script: echo "Generated AVD snapshot for caching."
|
||||
|
||||
- name: run tests
|
||||
uses: reactivecircus/android-emulator-runner@v2
|
||||
with:
|
||||
api-level: ${{ matrix.api-level }}
|
||||
force-avd-creation: false
|
||||
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
|
||||
disable-animations: true
|
||||
script: ./gradlew -Pcoverage app:test${{ matrix.flavor }}DebugUnitTest app:connected${{ matrix.flavor }}DebugAndroidTest
|
||||
|
||||
- name: Upload test reports
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ always() }}
|
||||
with:
|
||||
name: test-reports-${{ matrix.flavor }}
|
||||
path: app/build/reports/**
|
@ -0,0 +1,22 @@
|
||||
# This workflow will build a Java project with Gradle
|
||||
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle
|
||||
|
||||
name: Check licenses
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: '11.0.8'
|
||||
- name: Grant execute permission for gradlew
|
||||
run: chmod +x gradlew
|
||||
- name: Build with Gradle
|
||||
run: ./gradlew checkLicense
|
@ -0,0 +1,19 @@
|
||||
name: Lint
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: '11.0.8'
|
||||
- name: Grant execute permission for gradlew
|
||||
run: chmod +x gradlew
|
||||
- name: Build with Gradle
|
||||
run: ./gradlew :app:lintGenericRelease :app:lintGoogleplayRelease
|
@ -0,0 +1,23 @@
|
||||
name: Run tests
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v2
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: '11.0.8'
|
||||
- name: run tests
|
||||
uses: reactivecircus/android-emulator-runner@v2
|
||||
with:
|
||||
api-level: 29
|
||||
script: ./gradlew -Pcoverage :app:jacocoTestReportGoogleplayDebug :app:createGoogleplayDebugAndroidTestCoverageReport
|
||||
- name: upload coverage
|
||||
uses: codecov/codecov-action@v1
|
||||
with:
|
||||
directory: ./app/build
|
@ -1 +0,0 @@
|
||||
3.3.5
|
@ -1,70 +0,0 @@
|
||||
<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,474 +1,372 @@
|
||||
### 14.0.1 (2024-11-09)
|
||||
### 11.9.2 (2021-03-29)
|
||||
|
||||
* Fix widget crash
|
||||
* Fix date translation issue - Thanks @mhmdanas!
|
||||
* Fix misc translation strings - Thanks J. Lavoie!
|
||||
* 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
|
||||
* Dutch - @fvbommel
|
||||
* French - @FlorianLeChat
|
||||
* German - @p-rogalski, @franconian
|
||||
* Hungarian - Kaci
|
||||
* Italian - @ppasserini
|
||||
* Spanish - gallegonovato
|
||||
* Swedish - @bittin
|
||||
* Turkish - @oersen
|
||||
* German - @franconian, Achim Schumacher, J. Lavoie
|
||||
* Hungarian - kaciokos
|
||||
* Indonesian - when we were sober
|
||||
* Italian - @Fs00
|
||||
* Simplified Chinese - @sr093906
|
||||
* Spanish - @FlorianLeChat
|
||||
* Turkish - @emintufan
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
|
||||
### 13.11.2 (2024-09-29)
|
||||
### 11.9.1 (2021-03-25)
|
||||
|
||||
* 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
|
||||
* Open documentation links in custom tabs
|
||||
* Fix crash in Mapbox reverse geocoder
|
||||
* Increase 'Add subtask' touch target
|
||||
* Update translations
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
|
||||
### 13.11 (2024-07-14)
|
||||
|
||||
* New icon picker with over 2,100 icons! (pro feature)
|
||||
* Fix Todo Agenda Widget integration [todoagenda/#145](https://github.com/andstatus/todoagenda/issues/145)
|
||||
* Fix menu search bar on Android 10 and below [#2966](https://github.com/tasks/tasks/issues/2966)
|
||||
* Arabic - @mhmdanas
|
||||
* German - Achim Schumacher
|
||||
* Hungarian - kaciokos
|
||||
* Italian - @Fs00
|
||||
* Turkish - @emintufan
|
||||
|
||||
### 11.9 (2021-03-20)
|
||||
|
||||
* New calendar and clock pickers
|
||||
* New preference to default to text input for date and time
|
||||
* Fix issue causing Tasks to use wrong search provider
|
||||
* Fix crash when Nextcloud/ownCloud don't send list owner
|
||||
* Update translations
|
||||
* Brazilian Portuguese - Jose Delvani
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
* Catalan - @Seveorr, @jtorrensamer
|
||||
* Chinese (Simplified) - 大王叫我来巡山
|
||||
* Chinese (Traditional) - hugoalh
|
||||
* Basque - Sergio Varela
|
||||
* Croatian - @milotype
|
||||
* Dutch - @fvbommel
|
||||
* French - @FlorianLeChat
|
||||
* Spanish - gallegonovato
|
||||
* Turkish - @oersen
|
||||
* German - Achim Schumacher
|
||||
* Hungarian - kaciokos
|
||||
* Indonesian - when we were sober
|
||||
* Simplified Chinese - @sr093906
|
||||
* Spanish - @FlorianLeChat
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
|
||||
### 13.10 (2024-07-05)
|
||||
### 11.8 (2021-03-15)
|
||||
|
||||
* Add search bar to drawer
|
||||
* Add search bar to list picker
|
||||
* Move 'Manage drawer' to ⚙️ > Navigation drawer
|
||||
* 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~~
|
||||
* CalDAV: Send shared list invites
|
||||
* Compatible with Tasks.org, Nextcloud, ownCloud, and sabre/dav
|
||||
* Show shared list invite status in list settings
|
||||
* Fix drawer count when list is shared with 2+ users
|
||||
* Removed legacy EteSync v1 list management features
|
||||
* Dropped support for Android 6.0
|
||||
* Update translations
|
||||
* Arabic - @islam2hamy
|
||||
* Brazilian Portuguese - Jose Delvani
|
||||
* Chinese (Simplified) - 大王叫我来巡山
|
||||
* Chinese (Traditional) - hugoalh
|
||||
* Croatian - @milotype
|
||||
* Finnish - Rami Lehtinen, @CSharpest
|
||||
* German - min7-i
|
||||
* Spanish - gallegonovato
|
||||
* Turkish - @oersen
|
||||
|
||||
### 13.9.9 (2024-05-30)
|
||||
|
||||
* Fix import backup crashes
|
||||
* Fix showing completed subtasks in edit screen
|
||||
|
||||
### 13.9.7 (2024-05-23)
|
||||
|
||||
* Add default reminders when adding start/due dates to existing tasks [#1846](https://github.com/tasks/tasks/issues/1846)
|
||||
* Fix import backup crash
|
||||
|
||||
### 13.9.6 (2024-05-18)
|
||||
* Arabic - @mhmdanas
|
||||
* Dutch - @fvbommel
|
||||
* Esperanto - @jakubfabijan
|
||||
* French - @FlorianLeChat
|
||||
* German - @Jerome2103
|
||||
* Hungarian - kaciokos
|
||||
* Indonesian - when we were sober, @andhikapangestu29
|
||||
* Norwegian Bokmål - @comradekingu
|
||||
* Polish - @doegedomita
|
||||
* Portuguese - @Jerome2103
|
||||
* Spanish - @FlorianLeChat
|
||||
* Turkish - Oğuz Ersen
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
|
||||
* Fix widget crash [#2873](https://github.com/tasks/tasks/issues/2873)
|
||||
* Fix recurrence unable to finish [#2874](https://github.com/tasks/tasks/issues/2874)
|
||||
* Fix edit screen being cleared when reopening app [#2857](https://github.com/tasks/tasks/issues/2857)
|
||||
* Fix performance regressions
|
||||
* Simplified internal alarm scheduling logic
|
||||
* Update translations
|
||||
* Arabic - @islam2hamy
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
### 11.7 (2021-03-08)
|
||||
|
||||
### 13.9 (2024-05-01)
|
||||
|
||||
* @elmuffo: Add swipe-to-snooze [#2839](https://github.com/tasks/tasks/pull/2839)
|
||||
* @IlyaBizyaev: Add option to use quick tile without unlocking device [#2847](https://github.com/tasks/tasks/pull/2847)
|
||||
* @liz-desartiges: Add support for Z Flip 5 cover screen [#2843](https://github.com/tasks/tasks/pull/2843)
|
||||
* @purushyb: Fix drawer not updating after editing items [#2855](https://github.com/tasks/tasks/pull/2855)
|
||||
* @hady-exc: Migrate tag picker screen to Compose [#2849](https://github.com/tasks/tasks/pull/2849)
|
||||
* @yurtpage: Add Russian app store description [#2848](https://github.com/tasks/tasks/pull/2848)
|
||||
* Fix duplicate notifications [#2835](https://github.com/tasks/tasks/issues/2835)
|
||||
* Fix adding '(Completed)' to calendar entries [#2832](https://github.com/tasks/tasks/issues/2832)
|
||||
* Fix hiding empty items from drawer [#2831](https://github.com/tasks/tasks/issues/2831)
|
||||
* Exclude old snoozed tasks from snoozed task filter
|
||||
* Update translations
|
||||
* Brazilian Portuguese - @mayhmemo, @gorgonun
|
||||
* Chinese (Simplified) - 大王叫我来巡山
|
||||
* Croatian - @milotype
|
||||
* Esperanto - Don Zouras
|
||||
* French - Lionel HANNEQUIN
|
||||
* German - sorifukobexomajepasiricupuva33, min7-i
|
||||
* Portuguese - @fparri, @laralem
|
||||
* Spanish - gallegonovato
|
||||
* Swedish - @JonatanWick
|
||||
* Turkish - @emintufan, @oersen
|
||||
|
||||
### 13.8.1 (2024-03-24)
|
||||
|
||||
* Fix copy causing duplicate Google Tasks
|
||||
* Fix navigation drawer crash
|
||||
* Fix backup import dropping tasks
|
||||
|
||||
### 13.8 (2024-03-22)
|
||||
|
||||
* Dynamic widget theme (name-your-price subscription required)
|
||||
* Replace 'until' with 'ends on' for repeating tasks [#2797](https://github.com/tasks/tasks/pull/2797) - @akwala
|
||||
* Fix loading selected list on startup [#2777](https://github.com/tasks/tasks/issues/2777)
|
||||
* Fix repeating tasks ending one day early
|
||||
* Fix repeating task crash
|
||||
* Fix backup import crash
|
||||
* Fix Astrid manual ordering crash in widget
|
||||
* Update translations
|
||||
* Brazilian Portuguese - @mayhmemo
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
* Catalan - @ferranpujolcamins
|
||||
* Chinese (Simplified) - 大王叫我来巡山
|
||||
* Croatian - @milotype
|
||||
* Czech - Odweta
|
||||
* German - @macpac59
|
||||
* Italian - @ppasserini
|
||||
* Spanish - gallegonovato
|
||||
* Swedish - @bittin
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
* Vietnamese - @ngocanhtve
|
||||
|
||||
### 13.7 (2024-02-07)
|
||||
|
||||
* Fix returning to previous filter after search [#2700](https://github.com/tasks/tasks/pull/2700)
|
||||
* Fix wearable notifications on Android 14+
|
||||
* Fix issue causing repeating tasks to not repeat
|
||||
* Fix dragging a task into a subtask in another list
|
||||
* Rewrote navigation drawer in Jetpack Compose
|
||||
* Internal changes to navigation
|
||||
* Enable multi-select when adding attachments
|
||||
* Show count of tasks to be deleted when clearing completed
|
||||
* Include hidden subtasks when clearing completed [#2724](https://github.com/tasks/tasks/issues/2724)
|
||||
* Don't show hidden or completed tasks in snoozed filter
|
||||
* Remove markdown from repeating task snackbar
|
||||
* Update translations
|
||||
* Azerbaijani - Shaban Mamedov
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
* Catalan - raulmagdalena
|
||||
* Chinese (Simplified) - 大王叫我来巡山
|
||||
* Chinese (Traditional) - @abc0922001
|
||||
* Croatian - @milotype
|
||||
* Dutch - @mm4c
|
||||
* Esperanto - Don Zouras
|
||||
* Finnish - @millerii
|
||||
* French - J. Lavoie
|
||||
* German - @CennoxX
|
||||
* Hebrew - @elig0n
|
||||
* Interlingua - @softinterlingua
|
||||
* Odia - @SubhamJena
|
||||
* Persian - @Monirzadeh
|
||||
* Spanish - gallegonovato
|
||||
* Swedish - @bittin
|
||||
* Turkish - @oersen
|
||||
* Ukrainian - Сергій
|
||||
* Vietnamese - @ngocanhtve
|
||||
|
||||
### 13.6.3 (2023-11-25)
|
||||
|
||||
* Revert "Preserve modification times on initial sync" [#2460](https://github.com/tasks/tasks/issues/2640)
|
||||
* Fix unnecessary DecSync work
|
||||
|
||||
### 13.6.2 (2023-10-30)
|
||||
|
||||
* Fix updating modification timestamp on edits
|
||||
|
||||
### 13.6.1 (2023-10-27)
|
||||
|
||||
* Push pending changes when app is backgrounded
|
||||
* Don't require internet connection for DAVx5/EteSync/DecSync sync
|
||||
* Don't perform background sync for DAVx5/EteSync/DecSync
|
||||
* Background sync is performed by the sync app
|
||||
* Preserve modification times on initial sync [#2496](https://github.com/tasks/tasks/issues/2496)
|
||||
* Replace deprecated method call [#2547](https://github.com/tasks/tasks/pull/2547) - @kmj-99
|
||||
* Improve task list scrolling performance
|
||||
* Fix hourly recurrence bug
|
||||
* CalDAV: Display shared list members in list settings
|
||||
* Compatible with Tasks.org, Nextcloud, ownCloud, OpenXchange, and sabre/dav
|
||||
* CalDAV: List owners can remove shared list members from list
|
||||
* Compatible with Tasks.org, Nextcloud, ownCloud, and sabre/dav
|
||||
* Fix time zone issue in recurrence picker
|
||||
* Update translations
|
||||
* Chinese (Simplified) - Eric
|
||||
* Croatian - @milotype
|
||||
* Czech - @ceskyDJ
|
||||
* Finnish - @millerii
|
||||
* French - Lionel HANNEQUIN, Bruno Duyé
|
||||
* Japanese - Kazushi Hayama
|
||||
* Portuguese - @loucurapt
|
||||
* Romanian - @ygorigor
|
||||
* Swedish - @bittin
|
||||
|
||||
### 13.6 (2023-10-07)
|
||||
|
||||
* Change priority with multi-select [#2257](https://github.com/tasks/tasks/pull/2452) - @vulewuxe86
|
||||
* Automatically select newly copied tasks [#2246](https://github.com/tasks/tasks/pull/2446) - @vulewuxe86
|
||||
* Reduce minimum size for widgets [#2436](https://github.com/tasks/tasks/pull/2436) - @histefanhere
|
||||
* Replace deprecated method call [#2526](https://github.com/tasks/tasks/pull/2526) - @kmj-99
|
||||
* Improve handling text shared to Tasks [#2485](https://github.com/tasks/tasks/issues/2485)
|
||||
* Use notification audio stream for completion sound
|
||||
* Notification preference 'More settings' opens channel settings directly
|
||||
* Respect 'New tasks on top' preference when creating subtasks
|
||||
* Automatically add due dates for recurring tasks
|
||||
* Fix crash on startup
|
||||
* Update translations
|
||||
* Brazilian Portuguese - @gorgonun
|
||||
* Bulgarian - @StoyanDimitrov, @salif
|
||||
* Catalan - Joan Montané
|
||||
* Chinese (Simplified) - Poesty Li
|
||||
* Chinese (Traditional) - @abc0922001
|
||||
* Arabic - @mhmdanas
|
||||
* Basque - Sergio Varela
|
||||
* Dutch - @fvbommel
|
||||
* French - @FlorianLeChat
|
||||
* German - @qwerty287, deep map, @franconian
|
||||
* Hungarian - Kaci
|
||||
* Italian - @ppasserini
|
||||
* Japanese - Kazushi Hayama, Naga
|
||||
* Hungarian - kaciokos
|
||||
* Indonesian - @putulopi
|
||||
* Simplified Chinese - @sr093906
|
||||
* Spanish - @FlorianLeChat
|
||||
* Swedish - @Anaemix, @bittin
|
||||
* Turkish - @emintufan, @oersen
|
||||
* Turkish - @emintufan, Oğuz Ersen
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
|
||||
### 13.5.1 (2023-08-02)
|
||||
### 11.6.1 (2021-03-11)
|
||||
|
||||
* Fix crash when importing Google Tasks from a backup file
|
||||
* Added Burmese translations - @htetoh
|
||||
* Update translations
|
||||
* Chinese (Simplified) - Poesty Li
|
||||
* Croatian - @milotype
|
||||
* Japanese - Kazushi Hayama
|
||||
* Polish - @alex-ter
|
||||
* Russian - @alex-ter
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
* Vietnamese - @unbiaseduser
|
||||
* F-Droid: Fix OpenStreetMap crash
|
||||
|
||||
### 13.5 (2023-07-28)
|
||||
### 11.6 (2021-03-04)
|
||||
|
||||
* New custom recurrence picker
|
||||
* CalDAV: Display indicator in drawer when a list is shared with other users
|
||||
* Compatible with Tasks.org, Nextcloud, ownCloud, OpenXchange, and sabre/dav
|
||||
* CalDAV: Don't upload changes to read-only lists
|
||||
([#931](https://github.com/tasks/tasks/issues/931))
|
||||
* Remove unnecessary icon-mirroring for RTL users
|
||||
([#1385](https://github.com/tasks/tasks/issues/1385) and
|
||||
[#1391](https://github.com/tasks/tasks/pull/1391)) - Thanks to @mhmdanas
|
||||
* Update translations
|
||||
* Arabic - @mhmdanas
|
||||
* Basque - Sergio Varela
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
* Czech - @ceskyDJ
|
||||
* Czech - @vitSkalicky
|
||||
* Dutch - @fvbommel
|
||||
* French - @FlorianLeChat
|
||||
* Italian - @ppasserini
|
||||
* Hungarian - kaciokos
|
||||
* Indonesian - @putulopi
|
||||
* Russian - Nikita Epifanov
|
||||
* Simplified Chinese - @sr093906
|
||||
* Sinhala - HelaBasa
|
||||
* Spanish - @FlorianLeChat
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
|
||||
### 13.4 - (2023-07-16)
|
||||
### 11.5.2 (2021-02-25)
|
||||
|
||||
* Sorting improvements
|
||||
* Add subtask sort configuration
|
||||
* Update sort menu button design
|
||||
* Don't show subtasks of hidden tasks in 'My Tasks'
|
||||
* Fix Google Tasks sync issue
|
||||
* Update translations
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
* Catalan - @and4po, Eudald Puy Polls
|
||||
* Croatian - @milotype
|
||||
* Dutch - @fvbommel
|
||||
* German - @schneidr
|
||||
* Hungarian - Kaci
|
||||
* Japanese - Naga
|
||||
* Korean - Sunjae Choi
|
||||
* Portuguese - @laralem
|
||||
* Swedish - @bittin
|
||||
|
||||
### 13.3.2 - (2023-06-02)
|
||||
|
||||
* Sorting improvements
|
||||
* Configure sort grouping
|
||||
* Configure sorting within sort group
|
||||
* Configure completed task sorting
|
||||
* Fix Google Task list chips showing on widget
|
||||
* Fix CalDAV sync error
|
||||
* Report errors when generating recurrence dates
|
||||
|
||||
### 11.5.1 (2021-02-24)
|
||||
|
||||
* Fix 'repeat until' date
|
||||
* Fix repeat dates for UTC+13
|
||||
([#1374](https://github.com/tasks/tasks/issues/1374))
|
||||
* F-Droid: Handle null name in Nominatim reverse geocoder
|
||||
([#1380](https://github.com/tasks/tasks/issues/1380))
|
||||
* Update translations
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
* Catalan - @and4po
|
||||
* Chinese (Simplified) - Poesty Li
|
||||
* Croatian - @milotype
|
||||
* Basque - Sergio Varela
|
||||
* Croatian - @ggdorman
|
||||
* Dutch - @fvbommel
|
||||
* French - @FlorianLeChat
|
||||
* German - @qwerty287, @franconian
|
||||
* Hungarian - Kaci
|
||||
* Italian - @ppasserini
|
||||
* Hungarian - kaciokos
|
||||
* Norwegian Bokmål - @comradekingu
|
||||
* Polish - @alex-ter
|
||||
* Russian - Nikita Epifanov
|
||||
* Simplified Chinese - @sr093906
|
||||
* Spanish - @FlorianLeChat
|
||||
* Turkish - Oğuz Ersen
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
|
||||
### 13.2.4 - (2023-05-24)
|
||||
* Add 'By list' sort mode [#1265](https://github.com/tasks/tasks/issues/1265)
|
||||
* Save task when pressing done [#2125](https://github.com/tasks/tasks/pull/2125)
|
||||
* Use ISO 8601 date formatting for backup filenames [#1550](https://github.com/tasks/tasks/pull/1550)
|
||||
* Fix filter sorting bug [#1561](https://github.com/tasks/tasks/issues/1561)
|
||||
* Fix manual sorting crash [#2141](https://github.com/tasks/tasks/issues/2141)
|
||||
* Fix manual sorting bug [#2101](https://github.com/tasks/tasks/issues/2101)
|
||||
* Fix multiple accounts on same server [#2301](https://github.com/tasks/tasks/issues/2301)
|
||||
* Don't set `COUNT=0` on recurrence rules [#2158](https://github.com/tasks/tasks/issues/2158)
|
||||
* Improve task list performance [#2062](https://github.com/tasks/tasks/issues/2062)
|
||||
* Attempt to hide inactive widgets in settings [#2145](https://github.com/tasks/tasks/issues/2145)
|
||||
* Disable persistent reminders on Android 14+
|
||||
* Android 14+ no longer supports persistent reminders 😢
|
||||
* Fix notifications on Android 14
|
||||
* Fix crash when missing exact alarm permissions
|
||||
* Update logic for adding default reminders during sync
|
||||
* Don't add reminders on initial sync
|
||||
* Don't add reminders if other client supports reminder sync
|
||||
* Internal database changes
|
||||
* You will need to reconfigure any widgets that were set to display a Google
|
||||
Task list or filter. Sorry for the interruption!
|
||||
* Add Odia translations - @SubhamJena
|
||||
* Urdu - Maaz
|
||||
|
||||
### 11.5 (2021-02-17)
|
||||
|
||||
* Sync snooze time with Tasks.org, DAVx⁵, CalDAV, EteSync, and DecSync
|
||||
* Compatible with Thunderbird
|
||||
* New map theme preference
|
||||
* 10 new icons
|
||||
* F-Droid: Use Nominatim for reverse geocoding
|
||||
* Google Play: Use OpenStreetMap tiles when Play Services not available
|
||||
* Google Play: Use Android location services when Play Services not available
|
||||
* Tasks.org accounts: Use Google Places for map search
|
||||
* Update translations
|
||||
* Brazilian Portuguese - @lnux-usr
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
* Catalan - @and4po
|
||||
* Chinese (Simplified) - Poesty Li
|
||||
* Chinese (Traditional) - Chih-Hsuan Yen
|
||||
* Croatian - @milotype
|
||||
* Dutch - @fvbommel
|
||||
* Esperanto - Don Zouras
|
||||
* Finnish - @millerii
|
||||
* French - @FlorianLeChat
|
||||
* Italian - @ppasserini
|
||||
* Japanese - @kisaragi-hiu, Naga
|
||||
* Korean - Sunjae Choi, @o20n3
|
||||
* Romanian - @simonaiacob
|
||||
* Russian - @AHOHNMYC
|
||||
* Hungarian - kaciokos
|
||||
* Indonesian - when we were sober
|
||||
* Simplified Chinese - @sr093906
|
||||
* Spanish - @FlorianLeChat
|
||||
* Turkish - @ersen0
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
|
||||
### 13.1.2 (2023-02-02)
|
||||
|
||||
* Add default reminders to incoming iCalendar tasks [#1984](https://github.com/tasks/tasks/issues/1984)
|
||||
* Sync when brought to the foreground [#2096](https://github.com/tasks/tasks/issues/2096)
|
||||
* Update translations
|
||||
* Arabic - haidarah esmander
|
||||
* Czech - @SlavekB
|
||||
* Danish - Tntdruid
|
||||
* Esperanto - Don Zouras, @J053Fabi0
|
||||
* Finnish - @millerii
|
||||
* German - @franconian
|
||||
* Italian - @ppasserini
|
||||
* Japanese - Kazushi Hayama
|
||||
* Korean - @o20n3
|
||||
* Polish - @gnu-ewm
|
||||
* Vietnamese - @unbiaseduser
|
||||
|
||||
### 13.1.1 (2022-12-06)
|
||||
|
||||
* Fix crash when opening notification settings
|
||||
* Fix IAP errors in some locales
|
||||
* Update translations
|
||||
* Italian - @ppasserini
|
||||
* Japanese - Kazushi Hayama
|
||||
|
||||
### 13.1.0 (2022-11-30)
|
||||
### 11.4 (2021-02-09)
|
||||
|
||||
* Support for DAVx5 and CalDAV read-only lists [#931](https://github.com/tasks/tasks/issues/931)
|
||||
* Use default Android network security configuration
|
||||
* Update translations
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
* Chinese (Simplified) - Eric
|
||||
* Croatian - @milotype
|
||||
* Sync collapsed subtask state with Tasks.org, DAVx⁵, CalDAV, EteSync, and
|
||||
DecSync ([#1339](https://github.com/tasks/tasks/issues/1339))
|
||||
* Compatible with Nextcloud and ownCloud
|
||||
* F-Droid: Add location based reminders ([#770](https://github.com/tasks/tasks/issues/770))
|
||||
* F-Droid: Replace Mapbox tiles with OpenStreetMap tiles ([#922](https://github.com/tasks/tasks/issues/922))
|
||||
* Fix default start date ([#1350](https://github.com/tasks/tasks/issues/1350))
|
||||
|
||||
### 11.3.4 (2021-02-03)
|
||||
|
||||
* Adjust start times by one second during sync
|
||||
([#1326](https://github.com/tasks/tasks/issues/1326))
|
||||
* Can now sync start time = due time with DAVx⁵, EteSync app, and DecSync CC
|
||||
* All day start date must come before all day due date with DAVx⁵, EteSync
|
||||
app, and DecSync CC
|
||||
* 'Show unstarted' toggled on by default
|
||||
|
||||
### 11.3.3 (2021-01-30)
|
||||
|
||||
* Fix all-day due date synchronization
|
||||
([#1325](https://github.com/tasks/tasks/issues/1325))
|
||||
|
||||
### 11.3.2 (2021-01-28)
|
||||
|
||||
* Fix recurrence sync issue
|
||||
([#1323](https://github.com/tasks/tasks/issues/1323))
|
||||
|
||||
### 11.3.1 (2021-01-27)
|
||||
|
||||
* Improve support for recurring tasks with subtasks
|
||||
* Subtasks will be unchecked after completing a recurring task
|
||||
* Clear completed will not delete subtasks of recurring tasks
|
||||
* Improve widget sort header when space is limited
|
||||
* Add option to hide widget title
|
||||
* Fix timezone conversions during synchronization
|
||||
* Add Esperanto translations - @jakubfabijan
|
||||
|
||||
### 11.3 (2021-01-20)
|
||||
|
||||
* 'Hide until' is now 'Start date'
|
||||
* Synchronize start dates with Tasks.org, DAVx⁵, CalDAV, EteSync, and DecSync
|
||||
* New start date picker
|
||||
* New start date custom filter criteria
|
||||
* Add sort 'By start date'
|
||||
* Display start dates as chips
|
||||
* Don't perform background sync when data saver enabled
|
||||
* Preference changes
|
||||
* Add app and widget preferences to disable start date chips
|
||||
* Synchronization accounts displayed on main preference screen
|
||||
* Removed background sync and metered connection options (now respecting data
|
||||
saver mode)
|
||||
* Removed Google Tasks 'Custom order synchronization fix' (automatically
|
||||
performing full sync if 'My order' enabled)
|
||||
* Bug fixes
|
||||
|
||||
### 11.2.2 (2021-01-07)
|
||||
|
||||
* Rename 'Lists' to 'Local lists' to clarify that they are not synchronized
|
||||
* Tasks.org sign in improvements
|
||||
* Miscellaneous improvements - Thanks @mhmdanas!
|
||||
|
||||
### 11.2.1 (2021-01-05)
|
||||
|
||||
* Fix Portuguese translation issue
|
||||
* Report OpenTask sync errors
|
||||
* Report Tasks.org sign in errors
|
||||
* Don't crash on widget configuration error
|
||||
* Purchase dialog changes
|
||||
|
||||
### 11.2 (2020-12-30)
|
||||
|
||||
* [Synchronize your Tasks.org account with third-party task and calendar apps, like Outlook,
|
||||
Thunderbird, or Apple Reminders](https://tasks.org/passwords)
|
||||
* Miscellaneous improvements - Thanks @mhmdanas!
|
||||
|
||||
### 11.1.1 (2020-12-24)
|
||||
|
||||
* Fix compatibility issues with third-party clients
|
||||
* Completed tasks without completion dates
|
||||
([222a34f](https://github.com/tasks/tasks/commit/222a34fc263816bb23f633bc9c79de78aeb3968d))
|
||||
* Tasks with start date but no due date
|
||||
([7a1d566](https://github.com/tasks/tasks/commit/7a1d566bfb613b95d3fe1df46d8fa67200c91021))
|
||||
* Miscellaneous improvements - Thanks @mhmdanas!
|
||||
|
||||
### 11.1 (2020-12-21)
|
||||
|
||||
* Add [DecSync CC synchronization](https://tasks.org/decsync)
|
||||
* Fix rescheduling remotely completed recurring task
|
||||
([5eb9370](https://github.com/tasks/tasks/commit/5eb9370294ef707b3e667c4a42851030419920d8))
|
||||
* Miscellaneous code improvements - Thanks @mhmdanas!
|
||||
|
||||
### 11.0.1 (2020-12-17)
|
||||
|
||||
* Fix EteSync client issue with v2 accounts
|
||||
([b761309](https://github.com/tasks/tasks/commit/b76130902ae0be6e1d580d588798a9ed0d7ff385))
|
||||
* Fix multi-select 'Pick time' crash
|
||||
* Fix default hide until due time
|
||||
([#842](https://github.com/tasks/tasks/issues/842#issuecomment-746358382))
|
||||
* Add Croatian translations - Garden Hose
|
||||
* Add Urdu translations - Maaz
|
||||
|
||||
### 11.0 (2020-12-10)
|
||||
|
||||
* New Tasks.org synchronization service
|
||||
* Multi-select rescheduling
|
||||
* New task default settings
|
||||
* Default tags
|
||||
* Default recurrence
|
||||
* Default location
|
||||
* Hide until due time
|
||||
* New custom filter criteria
|
||||
* Hidden tasks
|
||||
* Completed tasks
|
||||
* Subtasks
|
||||
* Parent tasks
|
||||
* Recurring tasks
|
||||
* Added EteSync v2 support
|
||||
* Deprecated EteSync v1 support
|
||||
* v1 accounts cannot be added to Tasks.org
|
||||
* v1 accounts can be added to the EteSync Android client
|
||||
* Add ability to delete comments (Thanks to @romedius!)
|
||||
* Add option to always display date (Thanks to @T0M0F!)
|
||||
* Copy subtasks when copying tasks (Thanks to @supermzn!)
|
||||
* Fix ring five times cutoff (Thanks to @przemhb!)
|
||||
* Bug fixes
|
||||
* Translation updates
|
||||
* Arabic - @mhmdanas
|
||||
* Basque - @osoitz, @ppasserini
|
||||
* Dutch - @fvbommel
|
||||
* Finnish - @millerii
|
||||
* French - @FlorianLeChat
|
||||
* German - @helloworldtest123
|
||||
* Hungarian - Kaci
|
||||
* Italian - @ppasserini
|
||||
* Lithuanian - @70h
|
||||
* German - @franconian, J. Lavoie, @myabc
|
||||
* Hebrew - @yarons
|
||||
* Hungarian - kaciokos
|
||||
* Indonesian - @andikatuluspangestu
|
||||
* Italian - @ppasserini, @Fs00, @pjammo
|
||||
* Korean - Sunjae Choi, @Hwaro-K
|
||||
* Norwegian Bokmål - @comradekingu
|
||||
* Polish - @alex-ter
|
||||
* Russian - Nikita Epifanov
|
||||
* Simplified Chinese - @sr093906
|
||||
* Spanish - @FlorianLeChat
|
||||
* Turkish - @ersen0
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
* Traditional Chinese - @realpineapplemilk
|
||||
* Turkish - @emintufan, Oğuz Ersen
|
||||
|
||||
### 13.0.2 (2022-11-22)
|
||||
|
||||
* Fix persistent notifications on Android 13
|
||||
* Fix Samsung crash on too many reminders (DAVx5, EteSync, DecSync CC)
|
||||
* Fix crash on too many tasks for Astrid Manual Sorting
|
||||
* Fix RTL text in task edit customization screen
|
||||
* Fix priority button order
|
||||
|
||||
### 13.0.1 (2022-10-20)
|
||||
|
||||
* 🚨 Major internal changes to task edit screen. Please report any bugs! 🚨
|
||||
* Show thumbnails for attachments
|
||||
* Tap on existing alarms to replace them
|
||||
* Add task info row to edit screen [#1839](https://github.com/tasks/tasks/pull/1839)
|
||||
* Add option to disable reminders for all-day tasks [#2003](https://github.com/tasks/tasks/pull/2003)
|
||||
* Updated chip style
|
||||
* Show geofence circle in place settings
|
||||
* Fix removing preferences [#1981](https://github.com/tasks/tasks/pull/1981)
|
||||
* Set user-agent on HTTP requests [#1978](https://github.com/tasks/tasks/issues/1978)
|
||||
* Preserve HTTP session cookies [#1978](https://github.com/tasks/tasks/issues/1978)
|
||||
* Sort selected tags at top of tag picker
|
||||
* Android 13 support
|
||||
* Runtime notification permissions
|
||||
* Language preference
|
||||
* Improvements to copying tasks
|
||||
* Don't forget parent when copying tasks [#1964](https://github.com/tasks/tasks/pull/1964)
|
||||
* Copy attachments when duplicating tasks [#812](https://github.com/tasks/tasks/issues/812)
|
||||
* Fix duplicating subtasks
|
||||
* Fix some missing reminders
|
||||
* Incoming Google Tasks
|
||||
* Tasker tasks [#1937](https://github.com/tasks/tasks/issues/1937)
|
||||
* New subtasks [#1914](https://github.com/tasks/tasks/issues/1914)
|
||||
* Fix Google Task creation time
|
||||
* Fix EteSync stops synchronizing [#1893](https://github.com/tasks/tasks/issues/1893)
|
||||
* Don't overwrite coordinates when synchronizing locations [#1667](https://github.com/tasks/tasks/issues/1667)
|
||||
* Update translations
|
||||
* Asturian - @enolp
|
||||
* Basque - Sergio Varela
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
* Chinese (Simplified) - Eric
|
||||
* Croatian - @milotype
|
||||
* Czech - Shimon
|
||||
* Dutch - @fvbommel
|
||||
* French - @FlorianLeChat, J. Lavoie
|
||||
* German - @qwerty287
|
||||
* Italian - @ppasserini
|
||||
* Norwegian Bokmål - @comradekingu
|
||||
* Persian - @latelateprogrammer
|
||||
* Polish - @ebogucka
|
||||
* Portuguese - @laralem
|
||||
* Romanian - @simonaiacob
|
||||
* Russian - @Allineer, Nikita Epifanov
|
||||
* Sinhala - @Dilshan-H
|
||||
* Spanish - @FlorianLeChat
|
||||
* Turkish - @ersen0
|
||||
* Ukrainian - @IhorHordiichuk, @artemmolotov
|
||||
* Vietnamese - @unbiaseduser
|
||||
### 10.4.1 (2020-11-09)
|
||||
|
||||
* Fix Mapbox Maps crash on Android 11 (F-Droid only)
|
||||
|
||||
### 10.4 (2020-10-09)
|
||||
|
||||
* New widget configuration options
|
||||
* Sort
|
||||
* Show hidden
|
||||
* Show completed
|
||||
* Header spacing
|
||||
* Bug fixes
|
||||
|
||||
### 10.3 (2020-10-02)
|
||||
|
||||
* Collapsible sort groups in widget
|
||||
* Add 'System default' widget theme
|
||||
* Bug fixes
|
||||
|
||||
### 10.2 (2020-09-25)
|
||||
|
||||
* Display list, tag, and place chips on widgets
|
||||
* Add option to disable list, tag, and place chips on widgets
|
||||
|
||||
### 10.1 (2020-09-23)
|
||||
|
||||
* Android 11 support
|
||||
* Backup improvements
|
||||
* Swipe-to-refresh initiates DAVx5/EteSync sync
|
||||
* Show indicator when DAVx5/EteSync are synchronizing
|
||||
* Bug fixes
|
||||
|
||||
### 10.0.3 (2020-09-16)
|
||||
|
||||
* Fix crash from calendar event snackbar
|
||||
* Fix crash when setting Google Maps markers
|
||||
* Fix invalid calendar entry creation
|
||||
|
||||
### 10.0.2 (2020-09-14)
|
||||
|
||||
* Fix crash from corrupted custom filter
|
||||
* Fix crash in 'Astrid manual sorting' mode
|
||||
* Fix missing 'Calendar event created' snackbar
|
||||
|
||||
### 10.0.1 (2020-09-05)
|
||||
|
||||
* Bug fixes
|
||||
* Translation updates
|
||||
* Czech - @vitSkalicky
|
||||
* Danish - @ChMunk
|
||||
|
||||
### 10.0 (2020-08-31)
|
||||
|
||||
* PRO: DAVx⁵ support (requires [DAVx⁵ beta](https://tasks.org/davx5))
|
||||
* PRO: EteSync client support
|
||||
* [ToDo Agenda](https://play.google.com/store/apps/details?id=org.andstatus.todoagenda) integration
|
||||
* Changed backstack behavior to follow Android conventions
|
||||
* Major internal changes! Please report any bugs!
|
||||
* Remove Mapbox tiles (Google Play only)
|
||||
* Added 'Astrid manual sort' information to backup file
|
||||
* Bug fixes
|
||||
* Performance improvements
|
||||
* Security improvements
|
||||
|
||||
[Older releases](https://github.com/tasks/tasks/blob/main/V10_12_CHANGELOG.md)
|
||||
[Older releases](https://github.com/tasks/tasks/blob/main/V06_09_CHANGELOG.md)
|
||||
|
@ -1,767 +0,0 @@
|
||||
### 12.7 (2022-06-18)
|
||||
|
||||
* Android 13 themed icon - Thanks @hanthor!
|
||||
* Fix self-signed SSL certificates on Android 12+
|
||||
* Don't hide empty tags and places in pickers
|
||||
* Update translations
|
||||
* Basque - @Txopi, Sergio Varela, @osoitz
|
||||
* Belarusian - @Prominence, Андрей
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
* Czech - Shimon
|
||||
* Danish - Tntdruid
|
||||
* Dutch - @mm4c
|
||||
* German - @3ole
|
||||
* Hungarian - kaciokos
|
||||
* Indonesian - Cyua Pyua
|
||||
* Italian - @ppasserini
|
||||
* Polish - @wiktor-k
|
||||
* Portuguese (Brazilian) - @LevyMarCiS, @sunflowerskater
|
||||
* Portuguese - @laralem, @alvar0liveira
|
||||
* Swedish - @reportxx
|
||||
* Turkish - @emintufan
|
||||
* Vietnamese - @unbiaseduser
|
||||
|
||||
### 12.6.1 (2022-03-27)
|
||||
|
||||
* Move task list and edit screen options to top level settings
|
||||
* Prompt users to customize edit screen
|
||||
* Fix cancel button for recurring reminder dialog
|
||||
* Update translations
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
* Chinese (Simplified) - Eric, @Geeyun-JY3
|
||||
* Croatian - @milotype
|
||||
* Dutch - @mm4c, @fvbommel
|
||||
* Finnish - J. Lavoie
|
||||
* French - @FlorianLeChat
|
||||
* Galician - @mglbranco, J. Lavoie
|
||||
* German - @qwerty287
|
||||
* Hungarian - kaciokos
|
||||
* Italian - @Fs00
|
||||
* Norwegian Bokmål - @comradekingu
|
||||
* Polish - @wiktor-k
|
||||
* Portuguese (Brazilian) - @tsunamistonefly
|
||||
* Romanian - @simonaiacob
|
||||
* Russian - Nikita Epifanov
|
||||
* Spanish - @FlorianLeChat
|
||||
* Swedish - @reportxx
|
||||
* Turkish - @ersen0, @emintufan
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
* Vietnamese - @unbiaseduser, J. Lavoie
|
||||
|
||||
### 12.6 (2022-03-12)
|
||||
|
||||
* Configure notifications to repeat at custom intervals
|
||||
([#3](https://github.com/tasks/tasks/issues/3))
|
||||
* Notifications can repeat by minute, hour, day, or weekly intervals
|
||||
* Add 'Snoozed' filter ([#1633](https://github.com/tasks/tasks/issues/1633))
|
||||
* Add 'Notifications' filter
|
||||
* CalDAV/DAVx5 server selection setting
|
||||
* This replaces 'Let server schedule recurring tasks'
|
||||
* Synology Calendar users must set this to fix sync
|
||||
([#1802](https://github.com/tasks/tasks/issues/1802))
|
||||
* Mailbox.org and Open-Xchange users must set this to prevent duplicate
|
||||
repeating tasks
|
||||
* Set geofence radius in place settings
|
||||
* Remove DAVx5/EteSync app accounts when native CalDAV/EteSync enabled
|
||||
* Clear reminders when they are dismissed in Thunderbird
|
||||
* Fix reminder synchronization
|
||||
* Fix crash in task edit screen
|
||||
* Fix prompt to discard changes
|
||||
* Fix crash during 12.4 upgrade
|
||||
* Update translations
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
* Chinese (Simplified) - @Crystal-RainSlide, @Geeyun-JY3, Eric
|
||||
* Croatian - @milotype
|
||||
* Dutch - @mm4c, @fvbommel
|
||||
* French - J. Lavoie, @FlorianLeChat
|
||||
* German - @eldiep, J. Lavoie, @qwerty287
|
||||
* Hungarian - kaciokos
|
||||
* Italian - @ppasserini, J. Lavoie
|
||||
* Portuguese (Brazilian) - @hugomg
|
||||
* Romanian - @simonaiacob
|
||||
* Russian - @Allineer
|
||||
* Spanish - @toni-em, @FlorianLeChat, @Romerolweb
|
||||
* Swedish - @reportxx
|
||||
* Turkish - @ersen0
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
* Urdue - @Crystal-RainSlide
|
||||
* Vietnamese - @unbaseduser
|
||||
|
||||
### 12.5 (2022-02-27)
|
||||
|
||||
* Choose custom random reminder period
|
||||
* Add multiple random reminders
|
||||
* Fix sync crash for Tasks.org, CalDAV, and native EteSync
|
||||
* Add Kurdish (Central) translations - @roj1512
|
||||
* Update translations
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
* Chinese (Simplified) - Eric
|
||||
* Croatian - @milotype
|
||||
* Dutch - @mm4c
|
||||
* French - @FlorianLeChat
|
||||
* Portuguese - @laralem
|
||||
* Spanish - @Romerolweb, Jeffree Romero
|
||||
* Turkish - @ersen0
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
|
||||
### 12.4 (2022-02-19)
|
||||
|
||||
* Relative reminder support
|
||||
* Quickly add reminders minutes, hours, days, or weeks before due
|
||||
* Sync reminders with Tasks.org, DAVx5, CalDAV, EteSync, and DecSync CC
|
||||
* Synchronize relative and absolute reminders
|
||||
* Tasks.org, CalDAV, and native EteSync sync improvements
|
||||
* Merge remote changes before pushing local changes
|
||||
* Not applicable to DAVx5, EteSync app, or DecSync CC
|
||||
* View and cancel snoozed reminders in task edit screen
|
||||
* Add 'Has reminder' custom filter criteria
|
||||
* Fix updating calendar entries after editing task
|
||||
* Fix search when using top app bar
|
||||
* Fix task deletion when adding from two devices simultaneously
|
||||
* Update translations
|
||||
* Arabic - @mhmdanas
|
||||
* Basque - Sergio Varela
|
||||
* Brazilian Portuguese - @Luiz-bro
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
* Chinese (Simplified) - Eric
|
||||
* Croatian - @milotype
|
||||
* Dutch - @mm4c
|
||||
* French - @FlorianLeChat, J. Lavoie
|
||||
* German - J. Lavoie, @qwerty287
|
||||
* Hungarian - kaciokos
|
||||
* Italian - @ppasserini, J. Lavoie, @andrearosso
|
||||
* Portuguese - @laralem
|
||||
* Romanian - @simonaiacob
|
||||
* Russian - @NikGreens
|
||||
* Spanish - @FlorianLeChat, Sergio Varela
|
||||
* Turkish - @ersen0, @emintufan
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
* Vietnamese - bruh, @unbaseduser
|
||||
|
||||
### 12.3 (2022-02-04)
|
||||
|
||||
* Add option to disable moving completed tasks to bottom
|
||||
* Add option to disable sorting completed by completion date
|
||||
* Add undo snackbar for task completion
|
||||
* Fix crash when location lookup fails
|
||||
* Fix voice reminders on Android 12
|
||||
* Fix widget due dates in overdue sort group
|
||||
* Add Karelian translations - Olexii Ondrei
|
||||
* Update translations
|
||||
* Basque - Sergio Varela
|
||||
* Catalan - @ivangjxyz
|
||||
* Chinese (Simplified) - Eric
|
||||
* Croatian - @milotype
|
||||
* Dutch - @mm4c
|
||||
* French - @FlorianLeChat
|
||||
* German - @qwerty287
|
||||
* Hungarian - kaciokos
|
||||
* Romanian - @simonaiacob
|
||||
* Russian - @NikGreens
|
||||
* Spanish - @FlorianLeChat
|
||||
* Swedish - @reportxx
|
||||
* Turkish - @emintufan, @ersen0
|
||||
* Vietnamese - @unbaseduser
|
||||
|
||||
### 12.2 (2022-01-16)
|
||||
|
||||
* Move completed tasks to bottom
|
||||
* Add option to disable collapsing app bars
|
||||
* Uncheck parent tasks when subtask is unchecked
|
||||
* Fix crash on completion sound
|
||||
* Update translations
|
||||
* Chinese (Simplified) - Eric
|
||||
* Danish - @Tntdruid
|
||||
* Dutch - @fvbommel, @mm4c
|
||||
* French - @FlorianLeChat
|
||||
* German - @qwerty287
|
||||
* Russian - @NikGreens
|
||||
* Spanish - @FlorianLeChat
|
||||
* Turkish - @ersen0
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
* Vietnamese - @unbaseduser
|
||||
|
||||
### 12.1 (2022-01-09)
|
||||
|
||||
* Group overdue tasks when sorting by due date
|
||||
* Update translations
|
||||
* Basque - Sergio Varela
|
||||
* Chinese (Simplified) - Eric
|
||||
* French - @FlorianLeChat
|
||||
* Norwegian Bokmål - @comradekingu
|
||||
* Spanish - @FlorianLeChat
|
||||
* Vietnamese - @unbaseduser
|
||||
|
||||
### 12.0 (2022-01-08)
|
||||
|
||||
* New bottom app bar
|
||||
* Choose top or bottom app bar in settings
|
||||
* Miscellaneous design updates
|
||||
* Improve privacy and security by removing RECORD_AUDIO and
|
||||
WRITE_EXTERNAL_STORAGE permissions
|
||||
* Attaching an audio note will launch your device's audio recorder
|
||||
* Translation updates
|
||||
* Catalan - @Solatec
|
||||
* Dutch - @mm4c
|
||||
* German - @qwerty287
|
||||
* Italian - @ppasserini, @Fs00
|
||||
* Portuguese - @SantosSi
|
||||
* Romanian - @simonaiacob
|
||||
* Russian - Nikita Epifanov
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
|
||||
### 11.13 (2021-12-31)
|
||||
|
||||
* Add option to play a sound when a task is completed
|
||||
* Accept audio attachments shared from other apps
|
||||
* Removed native EteSync v1 support
|
||||
* EteSync v1 accounts can still be synchronized with the EteSync app
|
||||
* Bug fixes
|
||||
* Translation updates
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
* Chinese (Simplified) - @sr093906
|
||||
* Chinese (Traditional) - @dixon777
|
||||
* Finnish - @CSharpest, Rami Lehtinen
|
||||
* French - @FlorianLeChat
|
||||
* Hungarian - kaciokos
|
||||
* Italian - J. Lavoie, @Fs00
|
||||
* Norwegian Bokmål - @comradekingu
|
||||
* Persian - @Ahmadhosseinbor
|
||||
* Spanish - @aplopez, @FlorianLeChat
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
|
||||
### 11.12.3 (2021-11-22)
|
||||
|
||||
* Fix reminders
|
||||
* Update translations
|
||||
* Indonesian - when we were sober
|
||||
* Kurdish (Northern) - Pêşeroja paşerojê
|
||||
* Romanian - @Steinhagen
|
||||
|
||||
### 11.12.2 (2021-11-13)
|
||||
|
||||
* Fix reminders
|
||||
* Fix reminder preference backup
|
||||
* Update translations
|
||||
* Interlingua - @softinterlingua
|
||||
* Tamil - @balogic
|
||||
|
||||
### 11.12.1 (2021-11-05)
|
||||
|
||||
* Fix reminders
|
||||
* Update translations
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
* Croatian - @milotype
|
||||
* Norwegian Bokmål - @HumanNr4584093104
|
||||
* Romanian - Simona Iacob
|
||||
* Russian - @NikGreens
|
||||
* Tamil - @balogic
|
||||
* Turkish - @ersen0
|
||||
|
||||
### 11.12 (2021-10-26)
|
||||
|
||||
* Add option to notify at start date
|
||||
* Widget tweaks for Android 12
|
||||
* Fix crash when deleting tasks (Thanks @fschrempf!)
|
||||
* Fix truncated calendar picker
|
||||
* Update translations
|
||||
* Basque - Sergio Varela
|
||||
* Brazilian Portuguese - @laralem
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
* Catalan - @Solatec
|
||||
* Dutch - @fvbommel
|
||||
* French - @FlorianLeChat
|
||||
* German - @qwerty287
|
||||
* Hungarian - kaciokos
|
||||
* Lithuanian - @70h
|
||||
* Polish - @dominik-korsa
|
||||
* Simplified Chinese - @sr093906, @Geeyun-JY3
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
* Vietnamese - bruh
|
||||
|
||||
### 11.11 (2021-09-21)
|
||||
|
||||
* Add 'Due now' filter criteria - Thanks @tkterris!
|
||||
* Fix crash on Android 12 - Thanks @tkterris!
|
||||
* Fix preference display issue - Thanks @Groctel!
|
||||
* Target Android 12
|
||||
* Ignore link clicks during multi-select
|
||||
* Update translations
|
||||
* Arabic - @mhmdanas, @machiav3lli
|
||||
* Basque - @Thadah
|
||||
* Brazilian Portuguese - @laralem
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
* Croatian - @milotype
|
||||
* Czech - @vitSkalicky
|
||||
* Danish - @Tntdruid
|
||||
* Dutch - @fvbommel
|
||||
* French - @FlorianLeChat
|
||||
* German - @machiav3lli, J. Lavoie
|
||||
* Greek - @giorgio93p
|
||||
* Indonesian - @erigmac
|
||||
* Italian - J. Lavoie, @Fs00
|
||||
* Japanese - さとうまこと
|
||||
* Lithuanian - @70h
|
||||
* Norwegian Bokmål - @comradekingu
|
||||
* Portuguese - @laralem
|
||||
* Romanian - Simona Iacob
|
||||
* Russian - @tolstovka, @zhelemysh, @ToxesFoxes
|
||||
* Simplified Chinese - @sr093906, @Geeyun-JY3
|
||||
* Sinhala - @Dilshan-H
|
||||
* Spanish - @FlorianLeChat, @Groctel, @berman00
|
||||
* Swedish - @bittin
|
||||
* Turkish - @ersen0
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
* Vietnamese - bruh
|
||||
|
||||
### 11.10.2 (2021-07-15)
|
||||
|
||||
* Fix location-based reminders
|
||||
* Fix preference backup
|
||||
* Update translations
|
||||
* Arabic - git ty, @mhmdanas
|
||||
* Basque - Sergio Varela
|
||||
* Croatian - @milotype
|
||||
* Czech - @vitSkalicky, @p-bo
|
||||
* Dutch - Beardhatcode, @fvbommel
|
||||
* French - @FlorianLeChat
|
||||
* German - K. Herbert, @franconian, @ecxod, @bluedeepimpact
|
||||
* Indonesian - when we were sober
|
||||
* Interlingua - @softinterlingua
|
||||
* Italian - J. Lavoie
|
||||
* Lithuanian - @70h
|
||||
* Norwegian Bokmål - @Jerome2103
|
||||
* Portuguese - @laralem
|
||||
* Russian - @KovalevArtem, @Blueberryy
|
||||
* Simplified Chinese - @sr093906, @Geeyun-JY3
|
||||
* Sinhala - HelaBasa
|
||||
* Spanish - @FlorianLeChat, @fitojb
|
||||
* Turkish - Oğuz Ersen, @emintufan
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
* Urdu - Maaz
|
||||
* Vietnamese - bruh
|
||||
|
||||
### 11.10.1 (2021-05-26)
|
||||
|
||||
* Improve Android 12 compatibility
|
||||
* Update status bar styles
|
||||
* Update translations
|
||||
* Arabic - @mhmdanas
|
||||
* Basque - Sergio Varela
|
||||
* Catalan - @toram
|
||||
* Chinese (Traditional) - @kisaragi-hiu
|
||||
* Croatian - @ggdorman
|
||||
* Czech - @vitSkalicky
|
||||
* Esperanto - @J053Fabi0, @jakubfabijan
|
||||
* French - K. Herbert, J. Lavoie
|
||||
* German - K. Herbert
|
||||
* Greek - Eugenia Russell
|
||||
* Hungarian - @gthrepwood
|
||||
* Indonesian - @andhikapangestu29
|
||||
* Korean - Sunjae Choi
|
||||
* Portuguese (Brazil) - @laralem
|
||||
* Portuguese - @SantosSi, @laralem
|
||||
* Russian - Nikita Epifanov
|
||||
* Sinhala - @Dilshan-H
|
||||
* Spanish - @fitojb
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
* Urdu - Maaz
|
||||
* Vietnamese - bruh
|
||||
|
||||
### 11.10 (2021-04-19)
|
||||
|
||||
* Markdown support ([Documentation](https://tasks.org/docs/markdown))
|
||||
* Samsung DeX support - Thanks @mhmdanas!
|
||||
* Update to Google Play Billing v3
|
||||
* Remove background sync for legacy EteSync v1 accounts
|
||||
* Update translations
|
||||
* Arabic - @mhmdanas
|
||||
* Brazilian Portuguese - @daylightdev
|
||||
* Dutch - @fvbommel
|
||||
* French - @FlorianLeChat, J. Lavoie
|
||||
* German - J. Lavoie
|
||||
* Greek - Michalis, Eugenia Russell
|
||||
* Indonesian - @liimee
|
||||
* Italian - J. Lavoie, @Fs00
|
||||
* Japanese - @kisaragi-hiu
|
||||
* Kannada - @shashank-p
|
||||
* Russian - @zhelemysh, Nikita Epifanov
|
||||
* Simplified Chinese - @sr093906
|
||||
* Spanish - @FlorianLeChat
|
||||
* Turkish - Oğuz Ersen
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
* Urdu - Maaz
|
||||
|
||||
### 11.9.2 (2021-03-29)
|
||||
|
||||
* Fix date translation issue - Thanks @mhmdanas!
|
||||
* Fix misc translation strings - Thanks J. Lavoie!
|
||||
* Update translations
|
||||
* Dutch - @fvbommel
|
||||
* French - @FlorianLeChat
|
||||
* German - @franconian, Achim Schumacher, J. Lavoie
|
||||
* Hungarian - kaciokos
|
||||
* Indonesian - when we were sober
|
||||
* Italian - @Fs00
|
||||
* Simplified Chinese - @sr093906
|
||||
* Spanish - @FlorianLeChat
|
||||
* Turkish - @emintufan
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
|
||||
### 11.9.1 (2021-03-25)
|
||||
|
||||
* Open documentation links in custom tabs
|
||||
* Fix crash in Mapbox reverse geocoder
|
||||
* Increase 'Add subtask' touch target
|
||||
* Update translations
|
||||
* Arabic - @mhmdanas
|
||||
* German - Achim Schumacher
|
||||
* Hungarian - kaciokos
|
||||
* Italian - @Fs00
|
||||
* Turkish - @emintufan
|
||||
|
||||
### 11.9 (2021-03-20)
|
||||
|
||||
* New calendar and clock pickers
|
||||
* New preference to default to text input for date and time
|
||||
* Fix issue causing Tasks to use wrong search provider
|
||||
* Fix crash when Nextcloud/ownCloud don't send list owner
|
||||
* Update translations
|
||||
* Basque - Sergio Varela
|
||||
* Croatian - @milotype
|
||||
* Dutch - @fvbommel
|
||||
* French - @FlorianLeChat
|
||||
* German - Achim Schumacher
|
||||
* Hungarian - kaciokos
|
||||
* Indonesian - when we were sober
|
||||
* Simplified Chinese - @sr093906
|
||||
* Spanish - @FlorianLeChat
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
|
||||
### 11.8 (2021-03-15)
|
||||
|
||||
* CalDAV: Send shared list invites
|
||||
* Compatible with Tasks.org, Nextcloud, ownCloud, and sabre/dav
|
||||
* Show shared list invite status in list settings
|
||||
* Fix drawer count when list is shared with 2+ users
|
||||
* Removed legacy EteSync v1 list management features
|
||||
* Dropped support for Android 6.0
|
||||
* Update translations
|
||||
* Arabic - @mhmdanas
|
||||
* Dutch - @fvbommel
|
||||
* Esperanto - @jakubfabijan
|
||||
* French - @FlorianLeChat
|
||||
* German - @Jerome2103
|
||||
* Hungarian - kaciokos
|
||||
* Indonesian - when we were sober, @andhikapangestu29
|
||||
* Norwegian Bokmål - @comradekingu
|
||||
* Polish - @doegedomita
|
||||
* Portuguese - @Jerome2103
|
||||
* Spanish - @FlorianLeChat
|
||||
* Turkish - Oğuz Ersen
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
|
||||
### 11.7 (2021-03-08)
|
||||
|
||||
* CalDAV: Display shared list members in list settings
|
||||
* Compatible with Tasks.org, Nextcloud, ownCloud, OpenXchange, and sabre/dav
|
||||
* CalDAV: List owners can remove shared list members from list
|
||||
* Compatible with Tasks.org, Nextcloud, ownCloud, and sabre/dav
|
||||
* Fix time zone issue in recurrence picker
|
||||
* Update translations
|
||||
* Arabic - @mhmdanas
|
||||
* Basque - Sergio Varela
|
||||
* Dutch - @fvbommel
|
||||
* French - @FlorianLeChat
|
||||
* Hungarian - kaciokos
|
||||
* Indonesian - @putulopi
|
||||
* Simplified Chinese - @sr093906
|
||||
* Spanish - @FlorianLeChat
|
||||
* Turkish - @emintufan, Oğuz Ersen
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
|
||||
### 11.6.1 (2021-03-11)
|
||||
|
||||
* F-Droid: Fix OpenStreetMap crash
|
||||
|
||||
### 11.6 (2021-03-04)
|
||||
|
||||
* CalDAV: Display indicator in drawer when a list is shared with other users
|
||||
* Compatible with Tasks.org, Nextcloud, ownCloud, OpenXchange, and sabre/dav
|
||||
* CalDAV: Don't upload changes to read-only lists
|
||||
([#931](https://github.com/tasks/tasks/issues/931))
|
||||
* Remove unnecessary icon-mirroring for RTL users
|
||||
([#1385](https://github.com/tasks/tasks/issues/1385) and
|
||||
[#1391](https://github.com/tasks/tasks/pull/1391)) - Thanks to @mhmdanas
|
||||
* Update translations
|
||||
* Arabic - @mhmdanas
|
||||
* Basque - Sergio Varela
|
||||
* Bulgarian - @StoyanDimitrov
|
||||
* Czech - @vitSkalicky
|
||||
* Dutch - @fvbommel
|
||||
* French - @FlorianLeChat
|
||||
* Hungarian - kaciokos
|
||||
* Indonesian - @putulopi
|
||||
* Russian - Nikita Epifanov
|
||||
* Simplified Chinese - @sr093906
|
||||
* Sinhala - HelaBasa
|
||||
* Spanish - @FlorianLeChat
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
|
||||
### 11.5.2 (2021-02-25)
|
||||
|
||||
* Fix CalDAV sync error
|
||||
* Report errors when generating recurrence dates
|
||||
|
||||
### 11.5.1 (2021-02-24)
|
||||
|
||||
* Fix 'repeat until' date
|
||||
* Fix repeat dates for UTC+13
|
||||
([#1374](https://github.com/tasks/tasks/issues/1374))
|
||||
* F-Droid: Handle null name in Nominatim reverse geocoder
|
||||
([#1380](https://github.com/tasks/tasks/issues/1380))
|
||||
* Update translations
|
||||
* Basque - Sergio Varela
|
||||
* Croatian - @ggdorman
|
||||
* Dutch - @fvbommel
|
||||
* French - @FlorianLeChat
|
||||
* Hungarian - kaciokos
|
||||
* Norwegian Bokmål - @comradekingu
|
||||
* Polish - @alex-ter
|
||||
* Russian - Nikita Epifanov
|
||||
* Simplified Chinese - @sr093906
|
||||
* Spanish - @FlorianLeChat
|
||||
* Turkish - Oğuz Ersen
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
* Urdu - Maaz
|
||||
|
||||
### 11.5 (2021-02-17)
|
||||
|
||||
* Sync snooze time with Tasks.org, DAVx⁵, CalDAV, EteSync, and DecSync
|
||||
* Compatible with Thunderbird
|
||||
* New map theme preference
|
||||
* 10 new icons
|
||||
* F-Droid: Use Nominatim for reverse geocoding
|
||||
* Google Play: Use OpenStreetMap tiles when Play Services not available
|
||||
* Google Play: Use Android location services when Play Services not available
|
||||
* Tasks.org accounts: Use Google Places for map search
|
||||
* Update translations
|
||||
* Dutch - @fvbommel
|
||||
* French - @FlorianLeChat
|
||||
* Hungarian - kaciokos
|
||||
* Indonesian - when we were sober
|
||||
* Simplified Chinese - @sr093906
|
||||
* Spanish - @FlorianLeChat
|
||||
* Ukrainian - @IhorHordiichuk
|
||||
|
||||
### 11.4 (2021-02-09)
|
||||
|
||||
* Sync collapsed subtask state with Tasks.org, DAVx⁵, CalDAV, EteSync, and
|
||||
DecSync ([#1339](https://github.com/tasks/tasks/issues/1339))
|
||||
* Compatible with Nextcloud and ownCloud
|
||||
* F-Droid: Add location based reminders ([#770](https://github.com/tasks/tasks/issues/770))
|
||||
* F-Droid: Replace Mapbox tiles with OpenStreetMap tiles ([#922](https://github.com/tasks/tasks/issues/922))
|
||||
* Fix default start date ([#1350](https://github.com/tasks/tasks/issues/1350))
|
||||
|
||||
### 11.3.4 (2021-02-03)
|
||||
|
||||
* Adjust start times by one second during sync
|
||||
([#1326](https://github.com/tasks/tasks/issues/1326))
|
||||
* Can now sync start time = due time with DAVx⁵, EteSync app, and DecSync CC
|
||||
* All day start date must come before all day due date with DAVx⁵, EteSync
|
||||
app, and DecSync CC
|
||||
* 'Show unstarted' toggled on by default
|
||||
|
||||
### 11.3.3 (2021-01-30)
|
||||
|
||||
* Fix all-day due date synchronization
|
||||
([#1325](https://github.com/tasks/tasks/issues/1325))
|
||||
|
||||
### 11.3.2 (2021-01-28)
|
||||
|
||||
* Fix recurrence sync issue
|
||||
([#1323](https://github.com/tasks/tasks/issues/1323))
|
||||
|
||||
### 11.3.1 (2021-01-27)
|
||||
|
||||
* Improve support for recurring tasks with subtasks
|
||||
* Subtasks will be unchecked after completing a recurring task
|
||||
* Clear completed will not delete subtasks of recurring tasks
|
||||
* Improve widget sort header when space is limited
|
||||
* Add option to hide widget title
|
||||
* Fix timezone conversions during synchronization
|
||||
* Add Esperanto translations - @jakubfabijan
|
||||
|
||||
### 11.3 (2021-01-20)
|
||||
|
||||
* 'Hide until' is now 'Start date'
|
||||
* Synchronize start dates with Tasks.org, DAVx⁵, CalDAV, EteSync, and DecSync
|
||||
* New start date picker
|
||||
* New start date custom filter criteria
|
||||
* Add sort 'By start date'
|
||||
* Display start dates as chips
|
||||
* Don't perform background sync when data saver enabled
|
||||
* Preference changes
|
||||
* Add app and widget preferences to disable start date chips
|
||||
* Synchronization accounts displayed on main preference screen
|
||||
* Removed background sync and metered connection options (now respecting data
|
||||
saver mode)
|
||||
* Removed Google Tasks 'Custom order synchronization fix' (automatically
|
||||
performing full sync if 'My order' enabled)
|
||||
* Remove support for legacy XML backup format ([more info](https://github.com/tasks/tasks/issues/1565))
|
||||
* Bug fixes
|
||||
|
||||
### 11.2.2 (2021-01-07)
|
||||
|
||||
* Rename 'Lists' to 'Local lists' to clarify that they are not synchronized
|
||||
* Tasks.org sign in improvements
|
||||
* Miscellaneous improvements - Thanks @mhmdanas!
|
||||
|
||||
### 11.2.1 (2021-01-05)
|
||||
|
||||
* Fix Portuguese translation issue
|
||||
* Report OpenTask sync errors
|
||||
* Report Tasks.org sign in errors
|
||||
* Don't crash on widget configuration error
|
||||
* Purchase dialog changes
|
||||
|
||||
### 11.2 (2020-12-30)
|
||||
|
||||
* [Synchronize your Tasks.org account with third-party task and calendar apps, like Outlook,
|
||||
Thunderbird, or Apple Reminders](https://tasks.org/passwords)
|
||||
* Miscellaneous improvements - Thanks @mhmdanas!
|
||||
|
||||
### 11.1.1 (2020-12-24)
|
||||
|
||||
* Fix compatibility issues with third-party clients
|
||||
* Completed tasks without completion dates
|
||||
([222a34f](https://github.com/tasks/tasks/commit/222a34fc263816bb23f633bc9c79de78aeb3968d))
|
||||
* Tasks with start date but no due date
|
||||
([7a1d566](https://github.com/tasks/tasks/commit/7a1d566bfb613b95d3fe1df46d8fa67200c91021))
|
||||
* Miscellaneous improvements - Thanks @mhmdanas!
|
||||
|
||||
### 11.1 (2020-12-21)
|
||||
|
||||
* Add [DecSync CC synchronization](https://tasks.org/decsync)
|
||||
* Fix rescheduling remotely completed recurring task
|
||||
([5eb9370](https://github.com/tasks/tasks/commit/5eb9370294ef707b3e667c4a42851030419920d8))
|
||||
* Miscellaneous code improvements - Thanks @mhmdanas!
|
||||
|
||||
### 11.0.1 (2020-12-17)
|
||||
|
||||
* Fix EteSync client issue with v2 accounts
|
||||
([b761309](https://github.com/tasks/tasks/commit/b76130902ae0be6e1d580d588798a9ed0d7ff385))
|
||||
* Fix multi-select 'Pick time' crash
|
||||
* Fix default hide until due time
|
||||
([#842](https://github.com/tasks/tasks/issues/842#issuecomment-746358382))
|
||||
* Add Croatian translations - Garden Hose
|
||||
* Add Urdu translations - Maaz
|
||||
|
||||
### 11.0 (2020-12-10)
|
||||
|
||||
* New Tasks.org synchronization service
|
||||
* Multi-select rescheduling
|
||||
* New task default settings
|
||||
* Default tags
|
||||
* Default recurrence
|
||||
* Default location
|
||||
* Hide until due time
|
||||
* New custom filter criteria
|
||||
* Hidden tasks
|
||||
* Completed tasks
|
||||
* Subtasks
|
||||
* Parent tasks
|
||||
* Recurring tasks
|
||||
* Added EteSync v2 support
|
||||
* Deprecated EteSync v1 support
|
||||
* v1 accounts cannot be added to Tasks.org
|
||||
* v1 accounts can be added to the EteSync Android client
|
||||
* Add ability to delete comments (Thanks to @romedius!)
|
||||
* Add option to always display date (Thanks to @T0M0F!)
|
||||
* Copy subtasks when copying tasks (Thanks to @supermzn!)
|
||||
* Fix ring five times cutoff (Thanks to @przemhb!)
|
||||
* Bug fixes
|
||||
* Translation updates
|
||||
* Arabic - @mhmdanas
|
||||
* Basque - @osoitz, @ppasserini
|
||||
* Dutch - @fvbommel
|
||||
* French - @FlorianLeChat
|
||||
* German - @franconian, J. Lavoie, @myabc
|
||||
* Hebrew - @yarons
|
||||
* Hungarian - kaciokos
|
||||
* Indonesian - @andikatuluspangestu
|
||||
* Italian - @ppasserini, @Fs00, @pjammo
|
||||
* Korean - Sunjae Choi, @Hwaro-K
|
||||
* Norwegian Bokmål - @comradekingu
|
||||
* Polish - @alex-ter
|
||||
* Russian - Nikita Epifanov
|
||||
* Simplified Chinese - @sr093906
|
||||
* Spanish - @FlorianLeChat
|
||||
* Traditional Chinese - @realpineapplemilk
|
||||
* Turkish - @emintufan, Oğuz Ersen
|
||||
|
||||
### 10.4.1 (2020-11-09)
|
||||
|
||||
* Fix Mapbox Maps crash on Android 11 (F-Droid only)
|
||||
|
||||
### 10.4 (2020-10-09)
|
||||
|
||||
* New widget configuration options
|
||||
* Sort
|
||||
* Show hidden
|
||||
* Show completed
|
||||
* Header spacing
|
||||
* Bug fixes
|
||||
|
||||
### 10.3 (2020-10-02)
|
||||
|
||||
* Collapsible sort groups in widget
|
||||
* Add 'System default' widget theme
|
||||
* Bug fixes
|
||||
|
||||
### 10.2 (2020-09-25)
|
||||
|
||||
* Display list, tag, and place chips on widgets
|
||||
* Add option to disable list, tag, and place chips on widgets
|
||||
|
||||
### 10.1 (2020-09-23)
|
||||
|
||||
* Android 11 support
|
||||
* Backup improvements
|
||||
* Swipe-to-refresh initiates DAVx5/EteSync sync
|
||||
* Show indicator when DAVx5/EteSync are synchronizing
|
||||
* Bug fixes
|
||||
|
||||
### 10.0.3 (2020-09-16)
|
||||
|
||||
* Fix crash from calendar event snackbar
|
||||
* Fix crash when setting Google Maps markers
|
||||
* Fix invalid calendar entry creation
|
||||
|
||||
### 10.0.2 (2020-09-14)
|
||||
|
||||
* Fix crash from corrupted custom filter
|
||||
* Fix crash in 'Astrid manual sorting' mode
|
||||
* Fix missing 'Calendar event created' snackbar
|
||||
|
||||
### 10.0.1 (2020-09-05)
|
||||
|
||||
* Bug fixes
|
||||
* Translation updates
|
||||
* Czech - @vitSkalicky
|
||||
* Danish - @ChMunk
|
||||
|
||||
### 10.0 (2020-08-31)
|
||||
|
||||
* PRO: DAVx⁵ support (requires [DAVx⁵ beta](https://tasks.org/davx5))
|
||||
* PRO: EteSync client support
|
||||
* [ToDo Agenda](https://play.google.com/store/apps/details?id=org.andstatus.todoagenda) integration
|
||||
* Changed backstack behavior to follow Android conventions
|
||||
* Major internal changes! Please report any bugs!
|
||||
* Remove Mapbox tiles (Google Play only)
|
||||
* Added 'Astrid manual sort' information to backup file
|
||||
* Bug fixes
|
||||
* Performance improvements
|
||||
* Security improvements
|
||||
|
||||
[Older releases](https://github.com/tasks/tasks/blob/main/V06_09_CHANGELOG.md)
|
@ -0,0 +1,263 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE module PUBLIC
|
||||
"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
|
||||
"https://checkstyle.org/dtds/configuration_1_3.dtd">
|
||||
|
||||
<!-- https://raw.githubusercontent.com/checkstyle/checkstyle/checkstyle-8.16/src/main/resources/google_checks.xml -->
|
||||
|
||||
<!--
|
||||
Checkstyle configuration that checks the Google coding conventions from Google Java Style
|
||||
that can be found at https://google.github.io/styleguide/javaguide.html.
|
||||
|
||||
Checkstyle is very configurable. Be sure to read the documentation at
|
||||
http://checkstyle.sf.net (or in your downloaded distribution).
|
||||
|
||||
To completely disable a check, just comment it out or delete it from the file.
|
||||
|
||||
Authors: Max Vetrenko, Ruslan Diachenko, Roman Ivanov.
|
||||
-->
|
||||
|
||||
<module name = "Checker">
|
||||
<property name="charset" value="UTF-8"/>
|
||||
|
||||
<property name="severity" value="warning"/>
|
||||
|
||||
<property name="fileExtensions" value="java, properties, xml"/>
|
||||
<!-- Checks for whitespace -->
|
||||
<!-- See http://checkstyle.sf.net/config_whitespace.html -->
|
||||
<module name="FileTabCharacter">
|
||||
<property name="eachLine" value="true"/>
|
||||
</module>
|
||||
|
||||
<module name="TreeWalker">
|
||||
<module name="OuterTypeFilename"/>
|
||||
<module name="IllegalTokenText">
|
||||
<property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
|
||||
<property name="format"
|
||||
value="\\u00(09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/>
|
||||
<property name="message"
|
||||
value="Consider using special escape sequence instead of octal value or Unicode escaped value."/>
|
||||
</module>
|
||||
<module name="AvoidEscapedUnicodeCharacters">
|
||||
<property name="allowEscapesForControlCharacters" value="true"/>
|
||||
<property name="allowByTailComment" value="true"/>
|
||||
<property name="allowNonPrintableEscapes" value="true"/>
|
||||
</module>
|
||||
<module name="LineLength">
|
||||
<property name="max" value="100"/>
|
||||
<property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
|
||||
</module>
|
||||
<module name="AvoidStarImport"/>
|
||||
<module name="OneTopLevelClass"/>
|
||||
<module name="NoLineWrap"/>
|
||||
<module name="EmptyBlock">
|
||||
<property name="option" value="TEXT"/>
|
||||
<property name="tokens"
|
||||
value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
|
||||
</module>
|
||||
<module name="NeedBraces"/>
|
||||
<module name="LeftCurly"/>
|
||||
<module name="RightCurly">
|
||||
<property name="id" value="RightCurlySame"/>
|
||||
<property name="tokens"
|
||||
value="LITERAL_TRY, LITERAL_CATCH, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE,
|
||||
LITERAL_DO"/>
|
||||
</module>
|
||||
<module name="RightCurly">
|
||||
<property name="id" value="RightCurlyAlone"/>
|
||||
<property name="option" value="alone"/>
|
||||
<property name="tokens"
|
||||
value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, STATIC_INIT,
|
||||
INSTANCE_INIT"/>
|
||||
</module>
|
||||
<module name="WhitespaceAround">
|
||||
<property name="allowEmptyConstructors" value="true"/>
|
||||
<property name="allowEmptyMethods" value="true"/>
|
||||
<property name="allowEmptyTypes" value="true"/>
|
||||
<property name="allowEmptyLoops" value="true"/>
|
||||
<message key="ws.notFollowed"
|
||||
value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks may only be represented as '{}' when not part of a multi-block statement (4.1.3)"/>
|
||||
<message key="ws.notPreceded"
|
||||
value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/>
|
||||
</module>
|
||||
<module name="OneStatementPerLine"/>
|
||||
<module name="MultipleVariableDeclarations"/>
|
||||
<module name="ArrayTypeStyle"/>
|
||||
<module name="MissingSwitchDefault"/>
|
||||
<module name="FallThrough"/>
|
||||
<module name="UpperEll"/>
|
||||
<module name="ModifierOrder"/>
|
||||
<module name="EmptyLineSeparator">
|
||||
<property name="allowNoEmptyLineBetweenFields" value="true"/>
|
||||
</module>
|
||||
<module name="SeparatorWrap">
|
||||
<property name="id" value="SeparatorWrapDot"/>
|
||||
<property name="tokens" value="DOT"/>
|
||||
<property name="option" value="nl"/>
|
||||
</module>
|
||||
<module name="SeparatorWrap">
|
||||
<property name="id" value="SeparatorWrapComma"/>
|
||||
<property name="tokens" value="COMMA"/>
|
||||
<property name="option" value="EOL"/>
|
||||
</module>
|
||||
<module name="SeparatorWrap">
|
||||
<!-- ELLIPSIS is EOL until https://github.com/google/styleguide/issues/258 -->
|
||||
<property name="id" value="SeparatorWrapEllipsis"/>
|
||||
<property name="tokens" value="ELLIPSIS"/>
|
||||
<property name="option" value="EOL"/>
|
||||
</module>
|
||||
<module name="SeparatorWrap">
|
||||
<!-- ARRAY_DECLARATOR is EOL until https://github.com/google/styleguide/issues/259 -->
|
||||
<property name="id" value="SeparatorWrapArrayDeclarator"/>
|
||||
<property name="tokens" value="ARRAY_DECLARATOR"/>
|
||||
<property name="option" value="EOL"/>
|
||||
</module>
|
||||
<module name="SeparatorWrap">
|
||||
<property name="id" value="SeparatorWrapMethodRef"/>
|
||||
<property name="tokens" value="METHOD_REF"/>
|
||||
<property name="option" value="nl"/>
|
||||
</module>
|
||||
<module name="PackageName">
|
||||
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
|
||||
<message key="name.invalidPattern"
|
||||
value="Package name ''{0}'' must match pattern ''{1}''."/>
|
||||
</module>
|
||||
<module name="TypeName">
|
||||
<message key="name.invalidPattern"
|
||||
value="Type name ''{0}'' must match pattern ''{1}''."/>
|
||||
</module>
|
||||
<module name="MemberName">
|
||||
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
|
||||
<message key="name.invalidPattern"
|
||||
value="Member name ''{0}'' must match pattern ''{1}''."/>
|
||||
</module>
|
||||
<module name="ParameterName">
|
||||
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
|
||||
<message key="name.invalidPattern"
|
||||
value="Parameter name ''{0}'' must match pattern ''{1}''."/>
|
||||
</module>
|
||||
<module name="LambdaParameterName">
|
||||
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
|
||||
<message key="name.invalidPattern"
|
||||
value="Lambda parameter name ''{0}'' must match pattern ''{1}''."/>
|
||||
</module>
|
||||
<module name="CatchParameterName">
|
||||
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
|
||||
<message key="name.invalidPattern"
|
||||
value="Catch parameter name ''{0}'' must match pattern ''{1}''."/>
|
||||
</module>
|
||||
<module name="LocalVariableName">
|
||||
<property name="tokens" value="VARIABLE_DEF"/>
|
||||
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
|
||||
<message key="name.invalidPattern"
|
||||
value="Local variable name ''{0}'' must match pattern ''{1}''."/>
|
||||
</module>
|
||||
<module name="ClassTypeParameterName">
|
||||
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
|
||||
<message key="name.invalidPattern"
|
||||
value="Class type name ''{0}'' must match pattern ''{1}''."/>
|
||||
</module>
|
||||
<module name="MethodTypeParameterName">
|
||||
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
|
||||
<message key="name.invalidPattern"
|
||||
value="Method type name ''{0}'' must match pattern ''{1}''."/>
|
||||
</module>
|
||||
<module name="InterfaceTypeParameterName">
|
||||
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
|
||||
<message key="name.invalidPattern"
|
||||
value="Interface type name ''{0}'' must match pattern ''{1}''."/>
|
||||
</module>
|
||||
<module name="NoFinalizer"/>
|
||||
<module name="GenericWhitespace">
|
||||
<message key="ws.followed"
|
||||
value="GenericWhitespace ''{0}'' is followed by whitespace."/>
|
||||
<message key="ws.preceded"
|
||||
value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
|
||||
<message key="ws.illegalFollow"
|
||||
value="GenericWhitespace ''{0}'' should followed by whitespace."/>
|
||||
<message key="ws.notPreceded"
|
||||
value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
|
||||
</module>
|
||||
<module name="Indentation">
|
||||
<property name="basicOffset" value="2"/>
|
||||
<property name="braceAdjustment" value="0"/>
|
||||
<property name="caseIndent" value="2"/>
|
||||
<property name="throwsIndent" value="4"/>
|
||||
<property name="lineWrappingIndentation" value="4"/>
|
||||
<property name="arrayInitIndent" value="2"/>
|
||||
</module>
|
||||
<module name="AbbreviationAsWordInName">
|
||||
<property name="ignoreFinal" value="false"/>
|
||||
<property name="allowedAbbreviationLength" value="1"/>
|
||||
</module>
|
||||
<module name="OverloadMethodsDeclarationOrder"/>
|
||||
<module name="VariableDeclarationUsageDistance"/>
|
||||
<module name="CustomImportOrder">
|
||||
<property name="sortImportsInGroupAlphabetically" value="true"/>
|
||||
<property name="separateLineBetweenGroups" value="true"/>
|
||||
<property name="customImportOrderRules" value="STATIC###THIRD_PARTY_PACKAGE"/>
|
||||
</module>
|
||||
<module name="MethodParamPad"/>
|
||||
<module name="NoWhitespaceBefore">
|
||||
<property name="tokens"
|
||||
value="COMMA, SEMI, POST_INC, POST_DEC, DOT, ELLIPSIS, METHOD_REF"/>
|
||||
<property name="allowLineBreaks" value="true"/>
|
||||
</module>
|
||||
<module name="ParenPad"/>
|
||||
<module name="OperatorWrap">
|
||||
<property name="option" value="NL"/>
|
||||
<property name="tokens"
|
||||
value="BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR,
|
||||
LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR, METHOD_REF "/>
|
||||
</module>
|
||||
<module name="AnnotationLocation">
|
||||
<property name="id" value="AnnotationLocationMostCases"/>
|
||||
<property name="tokens"
|
||||
value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"/>
|
||||
</module>
|
||||
<module name="AnnotationLocation">
|
||||
<property name="id" value="AnnotationLocationVariables"/>
|
||||
<property name="tokens" value="VARIABLE_DEF"/>
|
||||
<property name="allowSamelineMultipleAnnotations" value="true"/>
|
||||
</module>
|
||||
<module name="NonEmptyAtclauseDescription"/>
|
||||
<module name="JavadocTagContinuationIndentation">
|
||||
<property name="severity" value="ignore" />
|
||||
</module>
|
||||
<module name="SummaryJavadoc">
|
||||
<property name="severity" value="ignore" />
|
||||
<property name="forbiddenSummaryFragments"
|
||||
value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"/>
|
||||
</module>
|
||||
<module name="JavadocParagraph">
|
||||
<property name="severity" value="ignore" />
|
||||
</module>
|
||||
<module name="AtclauseOrder">
|
||||
<property name="tagOrder" value="@param, @return, @throws, @deprecated"/>
|
||||
<property name="target"
|
||||
value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
|
||||
</module>
|
||||
<module name="JavadocMethod">
|
||||
<property name="severity" value="ignore" />
|
||||
<property name="scope" value="public"/>
|
||||
<property name="allowMissingParamTags" value="true"/>
|
||||
<property name="allowMissingThrowsTags" value="true"/>
|
||||
<property name="allowMissingReturnTag" value="true"/>
|
||||
<property name="minLineCount" value="2"/>
|
||||
<property name="allowedAnnotations" value="Override, Test"/>
|
||||
<property name="allowThrowsTagsForSubclasses" value="true"/>
|
||||
</module>
|
||||
<module name="MethodName">
|
||||
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"/>
|
||||
<message key="name.invalidPattern"
|
||||
value="Method name ''{0}'' must match pattern ''{1}''."/>
|
||||
</module>
|
||||
<module name="SingleLineJavadoc">
|
||||
<property name="severity" value="ignore"/>
|
||||
</module>
|
||||
<module name="EmptyCatchBlock">
|
||||
<property name="exceptionVariableName" value="expected"/>
|
||||
</module>
|
||||
<module name="CommentsIndentation"/>
|
||||
</module>
|
||||
</module>
|
@ -0,0 +1,918 @@
|
||||
- artifact: com.gitlab.abaker:dav4jvm:+
|
||||
name: dav4jvm
|
||||
copyrightHolder: bitfire web engineering (Ricki Hirner, Bernhard Stockmann)
|
||||
license: Mozilla Public License, Version 2.0
|
||||
licenseUrl: https://www.mozilla.org/en-US/MPL/2.0/
|
||||
- artifact: com.gitlab.abaker:ical4android:+
|
||||
name: ical4android
|
||||
copyrightHolder: bitfire web engineering (Ricki Hirner, Bernhard Stockmann)
|
||||
license: GNU General Public License, Version 3.0
|
||||
licenseUrl: https://www.gnu.org/licenses/gpl.txt
|
||||
- artifact: com.gitlab.bitfireAT:cert4android:+
|
||||
name: cert4android
|
||||
copyrightHolder: bitfire web engineering (Ricki Hirner, Bernhard Stockmann)
|
||||
licenseUrl: https://www.gnu.org/licenses/gpl.txt
|
||||
license: GNU General Public License, Version 3.0
|
||||
- artifact: androidx.coordinatorlayout:coordinatorlayout:+
|
||||
name: Android Support Library Coordinator Layout
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.constraintlayout:constraintlayout:+
|
||||
name: Android ConstraintLayout
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://tools.android.com
|
||||
- artifact: androidx.sqlite:sqlite:+
|
||||
name: Android DB
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: com.google.apis:google-api-services-drive:+
|
||||
name: Drive API v3-rev136-1.25.0
|
||||
copyrightHolder: Google Inc.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
- artifact: androidx.fragment:fragment:+
|
||||
name: Android Support Library fragment
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.vectordrawable:vectordrawable-animated:+
|
||||
name: Android Support AnimatedVectorDrawable
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.core:core:+
|
||||
name: Android Support Library compat
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.arch.core:core-common:+
|
||||
name: Android Arch-Common
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: androidx.room:room-common:+
|
||||
name: Android Room-Common
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: androidx.room:room-runtime:+
|
||||
name: Android Room-Runtime
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: com.google.code.gson:gson:+
|
||||
name: Gson
|
||||
copyrightHolder: Google Inc.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
- artifact: me.leolin:ShortcutBadger:+
|
||||
name: ShortcutBadger
|
||||
copyrightHolder: Leo Lin
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/leolin310148/ShortcutBadger
|
||||
- artifact: androidx.lifecycle:lifecycle-runtime:+
|
||||
name: Android Lifecycle Runtime
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: androidx.versionedparcelable:versionedparcelable:+
|
||||
name: VersionedParcelable and friends
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.viewpager:viewpager:+
|
||||
name: Android Support Library View Pager
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.lifecycle:lifecycle-livedata:+
|
||||
name: Android Lifecycle LiveData
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: commons-codec:commons-codec:+
|
||||
name: Apache Commons Codec
|
||||
copyrightHolder: The Apache Software Foundation
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://commons.apache.org/proper/commons-codec/
|
||||
- artifact: androidx.annotation:annotation:+
|
||||
name: Android Support Library Annotations
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.interpolator:interpolator:+
|
||||
name: Android Support Library Interpolators
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: javax.inject:javax.inject:+
|
||||
name: javax.inject
|
||||
copyrightHolder: The JSR-330 Expert Group
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://code.google.com/p/atinject/
|
||||
- artifact: com.twofortyfouram:android-plugin-api-for-locale:+
|
||||
name: android-plugin-api-for-locale
|
||||
copyrightHolder: two forty four a.m. LLC.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
- artifact: androidx.lifecycle:lifecycle-viewmodel:+
|
||||
name: Android Lifecycle ViewModel
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: com.google.dagger:dagger:+
|
||||
name: Dagger
|
||||
copyrightHolder: The Dagger Authors
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/google/dagger
|
||||
- artifact: com.google.guava:guava:+
|
||||
name: Guava Google Core Libraries for Java
|
||||
copyrightHolder: The Guava Authors
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
- artifact: org.jetbrains:annotations:+
|
||||
name: JetBrains Java Annotations
|
||||
copyrightHolder: JetBrains s.r.o.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/JetBrains/java-annotations
|
||||
- artifact: org.apache.commons:commons-lang3:+
|
||||
name: Apache Commons Lang
|
||||
copyrightHolder: The Apache Software Foundation
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://commons.apache.org/proper/commons-lang/
|
||||
- artifact: androidx.loader:loader:+
|
||||
name: Android Support Library loader
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.cursoradapter:cursoradapter:+
|
||||
name: Android Support Library Cursor Adapter
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.lifecycle:lifecycle-livedata-core:+
|
||||
name: Android Lifecycle LiveData Core
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: androidx.customview:customview:+
|
||||
name: Android Support Library Custom View
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: io.reactivex.rxjava2:rxandroid:+
|
||||
name: RxAndroid
|
||||
copyrightHolder: The RxAndroid authors
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/ReactiveX/RxAndroid
|
||||
- artifact: androidx.swiperefreshlayout:swiperefreshlayout:+
|
||||
name: Android Support Library Custom View
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.lifecycle:lifecycle-extensions:+
|
||||
name: Android Lifecycle Extensions
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: androidx.arch.core:core-runtime:+
|
||||
name: Android Arch-Runtime
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: org.apache.commons:commons-collections4:+
|
||||
name: Apache Commons Collections
|
||||
copyrightHolder: The Apache Software Foundation
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://commons.apache.org/proper/commons-collections/
|
||||
- artifact: org.mnode.ical4j:ical4j:+
|
||||
name: ical4j
|
||||
copyrightHolder: Ben Fortuna
|
||||
license: BSD 3-Clause
|
||||
licenseUrl: https://opensource.org/licenses/BSD-3-Clause
|
||||
url: http://ical4j.github.io
|
||||
forceGenerate: true
|
||||
- artifact: androidx.recyclerview:recyclerview:+
|
||||
name: Android Support RecyclerView v7
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.collection:collection:+
|
||||
name: Android Support Library collections
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.cardview:cardview:+
|
||||
name: Android Support CardView v7
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: com.rubiconproject.oss:jchronic:+
|
||||
name: jchronic
|
||||
copyrightHolder: The jchronic authors
|
||||
license: MIT License
|
||||
licenseUrl: http://www.opensource.org/licenses/mit-license.php
|
||||
url: http://github.com/samtingleff/jchronic
|
||||
- artifact: androidx.sqlite:sqlite-framework:+
|
||||
name: Android Support SQLite - Framework Implementation
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: com.google.android.material:material:+
|
||||
name: Material Components for Android
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: com.google.android.apps.dashclock:dashclock-api:+
|
||||
name: DashClock API
|
||||
copyrightHolder: Google Inc.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://dashclock.com/api
|
||||
- artifact: androidx.vectordrawable:vectordrawable:+
|
||||
name: Android Support VectorDrawable
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: org.reactivestreams:reactive-streams:+
|
||||
name: reactive-streams
|
||||
copyrightHolder: Public domain
|
||||
license: CC0
|
||||
licenseUrl: http://creativecommons.org/publicdomain/zero/1.0/
|
||||
url: http://www.reactive-streams.org/
|
||||
- artifact: androidx.work:work-runtime:+
|
||||
name: Android WorkManager Runtime
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: androidx.appcompat:appcompat:+
|
||||
name: Android AppCompat Library v7
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.lifecycle:lifecycle-common:+
|
||||
name: Android Lifecycle-Common
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: androidx.lifecycle:lifecycle-process:+
|
||||
name: Android Lifecycle Process
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: androidx.lifecycle:lifecycle-service:+
|
||||
name: Android Lifecycle Service
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: androidx.transition:transition:+
|
||||
name: Android Transition Support Library
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: com.jakewharton.timber:timber:+
|
||||
name: Timber
|
||||
copyrightHolder: Jake Wharton
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/JakeWharton/timber
|
||||
- artifact: com.google.oauth-client:google-oauth-client:+
|
||||
name: Google OAuth Client Library for Java
|
||||
copyrightHolder: Google Inc.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
- artifact: androidx.drawerlayout:drawerlayout:+
|
||||
name: Android Support Library Drawer Layout
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: io.reactivex.rxjava2:rxjava:+
|
||||
name: RxJava
|
||||
copyrightHolder: RxJava Contributors
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/ReactiveX/RxJava
|
||||
- artifact: com.google.apis:google-api-services-tasks:+
|
||||
name: Tasks API v1-rev55-1.25.0
|
||||
copyrightHolder: Google Inc.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
- artifact: com.google.api-client:google-api-client:+
|
||||
name: Google APIs Client Library for Java
|
||||
copyrightHolder: Google Inc.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
- artifact: org.jetbrains.kotlin:kotlin-stdlib:+
|
||||
name: org.jetbrains.kotlin:kotlin-stdlib
|
||||
copyrightHolder: JetBrains s.r.o.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://kotlinlang.org/
|
||||
- artifact: com.google.http-client:google-http-client:+
|
||||
name: Google HTTP Client Library for Java
|
||||
copyrightHolder: Google Inc.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
- artifact: org.slf4j:slf4j-jdk14:+
|
||||
name: SLF4J JDK14 Binding
|
||||
copyrightHolder: QOS.ch
|
||||
license: MIT License
|
||||
licenseUrl: http://www.opensource.org/licenses/mit-license.php
|
||||
url: http://www.slf4j.org
|
||||
- artifact: com.squareup.okhttp3:okhttp:+
|
||||
name: OkHttp
|
||||
copyrightHolder: Square, Inc.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
- artifact: org.slf4j:slf4j-api:+
|
||||
name: SLF4J API Module
|
||||
copyrightHolder: QOS.ch
|
||||
license: MIT License
|
||||
licenseUrl: http://www.opensource.org/licenses/mit-license.php
|
||||
url: http://www.slf4j.org
|
||||
- artifact: org.jetbrains.kotlin:kotlin-stdlib-common:+
|
||||
name: org.jetbrains.kotlin:kotlin-stdlib-common
|
||||
copyrightHolder: JetBrains s.r.o.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://kotlinlang.org/
|
||||
- artifact: com.squareup.okhttp3:logging-interceptor:+
|
||||
name: OkHttp Logging Interceptor
|
||||
copyrightHolder: Square, Inc.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
- artifact: org.jetbrains.kotlin:kotlin-stdlib-jdk7:+
|
||||
name: org.jetbrains.kotlin:kotlin-stdlib-jdk7
|
||||
copyrightHolder: JetBrains s.r.o.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://kotlinlang.org/
|
||||
- artifact: io.grpc:grpc-context:+
|
||||
name: io.grpc:grpc-context
|
||||
copyrightHolder: The gRPC Authors
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/grpc/grpc-java
|
||||
- artifact: com.google.guava:listenablefuture:+
|
||||
name: Guava ListenableFuture only
|
||||
copyrightHolder: The Guava Authors
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
- artifact: io.opencensus:opencensus-api:+
|
||||
name: OpenCensus API
|
||||
copyrightHolder: OpenCensus Authors
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/census-instrumentation/opencensus-java
|
||||
- artifact: com.google.guava:failureaccess:+
|
||||
name: Guava InternalFutureFailureAccess and InternalFutures
|
||||
copyrightHolder: The Guava Authors
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
- artifact: io.opencensus:opencensus-contrib-http-util:+
|
||||
name: OpenCensus contrib-http-util
|
||||
copyrightHolder: OpenCensus Authors
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/census-instrumentation/opencensus-java
|
||||
- artifact: androidx.core:core-ktx:+
|
||||
name: Core Kotlin Extensions
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.appcompat:appcompat-resources:+
|
||||
name: Android Resources Library
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.viewpager2:viewpager2:+
|
||||
name: AndroidX Widget ViewPager2
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.savedstate:savedstate:+
|
||||
name: Activity
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.activity:activity:+
|
||||
name: Activity
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.paging:paging-runtime:+
|
||||
name: Android Paging-Runtime
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: androidx.paging:paging-common:+
|
||||
name: Android Paging-Common
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: org.conscrypt:conscrypt-android:+
|
||||
name: org.conscrypt:conscrypt-android
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: https://www.apache.org/licenses/LICENSE-2.0
|
||||
url: https://conscrypt.org/
|
||||
- artifact: org.jetbrains.kotlinx:kotlinx-coroutines-android:+
|
||||
name: kotlinx-coroutines-android
|
||||
copyrightHolder: JetBrains s.r.o.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/Kotlin/kotlinx.coroutines
|
||||
- artifact: androidx.databinding:databinding-adapters:+
|
||||
name: databinding-adapters
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
- artifact: androidx.lifecycle:lifecycle-viewmodel-ktx:+
|
||||
name: Android Lifecycle ViewModel Kotlin Extensions
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.annotation:annotation-experimental:+
|
||||
name: Experimental annotation
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx
|
||||
- artifact: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:+
|
||||
name: kotlinx-coroutines-core-jvm
|
||||
copyrightHolder: JetBrains s.r.o.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/Kotlin/kotlinx.coroutines
|
||||
- artifact: androidx.databinding:databinding-common:+
|
||||
name: Data Binding Base Library
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/studio
|
||||
- artifact: androidx.databinding:databinding-runtime:+
|
||||
name: databinding-runtime
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
- artifact: androidx.databinding:viewbinding:+
|
||||
name: viewbinding
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
- artifact: com.madgag.spongycastle:core:+
|
||||
name: Spongy Castle Core
|
||||
copyrightHolder: The Legion of the Bouncy Castle Inc.
|
||||
license: Bouncy Castle Licence
|
||||
licenseUrl: http://www.bouncycastle.org/licence.html
|
||||
url: http://rtyley.github.io/spongycastle/
|
||||
- artifact: com.etesync:journalmanager:+
|
||||
name: EteSync JVM
|
||||
copyrightHolder: Tom Hacohen
|
||||
license: LGPL-3.0-only
|
||||
licenseUrl: https://spdx.org/licenses/LGPL-3.0-only.html
|
||||
url: https://www.etesync.com
|
||||
- artifact: com.madgag.spongycastle:prov:+
|
||||
name: Spongy Castle
|
||||
copyrightHolder: The Legion of the Bouncy Castle Inc.
|
||||
license: Bouncy Castle Licence
|
||||
licenseUrl: http://www.bouncycastle.org/licence.html
|
||||
url: http://rtyley.github.io/spongycastle/
|
||||
- artifact: androidx.preference:preference:+
|
||||
name: AndroidX Preference
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx
|
||||
- artifact: androidx.lifecycle:lifecycle-viewmodel-savedstate:+
|
||||
name: Android Lifecycle ViewModel with SavedState
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: com.github.QuadFlask:colorpicker:+
|
||||
name: QuadFlask/colorpicker
|
||||
copyrightHolder: QuadFlask
|
||||
license: The Apache Software License, Version 2.0
|
||||
url: https://github.com/QuadFlask/colorpicker
|
||||
- artifact: com.google.auth:google-auth-library-credentials:+
|
||||
name: Google Auth Library for Java - Credentials
|
||||
copyrightHolder: Google Inc.
|
||||
license: BSD 3-Clause
|
||||
- artifact: com.google.auth:google-auth-library-oauth2-http:+
|
||||
name: Google Auth Library for Java - OAuth2 HTTP
|
||||
copyrightHolder: Google Inc.
|
||||
license: BSD 3-Clause
|
||||
- artifact: com.google.auto.value:auto-value-annotations:+
|
||||
name: AutoValue Annotations
|
||||
copyrightHolder: Google LLC
|
||||
license: The Apache Software License, Version 2.0
|
||||
url: https://github.com/google/auto/tree/master/value
|
||||
- artifact: com.sun.mail:android-mail:+
|
||||
name: android-mail
|
||||
copyrightHolder: Oracle and/or its affiliates
|
||||
license: Eclipse Public License, Version 2.0
|
||||
- artifact: commons-io:commons-io:+
|
||||
name: commons-io
|
||||
copyrightHolder: The Apache Software Foundation
|
||||
license: The Apache Software License, Version 2.0
|
||||
url: http://commons.apache.org/proper/commons-io/
|
||||
- artifact: com.sun.mail:android-activation:+
|
||||
name: android-activation
|
||||
copyrightHolder: Oracle and/or its affiliates
|
||||
license: Eclipse Public License, Version 2.0
|
||||
- artifact: androidx.hilt:hilt-work:+
|
||||
name: hilt-work
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: androidx.hilt:hilt-common:+
|
||||
name: hilt-common
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: com.google.dagger:hilt-android:+
|
||||
name: hilt-android
|
||||
copyrightHolder: The Dagger Authors
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: https://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/google/dagger
|
||||
- artifact: com.google.dagger:dagger-lint-aar:+
|
||||
name: dagger-lint-aar
|
||||
copyrightHolder: The Dagger Authors
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: https://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/google/dagger
|
||||
- artifact: androidx.room:room-ktx:+
|
||||
name: room-ktx
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: androidx.lifecycle:lifecycle-runtime-ktx:+
|
||||
name: lifecycle-runtime-ktx
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx
|
||||
- artifact: androidx.fragment:fragment-ktx:+
|
||||
name: fragment-ktx
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx
|
||||
- artifact: androidx.activity:activity-ktx:+
|
||||
name: activity-ktx
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx
|
||||
- artifact: androidx.collection:collection-ktx:+
|
||||
name: collection-ktx
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.lifecycle:lifecycle-livedata-core-ktx:+
|
||||
name: lifecycle-livedata-core-ktx
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx
|
||||
- artifact: androidx.work:work-runtime-ktx:+
|
||||
name: work-runtime-ktx
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: com.github.dmfs.opentasks:opentasks-provider:+
|
||||
name: opentasks-provider
|
||||
copyrightHolder: dmfs GmbH
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: https://api.github.com/licenses/apache-2.0
|
||||
url: https://github.com/dmfs/opentasks
|
||||
- artifact: com.github.dmfs.opentasks:opentasks-contract:+
|
||||
name: opentasks-contract
|
||||
copyrightHolder: dmfs GmbH
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: https://api.github.com/licenses/apache-2.0
|
||||
url: https://github.com/dmfs/opentasks
|
||||
forceGenerate: true
|
||||
- artifact: org.dmfs:lib-recur:+
|
||||
name: lib-recur
|
||||
copyrightHolder: Marten Gajda
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/license/LICENSE-2.0.txt
|
||||
url: https://github.com/dmfs/lib-recur
|
||||
- artifact: org.dmfs:rfc5545-datetime:+
|
||||
name: rfc5545-datetime
|
||||
copyrightHolder: Marten Gajda
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/dmfs/rfc5545-datetime
|
||||
- artifact: org.dmfs:jems:+
|
||||
name: jems
|
||||
copyrightHolder: dmfs GmbH
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/license/LICENSE-2.0.txt
|
||||
url: https://github.com/dmfs/jems
|
||||
- artifact: org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:+
|
||||
name: kotlinx-collections-immutable-jvm
|
||||
copyrightHolder: JetBrains s.r.o.
|
||||
license: The Apache Software License, Version 2.0
|
||||
- artifact: com.squareup.okio:okio:+
|
||||
name: okio
|
||||
copyrightHolder: Square, Inc.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/square/okio/
|
||||
- artifact: com.google.dagger:hilt-core:+
|
||||
name: hilt-core
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: https://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/google/dagger
|
||||
- artifact: io.noties.markwon:core:+
|
||||
name: core
|
||||
copyrightHolder: Dimitry Ivanov
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/noties/Markwon
|
||||
- artifact: com.atlassian.commonmark:commonmark:+
|
||||
name: commonmark
|
||||
copyrightHolder: Atlassian and others
|
||||
license: BSD 2-Clause
|
||||
- artifact: androidx.browser:browser:+
|
||||
name: browser
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: com.etebase:client:+
|
||||
name: client
|
||||
copyrightHolder: Tom Hacohen
|
||||
license: LGPL-3.0-only
|
||||
licenseUrl: https://spdx.org/licenses/LGPL-3.0-only.html
|
||||
url: https://www.etebase.com
|
||||
- artifact: net.openid:appauth:+
|
||||
name: appauth
|
||||
copyrightHolder: The AppAuth for Android Authors
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/openid/AppAuth-Android
|
||||
- artifact: androidx.concurrent:concurrent-futures:+
|
||||
name: concurrent-futures
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/topic/libraries/architecture/index.html
|
||||
- artifact: androidx.lifecycle:lifecycle-livedata-ktx:+
|
||||
name: lifecycle-livedata-ktx
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx
|
||||
- artifact: androidx.dynamicanimation:dynamicanimation:+
|
||||
name: dynamicanimation
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.legacy:legacy-support-core-utils:+
|
||||
name: legacy-support-core-utils
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.documentfile:documentfile:+
|
||||
name: documentfile
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.localbroadcastmanager:localbroadcastmanager:+
|
||||
name: localbroadcastmanager
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: androidx.print:print:+
|
||||
name: print
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://developer.android.com/tools/extras/support-library.html
|
||||
- artifact: com.google.http-client:google-http-client-gson:+
|
||||
name: google-http-client-gson
|
||||
copyrightHolder: Google Inc.
|
||||
license: The Apache Software License, Version 2.0
|
||||
- artifact: org.osmdroid:osmdroid-android:+
|
||||
name: osmdroid-android
|
||||
copyrightHolder: The OsmDroid Authors
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0
|
||||
url: https://github.com/osmdroid/osmdroid
|
||||
- artifact: androidx.savedstate:savedstate-ktx:+
|
||||
name: savedstate-ktx
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx/releases/savedstate#1.1.0
|
||||
- artifact: androidx.tracing:tracing:+
|
||||
name: tracing
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0
|
||||
- artifact: androidx.databinding:databinding-ktx:+
|
||||
name: databinding-ktx
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
- artifact: org.jetbrains.kotlin:kotlin-stdlib-jdk8:+
|
||||
name: kotlin-stdlib-jdk8
|
||||
copyrightHolder: JetBrains s.r.o.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://kotlinlang.org/
|
||||
- artifact: androidx.compose.ui:ui:+
|
||||
name: ui
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx/releases/compose-ui#1.0.0-beta01
|
||||
- artifact: androidx.compose.animation:animation-core:+
|
||||
name: animation-core
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx/releases/compose-animation#1.0.0-beta01
|
||||
- artifact: androidx.compose.ui:ui-text:+
|
||||
name: ui-text
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx/releases/compose-ui#1.0.0-beta01
|
||||
- artifact: androidx.compose.runtime:runtime-saveable:+
|
||||
name: runtime-saveable
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx/releases/compose-runtime#1.0.0-beta01
|
||||
- artifact: androidx.compose.ui:ui-graphics:+
|
||||
name: ui-graphics
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx/releases/compose-ui#1.0.0-beta01
|
||||
- artifact: androidx.compose.ui:ui-unit:+
|
||||
name: ui-unit
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx/releases/compose-ui#1.0.0-beta01
|
||||
- artifact: androidx.compose.ui:ui-geometry:+
|
||||
name: ui-geometry
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx/releases/compose-ui#1.0.0-beta01
|
||||
- artifact: androidx.compose.ui:ui-util:+
|
||||
name: ui-util
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx/releases/compose-ui#1.0.0-beta01
|
||||
- artifact: androidx.compose.runtime:runtime:+
|
||||
name: runtime
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx/releases/compose-runtime#1.0.0-beta01
|
||||
- artifact: androidx.autofill:autofill:+
|
||||
name: autofill
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx
|
||||
- artifact: androidx.compose.foundation:foundation:+
|
||||
name: foundation
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx/releases/compose-foundation#1.0.0-beta01
|
||||
- artifact: androidx.compose.animation:animation:+
|
||||
name: animation
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx/releases/compose-animation#1.0.0-beta01
|
||||
- artifact: androidx.compose.foundation:foundation-layout:+
|
||||
name: foundation-layout
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx/releases/compose-foundation#1.0.0-beta01
|
||||
- artifact: androidx.compose.material:material:+
|
||||
name: material
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx/releases/compose-material#1.0.0-beta01
|
||||
- artifact: androidx.compose.material:material-ripple:+
|
||||
name: material-ripple
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx/releases/compose-material#1.0.0-beta01
|
||||
- artifact: androidx.compose.material:material-icons-core:+
|
||||
name: material-icons-core
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx/releases/compose-material#1.0.0-beta01
|
||||
- artifact: androidx.compose.ui:ui-tooling:+
|
||||
skip: true
|
||||
- artifact: androidx.compose.ui:ui-tooling-data:+
|
||||
skip: true
|
||||
- artifact: androidx.compose.runtime:runtime-livedata:+
|
||||
name: runtime-livedata
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx/releases/compose-runtime#1.0.0-beta01
|
||||
- artifact: com.google.android.material:compose-theme-adapter:+
|
||||
name: compose-theme-adapter
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/material-components/material-components-android-compose-theme-adapter/
|
||||
- artifact: androidx.constraintlayout:constraintlayout-core:+
|
||||
name: constraintlayout-core
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://tools.android.com
|
||||
- artifact: androidx.activity:activity-compose:+
|
||||
name: activity-compose
|
||||
copyrightHolder: Android Open Source Project
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://developer.android.com/jetpack/androidx/releases/activity#1.3.0-alpha04
|
@ -0,0 +1,78 @@
|
||||
package com.todoroo.astrid.adapter
|
||||
|
||||
import android.content.Context
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import com.natpryce.makeiteasy.MakeItEasy.with
|
||||
import com.natpryce.makeiteasy.PropertyValue
|
||||
import com.todoroo.astrid.core.BuiltInFilterExposer
|
||||
import com.todoroo.astrid.dao.TaskDao
|
||||
import com.todoroo.astrid.data.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.LocalBroadcastManager
|
||||
import org.tasks.R
|
||||
import org.tasks.data.CaldavDao
|
||||
import org.tasks.data.GoogleTaskDao
|
||||
import org.tasks.data.TaskContainer
|
||||
import org.tasks.data.TaskListQuery.getQuery
|
||||
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 NonRecursiveQueryTest : 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
|
||||
|
||||
private lateinit var adapter: TaskAdapter
|
||||
private val tasks = ArrayList<TaskContainer>()
|
||||
private val filter = BuiltInFilterExposer.getMyTasksFilter(ApplicationProvider.getApplicationContext<Context>().resources)
|
||||
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()
|
||||
preferences.setBoolean(R.string.p_use_paged_queries, true)
|
||||
tasks.clear()
|
||||
adapter = TaskAdapter(false, googleTaskDao, caldavDao, taskDao, localBroadcastManager)
|
||||
adapter.setDataSource(dataSource)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ignoreSubtasks() {
|
||||
val parent = addTask()
|
||||
val child = addTask(with(PARENT, parent))
|
||||
|
||||
query()
|
||||
|
||||
assertEquals(child, tasks[1].id)
|
||||
assertEquals(parent, tasks[1].parent)
|
||||
assertEquals(0, tasks[1].indent)
|
||||
}
|
||||
|
||||
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, it) })
|
||||
}
|
||||
}
|
@ -1,290 +1,52 @@
|
||||
package com.todoroo.astrid.alarms
|
||||
|
||||
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
|
||||
import org.junit.Test
|
||||
import org.tasks.SuspendFreeze.Companion.freezeAt
|
||||
import org.tasks.data.createDueDate
|
||||
import org.tasks.data.dao.TaskDao
|
||||
import org.tasks.data.entity.Alarm
|
||||
import org.tasks.data.entity.Notification
|
||||
import org.tasks.data.entity.Task
|
||||
import org.tasks.data.Alarm
|
||||
import org.tasks.data.AlarmDao
|
||||
import org.tasks.injection.InjectingTestCase
|
||||
import org.tasks.injection.ProductionModule
|
||||
import org.tasks.jobs.AlarmEntry
|
||||
import org.tasks.jobs.NotificationQueue
|
||||
import org.tasks.makers.TaskMaker.REMINDER_LAST
|
||||
import org.tasks.makers.TaskMaker.newTask
|
||||
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 alarmDao: AlarmDao
|
||||
@Inject lateinit var taskDao: TaskDao
|
||||
@Inject lateinit var jobs: NotificationQueue
|
||||
@Inject lateinit var alarmService: AlarmService
|
||||
|
||||
@Test
|
||||
fun testNoAlarms() = runBlocking {
|
||||
testResults(emptyList(), 0)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun futureAlarmWithNoPastAlarm() = runBlocking {
|
||||
freezeAt(DateTime(2024, 5, 17, 23, 20)) {
|
||||
taskDao.insert(
|
||||
Task(
|
||||
dueDate = createDueDate(
|
||||
Task.URGENCY_SPECIFIC_DAY,
|
||||
DateTime(2024, 5, 18).millis
|
||||
)
|
||||
)
|
||||
)
|
||||
alarmService.synchronizeAlarms(1, mutableSetOf(Alarm(type = Alarm.TYPE_REL_END)))
|
||||
|
||||
testResults(emptyList(), DateTime(2024, 5, 18, 18, 0).millis)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun pastAlarmWithNoFutureAlarm() = runBlocking {
|
||||
freezeAt(DateTime(2024, 5, 17, 23, 20)) {
|
||||
taskDao.insert(
|
||||
Task(
|
||||
dueDate = createDueDate(
|
||||
Task.URGENCY_SPECIFIC_DAY,
|
||||
DateTime(2024, 5, 17).millis
|
||||
)
|
||||
)
|
||||
)
|
||||
alarmService.synchronizeAlarms(1, mutableSetOf(Alarm(type = Alarm.TYPE_REL_END)))
|
||||
|
||||
testResults(
|
||||
listOf(
|
||||
Notification(
|
||||
taskId = 1L,
|
||||
timestamp = DateTimeUtils2.currentTimeMillis(),
|
||||
type = Alarm.TYPE_REL_END
|
||||
)
|
||||
),
|
||||
0
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun pastRecurringAlarmWithFutureRecurrence() = runBlocking {
|
||||
freezeAt(DateTime(2024, 5, 17, 23, 20)) {
|
||||
taskDao.insert(
|
||||
Task(
|
||||
dueDate = createDueDate(
|
||||
Task.URGENCY_SPECIFIC_DAY,
|
||||
DateTime(2024, 5, 17).millis
|
||||
)
|
||||
)
|
||||
)
|
||||
alarmService.synchronizeAlarms(
|
||||
1,
|
||||
mutableSetOf(
|
||||
Alarm(
|
||||
type = Alarm.TYPE_REL_END,
|
||||
repeat = 1,
|
||||
interval = TimeUnit.HOURS.toMillis(6)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
testResults(
|
||||
listOf(
|
||||
Notification(
|
||||
taskId = 1L,
|
||||
timestamp = DateTimeUtils2.currentTimeMillis(),
|
||||
type = Alarm.TYPE_REL_END
|
||||
)
|
||||
),
|
||||
DateTime(2024, 5, 18, 0, 0).millis
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun pastAlarmsRemoveSnoozed() = runBlocking {
|
||||
freezeAt(DateTime(2024, 5, 17, 23, 20)) {
|
||||
taskDao.insert(
|
||||
Task(
|
||||
dueDate = createDueDate(
|
||||
Task.URGENCY_SPECIFIC_DAY,
|
||||
DateTime(2024, 5, 17).millis
|
||||
)
|
||||
)
|
||||
)
|
||||
alarmService.synchronizeAlarms(
|
||||
1,
|
||||
mutableSetOf(
|
||||
Alarm(type = Alarm.TYPE_REL_END),
|
||||
Alarm(time = DateTimeUtils2.currentTimeMillis(), type = Alarm.TYPE_SNOOZE)
|
||||
)
|
||||
)
|
||||
|
||||
testResults(
|
||||
listOf(
|
||||
Notification(
|
||||
taskId = 1L,
|
||||
timestamp = DateTimeUtils2.currentTimeMillis(),
|
||||
type = Alarm.TYPE_REL_END
|
||||
)
|
||||
),
|
||||
0
|
||||
)
|
||||
|
||||
assertEquals(
|
||||
listOf(Alarm(id = 1, task = 1, time = 0, type = Alarm.TYPE_REL_END)),
|
||||
alarmService.getAlarms(1)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun alarmsOneMinuteApart() = runBlocking {
|
||||
freezeAt(DateTime(2024, 5, 17, 23, 20)) {
|
||||
taskDao.insert(
|
||||
Task(
|
||||
dueDate = createDueDate(
|
||||
Task.URGENCY_SPECIFIC_DAY_TIME,
|
||||
DateTime(2024, 5, 17, 23, 20).millis
|
||||
)
|
||||
)
|
||||
)
|
||||
alarmService.synchronizeAlarms(1, mutableSetOf(Alarm(type = Alarm.TYPE_REL_END)))
|
||||
taskDao.insert(Task())
|
||||
alarmService.synchronizeAlarms(
|
||||
taskId = 2,
|
||||
alarms = mutableSetOf(
|
||||
Alarm(
|
||||
type = Alarm.TYPE_SNOOZE,
|
||||
time = DateTime(2024, 5, 17, 23, 21).millis)
|
||||
)
|
||||
)
|
||||
fun scheduleAlarm() = runBlocking {
|
||||
val task = newTask()
|
||||
taskDao.createNew(task)
|
||||
val alarmTime = DateTime(2017, 9, 24, 19, 57)
|
||||
val alarm = Alarm(task.id, alarmTime.millis)
|
||||
alarm.id = alarmDao.insert(alarm)
|
||||
alarmService.scheduleAllAlarms()
|
||||
|
||||
testResults(
|
||||
listOf(
|
||||
Notification(
|
||||
taskId = 1L,
|
||||
timestamp = DateTimeUtils2.currentTimeMillis(),
|
||||
type = Alarm.TYPE_REL_END
|
||||
)
|
||||
),
|
||||
DateTime(2024, 5, 17, 23, 21).millis
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun futureSnoozeOverrideOverdue() = runBlocking {
|
||||
freezeAt(DateTime(2024, 5, 17, 23, 20)) {
|
||||
taskDao.insert(
|
||||
Task(
|
||||
dueDate = createDueDate(
|
||||
Task.URGENCY_SPECIFIC_DAY,
|
||||
DateTime(2024, 5, 17).millis
|
||||
)
|
||||
)
|
||||
)
|
||||
alarmService.synchronizeAlarms(
|
||||
1,
|
||||
mutableSetOf(
|
||||
Alarm(type = Alarm.TYPE_REL_END),
|
||||
Alarm(
|
||||
time = DateTimeUtils2.currentTimeMillis() + TimeUnit.MINUTES.toMillis(5),
|
||||
type = Alarm.TYPE_SNOOZE
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
testResults(
|
||||
emptyList(),
|
||||
DateTimeUtils2.currentTimeMillis() + TimeUnit.MINUTES.toMillis(5)
|
||||
)
|
||||
}
|
||||
assertEquals(listOf(AlarmEntry(alarm)), jobs.getJobs())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ignoreStaleAlarm() = runBlocking {
|
||||
freezeAt(DateTime(2024, 5, 17, 23, 20)) {
|
||||
taskDao.insert(
|
||||
Task(
|
||||
dueDate = createDueDate(
|
||||
Task.URGENCY_SPECIFIC_DAY,
|
||||
DateTime(2024, 5, 17).millis
|
||||
),
|
||||
reminderLast = DateTime(2024, 5, 17, 18, 0).millis,
|
||||
)
|
||||
)
|
||||
alarmService.synchronizeAlarms(
|
||||
1,
|
||||
mutableSetOf(Alarm(type = Alarm.TYPE_REL_END))
|
||||
)
|
||||
|
||||
testResults(
|
||||
emptyList(),
|
||||
0
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun dontScheduleForCompletedTask() = runBlocking {
|
||||
freezeAt(DateTime(2024, 5, 17, 23, 20)) {
|
||||
taskDao.insert(
|
||||
Task(
|
||||
dueDate = createDueDate(
|
||||
Task.URGENCY_SPECIFIC_DAY,
|
||||
DateTime(2024, 5, 17).millis
|
||||
),
|
||||
completionDate = DateTime(2024, 5, 17, 14, 0).millis,
|
||||
)
|
||||
)
|
||||
alarmService.synchronizeAlarms(
|
||||
1,
|
||||
mutableSetOf(Alarm(type = Alarm.TYPE_REL_END))
|
||||
)
|
||||
|
||||
testResults(
|
||||
emptyList(),
|
||||
0
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun dontScheduleForDeletedTask() = runBlocking {
|
||||
freezeAt(DateTime(2024, 5, 17, 23, 20)) {
|
||||
taskDao.insert(
|
||||
Task(
|
||||
dueDate = createDueDate(
|
||||
Task.URGENCY_SPECIFIC_DAY,
|
||||
DateTime(2024, 5, 17).millis
|
||||
),
|
||||
deletionDate = DateTime(2024, 5, 17, 14, 0).millis,
|
||||
)
|
||||
)
|
||||
alarmService.synchronizeAlarms(
|
||||
1,
|
||||
mutableSetOf(Alarm(type = Alarm.TYPE_REL_END))
|
||||
)
|
||||
|
||||
testResults(
|
||||
emptyList(),
|
||||
0
|
||||
)
|
||||
}
|
||||
}
|
||||
val alarmTime = DateTime(2017, 9, 24, 19, 57)
|
||||
val task = newTask(with(REMINDER_LAST, alarmTime.endOfMinute()))
|
||||
taskDao.createNew(task)
|
||||
alarmDao.insert(Alarm(task.id, alarmTime.millis))
|
||||
alarmService.scheduleAllAlarms()
|
||||
|
||||
private suspend fun testResults(notifications: List<Notification>, nextAlarm: Long) {
|
||||
val actualNextAlarm = alarmService.triggerAlarms {
|
||||
assertEquals(notifications, it)
|
||||
it.forEach { taskDao.setLastNotified(it.taskId, DateTimeUtils2.currentTimeMillis()) }
|
||||
}
|
||||
assertEquals(nextAlarm, actualNextAlarm)
|
||||
assertTrue(jobs.getJobs().isEmpty())
|
||||
}
|
||||
}
|
@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Copyright (c) 2012 Todoroo Inc
|
||||
*
|
||||
* See the file "LICENSE" for the full license governing this code.
|
||||
*/
|
||||
package com.todoroo.astrid.gtasks
|
||||
|
||||
import com.todoroo.astrid.dao.TaskDao
|
||||
import com.todoroo.astrid.data.Task
|
||||
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.Test
|
||||
import org.tasks.data.GoogleTask
|
||||
import org.tasks.data.GoogleTaskDao
|
||||
import org.tasks.injection.InjectingTestCase
|
||||
import org.tasks.injection.ProductionModule
|
||||
import javax.inject.Inject
|
||||
|
||||
@UninstallModules(ProductionModule::class)
|
||||
@HiltAndroidTest
|
||||
class GtasksMetadataServiceTest : InjectingTestCase() {
|
||||
@Inject lateinit var taskDao: TaskDao
|
||||
@Inject lateinit var googleTaskDao: GoogleTaskDao
|
||||
|
||||
private var task: Task? = null
|
||||
private var metadata: GoogleTask? = null
|
||||
|
||||
@Test
|
||||
fun testMetadataFound() = runBlocking {
|
||||
givenTask(taskWithMetadata(null))
|
||||
whenSearchForMetadata()
|
||||
thenExpectMetadataFound()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testMetadataDoesntExist() = runBlocking {
|
||||
givenTask(taskWithoutMetadata())
|
||||
whenSearchForMetadata()
|
||||
thenExpectNoMetadataFound()
|
||||
}
|
||||
|
||||
private fun thenExpectNoMetadataFound() {
|
||||
assertNull(metadata)
|
||||
}
|
||||
|
||||
private fun thenExpectMetadataFound() {
|
||||
assertNotNull(metadata)
|
||||
}
|
||||
|
||||
// --- helpers
|
||||
private suspend fun whenSearchForMetadata() {
|
||||
metadata = googleTaskDao.getByTaskId(task!!.id)
|
||||
}
|
||||
|
||||
private suspend fun taskWithMetadata(id: String?): Task {
|
||||
val task = Task()
|
||||
task.title = "cats"
|
||||
taskDao.createNew(task)
|
||||
val metadata = GoogleTask(task.id, "")
|
||||
if (id != null) {
|
||||
metadata.remoteId = id
|
||||
}
|
||||
metadata.task = task.id
|
||||
googleTaskDao.insert(metadata)
|
||||
return task
|
||||
}
|
||||
|
||||
private fun givenTask(taskToTest: Task) {
|
||||
task = taskToTest
|
||||
}
|
||||
|
||||
private suspend fun taskWithoutMetadata(): Task {
|
||||
val task = Task()
|
||||
task.title = "dogs"
|
||||
taskDao.createNew(task)
|
||||
return task
|
||||
}
|
||||
}
|
@ -0,0 +1,327 @@
|
||||
package com.todoroo.astrid.reminders
|
||||
|
||||
import com.natpryce.makeiteasy.MakeItEasy.with
|
||||
import com.todoroo.andlib.utility.DateUtilities
|
||||
import com.todoroo.astrid.data.Task
|
||||
import dagger.hilt.android.testing.HiltAndroidTest
|
||||
import dagger.hilt.android.testing.UninstallModules
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.tasks.Freeze
|
||||
import org.tasks.R
|
||||
import org.tasks.data.TaskDao
|
||||
import org.tasks.date.DateTimeUtils
|
||||
import org.tasks.injection.InjectingTestCase
|
||||
import org.tasks.injection.ProductionModule
|
||||
import org.tasks.jobs.NotificationQueue
|
||||
import org.tasks.jobs.ReminderEntry
|
||||
import org.tasks.makers.TaskMaker.COMPLETION_TIME
|
||||
import org.tasks.makers.TaskMaker.CREATION_TIME
|
||||
import org.tasks.makers.TaskMaker.DELETION_TIME
|
||||
import org.tasks.makers.TaskMaker.DUE_DATE
|
||||
import org.tasks.makers.TaskMaker.DUE_TIME
|
||||
import org.tasks.makers.TaskMaker.ID
|
||||
import org.tasks.makers.TaskMaker.RANDOM_REMINDER_PERIOD
|
||||
import org.tasks.makers.TaskMaker.REMINDERS
|
||||
import org.tasks.makers.TaskMaker.REMINDER_LAST
|
||||
import org.tasks.makers.TaskMaker.SNOOZE_TIME
|
||||
import org.tasks.makers.TaskMaker.newTask
|
||||
import org.tasks.preferences.Preferences
|
||||
import org.tasks.reminders.Random
|
||||
import org.tasks.time.DateTime
|
||||
import java.util.concurrent.TimeUnit
|
||||
import javax.inject.Inject
|
||||
|
||||
@UninstallModules(ProductionModule::class)
|
||||
@HiltAndroidTest
|
||||
class ReminderServiceTest : InjectingTestCase() {
|
||||
@Inject lateinit var preferences: Preferences
|
||||
@Inject lateinit var taskDao: TaskDao
|
||||
@Inject lateinit var jobs: NotificationQueue
|
||||
|
||||
private lateinit var service: ReminderService
|
||||
private lateinit var random: RandomStub
|
||||
|
||||
@Before
|
||||
override fun setUp() {
|
||||
super.setUp()
|
||||
random = RandomStub()
|
||||
preferences.clear()
|
||||
service = ReminderService(preferences, jobs, random, taskDao)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun dontScheduleDueDateReminderWhenFlagNotSet() {
|
||||
service.scheduleAlarm(newTask(with(ID, 1L), with(DUE_TIME, DateTimeUtils.newDateTime())))
|
||||
|
||||
assertTrue(jobs.isEmpty())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun dontScheduleDueDateReminderWhenTimeNotSet() {
|
||||
service.scheduleAlarm(newTask(with(ID, 1L), with(REMINDERS, Task.NOTIFY_AT_DEADLINE)))
|
||||
|
||||
assertTrue(jobs.isEmpty())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun schedulePastDueDate() {
|
||||
val task = newTask(
|
||||
with(ID, 1L),
|
||||
with(DUE_TIME, DateTimeUtils.newDateTime().minusDays(1)),
|
||||
with(REMINDERS, Task.NOTIFY_AT_DEADLINE))
|
||||
|
||||
service.scheduleAlarm(task)
|
||||
|
||||
verify(ReminderEntry(1, task.dueDate, ReminderService.TYPE_DUE))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun scheduleFutureDueDate() {
|
||||
val task = newTask(
|
||||
with(ID, 1L),
|
||||
with(DUE_TIME, DateTimeUtils.newDateTime().plusDays(1)),
|
||||
with(REMINDERS, Task.NOTIFY_AT_DEADLINE))
|
||||
|
||||
service.scheduleAlarm(task)
|
||||
|
||||
verify(ReminderEntry(1, task.dueDate, ReminderService.TYPE_DUE))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun scheduleReminderAtDefaultDueTime() {
|
||||
val now = DateTimeUtils.newDateTime()
|
||||
val task = newTask(with(ID, 1L), with(DUE_DATE, now), with(REMINDERS, Task.NOTIFY_AT_DEADLINE))
|
||||
|
||||
service.scheduleAlarm(task)
|
||||
|
||||
verify(ReminderEntry(1, now.startOfDay().withHourOfDay(18).millis, ReminderService.TYPE_DUE))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun dontScheduleReminderForCompletedTask() {
|
||||
val task = newTask(
|
||||
with(ID, 1L),
|
||||
with(DUE_TIME, DateTimeUtils.newDateTime().plusDays(1)),
|
||||
with(COMPLETION_TIME, DateTimeUtils.newDateTime()),
|
||||
with(REMINDERS, Task.NOTIFY_AT_DEADLINE))
|
||||
|
||||
service.scheduleAlarm(task)
|
||||
|
||||
assertTrue(jobs.isEmpty())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun dontScheduleReminderForDeletedTask() {
|
||||
val task = newTask(
|
||||
with(ID, 1L),
|
||||
with(DUE_TIME, DateTimeUtils.newDateTime().plusDays(1)),
|
||||
with(DELETION_TIME, DateTimeUtils.newDateTime()),
|
||||
with(REMINDERS, Task.NOTIFY_AT_DEADLINE))
|
||||
|
||||
service.scheduleAlarm(task)
|
||||
|
||||
assertTrue(jobs.isEmpty())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun dontScheduleDueDateReminderWhenAlreadyReminded() {
|
||||
val now = DateTimeUtils.newDateTime()
|
||||
val task = newTask(
|
||||
with(ID, 1L),
|
||||
with(DUE_TIME, now),
|
||||
with(REMINDER_LAST, now.plusSeconds(1)),
|
||||
with(REMINDERS, Task.NOTIFY_AT_DEADLINE))
|
||||
|
||||
service.scheduleAlarm(task)
|
||||
|
||||
assertTrue(jobs.isEmpty())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ignoreStaleSnoozeTime() {
|
||||
val task = newTask(
|
||||
with(ID, 1L),
|
||||
with(DUE_TIME, DateTimeUtils.newDateTime()),
|
||||
with(SNOOZE_TIME, DateTimeUtils.newDateTime().minusMinutes(5)),
|
||||
with(REMINDER_LAST, DateTimeUtils.newDateTime().minusMinutes(4)),
|
||||
with(REMINDERS, Task.NOTIFY_AT_DEADLINE))
|
||||
|
||||
service.scheduleAlarm(task)
|
||||
|
||||
verify(ReminderEntry(1, task.dueDate, ReminderService.TYPE_DUE))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun dontIgnoreMissedSnoozeTime() {
|
||||
val dueDate = DateTimeUtils.newDateTime()
|
||||
val task = newTask(
|
||||
with(ID, 1L),
|
||||
with(DUE_TIME, dueDate),
|
||||
with(SNOOZE_TIME, dueDate.minusMinutes(4)),
|
||||
with(REMINDER_LAST, dueDate.minusMinutes(5)),
|
||||
with(REMINDERS, Task.NOTIFY_AT_DEADLINE))
|
||||
|
||||
service.scheduleAlarm(task)
|
||||
|
||||
verify(ReminderEntry(1, task.reminderSnooze, ReminderService.TYPE_SNOOZE))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun scheduleInitialRandomReminder() {
|
||||
random.seed = 0.3865f
|
||||
|
||||
Freeze.freezeClock {
|
||||
val now = DateTimeUtils.newDateTime()
|
||||
val task = newTask(
|
||||
with(ID, 1L),
|
||||
with(REMINDER_LAST, null as DateTime?),
|
||||
with(CREATION_TIME, now.minusDays(1)),
|
||||
with(RANDOM_REMINDER_PERIOD, DateUtilities.ONE_WEEK))
|
||||
|
||||
service.scheduleAlarm(task)
|
||||
|
||||
verify(ReminderEntry(1L, now.minusDays(1).millis + 584206592, ReminderService.TYPE_RANDOM))
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun scheduleNextRandomReminder() {
|
||||
random.seed = 0.3865f
|
||||
|
||||
Freeze.freezeClock {
|
||||
val now = DateTimeUtils.newDateTime()
|
||||
val task = newTask(
|
||||
with(ID, 1L),
|
||||
with(REMINDER_LAST, now.minusDays(1)),
|
||||
with(CREATION_TIME, now.minusDays(30)),
|
||||
with(RANDOM_REMINDER_PERIOD, DateUtilities.ONE_WEEK))
|
||||
|
||||
service.scheduleAlarm(task)
|
||||
|
||||
verify(ReminderEntry(1L, now.minusDays(1).millis + 584206592, ReminderService.TYPE_RANDOM))
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun scheduleOverdueRandomReminder() {
|
||||
random.seed = 0.3865f
|
||||
|
||||
Freeze.freezeClock {
|
||||
val now = DateTimeUtils.newDateTime()
|
||||
val task = newTask(
|
||||
with(ID, 1L),
|
||||
with(REMINDER_LAST, now.minusDays(14)),
|
||||
with(CREATION_TIME, now.minusDays(30)),
|
||||
with(RANDOM_REMINDER_PERIOD, DateUtilities.ONE_WEEK))
|
||||
|
||||
service.scheduleAlarm(task)
|
||||
|
||||
verify(ReminderEntry(1L, now.millis + 10148400, ReminderService.TYPE_RANDOM))
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun scheduleOverdueNoLastReminder() {
|
||||
val task = newTask(
|
||||
with(ID, 1L),
|
||||
with(DUE_TIME, DateTime(2017, 9, 22, 15, 30)),
|
||||
with(REMINDER_LAST, null as DateTime?),
|
||||
with(REMINDERS, Task.NOTIFY_AFTER_DEADLINE))
|
||||
|
||||
service.scheduleAlarm(task)
|
||||
|
||||
verify(ReminderEntry(1L, DateTime(2017, 9, 23, 15, 30, 1, 0).millis, ReminderService.TYPE_OVERDUE))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun scheduleOverduePastLastReminder() {
|
||||
val task = newTask(
|
||||
with(ID, 1L),
|
||||
with(DUE_TIME, DateTime(2017, 9, 22, 15, 30)),
|
||||
with(REMINDER_LAST, DateTime(2017, 9, 24, 12, 0)),
|
||||
with(REMINDERS, Task.NOTIFY_AFTER_DEADLINE))
|
||||
|
||||
service.scheduleAlarm(task)
|
||||
|
||||
verify(ReminderEntry(1L, DateTime(2017, 9, 24, 15, 30, 1, 0).millis, ReminderService.TYPE_OVERDUE))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun scheduleOverdueBeforeLastReminder() {
|
||||
val task = newTask(
|
||||
with(ID, 1L),
|
||||
with(DUE_TIME, DateTime(2017, 9, 22, 12, 30)),
|
||||
with(REMINDER_LAST, DateTime(2017, 9, 24, 15, 0)),
|
||||
with(REMINDERS, Task.NOTIFY_AFTER_DEADLINE))
|
||||
|
||||
service.scheduleAlarm(task)
|
||||
|
||||
verify(ReminderEntry(1L, DateTime(2017, 9, 25, 12, 30, 1, 0).millis, ReminderService.TYPE_OVERDUE))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun scheduleOverdueWithNoDueTime() {
|
||||
preferences.setInt(R.string.p_rmd_time, TimeUnit.HOURS.toMillis(15).toInt())
|
||||
val task = newTask(
|
||||
with(ID, 1L),
|
||||
with(DUE_DATE, DateTime(2017, 9, 22)),
|
||||
with(REMINDER_LAST, DateTime(2017, 9, 23, 12, 17, 59, 999)),
|
||||
with(REMINDERS, Task.NOTIFY_AFTER_DEADLINE))
|
||||
|
||||
service.scheduleAlarm(task)
|
||||
|
||||
verify(ReminderEntry(1L, DateTime(2017, 9, 23, 15, 0, 0, 0).millis, ReminderService.TYPE_OVERDUE))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun scheduleSubsequentOverdueReminder() {
|
||||
val task = newTask(
|
||||
with(ID, 1L),
|
||||
with(DUE_TIME, DateTime(2017, 9, 22, 15, 30)),
|
||||
with(REMINDER_LAST, DateTime(2017, 9, 23, 15, 30, 59, 999)),
|
||||
with(REMINDERS, Task.NOTIFY_AFTER_DEADLINE))
|
||||
|
||||
service.scheduleAlarm(task)
|
||||
|
||||
verify(ReminderEntry(1L, DateTime(2017, 9, 24, 15, 30, 1, 0).millis, ReminderService.TYPE_OVERDUE))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun scheduleOverdueAfterLastReminder() {
|
||||
val task = newTask(
|
||||
with(ID, 1L),
|
||||
with(DUE_TIME, DateTime(2017, 9, 22, 15, 30)),
|
||||
with(REMINDER_LAST, DateTime(2017, 9, 23, 12, 17, 59, 999)),
|
||||
with(REMINDERS, Task.NOTIFY_AFTER_DEADLINE))
|
||||
|
||||
service.scheduleAlarm(task)
|
||||
|
||||
verify(ReminderEntry(1L, DateTime(2017, 9, 23, 15, 30, 1, 0).millis, ReminderService.TYPE_OVERDUE))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun snoozeOverridesAll() {
|
||||
val now = DateTimeUtils.newDateTime()
|
||||
val task = newTask(
|
||||
with(ID, 1L),
|
||||
with(DUE_TIME, now),
|
||||
with(SNOOZE_TIME, now.plusMonths(12)),
|
||||
with(REMINDERS, Task.NOTIFY_AT_DEADLINE or Task.NOTIFY_AFTER_DEADLINE),
|
||||
with(RANDOM_REMINDER_PERIOD, DateUtilities.ONE_HOUR))
|
||||
|
||||
service.scheduleAlarm(task)
|
||||
|
||||
verify(ReminderEntry(1, now.plusMonths(12).millis, ReminderService.TYPE_SNOOZE))
|
||||
}
|
||||
|
||||
private fun verify(vararg reminders: ReminderEntry) = assertEquals(reminders.toList(), jobs.getJobs())
|
||||
|
||||
internal class RandomStub : Random() {
|
||||
var seed = 1.0f
|
||||
|
||||
override fun nextFloat() = seed
|
||||
}
|
||||
}
|
@ -1,68 +1,50 @@
|
||||
package com.todoroo.astrid.repeats
|
||||
|
||||
import org.tasks.data.entity.Task
|
||||
import com.todoroo.astrid.service.TaskCompleter
|
||||
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.assertFalse
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Test
|
||||
import org.tasks.data.dao.TaskDao
|
||||
import org.tasks.data.TaskDao
|
||||
import org.tasks.injection.InjectingTestCase
|
||||
import org.tasks.injection.ProductionModule
|
||||
import org.tasks.time.DateTimeUtils2.currentTimeMillis
|
||||
import org.tasks.makers.TaskMaker.COMPLETION_TIME
|
||||
import org.tasks.makers.TaskMaker.PARENT
|
||||
import org.tasks.makers.TaskMaker.RECUR
|
||||
import org.tasks.makers.TaskMaker.newTask
|
||||
import org.tasks.time.DateTime
|
||||
import javax.inject.Inject
|
||||
|
||||
@UninstallModules(ProductionModule::class)
|
||||
@HiltAndroidTest
|
||||
class RepeatWithSubtasksTests : InjectingTestCase() {
|
||||
@Inject lateinit var taskDao: TaskDao
|
||||
@Inject lateinit var taskCompleter: TaskCompleter
|
||||
@Inject lateinit var repeat: RepeatTaskHelper
|
||||
|
||||
@Test
|
||||
fun uncompleteGrandchildren() = runBlocking {
|
||||
val grandparent = taskDao.createNew(
|
||||
Task(
|
||||
recurrence = "RRULE:FREQ=DAILY"
|
||||
)
|
||||
)
|
||||
val parent = taskDao.createNew(
|
||||
Task(
|
||||
parent = grandparent
|
||||
)
|
||||
)
|
||||
val child = taskDao.createNew(
|
||||
Task(
|
||||
parent = parent,
|
||||
completionDate = currentTimeMillis(),
|
||||
)
|
||||
)
|
||||
val grandparent = taskDao.createNew(newTask(with(RECUR, "RRULE:FREQ=DAILY")))
|
||||
val parent = taskDao.createNew(newTask(with(PARENT, grandparent)))
|
||||
val child = taskDao.createNew(newTask(
|
||||
with(PARENT, parent),
|
||||
with(COMPLETION_TIME, DateTime())
|
||||
))
|
||||
|
||||
assertTrue(taskDao.fetch(child)!!.isCompleted)
|
||||
|
||||
taskCompleter.setComplete(grandparent)
|
||||
repeat.handleRepeat(taskDao.fetch(grandparent)!!)
|
||||
|
||||
assertFalse(taskDao.fetch(child)!!.isCompleted)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun uncompleteGoogleTaskChildren() = runBlocking {
|
||||
val parent = taskDao.createNew(
|
||||
Task(
|
||||
recurrence = "RRULE:FREQ=DAILY"
|
||||
)
|
||||
)
|
||||
val child = taskDao.createNew(
|
||||
Task(
|
||||
parent = parent,
|
||||
completionDate = currentTimeMillis(),
|
||||
)
|
||||
)
|
||||
|
||||
assertTrue(taskDao.fetch(child)!!.isCompleted)
|
||||
val parent = taskDao.createNew(newTask(with(RECUR, "RRULE:FREQ=DAILY")))
|
||||
val child = taskDao.createNew(newTask(
|
||||
with(PARENT, parent),
|
||||
with(COMPLETION_TIME, DateTime())
|
||||
))
|
||||
|
||||
taskCompleter.setComplete(parent)
|
||||
repeat.handleRepeat(taskDao.fetch(parent)!!)
|
||||
|
||||
assertFalse(taskDao.fetch(child)!!.isCompleted)
|
||||
}
|
||||
|
@ -1,62 +0,0 @@
|
||||
@file:Suppress("ClassName")
|
||||
|
||||
package com.todoroo.astrid.service
|
||||
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import com.todoroo.astrid.service.Upgrade_11_12_3.Companion.LEGACY_PREFERENCE
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.tasks.TestUtilities.newPreferences
|
||||
import org.tasks.preferences.Preferences
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class Upgrade_11_12_3_Test {
|
||||
private lateinit var preferences: Preferences
|
||||
private lateinit var upgrader: Upgrade_11_12_3
|
||||
|
||||
@Test
|
||||
fun migrateNoDefaultReminders() {
|
||||
preferences.setString(LEGACY_PREFERENCE, "0")
|
||||
upgrader.migrateDefaultReminderPreference()
|
||||
|
||||
assertEquals(emptySet<String>(), preferences.defaultRemindersSet)
|
||||
assertEquals(0, preferences.defaultReminders)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun migrateWhenDue() {
|
||||
preferences.setString(LEGACY_PREFERENCE, "2")
|
||||
upgrader.migrateDefaultReminderPreference()
|
||||
|
||||
assertEquals(setOf("2"), preferences.defaultRemindersSet)
|
||||
assertEquals(2, preferences.defaultReminders)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun migrateWhenOverdue() {
|
||||
preferences.setString(LEGACY_PREFERENCE, "4")
|
||||
upgrader.migrateDefaultReminderPreference()
|
||||
|
||||
assertEquals(setOf("4"), preferences.defaultRemindersSet)
|
||||
assertEquals(4, preferences.defaultReminders)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun migrateWhenDueAndOverdue() {
|
||||
preferences.setString(LEGACY_PREFERENCE, "6")
|
||||
upgrader.migrateDefaultReminderPreference()
|
||||
|
||||
assertEquals(setOf("2", "4"), preferences.defaultRemindersSet)
|
||||
assertEquals(6, preferences.defaultReminders)
|
||||
}
|
||||
|
||||
@Before
|
||||
fun setUp() {
|
||||
preferences = newPreferences(ApplicationProvider.getApplicationContext())
|
||||
preferences.clear()
|
||||
upgrader = Upgrade_11_12_3(preferences)
|
||||
}
|
||||
}
|
@ -1 +0,0 @@
|
||||
../../../../test/java/org/tasks/Freeze.kt
|
@ -1 +0,0 @@
|
||||
../../../../test/java/org/tasks/SuspendFreeze.kt
|
@ -1 +0,0 @@
|
||||
../../../../test/java/org/tasks/TestUtilities.kt
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue