mirror of https://github.com/tasks/tasks
Compare commits
No commits in common. 'main' and '6.6.1' have entirely different histories.
@ -1,4 +0,0 @@
|
||||
github: abaker
|
||||
liberapay: tasks
|
||||
patreon: tasks
|
||||
custom: tasks.org/donate
|
||||
@ -1,52 +0,0 @@
|
||||
name: Assemble bundle
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
workflow_dispatch:
|
||||
workflow_call:
|
||||
|
||||
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@v6
|
||||
- uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v5
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '21'
|
||||
|
||||
- name: Setup Gradle
|
||||
uses: gradle/actions/setup-gradle@v4
|
||||
|
||||
- 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@v6
|
||||
with:
|
||||
name: release
|
||||
path: |
|
||||
app/build/outputs/**
|
||||
wear/build/outputs/**
|
||||
@ -1,96 +0,0 @@
|
||||
name: Run automated checks
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
workflow_call:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
|
||||
- name: Set up JDK 21
|
||||
uses: actions/setup-java@v5
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '21'
|
||||
|
||||
- name: Setup Gradle
|
||||
uses: gradle/actions/setup-gradle@v4
|
||||
|
||||
- name: Lint checks
|
||||
run: bundle exec fastlane lint
|
||||
|
||||
- name: Archive lint reports
|
||||
uses: actions/upload-artifact@v6
|
||||
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@v6
|
||||
|
||||
- name: Set up JDK 21
|
||||
uses: actions/setup-java@v5
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '21'
|
||||
|
||||
- name: Setup Gradle
|
||||
uses: gradle/actions/setup-gradle@v4
|
||||
|
||||
- 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@v6
|
||||
if: ${{ always() }}
|
||||
with:
|
||||
name: test-reports-${{ matrix.flavor }}
|
||||
path: app/build/reports/**
|
||||
@ -1,47 +0,0 @@
|
||||
name: Update Dependency Diff
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- 'gradle/libs.versions.toml'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'gradle/libs.versions.toml'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
update-deps:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ github.head_ref }}
|
||||
|
||||
- name: Set up JDK
|
||||
uses: actions/setup-java@v5
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '21'
|
||||
|
||||
- name: Setup Gradle
|
||||
uses: gradle/actions/setup-gradle@v4
|
||||
|
||||
- name: Update dependency diffs
|
||||
run: ./update_dependency_diff
|
||||
|
||||
- name: Commit changes
|
||||
run: |
|
||||
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
||||
git config --local user.name "github-actions[bot]"
|
||||
git add deps_*.txt
|
||||
git diff --staged --quiet || git commit -m "Update dependency diffs"
|
||||
git push
|
||||
@ -1,32 +0,0 @@
|
||||
name: Deploy
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
env:
|
||||
FASTLANE: ${{ secrets.FASTLANE }}
|
||||
|
||||
jobs:
|
||||
bundle:
|
||||
uses: ./.github/workflows/bundle.yml
|
||||
secrets: inherit
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [ bundle ]
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Fastlane key
|
||||
run: |
|
||||
echo "$FASTLANE" > ./fastlane.json
|
||||
- uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
- uses: actions/download-artifact@v7
|
||||
with:
|
||||
name: release
|
||||
path: .
|
||||
- name: Deploy
|
||||
run: bundle exec fastlane deploy
|
||||
@ -0,0 +1,6 @@
|
||||
[submodule "ical4android"]
|
||||
path = ical4android
|
||||
url = https://gitlab.com/tasks.org/ical4android.git
|
||||
[submodule "dav4android"]
|
||||
path = dav4android
|
||||
url = https://gitlab.com/tasks.org/dav4android.git
|
||||
@ -0,0 +1,560 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<code_scheme name="Project" version="173">
|
||||
<option name="OTHER_INDENT_OPTIONS">
|
||||
<value>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</value>
|
||||
</option>
|
||||
<option name="RIGHT_MARGIN" value="100" />
|
||||
<AndroidXmlCodeStyleSettings>
|
||||
<option name="USE_CUSTOM_SETTINGS" value="true" />
|
||||
<option name="LAYOUT_SETTINGS">
|
||||
<value>
|
||||
<option name="INSERT_BLANK_LINE_BEFORE_TAG" value="false" />
|
||||
</value>
|
||||
</option>
|
||||
</AndroidXmlCodeStyleSettings>
|
||||
<JavaCodeStyleSettings>
|
||||
<option name="INSERT_INNER_CLASS_IMPORTS" value="true" />
|
||||
<option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="999" />
|
||||
<option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="999" />
|
||||
<option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
|
||||
<value />
|
||||
</option>
|
||||
<option name="IMPORT_LAYOUT_TABLE">
|
||||
<value>
|
||||
<package name="" withSubpackages="true" static="true" />
|
||||
<emptyLine />
|
||||
<package name="" withSubpackages="true" static="false" />
|
||||
</value>
|
||||
</option>
|
||||
<option name="JD_ALIGN_PARAM_COMMENTS" value="false" />
|
||||
<option name="JD_ALIGN_EXCEPTION_COMMENTS" value="false" />
|
||||
<option name="JD_P_AT_EMPTY_LINES" value="false" />
|
||||
<option name="JD_KEEP_EMPTY_PARAMETER" value="false" />
|
||||
<option name="JD_KEEP_EMPTY_EXCEPTION" value="false" />
|
||||
<option name="JD_KEEP_EMPTY_RETURN" value="false" />
|
||||
</JavaCodeStyleSettings>
|
||||
<Objective-C>
|
||||
<option name="INDENT_NAMESPACE_MEMBERS" value="0" />
|
||||
<option name="INDENT_C_STRUCT_MEMBERS" value="2" />
|
||||
<option name="INDENT_CLASS_MEMBERS" value="2" />
|
||||
<option name="INDENT_VISIBILITY_KEYWORDS" value="1" />
|
||||
<option name="INDENT_INSIDE_CODE_BLOCK" value="2" />
|
||||
<option name="KEEP_STRUCTURES_IN_ONE_LINE" value="true" />
|
||||
<option name="FUNCTION_PARAMETERS_WRAP" value="5" />
|
||||
<option name="FUNCTION_CALL_ARGUMENTS_WRAP" value="5" />
|
||||
<option name="TEMPLATE_CALL_ARGUMENTS_WRAP" value="5" />
|
||||
<option name="TEMPLATE_CALL_ARGUMENTS_ALIGN_MULTILINE" value="true" />
|
||||
<option name="ALIGN_INIT_LIST_IN_COLUMNS" value="false" />
|
||||
<option name="SPACE_BEFORE_SUPERCLASS_COLON" value="false" />
|
||||
</Objective-C>
|
||||
<Objective-C-extensions>
|
||||
<file>
|
||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
|
||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro" />
|
||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef" />
|
||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum" />
|
||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant" />
|
||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global" />
|
||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct" />
|
||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl" />
|
||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function" />
|
||||
</file>
|
||||
<class>
|
||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property" />
|
||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize" />
|
||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod" />
|
||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod" />
|
||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod" />
|
||||
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod" />
|
||||
</class>
|
||||
<extensions>
|
||||
<pair source="cc" header="h" fileNamingConvention="NONE" />
|
||||
<pair source="c" header="h" fileNamingConvention="NONE" />
|
||||
</extensions>
|
||||
</Objective-C-extensions>
|
||||
<XML>
|
||||
<option name="XML_ALIGN_ATTRIBUTES" value="false" />
|
||||
<option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
|
||||
</XML>
|
||||
<codeStyleSettings language="CSS">
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="ECMA Script Level 4">
|
||||
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
|
||||
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
|
||||
<option name="ALIGN_MULTILINE_FOR" value="false" />
|
||||
<option name="CALL_PARAMETERS_WRAP" value="1" />
|
||||
<option name="METHOD_PARAMETERS_WRAP" value="1" />
|
||||
<option name="EXTENDS_LIST_WRAP" value="1" />
|
||||
<option name="BINARY_OPERATION_WRAP" value="1" />
|
||||
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
|
||||
<option name="TERNARY_OPERATION_WRAP" value="1" />
|
||||
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
|
||||
<option name="FOR_STATEMENT_WRAP" value="1" />
|
||||
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
|
||||
<option name="IF_BRACE_FORCE" value="3" />
|
||||
<option name="DOWHILE_BRACE_FORCE" value="3" />
|
||||
<option name="WHILE_BRACE_FORCE" value="3" />
|
||||
<option name="FOR_BRACE_FORCE" value="3" />
|
||||
<option name="PARENT_SETTINGS_INSTALLED" value="true" />
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="HTML">
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="JAVA">
|
||||
<option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
|
||||
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
|
||||
<option name="BLANK_LINES_BEFORE_PACKAGE" value="1" />
|
||||
<option name="BLANK_LINES_AFTER_CLASS_HEADER" value="1" />
|
||||
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
|
||||
<option name="ALIGN_MULTILINE_RESOURCES" value="false" />
|
||||
<option name="ALIGN_MULTILINE_FOR" value="false" />
|
||||
<option name="CALL_PARAMETERS_WRAP" value="1" />
|
||||
<option name="METHOD_PARAMETERS_WRAP" value="1" />
|
||||
<option name="EXTENDS_LIST_WRAP" value="1" />
|
||||
<option name="THROWS_KEYWORD_WRAP" value="1" />
|
||||
<option name="METHOD_CALL_CHAIN_WRAP" value="1" />
|
||||
<option name="BINARY_OPERATION_WRAP" value="1" />
|
||||
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
|
||||
<option name="TERNARY_OPERATION_WRAP" value="1" />
|
||||
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
|
||||
<option name="FOR_STATEMENT_WRAP" value="1" />
|
||||
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
|
||||
<option name="WRAP_COMMENTS" value="true" />
|
||||
<option name="IF_BRACE_FORCE" value="3" />
|
||||
<option name="DOWHILE_BRACE_FORCE" value="3" />
|
||||
<option name="WHILE_BRACE_FORCE" value="3" />
|
||||
<option name="FOR_BRACE_FORCE" value="3" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="JSON">
|
||||
<indentOptions>
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="JavaScript">
|
||||
<option name="RIGHT_MARGIN" value="80" />
|
||||
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
|
||||
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
|
||||
<option name="ALIGN_MULTILINE_FOR" value="false" />
|
||||
<option name="CALL_PARAMETERS_WRAP" value="1" />
|
||||
<option name="METHOD_PARAMETERS_WRAP" value="1" />
|
||||
<option name="BINARY_OPERATION_WRAP" value="1" />
|
||||
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
|
||||
<option name="TERNARY_OPERATION_WRAP" value="1" />
|
||||
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
|
||||
<option name="FOR_STATEMENT_WRAP" value="1" />
|
||||
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
|
||||
<option name="IF_BRACE_FORCE" value="3" />
|
||||
<option name="DOWHILE_BRACE_FORCE" value="3" />
|
||||
<option name="WHILE_BRACE_FORCE" value="3" />
|
||||
<option name="FOR_BRACE_FORCE" value="3" />
|
||||
<option name="PARENT_SETTINGS_INSTALLED" value="true" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="ObjectiveC">
|
||||
<option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1" />
|
||||
<option name="BLANK_LINES_BEFORE_IMPORTS" value="0" />
|
||||
<option name="BLANK_LINES_AFTER_IMPORTS" value="0" />
|
||||
<option name="BLANK_LINES_AROUND_CLASS" value="0" />
|
||||
<option name="BLANK_LINES_AROUND_METHOD" value="0" />
|
||||
<option name="BLANK_LINES_AROUND_METHOD_IN_INTERFACE" value="0" />
|
||||
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="false" />
|
||||
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
|
||||
<option name="FOR_STATEMENT_WRAP" value="1" />
|
||||
<option name="ASSIGNMENT_WRAP" value="1" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="PROTO">
|
||||
<option name="RIGHT_MARGIN" value="80" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="Python">
|
||||
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
|
||||
<option name="RIGHT_MARGIN" value="80" />
|
||||
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
|
||||
<option name="PARENT_SETTINGS_INSTALLED" value="true" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="SASS">
|
||||
<indentOptions>
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="SCSS">
|
||||
<indentOptions>
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="TypeScript">
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="XML">
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
<arrangement>
|
||||
<rules>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>xmlns:android</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>xmlns:.*</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:id</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>style</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:.*Style</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:layout_width</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:layout_height</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:layout_weight</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:layout_margin</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:layout_marginTop</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:layout_marginBottom</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:layout_marginStart</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:layout_marginEnd</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:layout_marginLeft</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:layout_marginRight</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:layout_.*</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:padding</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:paddingTop</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:paddingBottom</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:paddingStart</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:paddingEnd</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:paddingLeft</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*:paddingRight</NAME>
|
||||
<XML_ATTRIBUTE />
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*</NAME>
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*</NAME>
|
||||
<XML_NAMESPACE>http://schemas.android.com/apk/res-auto</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*</NAME>
|
||||
<XML_NAMESPACE>http://schemas.android.com/tools</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
<section>
|
||||
<rule>
|
||||
<match>
|
||||
<AND>
|
||||
<NAME>.*</NAME>
|
||||
<XML_NAMESPACE>.*</XML_NAMESPACE>
|
||||
</AND>
|
||||
</match>
|
||||
<order>BY_NAME</order>
|
||||
</rule>
|
||||
</section>
|
||||
</rules>
|
||||
</arrangement>
|
||||
</codeStyleSettings>
|
||||
<codeStyleSettings language="protobuf">
|
||||
<option name="RIGHT_MARGIN" value="80" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||
<option name="TAB_SIZE" value="2" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
</code_scheme>
|
||||
</component>
|
||||
@ -0,0 +1,27 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="ControlFlowStatementWithoutBraces" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="Convert2streamapi" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="DoubleBraceInitialization" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="Finalize" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="ignoreTrivialFinalizers" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="Guava" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="MissingOverrideAnnotation" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="ignoreObjectMethods" value="true" />
|
||||
<option name="ignoreAnonymousClassMethods" value="false" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="OverridableMethodCallDuringObjectConstruction" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
|
||||
<option name="processCode" value="true" />
|
||||
<option name="processLiterals" value="true" />
|
||||
<option name="processComments" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="StaticPseudoFunctionalStyleMethod" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="SuspiciousIndentAfterControlStatement" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="TryFinallyCanBeTryWithResources" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="TryWithIdenticalCatches" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="UnnecessarySuperQualifier" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
</profile>
|
||||
</component>
|
||||
@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="EntryPointsManager">
|
||||
<list size="3">
|
||||
<item index="0" class="java.lang.String" itemvalue="butterknife.*" />
|
||||
<item index="1" class="java.lang.String" itemvalue="dagger.Provides" />
|
||||
<item index="2" class="java.lang.String" itemvalue="javax.inject.Inject" />
|
||||
</list>
|
||||
</component>
|
||||
<component name="NullableNotNullManager">
|
||||
<option name="myDefaultNullable" value="android.support.annotation.Nullable" />
|
||||
<option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
|
||||
<option name="myNullables">
|
||||
<value>
|
||||
<list size="4">
|
||||
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
|
||||
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
|
||||
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
|
||||
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
|
||||
</list>
|
||||
</value>
|
||||
</option>
|
||||
<option name="myNotNulls">
|
||||
<value>
|
||||
<list size="4">
|
||||
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
|
||||
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
|
||||
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
|
||||
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
|
||||
</list>
|
||||
</value>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||
</component>
|
||||
<component name="ProjectType">
|
||||
<option name="id" value="Android" />
|
||||
</component>
|
||||
</project>
|
||||
@ -1 +0,0 @@
|
||||
3.4.8
|
||||
@ -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>
|
||||
@ -0,0 +1,34 @@
|
||||
language: android
|
||||
sudo: required
|
||||
jdk: oraclejdk8
|
||||
env:
|
||||
global:
|
||||
- TARGET_API=28
|
||||
- BUILD_TOOLS=28.0.3
|
||||
matrix:
|
||||
- EMULATOR_API=21 ANDROID_ABI=armeabi-v7a
|
||||
android:
|
||||
components:
|
||||
- tools # https://github.com/travis-ci/travis-ci/issues/5049
|
||||
- tools # https://github.com/travis-ci/travis-ci/issues/6040
|
||||
- android-$TARGET_API
|
||||
- android-27 # dav4android, ical4android
|
||||
- android-$EMULATOR_API
|
||||
- sys-img-$ANDROID_ABI-android-$EMULATOR_API
|
||||
- platform-tools
|
||||
- build-tools-$BUILD_TOOLS
|
||||
- extra-android-m2repository
|
||||
- extra-google-m2repository
|
||||
|
||||
before_install:
|
||||
- echo no | android create avd --force -n test -t android-$EMULATOR_API --abi $ANDROID_ABI
|
||||
- emulator -avd test -no-skin -no-audio -no-window &
|
||||
- ./.wait_for_emulator.sh
|
||||
- adb shell input keyevent 82 &
|
||||
|
||||
script:
|
||||
- ./gradlew :app:lintGoogleplayRelease
|
||||
- ./gradlew :app:createGoogleplayDebugAndroidTestCoverageReport
|
||||
|
||||
after_success:
|
||||
- bash <(curl -s https://codecov.io/bash)
|
||||
@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
|
||||
bootanim=""
|
||||
failcounter=0
|
||||
until [[ "$bootanim" =~ "stopped" ]] || [[ "$bootanim" =~ "running" ]]; do
|
||||
bootanim=`adb -e shell getprop init.svc.bootanim 2>&1`
|
||||
echo "$bootanim"
|
||||
if [[ "$bootanim" =~ "not found" ]]; then
|
||||
let "failcounter += 1"
|
||||
if [[ $failcounter -gt 3 ]]; then
|
||||
echo "Failed to start emulator"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
echo "Done"
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,76 +0,0 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||
level of experience, education, socio-economic status, nationality, personal
|
||||
appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at github@tasks.org. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see
|
||||
https://www.contributor-covenant.org/faq
|
||||
@ -1,34 +0,0 @@
|
||||
### Translation
|
||||
|
||||
You can translate Tasks using [Weblate](https://hosted.weblate.org/projects/tasks/android). To get started, register a new account or login with your GitHub account if you have one.
|
||||
|
||||
### Opening issues
|
||||
|
||||
Before opening an issue, please make sure that your issue:
|
||||
- is not a duplicate (i.e. it has not been reported before, closed or open)
|
||||
- has not been fixed
|
||||
- is in English (issues in a language other than English will be closed unless someone translates them)
|
||||
- does not contain multiple feature requests/bug reports. Please open a separate issue for each one.
|
||||
|
||||
### Code contribution
|
||||
|
||||
#### To get started with development:
|
||||
1. [Fork](https://help.github.com/articles/fork-a-repo/) and [clone](https://help.github.com/articles/cloning-a-repository/) the repository
|
||||
2. Install and launch [Android Studio's canary build](https://developer.android.com/studio/preview) (Tasks depends on some bleeding-edge features of the canary build, but in the future when those features are stabilized, you will be able to use the stable release of Android Studio)
|
||||
3. Select `File > Open`, select the Tasks directory, and accept prompts to install missing SDK components
|
||||
|
||||
#### Set up Mapbox
|
||||
1. Register at [mapbox.com](https://www.mapbox.com)
|
||||
2. Add `tasks_mapbox_key_debug="<your_api_key>"` to your [`gradle.properties`](https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_configuration_properties) file. You can create an access token or use your [default public token](https://docs.mapbox.com/help/glossary/access-token/#default-public-token)
|
||||
|
||||
#### Set up Google Tasks and Google Drive
|
||||
1. Register at [cloud.google.com](https://cloud.google.com)
|
||||
2. Enable [Google Tasks API](https://console.cloud.google.com/apis/library/tasks.googleapis.com) and [Google Drive API](https://console.cloud.google.com/apis/library/drive.googleapis.com)
|
||||
3. [Create android authorization credentials](https://developers.google.com/identity/protocols/OAuth2InstalledApp#creatingcred)
|
||||
|
||||
#### Set up Google Maps and Google Places
|
||||
1. Register at [cloud.google.com](https://cloud.google.com)
|
||||
2. Enable [Google Maps SDK](https://console.cloud.google.com/apis/library/maps-android-backend.googleapis.com) and [Google Places API](https://console.cloud.google.com/apis/library/places-backend.googleapis.com)
|
||||
3. [Set up an API key](https://cloud.google.com/video-intelligence/docs/common/auth#set_up_an_api_key)
|
||||
4. Add `tasks_google_key_debug="<your_api_key>"` to your [`gradle.properties`](https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_configuration_properties) file
|
||||
5. Select `Build > Select Build Variant` and choose the `googleplay` variant
|
||||
@ -1,4 +0,0 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
gem "fastlane"
|
||||
gem "abbrev"
|
||||
@ -1,230 +0,0 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
CFPropertyList (3.0.7)
|
||||
base64
|
||||
nkf
|
||||
rexml
|
||||
abbrev (0.1.2)
|
||||
addressable (2.8.7)
|
||||
public_suffix (>= 2.0.2, < 7.0)
|
||||
artifactory (3.0.17)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.4.0)
|
||||
aws-partitions (1.1196.0)
|
||||
aws-sdk-core (3.240.0)
|
||||
aws-eventstream (~> 1, >= 1.3.0)
|
||||
aws-partitions (~> 1, >= 1.992.0)
|
||||
aws-sigv4 (~> 1.9)
|
||||
base64
|
||||
bigdecimal
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
logger
|
||||
aws-sdk-kms (1.118.0)
|
||||
aws-sdk-core (~> 3, >= 3.239.1)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sdk-s3 (1.208.0)
|
||||
aws-sdk-core (~> 3, >= 3.234.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sigv4 (1.12.1)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
base64 (0.3.0)
|
||||
bigdecimal (4.0.1)
|
||||
claide (1.1.0)
|
||||
colored (1.2)
|
||||
colored2 (3.1.2)
|
||||
commander (4.6.0)
|
||||
highline (~> 2.0.0)
|
||||
declarative (0.0.20)
|
||||
digest-crc (0.7.0)
|
||||
rake (>= 12.0.0, < 14.0.0)
|
||||
domain_name (0.6.20240107)
|
||||
dotenv (2.8.1)
|
||||
emoji_regex (3.2.3)
|
||||
excon (0.112.0)
|
||||
faraday (1.10.4)
|
||||
faraday-em_http (~> 1.0)
|
||||
faraday-em_synchrony (~> 1.0)
|
||||
faraday-excon (~> 1.1)
|
||||
faraday-httpclient (~> 1.0)
|
||||
faraday-multipart (~> 1.0)
|
||||
faraday-net_http (~> 1.0)
|
||||
faraday-net_http_persistent (~> 1.0)
|
||||
faraday-patron (~> 1.0)
|
||||
faraday-rack (~> 1.0)
|
||||
faraday-retry (~> 1.0)
|
||||
ruby2_keywords (>= 0.0.4)
|
||||
faraday-cookie_jar (0.0.7)
|
||||
faraday (>= 0.8.0)
|
||||
http-cookie (~> 1.0.0)
|
||||
faraday-em_http (1.0.0)
|
||||
faraday-em_synchrony (1.0.1)
|
||||
faraday-excon (1.1.0)
|
||||
faraday-httpclient (1.0.1)
|
||||
faraday-multipart (1.1.1)
|
||||
multipart-post (~> 2.0)
|
||||
faraday-net_http (1.0.2)
|
||||
faraday-net_http_persistent (1.2.0)
|
||||
faraday-patron (1.0.0)
|
||||
faraday-rack (1.0.0)
|
||||
faraday-retry (1.0.3)
|
||||
faraday_middleware (1.2.1)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.4.0)
|
||||
fastlane (2.228.0)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
aws-sdk-s3 (~> 1.0)
|
||||
babosa (>= 1.0.3, < 2.0.0)
|
||||
bundler (>= 1.12.0, < 3.0.0)
|
||||
colored (~> 1.2)
|
||||
commander (~> 4.6)
|
||||
dotenv (>= 2.1.1, < 3.0.0)
|
||||
emoji_regex (>= 0.1, < 4.0)
|
||||
excon (>= 0.71.0, < 1.0.0)
|
||||
faraday (~> 1.0)
|
||||
faraday-cookie_jar (~> 0.0.6)
|
||||
faraday_middleware (~> 1.0)
|
||||
fastimage (>= 2.1.0, < 3.0.0)
|
||||
fastlane-sirp (>= 1.0.0)
|
||||
gh_inspector (>= 1.1.2, < 2.0.0)
|
||||
google-apis-androidpublisher_v3 (~> 0.3)
|
||||
google-apis-playcustomapp_v1 (~> 0.1)
|
||||
google-cloud-env (>= 1.6.0, < 2.0.0)
|
||||
google-cloud-storage (~> 1.31)
|
||||
highline (~> 2.0)
|
||||
http-cookie (~> 1.0.5)
|
||||
json (< 3.0.0)
|
||||
jwt (>= 2.1.0, < 3)
|
||||
mini_magick (>= 4.9.4, < 5.0.0)
|
||||
multipart-post (>= 2.0.0, < 3.0.0)
|
||||
naturally (~> 2.2)
|
||||
optparse (>= 0.1.1, < 1.0.0)
|
||||
plist (>= 3.1.0, < 4.0.0)
|
||||
rubyzip (>= 2.0.0, < 3.0.0)
|
||||
security (= 0.1.5)
|
||||
simctl (~> 1.6.3)
|
||||
terminal-notifier (>= 2.0.0, < 3.0.0)
|
||||
terminal-table (~> 3)
|
||||
tty-screen (>= 0.6.3, < 1.0.0)
|
||||
tty-spinner (>= 0.8.0, < 1.0.0)
|
||||
word_wrap (~> 1.0.0)
|
||||
xcodeproj (>= 1.13.0, < 2.0.0)
|
||||
xcpretty (~> 0.4.1)
|
||||
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
|
||||
fastlane-sirp (1.0.0)
|
||||
sysrandom (~> 1.0)
|
||||
gh_inspector (1.1.3)
|
||||
google-apis-androidpublisher_v3 (0.54.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-core (0.11.3)
|
||||
addressable (~> 2.5, >= 2.5.1)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
httpclient (>= 2.8.1, < 3.a)
|
||||
mini_mime (~> 1.0)
|
||||
representable (~> 3.0)
|
||||
retriable (>= 2.0, < 4.a)
|
||||
rexml
|
||||
google-apis-iamcredentials_v1 (0.17.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-playcustomapp_v1 (0.13.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-storage_v1 (0.31.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-cloud-core (1.8.0)
|
||||
google-cloud-env (>= 1.0, < 3.a)
|
||||
google-cloud-errors (~> 1.0)
|
||||
google-cloud-env (1.6.0)
|
||||
faraday (>= 0.17.3, < 3.0)
|
||||
google-cloud-errors (1.5.0)
|
||||
google-cloud-storage (1.47.0)
|
||||
addressable (~> 2.8)
|
||||
digest-crc (~> 0.4)
|
||||
google-apis-iamcredentials_v1 (~> 0.1)
|
||||
google-apis-storage_v1 (~> 0.31.0)
|
||||
google-cloud-core (~> 1.6)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
mini_mime (~> 1.0)
|
||||
googleauth (1.8.1)
|
||||
faraday (>= 0.17.3, < 3.a)
|
||||
jwt (>= 1.4, < 3.0)
|
||||
multi_json (~> 1.11)
|
||||
os (>= 0.9, < 2.0)
|
||||
signet (>= 0.16, < 2.a)
|
||||
highline (2.0.3)
|
||||
http-cookie (1.0.8)
|
||||
domain_name (~> 0.5)
|
||||
httpclient (2.9.0)
|
||||
mutex_m
|
||||
jmespath (1.6.2)
|
||||
json (2.12.2)
|
||||
jwt (2.10.2)
|
||||
base64
|
||||
logger (1.7.0)
|
||||
mini_magick (4.13.2)
|
||||
mini_mime (1.1.5)
|
||||
multi_json (1.15.0)
|
||||
multipart-post (2.4.1)
|
||||
mutex_m (0.3.0)
|
||||
nanaimo (0.4.0)
|
||||
naturally (2.3.0)
|
||||
nkf (0.2.0)
|
||||
optparse (0.6.0)
|
||||
os (1.1.4)
|
||||
plist (3.7.2)
|
||||
public_suffix (6.0.2)
|
||||
rake (13.3.0)
|
||||
representable (3.2.0)
|
||||
declarative (< 0.1.0)
|
||||
trailblazer-option (>= 0.1.1, < 0.2.0)
|
||||
uber (< 0.2.0)
|
||||
retriable (3.1.2)
|
||||
rexml (3.4.2)
|
||||
rouge (3.28.0)
|
||||
ruby2_keywords (0.0.5)
|
||||
rubyzip (2.4.1)
|
||||
security (0.1.5)
|
||||
signet (0.20.0)
|
||||
addressable (~> 2.8)
|
||||
faraday (>= 0.17.5, < 3.a)
|
||||
jwt (>= 1.5, < 3.0)
|
||||
multi_json (~> 1.10)
|
||||
simctl (1.6.10)
|
||||
CFPropertyList
|
||||
naturally
|
||||
sysrandom (1.0.5)
|
||||
terminal-notifier (2.0.0)
|
||||
terminal-table (3.0.2)
|
||||
unicode-display_width (>= 1.1.1, < 3)
|
||||
trailblazer-option (0.1.2)
|
||||
tty-cursor (0.7.1)
|
||||
tty-screen (0.8.2)
|
||||
tty-spinner (0.9.3)
|
||||
tty-cursor (~> 0.7)
|
||||
uber (0.1.0)
|
||||
unicode-display_width (2.6.0)
|
||||
word_wrap (1.0.0)
|
||||
xcodeproj (1.27.0)
|
||||
CFPropertyList (>= 2.3.3, < 4.0)
|
||||
atomos (~> 0.1.3)
|
||||
claide (>= 1.0.2, < 2.0)
|
||||
colored2 (~> 3.1)
|
||||
nanaimo (~> 0.4.0)
|
||||
rexml (>= 3.3.6, < 4.0)
|
||||
xcpretty (0.4.1)
|
||||
rouge (~> 3.28.0)
|
||||
xcpretty-travis-formatter (1.0.1)
|
||||
xcpretty (~> 0.2, >= 0.0.7)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
abbrev
|
||||
fastlane
|
||||
|
||||
BUNDLED WITH
|
||||
2.6.9
|
||||
@ -1,28 +1,13 @@
|
||||
Astrid was a popular cross-platform productivity service that was [acquired](https://web.archive.org/web/20130811052500/http://blog.astrid.com/blog/2013/05/01/yahoo-acquires-astrid/) and [discontinued](https://techcrunch.com/2013/07/06/astrid-goes-dark-august-5-goodnight-sweet-squid/) in 2013. The source code from Astrid's open source Android app serves as the basis of Tasks.
|
||||
[](https://travis-ci.org/tasks/tasks) [](https://codecov.io/gh/tasks/tasks)
|
||||
|
||||
[<img src="https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png"
|
||||
alt="Get it on Google Play"
|
||||
height="80">](https://play.google.com/store/apps/details?id=org.tasks)
|
||||
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png"
|
||||
alt="Get it on F-Droid"
|
||||
height="80">](https://f-droid.org/packages/org.tasks)
|
||||
[](https://en.cryptobadges.io/donate/136mW34jW3cmZKhxuTDn3tHXMRwbbaRU8s)
|
||||
[](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=alex@tasks.org)
|
||||
|
||||
Please visit [tasks.org](https://tasks.org) for end user documentation and support
|
||||
<a href='https://play.google.com/store/apps/details?id=org.tasks&utm_source=global_co&utm_medium=prtnr&utm_content=Mar2515&utm_campaign=PartBadge&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png' width="210" height="80"/></a>
|
||||
<a href='https://f-droid.org/repository/browse/?fdid=org.tasks'><img src='https://f-droid.org/wiki/images/f/ff/F-Droid-button_available-on_bigger.png' /></a>
|
||||
[](https://www.amazon.com/gp/product/B00QHGTL7O/ref=mas_pm_tasks_astrid_to_do_list_clone)
|
||||
|
||||
---
|
||||
|
||||
[](https://tasks.org/docs/donate)
|
||||
[](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=alex@tasks.org)
|
||||
[](https://liberapay.com/tasks/donate)
|
||||
|
||||
[](https://github.com/tasks/tasks/actions/workflows/bundle.yml) [](https://hosted.weblate.org/engage/tasks/?utm_source=widget)
|
||||
|
||||
### Contributing
|
||||
|
||||
Contributions are always welcome! Whether translations, code changes, bug reports, feature requests, or otherwise, your help is appreciated. To get started, take a look at [CONTRIBUTING.md](CONTRIBUTING.md).
|
||||
|
||||
### Communication
|
||||
|
||||
You can submit questions to [GitHub Discussions](https://github.com/tasks/tasks/discussions).
|
||||
|
||||
If you have a suggestion or want to report a bug, please see [CONTRIBUTING.md](CONTRIBUTING.md).
|
||||
Visit the wiki to
|
||||
* [help with translations](http://tasks.org/docs/translations.html)
|
||||
* [become a beta tester](http://tasks.org/docs/pre_release_testing.html)
|
||||
* [get started with development](http://tasks.org/docs/develop.html)
|
||||
|
||||
@ -1,579 +0,0 @@
|
||||
[Newer releases](https://github.com/tasks/tasks/blob/main/CHANGELOG.md)
|
||||
|
||||
### 9.7.3 (2020-07-07)
|
||||
|
||||
* Fix Google Task bugs
|
||||
|
||||
### 9.7.2 (2020-06-22)
|
||||
|
||||
* Downgrade Mapbox SDK to remove non-free library (F-Droid only)
|
||||
|
||||
### 9.7.1 (2020-06-19)
|
||||
|
||||
* Fix crash on backup import
|
||||
* Fix CalDAV/EteSync subtask move bug
|
||||
|
||||
### 9.7 (2020-06-12)
|
||||
|
||||
* Added '☰ > Manage lists'
|
||||
* Drag and drop to rearrange the drawer
|
||||
* Tap to edit or delete a list
|
||||
* Display 2 additional snooze options - @rangzen
|
||||
|
||||
### 9.6 (2020-06-06)
|
||||
|
||||
* Add support for offline lists. Offline lists support manual ordering and infinite-depth subtasks
|
||||
* Rename 'My order' to 'Astrid manual sorting' for 'My Tasks', 'Today', and tags
|
||||
* Add '⚙ > Look and feel > Disable sort groups'
|
||||
* Add '⚙ > Look and feel > Open last viewed list'
|
||||
* Add '⚙ > Look and feel > Chips' toggles for subtasks, places, lists, and tags
|
||||
* Add '⚙ > Navigation drawer > Lists'
|
||||
* Add '⚙ > Task defaults > Default list'
|
||||
* Add '⚙ > Task defaults > New tasks on top'
|
||||
* Add '⚙ > Advanced > Astrid manual sorting'
|
||||
* Fix preference reset button
|
||||
|
||||
### 9.5 (2020-06-03)
|
||||
|
||||
* Drag and drop to change subtasks in all list types
|
||||
* Drag and drop to reprioritize or reschedule tasks while sorting by due date
|
||||
or priority
|
||||
* Bug fixes
|
||||
|
||||
### 9.4.1 (2020-06-01)
|
||||
|
||||
* Add 'Tasks settings > Advanced > Improve performance' toggle
|
||||
* Bug fixes
|
||||
|
||||
### 9.4 (2020-05-27)
|
||||
|
||||
* Add collapsible group headers when sorting by due date, priority, created, or modified
|
||||
|
||||
### 9.3.1 (2020-05-26)
|
||||
|
||||
* Fix offline subtasks
|
||||
|
||||
### 9.3 (2020-05-22)
|
||||
|
||||
* Add manual sorting support for CalDAV and EteSync
|
||||
|
||||
### 9.2 (2020-05-13)
|
||||
|
||||
* 'New task' quick settings tile (Android 7+)
|
||||
* Search results match place names and addresses, caldav list names, google task list names, and comments
|
||||
* Fix duplicated search results
|
||||
* Began migrating codebase to Kotlin
|
||||
|
||||
### 9.1 (2020-05-04)
|
||||
|
||||
* 'New task' launcher shortcut (Android 7.1+)
|
||||
* Add option to disable subtask chip on widget
|
||||
|
||||
### 9.0 (2020-05-03)
|
||||
|
||||
* Show What's New after update
|
||||
* Collapsible subtasks enabled by default
|
||||
* 20 new icons
|
||||
* Show subtask chip even if list chips are disabled
|
||||
* Indent subtasks in 'Share' output
|
||||
* Don't trigger location reminders for snoozed or hidden tasks
|
||||
* Minimum supported version is now Android 6.0
|
||||
|
||||
### 8.11 (2020-04-27)
|
||||
|
||||
* Edit existing custom filters
|
||||
* Drag and drop to rearrange filter criteria
|
||||
* Swipe to delete filter criteria
|
||||
* Tap on filter criteria to choose filter operator
|
||||
* Offer additional built-in filters
|
||||
* Add sort by creation time
|
||||
* Choose any day as start of week
|
||||
|
||||
### 8.10 (2020-04-20)
|
||||
|
||||
* New widget features
|
||||
* Menu button to quickly change list
|
||||
* Expand and collapse subtasks
|
||||
* Click on due date to reschedule
|
||||
* Access widget settings from main app preferences
|
||||
* Show description
|
||||
* Show hidden task indicators
|
||||
* New widget settings
|
||||
* Row spacing: default, compact, none
|
||||
* Due date: after title, below title, or hidden
|
||||
* Configure header, row, and footer opacity
|
||||
* Configure footer click behavior
|
||||
* Show full task title
|
||||
* Show full description
|
||||
* Hide dividers
|
||||
* Improve widget touch targets
|
||||
* Expand/collapse Google Task subtasks in 'My order' mode
|
||||
* Fix bug when changing sort order to/from 'My order'
|
||||
* Fix crash when switching to 'My order' list with subtasks disabled
|
||||
|
||||
### 8.9.2 (2020-04-10)
|
||||
|
||||
* Fix 'Add reminder' layout issues
|
||||
* Fix move between EteSync lists
|
||||
* Accept date time changes when dismissing dialog
|
||||
* Improve date time picker behavior in landscape mode
|
||||
|
||||
### 8.9.1 (2020-04-08)
|
||||
|
||||
* Add option to always hide check button
|
||||
* Hide check button for new tasks
|
||||
* Rearrange multi-select buttons
|
||||
* Allow more space for time buttons in date time picker
|
||||
* Fix priority button layout on smaller devices
|
||||
* Fix clicking on hidden task titles
|
||||
* Fix tag picker checkbox tint on Android 4.4
|
||||
* Fix EteSync crash on malformed iCalendar data
|
||||
|
||||
### 8.9 (2020-04-06)
|
||||
|
||||
* Add 'Select all' option to multi-select menu
|
||||
* Add 'Share' to menu and multi-select menu
|
||||
* Display 'Calendar event created' snackbar after creating a calendar event
|
||||
|
||||
### 8.8 (2020-04-01)
|
||||
|
||||
* New bottom sheet due date picker
|
||||
* Shortcuts and calendar displayed together (Android 6+)
|
||||
* Click on due date in task list to reschedule
|
||||
* Option to autoclose due date picker after selecting a date or time
|
||||
* Redesigned title in edit screen
|
||||
* 'Discard' in overflow menu when 'Back button saves task' enabled
|
||||
* Add preference for linkifying edit screen
|
||||
* Updated date and time formatting
|
||||
* Minimum supported version is now Android 4.4
|
||||
* Custom backup/attachment directory requires Android 5+
|
||||
|
||||
### 8.7.1 (2020-03-31)
|
||||
|
||||
* Fix multi-account Google Task synchronization
|
||||
|
||||
### 8.7 (2020-03-19)
|
||||
|
||||
* Places are now lists
|
||||
* Rename a place
|
||||
* Assign an icon and color to a place
|
||||
* Add new navigation drawer settings
|
||||
* Option to remove filters, tags, and places from drawer
|
||||
* Option to hide unused tags and places in drawer
|
||||
|
||||
### 8.6.1 (2020-03-19)
|
||||
|
||||
* Fix crash on startup
|
||||
|
||||
### 8.6 (2020-03-17)
|
||||
|
||||
* Expand and collapse navigation drawer groups
|
||||
|
||||
### 8.5 (2020-03-13)
|
||||
|
||||
* Synchronize locations with CalDAV and EteSync
|
||||
* Fix crash when clearing completed from recently modified filter
|
||||
|
||||
### 8.4 (2020-03-11)
|
||||
|
||||
* New chip configuration options
|
||||
* Outlined or filled
|
||||
* Text and icon, text only, or icon only
|
||||
* Add option to disable color desaturation
|
||||
* Fix EteSync shared lists
|
||||
* Google Task sync requires Android 4.4+
|
||||
|
||||
### 8.3 (2020-03-08)
|
||||
|
||||
* Synchronize CalDAV and EteSync colors
|
||||
* Rename CalDAV and EteSync lists
|
||||
* Update Turkish translations - @emintufan
|
||||
|
||||
### 8.2.1 (2020-03-07)
|
||||
|
||||
* Increase default chip text contrast
|
||||
* New purchase activity
|
||||
* Fix dividers on Android 4.x
|
||||
|
||||
### 8.2 (2020-03-04)
|
||||
|
||||
* Choose your own app and widget colors with a color wheel
|
||||
* Dark theme now free for all
|
||||
* New 'System default' theme
|
||||
* New outlined chip style
|
||||
* Dark theme is now darker
|
||||
* Light theme is now lighter
|
||||
* Desaturate theme colors in dark mode
|
||||
* Improve dialog theming consistency
|
||||
* Bug fixes
|
||||
|
||||
### 8.1 (2020-02-21)
|
||||
|
||||
* Updated app settings screen
|
||||
|
||||
### 8.0.1 (2020-02-16)
|
||||
|
||||
* Fix missing sync settings on fdroid
|
||||
|
||||
### 8.0 (2020-02-12)
|
||||
|
||||
* EteSync support
|
||||
|
||||
### 7.8 (2020-01-24)
|
||||
|
||||
* Android AutoBackup integration
|
||||
|
||||
### 7.7 (2020-01-21)
|
||||
|
||||
* Add support for offline multi-level subtasks
|
||||
* Update Simplified Chinese translations - @sr093906
|
||||
|
||||
### 7.6.1 (2020-01-17)
|
||||
|
||||
* Fix long press in Google Task and CalDAV lists
|
||||
* Fix bug when moving multi-level CalDAV subtasks
|
||||
* Preserve remote VTODO when moving CalDAV tasks
|
||||
* Add Interlingua translations - @softinterlingua
|
||||
|
||||
### 7.6 (2020-01-10)
|
||||
|
||||
* Change tags with multi-select
|
||||
* Fix custom filter crash on deleted tag
|
||||
|
||||
### 7.5 (2020-01-07)
|
||||
|
||||
* New tag picker
|
||||
* Support self-signed SSL certificates
|
||||
|
||||
### 7.4.2 (2019-12-30)
|
||||
|
||||
* Fix Tasker plugin settings
|
||||
|
||||
### 7.4.1 (2019-12-27)
|
||||
|
||||
* Add option to enable subtasks in task list
|
||||
* Performance improvements
|
||||
* Ask Play Services to update security provider
|
||||
* Display custom icons in tag picker
|
||||
* Fix case comparison when sorting navigation drawer
|
||||
|
||||
### 7.4 (2019-12-16)
|
||||
|
||||
* Add Google Task and CalDAV subtasks from the edit screen
|
||||
* 'Recently modified' shows all modifications in past 24 hours
|
||||
* Fix duplicated multi-level subtask count
|
||||
* Increase checkbox touch target
|
||||
* Naturally order lists and filters
|
||||
|
||||
### 7.3.2 (2019-12-12)
|
||||
|
||||
* Fix slow query for subtasks
|
||||
* Fix setting icon on new CalDAV list
|
||||
* Fix clear completed for subtasks
|
||||
* Fix crash when clearing 1000+ tasks
|
||||
|
||||
### 7.3.1 (2019-12-05)
|
||||
|
||||
* Fix crash on missing filter
|
||||
|
||||
### 7.3 (2019-12-03)
|
||||
|
||||
* Expand and collapse subtasks
|
||||
|
||||
### 7.2.2 (2019-12-03)
|
||||
|
||||
* Fix Google Task sorting
|
||||
* Fix crash when deleting 500+ tasks
|
||||
|
||||
### 7.2.1 (2019-11-27)
|
||||
|
||||
* Bug fixes and minor improvements
|
||||
|
||||
### 7.2 (2019-11-25)
|
||||
|
||||
* Display Google Task and CalDAV subtasks in all lists (Android 5+)
|
||||
* Remove completed tasks immediately - @creywood
|
||||
|
||||
### 7.1.2 (2019-11-22)
|
||||
|
||||
* Add CalDAV account setting for repeating tasks
|
||||
* Fix CalDAV repeating tasks
|
||||
* Fix Google Tasks HTTP 400 response
|
||||
|
||||
### 7.1.1 (2019-11-18)
|
||||
|
||||
* Improve subtask query performance
|
||||
* Fix crash when deleting 1000+ CalDAV tasks
|
||||
|
||||
### 7.1 (2019-11-14)
|
||||
|
||||
* Display subtasks on Google Task and CalDAV widgets (Android 5+)
|
||||
* Fix subtasks after backup import
|
||||
* Fix chained subtask completion
|
||||
|
||||
### 7.0 (2019-11-12)
|
||||
|
||||
* Add support for CalDAV subtasks (Android 5+) - @creywood
|
||||
* Display Google subtasks in all sort modes (Android 5+)
|
||||
|
||||
### 6.9.3 (2019-10-31)
|
||||
|
||||
* Fix disappearance of remotely completed recurring Google Tasks
|
||||
* Fix '0 tasks' notification
|
||||
* Limit to 20 active notifications due to change in Android 10
|
||||
|
||||
### 6.9.2 (2019-10-25)
|
||||
|
||||
* Fix bug forcing new Google Tasks to top
|
||||
* Fix bug preventing deleted tasks from being synchronized - @creywood
|
||||
|
||||
### 6.9.1 (2019-10-09)
|
||||
|
||||
* Fix location reminders on Android 10
|
||||
* Fix CalDAV time zone issue
|
||||
|
||||
### 6.9 (2019-09-23)
|
||||
|
||||
* Synchronize tags with CalDAV
|
||||
* Target Android 10
|
||||
* Bug fixes
|
||||
|
||||
### 6.8.1 (2019-08-05)
|
||||
|
||||
* Fix CalDAV filter migration
|
||||
* Fix native date picker crash
|
||||
|
||||
### 6.8 (2019-07-30)
|
||||
|
||||
* Name your own subscription price! Upgrade, downgrade, or cancel at any time
|
||||
* Choose icons for lists (requires [subscription](https://tasks.org/subscribe))
|
||||
* Choose color for custom filters
|
||||
* Performance improvements
|
||||
* Allow duplicate CalDAV list names
|
||||
* Fix duplicate tag name bug
|
||||
|
||||
### 6.7.3 (2019-07-16)
|
||||
|
||||
* Workaround for [list updated time bug](https://issuetracker.google.com/issues/136123247) in Google Tasks API
|
||||
* Fix crash in CalDAV sync
|
||||
|
||||
### 6.7.2 (2019-07-08)
|
||||
|
||||
* Handle 404 errors when creating new Google Tasks
|
||||
* Ignore 404 errors when deleting Google Drive files
|
||||
* Don't report connection errors
|
||||
|
||||
### 6.7.1 (2019-07-05)
|
||||
|
||||
* Add location chip to task list
|
||||
* Reduce chip sizes
|
||||
* Accept 'send to' for more attachment types
|
||||
* Synchronize multiple accounts in parallel
|
||||
* Fix Google Task migration from older versions
|
||||
* Fix corrupted checkbox issue
|
||||
* Fix some RTL issues
|
||||
|
||||
### 6.7 (2019-06-13)
|
||||
|
||||
* Use drag and drop to indent tasks
|
||||
* Add new Google Tasks to top or bottom
|
||||
* Toggle hidden and completed in manually sorted Google Task lists
|
||||
* Rearrange Google Tasks without a network connection
|
||||
* Optional workaround for [custom order bug](https://issuetracker.google.com/issues/132432317) in Google Tasks API
|
||||
* Include subtasks when moving or deleting Google Tasks
|
||||
* Ignore 404 errors when fetching Google Drive folders
|
||||
* Match tags in search results
|
||||
* Fix stuck 'Generating notifications' notification
|
||||
* Don't display sync indicator when there is no network connection
|
||||
* Don't synchronize immediately after every change
|
||||
* Added Estonian translations - Eraser
|
||||
|
||||
### 6.6.4 (2019-05-21)
|
||||
|
||||
* Handle [breaking change](https://issuetracker.google.com/issues/133254108) in Google Tasks API
|
||||
|
||||
### 6.6.3 (2019-05-08)
|
||||
|
||||
* Fix backup import crash
|
||||
* Fix crash when refreshing purchases
|
||||
* Google Tasks synchronization bug fix
|
||||
|
||||
### 6.6.2 (2019-04-22)
|
||||
|
||||
* Backup and restore preferences
|
||||
* Google Task performance improvements
|
||||
* Google Task and Drive support added to F-Droid and Amazon
|
||||
* Add third-party licenses, changelog, and version info
|
||||
* Fix backup import crash
|
||||
* Fix widget bugs
|
||||
|
||||
### 6.6.1 (2019-04-15)
|
||||
|
||||
* Fix crash on devices running Android 5.1 and below
|
||||
* Fix analytics opt-out
|
||||
|
||||
### 6.6 (2019-04-10)
|
||||
|
||||
* New location picker
|
||||
* Choose Mapbox or Google Maps tiles
|
||||
* Choose Mapbox or Google Places search
|
||||
* Google Places search restricted to subscribers due to new Google Maps pricing
|
||||
* Use Mapbox for reverse geocoding
|
||||
* Select from previously used locations
|
||||
* Dark maps
|
||||
* Enable location picker in F-Droid build
|
||||
* Resume support for Amazon App Store
|
||||
* Fix Android Q background warning
|
||||
|
||||
### 6.5.6 (2019-03-27)
|
||||
|
||||
* Fix crash when clearing completed on a manually sorted Google Task list
|
||||
* Update Ukrainian translations - nathalier
|
||||
|
||||
### 6.5.5 (2019-03-14)
|
||||
|
||||
* Bug fixes
|
||||
|
||||
### 6.5.4 (2019-03-11)
|
||||
|
||||
* Fix black screen issue
|
||||
* Fix crash when task not found
|
||||
|
||||
### 6.5.3 (2019-02-19)
|
||||
|
||||
* Fix crash when upgrading from Android 7 to 8+
|
||||
* Improve OneTask interoperability
|
||||
* Performance improvement
|
||||
|
||||
### 6.5.2 (2019-02-11)
|
||||
|
||||
* Bug fixes
|
||||
|
||||
### 6.5.1 (2019-02-10)
|
||||
|
||||
* Bug fixes
|
||||
|
||||
### 6.5 (2019-02-08)
|
||||
|
||||
* Improve notification accuracy
|
||||
* Performance improvements
|
||||
* Bug fixes
|
||||
* Add Tagalog translations - Topol
|
||||
|
||||
### 6.4.1 (2019-01-16)
|
||||
|
||||
* Limit number of active notifications
|
||||
* Limit rate of notifications
|
||||
* Fix Synology Calendar sync issue
|
||||
* Fix exception when external storage is unavailable
|
||||
|
||||
### 6.4 (2019-01-10)
|
||||
|
||||
* Copy backups to Google Drive
|
||||
* Improved search
|
||||
* Use system file picker (Android 4.4+)
|
||||
* Use system directory picker (Android 5.0+)
|
||||
* Accept 'send' and 'send_multiple' actions with images
|
||||
* File attachment bug fixes
|
||||
|
||||
### 6.3.1 (2018-11-07)
|
||||
|
||||
* New location row in task edit screen
|
||||
* Add location departure notifications
|
||||
* Set CalDAV completion percentage and status
|
||||
* Bug fixes
|
||||
|
||||
### 6.2 (2018-10-29)
|
||||
|
||||
* New white theme color
|
||||
* New icons
|
||||
* New list and tag chips
|
||||
* Linkify text when editing tasks
|
||||
* Option to linkify text on task list
|
||||
* Show description on task list
|
||||
* Move due date next to title
|
||||
* Updated hidden task visualization
|
||||
* No longer require contacts permission (Oreo+)
|
||||
* Dropped support for Android 4.0
|
||||
|
||||
### 6.1.3 (2018-10-22)
|
||||
|
||||
* Fix translation error
|
||||
|
||||
### 6.1.2 (2018-10-18)
|
||||
|
||||
* Remove missed call functionality due to Google Play Developer policy change
|
||||
* Fix manual sort issue affecting Samsung Oreo devices
|
||||
* Fix refresh issue affecting Pure Calendar Widget
|
||||
* Fix memory leak
|
||||
* Schedule jobs with WorkManager instead of android-job
|
||||
|
||||
### 6.1.1 (2018-07-20)
|
||||
|
||||
* Fix notification badge issues
|
||||
* Allow non-SSL connections
|
||||
* Allow user-defined certificate authorities
|
||||
|
||||
### 6.1 (2018-06-30)
|
||||
|
||||
* Customize launcher icon
|
||||
* Customize shortcut widget icon and label
|
||||
* Add custom text selection action (Android 6+)
|
||||
* Target Android P
|
||||
* Remove 'Tasks' from notification body
|
||||
* Fix localization issues - @marmo
|
||||
* Fix crash when calendar permissions are revoked
|
||||
* Fix crash when opening task from widget
|
||||
* Fix crash when recording audio note
|
||||
* Fix crash when dismissing dialogs
|
||||
* Fix crash in backup import
|
||||
* Fix crash on invalid URL during CalDAV setup
|
||||
* Fix crash when editing task
|
||||
|
||||
### 6.0.6 (2018-04-28)
|
||||
|
||||
* Fix crash when creating shortcuts on pre-Oreo devices
|
||||
* Fix crash when Google Task or CalDAV list is missing
|
||||
* Downgrade Play Services for compatibility with MicroG
|
||||
|
||||
### 6.0.5 (2018-04-26)
|
||||
|
||||
* Fix crash when deleting 1000+ tasks at once
|
||||
* Fix hidden dates in date picker
|
||||
* Fix crash on bad response from billing client
|
||||
* Report crash when database fails to open
|
||||
|
||||
### 6.0.4 (2018-04-25)
|
||||
|
||||
* Fix crash caused by leftover Google Analytics campaign tracker
|
||||
|
||||
### 6.0.3 (2018-04-25)
|
||||
|
||||
* Fix crash when manually sorting Google Task lists
|
||||
* Fix multi account Google Task sync issue
|
||||
|
||||
### 6.0.2 (2018-04-25)
|
||||
|
||||
* Fix crash caused by missing tag metadata
|
||||
* Fix crash caused by missing Android System WebView
|
||||
* Replace Google Analytics with Firebase Analytics
|
||||
* Add Crashlytics exception reporting
|
||||
|
||||
### 6.0.1 (2018-04-23)
|
||||
|
||||
* Fix crash caused by missing Google Task metadata
|
||||
|
||||
### 6.0 (2018-04-23)
|
||||
|
||||
* Change to [annual subscription](https://tasks.org/subscribe) pricing
|
||||
* [CalDAV synchronization](https://tasks.org/caldav)
|
||||
* Sync with [multiple Google Task accounts](https://tasks.org/docs/google_tasks_intro.html)
|
||||
* Default theme changed to blue
|
||||
* Display Google Task and CalDAV chips on task list
|
||||
* Display sync error icon in navigation drawer
|
||||
* Move tasks between Google Task and CalDAV lists using multi-select
|
||||
* Add "Don't Sync" option when choosing a Google Task or CalDAV list
|
||||
* Add option to restrict background synchronization to unmetered connections
|
||||
* Custom filters with due date criteria no longer set a due time of 23:59/11:59PM
|
||||
* Internal improvements to notification scheduling should reduce notification delays
|
||||
* Fix list animation bug
|
||||
@ -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,205 @@
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'checkstyle'
|
||||
apply plugin: 'io.fabric'
|
||||
apply plugin: 'com.cookpad.android.licensetools'
|
||||
|
||||
repositories {
|
||||
jcenter()
|
||||
google()
|
||||
}
|
||||
|
||||
android {
|
||||
lintOptions {
|
||||
lintConfig file("lint.xml")
|
||||
textOutput 'stdout'
|
||||
textReport true
|
||||
ignoreTestSources true
|
||||
}
|
||||
|
||||
compileSdkVersion 28
|
||||
|
||||
defaultConfig {
|
||||
testApplicationId "org.tasks.test"
|
||||
applicationId "org.tasks"
|
||||
versionCode 575
|
||||
versionName "6.6.1"
|
||||
targetSdkVersion 28
|
||||
minSdkVersion 16
|
||||
multiDexEnabled true
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
||||
javaCompileOptions {
|
||||
annotationProcessorOptions {
|
||||
arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
release
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
debug {
|
||||
resValue 'string', 'mapbox_key', project.hasProperty('tasks_mapbox_key_debug') ? tasks_mapbox_key_debug : ''
|
||||
resValue 'string', 'google_key', project.hasProperty('tasks_google_key_debug') ? tasks_google_key_debug : ''
|
||||
testCoverageEnabled true
|
||||
}
|
||||
release {
|
||||
resValue 'string', 'mapbox_key', project.hasProperty('tasks_mapbox_key') ? tasks_mapbox_key : ''
|
||||
resValue 'string', 'google_key', project.hasProperty('tasks_google_key') ? tasks_google_key : ''
|
||||
minifyEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard.pro'
|
||||
signingConfig signingConfigs.release
|
||||
}
|
||||
}
|
||||
|
||||
flavorDimensions 'store'
|
||||
|
||||
productFlavors {
|
||||
generic {
|
||||
dimension 'store'
|
||||
proguardFile 'generic.pro'
|
||||
}
|
||||
googleplay {
|
||||
dimension 'store'
|
||||
}
|
||||
amazon {
|
||||
dimension 'store'
|
||||
}
|
||||
}
|
||||
|
||||
if (project.hasProperty('keyAlias') &&
|
||||
project.hasProperty('storeFile') &&
|
||||
project.hasProperty('storePassword') &&
|
||||
project.hasProperty('keyPassword')) {
|
||||
android.signingConfigs.release.keyAlias = keyAlias
|
||||
android.signingConfigs.release.storeFile = file(storeFile)
|
||||
android.signingConfigs.release.storePassword = storePassword
|
||||
android.signingConfigs.release.keyPassword = keyPassword
|
||||
} else {
|
||||
buildTypes.release.signingConfig = null
|
||||
}
|
||||
}
|
||||
|
||||
task checkstyle(type: Checkstyle) {
|
||||
source fileTree('src')
|
||||
include '**/*.java'
|
||||
exclude '**/gen/**'
|
||||
|
||||
classpath = files()
|
||||
showViolations true
|
||||
|
||||
reports {
|
||||
xml.enabled = true
|
||||
html.enabled = true
|
||||
html.destination = project.file("$buildDir/reports/checkstyle/checkstyle.html")
|
||||
}
|
||||
}
|
||||
|
||||
checkstyle {
|
||||
configFile project.file('google_checks.xml')
|
||||
toolVersion = '8.16'
|
||||
}
|
||||
|
||||
configurations {
|
||||
all*.exclude group: 'com.google.guava', module: 'guava-jdk5'
|
||||
all*.exclude group: 'org.apache.httpcomponents', module: 'httpclient'
|
||||
}
|
||||
|
||||
final DAGGER_VERSION = '2.22.1'
|
||||
final BUTTERKNIFE_VERSION = '10.1.0'
|
||||
final STETHO_VERSION = '1.5.1'
|
||||
final WORK_VERSION = '2.0.1'
|
||||
final LEAKCANARY_VERSION = '1.6.3'
|
||||
final ROOM_VERSION = '2.1.0-alpha04'
|
||||
final CRASHLYTICS_VERSION = '2.9.9'
|
||||
final FIREBASE_VERSION = '16.0.8'
|
||||
|
||||
dependencies {
|
||||
implementation project(":dav4android")
|
||||
implementation project(":ical4android")
|
||||
|
||||
annotationProcessor "com.google.dagger:dagger-compiler:${DAGGER_VERSION}"
|
||||
implementation "com.google.dagger:dagger:${DAGGER_VERSION}"
|
||||
|
||||
implementation "androidx.room:room-rxjava2:${ROOM_VERSION}"
|
||||
annotationProcessor "androidx.room:room-compiler:${ROOM_VERSION}"
|
||||
implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"
|
||||
implementation "io.reactivex.rxjava2:rxandroid:2.1.0"
|
||||
implementation "androidx.paging:paging-runtime:2.1.0"
|
||||
|
||||
annotationProcessor "com.jakewharton:butterknife-compiler:${BUTTERKNIFE_VERSION}"
|
||||
implementation "com.jakewharton:butterknife:${BUTTERKNIFE_VERSION}"
|
||||
|
||||
debugImplementation("com.facebook.stetho:stetho:${STETHO_VERSION}") {
|
||||
exclude group: 'com.google.code.findbugs', module: 'jsr305'
|
||||
}
|
||||
debugImplementation "com.facebook.stetho:stetho-timber:${STETHO_VERSION}@aar"
|
||||
debugImplementation "com.squareup.leakcanary:leakcanary-android:${LEAKCANARY_VERSION}"
|
||||
debugImplementation "com.squareup.leakcanary:leakcanary-support-fragment:${LEAKCANARY_VERSION}"
|
||||
|
||||
implementation 'androidx.multidex:multidex:2.0.1'
|
||||
implementation 'me.saket:better-link-movement-method:2.2.0'
|
||||
//noinspection GradleDependency
|
||||
implementation 'com.squareup.okhttp3:okhttp:3.12.2' // 3.13 minSdk is 21
|
||||
implementation 'com.google.code.gson:gson:2.8.5'
|
||||
implementation 'com.github.rey5137:material:1.2.5'
|
||||
implementation 'com.nononsenseapps:filepicker:4.2.1'
|
||||
implementation 'com.google.android.material:material:1.0.0'
|
||||
implementation 'androidx.annotation:annotation:1.0.2'
|
||||
implementation 'androidx.cardview:cardview:1.0.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha3'
|
||||
implementation 'com.jakewharton.timber:timber:4.7.1'
|
||||
implementation 'com.jakewharton.threetenabp:threetenabp:1.1.0'
|
||||
//noinspection GradleDependency
|
||||
implementation 'com.google.guava:guava:20.0'
|
||||
implementation 'com.jakewharton:process-phoenix:2.0.0'
|
||||
implementation 'com.google.android.apps.dashclock:dashclock-api:2.0.0'
|
||||
implementation 'com.twofortyfouram:android-plugin-api-for-locale:1.0.2'
|
||||
implementation('com.rubiconproject.oss:jchronic:0.2.6') {
|
||||
transitive = false
|
||||
}
|
||||
implementation('org.scala-saddle:google-rfc-2445:20110304') {
|
||||
transitive = false
|
||||
}
|
||||
implementation('com.wdullaer:materialdatetimepicker:4.0.1')
|
||||
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
|
||||
implementation 'com.google.apis:google-api-services-tasks:v1-rev55-1.25.0'
|
||||
implementation 'com.google.apis:google-api-services-drive:v3-rev136-1.25.0'
|
||||
implementation 'com.google.api-client:google-api-client-android:1.27.0'
|
||||
implementation("androidx.work:work-runtime:${WORK_VERSION}") {
|
||||
// https://groups.google.com/forum/#!topic/guava-announce/Km82fZG68Sw
|
||||
exclude group: 'com.google.guava', module: 'listenablefuture'
|
||||
}
|
||||
implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:7.3.0'
|
||||
implementation'com.mapbox.mapboxsdk:mapbox-sdk-services:4.5.0'
|
||||
|
||||
googleplayImplementation "com.crashlytics.sdk.android:crashlytics:${CRASHLYTICS_VERSION}"
|
||||
googleplayImplementation "com.google.firebase:firebase-core:${FIREBASE_VERSION}"
|
||||
googleplayImplementation "com.google.android.gms:play-services-location:16.0.0"
|
||||
googleplayImplementation 'com.google.android.gms:play-services-maps:16.1.0'
|
||||
googleplayImplementation "com.google.android.gms:play-services-auth:16.0.1"
|
||||
googleplayImplementation 'com.google.android.libraries.places:places:1.1.0'
|
||||
googleplayImplementation 'com.android.billingclient:billing:1.2.1'
|
||||
|
||||
amazonImplementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
amazonImplementation "com.crashlytics.sdk.android:crashlytics:${CRASHLYTICS_VERSION}"
|
||||
amazonImplementation "com.google.firebase:firebase-core:${FIREBASE_VERSION}"
|
||||
|
||||
androidTestAnnotationProcessor "com.google.dagger:dagger-compiler:${DAGGER_VERSION}"
|
||||
androidTestAnnotationProcessor "com.jakewharton:butterknife-compiler:${BUTTERKNIFE_VERSION}"
|
||||
androidTestImplementation 'com.google.dexmaker:dexmaker-mockito:1.2'
|
||||
androidTestImplementation 'com.natpryce:make-it-easy:4.0.1'
|
||||
androidTestImplementation 'androidx.test:runner:1.1.1'
|
||||
androidTestImplementation 'androidx.test:rules:1.1.1'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
|
||||
androidTestImplementation 'androidx.annotation:annotation:1.0.2'
|
||||
}
|
||||
|
||||
apply plugin: 'com.google.gms.google-services'
|
||||
@ -1,293 +0,0 @@
|
||||
@file:Suppress("UnstableApiUsage")
|
||||
|
||||
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension
|
||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||
|
||||
plugins {
|
||||
alias(libs.plugins.android.application)
|
||||
id("com.google.gms.google-services")
|
||||
id("com.google.firebase.crashlytics")
|
||||
kotlin("android")
|
||||
id("dagger.hilt.android.plugin")
|
||||
id("com.google.android.gms.oss-licenses-plugin")
|
||||
alias(libs.plugins.kotlin.parcelize)
|
||||
alias(libs.plugins.ksp)
|
||||
alias(libs.plugins.kotlin.serialization)
|
||||
alias(libs.plugins.kotlin.compose.compiler)
|
||||
}
|
||||
|
||||
kotlin {
|
||||
compilerOptions {
|
||||
jvmTarget.set(JvmTarget.JVM_17)
|
||||
}
|
||||
}
|
||||
|
||||
composeCompiler {
|
||||
enableStrongSkippingMode = true
|
||||
}
|
||||
|
||||
android {
|
||||
bundle {
|
||||
language {
|
||||
enableSplit = false
|
||||
}
|
||||
}
|
||||
|
||||
buildFeatures {
|
||||
viewBinding = true
|
||||
dataBinding = true
|
||||
compose = true
|
||||
buildConfig = true
|
||||
}
|
||||
|
||||
lint {
|
||||
lintConfig = file("lint.xml")
|
||||
textOutput = File("stdout")
|
||||
textReport = true
|
||||
}
|
||||
|
||||
compileSdk = libs.versions.android.compileSdk.get().toInt()
|
||||
|
||||
defaultConfig {
|
||||
testApplicationId = "org.tasks.test"
|
||||
applicationId = "org.tasks"
|
||||
versionCode = libs.versions.versionCode.get().toInt()
|
||||
versionName = libs.versions.versionName.get()
|
||||
targetSdk = libs.versions.android.targetSdk.get().toInt()
|
||||
minSdk = libs.versions.android.minSdk.get().toInt()
|
||||
testInstrumentationRunner = "org.tasks.TestRunner"
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
create("release") {
|
||||
val tasksKeyAlias: String? by project
|
||||
val tasksStoreFile: String? by project
|
||||
val tasksStorePassword: String? by project
|
||||
val tasksKeyPassword: String? by project
|
||||
|
||||
keyAlias = tasksKeyAlias
|
||||
storeFile = file(tasksStoreFile ?: "none")
|
||||
storePassword = tasksStorePassword
|
||||
keyPassword = tasksKeyPassword
|
||||
}
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
isCoreLibraryDesugaringEnabled = true
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
flavorDimensions += listOf("store")
|
||||
|
||||
@Suppress("LocalVariableName")
|
||||
buildTypes {
|
||||
debug {
|
||||
configure<CrashlyticsExtension> {
|
||||
mappingFileUploadEnabled = false
|
||||
}
|
||||
val tasks_mapbox_key_debug: String? by project
|
||||
val tasks_google_key_debug: String? by project
|
||||
val tasks_caldav_url: String? by project
|
||||
resValue("string", "mapbox_key", tasks_mapbox_key_debug ?: "")
|
||||
resValue("string", "google_key", tasks_google_key_debug ?: "")
|
||||
resValue("string", "tasks_caldav_url", tasks_caldav_url ?: "https://caldav.tasks.org")
|
||||
resValue("string", "tasks_nominatim_url", tasks_caldav_url ?: "https://nominatim.tasks.org")
|
||||
resValue("string", "tasks_places_url", tasks_caldav_url ?: "https://places.tasks.org")
|
||||
enableUnitTestCoverage = project.hasProperty("coverage")
|
||||
}
|
||||
release {
|
||||
val tasks_mapbox_key: String? by project
|
||||
val tasks_google_key: String? by project
|
||||
resValue("string", "mapbox_key", tasks_mapbox_key ?: "")
|
||||
resValue("string", "google_key", tasks_google_key ?: "")
|
||||
isMinifyEnabled = true
|
||||
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard.pro")
|
||||
signingConfig = signingConfigs.getByName("release")
|
||||
}
|
||||
}
|
||||
|
||||
productFlavors {
|
||||
create("generic") {
|
||||
dimension = "store"
|
||||
}
|
||||
create("googleplay") {
|
||||
isDefault = true
|
||||
dimension = "store"
|
||||
}
|
||||
}
|
||||
packaging {
|
||||
resources {
|
||||
excludes += setOf("META-INF/*.kotlin_module", "META-INF/INDEX.LIST")
|
||||
}
|
||||
}
|
||||
|
||||
testOptions {
|
||||
managedDevices {
|
||||
localDevices {
|
||||
create("pixel2api30") {
|
||||
device = "Pixel 2"
|
||||
apiLevel = 30
|
||||
systemImageSource = "aosp-atd"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
namespace = "org.tasks"
|
||||
}
|
||||
|
||||
configurations.all {
|
||||
exclude(group = "org.apache.httpcomponents")
|
||||
exclude(group = "org.checkerframework")
|
||||
exclude(group = "com.google.code.findbugs")
|
||||
exclude(group = "com.google.errorprone")
|
||||
exclude(group = "com.google.j2objc")
|
||||
exclude(group = "com.google.http-client", module = "google-http-client-apache-v2")
|
||||
exclude(group = "com.google.http-client", module = "google-http-client-jackson2")
|
||||
}
|
||||
|
||||
val genericImplementation by configurations
|
||||
val googleplayImplementation by configurations
|
||||
|
||||
dependencies {
|
||||
implementation(projects.data)
|
||||
implementation(projects.kmp)
|
||||
implementation(projects.icons)
|
||||
implementation(libs.androidx.navigation)
|
||||
implementation(libs.androidx.adaptive.navigation.android)
|
||||
coreLibraryDesugaring(libs.desugar.jdk.libs)
|
||||
implementation(libs.bitfire.dav4jvm) {
|
||||
exclude(group = "junit")
|
||||
exclude(group = "org.ogce", module = "xpp3")
|
||||
}
|
||||
implementation(libs.bitfire.ical4android) {
|
||||
exclude(group = "commons-logging")
|
||||
exclude(group = "org.json", module = "json")
|
||||
exclude(group = "org.codehaus.groovy", module = "groovy")
|
||||
exclude(group = "org.codehaus.groovy", module = "groovy-dateutil")
|
||||
}
|
||||
implementation(libs.bitfire.cert4android)
|
||||
implementation(libs.dmfs.opentasks.provider) {
|
||||
exclude("com.github.tasks.opentasks", "opentasks-contract")
|
||||
}
|
||||
implementation(libs.dmfs.rfc5545.datetime)
|
||||
implementation(libs.dmfs.recur)
|
||||
implementation(libs.dmfs.jems)
|
||||
|
||||
implementation(libs.dagger.hilt)
|
||||
ksp(libs.dagger.hilt.compiler)
|
||||
ksp(libs.androidx.hilt.compiler)
|
||||
implementation(libs.androidx.hilt.navigation)
|
||||
implementation(libs.androidx.hilt.work)
|
||||
|
||||
implementation(libs.androidx.core.remoteviews)
|
||||
implementation(libs.androidx.core.splashscreen)
|
||||
implementation(libs.androidx.datastore)
|
||||
implementation(libs.androidx.fragment.compose)
|
||||
implementation(libs.androidx.lifecycle.runtime)
|
||||
implementation(libs.androidx.lifecycle.runtime.compose)
|
||||
implementation(libs.androidx.lifecycle.viewmodel)
|
||||
implementation(libs.androidx.room)
|
||||
implementation(libs.androidx.sqlite)
|
||||
implementation(libs.androidx.appcompat)
|
||||
implementation(libs.iconics)
|
||||
implementation(libs.markwon)
|
||||
implementation(libs.markwon.editor)
|
||||
implementation(libs.markwon.linkify)
|
||||
implementation(libs.markwon.strikethrough)
|
||||
implementation(libs.markwon.tables)
|
||||
implementation(libs.markwon.tasklist)
|
||||
|
||||
debugImplementation(libs.leakcanary)
|
||||
debugImplementation("androidx.compose.ui:ui-tooling")
|
||||
debugImplementation(libs.kotlin.reflect)
|
||||
|
||||
implementation(libs.kotlin.jdk8)
|
||||
implementation(libs.kotlinx.immutable)
|
||||
implementation(libs.kotlinx.serialization)
|
||||
implementation(libs.okhttp)
|
||||
implementation(libs.persistent.cookiejar)
|
||||
implementation(libs.material)
|
||||
implementation(libs.androidx.compose.material3)
|
||||
implementation(libs.androidx.compose.material3.adaptive)
|
||||
implementation(libs.androidx.constraintlayout)
|
||||
implementation(libs.androidx.swiperefreshlayout)
|
||||
implementation(libs.androidx.preference)
|
||||
implementation(libs.timber)
|
||||
implementation(libs.dashclock.api)
|
||||
implementation(libs.locale) {
|
||||
isTransitive = false
|
||||
}
|
||||
implementation(libs.jchronic) {
|
||||
isTransitive = false
|
||||
}
|
||||
implementation(libs.shortcut.badger)
|
||||
implementation(libs.google.api.tasks)
|
||||
implementation(libs.google.api.drive)
|
||||
implementation(libs.google.oauth2)
|
||||
implementation(libs.androidx.work)
|
||||
implementation(libs.etebase)
|
||||
implementation(libs.colorpicker)
|
||||
implementation(libs.appauth)
|
||||
implementation(libs.osmdroid)
|
||||
implementation(libs.androidx.recyclerview)
|
||||
|
||||
implementation(platform(libs.androidx.compose))
|
||||
implementation("androidx.compose.ui:ui")
|
||||
implementation("androidx.compose.foundation:foundation")
|
||||
implementation("androidx.compose.material:material")
|
||||
implementation("androidx.compose.runtime:runtime-livedata")
|
||||
implementation(libs.androidx.activity.compose)
|
||||
implementation(libs.androidx.material.icons.extended)
|
||||
implementation(libs.androidx.lifecycle.viewmodel.compose)
|
||||
implementation("androidx.compose.ui:ui-tooling-preview")
|
||||
implementation(libs.coil.compose)
|
||||
implementation(libs.coil.video)
|
||||
implementation(libs.coil.svg)
|
||||
implementation(libs.coil.gif)
|
||||
|
||||
implementation(libs.ktor)
|
||||
implementation(libs.ktor.client.logging)
|
||||
implementation(libs.ktor.content.negotiation)
|
||||
implementation(libs.ktor.serialization)
|
||||
|
||||
implementation(libs.accompanist.permissions)
|
||||
|
||||
googleplayImplementation(platform(libs.firebase))
|
||||
googleplayImplementation(libs.firebase.crashlytics)
|
||||
googleplayImplementation(libs.firebase.analytics) {
|
||||
exclude("com.google.android.gms", "play-services-ads-identifier")
|
||||
}
|
||||
googleplayImplementation(libs.firebase.config.ktx)
|
||||
googleplayImplementation(libs.play.services.location)
|
||||
googleplayImplementation(libs.play.services.maps)
|
||||
googleplayImplementation(libs.play.billing.ktx)
|
||||
googleplayImplementation(libs.play.review)
|
||||
googleplayImplementation(libs.play.services.oss.licenses)
|
||||
googleplayImplementation(libs.horologist.datalayer.phone)
|
||||
googleplayImplementation(libs.horologist.datalayer.grpc)
|
||||
googleplayImplementation(libs.horologist.datalayer.core)
|
||||
googleplayImplementation(libs.play.services.wearable)
|
||||
googleplayImplementation(libs.microsoft.authentication) {
|
||||
exclude("com.microsoft.device.display", "display-mask")
|
||||
}
|
||||
googleplayImplementation(projects.wearDatalayer)
|
||||
|
||||
androidTestImplementation(libs.dagger.hilt.testing)
|
||||
kspAndroidTest(libs.dagger.hilt.compiler)
|
||||
kspAndroidTest(libs.androidx.hilt.compiler)
|
||||
androidTestImplementation(libs.mockito.android)
|
||||
androidTestImplementation(libs.make.it.easy)
|
||||
androidTestImplementation(libs.androidx.test.runner)
|
||||
androidTestImplementation(libs.androidx.test.rules)
|
||||
androidTestImplementation(libs.androidx.junit)
|
||||
androidTestImplementation(libs.okhttp.mockwebserver)
|
||||
|
||||
testImplementation(libs.junit)
|
||||
testImplementation(libs.kotlinx.coroutines.test)
|
||||
testImplementation(libs.make.it.easy)
|
||||
testImplementation(libs.androidx.test.core)
|
||||
testImplementation(libs.mockito.core)
|
||||
testImplementation(libs.xpp3)
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
-dontwarn com.google.api.client.googleapis.extensions.android.gms.auth.*
|
||||
@ -1,20 +0,0 @@
|
||||
{
|
||||
"version": 3,
|
||||
"artifactType": {
|
||||
"type": "APK",
|
||||
"kind": "Directory"
|
||||
},
|
||||
"applicationId": "org.tasks.ak",
|
||||
"variantName": "genericRelease",
|
||||
"elements": [
|
||||
{
|
||||
"type": "SINGLE",
|
||||
"filters": [],
|
||||
"attributes": [],
|
||||
"versionCode": 130804,
|
||||
"versionName": "14.0.6",
|
||||
"outputFile": "app-generic-release.apk"
|
||||
}
|
||||
],
|
||||
"elementType": "File"
|
||||
}
|
||||
@ -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>
|
||||
Binary file not shown.
@ -0,0 +1,602 @@
|
||||
- artifact: at.bitfire:dav4android:+
|
||||
name: dav4android
|
||||
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/
|
||||
forceGenerate: true
|
||||
- artifact: at.bitfire: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
|
||||
forceGenerate: true
|
||||
- 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: org.jetbrains.kotlin:+:+
|
||||
name: Kotlin Standard Library
|
||||
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.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: com.mapbox.mapboxsdk:mapbox-sdk-services:+
|
||||
name: Mapbox Services SDK
|
||||
copyrightHolder: Mapbox
|
||||
license: MIT License
|
||||
licenseUrl: http://www.opensource.org/licenses/mit-license.php
|
||||
url: https://github.com/mapbox/mapbox-java
|
||||
forceGenerate: true
|
||||
- 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: com.google.http-client:+:+
|
||||
name: Google HTTP Client
|
||||
copyrightHolder: Google Inc.
|
||||
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: com.google.j2objc:j2objc-annotations:+
|
||||
name: J2ObjC Annotations
|
||||
copyrightHolder: Google Inc.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/google/j2objc/
|
||||
- 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.findbugs:jsr305:+
|
||||
name: FindBugs-jsr305
|
||||
copyrightHolder: FindBugs Project
|
||||
license: BSD 2-Clause License
|
||||
licenseUrl: https://opensource.org/licenses/BSD-2-Clause
|
||||
url: http://findbugs.sourceforge.net/
|
||||
forceGenerate: true
|
||||
- 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: com.mapbox.mapboxsdk:mapbox-sdk-turf:+
|
||||
name: Mapbox Services SDK
|
||||
copyrightHolder: Mapbox
|
||||
license: MIT License
|
||||
licenseUrl: http://www.opensource.org/licenses/mit-license.php
|
||||
url: https://github.com/mapbox/mapbox-java
|
||||
forceGenerate: true
|
||||
- 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: org.slf4j:+:+
|
||||
name: SLF4J
|
||||
copyrightHolder: QOS.ch
|
||||
license: MIT License
|
||||
licenseUrl: http://www.opensource.org/licenses/mit-license.php
|
||||
url: http://www.slf4j.org
|
||||
- artifact: com.mapbox.mapboxsdk:mapbox-android-core:+
|
||||
name: Mapbox Android Core Library
|
||||
copyrightHolder: Mapbox
|
||||
license: MIT License
|
||||
licenseUrl: http://www.opensource.org/licenses/mit-license.php
|
||||
url: https://github.com/mapbox/mapbox-events-android
|
||||
forceGenerate: true
|
||||
- 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: com.github.rey5137:material:+
|
||||
name: Material Library
|
||||
copyrightHolder: Rey Pham
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/rey5137/material
|
||||
- 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: com.mapbox.mapboxsdk:mapbox-android-sdk:+
|
||||
name: Mapbox Maps SDK for Android
|
||||
copyrightHolder: Mapbox
|
||||
license: BSD 2-Clause License
|
||||
licenseUrl: https://opensource.org/licenses/BSD-2-Clause
|
||||
url: https://github.com/mapbox/mapbox-gl-native
|
||||
forceGenerate: true
|
||||
- artifact: com.nononsenseapps:filepicker:+
|
||||
name: filepicker
|
||||
copyrightHolder: Jonas Kalderstam
|
||||
license: Mozilla Public License, Version 2.0
|
||||
licenseUrl: https://www.mozilla.org/en-US/MPL/2.0/
|
||||
- artifact: com.squareup.okhttp3:+:+
|
||||
name: OkHttp
|
||||
copyrightHolder: Square, Inc.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
- 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.squareup.okio:+:+
|
||||
name: Okio
|
||||
copyrightHolder: Square, Inc.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
- 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: com.squareup.retrofit2:+:+
|
||||
name: Retrofit
|
||||
copyrightHolder: Square, Inc.
|
||||
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: org.scala-saddle:google-rfc-2445:+
|
||||
name: google-rfc-2445
|
||||
copyrightHolder: Google Inc.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://code.google.com/p/google-rfc-2445/
|
||||
- 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: com.wdullaer:materialdatetimepicker:+
|
||||
name: MaterialDateTimePicker
|
||||
copyrightHolder: Wouter Dullaert
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/wdullaer/MaterialDateTimePicker
|
||||
- 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.legacy:legacy-support-v4:+
|
||||
name: Android Support Library v4
|
||||
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.media:media:+
|
||||
name: Android Support Library media 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: com.mapbox.mapboxsdk:mapbox-sdk-geojson:+
|
||||
name: Mapbox Services SDK
|
||||
copyrightHolder: Mapbox
|
||||
license: MIT License
|
||||
licenseUrl: http://www.opensource.org/licenses/mit-license.php
|
||||
url: https://github.com/mapbox/mapbox-java
|
||||
forceGenerate: true
|
||||
- artifact: com.mapbox.mapboxsdk:mapbox-android-telemetry:+
|
||||
name: Mapbox Android Telemetry Library
|
||||
copyrightHolder: Mapbox
|
||||
license: BSD 2-Clause License
|
||||
licenseUrl: https://opensource.org/licenses/BSD-2-Clause
|
||||
url: https://github.com/mapbox/mapbox-events-android
|
||||
forceGenerate: true
|
||||
- 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: com.jakewharton:+:+
|
||||
name: Butterknife
|
||||
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/butterknife/
|
||||
- artifact: org.threeten:threetenbp:+
|
||||
name: ThreeTen backport
|
||||
copyrightHolder: Stephen Colebourne & Michael Nascimento Santos
|
||||
license: BSD 3-Clause
|
||||
licenseUrl: https://opensource.org/licenses/BSD-3-Clause
|
||||
url: https://www.threeten.org/threetenbp
|
||||
- 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.documentfile:documentfile:+
|
||||
name: Android Support Library Document File
|
||||
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.api-client:google-api-client-android:+
|
||||
name: Android Platform Extensions to the 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: 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: com.getkeepsafe.relinker:relinker:+
|
||||
name: ReLinker
|
||||
copyrightHolder: Keepsafe Software Inc.
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/KeepSafe/ReLinker
|
||||
- artifact: androidx.legacy:legacy-support-core-utils:+
|
||||
name: Android Support Library 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.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: 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: net.jcip:jcip-annotations:+
|
||||
name: Java Concurrency in Practice book annotations
|
||||
copyrightHolder: Stephen Connolly
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: http://jcip.net/
|
||||
- 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: com.fasterxml.jackson.core:jackson-core:+
|
||||
name: Jackson-core
|
||||
copyrightHolder: FasterXML
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/FasterXML/jackson-core
|
||||
- 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: androidx.print:print:+
|
||||
name: Android Support Library 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.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: The 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: Android Support Library Local Broadcast Manager
|
||||
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: com.mapbox.mapboxsdk:mapbox-sdk-core:+
|
||||
name: Mapbox Services SDK
|
||||
copyrightHolder: Mapbox
|
||||
license: MIT License
|
||||
licenseUrl: http://www.opensource.org/licenses/mit-license.php
|
||||
url: https://github.com/mapbox/mapbox-java
|
||||
forceGenerate: true
|
||||
- artifact: androidx.multidex:multidex:+
|
||||
name: Android Multi-Dex Library
|
||||
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.mapbox.mapboxsdk:mapbox-android-gestures:+
|
||||
name: Mapbox Android Gestures Library
|
||||
copyrightHolder: Mapbox
|
||||
license: BSD 2-Clause License
|
||||
licenseUrl: https://opensource.org/licenses/BSD-2-Clause
|
||||
url: https://github.com/mapbox/mapbox-gestures-android
|
||||
- artifact: com.jakewharton.threetenabp:threetenabp:+
|
||||
name: ThreeTenAbp
|
||||
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/ThreeTenABP/
|
||||
- artifact: androidx.asynclayoutinflater:asynclayoutinflater:+
|
||||
name: Android Support Library Async Layout Inflater
|
||||
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-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.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.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: androidx.slidingpanelayout:slidingpanelayout:+
|
||||
name: Android Support Library Sliding Pane 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: 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.room:room-rxjava2:+
|
||||
name: Android Room RXJava2
|
||||
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: me.saket:better-link-movement-method:+
|
||||
name: BetterLinkMovementMethod
|
||||
copyrightHolder: Saket Narayan
|
||||
license: The Apache Software License, Version 2.0
|
||||
licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
url: https://github.com/Saketme/BetterLinkMovementMethod
|
||||
- artifact: androidx.legacy:legacy-support-core-ui:+
|
||||
name: Android Support Library core 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: http://developer.android.com/tools/extras/support-library.html
|
||||
- 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: androidx.constraintlayout:constraintlayout-solver:+
|
||||
name: Android ConstraintLayout Solver
|
||||
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
|
||||
@ -0,0 +1,95 @@
|
||||
require 'rexml/document'
|
||||
|
||||
STRINGS = {}
|
||||
STRING_ARRAYS = {}
|
||||
PLURALS = {}
|
||||
|
||||
def load(path)
|
||||
file = File.new(path)
|
||||
doc = REXML::Document.new(file)
|
||||
doc.context[:attribute_quote] = :quote
|
||||
doc
|
||||
end
|
||||
|
||||
def get_items(elem)
|
||||
items = []
|
||||
elem.each_element('item') do |item|
|
||||
items << item.text
|
||||
end
|
||||
items
|
||||
end
|
||||
|
||||
def get_plurals(elem)
|
||||
plurals = {}
|
||||
elem.each_element('item') do |item|
|
||||
plurals[item.attributes['quantity']] = item.text
|
||||
end
|
||||
plurals
|
||||
end
|
||||
|
||||
def index_elements(doc)
|
||||
doc.elements['resources'].each_element('string') { |elem| STRINGS[elem.attributes['name']] = elem.text }
|
||||
doc.elements['resources'].each_element('string-array') { |elem| STRING_ARRAYS[elem.attributes['name']] = get_items(elem) }
|
||||
doc.elements['resources'].each_element('plurals') { |elem| PLURALS[elem.attributes['name']] = get_plurals(elem) }
|
||||
end
|
||||
|
||||
def find_duplicate_plurals(doc)
|
||||
dups = []
|
||||
doc.elements['resources'].each_element('plurals') do |elem|
|
||||
string_name = elem.attributes['name']
|
||||
plurals = get_plurals(elem)
|
||||
dups << string_name if plurals.eql? PLURALS[string_name]
|
||||
end
|
||||
dups
|
||||
end
|
||||
|
||||
def find_duplicate_string_arrays(doc)
|
||||
dups = []
|
||||
doc.elements['resources'].each_element('string-array') do |elem|
|
||||
string_name = elem.attributes['name']
|
||||
items = get_items(elem)
|
||||
dups << string_name if items.eql? STRING_ARRAYS[string_name]
|
||||
end
|
||||
dups
|
||||
end
|
||||
|
||||
def find_duplicate_strings(doc)
|
||||
dups = []
|
||||
doc.elements['resources'].each_element('string') do |elem|
|
||||
string_name = elem.attributes['name']
|
||||
dups << string_name if elem.text.eql? STRINGS[string_name]
|
||||
end
|
||||
dups
|
||||
end
|
||||
|
||||
def remove_items(doc, type, names)
|
||||
names.each { |name| doc.elements.delete("resources/#{type}[@name='#{name}']") }
|
||||
end
|
||||
|
||||
def clean(path)
|
||||
doc = load(path)
|
||||
remove_items(doc, 'string', find_duplicate_strings(doc))
|
||||
remove_items(doc, 'string-array', find_duplicate_string_arrays(doc))
|
||||
remove_items(doc, 'plurals', find_duplicate_plurals(doc))
|
||||
prolog, *tail = doc.to_s.split("\n").reject { |x| x.strip.eql? "" }
|
||||
File.open(path, 'w') do |f|
|
||||
f.puts prolog
|
||||
f.puts "<!-- ************************************************************** -->"
|
||||
f.puts "<!-- ********* THIS FILE IS GENERATED BY GETLOCALIZATION ********** -->"
|
||||
f.puts "<!-- ******** http://www.getlocalization.com/tasks_android ******** -->"
|
||||
f.puts "<!-- ******************* DO NOT MODIFY MANUALLY ******************* -->"
|
||||
f.puts "<!-- ************************************************************** -->"
|
||||
f.puts "<!--suppress AndroidLintTypographyEllipsis,AndroidLintTypographyDashes,AndroidLintTypos-->"
|
||||
f.print tail.join("\n")
|
||||
end
|
||||
end
|
||||
|
||||
def remove_untranslated_strings(*string_files)
|
||||
Dir.glob("src/main/res/values/strings*.xml").each { |path| index_elements(load(path)) }
|
||||
string_files.each { |path| clean path }
|
||||
end
|
||||
|
||||
if __FILE__ == $0
|
||||
lang = ARGV[0]
|
||||
remove_untranslated_strings("src/main/res/values-#{lang}/strings.xml")
|
||||
end
|
||||
@ -0,0 +1,153 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
require 'fileutils'
|
||||
|
||||
$:.unshift File.dirname(__FILE__)
|
||||
require 'clean_translations'
|
||||
|
||||
# Script for invoking the GetLocalization tools
|
||||
# IMPORTANT: Right now, must be invoked from the project's root directory.
|
||||
# Usage: ./bin/getloc.rb [cmd] [lang]
|
||||
# cmd: 'export' or 'import'
|
||||
|
||||
# lang: Language code or 'master'
|
||||
|
||||
PROJECT_NAME='tasks_android'
|
||||
LANGUAGE_MAP = {
|
||||
"el" => "grk",
|
||||
"sk" => "sk-SK",
|
||||
"hu" => "hu-HU",
|
||||
"fa" => "pes-IR"
|
||||
}
|
||||
|
||||
# Converts astrid language codes to GetLocalization language codes (which don't use -r)
|
||||
def astrid_code_to_getloc_code(lang)
|
||||
(LANGUAGE_MAP[lang] || lang).sub("-r", "-")
|
||||
end
|
||||
|
||||
# Inverse of the above function
|
||||
def getloc_code_to_astrid_code(lang)
|
||||
(LANGUAGE_MAP.invert[lang] || lang).sub("-", "-r")
|
||||
end
|
||||
|
||||
# Uploads files for the specified language to GetLocalization
|
||||
# tmp_files (Array): temporary strings files to use
|
||||
# lang (String): language code
|
||||
# src_files_block (lambda): Block for computing the source file list from the language code
|
||||
def export(tmp_files, lang, src_files_block)
|
||||
src_files = src_files_block.call(lang)
|
||||
for i in 0...tmp_files.length
|
||||
%x(cp #{src_files[i]} #{tmp_files[i]}) if src_files[i] != tmp_files[i]
|
||||
end
|
||||
|
||||
tmp_files.each do |f|
|
||||
%x(gsed -i "s/\\\\\\'/'/g" #{f})
|
||||
end
|
||||
|
||||
if lang == "master"
|
||||
tmp_files.each do |f|
|
||||
puts "Updating master file #{f}"
|
||||
%x(curl --form file=@#{f} --user "#{@user}:#{@password}" https://api.getlocalization.com/#{PROJECT_NAME}/api/update-master/)
|
||||
end
|
||||
else
|
||||
raise "dont do this if you already exported your translations"
|
||||
lang_tmp = astrid_code_to_getloc_code(lang)
|
||||
tmp_files.each do |f|
|
||||
puts "Updating language file #{f}"
|
||||
name = File.basename(f)
|
||||
%x(curl --form file=@#{f} --user "#{@user}:#{@password}" https://api.getlocalization.com/#{PROJECT_NAME}/api/translations/file/#{name}/#{lang_tmp}/)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Downloads and imports files for the specified language
|
||||
# tmp_files (Array): temporary strings files to use
|
||||
# lang (String): language code
|
||||
# dst_files_block (lambda): Block for computing the destination files list from the language code
|
||||
def import(tmp_files, lang, dst_files_block)
|
||||
if lang == "master"
|
||||
tmp_dir = File.dirname(tmp_files[0])
|
||||
tmp_all = File.join(tmp_dir, "all.zip")
|
||||
tmp_all_dir = File.join(tmp_dir, "all")
|
||||
|
||||
%x(curl --user "#{@user}:#{@password}" https://api.getlocalization.com/#{PROJECT_NAME}/api/translations/zip/ -o #{tmp_all})
|
||||
%x(mkdir #{tmp_all_dir})
|
||||
%x(tar xzf #{tmp_all} -C #{tmp_all_dir})
|
||||
|
||||
# Get all translations
|
||||
Dir.foreach(tmp_all_dir) do |l|
|
||||
if (l != "." && l != "..")
|
||||
lang_local = getloc_code_to_astrid_code(l)
|
||||
dst_files = dst_files_block.call(lang_local)
|
||||
|
||||
for i in 0...tmp_files.length
|
||||
file = File.join(tmp_all_dir, l, File.basename(tmp_files[i]))
|
||||
%x(gsed -i "s/\\([^\\\\\\]\\)'/\\1\\\\\\'/g" #{file})
|
||||
puts "Moving #{file} to #{dst_files[i]}"
|
||||
%x(mv #{file} #{dst_files[i]})
|
||||
end
|
||||
end
|
||||
end
|
||||
%x(rm -rf #{tmp_all_dir})
|
||||
%x(rm #{tmp_all})
|
||||
else
|
||||
lang_tmp = astrid_code_to_getloc_code(lang)
|
||||
dst_files = dst_files_block.call(lang)
|
||||
for i in 0...tmp_files.length
|
||||
name = File.basename(tmp_files[i])
|
||||
%x(curl --user "#{@user}:#{@password}" https://api.getlocalization.com/#{PROJECT_NAME}/api/translations/file/#{name}/#{lang_tmp}/ -o #{tmp_files[i]})
|
||||
%x(gsed -i "s/\\([^\\\\\\]\\)'/\\1\\\\\\'/g" #{tmp_files[i]})
|
||||
`gsed -i '/\s*<!--.*-->\s*$/d' #{tmp_files[i]}` # strip comments
|
||||
puts "Moving #{tmp_files[i]} to #{dst_files[i]}"
|
||||
%x(mv #{tmp_files[i]} #{dst_files[i]})
|
||||
end
|
||||
remove_untranslated_strings(*dst_files)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class Android
|
||||
def self.tmp_files
|
||||
FileUtils.mkdir_p "translations"
|
||||
["translations/strings.xml"]
|
||||
end
|
||||
|
||||
def self.src_files(cmd, type)
|
||||
if cmd == :export && type == "master"
|
||||
lambda { |l| ["src/main/res/values/strings.xml"] }
|
||||
else
|
||||
lambda { |l| ["src/main/res/values-#{l}/strings.xml"] }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Main function for invoking the GetLocalization tools
|
||||
# cmd (String): Command to invoke. Must be 'import' or 'export'
|
||||
# lang (String): Language code. Can also be 'master' to specify master files for export or all languages for import.
|
||||
def getloc(cmd, languages)
|
||||
cmd = cmd.to_sym
|
||||
|
||||
raise "must set GETLOC_USER and GETLOC_PASS environment variables" if ENV['GETLOC_USER'].nil? or ENV['GETLOC_PASS'].nil?
|
||||
@user = ENV['GETLOC_USER']
|
||||
@password = ENV['GETLOC_PASS']
|
||||
platform_class = Android
|
||||
languages.split(',').each do |lang|
|
||||
case cmd
|
||||
when :export
|
||||
puts "Exporting #{lang} files"
|
||||
export(platform_class.tmp_files, lang, platform_class.src_files(cmd, lang))
|
||||
when :import
|
||||
puts "Importing #{lang} files"
|
||||
import(platform_class.tmp_files, lang, platform_class.src_files(cmd, lang))
|
||||
else
|
||||
puts "Command #{cmd} not recognized. Should be one of 'export' or 'import'."
|
||||
return
|
||||
end
|
||||
|
||||
platform_class.tmp_files.each do |f|
|
||||
%x(rm -f #{f})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
getloc(*ARGV)
|
||||
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="org.tasks">
|
||||
|
||||
<application tools:ignore="GoogleAppIndexingWarning">
|
||||
<receiver
|
||||
android:name="com.amazon.device.iap.ResponseReceiver"
|
||||
android:permission="com.amazon.inapp.purchasing.Permission.NOTIFY">
|
||||
<intent-filter>
|
||||
<action android:name="com.amazon.inapp.purchasing.NOTIFY"/>
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
@ -0,0 +1,11 @@
|
||||
package org.tasks;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
public class FlavorSetup {
|
||||
|
||||
@Inject
|
||||
public FlavorSetup() {}
|
||||
|
||||
public void setup() {}
|
||||
}
|
||||
@ -0,0 +1,65 @@
|
||||
package org.tasks.analytics;
|
||||
|
||||
import android.content.Context;
|
||||
import com.crashlytics.android.Crashlytics;
|
||||
import com.google.firebase.analytics.FirebaseAnalytics;
|
||||
import io.fabric.sdk.android.Fabric;
|
||||
import javax.inject.Inject;
|
||||
import org.tasks.injection.ApplicationScope;
|
||||
import org.tasks.injection.ForApplication;
|
||||
import org.tasks.preferences.Preferences;
|
||||
import timber.log.Timber;
|
||||
|
||||
@ApplicationScope
|
||||
public class Tracker {
|
||||
|
||||
private static boolean enabled;
|
||||
|
||||
private final FirebaseAnalytics analytics;
|
||||
private final Context context;
|
||||
|
||||
@Inject
|
||||
public Tracker(@ForApplication Context context, Preferences preferences) {
|
||||
this.context = context;
|
||||
enabled = preferences.isTrackingEnabled();
|
||||
if (enabled) {
|
||||
analytics = FirebaseAnalytics.getInstance(context);
|
||||
Fabric.with(context, new Crashlytics());
|
||||
} else {
|
||||
analytics = null;
|
||||
}
|
||||
}
|
||||
|
||||
public static void report(Throwable t) {
|
||||
Timber.e(t);
|
||||
if (enabled) {
|
||||
Crashlytics.logException(t);
|
||||
}
|
||||
}
|
||||
|
||||
public void reportException(Throwable t) {
|
||||
report(t);
|
||||
}
|
||||
|
||||
public void reportEvent(Tracking.Events event) {
|
||||
reportEvent(event, null);
|
||||
}
|
||||
|
||||
public void reportEvent(Tracking.Events event, String label) {
|
||||
reportEvent(event, event.action, label);
|
||||
}
|
||||
|
||||
public void reportEvent(Tracking.Events event, int action, String label) {
|
||||
reportEvent(event, context.getString(action), label);
|
||||
}
|
||||
|
||||
public void reportEvent(Tracking.Events event, String action, String label) {
|
||||
reportEvent(event.category, action, label);
|
||||
}
|
||||
|
||||
private void reportEvent(int categoryRes, String action, String label) {
|
||||
if (!enabled) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,103 @@
|
||||
package org.tasks.billing;
|
||||
|
||||
import static com.google.common.collect.Iterables.transform;
|
||||
import static com.google.common.collect.Lists.newArrayList;
|
||||
import static com.google.common.collect.Lists.transform;
|
||||
import static com.google.common.collect.Sets.newHashSet;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import androidx.lifecycle.LifecycleOwner;
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
import androidx.lifecycle.Observer;
|
||||
import com.amazon.device.iap.PurchasingListener;
|
||||
import com.amazon.device.iap.PurchasingService;
|
||||
import com.amazon.device.iap.model.FulfillmentResult;
|
||||
import com.amazon.device.iap.model.ProductDataResponse;
|
||||
import com.amazon.device.iap.model.PurchaseResponse;
|
||||
import com.amazon.device.iap.model.PurchaseUpdatesResponse;
|
||||
import com.amazon.device.iap.model.PurchaseUpdatesResponse.RequestStatus;
|
||||
import com.amazon.device.iap.model.UserDataResponse;
|
||||
import java.util.List;
|
||||
import javax.inject.Inject;
|
||||
import org.tasks.analytics.Tracker;
|
||||
import org.tasks.injection.ForApplication;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class BillingClientImpl implements BillingClient, PurchasingListener {
|
||||
|
||||
private final MutableLiveData<List<SkuDetails>> skuDetails = new MutableLiveData<>();
|
||||
private final Inventory inventory;
|
||||
|
||||
@Inject
|
||||
public BillingClientImpl(@ForApplication Context context, Inventory inventory, Tracker tracker) {
|
||||
this.inventory = inventory;
|
||||
PurchasingService.registerListener(context, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void observeSkuDetails(
|
||||
LifecycleOwner owner,
|
||||
Observer<List<SkuDetails>> subscriptionObserver,
|
||||
Observer<List<SkuDetails>> iapObserver) {
|
||||
skuDetails.observe(owner, subscriptionObserver);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void queryPurchases() {
|
||||
PurchasingService.getPurchaseUpdates(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void querySkuDetails() {
|
||||
PurchasingService.getProductData(newHashSet(SkuDetails.SKU_PRO));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void consume(String sku) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initiatePurchaseFlow(Activity activity, String sku, String skuType) {
|
||||
PurchasingService.purchase(sku);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getErrorMessage() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserDataResponse(UserDataResponse userDataResponse) {
|
||||
Timber.d("onUserDataResponse(%s)", userDataResponse);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProductDataResponse(ProductDataResponse productDataResponse) {
|
||||
Timber.d("onProductDataResponse(%s)", productDataResponse);
|
||||
if (productDataResponse.getRequestStatus() == ProductDataResponse.RequestStatus.SUCCESSFUL) {
|
||||
skuDetails.setValue(
|
||||
newArrayList(transform(productDataResponse.getProductData().values(), SkuDetails::new)));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPurchaseResponse(PurchaseResponse purchaseResponse) {
|
||||
Timber.d("onPurchaseResponse(%s)", purchaseResponse);
|
||||
if (purchaseResponse.getRequestStatus() == PurchaseResponse.RequestStatus.SUCCESSFUL) {
|
||||
inventory.add(new Purchase(purchaseResponse.getReceipt()));
|
||||
PurchasingService.notifyFulfillment(
|
||||
purchaseResponse.getReceipt().getReceiptId(), FulfillmentResult.FULFILLED);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPurchaseUpdatesResponse(PurchaseUpdatesResponse purchaseUpdatesResponse) {
|
||||
Timber.d("onPurchaseUpdatesResponse(%s)", purchaseUpdatesResponse);
|
||||
if (purchaseUpdatesResponse.getRequestStatus() == RequestStatus.SUCCESSFUL) {
|
||||
inventory.clear();
|
||||
inventory.add(transform(purchaseUpdatesResponse.getReceipts(), Purchase::new));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,30 @@
|
||||
package org.tasks.billing;
|
||||
|
||||
import com.amazon.device.iap.model.Receipt;
|
||||
import com.google.gson.GsonBuilder;
|
||||
|
||||
public class Purchase {
|
||||
|
||||
private final Receipt receipt;
|
||||
|
||||
public Purchase(String json) {
|
||||
this(new GsonBuilder().create().fromJson(json, Receipt.class));
|
||||
}
|
||||
|
||||
public Purchase(Receipt receipt) {
|
||||
this.receipt = receipt;
|
||||
}
|
||||
|
||||
public String getSku() {
|
||||
return receipt.getSku();
|
||||
}
|
||||
|
||||
public String toJson() {
|
||||
return new GsonBuilder().create().toJson(receipt);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Purchase{" + "receipt=" + receipt + '}';
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
package org.tasks.billing;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
public class SignatureVerifier {
|
||||
@Inject
|
||||
public SignatureVerifier() {}
|
||||
|
||||
public boolean verifySignature(Purchase purchase) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
package org.tasks.billing;
|
||||
|
||||
import com.amazon.device.iap.model.Product;
|
||||
import com.amazon.device.iap.model.ProductType;
|
||||
|
||||
public class SkuDetails {
|
||||
|
||||
static final String SKU_PRO = "tasks_pro";
|
||||
|
||||
static final String TYPE_INAPP = ProductType.CONSUMABLE.name();
|
||||
static final String TYPE_SUBS = ProductType.SUBSCRIPTION.name();
|
||||
|
||||
private final Product product;
|
||||
|
||||
public SkuDetails(Product product) {
|
||||
this.product = product;
|
||||
}
|
||||
|
||||
public String getSku() {
|
||||
return product.getSku();
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return product.getTitle();
|
||||
}
|
||||
|
||||
public String getPrice() {
|
||||
return product.getPrice();
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return product.getDescription();
|
||||
}
|
||||
|
||||
public String getSkuType() {
|
||||
return product.getProductType().name();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
package org.tasks.gtasks;
|
||||
|
||||
import android.accounts.Account;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import javax.inject.Inject;
|
||||
|
||||
public class GoogleAccountManager {
|
||||
|
||||
@Inject
|
||||
public GoogleAccountManager() {}
|
||||
|
||||
public List<String> getAccounts() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
private List<Account> getAccountList() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
public Account getAccount(final String name) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,40 @@
|
||||
package org.tasks.gtasks;
|
||||
|
||||
import android.app.Activity;
|
||||
import com.todoroo.astrid.activity.MainActivity;
|
||||
import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.disposables.Disposables;
|
||||
import javax.inject.Inject;
|
||||
import org.tasks.drive.DriveLoginActivity;
|
||||
import org.tasks.play.AuthResultHandler;
|
||||
|
||||
public class PlayServices {
|
||||
|
||||
@Inject
|
||||
public PlayServices() {}
|
||||
|
||||
public boolean isPlayServicesAvailable() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean refreshAndCheck() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public void resolve(Activity activity) {}
|
||||
|
||||
public String getStatus() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void getDriveAuthToken(
|
||||
DriveLoginActivity driveLoginActivity, String a, AuthResultHandler authResultHandler) {}
|
||||
|
||||
public Disposable check(MainActivity mainActivity) {
|
||||
return Disposables.empty();
|
||||
}
|
||||
|
||||
public void getTasksAuthToken(
|
||||
GtasksLoginActivity gtasksLoginActivity, String a, AuthResultHandler authResultHandler) {}
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
package org.tasks.injection;
|
||||
|
||||
import android.content.Context;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import org.tasks.location.MapFragment;
|
||||
import org.tasks.location.MapboxMapFragment;
|
||||
import org.tasks.location.MapboxSearchProvider;
|
||||
import org.tasks.location.PlaceSearchProvider;
|
||||
|
||||
@Module
|
||||
public class LocationModule {
|
||||
@Provides
|
||||
@ActivityScope
|
||||
public PlaceSearchProvider getPlaceSearchProvider(@ForApplication Context context) {
|
||||
return new MapboxSearchProvider(context);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@ActivityScope
|
||||
public MapFragment getMapFragment(@ForApplication Context context) {
|
||||
return new MapboxMapFragment(context);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
package org.tasks.location;
|
||||
|
||||
import java.util.List;
|
||||
import javax.inject.Inject;
|
||||
import org.tasks.data.Location;
|
||||
|
||||
@SuppressWarnings("EmptyMethod")
|
||||
public class GeofenceApi {
|
||||
|
||||
@Inject
|
||||
public GeofenceApi() {}
|
||||
|
||||
public void register(List<Location> activeGeofences) {}
|
||||
|
||||
public void cancel(Location geofence) {}
|
||||
|
||||
public void cancel(List<Location> geofences) {}
|
||||
|
||||
public void cancel(long taskId) {}
|
||||
|
||||
public void register(long taskId) {}
|
||||
|
||||
public void registerAll() {}
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
package org.tasks.location;
|
||||
|
||||
public class GeofenceTransitionsIntentService {}
|
||||
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string-array name="pro_description">
|
||||
<item>@string/themes</item>
|
||||
<item>@string/pro_caldav_sync</item>
|
||||
<item>@string/pro_tasker_plugins</item>
|
||||
<item>@string/pro_dashclock_extension</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<bool name="support_geofences">false</bool>
|
||||
</resources>
|
||||
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="sku_themes">themes</string>
|
||||
<string name="common_google_play_services_notification_ticker">Google Play services error</string>
|
||||
<string name="market_url">amzn://apps/android?p=org.tasks</string>
|
||||
<string name="p_purchases">purchases_amazon</string>
|
||||
<string name="manage_subscription_url">https://www.amazon.com/gp/mas/your-account/myapps/yoursubscriptions/ref=d2_ss_app_sb_myas</string>
|
||||
</resources>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue