Compare commits

...

97 Commits

Author SHA1 Message Date
Jakub Kalinowski
25a3509988 Reimplementing the multiple popups handling in the new popup solution. 2022-08-13 14:39:01 +02:00
0eae43fe55 Fix "enter" notification action on API 31 2022-08-11 05:17:41 -05:00
c0fcd4e763 Update CHANGELOG 2022-08-11 04:08:22 -05:00
79e2402c9d Merge pull request #1425 from eduebernal/freq-display-normal
fix marker scaling in frequency display
2022-08-11 04:04:29 -05:00
53c270ee12 Merge branch 'number-popup' into release/2.1.0 2022-07-30 16:41:05 -05:00
e4b16f6d59 Replace PopupWindow by Dialog
Fixes issues with copy & paste, text selection and spell checking.
2022-07-30 16:33:16 -05:00
3021e408a7 Remove unused imports 2022-07-24 06:01:40 -05:00
7649119db7 Popup: Do not save on dismiss 2022-07-24 05:47:52 -05:00
b0a4f26e7a Popup: Fix crash on suggestions 2022-07-24 05:47:52 -05:00
0a95b6d2a0 GitHub Actions: Use self-hosted runner 2022-05-16 22:53:35 -05:00
e6bcbb39ff GitHub Actions: Enable AVD cache 2022-05-16 15:26:57 -05:00
90de1f3723 GitHub Actions: Implement emulator boot timeout 2022-05-15 10:42:07 -05:00
68740b4043 SettingsFragment: Minor changes to theme 2022-05-15 09:23:47 -05:00
b66a6ff717 Write release notes 2022-05-15 00:33:36 -05:00
7c1a91e35a Update list of translators 2022-05-15 00:23:27 -05:00
366e9af167 Update translations 2022-05-15 00:15:56 -05:00
03b02aaa06 Merge branch 'number-popup' into release/2.1.0 2022-05-14 23:22:28 -05:00
Quentin Hibon
180cf25ad3 Fix tests in APIs 30, 31 2022-05-14 17:19:53 -05:00
3490cd183a GitHub Actions: Re-run only failed tests; warn about slow tests 2022-05-14 08:45:24 -05:00
Quentin Hibon
0c292d1eaa Make some rendering tests more tolerant 2022-05-13 11:57:54 -05:00
0b256cb2c0 GitHub Actions: Enable API 30, 31; drop some older ones 2022-05-13 11:19:05 -05:00
cc03c48648 TargetCard: Make target more accurate for non-daily habits 2022-05-13 09:53:27 -05:00
53e7ef2918 LoopDBImporter: Improve performance; silence snackbar messages 2022-05-13 08:33:00 -05:00
9609bee0f7 Update CHANGELOG and list of developers 2022-05-13 08:33:00 -05:00
5b23a3f960 Bump version to 2.1.0 2022-05-13 08:33:00 -05:00
d2d45991b0 Always show popups at the center of the screen; remove ScreenLocation 2022-05-13 06:37:41 -05:00
25aeafb759 Remove unused imports 2022-05-13 05:21:29 -05:00
9045ae5c24 Remove previous NumberPicker 2022-05-13 05:21:29 -05:00
555873354c Use NumberPopup in HistoryCard 2022-05-13 05:21:29 -05:00
2a012619a7 Use NumberPopup in widgets 2022-05-13 05:21:28 -05:00
d1de3a852b Implement NumberPopup 2022-05-13 05:21:28 -05:00
f04e37e905 Remove CheckmarkDialog 2022-05-03 04:09:13 -05:00
825a5f2cb9 Implement CheckmarkPopup 2022-05-03 04:09:13 -05:00
0de6896691 Add notes to DelayedToggle, make delay skipable 2022-05-03 04:09:13 -05:00
7187214282 Replace notesIndicator by notes 2022-05-03 04:09:13 -05:00
Jakub Kalinowski
9d4161a255 Issue 1332: Multiple numeric dialogs appearing (#1356)
Co-authored-by: Jakub Kalinowski <kalj@netcompany.com>
2022-05-01 20:01:13 -05:00
dependabot[bot]
d82a3c145d Bump kotlin-stdlib-jdk8 from 1.6.10 to 1.6.21
Bumps [kotlin-stdlib-jdk8](https://github.com/JetBrains/kotlin) from 1.6.10 to 1.6.21.
- [Release notes](https://github.com/JetBrains/kotlin/releases)
- [Changelog](https://github.com/JetBrains/kotlin/blob/v1.6.21/ChangeLog.md)
- [Commits](https://github.com/JetBrains/kotlin/compare/v1.6.10...v1.6.21)

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlin:kotlin-stdlib-jdk8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-01 23:14:37 +02:00
dependabot[bot]
a6cbd44e42 Bump kotlinx-coroutines-core-jvm from 1.6.0 to 1.6.1
Bumps [kotlinx-coroutines-core-jvm](https://github.com/Kotlin/kotlinx.coroutines) from 1.6.0 to 1.6.1.
- [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases)
- [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md)
- [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.0...1.6.1)

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-01 23:14:28 +02:00
dependabot[bot]
45c62b4ab2 Bump kxCoroutinesVersion from 1.6.0 to 1.6.1
Bumps `kxCoroutinesVersion` from 1.6.0 to 1.6.1.

Updates `kotlinx-coroutines-android` from 1.6.0 to 1.6.1
- [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases)
- [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md)
- [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.0...1.6.1)

Updates `kotlinx-coroutines-core` from 1.6.0 to 1.6.1
- [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases)
- [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md)
- [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.0...1.6.1)

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-android
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-01 19:44:14 +02:00
dependabot[bot]
d53312d261 Bump kotlin-stdlib from 1.6.10 to 1.6.21
Bumps [kotlin-stdlib](https://github.com/JetBrains/kotlin) from 1.6.10 to 1.6.21.
- [Release notes](https://github.com/JetBrains/kotlin/releases)
- [Changelog](https://github.com/JetBrains/kotlin/blob/v1.6.21/ChangeLog.md)
- [Commits](https://github.com/JetBrains/kotlin/compare/v1.6.10...v1.6.21)

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlin:kotlin-stdlib
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-01 19:43:58 +02:00
Quentin Hibon
c453810785 Resort habit list after habit edit (#1350)
* Add regression test for #1131
* Resort habit list after habit edit

Fixes #1131.
2022-04-21 11:29:42 -05:00
Quentin Hibon
999057300b Bump kotlin from 1.5.0 to 1.6.10 (#1349) 2022-04-15 15:40:36 -05:00
Quentin Hibon
2245347e28 Clean up SDK_INT branches (#1348)
Fixes #1347.
2022-04-15 09:34:43 -05:00
Kürşad Bumin Giray Saka
b79f7850ed Add archive actions if there are archived habits (#1345) 2022-04-11 20:50:44 -05:00
dependabot[bot]
4469f86e46 Bump logback-classic from 1.2.10 to 1.2.11
Bumps logback-classic from 1.2.10 to 1.2.11.

---
updated-dependencies:
- dependency-name: ch.qos.logback:logback-classic
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-01 21:44:03 +02:00
dependabot[bot]
bdeddb149e Bump ktorVersion from 1.6.7 to 1.6.8
Bumps `ktorVersion` from 1.6.7 to 1.6.8.

Updates `ktor-client-mock` from 1.6.7 to 1.6.8
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/1.6.7...1.6.8)

Updates `ktor-jackson` from 1.6.7 to 1.6.8
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/1.6.7...1.6.8)

Updates `ktor-client-android` from 1.6.7 to 1.6.8
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/1.6.7...1.6.8)

Updates `ktor-client-core` from 1.6.7 to 1.6.8
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/1.6.7...1.6.8)

Updates `ktor-client-jackson` from 1.6.7 to 1.6.8
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/1.6.7...1.6.8)

Updates `ktor-client-json` from 1.6.7 to 1.6.8
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/1.6.7...1.6.8)

Updates `ktor-server-netty` from 1.6.7 to 1.6.8
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/1.6.7...1.6.8)

Updates `ktor-server-core` from 1.6.7 to 1.6.8
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/1.6.7...1.6.8)

Updates `ktor-html-builder` from 1.6.7 to 1.6.8
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/1.6.7...1.6.8)

Updates `ktor-server-tests` from 1.6.7 to 1.6.8
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/1.6.7...1.6.8)

---
updated-dependencies:
- dependency-name: io.ktor:ktor-client-mock
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.ktor:ktor-jackson
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.ktor:ktor-client-android
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.ktor:ktor-client-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.ktor:ktor-client-jackson
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.ktor:ktor-client-json
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.ktor:ktor-server-netty
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.ktor:ktor-server-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.ktor:ktor-html-builder
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.ktor:ktor-server-tests
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-01 21:43:45 +02:00
Jakub Kalinowski
3b12ec4bfe Issue 1316: Skip measurable habit (#1319)
Co-authored-by: Jakub Kalinowski <kalj@netcompany.com>
2022-03-24 06:08:31 -05:00
ca4618579e Reduce toggle delay 2022-03-20 18:55:19 -05:00
2f13aba22c CheckmarkButtonView: Make focusable 2022-03-20 18:55:19 -05:00
dba5912ecd Remove leading/trailing whitespace from notes 2022-03-20 18:55:18 -05:00
88b8663484 Remove pref_led_notifications 2022-03-20 18:55:18 -05:00
609886fd09 Fix iOS build scripts 2022-03-20 11:14:53 -05:00
a4db997e06 Merge pull request #1314 from kalina559/feature/case_1282_calendar_bug
Fixed edit history calendar bug
2022-03-10 06:05:04 -06:00
Jakub Kalinowski
090216ccb7 Fixed edit history calendar bug 2022-03-05 19:54:48 +01:00
dependabot[bot]
472092d1bf Bump simpleclient from 0.14.1 to 0.15.0
Bumps [simpleclient](https://github.com/prometheus/client_java) from 0.14.1 to 0.15.0.
- [Release notes](https://github.com/prometheus/client_java/releases)
- [Commits](https://github.com/prometheus/client_java/compare/parent-0.14.1...parent-0.15.0)

---
updated-dependencies:
- dependency-name: io.prometheus:simpleclient
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-01 21:14:31 +01:00
dependabot[bot]
6d3791de31 Bump daggerVersion from 2.40.5 to 2.41
Bumps `daggerVersion` from 2.40.5 to 2.41.

Updates `dagger` from 2.40.5 to 2.41
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.40.5...dagger-2.41)

Updates `dagger-compiler` from 2.40.5 to 2.41
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.40.5...dagger-2.41)

---
updated-dependencies:
- dependency-name: com.google.dagger:dagger
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.google.dagger:dagger-compiler
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-01 18:17:46 +01:00
dependabot[bot]
24a99d5791 Bump simpleclient_httpserver from 0.14.1 to 0.15.0
Bumps [simpleclient_httpserver](https://github.com/prometheus/client_java) from 0.14.1 to 0.15.0.
- [Release notes](https://github.com/prometheus/client_java/releases)
- [Commits](https://github.com/prometheus/client_java/compare/parent-0.14.1...parent-0.15.0)

---
updated-dependencies:
- dependency-name: io.prometheus:simpleclient_httpserver
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-01 18:17:39 +01:00
dependabot[bot]
6c631b1cf6 Bump opencsv from 5.5.2 to 5.6
Bumps opencsv from 5.5.2 to 5.6.

---
updated-dependencies:
- dependency-name: com.opencsv:opencsv
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-01 10:11:09 +01:00
dependabot[bot]
5d7677b354 Bump guava from 31.0.1-android to 31.1-android
Bumps [guava](https://github.com/google/guava) from 31.0.1-android to 31.1-android.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-01 10:05:35 +01:00
dependabot[bot]
22820f4f24 Bump simpleclient_hotspot from 0.14.1 to 0.15.0
Bumps [simpleclient_hotspot](https://github.com/prometheus/client_java) from 0.14.1 to 0.15.0.
- [Release notes](https://github.com/prometheus/client_java/releases)
- [Commits](https://github.com/prometheus/client_java/compare/parent-0.14.1...parent-0.15.0)

---
updated-dependencies:
- dependency-name: io.prometheus:simpleclient_hotspot
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-01 10:05:09 +01:00
1d3bd48535 Merge pull request #1278 from hiqua/fix_habit_bull_numerical
Handle numerical habits from HabitBull
2022-02-02 03:08:30 -06:00
dependabot[bot]
694446b7e3 Bump appcompat from 1.4.0 to 1.4.1
Bumps appcompat from 1.4.0 to 1.4.1.

---
updated-dependencies:
- dependency-name: androidx.appcompat:appcompat
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-01 12:13:14 +01:00
dependabot[bot]
20ae9d247e Bump material from 1.4.0 to 1.5.0
Bumps [material](https://github.com/material-components/material-components-android) from 1.4.0 to 1.5.0.
- [Release notes](https://github.com/material-components/material-components-android/releases)
- [Commits](https://github.com/material-components/material-components-android/compare/1.4.0...1.5.0)

---
updated-dependencies:
- dependency-name: com.google.android.material:material
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-01 10:39:54 +01:00
dependabot[bot]
1943fac610 Bump AppIntro from 6.1.0 to 6.2.0
Bumps [AppIntro](https://github.com/AppIntro/AppIntro) from 6.1.0 to 6.2.0.
- [Release notes](https://github.com/AppIntro/AppIntro/releases)
- [Changelog](https://github.com/AppIntro/AppIntro/blob/main/CHANGELOG.md)
- [Commits](https://github.com/AppIntro/AppIntro/compare/6.1.0...6.2.0)

---
updated-dependencies:
- dependency-name: com.github.AppIntro:AppIntro
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-01 10:39:47 +01:00
Quentin Hibon
a07a50e635 Handle numerical habits from HabitBull
Fixes #1265.
2022-01-27 20:33:17 +01:00
Quentin Hibon
8ccb9bbab1 Bumps appcompat from 1.3.1 to 1.4.0. 2022-01-09 07:21:12 +01:00
Quentin Hibon
743b8d26ad gradle.properties: remove deprecated MaxPermSize parameter 2022-01-08 22:49:40 +01:00
dependabot[bot]
c47bd4c328 Bump kotlin-stdlib-jdk8 from 1.6.0 to 1.6.10
Bumps [kotlin-stdlib-jdk8](https://github.com/JetBrains/kotlin) from 1.6.0 to 1.6.10.
- [Release notes](https://github.com/JetBrains/kotlin/releases)
- [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md)
- [Commits](https://github.com/JetBrains/kotlin/compare/v1.6.0...v1.6.10)

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlin:kotlin-stdlib-jdk8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-05 10:03:59 +01:00
dependabot[bot]
d84abc3a6a Bump com.github.johnrengelman.shadow from 7.1.0 to 7.1.2
Bumps com.github.johnrengelman.shadow from 7.1.0 to 7.1.2.

---
updated-dependencies:
- dependency-name: com.github.johnrengelman.shadow
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-05 10:03:52 +01:00
dependabot[bot]
4ae85f1ec0 Bump kotlin-stdlib from 1.6.0 to 1.6.10
Bumps [kotlin-stdlib](https://github.com/JetBrains/kotlin) from 1.6.0 to 1.6.10.
- [Release notes](https://github.com/JetBrains/kotlin/releases)
- [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md)
- [Commits](https://github.com/JetBrains/kotlin/compare/v1.6.0...v1.6.10)

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlin:kotlin-stdlib
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-05 10:03:44 +01:00
dependabot[bot]
79d40d1d79 Bump simpleclient_hotspot from 0.12.0 to 0.14.1
Bumps [simpleclient_hotspot](https://github.com/prometheus/client_java) from 0.12.0 to 0.14.1.
- [Release notes](https://github.com/prometheus/client_java/releases)
- [Commits](https://github.com/prometheus/client_java/compare/parent-0.12.0...parent-0.14.1)

---
updated-dependencies:
- dependency-name: io.prometheus:simpleclient_hotspot
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-04 19:04:33 +01:00
dependabot[bot]
1902b8821e Bump kxCoroutinesVersion from 1.5.2 to 1.6.0
Bumps `kxCoroutinesVersion` from 1.5.2 to 1.6.0.

Updates `kotlinx-coroutines-android` from 1.5.2 to 1.6.0
- [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases)
- [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md)
- [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.5.2...1.6.0)

Updates `kotlinx-coroutines-core` from 1.5.2 to 1.6.0
- [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases)
- [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md)
- [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.5.2...1.6.0)

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-android
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-04 19:04:22 +01:00
dependabot[bot]
075542d605 Bump org.jlleitschuh.gradle.ktlint from 10.2.0 to 10.2.1
Bumps org.jlleitschuh.gradle.ktlint from 10.2.0 to 10.2.1.

---
updated-dependencies:
- dependency-name: org.jlleitschuh.gradle.ktlint
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-04 19:04:16 +01:00
dependabot[bot]
0b5894ee6d Bump daggerVersion from 2.40.3 to 2.40.5
Bumps `daggerVersion` from 2.40.3 to 2.40.5.

Updates `dagger` from 2.40.3 to 2.40.5
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.40.3...dagger-2.40.5)

Updates `dagger-compiler` from 2.40.3 to 2.40.5
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.40.3...dagger-2.40.5)

---
updated-dependencies:
- dependency-name: com.google.dagger:dagger
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.google.dagger:dagger-compiler
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-03 22:49:41 +01:00
dependabot[bot]
92fb9dbdb6 Bump simpleclient_httpserver from 0.12.0 to 0.14.1
Bumps [simpleclient_httpserver](https://github.com/prometheus/client_java) from 0.12.0 to 0.14.1.
- [Release notes](https://github.com/prometheus/client_java/releases)
- [Commits](https://github.com/prometheus/client_java/compare/parent-0.12.0...parent-0.14.1)

---
updated-dependencies:
- dependency-name: io.prometheus:simpleclient_httpserver
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-03 22:49:29 +01:00
dependabot[bot]
1860abf532 Bump kotlinx-coroutines-core-jvm from 1.5.2 to 1.6.0
Bumps [kotlinx-coroutines-core-jvm](https://github.com/Kotlin/kotlinx.coroutines) from 1.5.2 to 1.6.0.
- [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases)
- [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md)
- [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.5.2...1.6.0)

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-02 21:42:17 +01:00
dependabot[bot]
3f4780c9fb Bump ktorVersion from 1.6.6 to 1.6.7
Bumps `ktorVersion` from 1.6.6 to 1.6.7.

Updates `ktor-client-mock` from 1.6.6 to 1.6.7
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/1.6.6...1.6.7)

Updates `ktor-jackson` from 1.6.6 to 1.6.7
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/1.6.6...1.6.7)

Updates `ktor-client-android` from 1.6.6 to 1.6.7
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/1.6.6...1.6.7)

Updates `ktor-client-core` from 1.6.6 to 1.6.7
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/1.6.6...1.6.7)

Updates `ktor-client-jackson` from 1.6.6 to 1.6.7
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/1.6.6...1.6.7)

Updates `ktor-client-json` from 1.6.6 to 1.6.7
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/1.6.6...1.6.7)

Updates `ktor-server-netty` from 1.6.6 to 1.6.7
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/1.6.6...1.6.7)

Updates `ktor-server-core` from 1.6.6 to 1.6.7
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/1.6.6...1.6.7)

Updates `ktor-html-builder` from 1.6.6 to 1.6.7
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/1.6.6...1.6.7)

Updates `ktor-server-tests` from 1.6.6 to 1.6.7
- [Release notes](https://github.com/ktorio/ktor/releases)
- [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ktorio/ktor/compare/1.6.6...1.6.7)

---
updated-dependencies:
- dependency-name: io.ktor:ktor-client-mock
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.ktor:ktor-jackson
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.ktor:ktor-client-android
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.ktor:ktor-client-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.ktor:ktor-client-jackson
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.ktor:ktor-client-json
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.ktor:ktor-server-netty
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.ktor:ktor-server-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.ktor:ktor-html-builder
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.ktor:ktor-server-tests
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-02 21:42:00 +01:00
dependabot[bot]
d5d6e4616e Bump logback-classic from 1.2.7 to 1.2.10
Bumps logback-classic from 1.2.7 to 1.2.10.

---
updated-dependencies:
- dependency-name: ch.qos.logback:logback-classic
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-02 21:41:52 +01:00
dependabot[bot]
18e267053d Bump simpleclient from 0.12.0 to 0.14.1
Bumps [simpleclient](https://github.com/prometheus/client_java) from 0.12.0 to 0.14.1.
- [Release notes](https://github.com/prometheus/client_java/releases)
- [Commits](https://github.com/prometheus/client_java/compare/parent-0.12.0...parent-0.14.1)

---
updated-dependencies:
- dependency-name: io.prometheus:simpleclient
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-02 21:41:44 +01:00
7ba9a7e4e7 Update translations 2022-01-02 11:16:21 -06:00
5b8a7c39e2 HistoryCard: Make colors more consistent for AT_MOST habits 2022-01-02 11:06:37 -06:00
d40a5a89cd Notes: Update test screenshots 2022-01-01 08:06:45 -06:00
308d558347 NumberPicker: Show keyboard more reliably 2022-01-01 07:36:40 -06:00
9770ce187a NumberPicker: Fix formatting 2022-01-01 07:28:40 -06:00
535bc03b70 NumberPicker: Clear focus of both pickers 2022-01-01 07:22:26 -06:00
642e45af89 NumberPicker: Replace "5" by "50" instead of "05" on decimal picker 2022-01-01 07:21:29 -06:00
56d2307b75 Habit notes: left align 2022-01-01 06:40:28 -06:00
d875af8a8e CheckmarkDialog: Format date using current locale 2022-01-01 06:30:57 -06:00
feeb4f057d Update translations 2021-12-29 10:10:09 -06:00
1ad5c6b896 Restore x_times_per_y_days translations 2021-12-29 10:01:22 -06:00
baee3b9f86 Merge branch 'sdk_30_31' into dev 2021-12-29 08:51:20 -06:00
e6167baab1 NotificationTray: Use isCompletedToday instead of value != UNKNOWN 2021-12-29 08:13:54 -06:00
Quentin Hibon
1c15e7742e Disable custom snoozing for recent Android 2021-12-11 15:22:37 +01:00
Quentin Hibon
072ba63789 Add immutable flag to pending intents 2021-12-11 15:22:37 +01:00
Quentin Hibon
0fa0daa058 Ask for SCHEDULE_EXACT_ALARM permission 2021-12-11 15:22:37 +01:00
Quentin Hibon
5a5ed3d631 Bump SDK from 30 to 31 2021-12-11 15:22:37 +01:00
Quentin Hibon
3dfa376f59 Remove deprecated bintray repositories 2021-12-11 13:51:30 +01:00
145 changed files with 2494 additions and 1485 deletions

View File

@@ -7,59 +7,24 @@ on:
paths-ignore:
- '**.md'
jobs:
Build:
runs-on: ubuntu-latest
Test:
runs-on: self-hosted
steps:
- name: Check out source code
uses: actions/checkout@v1
- name: Install Java Development Kit 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Build Project
- name: Build project
run: ./build.sh build
- name: Upload Build Artifacts
- name: Run Android tests
run: ./build.sh android-tests-parallel 23 24 25 26 27 28 30 31
- name: Upload artifacts
if: always()
uses: actions/upload-artifact@v2
with:
name: uhabits-android
path: uhabits-android/build/outputs/
AndroidTest:
needs: Build
runs-on: macOS-10.15
timeout-minutes: 60
strategy:
matrix:
api: [
23,
24,
25,
26,
27,
28,
# 29, # Crashes constantly, see: https://issuetracker.google.com/issues/159732638
# 30, # Not available yet
# 31, # Not available yet
]
steps:
- name: Check out source code
uses: actions/checkout@v1
- name: Download Previously Built APK
uses: actions/download-artifact@v2
with:
name: uhabits-android
path: uhabits-android/build/outputs/
- name: Install flock
run: |
brew install util-linux
echo "/usr/local/opt/util-linux/bin" >> $GITHUB_PATH
- name: Run Android Tests
run: ./build.sh android-tests ${{ matrix.api }}
name: build
path: |
build/*log
uhabits-android/build/outputs

View File

@@ -1,5 +1,40 @@
# Changelog
## [2.1.0] -- Unreleased
### Added
- Allow user to add notes to specific dates (@vbh, #1103)
- Allow user to track "at most" numerical habits (@KristianTashkov, #1101)
- Allow user to add skips to measurable habits (@kalina559, #1319)
- Bring back custom frequencies (x times in y days) (@hiqua, #1079)
- Improve number picker (@hiqua, @iSoron, #1082, #1370)
- Add new checkmark and number picker (@iSoron, #1370)
- Allow user to import numerical habits from HabitBull (@hiqua, #1278)
### Removed
- Hide snooze button Android 12 notifications (@hiqua, #1226)
- Remove preference to set LED lights (@iSoron)
### Changed
- Hide failed habits along with completed ones (@hiqua, #1052)
- Cycle through all checkmark states when toggling (@iSoron)
- Add delay after toggling a habit (@hiqua, @kalina559, #1147)
- Small theme improvements (@KristianTashkov, #1113)
- Left-align habit notes (@iSoron)
- Increase target SDK to 31 (@hiqua)
### Fixed
- Fix small dialog buttons (@kalina559, #1096)
- Fix invalid CSV files (@hiqua, #1177)
- Fix small issues in calendar chart (@kalina559, #1314)
- Resort habit list after edit (@hiqua, #1350)
- Fix marker scaling in frequency display (@eduebernal, #1425)
### Refactoring & Testing
- Replace raster icons by vector assets (@kalina559)
- Remove JVM dependencies from uhabits-core module (@sgallese)
- Add various missing tests (@sgallese)
- Upgrade project dependencies (@hiqua, @sgallese)
## [2.0.3] - 2021-08-21
### Fixed
- Improve automatic checkmarks for monthly habits (@iSoron, #947)

View File

@@ -1,11 +1,11 @@
plugins {
val kotlinVersion = "1.5.0"
val kotlinVersion = "1.6.10"
id("com.android.application") version ("7.0.3") apply (false)
id("org.jetbrains.kotlin.android") version kotlinVersion apply (false)
id("org.jetbrains.kotlin.kapt") version kotlinVersion apply (false)
id("org.jetbrains.kotlin.android.extensions") version kotlinVersion apply (false)
id("org.jetbrains.kotlin.multiplatform") version kotlinVersion apply (false)
id("org.jlleitschuh.gradle.ktlint") version "10.2.0"
id("org.jlleitschuh.gradle.ktlint") version "10.2.1"
}
apply {
@@ -18,8 +18,6 @@ allprojects {
mavenCentral()
maven(url = "https://plugins.gradle.org/m2/")
maven(url = "https://oss.sonatype.org/content/repositories/snapshots/")
maven(url = "https://kotlin.bintray.com/ktor")
maven(url = "https://kotlin.bintray.com/kotlin-js-wrappers")
maven(url = "https://jitpack.io")
}
}

124
build.sh
View File

@@ -26,6 +26,7 @@ GRADLE="./gradlew --stacktrace --quiet"
PACKAGE_NAME=org.isoron.uhabits
SDKMANAGER="${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager"
VERSION=$(grep versionName uhabits-android/build.gradle.kts | sed -e 's/.*"\([^"]*\)".*/\1/g')
BOOT_TIMEOUT=360
if [ -z $VERSION ]; then
echo "Could not parse app version from: uhabits-android/build.gradle.kts"
@@ -69,8 +70,7 @@ core_build() {
# Android
# -----------------------------------------------------------------------------
# shellcheck disable=SC2016
android_test() {
android_setup() {
API=$1
AVDNAME=${AVD_PREFIX}${API}
@@ -95,15 +95,53 @@ android_test() {
) 10>/tmp/uhabitsTest.lock
log_info "Launching emulator..."
$EMULATOR -avd $AVDNAME -port 6${API}0 1>/dev/null 2>&1 &
$EMULATOR \
-avd $AVDNAME \
-port 6${API}0 \
1>/dev/null 2>&1 &
log_info "Waiting for emulator to boot..."
export ADB="$ADB -s emulator-6${API}0"
timeout $BOOT_TIMEOUT $ADB wait-for-device shell 'while [[ -z "$(getprop sys.boot_completed)" ]]; do echo Waiting...; sleep 1; done; input keyevent 82'
if [ $? -ne 0 ]; then
log_error "Emulator failed to boot after $BOOT_TIMEOUT seconds."
return 1
fi
log_info "Saving snapshot..."
$ADB emu avd snapshot save fresh-install
}
android_boot_attempt() {
API=$1
AVDNAME=${AVD_PREFIX}${API}
log_info "Stopping Android emulator..."
while [[ -n $(pgrep -f ${AVDNAME}) ]]; do
pkill -9 -f ${AVDNAME}
done
log_info "Launching emulator..."
$EMULATOR \
-avd $AVDNAME \
-port 6${API}0 \
-snapshot fresh-install \
-no-snapshot-save \
-wipe-data \
1>/dev/null 2>&1 &
log_info "Waiting for emulator to boot..."
export ADB="$ADB -s emulator-6${API}0"
$ADB wait-for-device shell 'while [[ -z "$(getprop sys.boot_completed)" ]]; do echo Waiting...; sleep 1; done; input keyevent 82' || return 1
$ADB root || return 1
sleep 5
timeout $BOOT_TIMEOUT $ADB wait-for-device shell 'while [[ -z "$(getprop sys.boot_completed)" ]]; do echo Waiting...; sleep 1; done; input keyevent 82'
if [ $? -ne 0 ]; then
log_error "Emulator failed to boot after $BOOT_TIMEOUT seconds."
return 1
fi
log_info "Disabling animations..."
$ADB root || return 1
sleep 5
$ADB shell settings put global window_animation_scale 0 || return 1
$ADB shell settings put global transition_animation_scale 0 || return 1
$ADB shell settings put global animator_duration_scale 0 || return 1
@@ -111,6 +149,24 @@ android_test() {
log_info "Acquiring wake lock..."
$ADB shell 'echo android-test > /sys/power/wake_lock' || return 1
}
android_boot() {
for attempt in {1..5}; do
android_boot_attempt $1 && return 0
sleep 5
done
log_error "Too many failed attempts. Aborting."
return 1
}
# shellcheck disable=SC2016
android_test() {
API=$1
AVDNAME=${AVD_PREFIX}${API}
android_boot $API || return 1
if [ -n "$RELEASE" ]; then
log_info "Installing release APK..."
$ADB install -r ${ANDROID_OUTPUTS_DIR}/apk/release/uhabits-android-release.apk || return 1
@@ -122,14 +178,25 @@ android_test() {
$ADB install -r ${ANDROID_OUTPUTS_DIR}/apk/androidTest/debug/uhabits-android-debug-androidTest.apk || return 1
for size in medium large; do
log_info "Running $size instrumented tests..."
OUT_INSTRUMENT=${ANDROID_OUTPUTS_DIR}/instrument-${API}.txt
OUT_LOGCAT=${ANDROID_OUTPUTS_DIR}/logcat-${API}.txt
$ADB shell am instrument \
-r -e coverage true -e size $size \
-w ${PACKAGE_NAME}.test/androidx.test.runner.AndroidJUnitRunner \
| tee $OUT_INSTRUMENT
if grep "\(INSTRUMENTATION_STATUS_CODE.*-1\|FAILURES\|ABORTED\|onError\|Error type\|crashed\)" $OUT_INSTRUMENT; then
FAILED_TESTS=""
for i in {1..5}; do
log_info "Running $size instrumented tests (attempt $i)..."
$ADB shell am instrument \
-r -e coverage true -e size "$size" $FAILED_TESTS \
-w ${PACKAGE_NAME}.test/androidx.test.runner.AndroidJUnitRunner \
| ts "%.s" | tee "$OUT_INSTRUMENT"
FAILED_TESTS=$(tools/parseInstrument.py "$OUT_INSTRUMENT")
SUCCESS=$?
if [ $SUCCESS -eq 0 ]; then
log_info "$size tests passed."
break
fi
done
if [ $SUCCESS -ne 0 ]; then
log_error "Some $size instrumented tests failed."
log_error "Saving logcat: $OUT_LOGCAT..."
$ADB logcat -d > $OUT_LOGCAT
@@ -138,13 +205,14 @@ android_test() {
$ADB shell rm -r /sdcard/Android/data/${PACKAGE_NAME}/files/test-screenshots/
return 1
fi
log_info "$size tests passed."
done
return 0
}
android_test_parallel() {
# Launch background processes
PIDS=""
for API in $*; do
(
LOG=build/android-test-$API.log
@@ -152,12 +220,27 @@ android_test_parallel() {
if android_test $API 1>$LOG 2>&1; then
log_info "API $API: Passed"
else
log_error "API $API: Failed. See $LOG for more details."
log_error "API $API: Failed"
fi
pkill -9 -f ${AVD_PREFIX}${API}
)&
PIDS+=" $!"
done
wait
# Check exit codes
RET_CODE=0
for pid in $PIDS; do
wait $pid || RET_CODE=1
done
# Print all logs
for API in $*; do
echo "::group::Android Tests (API $API)"
cat build/android-test-$API.log
echo "::endgroup::"
done
return $RET_CODE
}
android_build() {
@@ -229,12 +312,14 @@ CI/CD script for Loop Habit Tracker.
Usage:
build.sh build [options]
build.sh android-setup <API>
build.sh android-tests <API> [options]
build.sh android-tests-parallel <API> <API>... [options]
build.sh android-accept-images [options]
Commands:
build Build the app and run small tests
android-setup Create Android virtual machine
android-tests Run medium and large Android tests on an emulator
android-tests-parallel Tests multiple API levels simultaneously
android-accept-images Copy fetched images to corresponding assets folder
@@ -270,18 +355,17 @@ main() {
core_build
android_build
;;
android-setup)
shift; _parse_opts "$@"
android_setup $1
;;
android-tests)
shift; _parse_opts "$@"
if [ -z $1 ]; then
_print_usage
exit 1
fi
for attempt in {1..5}; do
log_info "Running Android tests (attempt $attempt)..."
android_test $1 && return 0
done
log_error "Maximum number of attempts reached. Failing."
return 1
android_test $1
;;
android-tests-parallel)
shift; _parse_opts "$@"

View File

@@ -1,5 +1,5 @@
org.gradle.parallel=false
org.gradle.daemon=true
org.gradle.jvmargs=-Xms2048m -Xmx2048m -XX:MaxPermSize=2048m
org.gradle.jvmargs=-Xms2048m -Xmx2048m
android.useAndroidX=true
android.enableJetifier=true

67
tools/parseInstrument.py Executable file
View File

@@ -0,0 +1,67 @@
#!/usr/bin/env python3
"""
Android Instrumentation Test Parser
Given a raw Android Instrumentation log (produced by "adb shell am instrument -r ...") this script
return zero if all tests pass and non-zero if some tests fail. In case of failure, this script
also prints arguments that, if passed to "am instrument", will cause it to re-run just the tests
that failed. This script additionally prints warnings about the tests on the STDERR; e.g. slow tests.
"""
import sys
import re
STATUS_START = 1
STATUS_DISABLED = -3
SLOW_TEST_THRESHOLD = 5.0
COLOR_RED = '\033[91m'
COLOR_YELLOW = '\033[93m'
COLOR_END = '\033[0m'
def error(msg):
sys.stderr.write("%s%s%s\n" % (COLOR_RED, msg, COLOR_END))
def warning(msg):
sys.stderr.write("%s%s%s\n" % (COLOR_YELLOW, msg, COLOR_END))
log_filename = sys.argv[1]
current_class, current_method = None, None
failed_tests = []
am_args = "-e class "
exit_code = 1
for line in open(log_filename).readlines():
matches = re.findall('^([0-9.]*)', line)
current_time = float(matches[0])
matches = re.findall('INSTRUMENTATION_STATUS: class=(.*)', line)
if len(matches) > 0:
current_class = matches[0]
matches = re.findall('INSTRUMENTATION_STATUS: test=(.*)', line)
if len(matches) > 0:
current_method = matches[0]
matches = re.findall('OK \([0-9]* tests?\)', line)
if len(matches) > 0:
exit_code = 0
matches = re.findall('INSTRUMENTATION_STATUS_CODE: ([-0-9]*)', line)
if len(matches) > 0:
status_code = int(matches[0])
if (status_code < 0) and (status_code != STATUS_DISABLED):
am_args += f"{current_class}#{current_method},"
failed_tests.append(f"{current_class}#{current_method}")
if status_code == STATUS_START:
initial_time = current_time
else:
elapsed_time = current_time - initial_time
if(elapsed_time > SLOW_TEST_THRESHOLD):
warning("SLOW %s#%s (%.2f seconds)" % (current_class, current_method, elapsed_time))
if len(failed_tests) > 0:
for test in failed_tests:
error("FAIL %s" % test)
print(am_args[:-1])
sys.exit(exit_code)

View File

@@ -1,377 +1,415 @@
Name,Languages,"Translated (Words)","Target Words","Approved (Words)",Voted,"""+"" votes received","""-"" votes received","Winning (Words)",Joined
"Alinson Xavier (iSoron)","Portuguese, Brazilian; Japanese; Spanish; Portuguese; Italian; Chinese Simplified; French; Hungarian; German; Arabic; Hindi; Slovenian; Catalan; Greek; Korean; Bulgarian; Chinese Traditional; Polish; Russian; Serbian (Cyrillic); Turkish; Ukrainian; Czech; Indonesian; Croatian; Danish; Dutch; Romanian; Swedish; Basque; Persian; Finnish; Vietnamese; Telugu; Tamil; Afrikaans; Esperanto; Hebrew",14808,17227,1282,0,1779,80,4274,"2016-03-05 18:35:27"
"Alinson Xavier (iSoron)","Portuguese, Brazilian; Japanese; Chinese Simplified; Italian; Spanish; Portuguese; French; Hungarian; Chinese Traditional; Turkish; Russian; Polish; Arabic; German; Korean; Greek; Catalan; Bulgarian; Hindi; Slovenian; Ukrainian; Serbian (Cyrillic); Czech; Indonesian; Croatian; Danish; Dutch; Romanian; Swedish; Basque; Persian; Finnish; Vietnamese; Tamil; Telugu; Hebrew; Esperanto; Norwegian; Afrikaans; Slovak; Armenian; Serbian (Latin); Uyghur",15497,18825,1308,0,1896,84,4315,"2016-03-05 18:35:27"
"Slobodan Simić (Слободан Симић) (slsimic)","Serbian (Latin); Serbian (Cyrillic)",2054,1831,2114,12,33,0,1991,"2021-02-03 14:26:07"
"Oglaigh Rystard (oglaignaheireann)","Ukrainian; Portuguese; Catalan; Greek; Basque; Romanian; Italian",1103,1037,1327,1,13,6,954,"2017-03-31 09:13:19"
dukelc,Slovak,1046,993,0,0,0,0,0,"2020-08-27 14:02:41"
"David (Cliff122)",Swedish,1040,1019,725,6,0,0,700,"2020-01-21 13:56:55"
"Omer I.S. (omeritzics)",Hebrew,1000,900,1097,14,1,0,946,"2020-10-11 20:10:51"
dukelc,Slovak,919,880,0,0,0,0,0,"2020-08-27 14:02:41"
"Intan Ayunda (Intan_Ayunda)",Indonesian,800,793,962,0,0,0,711,"2020-10-14 07:51:58"
"Omer I.S. (omeritzics)",Hebrew,1040,927,1122,14,1,0,975,"2020-10-11 20:10:51"
"Intan Ayunda (Intan_Ayunda)",Indonesian,818,811,985,0,0,0,729,"2020-10-14 07:51:58"
"Mihail Stefanov (MStefanov)",Bulgarian,755,794,3,0,2,0,2,"2017-03-31 16:09:02"
KMakoto,"Chinese Traditional",745,1146,949,0,0,0,745,"2019-10-22 04:19:52"
"Evren (evrenkiymaz)",Turkish,688,604,0,71,5,1,0,"2020-10-04 03:39:16"
"Evren (evrenkiymaz)",Turkish,688,604,0,71,28,22,0,"2020-10-04 03:39:16"
andaryon,Czech,681,606,0,108,0,0,0,"2021-11-25 10:20:45"
"Antti Kallio (antti.kallio)",Finnish,668,539,0,5,0,0,0,"2021-07-03 05:54:44"
"David Nos (david.nos)","Catalan; Spanish",667,731,0,0,1,0,0,"2020-01-04 10:15:36"
"Antti Kallio (antti.kallio)",Finnish,650,525,0,0,0,0,0,"2021-07-03 05:54:44"
androide74,Italian,644,659,0,2,0,0,0,"2020-02-06 15:46:28"
androide74,Italian,662,681,0,2,0,0,0,"2020-02-06 15:46:28"
Osoitz,Basque,655,595,0,9,0,0,3,"2018-01-23 14:07:47"
"Dmitriy Bogdanov (di72nn)",Russian,643,589,1197,0,36,0,515,"2017-03-31 10:00:48"
Tomairuka,Japanese,633,1636,909,43,0,0,564,"2020-12-12 12:14:22"
"Dmitriy Bogdanov (di72nn)",Russian,625,572,1197,0,36,0,515,"2017-03-31 10:00:48"
reyhoon,Persian,624,759,0,1,3,1,0,"2020-10-01 18:17:23"
Osoitz,Basque,610,545,0,9,0,0,3,"2018-01-23 14:07:47"
"Saeed Esmaili (saaeed.es20)",Persian,568,774,0,5,4,0,0,"2020-11-26 15:41:15"
"Saeed Esmaili (saaeed.es20)",Persian,586,795,0,5,4,0,0,"2020-11-26 15:41:15"
fabian.bouchal,German,548,527,0,6,0,3,72,"2020-01-07 06:43:37"
boban77,Czech,509,461,0,2,0,0,0,"2020-04-30 13:18:24"
"Yoav Argov (YoavArgov)",Hebrew,501,461,0,0,1,8,103,"2017-04-28 07:23:01"
"Isti (eisti)",Hungarian,528,476,0,0,0,0,0,"2020-12-03 12:02:51"
boban77,Czech,509,461,0,2,29,0,0,"2020-04-30 13:18:24"
"Martim Parente (martimparente)",Portuguese,505,542,0,38,0,0,0,"2020-08-26 10:22:11"
"Yoav Argov (YoavArgov)",Hebrew,501,461,0,0,1,8,91,"2017-04-28 07:23:01"
REMOVED_USER,Norwegian,501,498,501,0,148,0,501,"2017-07-05 19:02:25"
"Martim Parente (Sharlimar)",Portuguese,497,534,0,38,0,0,0,"2020-08-26 10:22:11"
"chrrris1987 (Chrrris1987)",Dutch,467,478,0,23,0,0,0,"2020-02-03 05:26:04"
"Huy Ngo (huyngo)",Vietnamese,461,695,0,1,0,0,0,"2020-01-26 11:58:36"
"黄克 (hk13127)","Chinese Simplified",461,765,0,1,0,0,24,"2020-01-17 23:16:03"
"Arkadiusz Bubak (epitek)",Polish,458,416,29,24,0,3,0,"2020-11-05 05:11:58"
"Huy Ngo (huyngo)",Vietnamese,461,695,0,1,0,0,0,"2020-01-26 11:58:36"
"Arkadiusz Bubak (epitek)",Polish,458,416,52,24,9,4,0,"2020-11-05 05:11:58"
marco.baturan,Esperanto,452,452,0,0,0,0,0,"2020-06-23 02:49:46"
"Sief Tarek (sieftarek135)",Arabic,447,455,0,0,0,0,0,"2021-02-07 14:35:21"
"Alparslan Şakçi (sakci)",Turkish,436,372,0,118,1,0,0,"2022-01-14 12:03:11"
JY3,"Chinese Simplified",427,727,295,0,1,0,222,"2021-03-08 08:53:35"
"Samuel Guay (SamGuay)",French,426,486,0,6,0,0,0,"2020-06-25 07:14:38"
"Diana Karaseva (Sun_Dianka)",Russian,399,373,0,10,1,0,209,"2020-01-30 06:40:02"
"Alexander Jansson (dalecarlian)",Swedish,396,406,507,0,0,3,399,"2017-06-21 01:37:32"
luiandresgonzalez,Spanish,383,403,0,1,28,0,0,"2020-07-11 14:20:44"
"Thamara Andrade (tkcandrade)","Portuguese, Brazilian",380,387,0,0,1,0,252,"2020-01-09 19:35:48"
"Thamara Andrade (tkcandrade)","Portuguese, Brazilian",380,387,0,0,1,0,239,"2020-01-09 19:35:48"
"Sølv Ræven (soelvraeven)",Danish,370,370,0,0,0,0,0,"2020-11-28 16:46:18"
"Isti (eisti)",Hungarian,367,329,0,0,0,0,0,"2020-12-03 12:02:51"
"Anh Quân (dangquanuet)",Vietnamese,362,530,0,42,2,0,0,"2017-10-29 12:27:44"
gapszi,Hungarian,348,301,0,86,0,0,0,"2019-04-08 01:35:54"
JY3,"Chinese Simplified",345,585,278,0,1,0,207,"2021-03-08 08:53:35"
"Mahdi Nasiri (mahdi.nasiri)",Persian,343,465,0,39,3,1,0,"2017-07-14 09:17:25"
Seoyul,Korean,339,825,0,0,27,0,0,"2017-06-21 08:11:39"
"Magimai Prakasam (magimai)",Tamil,336,831,0,12,0,0,0,"2018-04-15 21:16:08"
"Michael Malak (MichaelKMalak)",Arabic,304,271,0,0,0,0,0,"2020-05-26 19:47:58"
"Michael Malak (MichaelKMalak)",Arabic,304,271,0,0,1,0,0,"2020-05-26 19:47:58"
Blinkin,Dutch,297,334,0,5,0,0,0,"2021-06-14 10:30:05"
"Elina Salminen (salminen.elina.m)",Finnish,297,227,0,0,0,0,0,"2021-01-06 01:28:57"
ayane.m,Japanese,292,863,0,1,3,0,22,"2019-11-20 03:28:26"
Blinkin,Dutch,284,318,0,1,0,0,0,"2021-06-14 10:30:05"
"Marius Teufelweich (teufelweich)",German,249,256,606,4,2,0,146,"2021-03-12 04:11:38"
ayane.m,Japanese,292,863,0,1,5,0,22,"2019-11-20 03:28:26"
"Marius Teufelweich (teufelweich)",German,267,272,611,4,13,1,146,"2021-03-12 04:11:38"
hypnotichemionus,"Chinese Simplified",249,430,0,0,8,0,19,"2020-03-08 01:46:25"
cobalt59,German,237,234,0,1,24,1,132,"2017-06-05 05:18:33"
"QWERT (lurenjia01)","Chinese Simplified",236,407,0,0,8,0,19,"2020-03-08 01:46:25"
beriain,Basque,234,235,0,0,2,0,0,"2017-03-31 15:42:28"
pnhpnh,Vietnamese,225,343,0,1,3,0,0,"2017-11-27 12:06:07"
"Dika Fitrian Dwi Putra (OsamuDazai)",Indonesian,221,215,0,0,0,0,48,"2020-07-13 04:40:27"
easyrepro,Telugu,214,297,0,0,0,0,0,"2020-06-12 12:52:10"
easyrepro,Telugu,214,297,0,0,4,0,0,"2020-06-12 12:52:10"
taras-ko,Ukrainian,211,183,0,1,4,0,19,"2017-10-26 16:52:22"
sojusnik,German,207,200,1,0,30,0,66,"2017-04-03 17:11:56"
axmed99,Ukrainian,203,177,0,40,0,0,53,"2021-04-01 03:56:20"
"Andrij Mizyk (andmizyk)",Ukrainian,204,178,0,40,0,0,53,"2021-04-01 03:56:20"
"Heru Yen (heruyen)",Indonesian,201,201,0,0,0,0,25,"2020-06-29 18:39:15"
"Vijaykumar Borkar (vjkumar)",Hindi,200,364,0,11,0,0,0,"2021-08-06 16:12:15"
Ishmaeel,Turkish,193,174,0,129,6,0,0,"2017-10-04 03:54:00"
_translator,French,199,227,0,11,0,0,0,"2021-07-06 07:54:12"
Ishmaeel,Turkish,193,174,0,129,17,6,0,"2017-10-04 03:54:00"
oscfd,Spanish,192,201,0,2,4,0,0,"2021-05-21 17:58:22"
bruhwut,Vietnamese,189,292,0,1,0,0,0,"2021-05-21 07:16:30"
"Aputsiak Niels Janussen (aputtu)",Danish,187,200,0,0,0,0,0,"2019-08-28 05:47:42"
_translator,French,181,206,0,11,0,0,0,"2021-07-06 07:54:12"
fbruna17,Danish,181,179,0,1,0,0,0,"2021-01-28 15:48:47"
Bryanx,Dutch,179,168,0,5,2,0,0,"2019-11-21 17:08:12"
"Omry Cohen (omrycohen)",Hebrew,175,156,0,1,0,0,33,"2021-01-18 07:33:23"
Bryanx,Dutch,174,165,0,5,0,0,0,"2019-11-21 17:08:12"
"Pierre GALIEGUE (pierre.galiegue)",French,171,194,0,24,4,0,0,"2020-08-16 11:41:35"
bruhwut,Vietnamese,171,268,0,1,0,0,0,"2021-05-21 07:16:30"
plitwin,Polish,168,151,0,2,31,0,49,"2021-01-20 06:18:37"
DionysosDV,Greek,165,153,0,0,0,0,0,"2021-02-27 19:05:25"
"Gustavo Lima (GustavoLima)",Portuguese,158,177,0,1,4,10,0,"2020-08-26 10:35:05"
oscfd,Spanish,155,166,0,1,4,0,0,"2021-05-21 17:58:22"
plitwin,Polish,145,128,0,1,16,0,26,"2021-01-20 06:18:37"
"Ravi Rami (ramiravi)",Hindi,151,248,0,0,0,0,0,"2021-10-10 09:19:40"
"Lương Vĩnh Khang (LuongVinhKhang)",Vietnamese,144,256,0,0,46,1,0,"2017-08-10 10:05:58"
azzamsa,Indonesian,142,136,0,48,0,1,26,"2017-06-16 18:29:45"
"yoding (yodingc)","Chinese Traditional; Chinese Simplified",141,271,0,10,0,0,0,"2021-07-07 01:45:45"
"Neysa Nasywa (neysanasywa)",Indonesian,140,141,0,0,0,0,60,"2020-11-18 10:32:10"
mohmans,Arabic,139,141,0,12,1,0,0,"2020-11-23 02:48:00"
"Eilif Adelvice (adelvice)",Spanish,139,154,0,96,1,0,0,"2021-08-05 07:20:21"
"Mohammed Imthath (mimthath4)",Tamil,136,274,0,0,11,0,0,"2018-02-15 22:41:15"
carllacan,Catalan,134,155,0,2,0,0,0,"2021-11-13 13:12:07"
roptat,French,132,154,0,112,89,5,0,"2017-04-19 16:54:47"
"Trần Thái (tranhoangthai2001)",Vietnamese,127,186,0,8,1,0,0,"2018-03-01 10:51:39"
"OP Smosher (teenwolffan44)","Serbian (Cyrillic)",124,122,0,0,0,0,18,"2020-11-05 09:41:35"
4001982248998,Esperanto,122,119,0,0,0,0,0,"2017-10-08 04:13:02"
"StoP4Me (Lcqp)",Romanian,121,119,0,0,3,0,0,"2018-05-06 18:51:59"
alalloush,Arabic,118,129,0,2,2,0,0,"2017-03-31 12:37:17"
"Eilif Adelvice (adelvice)",Spanish,116,126,0,96,0,0,0,"2021-08-05 07:20:21"
Sebastian05067,Spanish,114,133,0,55,28,0,0,"2017-05-14 00:48:16"
alalloush,Arabic,118,129,0,2,14,3,0,"2017-03-31 12:37:17"
"Tanya (MagicUnderHood)",Russian,114,98,0,19,0,0,54,"2019-04-21 10:44:03"
REMOVED_USER,Arabic,111,106,0,22,21,2,0,"2018-01-05 07:01:45"
mohmans,Arabic,109,103,0,2,0,0,0,"2020-11-23 02:48:00"
Sebastian05067,Spanish,114,133,0,55,28,0,0,"2017-05-14 00:48:16"
REMOVED_USER,Arabic,111,106,0,22,22,2,0,"2018-01-05 07:01:45"
"Iabin Arteaga (iabin)",Spanish,108,111,0,4,21,0,0,"2017-08-26 21:08:54"
"Ivan Krušlin (krux3r)",Croatian,108,122,503,0,0,0,108,"2017-03-31 09:15:24"
2kaafone,Finnish,105,90,0,0,0,0,0,"2019-08-12 06:58:48"
"Adam Jurkiewicz (hasztagg)",Polish,104,105,529,0,0,0,104,"2017-03-31 09:50:51"
"just a name bro (justanamebr0)",Danish,98,109,0,0,1,0,0,"2019-06-19 11:57:55"
"Nam Nguyen (namnl2706)",Vietnamese,95,137,0,0,0,0,0,"2020-08-18 23:02:33"
"손유정 (yuwon1213)",Korean,95,57,0,0,0,0,0,"2021-03-30 05:25:33"
"손유정 (yuwon1213)",Korean,95,57,0,0,1,0,0,"2021-03-30 05:25:33"
ranmagen,Hebrew,91,78,0,0,0,0,0,"2021-02-16 05:44:31"
LoneWanderer,"Chinese Traditional",90,137,0,4,0,0,0,"2020-09-29 05:24:48"
"Vo - (voyl)","Chinese Traditional",89,126,0,0,5,0,0,"2020-09-02 23:34:42"
ikkaz,Indonesian,89,84,0,5,0,0,4,"2019-09-02 19:58:54"
"Vo - (voyl)","Chinese Traditional",89,126,0,0,5,0,0,"2020-09-02 23:34:42"
"Irene K (Heaun)",Korean,88,75,0,25,0,0,0,"2020-03-16 11:31:12"
Prosta4ok_ua,Ukrainian,87,84,0,1,0,0,17,"2020-01-23 19:43:41"
"Kumar Anand (kumar0500)",Hindi,87,125,0,0,0,0,0,"2020-11-07 02:46:09"
"Ohad Edri (ohadalte)",Hebrew,85,79,0,0,1,3,18,"2020-07-04 03:42:09"
"Ohad Edri (ohadalte)",Hebrew,85,79,0,0,1,3,13,"2020-07-04 03:42:09"
helectron,Persian,84,102,0,1,0,0,0,"2021-03-02 04:10:51"
"Radu Cebotari (wildProgrammer)",Romanian,84,92,0,1,0,0,0,"2020-02-05 01:20:00"
"Bruces Lee (aplusbdesign)",Korean,82,66,0,0,0,0,0,"2021-08-23 11:27:18"
"Israa Z (sosozozo)",Arabic,79,87,0,43,14,0,3,"2017-11-27 14:10:50"
"Sofia Neves (sofiasonev)","Portuguese, Brazilian",79,84,0,1,0,0,46,"2020-03-12 18:19:46"
"Jacob Roller (jdr28070)",Korean,79,61,0,0,0,0,0,"2020-01-03 11:36:40"
"Jacob Roller (jdr28070)",Korean,79,61,0,0,1,0,0,"2020-01-03 11:36:40"
Tiralka,French,79,91,0,92,1,0,0,"2018-02-09 18:39:01"
"Israa Z (sosozozo)",Arabic,79,87,0,43,12,0,3,"2017-11-27 14:10:50"
"Toni Mustonen (toni.mustonen)",Finnish,78,72,0,0,0,0,0,"2017-09-02 05:34:12"
"Fauz Aladeem (topfauz)",Arabic,76,77,0,0,0,1,0,"2020-02-21 22:46:12"
"Toni Mustonen (toni.mustonen)",Finnish,78,72,0,0,5,0,0,"2017-09-02 05:34:12"
"Michael (quelbs)",German,76,75,0,1,0,0,39,"2020-08-18 07:39:26"
"Oliver Gronowski (OliverGronowski)",German,70,69,0,5,0,0,0,"2021-05-14 16:37:10"
"Fauz Aladeem (topfauz)",Arabic,76,77,0,0,0,1,0,"2020-02-21 22:46:12"
"Radoslaw Biernacki (radoslaw.biernacki)",Polish,70,74,0,56,1,0,1,"2020-12-15 17:55:31"
"Oliver Gronowski (OliverGronowski)",German,70,69,0,5,2,0,0,"2021-05-14 16:37:10"
RealDonald,Dutch,67,69,0,121,10,0,0,"2017-06-23 20:10:12"
sirekanyan,"Armenian; Russian",66,65,0,0,0,0,0,"2020-04-18 11:32:52"
"Константин К. (kocyak1991)",Russian,64,60,0,0,1,2,0,"2018-06-10 13:39:37"
"Laura Sophie (laurasophie20)",German,62,67,0,4,0,0,0,"2018-01-06 14:21:24"
"Alparslan Sakci (sakci)",Turkish,61,55,0,11,0,0,0,"2021-06-10 11:59:22"
raden20,Indonesian,61,62,177,0,1,0,64,"2017-04-09 22:04:23"
"Peter Williams (williamspete001)",Japanese,60,173,0,2,0,0,3,"2020-01-01 13:17:44"
"Jan Wojtecki (j4nw)",Polish,58,46,0,0,0,0,26,"2017-11-02 05:42:14"
"Deepak Bharathi (deepakbharathi1994)",Tamil,56,107,0,0,11,4,0,"2017-09-17 08:00:31"
"Peter Williams (williamspete001)",Japanese,55,147,0,2,0,0,3,"2020-01-01 13:17:44"
"Андрій Козицький (andriikozytskyi1108)",Ukrainian,52,52,0,0,1,0,0,"2018-10-22 01:45:08"
"Nil riera (nilriera2000)",Catalan,52,61,0,1,0,0,0,"2021-06-22 16:37:44"
"Nil riera (nilriera2000)",Catalan,52,61,0,1,2,0,0,"2021-06-22 16:37:44"
"Neoone (Neooneqq)",Romanian,51,54,0,0,0,0,0,"2022-05-05 20:42:11"
REMOVED_USER,Italian,51,52,0,2,0,0,0,"2017-08-21 05:15:31"
govindap,"Japanese; Hindi",51,114,0,6,1,0,0,"2020-06-02 20:15:52"
"Mare Geldenhuys (mare.geldenhuys)",Afrikaans,50,57,0,0,0,0,0,"2017-10-20 18:00:14"
"Mahmoud Magdy (M7moudManson)",Arabic,49,60,0,6,8,1,0,"2021-08-21 09:01:38"
"Behnood HRazy (behnoodhr)",Persian,49,70,0,0,0,0,0,"2017-11-25 10:57:21"
"tat bz (Tat_i)",German,48,56,0,55,0,0,27,"2021-03-26 05:12:54"
J3ll3nl,Dutch,48,48,0,0,17,1,3,"2017-03-31 11:56:09"
"Andrew Firnes (Anechan)",Russian,47,47,0,3,0,0,29,"2019-09-18 09:51:59"
andowero,Czech,47,38,0,0,0,0,0,"2020-01-20 02:29:01"
"tat bz (Tat_i)",German,48,56,0,55,0,1,27,"2021-03-26 05:12:54"
vach,Armenian,47,36,0,0,0,0,0,"2020-04-18 16:53:12"
"Andrew Firnes (Anechan)",Russian,47,47,0,3,0,0,29,"2019-09-18 09:51:59"
andowero,Czech,47,38,0,0,3,0,0,"2020-01-20 02:29:01"
"Rahul Shishodia (rahul.shishodia.10)",Hindi,46,85,0,6,5,1,0,"2018-12-24 22:18:19"
"Coni Ragni (coni2ragnii)",Spanish,46,46,0,0,0,0,0,"2021-02-28 20:18:37"
Cp0204,"Chinese Simplified",45,72,0,0,0,0,0,"2019-08-20 11:04:27"
"cc (cavaz)",Italian,44,41,0,0,0,0,0,"2017-04-01 04:21:08"
"Boban Jagertraum (boban40)",Czech,43,38,0,2,1,1,0,"2017-03-31 09:39:16"
"Kamil Dziadek (prso94)",Polish,43,39,0,0,2,0,0,"2020-04-06 17:12:06"
"Me Me (gentelwom)",Arabic,42,40,0,0,0,0,0,"2020-11-08 20:44:01"
"Ali Elsheikh (aelsheikh1987)",Arabic,42,41,0,0,0,0,0,"2021-06-16 10:17:26"
"Balázs Keresztury (belidzs)",Hungarian,42,41,501,0,7,0,38,"2017-04-06 02:40:24"
"Boban Jagertraum (boban40)",Czech,43,38,0,2,18,1,0,"2017-03-31 09:39:16"
"Kamil Dziadek (prso94)",Polish,43,39,0,0,6,0,0,"2020-04-06 17:12:06"
andreea.muscalagiu,Romanian,42,52,0,1,0,0,0,"2017-10-22 07:19:49"
"Mateusz Duda (MateuszDuda)",Polish,42,42,0,0,0,0,0,"2021-08-17 11:27:11"
MStefanov,Bulgarian,41,55,2,0,2,0,2,"2017-03-31 16:09:02"
"Sofia Veijonen (Suklaa) (sofia.veijonen)",Finnish,40,33,0,0,0,0,0,"2018-03-07 09:24:22"
"Me Me (gentelwom)",Arabic,42,40,0,0,0,0,0,"2020-11-08 20:44:01"
"Balázs Keresztury (belidzs)",Hungarian,42,41,501,0,7,0,38,"2017-04-06 02:40:24"
"Mateusz Duda (MateuszDuda)",Polish,42,42,0,0,6,0,0,"2021-08-17 11:27:11"
"Ali Elsheikh (aelsheikh1987)",Arabic,42,41,0,0,0,0,0,"2021-06-16 10:17:26"
"Ali Zali (stm19951995)",Persian,40,60,0,0,0,0,0,"2020-03-23 19:57:26"
"Limin Lu (liminlu)","Chinese Simplified",39,79,503,0,0,0,39,"2017-03-31 09:49:35"
"Sofia Veijonen (Suklaa) (sofia.veijonen)",Finnish,40,33,0,0,0,0,0,"2018-03-07 09:24:22"
dusanstrgar,Slovenian,39,41,0,0,0,0,0,"2017-03-31 10:30:28"
"Limin Lu (liminlu)","Chinese Simplified",39,79,503,0,0,0,39,"2017-03-31 09:49:35"
Anshoe,Tamil,38,65,0,14,0,0,0,"2018-01-02 11:06:52"
anasshm,Arabic,37,36,0,9,0,0,0,"2019-01-27 04:07:22"
hrexen,Armenian,37,37,0,0,0,0,0,"2020-12-09 02:30:34"
"Abdulrahman (D7M)",Arabic,36,39,0,0,0,0,0,"2020-01-29 18:55:30"
"Maria Chushnyakova (maria.ch)",Russian,36,31,0,3,0,0,0,"2021-08-17 03:23:58"
REMOVED_USER,Swedish,36,33,0,5,1,0,0,"2018-09-29 17:47:33"
xphsis,Basque,36,31,0,0,0,0,0,"2022-01-02 08:16:19"
"Maria Chushnyakova (maria.ch)",Russian,36,31,0,3,0,0,0,"2021-08-17 03:23:58"
"長谷川知里 (chase0213)",Japanese,34,138,0,13,0,0,24,"2018-12-14 10:52:44"
"Piotr Łuczyński (peterluczynski)",Polish,33,30,0,6,10,0,2,"2020-01-29 07:27:40"
"Luis E. Perichon (luisperichon)",Spanish,33,40,0,104,0,0,0,"2017-09-04 13:46:06"
"Piotr Łuczyński (peterluczynski)",Polish,33,30,0,6,5,0,2,"2020-01-29 07:27:40"
"milad farahani (miladfarmahini90)",Persian,33,44,0,18,1,0,3,"2017-08-31 16:09:00"
JoeLi,"Chinese Traditional",31,70,0,12,0,0,24,"2017-06-25 05:32:48"
andriikozytskyi2625,Ukrainian,31,23,0,0,0,0,0,"2019-07-08 00:16:41"
REMOVED_USER,Russian,31,30,0,2,4,0,3,"2018-12-03 23:55:47"
Moastafa,Arabic,31,25,0,0,0,0,0,"2020-07-06 11:37:53"
"hamza gamal (hamzagamal4444)",Arabic,31,28,0,0,0,0,0,"2020-08-03 15:23:34"
REMOVED_USER,Russian,31,30,0,2,4,0,3,"2018-12-03 23:55:47"
JoeLi,"Chinese Traditional",31,70,0,12,0,0,24,"2017-06-25 05:32:48"
yancyn,"Chinese Simplified",30,40,0,0,0,0,1,"2020-05-18 20:06:03"
"비니몬youtube (khj01025276475)",Korean,29,25,0,0,0,0,0,"2020-02-09 20:44:35"
"Ruud Schouten (ruudschouten)",Dutch,29,32,0,41,3,0,0,"2017-07-22 17:49:17"
"Aaron Dalton (Perlkonig)",French,26,25,0,141,1,0,0,"2018-01-14 12:58:19"
"비니몬youtube (khj01025276475)",Korean,29,25,0,0,0,0,0,"2020-02-09 20:44:35"
avelneve,Indonesian,29,28,0,0,0,0,0,"2022-04-13 13:26:10"
"Niraj Yadav (neverforgetniraj)",Hindi,26,48,0,0,0,0,0,"2017-04-11 02:26:50"
"Guillaume Collic (gcollic)",French,26,28,0,126,11,0,0,"2017-05-05 16:13:00"
"Radoslaw Biernacki (radoslaw.biernacki)",Polish,26,24,0,8,0,0,1,"2020-12-15 17:55:31"
"Aaron Dalton (Perlkonig)",French,26,25,0,141,1,0,0,"2018-01-14 12:58:19"
"Jonny I (jonny99dj)",Italian,26,26,0,5,0,0,0,"2017-10-07 07:35:34"
"Guillaume Collic (gcollic)",French,26,28,0,126,11,0,0,"2017-05-05 16:13:00"
Pan_Filuta,Czech,25,21,0,5,8,0,3,"2017-04-29 12:55:14"
"Eddie (eddieattaboy)","Chinese Traditional",25,34,0,1,0,0,0,"2020-11-04 21:48:05"
Pan_Filuta,Czech,25,21,0,5,4,0,3,"2017-04-29 12:55:14"
"eduard83 (barbany.eduard)",Catalan,24,25,0,2,0,0,0,"2019-06-26 14:59:47"
"A Aa (ylayzlmimashisafyoutub)",Arabic,23,33,0,34,1,1,0,"2021-09-27 15:34:26"
"Caner Başaran (basarancaner)",Turkish,23,21,0,0,26,1,0,"2017-04-09 06:34:59"
"Ľuboš Čaky (lubos.caky)",Slovak,23,22,0,0,0,0,0,"2019-07-02 16:51:44"
"Caner Başaran (basarancaner)",Turkish,23,21,0,0,21,0,0,"2017-04-09 06:34:59"
hodanli,Turkish,22,26,0,0,1,0,0,"2017-11-03 14:33:41"
gnu-ewm,Polish,22,23,0,6,0,0,0,"2021-02-24 03:42:01"
"Neeraj Verma (verma.neeraj.in)",Hindi,22,37,0,0,1,0,0,"2018-07-23 07:16:41"
gnu-ewm,Polish,22,23,0,6,2,0,0,"2021-02-24 03:42:01"
hodanli,Turkish,22,26,0,0,1,0,0,"2017-11-03 14:33:41"
"Alcarkse (alexis.brusle)",French,21,25,0,7,11,0,0,"2017-08-06 09:32:29"
olbotta,Italian,20,25,0,2,0,0,0,"2021-06-06 04:22:55"
"Shashwat (goforgold)",Hindi,20,33,0,0,0,0,0,"2020-05-17 10:34:42"
olbotta,Italian,20,25,0,2,0,0,0,"2021-06-06 04:22:55"
can13,Turkish,19,14,0,8,0,0,0,"2021-01-03 10:39:03"
"사자솥 (toke1597)",Korean,19,19,0,0,0,0,0,"2020-02-04 13:36:11"
KenKailer,Arabic,19,25,0,0,0,0,0,"2022-05-10 06:16:54"
"İsa Eş (IsaEs)",Turkish,19,17,0,0,6,2,0,"2017-06-20 07:30:22"
"Magdalena Urbańczyk (madziia139)",Polish,19,19,0,0,0,0,0,"2017-10-21 03:01:04"
sheeCesu,French,19,18,0,48,4,0,0,"2017-12-21 17:01:39"
can13,Turkish,19,14,0,8,0,0,0,"2021-01-03 10:39:03"
"İsa Eş (IsaEs)",Turkish,19,17,0,0,6,1,0,"2017-06-20 07:30:22"
"사자솥 (toke1597)",Korean,19,19,0,0,0,0,0,"2020-02-04 13:36:11"
axikman11111,Uyghur,18,19,0,0,0,0,0,"2018-10-13 12:25:31"
"Hoon Jung (hooni100)",Korean,17,10,0,0,0,0,0,"2021-01-03 02:26:54"
"Ceara Lopez (cealopez)",Spanish,17,18,0,0,5,1,0,"2017-08-22 22:56:13"
takoyakibento,Korean,17,13,0,3,0,0,0,"2020-08-01 08:44:15"
Adeline31,French,17,20,0,3,0,0,0,"2019-12-06 00:00:11"
engineeringforgood,Russian,16,15,0,0,0,0,16,"2021-01-22 03:32:35"
"Hoon Jung (hooni100)",Korean,17,10,0,0,0,0,0,"2021-01-03 02:26:54"
takoyakibento,Korean,17,13,0,3,0,0,0,"2020-08-01 08:44:15"
"Ceara Lopez (cealopez)",Spanish,17,18,0,0,5,1,0,"2017-08-22 22:56:13"
bretzel15,German,16,20,0,0,0,0,0,"2020-04-06 02:49:14"
"Şamil Ateşoğlu (m.samilatesoglu)",Turkish,16,22,0,11,6,3,0,"2017-07-05 18:37:08"
DebatablySane,Bulgarian,16,15,0,48,0,0,0,"2017-07-10 15:13:18"
"Şamil Ateşoğlu (m.samilatesoglu)",Turkish,16,22,0,11,6,3,0,"2017-07-05 18:37:08"
engineeringforgood,Russian,16,15,0,0,0,0,16,"2021-01-22 03:32:35"
"Bhava Tharini (bhavidanush)",Tamil,15,37,0,0,0,0,0,"2019-10-09 05:43:11"
"Maro Chr (caprisunglasses)",Greek,14,17,0,0,0,0,0,"2021-08-17 06:53:33"
"Zeynep Esen (nezihaesen50)",Turkish,14,13,0,0,0,0,0,"2020-01-28 07:05:15"
iamsurajbobade,Hindi,14,30,0,0,0,0,0,"2018-05-21 11:23:27"
"Faiz Ahamed (faiznewton)",Tamil,14,31,0,0,0,0,0,"2021-05-06 23:06:46"
"Sanji Vinsmock (mukanzhanbolat4)",Russian,14,14,0,0,0,0,0,"2020-02-18 12:38:54"
"Zeeshan Rabbani (Zeera)",Hindi,14,25,0,0,0,0,0,"2020-09-15 11:32:01"
"pi hobbes (uwe_silv)",Japanese,14,46,0,0,0,0,0,"2022-01-15 02:57:14"
"Anastasia Borchuk (al2.borchuk)",Russian,14,14,0,0,0,0,0,"2020-04-14 13:22:49"
"Fikret Bilici (fikretbilici)",Turkish,14,13,0,0,0,0,0,"2020-06-21 17:16:11"
"EuiHo Hwang (euiho.hwang)",Korean,14,16,0,0,0,0,0,"2020-06-23 02:40:01"
"Zeeshan Rabbani (Zeera)",Hindi,14,25,0,0,0,0,0,"2020-09-15 11:32:01"
"Faiz Ahamed (faiznewton)",Tamil,14,31,0,0,0,0,0,"2021-05-06 23:06:46"
"Anastasia Borchuk (al2.borchuk)",Russian,14,14,0,0,0,0,0,"2020-04-14 13:22:49"
iamsurajbobade,Hindi,14,30,0,0,0,0,0,"2018-05-21 11:23:27"
"Sanji Vinsmock (mukanzhanbolat4)",Russian,14,14,0,0,0,0,0,"2020-02-18 12:38:54"
"Maro Chr (caprisunglasses)",Greek,14,17,0,0,0,0,0,"2021-08-17 06:53:33"
"Nenad Vukotic (vukotic.nenad)","Serbian (Cyrillic)",13,13,0,1,2,6,0,"2019-01-31 14:29:15"
"Uwe Mönks (schirinowski)",German,13,12,0,0,0,0,0,"2021-02-18 04:00:41"
"Dave (xdave)",Hungarian,13,11,0,0,0,0,0,"2020-03-02 20:56:50"
"Ana Kelly Vale (anakvale)","Portuguese, Brazilian",13,21,0,4,0,0,2,"2022-03-30 00:15:37"
GiorgioHerbie,Italian,13,15,0,0,0,0,0,"2022-01-17 17:35:40"
"Nenad Vukotic (vukotic.nenad)","Serbian (Cyrillic)",13,13,0,1,2,6,0,"2019-01-31 14:29:15"
soura2,Arabic,12,13,0,0,0,0,0,"2020-01-13 19:23:47"
"shreyas (techiespace)",Hindi,12,20,0,0,0,0,0,"2018-06-10 01:14:26"
"Sonu Sharma (riteetude)",Hindi,11,23,0,0,0,0,0,"2021-05-30 19:38:00"
Vmrc,French,11,12,0,2,0,0,0,"2020-11-02 05:35:06"
"Jo Chuang (josephch405)","Chinese Traditional",11,24,0,0,0,0,11,"2017-06-16 20:21:06"
"sathvic k (sathvictripleseven)",Telugu,10,17,0,0,0,0,0,"2020-09-11 08:11:32"
"Brian Camacho (bmcamacho)",Polish,10,11,0,0,1,0,0,"2020-08-03 02:27:28"
"Anonymous edgy nerd (yamentaad)",Arabic,10,13,0,1,0,0,0,"2018-05-06 09:23:57"
Vmrc,French,11,12,0,2,0,0,0,"2020-11-02 05:35:06"
"Ammar Naif (Ammar_Naif)",Arabic,11,11,0,4,0,0,0,"2022-01-15 05:16:41"
"Sonu Sharma (riteetude)",Hindi,11,23,0,0,0,0,0,"2021-05-30 19:38:00"
"Edwin van Rooij (edwinvrooij)",Dutch,10,13,0,17,0,0,0,"2018-11-05 03:59:10"
"Brian Camacho (bmcamacho)",Polish,10,11,0,0,1,1,0,"2020-08-03 02:27:28"
"Mihael Wagner (miha.wagner)",Slovenian,10,9,0,7,0,0,0,"2017-10-18 18:26:29"
"Hrant Hakobian (hrastgh1)",Armenian,10,9,0,0,0,0,0,"2021-08-29 15:22:10"
"sathvic k (sathvictripleseven)",Telugu,10,17,0,0,0,0,0,"2020-09-11 08:11:32"
"Ahmed Mosaad (ahmed.mosaad2018)",Arabic,10,12,0,6,0,0,0,"2021-02-03 18:45:43"
"Anonymous edgy nerd (yamentaad)",Arabic,10,13,0,1,0,0,0,"2018-05-06 09:23:57"
"Zesar Cebrián (Txorrota)",Spanish,10,44,0,0,0,0,0,"2022-02-09 01:34:32"
"Milan Siebenbürger (lennyd)",Czech,10,7,0,1,0,0,0,"2022-01-30 07:09:42"
"Suhaili Hassan (kucingsyg96)",Indonesian,9,10,0,0,0,0,0,"2018-06-10 11:55:09"
"Sourire Lucide (sourire_lucide)",Russian,9,10,0,0,1,0,0,"2018-03-22 01:37:55"
"Martin Vostatek (martinvostatek)",Czech,9,8,0,32,2,0,0,"2019-01-21 13:52:36"
"Seweryn Piotrowski (Draxxsx)",Polish,9,10,0,0,19,0,0,"2020-01-02 09:55:48"
"Sourire Lucide (sourire_lucide)",Russian,9,10,0,0,1,0,0,"2018-03-22 01:37:55"
"Jakob Weickmann (jweickm)",Japanese,8,21,0,0,0,0,0,"2021-10-05 11:10:25"
Rex123,Persian,8,8,0,0,0,0,0,"2017-07-01 00:47:42"
"Andrey ZaXeLoN (waragaa)",Russian,7,7,0,8,1,0,0,"2017-09-18 21:37:42"
"Konstantin (KZhidovinov)",Russian,7,7,0,0,0,0,0,"2020-01-29 13:35:12"
"Андрій Козицький (andriikozytskyi3807)",Ukrainian,7,12,0,2,0,0,0,"2020-09-26 20:31:56"
ftfoi,Norwegian,7,6,0,0,0,0,0,"2020-04-11 20:42:35"
"Vladimir Pavlychev (KeyJoo)",Russian,7,9,0,0,0,0,0,"2017-12-18 02:46:56"
"Vladimir Pavlychev (vovs03)",Russian,7,9,0,0,0,0,0,"2017-12-18 02:46:56"
"Felipe Chagas (chagretes)","Portuguese, Brazilian",7,8,0,0,3,0,5,"2022-01-10 12:20:25"
"Андрій Козицький (andriikozytskyi3807)",Ukrainian,7,12,0,2,0,0,0,"2020-09-26 20:31:56"
pkorove,Greek,7,7,0,0,0,0,0,"2020-03-07 11:36:12"
erfan2927,Persian,6,6,0,0,0,0,0,"2018-04-09 02:12:44"
"Burak Ceylan (7burakceylan)",Turkish,6,6,0,0,0,0,0,"2018-05-20 17:24:19"
ChloeLiang,Japanese,6,22,0,0,1,0,3,"2017-08-08 05:02:59"
"Sam (SorodonSorodon)",German,6,6,0,13,0,0,0,"2017-04-14 11:09:27"
"닉닉 (seohu9466)",Korean,6,14,0,13,0,0,0,"2017-10-09 23:08:15"
"Sarita Cajas (sarayanacajas)",Spanish,6,4,0,0,1,0,0,"2021-05-14 14:27:59"
ChloeLiang,Japanese,6,22,0,0,1,0,3,"2017-08-08 05:02:59"
"Manuel Tassi (Mannivu)",Italian,5,6,0,0,0,0,0,"2021-01-03 11:00:33"
"Tomáš Hrabáček (Hrabyyy)",Czech,5,3,0,0,0,0,0,"2021-05-27 11:58:11"
erfan2927,Persian,6,6,0,0,0,0,0,"2018-04-09 02:12:44"
"Burak Ceylan (7burakceylan)",Turkish,6,6,0,0,0,0,0,"2018-05-20 17:24:19"
andriikozytskyi2018,Ukrainian,5,5,0,0,0,0,0,"2017-09-03 05:24:43"
"Vitor Henrique (vitorhcl)","Portuguese, Brazilian",5,8,0,1,0,0,0,"2022-03-08 20:00:59"
"Matthias Joly (joly.matt12)",French,5,8,0,27,1,0,0,"2017-08-28 09:53:59"
"Tomáš Hrabáček (Hrabyyy)",Czech,5,3,0,0,1,0,0,"2021-05-27 11:58:11"
"Guerra Ivaneth (rossanaiva-04)",Spanish,5,7,0,0,0,0,0,"2019-02-03 16:48:59"
"Дмитрий Хапенков (d.khapenkov)",Russian,5,5,0,6,4,0,2,"2018-01-06 23:00:43"
"Matthias Joly (joly.matt12)",French,5,8,0,27,1,0,0,"2017-08-28 09:53:59"
"Micaela Pighin (micaelapiighin)",Spanish,5,6,0,1,0,0,0,"2019-10-09 23:32:42"
andriikozytskyi2018,Ukrainian,5,5,0,0,0,0,0,"2017-09-03 05:24:43"
marmo,German,4,4,0,0,0,0,0,"2021-01-13 01:16:35"
"Eli Besirov (elibesirov07)",Turkish,4,4,0,0,0,0,0,"2019-03-25 07:12:34"
"Lopo Isaac Fernández (rocapata)",Spanish,4,3,0,0,0,0,0,"2018-09-20 11:46:22"
bziuum,Polish,4,4,0,0,0,0,0,"2020-09-01 09:08:01"
"Manuel Tassi (Mannivu)",Italian,5,6,0,0,0,0,0,"2021-01-03 11:00:33"
"Neko123 (emandic11)","Serbian (Cyrillic)",4,4,0,57,0,0,0,"2021-04-21 15:33:29"
Magidxz,Arabic,3,3,0,0,0,0,0,"2021-01-05 05:02:54"
"mohammadali barati (mabaraty)",Persian,3,3,0,0,0,0,0,"2021-07-10 05:54:44"
"Lopo Isaac Fernández (rocapata)",Spanish,4,3,0,0,0,0,0,"2018-09-20 11:46:22"
"Eli Besirov (elibesirov07)",Turkish,4,4,0,0,0,0,0,"2019-03-25 07:12:34"
marmo,German,4,4,0,0,0,0,0,"2021-01-13 01:16:35"
bziuum,Polish,4,4,0,0,3,0,0,"2020-09-01 09:08:01"
"Craig Foobar (craig.foobar)",German,3,3,0,25,0,0,0,"2022-02-20 16:55:47"
Katarin,Ukrainian,3,3,0,0,0,0,0,"2022-03-17 14:44:59"
"Sarath S (CyberShark)",Tamil,3,7,0,0,0,0,0,"2020-08-27 22:43:16"
"Vagner Roberto (vagner.trompete)","Portuguese, Brazilian",3,3,0,0,0,0,0,"2017-12-30 17:54:26"
"Igor Piskun (i_piskun)",Ukrainian,3,3,0,0,0,0,0,"2018-01-19 15:20:27"
"Cláudio Bernardo (claudiobernardo.ti)","Portuguese, Brazilian",3,4,0,1,0,0,0,"2019-01-08 14:41:10"
"Unnie Here (Carb)",Hindi,3,8,0,0,0,0,0,"2020-03-18 23:34:35"
REMOVED_USER,"Portuguese, Brazilian",3,4,0,0,0,0,0,"2018-11-18 09:02:37"
"Thoum Ptrgnt (thomas.petrignet)",French,3,3,0,2,0,3,0,"2017-09-23 19:25:52"
"Oleg Kogut (kogut_oleg)",Ukrainian,3,3,0,0,0,0,0,"2018-12-28 14:31:02"
carsten_kafke,German,3,3,0,43,0,0,3,"2017-10-27 13:27:47"
"Vagner Roberto (vagner.trompete)","Portuguese, Brazilian",3,3,0,0,0,0,0,"2017-12-30 17:54:26"
"Igor Piskun (i_piskun)",Ukrainian,3,3,0,0,0,0,0,"2018-01-19 15:20:27"
"Andrea Bianchi (andreawhite1597)",Italian,3,1,0,1,0,0,0,"2018-01-21 17:45:48"
"Cláudio Bernardo (claudiobernardo.ti)","Portuguese, Brazilian",3,4,0,1,0,0,0,"2019-01-08 14:41:10"
"Hiohana Rilary (hiohanarilary)","Portuguese, Brazilian",3,4,0,0,0,0,0,"2019-07-31 20:42:20"
"joabe gabriel (joabegabrielcma1)","Portuguese, Brazilian",3,4,0,0,0,0,0,"2018-08-21 09:08:59"
Magidxz,Arabic,3,3,0,0,0,0,0,"2021-01-05 05:02:54"
"Péter Bernát (bernatp)",Hungarian,3,2,0,0,0,0,0,"2019-11-30 15:50:33"
"Martin Zimdahl (zimdahlmartin)",Swedish,3,2,0,0,1,0,3,"2018-09-15 04:39:22"
"joabe gabriel (joabegabrielcma1)","Portuguese, Brazilian",3,4,0,0,0,0,0,"2018-08-21 09:08:59"
"Gabriel Cavalcante (gabrielc.alves14)","Portuguese, Brazilian",3,4,0,0,0,0,0,"2018-08-06 22:24:54"
"Martin Zimdahl (zimdahlmartin)",Swedish,3,2,0,0,1,0,3,"2018-09-15 04:39:22"
atomjani,Hungarian,3,3,0,0,0,0,0,"2019-01-19 00:49:25"
"أم محمد تقي (souadboudia19)",Arabic,2,2,0,0,0,0,0,"2020-06-13 15:24:17"
"FAy FAy (fayfayfay52)","Chinese Traditional",2,5,0,0,0,0,0,"2017-10-06 08:53:21"
chavs1997,Russian,2,2,0,9,0,0,0,"2018-05-18 16:58:19"
Soroor_SI,Persian,2,2,0,0,0,0,0,"2018-06-10 06:28:27"
"Ilyas Fekhar (il47yas)",Arabic,2,2,0,0,0,0,0,"2018-04-17 22:00:41"
"hesamiranii (esam.matouri)",Persian,2,2,0,0,0,0,0,"2018-09-22 16:33:36"
"fatemeh s (fargolseifoori3)",Persian,2,2,0,0,0,0,0,"2019-01-31 12:06:57"
amei,"Portuguese, Brazilian",2,2,0,0,0,0,0,"2018-04-19 19:42:28"
"Naveen jai krishna (njsbpolymer1)",Tamil,2,5,0,0,0,0,0,"2020-01-10 14:19:41"
"Danial Agh (danialagh)",Persian,2,3,0,0,0,0,0,"2019-03-30 13:24:16"
"Walid Baazia (walidbaazia2005)",Arabic,2,1,0,0,0,0,0,"2021-01-27 12:47:34"
"Ali Zaida (alizaeda92)",Arabic,2,2,0,0,0,0,0,"2019-12-01 11:47:00"
LNDDYL,"Chinese Traditional",2,4,0,0,0,0,2,"2018-04-22 04:00:19"
"Ño Bí Tã (pt614553)",Arabic,2,8,0,1,0,0,0,"2021-05-22 20:41:01"
"mohammadali barati (mabaraty)",Persian,3,3,0,0,0,0,0,"2021-07-10 05:54:44"
"Hiohana Rilary (hiohanarilary)","Portuguese, Brazilian",3,4,0,0,0,0,0,"2019-07-31 20:42:20"
"Tejaswini Boppana (Tejaswini)",Telugu,3,1,0,0,0,0,0,"2021-08-27 23:48:55"
"Andrea Bianchi (andreawhite1597)",Italian,3,1,0,1,0,0,0,"2018-01-21 17:45:48"
"Ño Bí Tã (pt614553)",Arabic,2,8,0,1,0,2,0,"2021-05-22 20:41:01"
"Judith Ayala (Azul1612)",Spanish,2,1,0,0,0,1,0,"2021-05-18 17:07:19"
REMOVED_USER,Ukrainian,2,2,0,0,0,0,0,"2017-06-15 12:24:44"
"Valerij D (vala.dobler)",German,2,2,0,0,0,0,0,"2018-09-22 09:38:27"
"Alex Stein (diefaust1993)",Russian,2,2,0,4,4,0,2,"2017-07-13 06:56:17"
"조화정 (yunjoo337)",Korean,2,2,0,0,0,0,0,"2019-06-16 22:25:31"
omerfarukbas,Turkish,2,3,0,19,2,0,0,"2017-08-14 16:10:35"
"Balthazar Aubard (Balatzar)",French,2,5,0,0,1,0,0,"2017-09-23 01:42:57"
"Ahmed Bazazo (ahmedbazazo)",Arabic,2,2,0,0,0,0,0,"2022-02-19 20:11:09"
"Ali Zaida (alizaeda92)",Arabic,2,2,0,0,0,0,0,"2019-12-01 11:47:00"
"FAy FAy (fayfayfay52)","Chinese Traditional",2,5,0,0,0,0,0,"2017-10-06 08:53:21"
Soroor_SI,Persian,2,2,0,0,0,0,0,"2018-06-10 06:28:27"
chavs1997,Russian,2,2,0,9,0,0,0,"2018-05-18 16:58:19"
"Naveen jai krishna (njsbpolymer1)",Tamil,2,5,0,0,0,0,0,"2020-01-10 14:19:41"
omerfarukbas,Turkish,2,3,0,19,2,0,0,"2017-08-14 16:10:35"
"Ilyas Fekhar (il47yas)",Arabic,2,2,0,0,0,0,0,"2018-04-17 22:00:41"
"Héctor Mañas García (hectodium)",Catalan,2,3,0,0,0,0,0,"2021-10-02 20:32:09"
"Walid Baazia (walidbaazia2005)",Arabic,2,1,0,0,0,0,0,"2021-01-27 12:47:34"
"fatemeh s (fargolseifoori3)",Persian,2,2,0,0,0,0,0,"2019-01-31 12:06:57"
"hesamiranii (esam.matouri)",Persian,2,2,0,0,0,0,0,"2018-09-22 16:33:36"
REMOVED_USER,Ukrainian,2,2,0,0,0,0,0,"2017-06-15 12:24:44"
"Alex Stein (diefaust1993)",Russian,2,2,0,4,4,0,2,"2017-07-13 06:56:17"
amei,"Portuguese, Brazilian",2,2,0,0,0,0,0,"2018-04-19 19:42:28"
"أم محمد تقي (souadboudia19)",Arabic,2,2,0,0,0,0,0,"2020-06-13 15:24:17"
LNDDYL,"Chinese Traditional",2,4,0,0,0,0,2,"2018-04-22 04:00:19"
"조화정 (yunjoo337)",Korean,2,2,0,0,0,0,0,"2019-06-16 22:25:31"
"Sidali Aymen (sidaliaymen950)",Arabic,2,2,0,0,0,0,0,"2022-01-31 18:50:59"
"Danial Agh (danialagh)",Persian,2,3,0,0,0,0,0,"2019-03-30 13:24:16"
iSoron2,"Portuguese, Brazilian",1,1,0,0,0,0,0,"2017-03-18 17:56:29"
"Anton (tT0NG)","Chinese Traditional",1,2,0,0,0,0,1,"2017-07-06 14:18:39"
"Luca Gori (grolcu)",Italian,1,2,0,0,0,0,0,"2020-09-26 23:26:15"
axd,Spanish,1,1,0,15,0,0,0,"2017-09-12 05:48:51"
iSoron2,"Portuguese, Brazilian",1,1,0,0,0,0,0,"2017-03-18 17:56:29"
REMOVED_USER,Russian,1,2,0,6,1,0,1,"2019-12-26 05:37:01"
"Wibi Cahyo (wbcahyoh)",Indonesian,1,3,0,0,0,0,0,"2017-12-14 06:35:58"
jonesses,German,1,1,0,1,0,0,1,"2021-01-01 08:03:18"
"Anton (tT0NG)","Chinese Traditional",1,2,0,0,0,0,1,"2017-07-06 14:18:39"
"박찌 (perpact20)",Korean,1,1,0,0,0,0,0,"2018-02-10 10:11:44"
"Alan Jeon (skyisle)",Korean,1,2,0,8,0,0,0,"2018-01-09 10:46:00"
"Maria Fefelova (mashafefel)",Russian,1,1,0,0,0,0,0,"2019-05-18 02:03:56"
"Anastasiia Bondarenko (nastasya.bondarenko.97)",Russian,1,1,0,0,0,0,0,"2019-06-07 17:43:08"
"Kan Black (kanblack.va)",Vietnamese,1,2,0,0,0,1,0,"2019-01-15 03:50:10"
"Patrick Pimenta (trickap1)","Portuguese, Brazilian",1,1,0,0,0,0,0,"2018-12-01 14:31:21"
"Dagna Q (dagnaq)",,0,0,0,0,0,0,0,"2017-08-06 01:42:52"
Kamalakannan,,0,0,0,0,0,0,0,"2017-05-14 11:40:23"
"Éjbãss Übbeî (littlebittlebottle)",Norwegian,0,0,0,152,0,0,0,"2017-07-05 21:12:02"
"Равиль Мифтахов (ravilmif47)",Russian,0,0,0,1,0,0,0,"2019-08-12 21:58:30"
"박찌 (perpact20)",Korean,1,1,0,0,0,0,0,"2018-02-10 10:11:44"
"Kan Black (kanblack.va)",Vietnamese,1,2,0,0,0,1,0,"2019-01-15 03:50:10"
"Anastasiia Bondarenko (nastasya.bondarenko.97)",Russian,1,1,0,0,0,0,0,"2019-06-07 17:43:08"
"Wibi Cahyo (wbcahyoh)",Indonesian,1,3,0,0,0,0,0,"2017-12-14 06:35:58"
sanyoniket,,0,0,0,0,0,0,0,"2019-07-23 12:58:40"
REMOVED_USER,,0,0,0,0,0,0,0,"2020-02-01 03:47:48"
"vi ve (VimalV)",,0,0,0,0,0,0,0,"2021-02-08 02:35:45"
"George Merkulov (george142.emarket)",Russian,0,0,0,11,0,0,0,"2019-06-09 19:47:02"
"Yasin Okumus (lacivert)",Turkish,0,0,0,1,0,0,0,"2018-02-07 04:13:51"
"Petros Bleyan (coolbleyan)",Russian,0,0,0,14,0,0,0,"2017-08-18 18:37:18"
"LeMeD (LeMeS)",French,0,0,0,2,0,0,0,"2021-02-06 15:35:00"
"Sri Harsha Bhogi (sriharshabhogi)",,0,0,0,0,0,0,0,"2018-09-02 05:31:53"
Irsgram,Russian,0,0,0,1,0,0,0,"2019-09-30 16:42:20"
"Baran Özavcı (n2141n)",Turkish,0,0,0,1,0,0,0,"2022-02-26 04:32:51"
"Masataka Yakura (myakura)",Japanese,0,0,0,1,0,0,0,"2021-09-03 22:10:36"
ava_rfie,Persian,0,0,0,1,0,0,0,"2019-06-09 16:19:24"
"Mateusz Teteruk (mttet)",Polish,0,0,0,1,0,0,0,"2021-01-23 13:09:59"
EwanB,,0,0,0,0,0,0,0,"2019-11-19 10:04:38"
Fazy1380,,0,0,0,0,0,0,0,"2021-04-10 11:02:53"
"Lori Amico (lavodkaclyde2323)",Italian,0,0,0,1,0,0,0,"2017-04-09 10:08:13"
"Florian Stuhlmann (stuhlmann)",German,0,0,0,10,0,0,0,"2017-04-15 04:04:00"
"عبد الناصر سعيد الثبيتي (asaeed)",,0,0,0,0,0,0,0,"2018-03-13 02:09:35"
"Rivo Zängov (Eraser)",,0,0,0,0,0,0,0,"2020-10-13 04:38:26"
Hayder21,,0,0,0,0,0,0,0,"2019-12-31 10:56:24"
T-v-Gerwen,Dutch,0,0,0,47,0,0,0,"2018-03-02 10:26:33"
"Eduard Boboc (edi.boboc33)",Romanian,0,0,0,4,0,0,0,"2019-12-16 09:08:39"
"George Merkulov (george142.emarket)",Russian,0,0,0,11,0,0,0,"2019-06-09 19:47:02"
philfr49,French,0,0,0,2,0,0,0,"2018-09-03 14:20:32"
"عبد الناصر سعيد الثبيتي (asaeed)",,0,0,0,0,0,0,0,"2018-03-13 02:09:35"
"Thomas Orlita (Thomas995)",Czech,0,0,0,1,0,0,0,"2017-12-24 04:08:27"
"Edmunds Edmundam (edmundam)",,0,0,0,0,0,0,0,"2020-06-01 14:18:18"
"Elmo (oberknecht)",,0,0,0,0,0,0,0,"2020-04-16 08:45:50"
"Равиль Мифтахов (ravilmif47)",Russian,0,0,0,1,0,0,0,"2019-08-12 21:58:30"
"Manny Farsangy (manifarsangi)",Persian,0,0,0,12,0,0,0,"2021-08-10 05:32:28"
"Samuel Przeździęk (samek22)",Polish,0,0,0,1,0,0,0,"2021-08-01 00:49:01"
"Saiprasath B (Saiprasath)",,0,0,0,0,0,0,0,"2021-07-11 11:10:41"
shuvo786,,0,0,0,0,0,0,0,"2019-11-13 00:18:12"
"Edmunds Edmundam (edmundam)",,0,0,0,0,0,0,0,"2020-06-01 14:18:18"
Itch,,0,0,0,0,0,0,0,"2017-10-16 09:18:42"
"Manny Farsangy (manifarsangi)",Persian,0,0,0,12,0,0,0,"2021-08-10 05:32:28"
"Matus Zdansky (matuszdansky)",,0,0,0,0,0,0,0,"2019-10-20 13:52:24"
"Thomas Orlita (Thomas995)",Czech,0,0,0,1,0,0,0,"2017-12-24 04:08:27"
Irsgram,Russian,0,0,0,1,0,0,0,"2019-09-30 16:42:20"
EmanAmini,,0,0,0,0,0,0,0,"2017-03-31 13:27:43"
mushin,,0,0,0,0,0,0,0,"2020-02-02 04:08:05"
"Elmo (oberknecht)",,0,0,0,0,0,0,0,"2020-04-16 08:45:50"
AnggaRifandi,,0,0,0,0,0,0,0,"2017-03-31 19:28:35"
"darkkingredian (rediancool)",,0,0,0,0,0,0,0,"2021-07-27 16:04:32"
"Sri Harsha Bhogi (sriharshabhogi)",,0,0,0,0,0,0,0,"2018-09-02 05:31:53"
"Nat Fomicheva (natac)",Russian,0,0,0,3,0,0,0,"2019-01-25 14:35:02"
mdrobulis,,0,0,0,0,0,0,0,"2018-05-24 01:40:42"
"Sarah BCNN (fsarahboucenna)",French,0,0,0,16,0,0,0,"2018-02-11 11:07:36"
"Arjun K. (arjunkdot)",,0,0,0,0,0,0,0,"2020-09-20 11:16:18"
REMOVED_USER,Czech,0,0,0,18,0,0,0,"2018-03-27 06:19:52"
martyaberger,,0,0,0,0,0,0,0,"2019-01-01 18:48:08"
BongTran,Vietnamese,0,0,0,2,0,0,0,"2018-04-24 05:16:07"
"Arttu Ylhävuori (arttu.ylhavuori)",,0,0,0,0,0,0,0,"2019-07-24 15:03:42"
"Никита Карамов (nikita.karamoff)",Russian,0,0,0,10,0,0,0,"2018-10-29 03:57:21"
rooban23,,0,0,0,0,0,0,0,"2020-09-15 11:49:14"
"Eliška Roubalová (roubaeli)",Czech,0,0,0,6,0,0,0,"2019-12-31 12:47:29"
valney.faria,"Portuguese, Brazilian",0,0,0,1,0,0,0,"2020-02-02 14:45:02"
"Алтынбек Наурызғали (altinbeknaurizgali)",Russian,0,0,0,1,0,0,0,"2020-08-12 13:03:49"
REMOVED_USER,,0,0,0,0,0,0,0,"2018-10-27 15:34:36"
REMOVED_USER,,0,0,0,0,0,0,0,"2018-08-24 00:17:43"
REMOVED_USER,,0,0,0,0,0,0,0,"2020-02-01 03:47:48"
"Arjun K. (arjunkdot)",,0,0,0,0,0,0,0,"2020-09-20 11:16:18"
EwanB,,0,0,0,0,0,0,0,"2019-11-19 10:04:38"
shuvo786,,0,0,0,0,0,0,0,"2019-11-13 00:18:12"
"Pro AAA (pro1010)",Arabic,0,0,0,1,0,0,0,"2022-02-14 03:32:44"
" (manuL96)",,0,0,0,0,0,0,0,"2022-05-06 23:34:55"
"Rivo Zängov (Eraser)",,0,0,0,0,0,0,0,"2020-10-13 04:38:26"
ashik8113,,0,0,0,0,0,0,0,"2022-04-13 11:58:26"
deepbird,,0,0,0,0,0,0,0,"2022-04-11 03:21:05"
REMOVED_USER,,0,0,0,0,0,0,0,"2018-10-27 15:34:36"
Elham1361,,0,0,0,0,0,0,0,"2018-10-27 12:01:06"
dongchen.yue,German,0,0,0,4,0,0,0,"2020-09-12 15:05:59"
"Ahnaf Tajwar (atn4404)",,0,0,0,0,0,0,0,"2018-10-16 11:13:30"
martyaberger,,0,0,0,0,0,0,0,"2019-01-01 18:48:08"
AsadullahIlyas,,0,0,0,0,0,0,0,"2019-01-04 06:14:15"
droidahmed,Arabic,0,0,0,7,0,0,0,"2018-01-31 02:18:49"
philfr49,French,0,0,0,2,0,0,0,"2018-09-03 14:20:32"
"Ahmed Nazir (ahmednazir333)",,0,0,0,0,0,0,0,"2018-05-06 12:10:27"
"Balaji Jayaraman (jkbalaji1103)",,0,0,0,0,0,0,0,"2017-10-30 22:12:27"
"Wellington Ribeiro (wellington.rib)",,0,0,0,0,0,0,0,"2017-11-16 07:32:25"
"Javid IRAN (twitteriran98)",Persian,0,0,0,1,0,0,0,"2017-11-25 16:47:25"
"박인호 (wphestiraid)",Korean,0,0,0,2,0,0,0,"2018-01-05 00:33:14"
"akmal shafiq (mohdakmalshafiq)",,0,0,0,0,0,0,0,"2021-11-01 01:04:50"
"Sylwuskak (sylwuskak)",Polish,0,0,0,1,0,0,0,"2022-01-25 04:19:53"
"Yunsu Kim (yunsukim86)",Korean,0,0,0,2,0,0,0,"2022-01-14 06:33:43"
"Pumpith Ungsupanit (pumpithu)",,0,0,0,0,0,0,0,"2019-01-19 23:47:57"
Sandhu564.,,0,0,0,0,0,0,0,"2020-12-14 01:27:45"
"Quentin Hibon (hiq)",,0,0,0,0,0,0,0,"2021-02-07 16:39:31"
AhmedDz,Arabic,0,0,0,1,0,0,0,"2017-12-31 10:12:31"
"Nat Fomicheva (natac)",Russian,0,0,0,3,0,0,0,"2019-01-25 14:35:02"
HemanthMeda,Telugu,0,0,0,4,0,0,0,"2021-12-01 14:02:14"
"darkkingredian (rediancool)",,0,0,0,0,0,0,0,"2021-07-27 16:04:32"
catemlitten,Japanese,0,0,0,1,0,0,0,"2021-11-17 15:06:02"
"Said Tahsin Dane (tasomaniac)",,0,0,0,0,0,0,0,"2021-09-25 05:31:01"
"Matus Zdansky (matuszdansky)",,0,0,0,0,0,0,0,"2019-10-20 13:52:24"
mdrobulis,,0,0,0,0,0,0,0,"2018-05-24 01:40:42"
valney.faria,"Portuguese, Brazilian",0,0,0,1,0,0,0,"2020-02-02 14:45:02"
"Petros Bleyan (coolbleyan)",Russian,0,0,0,14,0,0,0,"2017-08-18 18:37:18"
"Карлен Шаухаев (KarlenShaukhaev)",,0,0,0,0,0,0,0,"2020-04-27 08:53:49"
"Shuvashish Sahoo (shuvashish76)",,0,0,0,0,0,0,0,"2020-09-17 09:10:09"
REMOVED_USER,,0,0,0,0,0,0,0,"2018-01-05 16:56:12"
NairaDNV,Spanish,0,0,0,9,0,0,0,"2018-01-05 19:10:33"
"Dagna Q (dagnaq)",,0,0,0,0,0,0,0,"2017-08-06 01:42:52"
Sandhu564.,,0,0,0,0,0,0,0,"2020-12-14 01:27:45"
AhmedDz,Arabic,0,0,0,1,0,0,0,"2017-12-31 10:12:31"
"Quentin Hibon (hiq)",,0,0,0,0,0,0,0,"2021-02-07 16:39:31"
"Ahmed Nazir (ahmednazir333)",,0,0,0,0,0,0,0,"2018-05-06 12:10:27"
"박인호 (wphestiraid)",Korean,0,0,0,2,0,0,0,"2018-01-05 00:33:14"
Raulbertassi,,0,0,0,0,0,0,0,"2018-01-07 17:23:18"
"Карлен Шаухаев (KarlenShaukhaev)",,0,0,0,0,0,0,0,"2020-04-27 08:53:49"
"Javid IRAN (twitteriran98)",Persian,0,0,0,1,0,0,0,"2017-11-25 16:47:25"
"Wellington Ribeiro (wellington.rib)",,0,0,0,0,0,0,0,"2017-11-16 07:32:25"
dimateos,,0,0,0,0,0,0,0,"2021-01-10 06:29:52"
"Katherine Alexandra Flórez Ramírez (katherine.florez12)",Spanish,0,0,0,46,0,0,0,"2018-01-20 02:18:32"
"Balaji Jayaraman (jkbalaji1103)",,0,0,0,0,0,0,0,"2017-10-30 22:12:27"
"reza golestanzadeh (reza.golestanzadeh)",Persian,0,0,0,1,0,0,0,"2020-10-21 12:07:20"
farbod66,Persian,0,0,0,1,0,0,0,"2018-01-20 11:04:23"
"Muhammet Furkan ALMACI (furkan.almaci)",Turkish,0,0,0,1,0,0,0,"2017-10-29 13:44:56"
dongchen.yue,German,0,0,0,4,0,0,0,"2020-09-12 15:05:59"
"Алтынбек Наурызғали (altinbeknaurizgali)",Russian,0,0,0,1,0,0,0,"2020-08-12 13:03:49"
rooban23,,0,0,0,0,0,0,0,"2020-09-15 11:49:14"
NairaDNV,Spanish,0,0,0,9,0,0,0,"2018-01-05 19:10:33"
"Katherine Alexandra Flórez Ramírez (katherine.florez12)",Spanish,0,0,0,46,0,0,0,"2018-01-20 02:18:32"
Itch,,0,0,0,0,0,0,0,"2017-10-16 09:18:42"
"Yasin Okumus (lacivert)",Turkish,0,0,0,1,0,0,0,"2018-02-07 04:13:51"
"Eduard Boboc (edi.boboc33)",Romanian,0,0,0,4,0,0,0,"2019-12-16 09:08:39"
Hayder21,,0,0,0,0,0,0,0,"2019-12-31 10:56:24"
"Eliška Roubalová (roubaeli)",Czech,0,0,0,6,0,0,0,"2019-12-31 12:47:29"
Fazy1380,,0,0,0,0,0,0,0,"2021-04-10 11:02:53"
"Arttu Ylhävuori (arttu.ylhavuori)",,0,0,0,0,0,0,0,"2019-07-24 15:03:42"
EmanAmini,,0,0,0,0,0,0,0,"2017-03-31 13:27:43"
AnggaRifandi,,0,0,0,0,0,0,0,"2017-03-31 19:28:35"
"Lori Amico (lavodkaclyde2323)",Italian,0,0,0,1,0,0,0,"2017-04-09 10:08:13"
"Florian Stuhlmann (stuhlmann)",German,0,0,0,10,0,0,0,"2017-04-15 04:04:00"
Kamalakannan,,0,0,0,0,0,0,0,"2017-05-14 11:40:23"
farbod66,Persian,0,0,0,1,0,0,0,"2018-01-20 11:04:23"
"vi ve (VimalV)",,0,0,0,0,0,0,0,"2021-02-08 02:35:45"
"Éjbãss Übbeî (littlebittlebottle)",Norwegian,0,0,0,152,0,0,0,"2017-07-05 21:12:02"
"LeMeD (LeMeS)",French,0,0,0,2,0,0,0,"2021-02-06 15:35:00"
BongTran,Vietnamese,0,0,0,2,0,0,0,"2018-04-24 05:16:07"
REMOVED_USER,Czech,0,0,0,18,0,0,0,"2018-03-27 06:19:52"
mushin,,0,0,0,0,0,0,0,"2020-02-02 04:08:05"
"Mateusz Teteruk (mttet)",Polish,0,0,0,1,0,0,0,"2021-01-23 13:09:59"
"Sarah BCNN (fsarahboucenna)",French,0,0,0,16,0,0,0,"2018-02-11 11:07:36"
droidahmed,Arabic,0,0,0,7,0,0,0,"2018-01-31 02:18:49"
"Никита Карамов (nikita.karamoff)",Russian,0,0,0,10,0,0,0,"2018-10-29 03:57:21"
1 Name Languages Translated (Words) Target Words Approved (Words) Voted "+" votes received "-" votes received Winning (Words) Joined
2 Alinson Xavier (iSoron) Portuguese, Brazilian; Japanese; Spanish; Portuguese; Italian; Chinese Simplified; French; Hungarian; German; Arabic; Hindi; Slovenian; Catalan; Greek; Korean; Bulgarian; Chinese Traditional; Polish; Russian; Serbian (Cyrillic); Turkish; Ukrainian; Czech; Indonesian; Croatian; Danish; Dutch; Romanian; Swedish; Basque; Persian; Finnish; Vietnamese; Telugu; Tamil; Afrikaans; Esperanto; Hebrew Portuguese, Brazilian; Japanese; Chinese Simplified; Italian; Spanish; Portuguese; French; Hungarian; Chinese Traditional; Turkish; Russian; Polish; Arabic; German; Korean; Greek; Catalan; Bulgarian; Hindi; Slovenian; Ukrainian; Serbian (Cyrillic); Czech; Indonesian; Croatian; Danish; Dutch; Romanian; Swedish; Basque; Persian; Finnish; Vietnamese; Tamil; Telugu; Hebrew; Esperanto; Norwegian; Afrikaans; Slovak; Armenian; Serbian (Latin); Uyghur 14808 15497 17227 18825 1282 1308 0 1779 1896 80 84 4274 4315 2016-03-05 18:35:27
3 Slobodan Simić (Слободан Симић) (slsimic) Serbian (Latin); Serbian (Cyrillic) 2054 1831 2114 12 33 0 1991 2021-02-03 14:26:07
4 Oglaigh Rystard (oglaignaheireann) Ukrainian; Portuguese; Catalan; Greek; Basque; Romanian; Italian 1103 1037 1327 1 13 6 954 2017-03-31 09:13:19
5 dukelc Slovak 1046 993 0 0 0 0 0 2020-08-27 14:02:41
6 David (Cliff122) Swedish 1040 1019 725 6 0 0 700 2020-01-21 13:56:55
7 Omer I.S. (omeritzics) Hebrew 1000 1040 900 927 1097 1122 14 1 0 946 975 2020-10-11 20:10:51
8 dukelc Intan Ayunda (Intan_Ayunda) Slovak Indonesian 919 818 880 811 0 985 0 0 0 0 729 2020-08-27 14:02:41 2020-10-14 07:51:58
9 Intan Ayunda (Intan_Ayunda) Mihail Stefanov (MStefanov) Indonesian Bulgarian 800 755 793 794 962 3 0 0 2 0 711 2 2020-10-14 07:51:58 2017-03-31 16:09:02
10 KMakoto Chinese Traditional 745 1146 949 0 0 0 745 2019-10-22 04:19:52
11 Evren (evrenkiymaz) Turkish 688 604 0 71 5 28 1 22 0 2020-10-04 03:39:16
12 andaryon Czech 681 606 0 108 0 0 0 2021-11-25 10:20:45
13 Antti Kallio (antti.kallio) Finnish 668 539 0 5 0 0 0 2021-07-03 05:54:44
14 David Nos (david.nos) Catalan; Spanish 667 731 0 0 1 0 0 2020-01-04 10:15:36
15 Antti Kallio (antti.kallio) androide74 Finnish Italian 650 662 525 681 0 0 2 0 0 0 2021-07-03 05:54:44 2020-02-06 15:46:28
16 androide74 Osoitz Italian Basque 644 655 659 595 0 2 9 0 0 0 3 2020-02-06 15:46:28 2018-01-23 14:07:47
17 Dmitriy Bogdanov (di72nn) Russian 643 589 1197 0 36 0 515 2017-03-31 10:00:48
18 Tomairuka Japanese 633 1636 909 43 0 0 564 2020-12-12 12:14:22
Dmitriy Bogdanov (di72nn) Russian 625 572 1197 0 36 0 515 2017-03-31 10:00:48
19 reyhoon Persian 624 759 0 1 3 1 0 2020-10-01 18:17:23
20 Osoitz Saeed Esmaili (saaeed.es20) Basque Persian 610 586 545 795 0 9 5 0 4 0 3 0 2018-01-23 14:07:47 2020-11-26 15:41:15
Saeed Esmaili (saaeed.es20) Persian 568 774 0 5 4 0 0 2020-11-26 15:41:15
21 fabian.bouchal German 548 527 0 6 0 3 72 2020-01-07 06:43:37
22 boban77 Isti (eisti) Czech Hungarian 509 528 461 476 0 2 0 0 0 0 2020-04-30 13:18:24 2020-12-03 12:02:51
23 Yoav Argov (YoavArgov) boban77 Hebrew Czech 501 509 461 0 0 2 1 29 8 0 103 0 2017-04-28 07:23:01 2020-04-30 13:18:24
24 Martim Parente (martimparente) Portuguese 505 542 0 38 0 0 0 2020-08-26 10:22:11
25 Yoav Argov (YoavArgov) Hebrew 501 461 0 0 1 8 91 2017-04-28 07:23:01
26 REMOVED_USER Norwegian 501 498 501 0 148 0 501 2017-07-05 19:02:25
Martim Parente (Sharlimar) Portuguese 497 534 0 38 0 0 0 2020-08-26 10:22:11
27 chrrris1987 (Chrrris1987) Dutch 467 478 0 23 0 0 0 2020-02-03 05:26:04
Huy Ngo (huyngo) Vietnamese 461 695 0 1 0 0 0 2020-01-26 11:58:36
28 黄克 (hk13127) Chinese Simplified 461 765 0 1 0 0 24 2020-01-17 23:16:03
29 Arkadiusz Bubak (epitek) Huy Ngo (huyngo) Polish Vietnamese 458 461 416 695 29 0 24 1 0 3 0 0 2020-11-05 05:11:58 2020-01-26 11:58:36
30 Arkadiusz Bubak (epitek) Polish 458 416 52 24 9 4 0 2020-11-05 05:11:58
31 marco.baturan Esperanto 452 452 0 0 0 0 0 2020-06-23 02:49:46
32 Sief Tarek (sieftarek135) Arabic 447 455 0 0 0 0 0 2021-02-07 14:35:21
33 Alparslan Şakçi (sakci) Turkish 436 372 0 118 1 0 0 2022-01-14 12:03:11
34 JY3 Chinese Simplified 427 727 295 0 1 0 222 2021-03-08 08:53:35
35 Samuel Guay (SamGuay) French 426 486 0 6 0 0 0 2020-06-25 07:14:38
36 Diana Karaseva (Sun_Dianka) Russian 399 373 0 10 1 0 209 2020-01-30 06:40:02
37 Alexander Jansson (dalecarlian) Swedish 396 406 507 0 0 3 399 2017-06-21 01:37:32
38 luiandresgonzalez Spanish 383 403 0 1 28 0 0 2020-07-11 14:20:44
39 Thamara Andrade (tkcandrade) Portuguese, Brazilian 380 387 0 0 1 0 252 239 2020-01-09 19:35:48
40 Sølv Ræven (soelvraeven) Danish 370 370 0 0 0 0 0 2020-11-28 16:46:18
Isti (eisti) Hungarian 367 329 0 0 0 0 0 2020-12-03 12:02:51
41 Anh Quân (dangquanuet) Vietnamese 362 530 0 42 2 0 0 2017-10-29 12:27:44
42 gapszi Hungarian 348 301 0 86 0 0 0 2019-04-08 01:35:54
JY3 Chinese Simplified 345 585 278 0 1 0 207 2021-03-08 08:53:35
43 Mahdi Nasiri (mahdi.nasiri) Persian 343 465 0 39 3 1 0 2017-07-14 09:17:25
44 Seoyul Korean 339 825 0 0 27 0 0 2017-06-21 08:11:39
45 Magimai Prakasam (magimai) Tamil 336 831 0 12 0 0 0 2018-04-15 21:16:08
46 Michael Malak (MichaelKMalak) Arabic 304 271 0 0 0 1 0 0 2020-05-26 19:47:58
47 Blinkin Dutch 297 334 0 5 0 0 0 2021-06-14 10:30:05
48 Elina Salminen (salminen.elina.m) Finnish 297 227 0 0 0 0 0 2021-01-06 01:28:57
49 ayane.m Japanese 292 863 0 1 3 5 0 22 2019-11-20 03:28:26
50 Blinkin Marius Teufelweich (teufelweich) Dutch German 284 267 318 272 0 611 1 4 0 13 0 1 0 146 2021-06-14 10:30:05 2021-03-12 04:11:38
51 Marius Teufelweich (teufelweich) hypnotichemionus German Chinese Simplified 249 256 430 606 0 4 0 2 8 0 146 19 2021-03-12 04:11:38 2020-03-08 01:46:25
52 cobalt59 German 237 234 0 1 24 1 132 2017-06-05 05:18:33
QWERT (lurenjia01) Chinese Simplified 236 407 0 0 8 0 19 2020-03-08 01:46:25
53 beriain Basque 234 235 0 0 2 0 0 2017-03-31 15:42:28
54 pnhpnh Vietnamese 225 343 0 1 3 0 0 2017-11-27 12:06:07
55 Dika Fitrian Dwi Putra (OsamuDazai) Indonesian 221 215 0 0 0 0 48 2020-07-13 04:40:27
56 easyrepro Telugu 214 297 0 0 0 4 0 0 2020-06-12 12:52:10
57 taras-ko Ukrainian 211 183 0 1 4 0 19 2017-10-26 16:52:22
58 sojusnik German 207 200 1 0 30 0 66 2017-04-03 17:11:56
59 axmed99 Andrij Mizyk (andmizyk) Ukrainian 203 204 177 178 0 40 0 0 53 2021-04-01 03:56:20
60 Heru Yen (heruyen) Indonesian 201 201 0 0 0 0 25 2020-06-29 18:39:15
61 Vijaykumar Borkar (vjkumar) Hindi 200 364 0 11 0 0 0 2021-08-06 16:12:15
62 Ishmaeel _translator Turkish French 193 199 174 227 0 129 11 6 0 0 0 2017-10-04 03:54:00 2021-07-06 07:54:12
63 Ishmaeel Turkish 193 174 0 129 17 6 0 2017-10-04 03:54:00
64 oscfd Spanish 192 201 0 2 4 0 0 2021-05-21 17:58:22
65 bruhwut Vietnamese 189 292 0 1 0 0 0 2021-05-21 07:16:30
66 Aputsiak Niels Janussen (aputtu) Danish 187 200 0 0 0 0 0 2019-08-28 05:47:42
_translator French 181 206 0 11 0 0 0 2021-07-06 07:54:12
67 fbruna17 Danish 181 179 0 1 0 0 0 2021-01-28 15:48:47
68 Bryanx Dutch 179 168 0 5 2 0 0 2019-11-21 17:08:12
69 Omry Cohen (omrycohen) Hebrew 175 156 0 1 0 0 33 2021-01-18 07:33:23
Bryanx Dutch 174 165 0 5 0 0 0 2019-11-21 17:08:12
70 Pierre GALIEGUE (pierre.galiegue) French 171 194 0 24 4 0 0 2020-08-16 11:41:35
71 bruhwut plitwin Vietnamese Polish 171 168 268 151 0 1 2 0 31 0 0 49 2021-05-21 07:16:30 2021-01-20 06:18:37
72 DionysosDV Greek 165 153 0 0 0 0 0 2021-02-27 19:05:25
73 Gustavo Lima (GustavoLima) Portuguese 158 177 0 1 4 10 0 2020-08-26 10:35:05
74 oscfd Ravi Rami (ramiravi) Spanish Hindi 155 151 166 248 0 1 0 4 0 0 0 2021-05-21 17:58:22 2021-10-10 09:19:40
plitwin Polish 145 128 0 1 16 0 26 2021-01-20 06:18:37
75 Lương Vĩnh Khang (LuongVinhKhang) Vietnamese 144 256 0 0 46 1 0 2017-08-10 10:05:58
76 azzamsa Indonesian 142 136 0 48 0 1 26 2017-06-16 18:29:45
77 yoding (yodingc) Chinese Traditional; Chinese Simplified 141 271 0 10 0 0 0 2021-07-07 01:45:45
78 Neysa Nasywa (neysanasywa) Indonesian 140 141 0 0 0 0 60 2020-11-18 10:32:10
79 mohmans Arabic 139 141 0 12 1 0 0 2020-11-23 02:48:00
80 Eilif Adelvice (adelvice) Spanish 139 154 0 96 1 0 0 2021-08-05 07:20:21
81 Mohammed Imthath (mimthath4) Tamil 136 274 0 0 11 0 0 2018-02-15 22:41:15
82 carllacan Catalan 134 155 0 2 0 0 0 2021-11-13 13:12:07
83 roptat French 132 154 0 112 89 5 0 2017-04-19 16:54:47
84 Trần Thái (tranhoangthai2001) Vietnamese 127 186 0 8 1 0 0 2018-03-01 10:51:39
85 OP Smosher (teenwolffan44) Serbian (Cyrillic) 124 122 0 0 0 0 18 2020-11-05 09:41:35
86 4001982248998 Esperanto 122 119 0 0 0 0 0 2017-10-08 04:13:02
87 StoP4Me (Lcqp) Romanian 121 119 0 0 3 0 0 2018-05-06 18:51:59
88 alalloush Arabic 118 129 0 2 2 14 0 3 0 2017-03-31 12:37:17
Eilif Adelvice (adelvice) Spanish 116 126 0 96 0 0 0 2021-08-05 07:20:21
Sebastian05067 Spanish 114 133 0 55 28 0 0 2017-05-14 00:48:16
89 Tanya (MagicUnderHood) Russian 114 98 0 19 0 0 54 2019-04-21 10:44:03
90 REMOVED_USER Sebastian05067 Arabic Spanish 111 114 106 133 0 22 55 21 28 2 0 0 2018-01-05 07:01:45 2017-05-14 00:48:16
91 mohmans REMOVED_USER Arabic 109 111 103 106 0 2 22 0 22 0 2 0 2020-11-23 02:48:00 2018-01-05 07:01:45
92 Iabin Arteaga (iabin) Spanish 108 111 0 4 21 0 0 2017-08-26 21:08:54
93 Ivan Krušlin (krux3r) Croatian 108 122 503 0 0 0 108 2017-03-31 09:15:24
94 2kaafone Finnish 105 90 0 0 0 0 0 2019-08-12 06:58:48
95 Adam Jurkiewicz (hasztagg) Polish 104 105 529 0 0 0 104 2017-03-31 09:50:51
96 just a name bro (justanamebr0) Danish 98 109 0 0 1 0 0 2019-06-19 11:57:55
97 Nam Nguyen (namnl2706) Vietnamese 95 137 0 0 0 0 0 2020-08-18 23:02:33
98 손유정 (yuwon1213) Korean 95 57 0 0 0 1 0 0 2021-03-30 05:25:33
99 ranmagen Hebrew 91 78 0 0 0 0 0 2021-02-16 05:44:31
100 LoneWanderer Chinese Traditional 90 137 0 4 0 0 0 2020-09-29 05:24:48
Vo - (voyl) Chinese Traditional 89 126 0 0 5 0 0 2020-09-02 23:34:42
101 ikkaz Indonesian 89 84 0 5 0 0 4 2019-09-02 19:58:54
102 Vo - (voyl) Chinese Traditional 89 126 0 0 5 0 0 2020-09-02 23:34:42
103 Irene K (Heaun) Korean 88 75 0 25 0 0 0 2020-03-16 11:31:12
104 Prosta4ok_ua Ukrainian 87 84 0 1 0 0 17 2020-01-23 19:43:41
105 Kumar Anand (kumar0500) Hindi 87 125 0 0 0 0 0 2020-11-07 02:46:09
106 Ohad Edri (ohadalte) Hebrew 85 79 0 0 1 3 18 13 2020-07-04 03:42:09
107 helectron Persian 84 102 0 1 0 0 0 2021-03-02 04:10:51
108 Radu Cebotari (wildProgrammer) Romanian 84 92 0 1 0 0 0 2020-02-05 01:20:00
109 Bruces Lee (aplusbdesign) Korean 82 66 0 0 0 0 0 2021-08-23 11:27:18
110 Israa Z (sosozozo) Arabic 79 87 0 43 14 0 3 2017-11-27 14:10:50
111 Sofia Neves (sofiasonev) Portuguese, Brazilian 79 84 0 1 0 0 46 2020-03-12 18:19:46
112 Jacob Roller (jdr28070) Korean 79 61 0 0 0 1 0 0 2020-01-03 11:36:40
113 Tiralka French 79 91 0 92 1 0 0 2018-02-09 18:39:01
114 Israa Z (sosozozo) Toni Mustonen (toni.mustonen) Arabic Finnish 79 78 87 72 0 43 0 12 5 0 3 0 2017-11-27 14:10:50 2017-09-02 05:34:12
Toni Mustonen (toni.mustonen) Finnish 78 72 0 0 0 0 0 2017-09-02 05:34:12
Fauz Aladeem (topfauz) Arabic 76 77 0 0 0 1 0 2020-02-21 22:46:12
115 Michael (quelbs) German 76 75 0 1 0 0 39 2020-08-18 07:39:26
116 Oliver Gronowski (OliverGronowski) Fauz Aladeem (topfauz) German Arabic 70 76 69 77 0 5 0 0 0 1 0 2021-05-14 16:37:10 2020-02-21 22:46:12
117 Radoslaw Biernacki (radoslaw.biernacki) Polish 70 74 0 56 1 0 1 2020-12-15 17:55:31
118 Oliver Gronowski (OliverGronowski) German 70 69 0 5 2 0 0 2021-05-14 16:37:10
119 RealDonald Dutch 67 69 0 121 10 0 0 2017-06-23 20:10:12
120 sirekanyan Armenian; Russian 66 65 0 0 0 0 0 2020-04-18 11:32:52
121 Константин К. (kocyak1991) Russian 64 60 0 0 1 2 0 2018-06-10 13:39:37
122 Laura Sophie (laurasophie20) German 62 67 0 4 0 0 0 2018-01-06 14:21:24
Alparslan Sakci (sakci) Turkish 61 55 0 11 0 0 0 2021-06-10 11:59:22
123 raden20 Indonesian 61 62 177 0 1 0 64 2017-04-09 22:04:23
124 Peter Williams (williamspete001) Japanese 60 173 0 2 0 0 3 2020-01-01 13:17:44
125 Jan Wojtecki (j4nw) Polish 58 46 0 0 0 0 26 2017-11-02 05:42:14
126 Deepak Bharathi (deepakbharathi1994) Tamil 56 107 0 0 11 4 0 2017-09-17 08:00:31
Peter Williams (williamspete001) Japanese 55 147 0 2 0 0 3 2020-01-01 13:17:44
127 Андрій Козицький (andriikozytskyi1108) Ukrainian 52 52 0 0 1 0 0 2018-10-22 01:45:08
128 Nil riera (nilriera2000) Catalan 52 61 0 1 0 2 0 0 2021-06-22 16:37:44
129 Neoone (Neooneqq) Romanian 51 54 0 0 0 0 0 2022-05-05 20:42:11
130 REMOVED_USER Italian 51 52 0 2 0 0 0 2017-08-21 05:15:31
131 govindap Japanese; Hindi 51 114 0 6 1 0 0 2020-06-02 20:15:52
132 Mare Geldenhuys (mare.geldenhuys) Afrikaans 50 57 0 0 0 0 0 2017-10-20 18:00:14
133 Mahmoud Magdy (M7moudManson) Arabic 49 60 0 6 8 1 0 2021-08-21 09:01:38
134 Behnood HRazy (behnoodhr) Persian 49 70 0 0 0 0 0 2017-11-25 10:57:21
tat bz (Tat_i) German 48 56 0 55 0 0 27 2021-03-26 05:12:54
135 J3ll3nl Dutch 48 48 0 0 17 1 3 2017-03-31 11:56:09
136 Andrew Firnes (Anechan) tat bz (Tat_i) Russian German 47 48 47 56 0 3 55 0 0 1 29 27 2019-09-18 09:51:59 2021-03-26 05:12:54
andowero Czech 47 38 0 0 0 0 0 2020-01-20 02:29:01
137 vach Armenian 47 36 0 0 0 0 0 2020-04-18 16:53:12
138 Andrew Firnes (Anechan) Russian 47 47 0 3 0 0 29 2019-09-18 09:51:59
139 andowero Czech 47 38 0 0 3 0 0 2020-01-20 02:29:01
140 Rahul Shishodia (rahul.shishodia.10) Hindi 46 85 0 6 5 1 0 2018-12-24 22:18:19
141 Coni Ragni (coni2ragnii) Spanish 46 46 0 0 0 0 0 2021-02-28 20:18:37
142 Cp0204 Chinese Simplified 45 72 0 0 0 0 0 2019-08-20 11:04:27
143 cc (cavaz) Italian 44 41 0 0 0 0 0 2017-04-01 04:21:08
144 Boban Jagertraum (boban40) Czech 43 38 0 2 1 18 1 0 2017-03-31 09:39:16
145 Kamil Dziadek (prso94) Polish 43 39 0 0 2 6 0 0 2020-04-06 17:12:06
Me Me (gentelwom) Arabic 42 40 0 0 0 0 0 2020-11-08 20:44:01
Ali Elsheikh (aelsheikh1987) Arabic 42 41 0 0 0 0 0 2021-06-16 10:17:26
Balázs Keresztury (belidzs) Hungarian 42 41 501 0 7 0 38 2017-04-06 02:40:24
146 andreea.muscalagiu Romanian 42 52 0 1 0 0 0 2017-10-22 07:19:49
147 Mateusz Duda (MateuszDuda) Me Me (gentelwom) Polish Arabic 42 42 40 0 0 0 0 0 2021-08-17 11:27:11 2020-11-08 20:44:01
148 MStefanov Balázs Keresztury (belidzs) Bulgarian Hungarian 41 42 55 41 2 501 0 2 7 0 2 38 2017-03-31 16:09:02 2017-04-06 02:40:24
149 Sofia Veijonen (Suklaa) (sofia.veijonen) Mateusz Duda (MateuszDuda) Finnish Polish 40 42 33 42 0 0 0 6 0 0 2018-03-07 09:24:22 2021-08-17 11:27:11
150 Ali Elsheikh (aelsheikh1987) Arabic 42 41 0 0 0 0 0 2021-06-16 10:17:26
151 Ali Zali (stm19951995) Persian 40 60 0 0 0 0 0 2020-03-23 19:57:26
152 Limin Lu (liminlu) Sofia Veijonen (Suklaa) (sofia.veijonen) Chinese Simplified Finnish 39 40 79 33 503 0 0 0 0 39 0 2017-03-31 09:49:35 2018-03-07 09:24:22
153 dusanstrgar Slovenian 39 41 0 0 0 0 0 2017-03-31 10:30:28
154 Limin Lu (liminlu) Chinese Simplified 39 79 503 0 0 0 39 2017-03-31 09:49:35
155 Anshoe Tamil 38 65 0 14 0 0 0 2018-01-02 11:06:52
156 anasshm Arabic 37 36 0 9 0 0 0 2019-01-27 04:07:22
157 hrexen Armenian 37 37 0 0 0 0 0 2020-12-09 02:30:34
158 Abdulrahman (D7M) Arabic 36 39 0 0 0 0 0 2020-01-29 18:55:30
Maria Chushnyakova (maria.ch) Russian 36 31 0 3 0 0 0 2021-08-17 03:23:58
159 REMOVED_USER Swedish 36 33 0 5 1 0 0 2018-09-29 17:47:33
160 xphsis Basque 36 31 0 0 0 0 0 2022-01-02 08:16:19
161 Maria Chushnyakova (maria.ch) Russian 36 31 0 3 0 0 0 2021-08-17 03:23:58
162 長谷川知里 (chase0213) Japanese 34 138 0 13 0 0 24 2018-12-14 10:52:44
163 Piotr Łuczyński (peterluczynski) Polish 33 30 0 6 10 0 2 2020-01-29 07:27:40
164 Luis E. Perichon (luisperichon) Spanish 33 40 0 104 0 0 0 2017-09-04 13:46:06
Piotr Łuczyński (peterluczynski) Polish 33 30 0 6 5 0 2 2020-01-29 07:27:40
165 milad farahani (miladfarmahini90) Persian 33 44 0 18 1 0 3 2017-08-31 16:09:00
166 JoeLi Chinese Traditional 31 70 0 12 0 0 24 2017-06-25 05:32:48
167 andriikozytskyi2625 Ukrainian 31 23 0 0 0 0 0 2019-07-08 00:16:41
168 REMOVED_USER Russian 31 30 0 2 4 0 3 2018-12-03 23:55:47
169 Moastafa Arabic 31 25 0 0 0 0 0 2020-07-06 11:37:53
170 hamza gamal (hamzagamal4444) Arabic 31 28 0 0 0 0 0 2020-08-03 15:23:34
REMOVED_USER Russian 31 30 0 2 4 0 3 2018-12-03 23:55:47
JoeLi Chinese Traditional 31 70 0 12 0 0 24 2017-06-25 05:32:48
171 yancyn Chinese Simplified 30 40 0 0 0 0 1 2020-05-18 20:06:03
비니몬youtube (khj01025276475) Korean 29 25 0 0 0 0 0 2020-02-09 20:44:35
172 Ruud Schouten (ruudschouten) Dutch 29 32 0 41 3 0 0 2017-07-22 17:49:17
173 Aaron Dalton (Perlkonig) 비니몬youtube (khj01025276475) French Korean 26 29 25 0 141 0 1 0 0 0 2018-01-14 12:58:19 2020-02-09 20:44:35
174 avelneve Indonesian 29 28 0 0 0 0 0 2022-04-13 13:26:10
175 Niraj Yadav (neverforgetniraj) Hindi 26 48 0 0 0 0 0 2017-04-11 02:26:50
176 Guillaume Collic (gcollic) Aaron Dalton (Perlkonig) French 26 28 25 0 126 141 11 1 0 0 2017-05-05 16:13:00 2018-01-14 12:58:19
Radoslaw Biernacki (radoslaw.biernacki) Polish 26 24 0 8 0 0 1 2020-12-15 17:55:31
177 Jonny I (jonny99dj) Italian 26 26 0 5 0 0 0 2017-10-07 07:35:34
178 Guillaume Collic (gcollic) French 26 28 0 126 11 0 0 2017-05-05 16:13:00
179 Pan_Filuta Czech 25 21 0 5 8 0 3 2017-04-29 12:55:14
180 Eddie (eddieattaboy) Chinese Traditional 25 34 0 1 0 0 0 2020-11-04 21:48:05
Pan_Filuta Czech 25 21 0 5 4 0 3 2017-04-29 12:55:14
181 eduard83 (barbany.eduard) Catalan 24 25 0 2 0 0 0 2019-06-26 14:59:47
182 A Aa (ylayzlmimashisafyoutub) Arabic 23 33 0 34 1 1 0 2021-09-27 15:34:26
183 Caner Başaran (basarancaner) Turkish 23 21 0 0 26 1 0 2017-04-09 06:34:59
184 Ľuboš Čaky (lubos.caky) Slovak 23 22 0 0 0 0 0 2019-07-02 16:51:44
Caner Başaran (basarancaner) Turkish 23 21 0 0 21 0 0 2017-04-09 06:34:59
hodanli Turkish 22 26 0 0 1 0 0 2017-11-03 14:33:41
gnu-ewm Polish 22 23 0 6 0 0 0 2021-02-24 03:42:01
185 Neeraj Verma (verma.neeraj.in) Hindi 22 37 0 0 1 0 0 2018-07-23 07:16:41
186 gnu-ewm Polish 22 23 0 6 2 0 0 2021-02-24 03:42:01
187 hodanli Turkish 22 26 0 0 1 0 0 2017-11-03 14:33:41
188 Alcarkse (alexis.brusle) French 21 25 0 7 11 0 0 2017-08-06 09:32:29
olbotta Italian 20 25 0 2 0 0 0 2021-06-06 04:22:55
189 Shashwat (goforgold) Hindi 20 33 0 0 0 0 0 2020-05-17 10:34:42
190 olbotta Italian 20 25 0 2 0 0 0 2021-06-06 04:22:55
191 can13 Turkish 19 14 0 8 0 0 0 2021-01-03 10:39:03
192 사자솥 (toke1597) Korean 19 19 0 0 0 0 0 2020-02-04 13:36:11
193 KenKailer Arabic 19 25 0 0 0 0 0 2022-05-10 06:16:54
194 İsa Eş (IsaEs) Turkish 19 17 0 0 6 2 0 2017-06-20 07:30:22
195 Magdalena Urbańczyk (madziia139) Polish 19 19 0 0 0 0 0 2017-10-21 03:01:04
196 sheeCesu French 19 18 0 48 4 0 0 2017-12-21 17:01:39
can13 Turkish 19 14 0 8 0 0 0 2021-01-03 10:39:03
İsa Eş (IsaEs) Turkish 19 17 0 0 6 1 0 2017-06-20 07:30:22
사자솥 (toke1597) Korean 19 19 0 0 0 0 0 2020-02-04 13:36:11
197 axikman11111 Uyghur 18 19 0 0 0 0 0 2018-10-13 12:25:31
Hoon Jung (hooni100) Korean 17 10 0 0 0 0 0 2021-01-03 02:26:54
Ceara Lopez (cealopez) Spanish 17 18 0 0 5 1 0 2017-08-22 22:56:13
takoyakibento Korean 17 13 0 3 0 0 0 2020-08-01 08:44:15
198 Adeline31 French 17 20 0 3 0 0 0 2019-12-06 00:00:11
199 engineeringforgood Hoon Jung (hooni100) Russian Korean 16 17 15 10 0 0 0 0 16 0 2021-01-22 03:32:35 2021-01-03 02:26:54
200 takoyakibento Korean 17 13 0 3 0 0 0 2020-08-01 08:44:15
201 Ceara Lopez (cealopez) Spanish 17 18 0 0 5 1 0 2017-08-22 22:56:13
202 bretzel15 German 16 20 0 0 0 0 0 2020-04-06 02:49:14
Şamil Ateşoğlu (m.samilatesoglu) Turkish 16 22 0 11 6 3 0 2017-07-05 18:37:08
203 DebatablySane Bulgarian 16 15 0 48 0 0 0 2017-07-10 15:13:18
204 Şamil Ateşoğlu (m.samilatesoglu) Turkish 16 22 0 11 6 3 0 2017-07-05 18:37:08
205 engineeringforgood Russian 16 15 0 0 0 0 16 2021-01-22 03:32:35
206 Bhava Tharini (bhavidanush) Tamil 15 37 0 0 0 0 0 2019-10-09 05:43:11
207 Maro Chr (caprisunglasses) Greek 14 17 0 0 0 0 0 2021-08-17 06:53:33
208 Zeynep Esen (nezihaesen50) Turkish 14 13 0 0 0 0 0 2020-01-28 07:05:15
209 iamsurajbobade Hindi 14 30 0 0 0 0 0 2018-05-21 11:23:27
210 Faiz Ahamed (faiznewton) Tamil 14 31 0 0 0 0 0 2021-05-06 23:06:46
211 Sanji Vinsmock (mukanzhanbolat4) Russian 14 14 0 0 0 0 0 2020-02-18 12:38:54
212 Zeeshan Rabbani (Zeera) Hindi 14 25 0 0 0 0 0 2020-09-15 11:32:01
213 pi hobbes (uwe_silv) Japanese 14 46 0 0 0 0 0 2022-01-15 02:57:14
214 Anastasia Borchuk (al2.borchuk) Russian 14 14 0 0 0 0 0 2020-04-14 13:22:49
215 Fikret Bilici (fikretbilici) Turkish 14 13 0 0 0 0 0 2020-06-21 17:16:11
216 EuiHo Hwang (euiho.hwang) Korean 14 16 0 0 0 0 0 2020-06-23 02:40:01
Zeeshan Rabbani (Zeera) Hindi 14 25 0 0 0 0 0 2020-09-15 11:32:01
Faiz Ahamed (faiznewton) Tamil 14 31 0 0 0 0 0 2021-05-06 23:06:46
Anastasia Borchuk (al2.borchuk) Russian 14 14 0 0 0 0 0 2020-04-14 13:22:49
iamsurajbobade Hindi 14 30 0 0 0 0 0 2018-05-21 11:23:27
Sanji Vinsmock (mukanzhanbolat4) Russian 14 14 0 0 0 0 0 2020-02-18 12:38:54
Maro Chr (caprisunglasses) Greek 14 17 0 0 0 0 0 2021-08-17 06:53:33
Nenad Vukotic (vukotic.nenad) Serbian (Cyrillic) 13 13 0 1 2 6 0 2019-01-31 14:29:15
217 Uwe Mönks (schirinowski) German 13 12 0 0 0 0 0 2021-02-18 04:00:41
218 Dave (xdave) Hungarian 13 11 0 0 0 0 0 2020-03-02 20:56:50
219 Ana Kelly Vale (anakvale) Portuguese, Brazilian 13 21 0 4 0 0 2 2022-03-30 00:15:37
220 GiorgioHerbie Italian 13 15 0 0 0 0 0 2022-01-17 17:35:40
221 Nenad Vukotic (vukotic.nenad) Serbian (Cyrillic) 13 13 0 1 2 6 0 2019-01-31 14:29:15
222 soura2 Arabic 12 13 0 0 0 0 0 2020-01-13 19:23:47
223 shreyas (techiespace) Hindi 12 20 0 0 0 0 0 2018-06-10 01:14:26
Sonu Sharma (riteetude) Hindi 11 23 0 0 0 0 0 2021-05-30 19:38:00
Vmrc French 11 12 0 2 0 0 0 2020-11-02 05:35:06
224 Jo Chuang (josephch405) Chinese Traditional 11 24 0 0 0 0 11 2017-06-16 20:21:06
225 sathvic k (sathvictripleseven) Vmrc Telugu French 10 11 17 12 0 0 2 0 0 0 2020-09-11 08:11:32 2020-11-02 05:35:06
226 Brian Camacho (bmcamacho) Ammar Naif (Ammar_Naif) Polish Arabic 10 11 11 0 0 4 1 0 0 0 2020-08-03 02:27:28 2022-01-15 05:16:41
227 Anonymous edgy nerd (yamentaad) Sonu Sharma (riteetude) Arabic Hindi 10 11 13 23 0 1 0 0 0 0 2018-05-06 09:23:57 2021-05-30 19:38:00
228 Edwin van Rooij (edwinvrooij) Dutch 10 13 0 17 0 0 0 2018-11-05 03:59:10
229 Brian Camacho (bmcamacho) Polish 10 11 0 0 1 1 0 2020-08-03 02:27:28
230 Mihael Wagner (miha.wagner) Slovenian 10 9 0 7 0 0 0 2017-10-18 18:26:29
231 Hrant Hakobian (hrastgh1) Armenian 10 9 0 0 0 0 0 2021-08-29 15:22:10
232 sathvic k (sathvictripleseven) Telugu 10 17 0 0 0 0 0 2020-09-11 08:11:32
233 Ahmed Mosaad (ahmed.mosaad2018) Arabic 10 12 0 6 0 0 0 2021-02-03 18:45:43
234 Anonymous edgy nerd (yamentaad) Arabic 10 13 0 1 0 0 0 2018-05-06 09:23:57
235 Zesar Cebrián (Txorrota) Spanish 10 44 0 0 0 0 0 2022-02-09 01:34:32
236 Milan Siebenbürger (lennyd) Czech 10 7 0 1 0 0 0 2022-01-30 07:09:42
237 Suhaili Hassan (kucingsyg96) Indonesian 9 10 0 0 0 0 0 2018-06-10 11:55:09
238 Sourire Lucide (sourire_lucide) Russian 9 10 0 0 1 0 0 2018-03-22 01:37:55
239 Martin Vostatek (martinvostatek) Czech 9 8 0 32 2 0 0 2019-01-21 13:52:36
240 Seweryn Piotrowski (Draxxsx) Polish 9 10 0 0 19 0 0 2020-01-02 09:55:48
241 Sourire Lucide (sourire_lucide) Jakob Weickmann (jweickm) Russian Japanese 9 8 10 21 0 0 1 0 0 0 2018-03-22 01:37:55 2021-10-05 11:10:25
242 Rex123 Persian 8 8 0 0 0 0 0 2017-07-01 00:47:42
243 Andrey ZaXeLoN (waragaa) Russian 7 7 0 8 1 0 0 2017-09-18 21:37:42
244 Konstantin (KZhidovinov) Russian 7 7 0 0 0 0 0 2020-01-29 13:35:12
Андрій Козицький (andriikozytskyi3807) Ukrainian 7 12 0 2 0 0 0 2020-09-26 20:31:56
245 ftfoi Norwegian 7 6 0 0 0 0 0 2020-04-11 20:42:35
246 Vladimir Pavlychev (KeyJoo) Vladimir Pavlychev (vovs03) Russian 7 9 0 0 0 0 0 2017-12-18 02:46:56
247 Felipe Chagas (chagretes) Portuguese, Brazilian 7 8 0 0 3 0 5 2022-01-10 12:20:25
248 Андрій Козицький (andriikozytskyi3807) Ukrainian 7 12 0 2 0 0 0 2020-09-26 20:31:56
249 pkorove Greek 7 7 0 0 0 0 0 2020-03-07 11:36:12
250 erfan2927 ChloeLiang Persian Japanese 6 6 22 0 0 0 1 0 0 3 2018-04-09 02:12:44 2017-08-08 05:02:59
Burak Ceylan (7burakceylan) Turkish 6 6 0 0 0 0 0 2018-05-20 17:24:19
251 Sam (SorodonSorodon) German 6 6 0 13 0 0 0 2017-04-14 11:09:27
252 닉닉 (seohu9466) Korean 6 14 0 13 0 0 0 2017-10-09 23:08:15
253 Sarita Cajas (sarayanacajas) Spanish 6 4 0 0 1 0 0 2021-05-14 14:27:59
254 ChloeLiang erfan2927 Japanese Persian 6 22 6 0 0 1 0 0 3 0 2017-08-08 05:02:59 2018-04-09 02:12:44
255 Manuel Tassi (Mannivu) Burak Ceylan (7burakceylan) Italian Turkish 5 6 6 0 0 0 0 0 2021-01-03 11:00:33 2018-05-20 17:24:19
256 Tomáš Hrabáček (Hrabyyy) andriikozytskyi2018 Czech Ukrainian 5 3 5 0 0 0 0 0 2021-05-27 11:58:11 2017-09-03 05:24:43
257 Vitor Henrique (vitorhcl) Portuguese, Brazilian 5 8 0 1 0 0 0 2022-03-08 20:00:59
258 Matthias Joly (joly.matt12) French 5 8 0 27 1 0 0 2017-08-28 09:53:59
259 Tomáš Hrabáček (Hrabyyy) Czech 5 3 0 0 1 0 0 2021-05-27 11:58:11
260 Guerra Ivaneth (rossanaiva-04) Spanish 5 7 0 0 0 0 0 2019-02-03 16:48:59
261 Дмитрий Хапенков (d.khapenkov) Russian 5 5 0 6 4 0 2 2018-01-06 23:00:43
Matthias Joly (joly.matt12) French 5 8 0 27 1 0 0 2017-08-28 09:53:59
262 Micaela Pighin (micaelapiighin) Spanish 5 6 0 1 0 0 0 2019-10-09 23:32:42
263 andriikozytskyi2018 Manuel Tassi (Mannivu) Ukrainian Italian 5 5 6 0 0 0 0 0 2017-09-03 05:24:43 2021-01-03 11:00:33
marmo German 4 4 0 0 0 0 0 2021-01-13 01:16:35
Eli Besirov (elibesirov07) Turkish 4 4 0 0 0 0 0 2019-03-25 07:12:34
Lopo Isaac Fernández (rocapata) Spanish 4 3 0 0 0 0 0 2018-09-20 11:46:22
bziuum Polish 4 4 0 0 0 0 0 2020-09-01 09:08:01
264 Neko123 (emandic11) Serbian (Cyrillic) 4 4 0 57 0 0 0 2021-04-21 15:33:29
265 Magidxz Lopo Isaac Fernández (rocapata) Arabic Spanish 3 4 3 0 0 0 0 0 2021-01-05 05:02:54 2018-09-20 11:46:22
266 mohammadali barati (mabaraty) Eli Besirov (elibesirov07) Persian Turkish 3 4 3 4 0 0 0 0 0 2021-07-10 05:54:44 2019-03-25 07:12:34
267 marmo German 4 4 0 0 0 0 0 2021-01-13 01:16:35
268 bziuum Polish 4 4 0 0 3 0 0 2020-09-01 09:08:01
269 Craig Foobar (craig.foobar) German 3 3 0 25 0 0 0 2022-02-20 16:55:47
270 Katarin Ukrainian 3 3 0 0 0 0 0 2022-03-17 14:44:59
271 Sarath S (CyberShark) Tamil 3 7 0 0 0 0 0 2020-08-27 22:43:16
272 Vagner Roberto (vagner.trompete) Portuguese, Brazilian 3 3 0 0 0 0 0 2017-12-30 17:54:26
273 Igor Piskun (i_piskun) Ukrainian 3 3 0 0 0 0 0 2018-01-19 15:20:27
274 Cláudio Bernardo (claudiobernardo.ti) Portuguese, Brazilian 3 4 0 1 0 0 0 2019-01-08 14:41:10
275 Unnie Here (Carb) Hindi 3 8 0 0 0 0 0 2020-03-18 23:34:35
276 REMOVED_USER Portuguese, Brazilian 3 4 0 0 0 0 0 2018-11-18 09:02:37
277 Thoum Ptrgnt (thomas.petrignet) French 3 3 0 2 0 3 0 2017-09-23 19:25:52
278 Oleg Kogut (kogut_oleg) Ukrainian 3 3 0 0 0 0 0 2018-12-28 14:31:02
279 carsten_kafke German 3 3 0 43 0 0 3 2017-10-27 13:27:47
280 Vagner Roberto (vagner.trompete) Magidxz Portuguese, Brazilian Arabic 3 3 0 0 0 0 0 2017-12-30 17:54:26 2021-01-05 05:02:54
Igor Piskun (i_piskun) Ukrainian 3 3 0 0 0 0 0 2018-01-19 15:20:27
Andrea Bianchi (andreawhite1597) Italian 3 1 0 1 0 0 0 2018-01-21 17:45:48
Cláudio Bernardo (claudiobernardo.ti) Portuguese, Brazilian 3 4 0 1 0 0 0 2019-01-08 14:41:10
Hiohana Rilary (hiohanarilary) Portuguese, Brazilian 3 4 0 0 0 0 0 2019-07-31 20:42:20
joabe gabriel (joabegabrielcma1) Portuguese, Brazilian 3 4 0 0 0 0 0 2018-08-21 09:08:59
281 Péter Bernát (bernatp) Hungarian 3 2 0 0 0 0 0 2019-11-30 15:50:33
282 Martin Zimdahl (zimdahlmartin) joabe gabriel (joabegabrielcma1) Swedish Portuguese, Brazilian 3 2 4 0 0 1 0 0 3 0 2018-09-15 04:39:22 2018-08-21 09:08:59
283 Gabriel Cavalcante (gabrielc.alves14) Portuguese, Brazilian 3 4 0 0 0 0 0 2018-08-06 22:24:54
284 Martin Zimdahl (zimdahlmartin) Swedish 3 2 0 0 1 0 3 2018-09-15 04:39:22
285 atomjani Hungarian 3 3 0 0 0 0 0 2019-01-19 00:49:25
286 أم محمد تقي (souadboudia19) mohammadali barati (mabaraty) Arabic Persian 2 3 2 3 0 0 0 0 0 2020-06-13 15:24:17 2021-07-10 05:54:44
287 FAy FAy (fayfayfay52) Hiohana Rilary (hiohanarilary) Chinese Traditional Portuguese, Brazilian 2 3 5 4 0 0 0 0 0 2017-10-06 08:53:21 2019-07-31 20:42:20
288 chavs1997 Tejaswini Boppana (Tejaswini) Russian Telugu 2 3 2 1 0 9 0 0 0 0 2018-05-18 16:58:19 2021-08-27 23:48:55
289 Soroor_SI Andrea Bianchi (andreawhite1597) Persian Italian 2 3 2 1 0 0 1 0 0 0 2018-06-10 06:28:27 2018-01-21 17:45:48
290 Ilyas Fekhar (il47yas) Ño Bí Tã (pt614553) Arabic 2 2 8 0 0 1 0 0 2 0 2018-04-17 22:00:41 2021-05-22 20:41:01
hesamiranii (esam.matouri) Persian 2 2 0 0 0 0 0 2018-09-22 16:33:36
fatemeh s (fargolseifoori3) Persian 2 2 0 0 0 0 0 2019-01-31 12:06:57
amei Portuguese, Brazilian 2 2 0 0 0 0 0 2018-04-19 19:42:28
Naveen jai krishna (njsbpolymer1) Tamil 2 5 0 0 0 0 0 2020-01-10 14:19:41
Danial Agh (danialagh) Persian 2 3 0 0 0 0 0 2019-03-30 13:24:16
Walid Baazia (walidbaazia2005) Arabic 2 1 0 0 0 0 0 2021-01-27 12:47:34
Ali Zaida (alizaeda92) Arabic 2 2 0 0 0 0 0 2019-12-01 11:47:00
LNDDYL Chinese Traditional 2 4 0 0 0 0 2 2018-04-22 04:00:19
Ño Bí Tã (pt614553) Arabic 2 8 0 1 0 0 0 2021-05-22 20:41:01
291 Judith Ayala (Azul1612) Spanish 2 1 0 0 0 1 0 2021-05-18 17:07:19
REMOVED_USER Ukrainian 2 2 0 0 0 0 0 2017-06-15 12:24:44
292 Valerij D (vala.dobler) German 2 2 0 0 0 0 0 2018-09-22 09:38:27
Alex Stein (diefaust1993) Russian 2 2 0 4 4 0 2 2017-07-13 06:56:17
조화정 (yunjoo337) Korean 2 2 0 0 0 0 0 2019-06-16 22:25:31
omerfarukbas Turkish 2 3 0 19 2 0 0 2017-08-14 16:10:35
293 Balthazar Aubard (Balatzar) French 2 5 0 0 1 0 0 2017-09-23 01:42:57
294 Ahmed Bazazo (ahmedbazazo) Arabic 2 2 0 0 0 0 0 2022-02-19 20:11:09
295 Ali Zaida (alizaeda92) Arabic 2 2 0 0 0 0 0 2019-12-01 11:47:00
296 FAy FAy (fayfayfay52) Chinese Traditional 2 5 0 0 0 0 0 2017-10-06 08:53:21
297 Soroor_SI Persian 2 2 0 0 0 0 0 2018-06-10 06:28:27
298 chavs1997 Russian 2 2 0 9 0 0 0 2018-05-18 16:58:19
299 Naveen jai krishna (njsbpolymer1) Tamil 2 5 0 0 0 0 0 2020-01-10 14:19:41
300 omerfarukbas Turkish 2 3 0 19 2 0 0 2017-08-14 16:10:35
301 Ilyas Fekhar (il47yas) Arabic 2 2 0 0 0 0 0 2018-04-17 22:00:41
302 Héctor Mañas García (hectodium) Catalan 2 3 0 0 0 0 0 2021-10-02 20:32:09
303 Walid Baazia (walidbaazia2005) Arabic 2 1 0 0 0 0 0 2021-01-27 12:47:34
304 fatemeh s (fargolseifoori3) Persian 2 2 0 0 0 0 0 2019-01-31 12:06:57
305 hesamiranii (esam.matouri) Persian 2 2 0 0 0 0 0 2018-09-22 16:33:36
306 REMOVED_USER Ukrainian 2 2 0 0 0 0 0 2017-06-15 12:24:44
307 Alex Stein (diefaust1993) Russian 2 2 0 4 4 0 2 2017-07-13 06:56:17
308 amei Portuguese, Brazilian 2 2 0 0 0 0 0 2018-04-19 19:42:28
309 أم محمد تقي (souadboudia19) Arabic 2 2 0 0 0 0 0 2020-06-13 15:24:17
310 LNDDYL Chinese Traditional 2 4 0 0 0 0 2 2018-04-22 04:00:19
311 조화정 (yunjoo337) Korean 2 2 0 0 0 0 0 2019-06-16 22:25:31
312 Sidali Aymen (sidaliaymen950) Arabic 2 2 0 0 0 0 0 2022-01-31 18:50:59
313 Danial Agh (danialagh) Persian 2 3 0 0 0 0 0 2019-03-30 13:24:16
314 iSoron2 Portuguese, Brazilian 1 1 0 0 0 0 0 2017-03-18 17:56:29
315 Anton (tT0NG) Chinese Traditional 1 2 0 0 0 0 1 2017-07-06 14:18:39
316 Luca Gori (grolcu) Italian 1 2 0 0 0 0 0 2020-09-26 23:26:15
317 axd Spanish 1 1 0 15 0 0 0 2017-09-12 05:48:51
iSoron2 Portuguese, Brazilian 1 1 0 0 0 0 0 2017-03-18 17:56:29
318 REMOVED_USER Russian 1 2 0 6 1 0 1 2019-12-26 05:37:01
Wibi Cahyo (wbcahyoh) Indonesian 1 3 0 0 0 0 0 2017-12-14 06:35:58
319 jonesses German 1 1 0 1 0 0 1 2021-01-01 08:03:18
Anton (tT0NG) Chinese Traditional 1 2 0 0 0 0 1 2017-07-06 14:18:39
박찌 (perpact20) Korean 1 1 0 0 0 0 0 2018-02-10 10:11:44
320 Alan Jeon (skyisle) Korean 1 2 0 8 0 0 0 2018-01-09 10:46:00
321 Maria Fefelova (mashafefel) Russian 1 1 0 0 0 0 0 2019-05-18 02:03:56
Anastasiia Bondarenko (nastasya.bondarenko.97) Russian 1 1 0 0 0 0 0 2019-06-07 17:43:08
Kan Black (kanblack.va) Vietnamese 1 2 0 0 0 1 0 2019-01-15 03:50:10
322 Patrick Pimenta (trickap1) Portuguese, Brazilian 1 1 0 0 0 0 0 2018-12-01 14:31:21
323 Dagna Q (dagnaq) 박찌 (perpact20) Korean 0 1 0 1 0 0 0 0 0 2017-08-06 01:42:52 2018-02-10 10:11:44
324 Kamalakannan Kan Black (kanblack.va) Vietnamese 0 1 0 2 0 0 0 0 1 0 2017-05-14 11:40:23 2019-01-15 03:50:10
325 Éjbãss Übbeî (littlebittlebottle) Anastasiia Bondarenko (nastasya.bondarenko.97) Norwegian Russian 0 1 0 1 0 152 0 0 0 0 2017-07-05 21:12:02 2019-06-07 17:43:08
326 Равиль Мифтахов (ravilmif47) Wibi Cahyo (wbcahyoh) Russian Indonesian 0 1 0 3 0 1 0 0 0 0 2019-08-12 21:58:30 2017-12-14 06:35:58
327 sanyoniket 0 0 0 0 0 0 0 2019-07-23 12:58:40
328 REMOVED_USER Sri Harsha Bhogi (sriharshabhogi) 0 0 0 0 0 0 0 2020-02-01 03:47:48 2018-09-02 05:31:53
329 vi ve (VimalV) Irsgram Russian 0 0 0 0 1 0 0 0 2021-02-08 02:35:45 2019-09-30 16:42:20
330 George Merkulov (george142.emarket) Baran Özavcı (n2141n) Russian Turkish 0 0 0 11 1 0 0 0 2019-06-09 19:47:02 2022-02-26 04:32:51
331 Yasin Okumus (lacivert) Masataka Yakura (myakura) Turkish Japanese 0 0 0 1 0 0 0 2018-02-07 04:13:51 2021-09-03 22:10:36
Petros Bleyan (coolbleyan) Russian 0 0 0 14 0 0 0 2017-08-18 18:37:18
LeMeD (LeMeS) French 0 0 0 2 0 0 0 2021-02-06 15:35:00
332 ava_rfie Persian 0 0 0 1 0 0 0 2019-06-09 16:19:24
Mateusz Teteruk (mttet) Polish 0 0 0 1 0 0 0 2021-01-23 13:09:59
EwanB 0 0 0 0 0 0 0 2019-11-19 10:04:38
Fazy1380 0 0 0 0 0 0 0 2021-04-10 11:02:53
Lori Amico (lavodkaclyde2323) Italian 0 0 0 1 0 0 0 2017-04-09 10:08:13
Florian Stuhlmann (stuhlmann) German 0 0 0 10 0 0 0 2017-04-15 04:04:00
عبد الناصر سعيد الثبيتي (asaeed) 0 0 0 0 0 0 0 2018-03-13 02:09:35
Rivo Zängov (Eraser) 0 0 0 0 0 0 0 2020-10-13 04:38:26
Hayder21 0 0 0 0 0 0 0 2019-12-31 10:56:24
333 T-v-Gerwen Dutch 0 0 0 47 0 0 0 2018-03-02 10:26:33
334 Eduard Boboc (edi.boboc33) George Merkulov (george142.emarket) Romanian Russian 0 0 0 4 11 0 0 0 2019-12-16 09:08:39 2019-06-09 19:47:02
335 philfr49 French 0 0 0 2 0 0 0 2018-09-03 14:20:32
336 عبد الناصر سعيد الثبيتي (asaeed) 0 0 0 0 0 0 0 2018-03-13 02:09:35
337 Thomas Orlita (Thomas995) Czech 0 0 0 1 0 0 0 2017-12-24 04:08:27
338 Edmunds Edmundam (edmundam) 0 0 0 0 0 0 0 2020-06-01 14:18:18
339 Elmo (oberknecht) 0 0 0 0 0 0 0 2020-04-16 08:45:50
340 Равиль Мифтахов (ravilmif47) Russian 0 0 0 1 0 0 0 2019-08-12 21:58:30
341 Manny Farsangy (manifarsangi) Persian 0 0 0 12 0 0 0 2021-08-10 05:32:28
342 Samuel Przeździęk (samek22) Polish 0 0 0 1 0 0 0 2021-08-01 00:49:01
343 Saiprasath B (Saiprasath) 0 0 0 0 0 0 0 2021-07-11 11:10:41
shuvo786 0 0 0 0 0 0 0 2019-11-13 00:18:12
Edmunds Edmundam (edmundam) 0 0 0 0 0 0 0 2020-06-01 14:18:18
Itch 0 0 0 0 0 0 0 2017-10-16 09:18:42
Manny Farsangy (manifarsangi) Persian 0 0 0 12 0 0 0 2021-08-10 05:32:28
Matus Zdansky (matuszdansky) 0 0 0 0 0 0 0 2019-10-20 13:52:24
Thomas Orlita (Thomas995) Czech 0 0 0 1 0 0 0 2017-12-24 04:08:27
Irsgram Russian 0 0 0 1 0 0 0 2019-09-30 16:42:20
EmanAmini 0 0 0 0 0 0 0 2017-03-31 13:27:43
mushin 0 0 0 0 0 0 0 2020-02-02 04:08:05
Elmo (oberknecht) 0 0 0 0 0 0 0 2020-04-16 08:45:50
AnggaRifandi 0 0 0 0 0 0 0 2017-03-31 19:28:35
darkkingredian (rediancool) 0 0 0 0 0 0 0 2021-07-27 16:04:32
Sri Harsha Bhogi (sriharshabhogi) 0 0 0 0 0 0 0 2018-09-02 05:31:53
Nat Fomicheva (natac) Russian 0 0 0 3 0 0 0 2019-01-25 14:35:02
mdrobulis 0 0 0 0 0 0 0 2018-05-24 01:40:42
Sarah BCNN (fsarahboucenna) French 0 0 0 16 0 0 0 2018-02-11 11:07:36
Arjun K. (arjunkdot) 0 0 0 0 0 0 0 2020-09-20 11:16:18
REMOVED_USER Czech 0 0 0 18 0 0 0 2018-03-27 06:19:52
martyaberger 0 0 0 0 0 0 0 2019-01-01 18:48:08
BongTran Vietnamese 0 0 0 2 0 0 0 2018-04-24 05:16:07
Arttu Ylhävuori (arttu.ylhavuori) 0 0 0 0 0 0 0 2019-07-24 15:03:42
Никита Карамов (nikita.karamoff) Russian 0 0 0 10 0 0 0 2018-10-29 03:57:21
rooban23 0 0 0 0 0 0 0 2020-09-15 11:49:14
Eliška Roubalová (roubaeli) Czech 0 0 0 6 0 0 0 2019-12-31 12:47:29
valney.faria Portuguese, Brazilian 0 0 0 1 0 0 0 2020-02-02 14:45:02
Алтынбек Наурызғали (altinbeknaurizgali) Russian 0 0 0 1 0 0 0 2020-08-12 13:03:49
REMOVED_USER 0 0 0 0 0 0 0 2018-10-27 15:34:36
344 REMOVED_USER 0 0 0 0 0 0 0 2018-08-24 00:17:43
345 REMOVED_USER 0 0 0 0 0 0 0 2020-02-01 03:47:48
346 Arjun K. (arjunkdot) 0 0 0 0 0 0 0 2020-09-20 11:16:18
347 EwanB 0 0 0 0 0 0 0 2019-11-19 10:04:38
348 shuvo786 0 0 0 0 0 0 0 2019-11-13 00:18:12
349 Pro AAA (pro1010) Arabic 0 0 0 1 0 0 0 2022-02-14 03:32:44
350 manu (manuL96) 0 0 0 0 0 0 0 2022-05-06 23:34:55
351 Rivo Zängov (Eraser) 0 0 0 0 0 0 0 2020-10-13 04:38:26
352 ashik8113 0 0 0 0 0 0 0 2022-04-13 11:58:26
353 deepbird 0 0 0 0 0 0 0 2022-04-11 03:21:05
354 REMOVED_USER 0 0 0 0 0 0 0 2018-10-27 15:34:36
355 Elham1361 0 0 0 0 0 0 0 2018-10-27 12:01:06
dongchen.yue German 0 0 0 4 0 0 0 2020-09-12 15:05:59
356 Ahnaf Tajwar (atn4404) 0 0 0 0 0 0 0 2018-10-16 11:13:30
357 martyaberger 0 0 0 0 0 0 0 2019-01-01 18:48:08
358 AsadullahIlyas 0 0 0 0 0 0 0 2019-01-04 06:14:15
359 droidahmed akmal shafiq (mohdakmalshafiq) Arabic 0 0 0 7 0 0 0 0 2018-01-31 02:18:49 2021-11-01 01:04:50
360 philfr49 Sylwuskak (sylwuskak) French Polish 0 0 0 2 1 0 0 0 2018-09-03 14:20:32 2022-01-25 04:19:53
361 Ahmed Nazir (ahmednazir333) Yunsu Kim (yunsukim86) Korean 0 0 0 0 2 0 0 0 2018-05-06 12:10:27 2022-01-14 06:33:43
Balaji Jayaraman (jkbalaji1103) 0 0 0 0 0 0 0 2017-10-30 22:12:27
Wellington Ribeiro (wellington.rib) 0 0 0 0 0 0 0 2017-11-16 07:32:25
Javid IRAN (twitteriran98) Persian 0 0 0 1 0 0 0 2017-11-25 16:47:25
박인호 (wphestiraid) Korean 0 0 0 2 0 0 0 2018-01-05 00:33:14
362 Pumpith Ungsupanit (pumpithu) 0 0 0 0 0 0 0 2019-01-19 23:47:57
363 Sandhu564. Nat Fomicheva (natac) Russian 0 0 0 0 3 0 0 0 2020-12-14 01:27:45 2019-01-25 14:35:02
364 Quentin Hibon (hiq) HemanthMeda Telugu 0 0 0 0 4 0 0 0 2021-02-07 16:39:31 2021-12-01 14:02:14
365 AhmedDz darkkingredian (rediancool) Arabic 0 0 0 1 0 0 0 0 2017-12-31 10:12:31 2021-07-27 16:04:32
366 catemlitten Japanese 0 0 0 1 0 0 0 2021-11-17 15:06:02
367 Said Tahsin Dane (tasomaniac) 0 0 0 0 0 0 0 2021-09-25 05:31:01
368 Matus Zdansky (matuszdansky) 0 0 0 0 0 0 0 2019-10-20 13:52:24
369 mdrobulis 0 0 0 0 0 0 0 2018-05-24 01:40:42
370 valney.faria Portuguese, Brazilian 0 0 0 1 0 0 0 2020-02-02 14:45:02
371 Petros Bleyan (coolbleyan) Russian 0 0 0 14 0 0 0 2017-08-18 18:37:18
372 Карлен Шаухаев (KarlenShaukhaev) 0 0 0 0 0 0 0 2020-04-27 08:53:49
373 Shuvashish Sahoo (shuvashish76) 0 0 0 0 0 0 0 2020-09-17 09:10:09
374 REMOVED_USER 0 0 0 0 0 0 0 2018-01-05 16:56:12
375 NairaDNV Dagna Q (dagnaq) Spanish 0 0 0 9 0 0 0 0 2018-01-05 19:10:33 2017-08-06 01:42:52
376 Sandhu564. 0 0 0 0 0 0 0 2020-12-14 01:27:45
377 AhmedDz Arabic 0 0 0 1 0 0 0 2017-12-31 10:12:31
378 Quentin Hibon (hiq) 0 0 0 0 0 0 0 2021-02-07 16:39:31
379 Ahmed Nazir (ahmednazir333) 0 0 0 0 0 0 0 2018-05-06 12:10:27
380 박인호 (wphestiraid) Korean 0 0 0 2 0 0 0 2018-01-05 00:33:14
381 Raulbertassi 0 0 0 0 0 0 0 2018-01-07 17:23:18
382 Карлен Шаухаев (KarlenShaukhaev) Javid IRAN (twitteriran98) Persian 0 0 0 0 1 0 0 0 2020-04-27 08:53:49 2017-11-25 16:47:25
383 Wellington Ribeiro (wellington.rib) 0 0 0 0 0 0 0 2017-11-16 07:32:25
384 dimateos 0 0 0 0 0 0 0 2021-01-10 06:29:52
385 Katherine Alexandra Flórez Ramírez (katherine.florez12) Balaji Jayaraman (jkbalaji1103) Spanish 0 0 0 46 0 0 0 0 2018-01-20 02:18:32 2017-10-30 22:12:27
386 reza golestanzadeh (reza.golestanzadeh) Persian 0 0 0 1 0 0 0 2020-10-21 12:07:20
farbod66 Persian 0 0 0 1 0 0 0 2018-01-20 11:04:23
387 Muhammet Furkan ALMACI (furkan.almaci) Turkish 0 0 0 1 0 0 0 2017-10-29 13:44:56
388 dongchen.yue German 0 0 0 4 0 0 0 2020-09-12 15:05:59
389 Алтынбек Наурызғали (altinbeknaurizgali) Russian 0 0 0 1 0 0 0 2020-08-12 13:03:49
390 rooban23 0 0 0 0 0 0 0 2020-09-15 11:49:14
391 NairaDNV Spanish 0 0 0 9 0 0 0 2018-01-05 19:10:33
392 Katherine Alexandra Flórez Ramírez (katherine.florez12) Spanish 0 0 0 46 0 0 0 2018-01-20 02:18:32
393 Itch 0 0 0 0 0 0 0 2017-10-16 09:18:42
394 Yasin Okumus (lacivert) Turkish 0 0 0 1 0 0 0 2018-02-07 04:13:51
395 Eduard Boboc (edi.boboc33) Romanian 0 0 0 4 0 0 0 2019-12-16 09:08:39
396 Hayder21 0 0 0 0 0 0 0 2019-12-31 10:56:24
397 Eliška Roubalová (roubaeli) Czech 0 0 0 6 0 0 0 2019-12-31 12:47:29
398 Fazy1380 0 0 0 0 0 0 0 2021-04-10 11:02:53
399 Arttu Ylhävuori (arttu.ylhavuori) 0 0 0 0 0 0 0 2019-07-24 15:03:42
400 EmanAmini 0 0 0 0 0 0 0 2017-03-31 13:27:43
401 AnggaRifandi 0 0 0 0 0 0 0 2017-03-31 19:28:35
402 Lori Amico (lavodkaclyde2323) Italian 0 0 0 1 0 0 0 2017-04-09 10:08:13
403 Florian Stuhlmann (stuhlmann) German 0 0 0 10 0 0 0 2017-04-15 04:04:00
404 Kamalakannan 0 0 0 0 0 0 0 2017-05-14 11:40:23
405 farbod66 Persian 0 0 0 1 0 0 0 2018-01-20 11:04:23
406 vi ve (VimalV) 0 0 0 0 0 0 0 2021-02-08 02:35:45
407 Éjbãss Übbeî (littlebittlebottle) Norwegian 0 0 0 152 0 0 0 2017-07-05 21:12:02
408 LeMeD (LeMeS) French 0 0 0 2 0 0 0 2021-02-06 15:35:00
409 BongTran Vietnamese 0 0 0 2 0 0 0 2018-04-24 05:16:07
410 REMOVED_USER Czech 0 0 0 18 0 0 0 2018-03-27 06:19:52
411 mushin 0 0 0 0 0 0 0 2020-02-02 04:08:05
412 Mateusz Teteruk (mttet) Polish 0 0 0 1 0 0 0 2021-01-23 13:09:59
413 Sarah BCNN (fsarahboucenna) French 0 0 0 16 0 0 0 2018-02-11 11:07:36
414 droidahmed Arabic 0 0 0 7 0 0 0 2018-01-31 02:18:49
415 Никита Карамов (nikita.karamoff) Russian 0 0 0 10 0 0 0 2018-10-29 03:57:21

View File

@@ -32,13 +32,13 @@ tasks.compileLint {
android {
compileSdk = 30
compileSdk = 31
defaultConfig {
versionCode = 20003
versionName = "2.0.3"
versionCode = 20100
versionName = "2.1.0"
minSdk = 23
targetSdk = 30
targetSdk = 31
applicationId = "org.isoron.uhabits"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
@@ -86,10 +86,10 @@ android {
}
dependencies {
val daggerVersion = "2.40.3"
val kotlinVersion = "1.6.0"
val kxCoroutinesVersion = "1.5.2"
val ktorVersion = "1.6.6"
val daggerVersion = "2.41"
val kotlinVersion = "1.6.21"
val kxCoroutinesVersion = "1.6.1"
val ktorVersion = "1.6.8"
val espressoVersion = "3.4.0"
androidTestImplementation("androidx.test.espresso:espresso-contrib:$espressoVersion")
@@ -105,10 +105,10 @@ dependencies {
androidTestImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0")
compileOnly("javax.annotation:jsr250-api:1.0")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.5")
implementation("com.github.AppIntro:AppIntro:6.1.0")
implementation("com.github.AppIntro:AppIntro:6.2.0")
implementation("com.google.code.findbugs:jsr305:3.0.2")
implementation("com.google.dagger:dagger:$daggerVersion")
implementation("com.google.guava:guava:31.0.1-android")
implementation("com.google.guava:guava:31.1-android")
implementation("io.ktor:ktor-client-android:$ktorVersion")
implementation("io.ktor:ktor-client-core:$ktorVersion")
implementation("io.ktor:ktor-client-jackson:$ktorVersion")
@@ -116,11 +116,11 @@ dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:$kxCoroutinesVersion")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$kxCoroutinesVersion")
implementation("androidx.appcompat:appcompat:1.3.1")
implementation("androidx.appcompat:appcompat:1.4.1")
implementation("androidx.legacy:legacy-preference-v14:1.0.0")
implementation("androidx.legacy:legacy-support-v4:1.0.0")
implementation("com.google.android.material:material:1.4.0")
implementation("com.opencsv:opencsv:5.5.2")
implementation("com.google.android.material:material:1.5.0")
implementation("com.opencsv:opencsv:5.6")
implementation(project(":uhabits-core"))
kapt("com.google.dagger:dagger-compiler:$daggerVersion")
kaptAndroidTest("com.google.dagger:dagger-compiler:$daggerVersion")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -20,6 +20,7 @@
package org.isoron.uhabits.acceptance.steps
import android.os.Build.VERSION.SDK_INT
import android.os.SystemClock.sleep
import androidx.test.uiautomator.By
import androidx.test.uiautomator.UiSelector
import org.isoron.uhabits.BaseUserInterfaceTest.Companion.device
@@ -39,7 +40,7 @@ fun exportFullBackup() {
}
fun clearDownloadFolder() {
device.executeShellCommand("rm -rf /sdcard/Download/")
device.executeShellCommand("rm -rf /sdcard/Download")
}
fun clearBackupFolder() {
@@ -86,6 +87,7 @@ fun importBackupFromDownloadFolder() {
device.findObject(UiSelector().textContains("Loop")).click()
} else {
device.click(50, 90) // Click menu button
Thread.sleep(1000)
device.findObject(UiSelector().textContains("Download")).click()
device.findObject(UiSelector().textContains("Loop")).click()
}

View File

@@ -18,7 +18,8 @@
*/
package org.isoron.uhabits.acceptance.steps
import android.os.Build.VERSION
import android.os.Build
import android.os.Build.VERSION.SDK_INT
import androidx.annotation.StringRes
import androidx.recyclerview.widget.RecyclerView
import androidx.test.espresso.Espresso
@@ -133,7 +134,7 @@ object CommonSteps : BaseUserInterfaceTest() {
@Throws(Exception::class)
fun verifyOpensWebsite(url: String?) {
var browserPkg = "org.chromium.webview_shell"
if (VERSION.SDK_INT <= 23) {
if (SDK_INT <= Build.VERSION_CODES.M) {
browserPkg = "com.android.browser"
}
assertTrue(device.wait(Until.hasObject(By.pkg(browserPkg)), 5000))
@@ -178,6 +179,22 @@ object CommonSteps : BaseUserInterfaceTest() {
EditHabitSteps.clickSave()
}
fun changeFrequencyToDaily(habitName: String) {
clickText(habitName)
Espresso.onView(ViewMatchers.withId(R.id.action_edit_habit)).perform(ViewActions.click())
EditHabitSteps.pickDailyFrequency()
EditHabitSteps.clickSave()
pressBack()
}
fun changeFrequencyToMonthly(habitName: String) {
clickText(habitName)
Espresso.onView(ViewMatchers.withId(R.id.action_edit_habit)).perform(ViewActions.click())
EditHabitSteps.pickMonthFrequency()
EditHabitSteps.clickSave()
pressBack()
}
enum class Screen {
LIST_HABITS, SHOW_HABIT, EDIT_HABIT, SELECT_HABIT_TYPE
}

View File

@@ -36,6 +36,24 @@ object EditHabitSteps {
Espresso.onView(ViewMatchers.withText("SAVE")).perform(ViewActions.click())
}
fun pickMonthFrequency() {
Espresso.onView(ViewMatchers.withId(R.id.boolean_frequency_picker))
.perform(ViewActions.click())
Espresso.onView(ViewMatchers.withId(R.id.xTimesPerMonthRadioButton))
.perform(ViewActions.click())
Espresso.onView(ViewMatchers.withId(R.id.xTimesPerMonthTextView))
.perform(ViewActions.replaceText("1"))
Espresso.onView(ViewMatchers.withText("SAVE")).perform(ViewActions.click())
}
fun pickDailyFrequency() {
Espresso.onView(ViewMatchers.withId(R.id.boolean_frequency_picker))
.perform(ViewActions.click())
Espresso.onView(ViewMatchers.withId(R.id.everyDayRadioButton))
.perform(ViewActions.click())
Espresso.onView(ViewMatchers.withText("SAVE")).perform(ViewActions.click())
}
fun pickColor(color: Int) {
Espresso.onView(ViewMatchers.withId(R.id.colorButton)).perform(ViewActions.click())
BaseUserInterfaceTest.device.findObject(By.descStartsWith(String.format("Color %d", color)))

View File

@@ -120,6 +120,12 @@ object ListHabitsSteps {
BaseUserInterfaceTest.device.waitForIdle()
}
fun changeSort(sortText: String) {
clickViewWithId(R.id.action_filter)
Espresso.onView(ViewMatchers.withText("Sort")).perform(ViewActions.click())
Espresso.onView(ViewMatchers.withText(sortText)).perform(ViewActions.click())
}
enum class MenuItem {
ABOUT, HELP, SETTINGS, EDIT, DELETE, ARCHIVE, TOGGLE_ARCHIVED, UNARCHIVE, TOGGLE_COMPLETED, ADD
}

View File

@@ -18,7 +18,7 @@
*/
package org.isoron.uhabits.acceptance.steps
import android.os.Build.VERSION
import android.os.Build.VERSION.SDK_INT
import androidx.test.uiautomator.UiScrollable
import androidx.test.uiautomator.UiSelector
import junit.framework.Assert.assertFalse
@@ -50,29 +50,21 @@ object WidgetSteps {
private fun openWidgetScreen() {
val h = BaseUserInterfaceTest.device.displayHeight
val w = BaseUserInterfaceTest.device.displayWidth
if (VERSION.SDK_INT <= 21) {
BaseUserInterfaceTest.device.pressHome()
BaseUserInterfaceTest.device.waitForIdle()
BaseUserInterfaceTest.device.findObject(UiSelector().description("Apps")).click()
BaseUserInterfaceTest.device.findObject(UiSelector().description("Apps")).click()
BaseUserInterfaceTest.device.findObject(UiSelector().description("Widgets")).click()
} else {
val listId = "com.android.launcher3:id/widgets_list_view"
BaseUserInterfaceTest.device.pressHome()
BaseUserInterfaceTest.device.waitForIdle()
BaseUserInterfaceTest.device.drag(w / 2, h / 2, w / 2, h / 2, 8)
var button = BaseUserInterfaceTest.device.findObject(UiSelector().text("WIDGETS"))
if (!button.waitForExists(1000)) {
button = BaseUserInterfaceTest.device.findObject(UiSelector().text("Widgets"))
}
button.click()
if (VERSION.SDK_INT >= 28) {
UiScrollable(UiSelector().resourceId(listId))
.scrollForward()
}
UiScrollable(UiSelector().resourceId(listId))
.scrollIntoView(UiSelector().text("Checkmark"))
val listId = "com.android.launcher3:id/widgets_list_view"
BaseUserInterfaceTest.device.pressHome()
BaseUserInterfaceTest.device.waitForIdle()
BaseUserInterfaceTest.device.drag(w / 2, h / 2, w / 2, h / 2, 8)
var button = BaseUserInterfaceTest.device.findObject(UiSelector().text("WIDGETS"))
if (!button.waitForExists(1000)) {
button = BaseUserInterfaceTest.device.findObject(UiSelector().text("Widgets"))
}
button.click()
if (SDK_INT >= 28) {
UiScrollable(UiSelector().resourceId(listId))
.scrollForward()
}
UiScrollable(UiSelector().resourceId(listId))
.scrollIntoView(UiSelector().text("Checkmark"))
}
@Throws(Exception::class)

View File

@@ -29,6 +29,10 @@ import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
@MediumTest
class EmptyListViewTest : BaseViewTest() {
init {
// TODO: fix rendering differences across APIs
similarityCutoff = 0.00035
}
private val path = "habits/list/EmptyListView"
private val view: EmptyListView = EmptyListView(targetContext)

View File

@@ -36,6 +36,7 @@ class EntryButtonViewTest : BaseViewTest() {
lateinit var view: CheckmarkButtonView
var toggled = false
var edited = false
@Before
override fun setUp() {
@@ -43,7 +44,8 @@ class EntryButtonViewTest : BaseViewTest() {
view = component.getEntryButtonViewFactory().create().apply {
value = Entry.NO
color = PaletteUtils.getAndroidTestColor(5)
onToggle = { toggled = true }
onToggle = { _, _, _ -> toggled = true }
onEdit = { edited = true }
}
measureView(view, dpToPixels(48), dpToPixels(48))
}
@@ -70,20 +72,28 @@ class EntryButtonViewTest : BaseViewTest() {
fun testClick_withShortToggleDisabled() {
prefs.isShortToggleEnabled = false
view.performClick()
assertFalse(toggled)
assertTrue(!toggled and edited)
}
@Test
fun testClick_withShortToggleEnabled() {
prefs.isShortToggleEnabled = true
view.performClick()
assertTrue(toggled)
assertTrue(toggled and !edited)
}
@Test
fun testLongClick() {
fun testLongClick_withShortToggleDisabled() {
prefs.isShortToggleEnabled = false
view.performLongClick()
assertTrue(toggled)
assertTrue(toggled and !edited)
}
@Test
fun testLongClick_withShortToggleEnabled() {
prefs.isShortToggleEnabled = true
view.performLongClick()
assertTrue(!toggled and edited)
}
private fun assertRendersCheckedExplicitly() {

View File

@@ -77,7 +77,7 @@ class EntryPanelViewTest : BaseViewTest() {
@Test
fun testToggle() {
val timestamps = mutableListOf<Timestamp>()
view.onToggle = { t, _ -> timestamps.add(t) }
view.onToggle = { t, _, _, _ -> timestamps.add(t) }
view.buttons[0].performLongClick()
view.buttons[2].performLongClick()
view.buttons[3].performLongClick()
@@ -88,7 +88,7 @@ class EntryPanelViewTest : BaseViewTest() {
fun testToggle_withOffset() {
val timestamps = mutableListOf<Timestamp>()
view.dataOffset = 3
view.onToggle = { t, _ -> timestamps += t }
view.onToggle = { t, _, _, _ -> timestamps += t }
view.buttons[0].performLongClick()
view.buttons[2].performLongClick()
view.buttons[3].performLongClick()

View File

@@ -76,7 +76,7 @@ class NumberPanelViewTest : BaseViewTest() {
@Test
fun testEdit() {
val timestamps = mutableListOf<Timestamp>()
view.onEdit = { timestamps.plusAssign(it) }
view.onEdit = { t -> timestamps.plusAssign(t) }
view.buttons[0].performLongClick()
view.buttons[2].performLongClick()
view.buttons[3].performLongClick()
@@ -87,7 +87,7 @@ class NumberPanelViewTest : BaseViewTest() {
fun testEdit_withOffset() {
val timestamps = mutableListOf<Timestamp>()
view.dataOffset = 3
view.onEdit = { timestamps += it }
view.onEdit = { t -> timestamps += t }
view.buttons[0].performLongClick()
view.buttons[2].performLongClick()
view.buttons[3].performLongClick()

View File

@@ -21,9 +21,12 @@ package org.isoron.uhabits.regression
import androidx.test.filters.LargeTest
import org.isoron.uhabits.BaseUserInterfaceTest
import org.isoron.uhabits.acceptance.steps.CommonSteps
import org.isoron.uhabits.acceptance.steps.CommonSteps.Screen.EDIT_HABIT
import org.isoron.uhabits.acceptance.steps.CommonSteps.Screen.LIST_HABITS
import org.isoron.uhabits.acceptance.steps.CommonSteps.Screen.SELECT_HABIT_TYPE
import org.isoron.uhabits.acceptance.steps.CommonSteps.changeFrequencyToDaily
import org.isoron.uhabits.acceptance.steps.CommonSteps.changeFrequencyToMonthly
import org.isoron.uhabits.acceptance.steps.CommonSteps.clickText
import org.isoron.uhabits.acceptance.steps.CommonSteps.createHabit
import org.isoron.uhabits.acceptance.steps.CommonSteps.launchApp
@@ -37,9 +40,12 @@ import org.isoron.uhabits.acceptance.steps.EditHabitSteps.clickSave
import org.isoron.uhabits.acceptance.steps.EditHabitSteps.typeName
import org.isoron.uhabits.acceptance.steps.ListHabitsSteps.MenuItem.ADD
import org.isoron.uhabits.acceptance.steps.ListHabitsSteps.MenuItem.DELETE
import org.isoron.uhabits.acceptance.steps.ListHabitsSteps.changeSort
import org.isoron.uhabits.acceptance.steps.ListHabitsSteps.clickMenu
import org.isoron.uhabits.acceptance.steps.ListHabitsSteps.longPressCheckmarks
import org.isoron.uhabits.core.models.Entry.Companion.NO
import org.isoron.uhabits.core.models.Entry.Companion.UNKNOWN
import org.isoron.uhabits.core.models.Entry.Companion.YES_AUTO
import org.isoron.uhabits.core.models.Entry.Companion.YES_MANUAL
import org.junit.Test
@@ -83,4 +89,37 @@ class ListHabitsRegressionTest : BaseUserInterfaceTest() {
offsetHeaders()
verifyDisplaysCheckmarks("Wake up early", listOf(UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN))
}
/**
* https://github.com/iSoron/uhabits/issues/1131
*/
@Test
@Throws(Exception::class)
fun should_refresh_sort_after_habit_edit() {
launchApp()
verifyShowsScreen(LIST_HABITS)
changeSort("By score")
changeSort("By status")
longPressCheckmarks("Meditate", count = 1)
changeFrequencyToMonthly("Read books")
longPressCheckmarks("Read books", count = 2)
longPressCheckmarks("Read books", count = 1)
verifyDisplaysCheckmarks("Meditate", listOf(YES_AUTO, YES_MANUAL, YES_AUTO, YES_MANUAL))
CommonSteps.verifyDisplaysTextInSequence(
"Wake up early",
"Read books",
"Meditate",
"Track time"
)
changeFrequencyToDaily("Meditate")
verifyDisplaysCheckmarks("Meditate", listOf(NO, YES_MANUAL, UNKNOWN, YES_MANUAL))
CommonSteps.verifyDisplaysTextInSequence(
"Wake up early",
"Meditate",
"Read books",
"Track time",
)
}
}

View File

@@ -32,6 +32,7 @@ import org.isoron.uhabits.R
import org.isoron.uhabits.core.models.Entry
import org.isoron.uhabits.core.models.EntryList
import org.isoron.uhabits.core.models.Habit
import org.isoron.uhabits.core.models.Timestamp
import org.isoron.uhabits.core.utils.DateUtils.Companion.getTodayWithOffset
import org.junit.Test
import org.junit.runner.RunWith
@@ -42,10 +43,12 @@ class CheckmarkWidgetTest : BaseViewTest() {
private lateinit var habit: Habit
private lateinit var entries: EntryList
private lateinit var view: FrameLayout
private val today = getTodayWithOffset()
private lateinit var today: Timestamp
override fun setUp() {
super.setUp()
setTheme(R.style.WidgetTheme)
today = getTodayWithOffset()
prefs.widgetOpacity = 255
prefs.isSkipEnabled = true
habit = fixtures.createVeryLongHabit()

View File

@@ -32,6 +32,10 @@ import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
@MediumTest
class TargetWidgetTest : BaseViewTest() {
init {
// TODO: fix rendering differences across APIs
similarityCutoff = 0.00025
}
private lateinit var habit: Habit
private lateinit var view: FrameLayout
override fun setUp() {

View File

@@ -17,9 +17,10 @@
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="org.isoron.uhabits">
<uses-permission android:name="android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS" />
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
@@ -48,11 +49,11 @@
android:name=".activities.habits.list.ListHabitsActivity"
android:exported="true"
android:label="@string/main_activity_title"
android:launchMode="singleTop">
</activity>
android:launchMode="singleTop" />
<activity-alias
android:name=".MainActivity"
android:exported="true"
android:label="@string/main_activity_title"
android:launchMode="singleTop"
android:targetActivity=".activities.habits.list.ListHabitsActivity">
@@ -85,6 +86,7 @@
<activity
android:name=".widgets.activities.HabitPickerDialog"
android:exported="true"
android:theme="@style/Theme.AppCompat.Light.Dialog">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
@@ -93,6 +95,7 @@
<activity
android:name=".widgets.activities.BooleanHabitPickerDialog"
android:exported="true"
android:theme="@style/Theme.AppCompat.Light.Dialog">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
@@ -101,6 +104,7 @@
<activity
android:name=".widgets.activities.NumericalHabitPickerDialog"
android:exported="true"
android:theme="@style/Theme.AppCompat.Light.Dialog">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
@@ -115,26 +119,16 @@
android:value=".activities.habits.list.ListHabitsActivity" />
</activity>
<activity
android:name=".widgets.activities.NumericalCheckmarkWidgetActivity"
android:label="NumericalCheckmarkWidget"
android:noHistory="true"
android:excludeFromRecents="true"
android:theme="@style/Theme.AppCompat.Light.Dialog">
<intent-filter>
<action android:name="org.isoron.uhabits.ACTION_SHOW_NUMERICAL_VALUE_ACTIVITY" />
</intent-filter>
</activity>
<activity
android:name=".notifications.SnoozeDelayPickerActivity"
android:taskAffinity=""
android:excludeFromRecents="true"
android:launchMode="singleInstance"
android:taskAffinity=""
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<receiver
android:name=".widgets.CheckmarkWidgetProvider"
android:exported="true"
android:label="@string/checkmark">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
@@ -152,6 +146,7 @@
<receiver
android:name=".widgets.HistoryWidgetProvider"
android:exported="true"
android:label="@string/history">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
@@ -164,6 +159,7 @@
<receiver
android:name=".widgets.ScoreWidgetProvider"
android:exported="true"
android:label="@string/score">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
@@ -176,6 +172,7 @@
<receiver
android:name=".widgets.StreakWidgetProvider"
android:exported="true"
android:label="@string/streaks">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
@@ -188,6 +185,7 @@
<receiver
android:name=".widgets.FrequencyWidgetProvider"
android:exported="true"
android:label="@string/frequency">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
@@ -200,6 +198,7 @@
<receiver
android:name=".widgets.TargetWidgetProvider"
android:exported="true"
android:label="@string/target">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
@@ -210,13 +209,17 @@
android:resource="@xml/widget_target_info" />
</receiver>
<receiver android:name=".receivers.ReminderReceiver">
<receiver
android:name=".receivers.ReminderReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<receiver android:name=".receivers.WidgetReceiver">
<receiver android:name=".receivers.WidgetReceiver"
android:exported="true"
android:permission="false">
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="org.isoron.uhabits.ACTION_SET_NUMERICAL_VALUE" />
@@ -267,7 +270,7 @@
<!-- Locale/Tasker -->
<receiver
android:name=".automation.FireSettingReceiver"
android:exported="true">
android:exported="false">
<intent-filter>
<action android:name="com.twofortyfouram.locale.intent.action.FIRE_SETTING" />
</intent-filter>

View File

@@ -1,116 +0,0 @@
package org.isoron.uhabits.activities.common.dialogs
import android.content.Context
import android.graphics.Typeface
import android.view.LayoutInflater
import android.view.View
import android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE
import android.widget.Button
import androidx.appcompat.app.AlertDialog
import org.isoron.platform.gui.toInt
import org.isoron.uhabits.R
import org.isoron.uhabits.core.models.Entry.Companion.NO
import org.isoron.uhabits.core.models.Entry.Companion.SKIP
import org.isoron.uhabits.core.models.Entry.Companion.UNKNOWN
import org.isoron.uhabits.core.models.Entry.Companion.YES_AUTO
import org.isoron.uhabits.core.models.Entry.Companion.YES_MANUAL
import org.isoron.uhabits.core.models.PaletteColor
import org.isoron.uhabits.core.preferences.Preferences
import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior
import org.isoron.uhabits.core.ui.views.Theme
import org.isoron.uhabits.databinding.CheckmarkDialogBinding
import org.isoron.uhabits.inject.ActivityContext
import org.isoron.uhabits.utils.InterfaceUtils
import org.isoron.uhabits.utils.StyledResources
import javax.inject.Inject
class CheckmarkDialog
@Inject constructor(
@ActivityContext private val context: Context,
private val preferences: Preferences,
) : View.OnClickListener {
private lateinit var binding: CheckmarkDialogBinding
private lateinit var fontAwesome: Typeface
private val allButtons = mutableListOf<Button>()
private var selectedButton: Button? = null
fun create(
value: Int,
notes: String,
dateString: String,
paletteColor: PaletteColor,
callback: ListHabitsBehavior.CheckMarkDialogCallback,
theme: Theme,
): AlertDialog {
binding = CheckmarkDialogBinding.inflate(LayoutInflater.from(context))
fontAwesome = InterfaceUtils.getFontAwesome(context)!!
binding.etNotes.append(notes)
setUpButtons(value, theme.color(paletteColor).toInt())
val dialog = AlertDialog.Builder(context)
.setView(binding.root)
.setTitle(dateString)
.setPositiveButton(R.string.save) { _, _ ->
val newValue = when (selectedButton?.id) {
R.id.yesBtn -> YES_MANUAL
R.id.noBtn -> NO
R.id.skippedBtn -> SKIP
else -> UNKNOWN
}
callback.onNotesSaved(newValue, binding.etNotes.text.toString())
}
.setNegativeButton(android.R.string.cancel) { _, _ ->
callback.onNotesDismissed()
}
.setOnDismissListener {
callback.onNotesDismissed()
}
.create()
dialog.setOnShowListener {
binding.etNotes.requestFocus()
dialog.window?.setSoftInputMode(SOFT_INPUT_STATE_ALWAYS_VISIBLE)
}
return dialog
}
private fun setUpButtons(value: Int, color: Int) {
val sres = StyledResources(context)
val mediumContrastColor = sres.getColor(R.attr.contrast60)
setButtonAttrs(binding.yesBtn, color)
setButtonAttrs(binding.noBtn, mediumContrastColor)
setButtonAttrs(binding.skippedBtn, color, visible = preferences.isSkipEnabled)
setButtonAttrs(binding.questionBtn, mediumContrastColor, visible = preferences.areQuestionMarksEnabled)
when (value) {
UNKNOWN -> if (preferences.areQuestionMarksEnabled) {
binding.questionBtn.performClick()
} else {
binding.noBtn.performClick()
}
SKIP -> binding.skippedBtn.performClick()
YES_MANUAL -> binding.yesBtn.performClick()
YES_AUTO, NO -> binding.noBtn.performClick()
}
}
private fun setButtonAttrs(button: Button, color: Int, visible: Boolean = true) {
button.apply {
visibility = if (visible) View.VISIBLE else View.GONE
typeface = fontAwesome
setTextColor(color)
setOnClickListener(this@CheckmarkDialog)
}
allButtons.add(button)
}
override fun onClick(v: View?) {
allButtons.forEach {
if (v?.id == it.id) {
it.isSelected = true
selectedButton = it
} else it.isSelected = false
}
}
}

View File

@@ -0,0 +1,127 @@
/*
* Copyright (C) 2016-2021 Álinson Santos Xavier <git@axavier.org>
*
* This file is part of Loop Habit Tracker.
*
* Loop Habit Tracker is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* Loop Habit Tracker is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.isoron.uhabits.activities.common.dialogs
import android.app.Dialog
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.View.GONE
import android.view.View.VISIBLE
import org.isoron.uhabits.R
import org.isoron.uhabits.core.models.Entry.Companion.NO
import org.isoron.uhabits.core.models.Entry.Companion.SKIP
import org.isoron.uhabits.core.models.Entry.Companion.UNKNOWN
import org.isoron.uhabits.core.models.Entry.Companion.YES_AUTO
import org.isoron.uhabits.core.models.Entry.Companion.YES_MANUAL
import org.isoron.uhabits.core.preferences.Preferences
import org.isoron.uhabits.databinding.CheckmarkPopupBinding
import org.isoron.uhabits.utils.InterfaceUtils.getFontAwesome
import org.isoron.uhabits.utils.dimBehind
import org.isoron.uhabits.utils.dp
import org.isoron.uhabits.utils.sres
const val POPUP_WIDTH = 4 * 48f + 16f
const val POPUP_HEIGHT = 48f * 2.5f + 8f
class CheckmarkPopup(
private val context: Context,
private val color: Int,
private var notes: String,
private var value: Int,
private val prefs: Preferences,
private val anchor: View,
) {
var onToggle: (Int, String) -> Unit = { _, _ -> }
private lateinit var dialog: Dialog
private val view = CheckmarkPopupBinding.inflate(LayoutInflater.from(context)).apply {
// Required for round corners
container.clipToOutline = true
}
init {
view.booleanButtons.visibility = VISIBLE
initColors()
initTypefaces()
hideDisabledButtons()
populate()
}
private fun initColors() {
arrayOf(view.yesBtn, view.skipBtn).forEach {
it.setTextColor(color)
}
arrayOf(view.noBtn, view.unknownBtn).forEach {
it.setTextColor(view.root.sres.getColor(R.attr.contrast60))
}
}
private fun initTypefaces() {
arrayOf(view.yesBtn, view.noBtn, view.skipBtn, view.unknownBtn).forEach {
it.typeface = getFontAwesome(context)
}
}
private fun hideDisabledButtons() {
if (!prefs.isSkipEnabled) view.skipBtn.visibility = GONE
if (!prefs.areQuestionMarksEnabled) view.unknownBtn.visibility = GONE
}
private fun populate() {
val selectedBtn = when (value) {
YES_MANUAL -> view.yesBtn
YES_AUTO -> view.noBtn
NO -> view.noBtn
UNKNOWN -> if (prefs.areQuestionMarksEnabled) view.unknownBtn else view.noBtn
SKIP -> if (prefs.isSkipEnabled) view.skipBtn else view.noBtn
else -> null
}
view.notes.setText(notes)
}
fun show() {
dialog = Dialog(context, android.R.style.Theme_NoTitleBar)
dialog.setContentView(view.root)
dialog.window?.apply {
setLayout(
view.root.dp(POPUP_WIDTH).toInt(),
view.root.dp(POPUP_HEIGHT).toInt()
)
setBackgroundDrawableResource(android.R.color.transparent)
}
fun onClick(v: Int) {
this.value = v
save()
}
view.yesBtn.setOnClickListener { onClick(YES_MANUAL) }
view.noBtn.setOnClickListener { onClick(NO) }
view.skipBtn.setOnClickListener { onClick(SKIP) }
view.unknownBtn.setOnClickListener { onClick(UNKNOWN) }
dialog.setCanceledOnTouchOutside(true)
dialog.dimBehind()
dialog.show()
}
fun save() {
onToggle(value, view.notes.text.toString().trim())
dialog.dismiss()
}
}

View File

@@ -43,7 +43,7 @@ class HistoryEditorDialog : AppCompatDialogFragment(), CommandRunner.Listener {
private lateinit var commandRunner: CommandRunner
private lateinit var habit: Habit
private lateinit var preferences: Preferences
private lateinit var dataView: AndroidDataView
lateinit var dataView: AndroidDataView
private var chart: HistoryChart? = null
private var onDateClickedListener: OnDateClickedListener? = null

View File

@@ -1,155 +0,0 @@
/*
* Copyright (C) 2016-2021 Álinson Santos Xavier <git@axavier.org>
*
* This file is part of Loop Habit Tracker.
*
* Loop Habit Tracker is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* Loop Habit Tracker is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.isoron.uhabits.activities.common.dialogs
import android.annotation.SuppressLint
import android.content.Context
import android.content.DialogInterface
import android.text.InputFilter
import android.text.Spanned
import android.view.LayoutInflater
import android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE
import android.view.inputmethod.EditorInfo
import android.widget.EditText
import android.widget.NumberPicker
import android.widget.TextView
import androidx.appcompat.app.AlertDialog
import org.isoron.uhabits.R
import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior
import org.isoron.uhabits.inject.ActivityContext
import org.isoron.uhabits.utils.InterfaceUtils
import java.text.DecimalFormatSymbols
import javax.inject.Inject
import kotlin.math.roundToLong
class NumberPickerFactory
@Inject constructor(
@ActivityContext private val context: Context
) {
fun create(
value: Double,
unit: String,
notes: String,
dateString: String,
callback: ListHabitsBehavior.NumberPickerCallback
): AlertDialog {
val inflater = LayoutInflater.from(context)
val view = inflater.inflate(R.layout.number_picker_dialog, null)
val picker = view.findViewById<NumberPicker>(R.id.picker)
val picker2 = view.findViewById<NumberPicker>(R.id.picker2)
val etNotes = view.findViewById<EditText>(R.id.etNotes)
val watcherFilter: InputFilter = SeparatorWatcherInputFilter(picker2)
val numberPickerInputText = getNumberPickerInputText(picker)
// watch the unfiltered input before the filters remove a possible separator from it
numberPickerInputText.filters = arrayOf(watcherFilter).plus(numberPickerInputText.filters)
view.findViewById<TextView>(R.id.tvUnit).text = unit
view.findViewById<TextView>(R.id.tvSeparator).text =
DecimalFormatSymbols.getInstance().decimalSeparator.toString()
val intValue = (value * 100).roundToLong().toInt()
picker.minValue = 0
picker.maxValue = Integer.MAX_VALUE / 100
picker.value = intValue / 100
picker.wrapSelectorWheel = false
picker2.minValue = 0
picker2.maxValue = 99
picker2.setFormatter { v -> String.format("%02d", v) }
picker2.value = intValue % 100
etNotes.setText(notes)
val dialog = AlertDialog.Builder(context)
.setView(view)
.setTitle(dateString)
.setPositiveButton(R.string.save) { _, _ ->
picker.clearFocus()
val v = picker.value + 0.01 * picker2.value
val note = etNotes.text.toString()
callback.onNumberPicked(v, note)
}
.setNegativeButton(android.R.string.cancel) { _, _ ->
callback.onNumberPickerDismissed()
}
.setOnDismissListener {
callback.onNumberPickerDismissed()
}
.create()
dialog.setOnShowListener {
picker.getChildAt(0)?.requestFocus()
dialog.window?.setSoftInputMode(SOFT_INPUT_STATE_ALWAYS_VISIBLE)
}
InterfaceUtils.setupEditorAction(
picker
) { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick()
}
false
}
InterfaceUtils.setupEditorAction(
picker2
) { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick()
}
false
}
return dialog
}
@SuppressLint("DiscouragedPrivateApi")
private fun getNumberPickerInputText(picker: NumberPicker): EditText {
val f = NumberPicker::class.java.getDeclaredField("mInputText")
f.isAccessible = true
return f.get(picker) as EditText
}
}
class SeparatorWatcherInputFilter(private val nextPicker: NumberPicker) : InputFilter {
override fun filter(
source: CharSequence?,
start: Int,
end: Int,
dest: Spanned?,
dstart: Int,
dend: Int
): CharSequence {
if (source == null || source.isEmpty()) {
return ""
}
for (c in source) {
if (c == DecimalFormatSymbols.getInstance().decimalSeparator || c == '.' || c == ',') {
nextPicker.performLongClick()
break
}
}
return source
}
}

View File

@@ -0,0 +1,128 @@
/*
* Copyright (C) 2016-2021 Álinson Santos Xavier <git@axavier.org>
*
* This file is part of Loop Habit Tracker.
*
* Loop Habit Tracker is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* Loop Habit Tracker is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.isoron.uhabits.activities.common.dialogs
import android.app.Dialog
import android.content.Context
import android.view.KeyEvent.KEYCODE_ENTER
import android.view.LayoutInflater
import android.view.MotionEvent.ACTION_DOWN
import android.view.View
import android.view.View.GONE
import android.view.View.VISIBLE
import org.isoron.uhabits.core.models.Entry
import org.isoron.uhabits.core.preferences.Preferences
import org.isoron.uhabits.databinding.CheckmarkPopupBinding
import org.isoron.uhabits.utils.dimBehind
import org.isoron.uhabits.utils.dp
import org.isoron.uhabits.utils.requestFocusWithKeyboard
import java.text.DecimalFormat
class NumberPopup(
private val context: Context,
private var notes: String,
private var value: Double,
private val prefs: Preferences,
private val anchor: View,
) {
var onToggle: (Double, String) -> Unit = { _, _ -> }
var onDismiss: () -> Unit = {}
private val originalValue = value
private lateinit var dialog: Dialog
private val view = CheckmarkPopupBinding.inflate(LayoutInflater.from(context)).apply {
// Required for round corners
container.clipToOutline = true
}
init {
view.numberButtons.visibility = VISIBLE
hideDisabledButtons()
populate()
}
private fun hideDisabledButtons() {
if (!prefs.isSkipEnabled) view.skipBtnNumber.visibility = GONE
}
private fun populate() {
view.notes.setText(notes)
view.value.setText(
when {
value < 0.01 -> "0"
else -> DecimalFormat("#.##").format(value)
}
)
}
fun show() {
clearCurrentDialog()
dialog = Dialog(context, android.R.style.Theme_NoTitleBar)
dialog.setContentView(view.root)
dialog.window?.apply {
setLayout(
view.root.dp(POPUP_WIDTH).toInt(),
view.root.dp(POPUP_HEIGHT).toInt()
)
setBackgroundDrawableResource(android.R.color.transparent)
}
dialog.setOnDismissListener {
onDismiss()
currentDialog = null
}
view.value.setOnKeyListener { _, keyCode, event ->
if (event.action == ACTION_DOWN && keyCode == KEYCODE_ENTER) {
save()
return@setOnKeyListener true
}
return@setOnKeyListener false
}
view.saveBtn.setOnClickListener {
save()
}
view.skipBtnNumber.setOnClickListener {
view.value.setText((Entry.SKIP.toDouble() / 1000).toString())
save()
}
view.value.requestFocusWithKeyboard()
dialog.setCanceledOnTouchOutside(true)
dialog.dimBehind()
currentDialog = dialog
dialog.show()
}
fun save() {
val value = view.value.text.toString().toDoubleOrNull() ?: originalValue
val notes = view.notes.text.toString()
onToggle(value, notes)
dialog.dismiss()
}
companion object {
// Used to make sure that 2 popups aren't shown on top of each other
// If dialog that's already shown is detected, it's dismissed before the next one is opened.
private var currentDialog: Dialog? = null
fun clearCurrentDialog() {
currentDialog?.dismiss()
currentDialog = null
}
}
}

View File

@@ -29,6 +29,7 @@ import org.isoron.uhabits.core.utils.DateUtils.Companion.getShortWeekdayNames
import org.isoron.uhabits.core.utils.DateUtils.Companion.getStartOfTodayCalendar
import org.isoron.uhabits.core.utils.DateUtils.Companion.getStartOfTodayCalendarWithOffset
import org.isoron.uhabits.core.utils.DateUtils.Companion.getWeekdaySequence
import org.isoron.uhabits.core.utils.DateUtils.Companion.getWeekdaysInMonth
import org.isoron.uhabits.utils.ColorUtils.mixColors
import org.isoron.uhabits.utils.StyledResources
import org.isoron.uhabits.utils.toSimpleDataFormat
@@ -62,7 +63,6 @@ class FrequencyChart : ScrollableChart {
private var primaryColor = 0
private var isBackgroundTransparent = false
private lateinit var frequency: HashMap<Timestamp, Array<Int>>
private var maxFreq = 0
private var firstWeekday = Calendar.SUNDAY
constructor(context: Context?) : super(context) {
@@ -82,7 +82,6 @@ class FrequencyChart : ScrollableChart {
fun setFrequency(frequency: java.util.HashMap<Timestamp, Array<Int>>) {
this.frequency = frequency
maxFreq = getMaxFreq(frequency)
postInvalidate()
}
@@ -91,15 +90,6 @@ class FrequencyChart : ScrollableChart {
postInvalidate()
}
private fun getMaxFreq(frequency: HashMap<Timestamp, Array<Int>>): Int {
var maxValue = 1
for (values in frequency.values) for (value in values) maxValue = max(
value,
maxValue
)
return maxValue
}
fun setIsBackgroundTransparent(isBackgroundTransparent: Boolean) {
this.isBackgroundTransparent = isBackgroundTransparent
initColors()
@@ -166,6 +156,7 @@ class FrequencyChart : ScrollableChart {
private fun drawColumn(canvas: Canvas, rect: RectF?, date: GregorianCalendar) {
val values = frequency[Timestamp(date)]
val weekDaysInMonth = getWeekdaysInMonth(Timestamp(date))
val rowHeight = rect!!.height() / 8.0f
prevRect!!.set(rect)
val localeWeekdayList: Array<Int> = getWeekdaySequence(firstWeekday)
@@ -173,7 +164,8 @@ class FrequencyChart : ScrollableChart {
rect[0f, 0f, baseSize.toFloat()] = baseSize.toFloat()
rect.offset(prevRect!!.left, prevRect!!.top + baseSize * j)
val i = localeWeekdayList[j] % 7
if (values != null) drawMarker(canvas, rect, values[i])
if (values != null)
drawMarker(canvas, rect, values[i], weekDaysInMonth[i])
rect.offset(0f, rowHeight)
}
drawFooter(canvas, rect, date)
@@ -221,12 +213,16 @@ class FrequencyChart : ScrollableChart {
canvas.drawLine(rGrid.left, rGrid.top, rGrid.right, rGrid.top, pGrid!!)
}
private fun drawMarker(canvas: Canvas, rect: RectF?, value: Int?) {
private fun drawMarker(canvas: Canvas, rect: RectF?, value: Int?, frequency: Int) {
// value can be negative when the entry is skipped
val valueCopy = value?.let { max(0, it) }
val padding = rect!!.height() * 0.2f
// maximal allowed mark radius
val maxRadius = (rect.height() - 2 * padding) / 2.0f
// the real mark radius is scaled down by a factor depending on the maximal frequency
val scale = 1.0f / maxFreq * value!!
val scale = 1.0f / frequency * valueCopy!!
val radius = maxRadius * scale
val colorIndex = min((colors.size - 1), ((colors.size - 1) * scale).roundToInt())
pGraph!!.color = colors[colorIndex]
@@ -289,6 +285,5 @@ class FrequencyChart : ScrollableChart {
frequency[Timestamp(date)] = values
date.add(Calendar.MONTH, -1)
}
maxFreq = getMaxFreq(frequency)
}
}

View File

@@ -29,6 +29,7 @@ import kotlinx.coroutines.Dispatchers
import org.isoron.uhabits.BaseExceptionHandler
import org.isoron.uhabits.HabitsApplication
import org.isoron.uhabits.activities.habits.list.views.HabitCardListAdapter
import org.isoron.uhabits.core.models.Timestamp
import org.isoron.uhabits.core.preferences.Preferences
import org.isoron.uhabits.core.tasks.TaskRunner
import org.isoron.uhabits.core.ui.ThemeSwitcher.Companion.THEME_DARK
@@ -36,11 +37,15 @@ import org.isoron.uhabits.core.utils.MidnightTimer
import org.isoron.uhabits.database.AutoBackup
import org.isoron.uhabits.inject.ActivityContextModule
import org.isoron.uhabits.inject.DaggerHabitsActivityComponent
import org.isoron.uhabits.inject.HabitsActivityComponent
import org.isoron.uhabits.inject.HabitsApplicationComponent
import org.isoron.uhabits.utils.restartWithFade
class ListHabitsActivity : AppCompatActivity(), Preferences.Listener {
var pureBlack: Boolean = false
lateinit var appComponent: HabitsApplicationComponent
lateinit var component: HabitsActivityComponent
lateinit var taskRunner: TaskRunner
lateinit var adapter: HabitCardListAdapter
lateinit var rootView: ListHabitsRootView
@@ -59,8 +64,8 @@ class ListHabitsActivity : AppCompatActivity(), Preferences.Listener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val appComponent = (applicationContext as HabitsApplication).component
val component = DaggerHabitsActivityComponent
appComponent = (applicationContext as HabitsApplication).component
component = DaggerHabitsActivityComponent
.builder()
.activityContextModule(ActivityContextModule(this))
.habitsApplicationComponent(appComponent)
@@ -79,6 +84,7 @@ class ListHabitsActivity : AppCompatActivity(), Preferences.Listener {
Thread.setDefaultUncaughtExceptionHandler(BaseExceptionHandler(this))
component.listHabitsBehavior.onStartup()
setContentView(rootView)
parseIntents()
}
override fun onPause() {
@@ -116,4 +122,19 @@ class ListHabitsActivity : AppCompatActivity(), Preferences.Listener {
super.onActivityResult(request, result, data)
screen.onResult(request, result, data)
}
private fun parseIntents() {
if (intent.action == ACTION_EDIT) {
val habitId = intent.extras?.getLong("habit")
val timestamp = intent.extras?.getLong("timestamp")
if (habitId != null && timestamp != null) {
val habit = appComponent.habitList.getById(habitId)!!
component.listHabitsBehavior.onEdit(habit, Timestamp(timestamp))
}
}
}
companion object {
const val ACTION_EDIT = "org.isoron.uhabits.ACTION_EDIT"
}
}

View File

@@ -24,11 +24,12 @@ import android.content.Context
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import dagger.Lazy
import org.isoron.platform.gui.toInt
import org.isoron.uhabits.R
import org.isoron.uhabits.activities.common.dialogs.CheckmarkDialog
import org.isoron.uhabits.activities.common.dialogs.CheckmarkPopup
import org.isoron.uhabits.activities.common.dialogs.ColorPickerDialogFactory
import org.isoron.uhabits.activities.common.dialogs.ConfirmDeleteDialog
import org.isoron.uhabits.activities.common.dialogs.NumberPickerFactory
import org.isoron.uhabits.activities.common.dialogs.NumberPopup
import org.isoron.uhabits.activities.habits.edit.HabitTypeDialog
import org.isoron.uhabits.activities.habits.list.views.HabitCardListAdapter
import org.isoron.uhabits.core.commands.ArchiveHabitsCommand
@@ -41,6 +42,7 @@ import org.isoron.uhabits.core.commands.EditHabitCommand
import org.isoron.uhabits.core.commands.UnarchiveHabitsCommand
import org.isoron.uhabits.core.models.Habit
import org.isoron.uhabits.core.models.PaletteColor
import org.isoron.uhabits.core.preferences.Preferences
import org.isoron.uhabits.core.tasks.TaskRunner
import org.isoron.uhabits.core.ui.ThemeSwitcher
import org.isoron.uhabits.core.ui.callbacks.OnColorPickedCallback
@@ -61,6 +63,7 @@ import org.isoron.uhabits.tasks.ExportDBTaskFactory
import org.isoron.uhabits.tasks.ImportDataTask
import org.isoron.uhabits.tasks.ImportDataTaskFactory
import org.isoron.uhabits.utils.copyTo
import org.isoron.uhabits.utils.currentTheme
import org.isoron.uhabits.utils.restartWithFade
import org.isoron.uhabits.utils.showMessage
import org.isoron.uhabits.utils.showSendEmailScreen
@@ -89,9 +92,9 @@ class ListHabitsScreen
private val exportDBFactory: ExportDBTaskFactory,
private val importTaskFactory: ImportDataTaskFactory,
private val colorPickerFactory: ColorPickerDialogFactory,
private val numberPickerFactory: NumberPickerFactory,
private val checkMarkDialog: CheckmarkDialog,
private val behavior: Lazy<ListHabitsBehavior>
private val behavior: Lazy<ListHabitsBehavior>,
private val preferences: Preferences,
private val rootView: Lazy<ListHabitsRootView>,
) : CommandRunner.Listener,
ListHabitsBehavior.Screen,
ListHabitsMenuBehavior.Screen,
@@ -224,31 +227,42 @@ class ListHabitsScreen
picker.show(activity.supportFragmentManager, "picker")
}
override fun showNumberPicker(
override fun showNumberPopup(
value: Double,
unit: String,
notes: String,
dateString: String,
callback: ListHabitsBehavior.NumberPickerCallback
) {
numberPickerFactory.create(value, unit, notes, dateString, callback).show()
val view = rootView.get()
NumberPopup(
context = context,
prefs = preferences,
anchor = view,
notes = notes,
value = value,
).apply {
onToggle = { value, notes -> callback.onNumberPicked(value, notes) }
show()
}
}
override fun showCheckmarkDialog(
value: Int,
override fun showCheckmarkPopup(
selectedValue: Int,
notes: String,
dateString: String,
color: PaletteColor,
callback: ListHabitsBehavior.CheckMarkDialogCallback
) {
checkMarkDialog.create(
value,
notes,
dateString,
color,
callback,
themeSwitcher.currentTheme!!,
).show()
val view = rootView.get()
CheckmarkPopup(
context = context,
prefs = preferences,
anchor = view,
color = view.currentTheme().color(color).toInt(),
notes = notes,
value = selectedValue,
).apply {
onToggle = { value, notes -> callback.onNotesSaved(value, notes) }
show()
}
}
private fun getExecuteString(command: Command): String? {

View File

@@ -44,6 +44,8 @@ import org.isoron.uhabits.utils.sres
import org.isoron.uhabits.utils.toMeasureSpec
import javax.inject.Inject
const val TOGGLE_DELAY_MILLIS = 2000L
class CheckmarkButtonViewFactory
@Inject constructor(
@ActivityContext val context: Context,
@@ -71,42 +73,42 @@ class CheckmarkButtonView(
invalidate()
}
var hasNotes = false
var notes = ""
set(value) {
field = value
invalidate()
}
var onToggle: (Int) -> Unit = {}
var onToggle: (Int, String, Long) -> Unit = { _, _, _ -> }
var onEdit: () -> Unit = { }
var onEdit: () -> Unit = {}
private var drawer = Drawer()
init {
isFocusable = false
setOnClickListener(this)
setOnLongClickListener(this)
}
fun performToggle() {
fun performToggle(delay: Long) {
value = Entry.nextToggleValue(
value = value,
isSkipEnabled = preferences.isSkipEnabled,
areQuestionMarksEnabled = preferences.areQuestionMarksEnabled
)
onToggle(value)
onToggle(value, notes, delay)
performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
invalidate()
}
override fun onClick(v: View) {
if (preferences.isShortToggleEnabled) performToggle()
if (preferences.isShortToggleEnabled) performToggle(TOGGLE_DELAY_MILLIS)
else onEdit()
}
override fun onLongClick(v: View): Boolean {
if (preferences.isShortToggleEnabled) onEdit()
else performToggle()
else performToggle(TOGGLE_DELAY_MILLIS)
return true
}
@@ -180,7 +182,7 @@ class CheckmarkButtonView(
canvas.drawText(label, rect.centerX(), rect.centerY(), paint)
}
drawNotesIndicator(canvas, color, em, hasNotes)
drawNotesIndicator(canvas, color, em, notes)
}
}
}

View File

@@ -54,19 +54,19 @@ class CheckmarkPanelView(
setupButtons()
}
var notesIndicators = BooleanArray(0)
var notes = arrayOf<String>()
set(values) {
field = values
setupButtons()
}
var onToggle: (Timestamp, Int) -> Unit = { _, _ -> }
var onToggle: (Timestamp, Int, String, Long) -> Unit = { _, _, _, _ -> }
set(value) {
field = value
setupButtons()
}
var onEdit: (Timestamp) -> Unit = {}
var onEdit: (Timestamp) -> Unit = { _ -> }
set(value) {
field = value
setupButtons()
@@ -84,12 +84,12 @@ class CheckmarkPanelView(
index + dataOffset < values.size -> values[index + dataOffset]
else -> UNKNOWN
}
button.hasNotes = when {
index + dataOffset < notesIndicators.size -> notesIndicators[index + dataOffset]
else -> false
button.notes = when {
index + dataOffset < notes.size -> notes[index + dataOffset]
else -> ""
}
button.color = color
button.onToggle = { value -> onToggle(timestamp, value) }
button.onToggle = { value, notes, delay -> onToggle(timestamp, value, notes, delay) }
button.onEdit = { onEdit(timestamp) }
}
}

View File

@@ -124,9 +124,9 @@ class HabitCardListAdapter @Inject constructor(
val habit = cache.getHabitByPosition(position)
val score = cache.getScore(habit!!.id!!)
val checkmarks = cache.getCheckmarks(habit.id!!)
val notesIndicators = cache.getNoteIndicators(habit.id!!)
val notes = cache.getNotes(habit.id!!)
val selected = selected.contains(habit)
listView!!.bindCardView(holder, habit, score, checkmarks, notesIndicators, selected)
listView!!.bindCardView(holder, habit, score, checkmarks, notes, selected)
}
override fun onViewAttachedToWindow(holder: HabitCardViewHolder) {

View File

@@ -87,7 +87,7 @@ class HabitCardListView(
habit: Habit,
score: Double,
checkmarks: IntArray,
notesIndicators: BooleanArray,
notes: Array<String>,
selected: Boolean
): View {
val cardView = holder.itemView as HabitCardView
@@ -99,7 +99,7 @@ class HabitCardListView(
cardView.score = score
cardView.unit = habit.unit
cardView.threshold = habit.targetValue / habit.frequency.denominator
cardView.notesIndicators = notesIndicators
cardView.notes = notes
val detector = GestureDetector(context, CardViewGestureDetector(holder))
cardView.setOnTouchListener { _, ev ->

View File

@@ -21,8 +21,8 @@ package org.isoron.uhabits.activities.habits.list.views
import android.content.Context
import android.graphics.text.LineBreaker.BREAK_STRATEGY_BALANCED
import android.os.Build
import android.os.Build.VERSION.SDK_INT
import android.os.Build.VERSION_CODES.M
import android.os.Handler
import android.os.Looper
import android.text.TextUtils
@@ -60,7 +60,8 @@ class HabitCardViewFactory
data class DelayedToggle(
var habit: Habit,
var timestamp: Timestamp,
var value: Int
var value: Int,
var notes: String
)
class HabitCardView(
@@ -121,11 +122,11 @@ class HabitCardView(
numberPanel.threshold = value
}
var notesIndicators
get() = checkmarkPanel.notesIndicators
var notes
get() = checkmarkPanel.notes
set(values) {
checkmarkPanel.notesIndicators = values
numberPanel.notesIndicators = values
checkmarkPanel.notes = values
numberPanel.notes = values
}
var checkmarkPanel: CheckmarkPanelView
@@ -153,15 +154,17 @@ class HabitCardView(
maxLines = 2
ellipsize = TextUtils.TruncateAt.END
layoutParams = LinearLayout.LayoutParams(0, WRAP_CONTENT, 1f)
if (SDK_INT >= M) breakStrategy = BREAK_STRATEGY_BALANCED
if (SDK_INT >= Build.VERSION_CODES.Q) {
breakStrategy = BREAK_STRATEGY_BALANCED
}
}
checkmarkPanel = checkmarkPanelFactory.create().apply {
onToggle = { timestamp, value ->
triggerRipple(timestamp)
onToggle = { timestamp, value, notes, delay ->
if (delay > 0) triggerRipple(timestamp)
habit?.let {
val taskId = queueToggle(it, timestamp, value);
{ runPendingToggles(taskId) }.delay(TOGGLE_DELAY_MILLIS)
val taskId = queueToggle(it, timestamp, value, notes);
{ runPendingToggles(taskId) }.delay(delay)
}
}
onEdit = { timestamp ->
@@ -205,7 +208,7 @@ class HabitCardView(
@Synchronized
private fun runPendingToggles(id: Int) {
if (currentToggleTaskId != id) return
for ((h, t, v) in queuedToggles) behavior.onToggle(h, t, v)
for ((h, t, v, n) in queuedToggles) behavior.onToggle(h, t, v, n)
queuedToggles.clear()
}
@@ -213,10 +216,11 @@ class HabitCardView(
private fun queueToggle(
it: Habit,
timestamp: Timestamp,
value: Int
value: Int,
notes: String,
): Int {
currentToggleTaskId += 1
queuedToggles.add(DelayedToggle(it, timestamp, value))
queuedToggles.add(DelayedToggle(it, timestamp, value, notes))
return currentToggleTaskId
}
@@ -306,8 +310,6 @@ class HabitCardView(
}
companion object {
const val TOGGLE_DELAY_MILLIS = 2000L
fun (() -> Unit).delay(delayInMillis: Long) {
Handler(Looper.getMainLooper()).postDelayed(this, delayInMillis)
}

View File

@@ -29,7 +29,9 @@ import android.view.View
import android.view.View.OnClickListener
import android.view.View.OnLongClickListener
import org.isoron.uhabits.R
import org.isoron.uhabits.core.models.NumericalHabitType
import org.isoron.uhabits.core.models.Entry
import org.isoron.uhabits.core.models.NumericalHabitType.AT_LEAST
import org.isoron.uhabits.core.models.NumericalHabitType.AT_MOST
import org.isoron.uhabits.core.preferences.Preferences
import org.isoron.uhabits.inject.ActivityContext
import org.isoron.uhabits.utils.InterfaceUtils.getDimension
@@ -37,7 +39,6 @@ import org.isoron.uhabits.utils.dim
import org.isoron.uhabits.utils.drawNotesIndicator
import org.isoron.uhabits.utils.getFontAwesome
import org.isoron.uhabits.utils.sres
import java.lang.Double.max
import java.text.DecimalFormat
import javax.inject.Inject
@@ -90,7 +91,7 @@ class NumberButtonView(
invalidate()
}
var targetType = NumericalHabitType.AT_LEAST
var targetType = AT_LEAST
set(value) {
field = value
invalidate()
@@ -101,13 +102,14 @@ class NumberButtonView(
field = value
invalidate()
}
var hasNotes = false
var notes = ""
set(value) {
field = value
invalidate()
}
var onEdit: () -> Unit = {}
var onEdit: () -> Unit = { }
private var drawer: Drawer = Drawer(context)
init {
@@ -143,6 +145,12 @@ class NumberButtonView(
private val lowContrast: Int
private val mediumContrast: Int
private val paint = TextPaint().apply {
typeface = getFontAwesome()
isAntiAlias = true
textAlign = Paint.Align.CENTER
}
private val pUnit: TextPaint = TextPaint().apply {
textSize = getDimension(context, R.dimen.smallerTextSize)
typeface = NORMAL_TYPEFACE
@@ -164,18 +172,11 @@ class NumberButtonView(
}
fun draw(canvas: Canvas) {
var activeColor = if (targetType == NumericalHabitType.AT_LEAST) {
when {
value < 0.0 && preferences.areQuestionMarksEnabled -> lowContrast
max(0.0, value) >= threshold -> color
else -> mediumContrast
}
} else {
when {
value < 0.0 && preferences.areQuestionMarksEnabled -> lowContrast
value <= threshold -> color
else -> mediumContrast
}
val activeColor = when {
value < 0.0 -> lowContrast
(targetType == AT_LEAST) && (value >= threshold) -> color
(targetType == AT_MOST) && (value <= threshold) -> color
else -> mediumContrast
}
val label: String
@@ -183,6 +184,11 @@ class NumberButtonView(
val textSize: Float
when {
value == Entry.SKIP.toDouble() / 1000 -> {
label = resources.getString(R.string.fa_skipped)
textSize = dim(R.dimen.smallTextSize)
typeface = getFontAwesome()
}
value >= 0 -> {
label = value.toShortString()
typeface = BOLD_TYPEFACE
@@ -216,7 +222,7 @@ class NumberButtonView(
canvas.drawText(units, rect.centerX(), rect.centerY(), pUnit)
}
drawNotesIndicator(canvas, color, em, hasNotes)
drawNotesIndicator(canvas, color, em, notes)
}
}
}

View File

@@ -72,13 +72,13 @@ class NumberPanelView(
setupButtons()
}
var notesIndicators = BooleanArray(0)
var notes = arrayOf<String>()
set(values) {
field = values
setupButtons()
}
var onEdit: (Timestamp) -> Unit = {}
var onEdit: (Timestamp) -> Unit = { _ -> }
set(value) {
field = value
setupButtons()
@@ -96,9 +96,9 @@ class NumberPanelView(
index + dataOffset < values.size -> values[index + dataOffset]
else -> 0.0
}
button.hasNotes = when {
index + dataOffset < notesIndicators.size -> notesIndicators[index + dataOffset]
else -> false
button.notes = when {
index + dataOffset < notes.size -> notes[index + dataOffset]
else -> ""
}
button.color = color
button.targetType = targetType

View File

@@ -23,19 +23,21 @@ import android.os.Bundle
import android.view.HapticFeedbackConstants
import android.view.Menu
import android.view.MenuItem
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.isoron.platform.gui.toInt
import org.isoron.uhabits.AndroidDirFinder
import org.isoron.uhabits.HabitsApplication
import org.isoron.uhabits.R
import org.isoron.uhabits.activities.AndroidThemeSwitcher
import org.isoron.uhabits.activities.HabitsDirFinder
import org.isoron.uhabits.activities.common.dialogs.CheckmarkDialog
import org.isoron.uhabits.activities.common.dialogs.CheckmarkPopup
import org.isoron.uhabits.activities.common.dialogs.ConfirmDeleteDialog
import org.isoron.uhabits.activities.common.dialogs.HistoryEditorDialog
import org.isoron.uhabits.activities.common.dialogs.NumberPickerFactory
import org.isoron.uhabits.activities.common.dialogs.NumberPopup
import org.isoron.uhabits.core.commands.Command
import org.isoron.uhabits.core.commands.CommandRunner
import org.isoron.uhabits.core.models.Habit
@@ -47,6 +49,7 @@ import org.isoron.uhabits.core.ui.screens.habits.show.ShowHabitMenuPresenter
import org.isoron.uhabits.core.ui.screens.habits.show.ShowHabitPresenter
import org.isoron.uhabits.core.ui.views.OnDateClickedListener
import org.isoron.uhabits.intents.IntentFactory
import org.isoron.uhabits.utils.currentTheme
import org.isoron.uhabits.utils.showMessage
import org.isoron.uhabits.utils.showSendFileScreen
import org.isoron.uhabits.widgets.WidgetUpdater
@@ -163,32 +166,49 @@ class ShowHabitActivity : AppCompatActivity(), CommandRunner.Listener {
window.decorView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY)
}
override fun showNumberPicker(
override fun showNumberPopup(
value: Double,
unit: String,
notes: String,
dateString: String,
callback: ListHabitsBehavior.NumberPickerCallback,
preferences: Preferences,
callback: ListHabitsBehavior.NumberPickerCallback
) {
NumberPickerFactory(this@ShowHabitActivity).create(value, unit, notes, dateString, callback).show()
val anchor = getPopupAnchor() ?: return
NumberPopup(
context = this@ShowHabitActivity,
prefs = preferences,
notes = notes,
anchor = anchor,
value = value,
).apply {
onToggle = { v, n -> callback.onNumberPicked(v, n) }
show()
}
}
override fun showCheckmarkDialog(
value: Int,
override fun showCheckmarkPopup(
selectedValue: Int,
notes: String,
dateString: String,
preferences: Preferences,
color: PaletteColor,
callback: ListHabitsBehavior.CheckMarkDialogCallback
) {
CheckmarkDialog(this@ShowHabitActivity, preferences).create(
value,
notes,
dateString,
color,
callback,
themeSwitcher.currentTheme!!,
).show()
val anchor = getPopupAnchor() ?: return
CheckmarkPopup(
context = this@ShowHabitActivity,
prefs = preferences,
notes = notes,
color = view.currentTheme().color(color).toInt(),
anchor = anchor,
value = selectedValue,
).apply {
onToggle = { v, n -> callback.onNotesSaved(v, n) }
show()
}
}
private fun getPopupAnchor(): View? {
val dialog = supportFragmentManager.findFragmentByTag("historyEditor") as HistoryEditorDialog?
return dialog?.dataView
}
override fun showEditHabitScreen(habit: Habit) {

View File

@@ -23,10 +23,11 @@ import android.content.Intent
import android.content.SharedPreferences
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
import android.os.Build
import android.os.Build.VERSION
import android.os.Build.VERSION.SDK_INT
import android.os.Bundle
import android.provider.Settings
import android.util.Log
import android.view.View
import androidx.preference.ListPreference
import androidx.preference.Preference
import androidx.preference.PreferenceCategory
@@ -43,6 +44,7 @@ import org.isoron.uhabits.core.ui.NotificationTray
import org.isoron.uhabits.core.utils.DateUtils.Companion.getLongWeekdayNames
import org.isoron.uhabits.notifications.AndroidNotificationTray.Companion.createAndroidNotificationChannel
import org.isoron.uhabits.notifications.RingtoneManager
import org.isoron.uhabits.utils.StyledResources
import org.isoron.uhabits.widgets.WidgetUpdater
import java.util.Calendar
@@ -84,13 +86,19 @@ class SettingsFragment : PreferenceFragmentCompat(), OnSharedPreferenceChangeLis
super.onPause()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val sr = StyledResources(context!!)
view.setBackgroundColor(sr.getColor(R.attr.contrast0))
super.onViewCreated(view, savedInstanceState)
}
override fun onPreferenceTreeClick(preference: Preference): Boolean {
val key = preference.key ?: return false
if (key == "reminderSound") {
showRingtonePicker()
return true
} else if (key == "reminderCustomize") {
if (VERSION.SDK_INT < Build.VERSION_CODES.O) return true
if (SDK_INT < Build.VERSION_CODES.O) return true
createAndroidNotificationChannel(context!!)
val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS)
intent.putExtra(Settings.EXTRA_APP_PACKAGE, context!!.packageName)
@@ -112,7 +120,7 @@ class SettingsFragment : PreferenceFragmentCompat(), OnSharedPreferenceChangeLis
}
updateWeekdayPreference()
if (VERSION.SDK_INT < Build.VERSION_CODES.O)
if (SDK_INT < Build.VERSION_CODES.O)
findPreference("reminderCustomize").isVisible = false
else {
findPreference("reminderSound").isVisible = false

View File

@@ -25,8 +25,6 @@ import android.app.AlarmManager.RTC_WAKEUP
import android.app.PendingIntent
import android.content.Context
import android.content.Context.ALARM_SERVICE
import android.os.Build.VERSION.SDK_INT
import android.os.Build.VERSION_CODES.M
import android.util.Log
import org.isoron.uhabits.core.AppScope
import org.isoron.uhabits.core.models.Habit
@@ -58,10 +56,7 @@ class IntentScheduler
)
return SchedulerResult.IGNORED
}
if (SDK_INT >= M)
manager.setExactAndAllowWhileIdle(alarmType, timestamp, intent)
else
manager.setExact(alarmType, timestamp, intent)
manager.setExactAndAllowWhileIdle(alarmType, timestamp, intent)
return SchedulerResult.OK
}

View File

@@ -20,11 +20,14 @@
package org.isoron.uhabits.intents
import android.app.PendingIntent
import android.app.PendingIntent.FLAG_IMMUTABLE
import android.app.PendingIntent.FLAG_UPDATE_CURRENT
import android.app.PendingIntent.getActivity
import android.app.PendingIntent.getBroadcast
import android.content.Context
import android.content.Intent
import android.net.Uri
import org.isoron.uhabits.activities.habits.list.ListHabitsActivity
import org.isoron.uhabits.core.AppScope
import org.isoron.uhabits.core.models.Habit
import org.isoron.uhabits.core.models.Timestamp
@@ -49,7 +52,7 @@ class PendingIntentFactory
action = WidgetReceiver.ACTION_ADD_REPETITION
if (timestamp != null) putExtra("timestamp", timestamp.unixTime)
},
FLAG_UPDATE_CURRENT
FLAG_IMMUTABLE or FLAG_UPDATE_CURRENT
)
fun dismissNotification(habit: Habit): PendingIntent =
@@ -60,7 +63,7 @@ class PendingIntentFactory
action = WidgetReceiver.ACTION_DISMISS_REMINDER
data = Uri.parse(habit.uriString)
},
FLAG_UPDATE_CURRENT
FLAG_IMMUTABLE or FLAG_UPDATE_CURRENT
)
fun removeRepetition(habit: Habit, timestamp: Timestamp?): PendingIntent =
@@ -72,7 +75,7 @@ class PendingIntentFactory
data = Uri.parse(habit.uriString)
if (timestamp != null) putExtra("timestamp", timestamp.unixTime)
},
FLAG_UPDATE_CURRENT
FLAG_IMMUTABLE or FLAG_UPDATE_CURRENT
)
fun showHabit(habit: Habit): PendingIntent =
@@ -84,7 +87,7 @@ class PendingIntentFactory
habit
)
)
.getPendingIntent(0, FLAG_UPDATE_CURRENT)!!
.getPendingIntent(0, FLAG_IMMUTABLE or FLAG_UPDATE_CURRENT)!!
fun showReminder(
habit: Habit,
@@ -100,7 +103,7 @@ class PendingIntentFactory
putExtra("timestamp", timestamp)
putExtra("reminderTime", reminderTime)
},
FLAG_UPDATE_CURRENT
FLAG_IMMUTABLE or FLAG_UPDATE_CURRENT
)
fun snoozeNotification(habit: Habit): PendingIntent =
@@ -111,7 +114,7 @@ class PendingIntentFactory
data = Uri.parse(habit.uriString)
action = ReminderReceiver.ACTION_SNOOZE_REMINDER
},
FLAG_UPDATE_CURRENT
FLAG_IMMUTABLE or FLAG_UPDATE_CURRENT
)
fun toggleCheckmark(habit: Habit, timestamp: Long?): PendingIntent =
@@ -123,26 +126,7 @@ class PendingIntentFactory
action = WidgetReceiver.ACTION_TOGGLE_REPETITION
if (timestamp != null) putExtra("timestamp", timestamp)
},
FLAG_UPDATE_CURRENT
)
fun setNumericalValue(
widgetContext: Context,
habit: Habit,
numericalValue: Int,
timestamp: Long?
):
PendingIntent =
getBroadcast(
widgetContext,
2,
Intent(widgetContext, WidgetReceiver::class.java).apply {
data = Uri.parse(habit.uriString)
action = WidgetReceiver.ACTION_SET_NUMERICAL_VALUE
putExtra("numericalValue", numericalValue)
if (timestamp != null) putExtra("timestamp", timestamp)
},
FLAG_UPDATE_CURRENT
FLAG_IMMUTABLE or FLAG_UPDATE_CURRENT
)
fun updateWidgets(): PendingIntent =
@@ -152,6 +136,19 @@ class PendingIntentFactory
Intent(context, WidgetReceiver::class.java).apply {
action = WidgetReceiver.ACTION_UPDATE_WIDGETS_VALUE
},
FLAG_UPDATE_CURRENT
FLAG_IMMUTABLE or FLAG_UPDATE_CURRENT
)
fun showNumberPicker(habit: Habit, timestamp: Timestamp): PendingIntent? {
return getActivity(
context,
0,
Intent(context, ListHabitsActivity::class.java).apply {
action = ListHabitsActivity.ACTION_EDIT
putExtra("habit", habit.id)
putExtra("timestamp", timestamp.unixTime)
},
FLAG_IMMUTABLE or FLAG_UPDATE_CURRENT
)
}
}

View File

@@ -25,7 +25,6 @@ import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.graphics.BitmapFactory.decodeResource
import android.graphics.Color
import android.os.Build
import android.os.Build.VERSION.SDK_INT
import android.util.Log
@@ -113,7 +112,7 @@ class AndroidNotificationTray
val enterAction = Action(
R.drawable.ic_action_check,
context.getString(R.string.enter),
pendingIntents.setNumericalValue(context, habit, 0, null)
pendingIntents.showNumberPicker(habit, timestamp)
)
val wearableBg = decodeResource(context.resources, R.drawable.stripe)
@@ -150,16 +149,15 @@ class AndroidNotificationTray
if (!disableSound)
builder.setSound(ringtoneManager.getURI())
if (preferences.shouldMakeNotificationsLed())
builder.setLights(Color.RED, 1000, 1000)
val snoozeAction = Action(
R.drawable.ic_action_snooze,
context.getString(R.string.snooze),
pendingIntents.snoozeNotification(habit)
)
wearableExtender.addAction(snoozeAction)
builder.addAction(snoozeAction)
if (SDK_INT < Build.VERSION_CODES.S) {
val snoozeAction = Action(
R.drawable.ic_action_snooze,
context.getString(R.string.snooze),
pendingIntents.snoozeNotification(habit)
)
wearableExtender.addAction(snoozeAction)
builder.addAction(snoozeAction)
}
builder.extend(wearableExtender)
return builder.build()

View File

@@ -90,8 +90,6 @@ class SharedPreferencesStorage
preferences.isMidnightDelayEnabled = getBoolean(key, false)
"pref_sticky_notifications" ->
preferences.setNotificationsSticky(getBoolean(key, false))
"pref_led_notifications" ->
preferences.setNotificationsLed(getBoolean(key, false))
"pref_unknown_enabled" -> {
preferences.areQuestionMarksEnabled = getBoolean(key, false)
}

View File

@@ -22,6 +22,8 @@ import android.content.BroadcastReceiver
import android.content.ContentUris
import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.Build.VERSION.SDK_INT
import android.util.Log
import org.isoron.uhabits.HabitsApplication
import org.isoron.uhabits.core.models.Habit
@@ -76,8 +78,21 @@ class ReminderReceiver : BroadcastReceiver() {
}
ACTION_SNOOZE_REMINDER -> {
if (habit == null) return
Log.d("ReminderReceiver", String.format("onSnoozePressed habit=%d", habit.id))
reminderController.onSnoozePressed(habit, context)
if (SDK_INT < Build.VERSION_CODES.S) {
Log.d(
"ReminderReceiver",
String.format("onSnoozePressed habit=%d", habit.id)
)
reminderController.onSnoozePressed(habit, context)
} else {
Log.w(
"ReminderReceiver",
String.format(
"onSnoozePressed habit=%d, should be deactivated in recent versions.",
habit.id
)
)
}
}
Intent.ACTION_BOOT_COMPLETED -> {
Log.d("ReminderReceiver", "onBootCompleted")

View File

@@ -27,7 +27,6 @@ import org.isoron.uhabits.HabitsApplication
import org.isoron.uhabits.core.ui.widgets.WidgetBehavior
import org.isoron.uhabits.inject.HabitsApplicationComponent
import org.isoron.uhabits.intents.IntentParser.CheckmarkIntentData
import org.isoron.uhabits.widgets.activities.NumericalCheckmarkWidgetActivity
/**
* The Android BroadcastReceiver for Loop Habit Tracker.
@@ -96,15 +95,6 @@ class WidgetReceiver : BroadcastReceiver() {
data.timestamp
)
}
ACTION_SET_NUMERICAL_VALUE -> {
context.sendBroadcast(Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS))
val numberSelectorIntent = Intent(context, NumericalCheckmarkWidgetActivity::class.java)
numberSelectorIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
numberSelectorIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
numberSelectorIntent.action = NumericalCheckmarkWidgetActivity.ACTION_SHOW_NUMERICAL_VALUE_ACTIVITY
parser.copyIntentData(intent, numberSelectorIntent)
context.startActivity(numberSelectorIntent)
}
ACTION_UPDATE_WIDGETS_VALUE -> {
widgetUpdater.updateWidgets()
widgetUpdater.scheduleStartDayWidgetUpdate()
@@ -126,7 +116,6 @@ class WidgetReceiver : BroadcastReceiver() {
const val ACTION_DISMISS_REMINDER = "org.isoron.uhabits.ACTION_DISMISS_REMINDER"
const val ACTION_REMOVE_REPETITION = "org.isoron.uhabits.ACTION_REMOVE_REPETITION"
const val ACTION_TOGGLE_REPETITION = "org.isoron.uhabits.ACTION_TOGGLE_REPETITION"
const val ACTION_SET_NUMERICAL_VALUE = "org.isoron.uhabits.ACTION_SET_NUMERICAL_VALUE"
const val ACTION_UPDATE_WIDGETS_VALUE = "org.isoron.uhabits.ACTION_UPDATE_WIDGETS_VALUE"
private const val TAG = "WidgetReceiver"
var lastReceivedIntent: Intent? = null

View File

@@ -22,14 +22,13 @@ import android.app.Activity
import android.app.KeyguardManager
import android.content.Context
import android.os.Build
import android.os.Build.VERSION.SDK_INT
import android.view.WindowManager
object SystemUtils {
val isAndroidOOrLater: Boolean
get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
fun unlockScreen(activity: Activity) {
if (isAndroidOOrLater) {
if (SDK_INT >= Build.VERSION_CODES.O) {
val km = activity.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
km.requestDismissKeyguard(activity, null)
} else {

View File

@@ -20,6 +20,7 @@
package org.isoron.uhabits.utils
import android.app.Activity
import android.app.Dialog
import android.content.ActivityNotFoundException
import android.content.Intent
import android.graphics.Canvas
@@ -27,11 +28,14 @@ import android.graphics.Color
import android.graphics.Paint
import android.graphics.drawable.ColorDrawable
import android.os.Handler
import android.os.SystemClock
import android.view.LayoutInflater
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
import android.view.WindowManager
import android.widget.RelativeLayout
import android.widget.RelativeLayout.ALIGN_PARENT_BOTTOM
import android.widget.RelativeLayout.ALIGN_PARENT_TOP
@@ -202,10 +206,10 @@ fun View.sp(value: Float) = InterfaceUtils.spToPixels(context, value)
fun View.dp(value: Float) = InterfaceUtils.dpToPixels(context, value)
fun View.str(id: Int) = resources.getString(id)
fun View.drawNotesIndicator(canvas: Canvas, color: Int, size: Float, hasNotes: Boolean) {
fun View.drawNotesIndicator(canvas: Canvas, color: Int, size: Float, notes: String) {
val pNotesIndicator = Paint()
pNotesIndicator.color = color
if (hasNotes) {
if (notes.isNotBlank()) {
val cy = 0.8f * size
canvas.drawCircle(width.toFloat() - cy, cy, 8f, pNotesIndicator)
}
@@ -213,3 +217,21 @@ fun View.drawNotesIndicator(canvas: Canvas, color: Int, size: Float, hasNotes: B
val View.sres: StyledResources
get() = StyledResources(context)
fun Dialog.dimBehind() {
window?.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
window?.setDimAmount(0.5f)
}
fun View.requestFocusWithKeyboard() {
// For some reason, Android does not open the soft keyboard by default when view.requestFocus
// is called. Several online solutions suggest using InputMethodManager, but these solutions
// are not reliable; sometimes the keyboard does not show, and sometimes it does not go away
// after focus is lost. Here, we simulate a click on the view, which triggers the keyboard.
// Based on: https://stackoverflow.com/a/7699556
postDelayed({
val time = SystemClock.uptimeMillis()
dispatchTouchEvent(MotionEvent.obtain(time, time, MotionEvent.ACTION_DOWN, 0f, 0f, 0))
dispatchTouchEvent(MotionEvent.obtain(time, time, MotionEvent.ACTION_UP, 0f, 0f, 0))
}, 250)
}

View File

@@ -43,7 +43,7 @@ open class CheckmarkWidget(
override fun getOnClickPendingIntent(context: Context): PendingIntent? {
return if (habit.isNumerical) {
pendingIntentFactory.setNumericalValue(context, habit, 10, null)
pendingIntentFactory.showNumberPicker(habit, DateUtils.getToday())
} else {
pendingIntentFactory.toggleCheckmark(habit, null)
}

View File

@@ -1,91 +0,0 @@
/*
* Copyright (C) 2016-2021 Álinson Santos Xavier <git@axavier.org>
*
* This file is part of Loop Habit Tracker.
*
* Loop Habit Tracker is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* Loop Habit Tracker is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.isoron.uhabits.widgets.activities
import android.app.Activity
import android.content.Context
import android.os.Bundle
import android.view.Window
import android.widget.FrameLayout
import org.isoron.uhabits.HabitsApplication
import org.isoron.uhabits.activities.AndroidThemeSwitcher
import org.isoron.uhabits.activities.common.dialogs.NumberPickerFactory
import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior
import org.isoron.uhabits.core.ui.widgets.WidgetBehavior
import org.isoron.uhabits.core.utils.DateUtils
import org.isoron.uhabits.intents.IntentParser
import org.isoron.uhabits.utils.SystemUtils
import org.isoron.uhabits.widgets.WidgetUpdater
class NumericalCheckmarkWidgetActivity : Activity(), ListHabitsBehavior.NumberPickerCallback {
private lateinit var behavior: WidgetBehavior
private lateinit var data: IntentParser.CheckmarkIntentData
private lateinit var widgetUpdater: WidgetUpdater
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requestWindowFeature(Window.FEATURE_NO_TITLE)
setContentView(FrameLayout(this))
val app = this.applicationContext as HabitsApplication
val component = app.component
val parser = app.component.intentParser
data = parser.parseCheckmarkIntent(intent)
behavior = WidgetBehavior(
component.habitList,
component.commandRunner,
component.notificationTray,
component.preferences
)
widgetUpdater = component.widgetUpdater
showNumberSelector(this)
SystemUtils.unlockScreen(this)
}
override fun onNumberPicked(newValue: Double, notes: String) {
behavior.setValue(data.habit, data.timestamp, (newValue * 1000).toInt(), notes)
widgetUpdater.updateWidgets()
finish()
}
override fun onNumberPickerDismissed() {
finish()
}
private fun showNumberSelector(context: Context) {
val app = this.applicationContext as HabitsApplication
AndroidThemeSwitcher(this, app.component.preferences).apply()
val numberPickerFactory = NumberPickerFactory(context)
val today = DateUtils.getTodayWithOffset()
val entry = data.habit.computedEntries.get(today)
numberPickerFactory.create(
entry.value / 1000.0,
data.habit.unit,
entry.notes,
today.toDialogDateString(),
this
).show()
}
companion object {
const val ACTION_SHOW_NUMERICAL_VALUE_ACTIVITY = "org.isoron.uhabits.ACTION_SHOW_NUMERICAL_VALUE_ACTIVITY"
}
}

View File

@@ -1,4 +1,4 @@
حلقة تعقب الحبوب تساعدك على إنشاء عادات إيجابية طويلة الأجل والحفاظ عليها في حياتك. تعطيكم الرسوم البيانية والإحصاءات التفصيلية صورة واضحة للكيفية التي تحسنت بها عاداتك مع مرور الوقت. التطبيق خالٍ تمامًا من الإعلانات ومفتوح المصدر ويحترم خصوصيتك.
يساعدك Loop Habit Tracker على إنشاء عادات إيجابية طويلة المدى والحفاظ عليها في حياتك. تعطيكم الرسوم البيانية والإحصاءات التفصيلية صورة واضحة للكيفية التي تحسنت بها عاداتك مع مرور الوقت. التطبيق خالٍ تمامًا من الإعلانات ومفتوح المصدر ويحترم خصوصيتك.
<b>واجهة جميلة وبسيطة</b>
يحتوي Loop على واجهة أنيقة وبسيطة وسهلة الاستخدام للغاية ، حتى للمستخدمين لأول مرة. تم تحسين التطبيق ليكون ذي سرعة عالية ، ويعمل التطبيق بشكل جيد حتى على الهواتف القديمة.

View File

@@ -1,29 +1,29 @@
Loop Habit Tracker vám pomáhá vytvořit a udržet si dlouhodobé pozitivní zvyky. Podrobné grafy a statistiky vám ukáží jasný přehled, jak se vaše zvyky postupem času zlepšily. Aplikace je kompletně bez reklam, open source (otevřený zdrojový kód) a respektuje vaše soukromí.
Loop Habit Tracker Vám pomáhá vytvořit a udržet si dlouhodobé pozitivní vyky. Podrobné grafy a statistiky Vám ukáží jasný přehled, jak se Vaše vyky postupem času zlepšily. Aplikace je zcela bez reklam, open-source a respektuje Vaše soukromí.
<b>Krásné, minimalistické a přehledné rozhraní</b>
Loop má elegantní a minimalostické rozhraní, které je velice jednoduché k použití. I pro nové uživatele. Skvěle optimalizováno pro rychlost, aplikace funguje i na starších telefonech.
Loop má elegantní a minimalistické rozhraní, které je jednoduché na ovládání i pro nové uživatele. Díky vysoké optimalizaci pro rychlost aplikace funguje skvěle i na starších telefonech.
<b>Skóre návyků</b>
Loop má propracovaný vzorec pro výpočet síly vašich návyků. Každé opakování posílí váš zvyk a každé vynechání ho oslabí. Ale pár zmeškaných dní po dlouhém období vám kompletně nezničí váš pokrok, jako u mnoho jiných aplikací soustředěných na "nepřerušení řetězce".
Loop má propracovaný vzorec pro výpočet síly vašich návyků. Každé opakování posílí váš zvyk a každé vynechání ho oslabí. Pár zmeškaných dní po dlouhé výzvě Vám, na rozdíl od jiných aplikací, ve kterých nesmíte vynechat ani jeden den, nezničí Váš pokrok.
<b>Flexibilní plánování</b>
Kromě každodenních návyků podporuje Loop návyky se složitějšími plány, například třikrát týdně nebo každý druhý den.
Kromě každodenních návyků podporuje Loop i návyky náročné na plánování, například třikrát týdně nebo každý druhý den.
<b>Připomenutí</b>
Nastavte si oznámení, aby vám připomněly vaše návyky. Každý návyk může mít svou notifikaci ve zvoleném čase. Jednoduše potvrďte nebo zamítněte návyk přímo z notifikace.
Nastavte si upozornění, která Vám budou Vaše návyky připomínat. Pro každý návyk může být nastavena připomínka dle Vámi zvoleného času. Jednoduše potvrďte nebo propusťte návyk přímo z upozornění.
<b>Widgety</b>
Nechte si při každém odemknutí telefonu připomenout vaše návyky. Barevné widgety vám dovolují sledovat vaše návyky přimo z vaší domovské obrazovky, aniž byste museli otevřít aplikaci.
Nechte si při každém odemknutí telefonu připomenout Vaše návyky. Barevné widgety Vám dovolí sledovat Vaše návyky přímo z Vaší domovské obrazovky, aniž byste museli otevřít aplikaci.
<b>Převezměte kontrolu nad svými daty</b>
Pokud chcete dále analyzovat vaše údaje, nebo je přesunout do jiné služby, Loop umožňuje je exportovat do tabulek (CSV) nebo do databázového souboru (SQLite). Pokročilí uživatelé můžou propojit ovládání i skrze jiné aplikace, jako je Tasker.
Pokud chcete dále analyzovat Vaše data, nebo je přesunout do jiné služby, můžete je díky Loop exportovat do tabulek (CSV) nebo do databázového souboru (SQLite). Pokročilí uživatelé mohou propojit ovládání i skrze jiné aplikace, jako je Tasker.
<b>Bez omezení</b>
Sledujte si tolik návyků, kolik chcete. Loop nenastavuje žádné umělé omezení počtu návyků, které můžete sledovat. Všechny funkce jsou k dispozici všem uživatelům. Neexistují žádné nákupy v aplikaci.
Sledujte tolik návyků, kolik chcete. Loop nenastavuje žádné umělé omezení počtu návyků, které můžete sledovat. Všechny funkce jsou k dispozici všem uživatelům. V aplikaci nic nenakupujete.
<b>Zcela bez reklam a open source</b>
V této aplikaci nejsou žádné reklamy, nepříjemná oznámení nebo dotěrná oprávnění a nikdy zde nebudou. Aplikace je zcela open-source (GPLv3).
V této aplikaci nejsou žádné reklamy, nepříjemná oznámení nebo dotěrná oprávnění, a ani nikdy nebudou. Aplikace je zcela open-source (GPLv3).
<b>Funguje offline a respektuje vaše soukromí</b>
Loop nevyžaduje připojení k Internetu ani registraci online účtu. Vaše důvěrné údaje nejsou nikdy nikomu zaslány. Nemají k nim přístup ani vývojáři, nebo třetí strany.
<b>Funguje off-line a respektuje vaše soukromí</b>
Loop nevyžaduje připojení k internetu ani online registraci účtu. Vaše důvěrná data nikdy nikomu neodesíláme. Nemají k nim přístup ani vývojáři, nebo třetí strany.

View File

@@ -1 +1 @@
Loop Habit Tracker
عادت‌سنج لوپ

View File

@@ -22,7 +22,7 @@ Si vous souhaitez analyser davantage vos données ou les déplacer vers un autre
Suivez autant d'habitudes que vous le souhaitez. Loop n'impose aucune limite artificielle sur le nombre d'habitudes que vous pouvez avoir. Toutes les fonctionnalités sont disponibles pour tous les utilisateurs. Il n'y a aucun achat dans l'application.
<b>Entièrement sans publicité et open source</b>
Il n'y a pas de publicités, de notifications agaçantes ou d'autorisations intrusives dans cette application. Il n'y en aura jamais. L'application est entièrement open-source (GPLv3).
Il n'y a pas de publicités, de notifications agaçantes ou d'autorisations intrusives dans cette application. L'application est entièrement open-source (GPLv3).
<b>Fonctionne hors ligne et respecte votre vie privée</b>
Loop ne nécessite pas de connexion Internet ni d'enregistrement d'un compte en ligne. Vos données confidentielles ne sont jamais envoyées à personne. Ni les développeurs ni aucun tiers n'y ont accès.

View File

@@ -1,13 +1,13 @@
„Loop למעקב אחר ההרגלים מסייע לך ביצירה ובשימור הרגלים טובים וארוכי טווח. תרשימים וסטטיסטיקה מפורטים נותנים לך תמונה ברורה כיצד ההרגלים שלך השתפרו לאורך זמן. היישום נטול פרסומות לחלוטין, קוד המקור שלו פתוח והוא מכבד את הפרטיות שלך.
יישום ”Loop לניהול הרגלים מסייע לך ביצירה ובשימור הרגלים טובים וארוכי טווח. תרשימים וסטטיסטיקה מפורטים נותנים לך תמונה ברורה כיצד ההרגלים שלך השתפרו לאורך זמן. היישום נטול פרסומות לחלוטין, קוד המקור שלו פתוח והוא מכבד את הפרטיות שלך.
<b>ממשק יפה, חסכוני וקליל</b>
ל־Loop ממשק אלגנטי, חסכוני וקל לשימוש אפילו בפעם הראשונה. היישום מותאם במיוחד למהירות, ועובד היטב גם בטלפונים ישנים.
הממשק של Loop אלגנטי, חסכוני וקל לשימוש אפילו בפעם הראשונה. היישום מותאם במיוחד למהירות, ועובד היטב גם בטלפונים ישנים.
<b>ציון הרגל</b>
ל־Loop יש נוסחה מתקדמת לחישוב חוזק ההרגלים שלך. כל חזרה על ההרגל מחזקת אותו, וכל יום שהוחמץ מחליש אותו. כמה ימים שהוחמצו לאחר רצף ארוך, לעומת זאת, לא יהרסו לחלוטין את ההתקדמות, בניגוד ליישומים רבים אחרים מסוג לא לשבור את השרשרת.
ל־Loop יש נוסחה מתקדמת לחישוב חוזק ההרגלים שלך. כל חזרה על ההרגל מחזקת אותו, וכל יום שהוחמץ מחליש אותו. כמה ימים שהוחמצו לאחר רצף ארוך, לעומת זאת, לא יהרסו לחלוטין את ההתקדמות, בניגוד ליישומים רבים אחרים מסוג לא לשבור את השרשרת.
<b>לוחות זמנים גמישים</b>
בנוסף להרגלים יומיומיים, Loop תומך בהרגלים עם לוחות זמנים מורכבים יותר, כמו 3 פעמים בשבוע או יום כן יום לא.
בנוסף להרגלים יומיומיים, Loop תומך בהרגלים עם לוחות זמנים מורכבים יותר, כמו 3 פעמים בשבוע או יום כן ויום לא.
<b>תזכורות</b>
אפשר לתזמן התראות קבועות עם תזכורות לגבי ההרגלים שלך. לכל הרגל יכולה להיות תזכורת משלו, בשעה שנבחרה ביום. אפשר לסמן או לדחות את עשיית ההרגל ישירות מההתראה בקלות.

View File

@@ -1 +1 @@
Loop Habit Tracker
Loop לניהול הרגלים

View File

@@ -1,4 +1,4 @@
Aplikacja "Śledzenie nawyków Loop" pomaga tworzyć i utrzymywać długotrwałe pozytywne nawyki w twoim życiu. Szczegółowe wykresy i statystyki dają jasny obraz tego, jak Twoje nawyki uległy poprawie z upływem czasu. Aplikacja jest całkowicie wolna od reklam, otwartoźródłowa i szanuje Twoją prywatność.
Loop Habit Tracker to aplikacja która pomaga tworzyć i podtrzymać długoterminowe pozytywne nawyki w Twoim życiu. Szczegółowe wykresy i statystyki dają jasny obraz tego, jak Twoje nawyki uległy poprawie z upływem czasu. Aplikacja jest całkowicie wolna od reklam, otwartoźródłowa i szanuje Twoją prywatność.
<b>Piękny, minimalistyczny i lekki interfejs</b>
Aplikacja "Śledzenie nawyków Loop" ma elegancki i minimalistyczny interfejs, który jest bardzo łatwy w obsłudze, nawet dla początkujących użytkowników. Jest ona wysoce zoptymalizowana pod kątem szybkości działania nawet na starszych telefonach.

View File

@@ -1 +1 @@
Twórz dobre nawyki i śledź ich postępy w czasie (bez reklam)
Twórz dobre nawyki i śledź postępy (bez reklam)

View File

@@ -1 +1 @@
Śledzenie Nawyków Loop
Loop Habit Tracker

View File

@@ -16,7 +16,7 @@ Agende notificações para lembrá-lo de seus hábitos. Cada hábito pode ter se
Lembre-se de seus hábitos sempre que desbloquear o telefone. Widgets coloridos permitem que você acompanhe seus hábitos diretamente na tela inicial, sem abrir o aplicativo.
<b>Assuma o controle de seus dados</b>
Se você deseja analisar melhor seus dados ou movê-los para outro serviço, o Loop permite exportá-los para planilhas (CSV) ou para um arquivo de banco de dados (SQLite). Para usuários avançados, marcas de seleção podem ser adicionadas através de outros aplicativos, como o Tasker.
Se você deseja analisar melhor seus dados ou movê-los para outro serviço, o Loop permite exportá-los para planilhas (CSV) ou para um arquivo de banco de dados (SQLite). Para usuários avançados, dados podem ser adicionadas através de outros aplicativos, como o Tasker.
<b>Sem limitações</b>
Acompanhe quantos hábitos desejar. O Loop não impõe limites artificiais sobre quantos hábitos você pode ter. Todos os recursos estão disponíveis para todos os usuários. Não há nenhum item à venda no aplicativo.

View File

@@ -1,4 +1,4 @@
Loop Alışkanlık Takibi, yaşamınızda uzun vadeli olumlu alışkanlıklar yaratmanıza ve sürdürmenize yardımcı olur. Ayrıntılı grafik ve istatistikler, alışkanlıklarınızın zaman içinde nasıl geliştiğine dair size net bir resim sunar. Uygulama tamamen reklamsız ve açık kaynaklıdır. Gizliliğinize saygı duyar.
Loop Alışkanlık Takibi, yaşamınızda uzun vadeli olumlu alışkanlıklar yaratmanıza ve sürdürmenize yardımcı olur. Ayrıntılı grafik ve istatistikler, alışkanlıklarınızın zaman içinde nasıl geliştiğine dair size net bir resim sunar. Uygulama tamamen reklamsız ve açık kaynaklıdır.
<b>Güzel, minimalist ve basit arayüz</b>
Loop, ilk kez kullananlar için bile kullanımı çok kolay olan zarif ve minimalist bir arayüze sahiptir. Hız için son derece optimize edilmiş olan bu uygulama, eski telefonlarda bile gayet iyi çalışır.

View File

@@ -10,13 +10,13 @@ Loop 有高级的公式来计算您习惯的强度。 多多重复会使你的
除了每天习惯之外Loop 还支持更加复杂的时间安排,例如每周三次或每天三次。
<b>提醒</b>
设定通知以提醒您完成习惯。 每一种习惯都有属于自己的通知,您可以选定当天的某个时间提醒该习惯。 同时从通知中轻松地检查或取消您的习惯。
设定通知以提醒您完成习惯。 您可以为每个习惯单独设置提醒,选定当天的某个时间提醒该习惯。 同时从通知中轻松地检查或取消您的习惯。
<b>微件</b>
当您解锁手机时, 多彩的小部件可让您直接从主屏幕记录自己的习惯,而无需打开应用程序。
<b>掌控您的数据</b>
如果您想进一步分析数据或将数据备份,则可以使用 Loop 将其导出为电子表格CSV或数据库文件SQLite。 对于高级用户,可以通过其他应用程序(例如Tasker)使其自动化操作
如果您想进一步分析数据或将数据备份,则可以使用 Loop 将其导出为电子表格CSV或数据库文件SQLite。 对于高级用户,可以通过其他应用如 Tasker 实现自动化添加标记
<b>无限制</b>
想记录多少习惯都没问题! Loop 对您的习惯没有任何限制, 所有用户均可使用所有功能, 并且没有应用内购买。

View File

@@ -1,12 +1,6 @@
2.0.3:
* Bug fixes
2.0:
* Track numeric habits (e.g. how many pages did you read?)
* Skip days without breaking your streak
* Show question marks for days with missing data
* Extend day a few hours past midnight
* Show multiple habits in a single widget
* Export daily backups automatically
* Sort habits by status and in reverse
* Add notes to habits
* Improve theme and accessibility
2.1:
* Add notes to specific dates
* Track at-most measurable habits
* Add skips to measurable habits
* Bring back custom frequencies
* Other minor improvements and bug fixes

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (C) 2016-2021 Álinson Santos Xavier <git@axavier.org>
~
~ This file is part of Loop Habit Tracker.
~
~ Loop Habit Tracker is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by the
~ Free Software Foundation, either version 3 of the License, or (at your
~ option) any later version.
~
~ Loop Habit Tracker is distributed in the hope that it will be useful, but
~ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
~ more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="?attr/contrast0" />
<stroke
android:width="2dp"
android:color="?contrast40" />
<corners android:radius="5dp" />
</shape>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2016-2021 Álinson Santos Xavier <git@axavier.org>
~
~ This file is part of Loop Habit Tracker.
~
~ Loop Habit Tracker is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by the
~ Free Software Foundation, either version 3 of the License, or (at your
~ option) any later version.
~
~ Loop Habit Tracker is distributed in the hope that it will be useful, but
~ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
~ more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<size android:width="1dip"/>
<size android:height="1dip"/>
<solid android:color="?contrast40"/>
</shape>

View File

@@ -123,11 +123,11 @@
<TextView style="@style/About.Item" android:text="Álinson S. Xavier (@iSoron)"/>
<TextView style="@style/About.Item" android:text="Quentin Hibon (@hiqua)"/>
<TextView style="@style/About.Item" android:text="Oleg Ivashchenko (@olegivo)"/>
<TextView style="@style/About.Item" android:text="Rechee Jozil (@recheej)"/>
<TextView style="@style/About.Item" android:text="Jakub Kalinowski (@kalina559)"/>
<TextView style="@style/About.Item" android:text="Luboš Luňák (@llunak)"/>
<TextView style="@style/About.Item" android:text="Sebastian Gallese (@sgallese)"/>
<TextView style="@style/About.Item" android:text="Kristian Tashkov (@KristianTashkov)"/>
<TextView style="@style/About.Item" android:text="Jakub Kalinowski (@kalina559)"/>
<TextView style="@style/About.Item" android:text="Rechee Jozil (@recheej)"/>
<TextView style="@style/About.Item" android:text="Sebastian Gallese (@sgallese)"/>
<TextView style="@style/About.Item" android:text="Luboš Luňák (@llunak)"/>
<TextView style="@style/About.Item" android:text="Bindu (@vbh)"/>
<TextView style="@style/About.Item" android:text="Victor Yu (@vyu1)"/>
<TextView style="@style/About.Item" android:text="Christoph Hennemann (@chennemann)"/>

View File

@@ -11,6 +11,7 @@
<TextView style="@style/About.Item" android:text="raden20" />
<TextView style="@style/About.Item.Language" android:text="Català" />
<TextView style="@style/About.Item" android:text="David Nos" />
<TextView style="@style/About.Item" android:text="carllacan" />
<TextView style="@style/About.Item.Language" android:text="Cрпски" />
<TextView style="@style/About.Item" android:text="Rancher" />
<TextView style="@style/About.Item.Language" android:text="Dansk" />
@@ -57,6 +58,7 @@
<TextView style="@style/About.Item" android:text="Eman" />
<TextView style="@style/About.Item" android:text="Saeed Esmaili" />
<TextView style="@style/About.Item.Language" android:text="Hindi" />
<TextView style="@style/About.Item" android:text="Ravi Rami" />
<TextView style="@style/About.Item" android:text="Vijaykumar Borkar" />
<TextView style="@style/About.Item.Language" android:text="Hrvatski" />
<TextView style="@style/About.Item" android:text="Ivan Krušlin" />
@@ -114,18 +116,19 @@
<TextView style="@style/About.Item" android:text="bruhwut" />
<TextView style="@style/About.Item" android:text="pnhpnh" />
<TextView style="@style/About.Item.Language" android:text="Türkçe" />
<TextView style="@style/About.Item" android:text="Alparslan Şakçi" />
<TextView style="@style/About.Item" android:text="Caner Başaran" />
<TextView style="@style/About.Item" android:text="Evren" />
<TextView style="@style/About.Item" android:text="Ishmaeel" />
<TextView style="@style/About.Item" android:text="hodanli" />
<TextView style="@style/About.Item.Language" android:text="Čeština" />
<TextView style="@style/About.Item" android:text="Tomáš Borovec" />
<TextView style="@style/About.Item" android:text="andaryon" />
<TextView style="@style/About.Item" android:text="boban77" />
<TextView style="@style/About.Item.Language" android:text="Ελληνικά" />
<TextView style="@style/About.Item" android:text="Andreas Michelakis" />
<TextView style="@style/About.Item" android:text="DionysosDV" />
<TextView style="@style/About.Item.Language" android:text="Български" />
<TextView style="@style/About.Item" android:text="MStefanov" />
<TextView style="@style/About.Item" android:text="Mihail Stefanov" />
<TextView style="@style/About.Item.Language" android:text="Русский" />
<TextView style="@style/About.Item" android:text="Andrew Firnes" />
@@ -134,11 +137,11 @@
<TextView style="@style/About.Item" android:text="Tanya" />
<TextView style="@style/About.Item" android:text="engineeringforgood" />
<TextView style="@style/About.Item.Language" android:text="Українська" />
<TextView style="@style/About.Item" android:text="Andrij Mizyk" />
<TextView style="@style/About.Item" android:text="Oglaigh Rystard" />
<TextView style="@style/About.Item" android:text="Prosta4ok_ua" />
<TextView style="@style/About.Item" android:text="Rystard" />
<TextView style="@style/About.Item" android:text="Yurii Stavytskyi" />
<TextView style="@style/About.Item" android:text="axmed99" />
<TextView style="@style/About.Item" android:text="taras-ko" />
<TextView style="@style/About.Item.Language" android:text="српски" />
<TextView style="@style/About.Item" android:text="OP Smosher" />
@@ -179,9 +182,9 @@
<TextView style="@style/About.Item" android:text="Lee" />
<TextView style="@style/About.Item" android:text="Limin Lu" />
<TextView style="@style/About.Item" android:text="Liveeasy" />
<TextView style="@style/About.Item" android:text="QWERT" />
<TextView style="@style/About.Item" android:text="Ting-Hua" />
<TextView style="@style/About.Item" android:text="XuToTo" />
<TextView style="@style/About.Item" android:text="hypnotichemionus" />
<TextView style="@style/About.Item" android:text="yoding" />
<TextView style="@style/About.Item" android:text="黄克" />
<TextView style="@style/About.Item.Language" android:text="日本語" />

View File

@@ -1,95 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="12dp"
android:paddingStart="10dp"
android:paddingEnd="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="8dp"
android:baselineAligned="false">
<FrameLayout
style="@style/FormOuterBox"
android:layout_width="0dp"
android:layout_weight="1">
<LinearLayout style="@style/DialogFormInnerBox">
<TextView
style="@style/DialogFormLabel"
android:text="@string/value" />
<LinearLayout
android:orientation="horizontal"
android:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="8dp">
<Button
android:id="@+id/yesBtn"
android:text="@string/fa_check"
style="@style/CheckmarkDialogBtn"/>
<Button
android:id="@+id/skippedBtn"
android:text="@string/fa_skipped"
android:visibility="gone"
style="@style/CheckmarkDialogBtn"/>
<Button
android:id="@+id/noBtn"
android:text="@string/fa_times"
style="@style/CheckmarkDialogBtn"/>
<Button
android:id="@+id/questionBtn"
android:text="@string/fa_question"
android:visibility="gone"
style="@style/CheckmarkDialogBtn"/>
</LinearLayout>
</LinearLayout>
</FrameLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dp"
android:baselineAligned="false">
<FrameLayout
style="@style/FormOuterBox"
android:layout_width="0dp"
android:layout_weight="1">
<LinearLayout style="@style/DialogFormInnerBox">
<TextView
style="@style/DialogFormLabel"
android:text="@string/notes" />
<EditText
android:id="@+id/etNotes"
android:inputType="textCapSentences|textMultiLine"
style="@style/FormInput"
android:scrollbars="vertical"
android:hint="@string/example_notes"/>
</LinearLayout>
</FrameLayout>
</LinearLayout>
</LinearLayout>

View File

@@ -0,0 +1,104 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (C) 2016-2021 Álinson Santos Xavier <git@axavier.org>
~
~ This file is part of Loop Habit Tracker.
~
~ Loop Habit Tracker is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by the
~ Free Software Foundation, either version 3 of the License, or (at your
~ option) any later version.
~
~ Loop Habit Tracker is distributed in the hope that it will be useful, but
~ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
~ more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:divider="@drawable/checkmark_dialog_divider"
app:showDividers="middle"
android:orientation="vertical"
android:background="@drawable/checkmark_dialog_bg">
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/notes"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:inputType="textCapSentences|textMultiLine"
android:textSize="@dimen/smallTextSize"
android:padding="4dp"
android:background="@color/transparent"
android:hint="@string/notes"
android:text="" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/booleanButtons"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="48dp"
android:orientation="horizontal"
app:divider="@drawable/checkmark_dialog_divider"
app:showDividers="middle">
<TextView
android:id="@+id/yesBtn"
style="@style/CheckmarkPopupBtn"
android:text="@string/fa_check" />
<TextView
android:id="@+id/skipBtn"
style="@style/CheckmarkPopupBtn"
android:text="@string/fa_skipped" />
<TextView
android:id="@+id/noBtn"
style="@style/CheckmarkPopupBtn"
android:text="@string/fa_times" />
<TextView
android:id="@+id/unknownBtn"
style="@style/CheckmarkPopupBtn"
android:text="@string/fa_question" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/numberButtons"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="48dp"
android:orientation="horizontal"
app:divider="@drawable/checkmark_dialog_divider"
app:showDividers="middle">
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/value"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@color/transparent"
android:textAlignment="center"
android:inputType="numberDecimal"
android:selectAllOnFocus="true"
android:textSize="@dimen/smallTextSize" />
<TextView
android:id="@+id/skipBtnNumber"
style="@style/NumericalPopupBtn"
android:text="@string/skip_day" />
<TextView
android:id="@+id/saveBtn"
style="@style/NumericalPopupBtn"
android:text="@string/save" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>

View File

@@ -28,7 +28,6 @@
android:id="@+id/habitNotes"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="?attr/contrast100"
tools:text="This is some example text for the notes" />
</merge>

View File

@@ -23,7 +23,7 @@
<string name="action_settings">إعدادات</string>
<string name="edit">تعديل</string>
<string name="delete">حذف</string>
<string name="archive">أرشفة</string>
<string name="archive">أرشيف</string>
<string name="unarchive">إزالة من الأرشيف</string>
<string name="add_habit">إضافة عادة</string>
<string name="color_picker_default_title">تغيير اللون</string>
@@ -48,22 +48,22 @@
<string name="intro_title_2">إنشاء بعض عادات جديدة</string>
<string name="intro_description_2">كل يوم، بعد أداء عادتك، ضع علامة عليها في التطبيق.</string>
<string name="intro_title_4">تتبع تقدمك</string>
<string name="intro_description_4">رسوم بيانية مفصلة تُريك كيف تحسنت عاداتك مع مرور الوقت.</string>
<string name="intro_description_4">رسوم بيانية مفصلة تُريك كيف تحسنت عاداتك مع مرور الوقت. </string>
<string name="interval_15_minutes">15 دقيقة</string>
<string name="interval_30_minutes">30 دقيقة</string>
<string name="interval_1_hour">ساعة واحدة</string>
<string name="interval_2_hour">ساعتان</string>
<string name="interval_4_hour">أربع ساعات</string>
<string name="interval_8_hour">8 ساعات</string>
<string name="interval_24_hour">٢٤ ساعة</string>
<string name="interval_24_hour">24 ساعة</string>
<string name="interval_always_ask">اسأل دائماً </string>
<string name="interval_custom">مخصص... </string>
<string name="pref_toggle_title">تبديل وضعية العادة بضغطة قصيرة </string>
<string name="pref_toggle_description">وضع علامات الاختيار الموجودة بنقرة واحدة بدلاً من الصحافة وعقد. أكثر ملاءمة، ولكن قد يتسبب في تبديل عرضي. </string>
<string name="pref_toggle_description_2">ضع علامات اختيار بنقرة واحدة بدلاً من الضغط مع الاستمرار.</string>
<string name="pref_rate_this_app">تقييم هذا التطبيق على جوجل بلاي </string>
<string name="pref_send_feedback">أرسل الملاحظات إلى المطور </string>
<string name="pref_view_source_code">إفحص التعليمات البرمجية على GitHub </string>
<string name="links">روابط </string>
<string name="links">روابط </string>
<string name="name">اسم </string>
<string name="settings">إعدادات</string>
<string name="select_snooze_delay">حدد تأخير الغفوة </string>
@@ -103,7 +103,7 @@
<string name="generate_bug_report">توليد تقرير الاعطال. </string>
<string name="troubleshooting">استكشاف الأخطاء وإصلاحها. </string>
<string name="help_translate">المساعدة في ترجمة هذا البرنامج. </string>
<string name="night_mode" comment="dark_theme">الوضع الليلي. </string>
<string name="night_mode">الوضع الليلي. </string>
<string name="use_pure_black">استخدام أسود نقي في الوضع الليلي. </string>
<string name="pure_black_description">يستبدل خلفيات رمادية مع أسود نقي في الوضع الليلي. يقلل من استهلاك البطارية في الهواتف مع شاشة AMOLED. .</string>
<string name="interface_preferences">السطح البيني. </string>
@@ -113,7 +113,7 @@
<string name="week">أسبوع. </string>
<string name="month">شهر. </string>
<string name="quarter">ربع سنه. </string>
<string name="year">عام. </string>
<string name="year">عام</string>
<string name="total">المجموع. </string>
<string name="yes_or_no">نعم أو لا </string>
<string name="every_x_days">كل %d أيام </string>
@@ -123,6 +123,7 @@
<string name="none">صامت </string>
<string name="filter">تصنيف </string>
<string name="hide_completed">إخفاء المكتملة </string>
<string name="hide_entered" comment="&quot;Hide entered&quot; appears in place of &quot;hide completed&quot; if the user has enabled the question marks option. This option hides all habits that have any data entered, not just the ones that have been completed. This allows the user to hide habits that have already failed early in the day.">إخفاء المُدخل</string>
<string name="hide_archived">إخفاء المؤرشفة </string>
<string name="sticky_notifications">جعل الإشعارات ثابتة </string>
<string name="sticky_notifications_description">منع الإشعارات من تمريرها بعيداً. </string>
@@ -142,9 +143,12 @@
<string name="by_status">حسب الحالة</string>
<string name="export">استخراج </string>
<string name="long_press_to_edit">اضغط مع الاستمرار لتغيرالقيمه</string>
<string name="change_value">تغيير القيمة </string>
<string name="value">القيمة</string>
<string name="calendar">التقويم </string>
<string name="unit">الوحدة </string>
<string name="target_type">نوع الهدف</string>
<string name="target_type_at_least">على الأقل</string>
<string name="target_type_at_most">على الأكثر</string>
<string name="example_question_boolean">على سبيل المثال هل تمرنت اليوم؟ </string>
<string name="question">السؤال </string>
<string name="target">الهدف </string>
@@ -166,6 +170,7 @@
<string name="measurable_example">مثال، كم ميلاً قطعته اليوم؟ كم عدد الصفحات التي قرأتها؟</string>
<string name="x_times_per_week">%d مرة في الأسبوع</string>
<string name="x_times_per_month">%d مرة في الشهر</string>
<string name="x_times_per_y_days">%d مرات في %d أيام</string>
<string name="yes_or_no_short_example">مثال: التمرين</string>
<string name="color">اللون</string>
<string name="example_target">مثال: 15</string>
@@ -184,6 +189,7 @@
<string name="pref_skip_title">تمكين أيام التخطي</string>
<string name="pref_skip_description">بدّل مرتين لإضافة تخطي بدلاً من علامة اختيار. التخطيات تحافظ على درجاتك دون تغيير أو خسارة سلسلة الانتصارات.</string>
<string name="pref_unknown_title">إظهار علامات الاستفهام للبيانات المفقودة</string>
<string name="pref_unknown_description">التفريق بين الأيام التي لا تحتوي على بيانات من الهفوات الفعلية. للدخول في اللقطات المتتابعة ، قم بالتبديل مرتين.</string>
<string name="you_are_now_a_developer">أنت الآن مطوَِر برمجيات!</string>
<string name="activity_not_found">لم يتم العثور على تطبيق لإتمام هذا الإجراء</string>
<string name="pref_midnight_delay_title">تمديد اليوم بضع ساعات بعد منتصف الليل</string>

View File

@@ -28,7 +28,23 @@
<string name="add_habit">Добавяне на навик</string>
<string name="color_picker_default_title">Промяна на цвят</string>
<string name="toast_habit_created">Навикът е създаден</string>
<string name="overview">Обзор</string>
<plurals name="toast_habits_changed">
<item quantity="one">Навикът е променен</item>
<item quantity="other">Навиците са променени</item>
</plurals>
<plurals name="toast_habits_deleted">
<item quantity="one">Навикът е изтрит</item>
<item quantity="other">Навиците са изтрити</item>
</plurals>
<plurals name="toast_habits_archived">
<item quantity="one">Навикът е архивиран</item>
<item quantity="other">Навиците са архивирани</item>
</plurals>
<plurals name="toast_habits_unarchived">
<item quantity="one">Навикът е разархивиран</item>
<item quantity="other">Навиците са разархивирани</item>
</plurals>
<string name="overview">Обобщение</string>
<string name="habit_strength">Сила на навика</string>
<string name="history">История</string>
<string name="clear">Изчистване</string>
@@ -36,6 +52,7 @@
<string name="save">Запазване</string>
<string name="streaks">Поредици</string>
<string name="no_habits_found">Нямате активни навици</string>
<string name="no_habits_left_to_do">Всичко сте изпълнили за днес!</string>
<string name="long_press_to_toggle">Натиснете и задръжте за да добавите или премахнете отметка</string>
<string name="reminder_off">Изключено</string>
<string name="create_habit">Създаване на навик</string>
@@ -55,17 +72,28 @@
<string name="interval_4_hour">4 часа</string>
<string name="interval_8_hour">8 часа</string>
<string name="interval_24_hour">24 часа</string>
<string name="interval_always_ask">Винаги да се пита</string>
<string name="interval_custom">Персонализирано...</string>
<string name="pref_toggle_title">Маркиране с кратко натискане</string>
<string name="pref_toggle_description">Поставяне на отметки с кратко натискане вместо с натискане и задържане. По-удобно, но може да доведе до неволно маркиране.</string>
<string name="pref_toggle_description_2">Поставяне на отметки с кратко натискане вместо с натискане и задържане</string>
<string name="pref_rate_this_app">Оценяване на това приложение в Google Play</string>
<string name="pref_send_feedback">Изпращане на отзиви към разработчика</string>
<string name="pref_view_source_code">Преглед на програмния код в GitHub</string>
<string name="links">Препратки</string>
<string name="name">Име</string>
<string name="settings">Настройки</string>
<string name="select_snooze_delay">Избор на време за отлагане</string>
<string name="hint_title">Знаете ли че?</string>
<string name="hint_drag">За да пренаредите записите, натиснете и задръжте върху името на навика и го придърпайте до правилното място.</string>
<string name="hint_landscape">Може да виждате повече дни като обърнете телефона си в хоризонтално положение.</string>
<plurals name="delete_habits_title">
<item quantity="one">Изтриване на навик?</item>
<item quantity="other">Изтриване на навици?</item>
</plurals>
<plurals name="delete_habits_message">
<item quantity="one">Навикът ще бъде перманентно изтрит. Това действие не може да бъде отменено.</item>
<item quantity="other">Навиците ще бъдат перманентно изтрити. Това действие не може да бъде отменено.</item>
</plurals>
<string name="habit_not_found">Навикът е изтрит / не е намерен</string>
<string name="weekends">Събота и неделя</string>
<string name="any_weekday">От понеделник до петък</string>
@@ -99,9 +127,9 @@
<string name="generate_bug_report">Генериране на доклад за грешки</string>
<string name="troubleshooting">Отстраняване на проблеми</string>
<string name="help_translate">Помагане за превода на това приложение</string>
<string name="night_mode" comment="dark_theme">Нощен режим</string>
<string name="use_pure_black">Използване на чисто черно при нощен режим</string>
<string name="pure_black_description">Заменя сивите фонове с чисто черни при нощен режим. Намаля разхода на батерията при телефони с AMOLED дисплеи.</string>
<string name="night_mode">Тъмна тема</string>
<string name="use_pure_black">Използване на чисто черно при тъмна тема</string>
<string name="pure_black_description">Заменя сивите фонове с чисто черни при тъмна тема. Намаля разхода на батерията при телефони с AMOLED дисплеи.</string>
<string name="interface_preferences">Интерфейс</string>
<string name="reverse_days">Обратен ред на дните</string>
<string name="reverse_days_description">Показва дните на основния екран в обратен ред</string>
@@ -111,6 +139,7 @@
<string name="quarter">Тримесечие</string>
<string name="year">Година</string>
<string name="total">Общо</string>
<string name="yes_or_no">Да или не</string>
<string name="every_x_days">На всеки %d дни</string>
<string name="every_x_weeks">На всеки %d седмици</string>
<string name="score">Сила</string>
@@ -118,9 +147,12 @@
<string name="none">Няма</string>
<string name="filter">Филтър</string>
<string name="hide_completed">Скриване на завършените</string>
<string name="hide_entered" comment="&quot;Hide entered&quot; appears in place of &quot;hide completed&quot; if the user has enabled the question marks option. This option hides all habits that have any data entered, not just the ones that have been completed. This allows the user to hide habits that have already failed early in the day.">Скриване на въведените</string>
<string name="hide_archived">Скриване на архивираните</string>
<string name="sticky_notifications">Направи нотификациите постоянни</string>
<string name="sticky_notifications_description">Предотвратява изчистването на нотификацията с плъзване настрани.</string>
<string name="sticky_notifications">Направи известията постоянни</string>
<string name="sticky_notifications_description">Предотвратява изчистването на известията с плъзване настрани.</string>
<string name="led_notifications">Светлина за известяване</string>
<string name="led_notifications_description">Показва мигаща светлина за напомняния. Налична само за телефони с LED светлини за известяване.</string>
<string name="repair_database">Поправка на базата данни</string>
<string name="database_repaired">Базата данни е поправена.</string>
<string name="uncheck">Премахване на отметка</string>
@@ -132,5 +164,58 @@
<string name="by_name">По име</string>
<string name="by_color">По цвят</string>
<string name="by_score">По сила</string>
<string name="by_status">По състояние</string>
<string name="export">Експортиране</string>
<string name="long_press_to_edit">Натиснете и задръжте за да промените стойността</string>
<string name="value">Стойност</string>
<string name="calendar">Календар</string>
<string name="unit">Мерна единица</string>
<string name="target_type">Тип на целта</string>
<string name="target_type_at_least">Най-малко</string>
<string name="target_type_at_most">Най-много</string>
<string name="example_question_boolean">напр. Тренирахте ли днес?</string>
<string name="question">Въпрос</string>
<string name="target">Цел</string>
<string name="yes">Да</string>
<string name="no">Не</string>
<string name="customize_notification_summary">Промяна на звук, вибрация, светлина и други настройки на известията</string>
<string name="customize_notification">Персонализиране на известията</string>
<string name="pref_view_privacy">Преглед на политиката за поверителност</string>
<string name="view_all_contributors">Преглед на всички сътрудници...</string>
<string name="database">База данни</string>
<string name="widget_opacity_title">Прозрачност на приспособлението</string>
<string name="widget_opacity_description">Прави приспособленията по-прозрачни или по-непрозрачни на началния ви екран</string>
<string name="first_day_of_the_week">Първи ден от седмицата</string>
<string name="default_reminder_question">Изпълнихте ли навика днес?</string>
<string name="notes">Бележки</string>
<string name="example_notes">(Незадължително)</string>
<string name="yes_or_no_example">напр. Събудихте ли се рано днес? Тренирахте ли? Играхте ли шах?</string>
<string name="measurable">Измерим</string>
<string name="measurable_example">напр. Колко километра пробягахте днес? Колко страници прочетохте?</string>
<string name="x_times_per_week">%d пъти седмично</string>
<string name="x_times_per_month">%d пъти месечно</string>
<string name="x_times_per_y_days">%d пъти в период от %d дни</string>
<string name="yes_or_no_short_example">напр. Тренировка</string>
<string name="color">Цвят</string>
<string name="example_target">напр. 15</string>
<string name="measurable_short_example">напр. Бягане</string>
<string name="measurable_question_example">напр. Колко километра пробягахте днес?</string>
<string name="measurable_units_example">напр. км</string>
<string name="every_month">Всеки месец</string>
<string name="validation_cannot_be_blank">Не може да бъде празно</string>
<string name="today">Днес</string>
<string name="enter">Въвеждане</string>
<string name="no_habits">Не са намерени навици</string>
<string name="no_numerical_habits">Не са намерени измерими навици</string>
<string name="no_boolean_habits">Не са намерени навици от тип \"да или не\"</string>
<string name="increment">Увеличаване</string>
<string name="decrement">Намаляване</string>
<string name="pref_skip_title">Включване на пропуснати дни</string>
<string name="pref_skip_description">Маркирайте два пъти за да добавите пропускане вместо отметка. Пропусканията поддържат силата на навика ви непроменена и не прекъсват поредицата ви.</string>
<string name="pref_unknown_title">Показване на питанки при липсващи данни</string>
<string name="pref_unknown_description">Разграничаване на дните без данни от реални пропуски. За да добавите пропуск, маркирайте два пъти.</string>
<string name="you_are_now_a_developer">Вие вече сте разработчик</string>
<string name="activity_not_found">Не е намерено приложение, което да поддържа това действие</string>
<string name="pref_midnight_delay_title">Удължаване на деня с няколко часа след полунощ</string>
<string name="pref_midnight_delay_description">Изчакване до 3:00 часа сутринта за показване на нов ден. Полезно, ако обичайно си лягате да спите след полунощ. Изисква рестартиране на приложението.</string>
</resources>

View File

@@ -26,7 +26,7 @@
<string name="archive">Arxivar</string>
<string name="unarchive">Treure de l\'arxiu</string>
<string name="add_habit">Afegir hàbit</string>
<string name="color_picker_default_title">Canviar color</string>
<string name="color_picker_default_title">Canviar el color</string>
<string name="toast_habit_created">Hàbit creat.</string>
<plurals name="toast_habits_changed">
<item quantity="one">Hàbit modificat.</item>
@@ -67,7 +67,6 @@
<string name="interval_always_ask">Pregunta sempre</string>
<string name="interval_custom">Personalitza...</string>
<string name="pref_toggle_title">Activar/desactivar repeticions prement curt</string>
<string name="pref_toggle_description">Posar les marques de verificació amb un sol toc enlloc de prémer i mantenir. Més adequat, però pot causar activacions accidentals.</string>
<string name="pref_rate_this_app">Valora aquesta app a Google Play</string>
<string name="pref_send_feedback">Enviar resposta al desenvolupador</string>
<string name="pref_view_source_code">Veure codi font a Github</string>
@@ -82,6 +81,10 @@
<item quantity="one">Esborrar hàbit</item>
<item quantity="other">Esborrar hàbit</item>
</plurals>
<plurals name="delete_habits_message">
<item quantity="one">L\' hàbit serà esborrat permanentment. Aquesta acció no es pot desfer.</item>
<item quantity="other">Els hàbits seran esborrats permanentment. Aquesta acció no es pot desfer.</item>
</plurals>
<string name="habit_not_found">Hàbit suprimit / no trobat</string>
<string name="weekends">Caps de setmana</string>
<string name="any_weekday">Dilluns a divendres</string>
@@ -115,7 +118,7 @@
<string name="generate_bug_report">Generar informe d\'error</string>
<string name="troubleshooting">Resolució de problemes</string>
<string name="help_translate">Ajuda a traduïr aquesta app</string>
<string name="night_mode" comment="dark_theme">Mode nocturn</string>
<string name="night_mode">Mode nocturn</string>
<string name="use_pure_black">Utilitzar negre pur en el mode nocturn</string>
<string name="pure_black_description">Reemplaça fons grisos per negre pur en el mode nocturn. Redueix consum de bateria en telèfons amb pantalla AMOLED.</string>
<string name="interface_preferences">Interfície</string>
@@ -154,7 +157,6 @@
<string name="by_status">Per estat</string>
<string name="export">Exportar</string>
<string name="long_press_to_edit">Prémer i mantenir per a canviar el valor</string>
<string name="change_value">Canviar el valor</string>
<string name="calendar">Calendari</string>
<string name="unit">Unitat</string>
<string name="example_question_boolean">p.e. Has fet exercici avui?</string>
@@ -175,8 +177,10 @@
<string name="example_notes">Opcional</string>
<string name="yes_or_no_example">Per exemple, us heu despertat aviat? Heu fet exercici? Heu jugat a escacs?</string>
<string name="measurable">Mesurable</string>
<string name="measurable_example">p.e. Quants quilòmetres has fet hui? Quantes pàgines has llegit?</string>
<string name="x_times_per_week">%d vegades per setmana</string>
<string name="x_times_per_month">%d vegades al mes</string>
<string name="x_times_per_y_days">%d vegades en %d dies</string>
<string name="yes_or_no_short_example">Ex. Exercici</string>
<string name="color">Color</string>
<string name="example_target">ex. 15</string>
@@ -186,4 +190,18 @@
<string name="every_month">Cada mes</string>
<string name="validation_cannot_be_blank">No es pot deixar en blanc</string>
<string name="today">Avui</string>
<string name="enter">Introduïr</string>
<string name="no_habits">No s\'han trobat hàbits.</string>
<string name="no_numerical_habits">No s\'han trobat hàbits mesurables</string>
<string name="no_boolean_habits">No s\'han trobat hàbits de sí o no</string>
<string name="increment">Increment</string>
<string name="decrement">Disminueix</string>
<string name="pref_skip_title">Activa omitir dies</string>
<string name="pref_skip_description">Toca dues vegades per a afegir una omissió en compte d\'una marca de verificació. Les omissions mantenen la teua puntuació sense canvis i no trenquen la ratxa.</string>
<string name="pref_unknown_title">Mostra signes d\'interrogació per a les dades que falten</string>
<string name="pref_unknown_description">Diferenciar els dies sense dades dels lapses reals. Per introduir un lapse, canvia dues vegades.</string>
<string name="you_are_now_a_developer">Ara eres un desenvolupador</string>
<string name="activity_not_found">No s\'ha trobat cap aplicació per a gestionar aquesta acció</string>
<string name="pref_midnight_delay_title">Ampliar el dia unes hores després de la mitjanit</string>
<string name="pref_midnight_delay_description">Esperar fins a les 3:00 per mostrar un nou dia. Útil si normalment vas a dormir després de la mitjanit. Requereix el reinici de l\'aplicació.</string>
</resources>

View File

@@ -35,7 +35,8 @@
<string name="reminder">Připomenutí</string>
<string name="save">Uložit</string>
<string name="streaks">Série</string>
<string name="no_habits_found">Nemáte žádné nedokončené zvyky</string>
<string name="no_habits_found">Nemáte zapsané žádné zvyky</string>
<string name="no_habits_left_to_do">Splnili jste vše pro dnešní den!</string>
<string name="long_press_to_toggle">Stiskni a drž pro označení</string>
<string name="reminder_off">Vyp.</string>
<string name="create_habit">Vytvořit zvyk</string>
@@ -43,11 +44,11 @@
<string name="check">Hotovo</string>
<string name="snooze">Odložit</string>
<string name="intro_title_1">Vítejte</string>
<string name="intro_description_1">Sledování zvyků ti pomůže vytvořit a dosáhnout dobrých návyků.</string>
<string name="intro_description_1">Sledování zvyků Vám pomůže vytvořit a dosáhnout dobrých návyků.</string>
<string name="intro_title_2">Vytvoř si nové zvyky</string>
<string name="intro_description_2">Každý den po splnění zvyku, si ho v aplikaci zaškrtni.</string>
<string name="intro_title_4">Sleduj svůj postup</string>
<string name="intro_description_4">Detailní grafy ti ukážou, jak se tvé zvyky v průběhu času zlepšily.</string>
<string name="intro_description_2">Každý den po splnění zvyku si ho v aplikaci zaškrtněte.</string>
<string name="intro_title_4">Sledujte svůj pokrok</string>
<string name="intro_description_4">Detailní grafy Vám ukážou, jak se Vaše zvyky v průběhu času zlepšily. </string>
<string name="interval_15_minutes">15 minut</string>
<string name="interval_30_minutes">30 minut</string>
<string name="interval_1_hour">Hodina</string>
@@ -58,7 +59,7 @@
<string name="interval_always_ask">Vždy se ptát</string>
<string name="interval_custom">Vlastní...</string>
<string name="pref_toggle_title">Označte opakování krátkým stisknutím</string>
<string name="pref_toggle_description">Praktičtější, ale může způsobit nechtěné označení.</string>
<string name="pref_toggle_description_2">Zaškrtněte jediným klepnutím místo dlouhého podržení.</string>
<string name="pref_rate_this_app">Ohodnoťte nás v Google Play</string>
<string name="pref_send_feedback">Zpětná vazba vývojáři</string>
<string name="pref_view_source_code">Zobrazit zdroj. kód na GitHub</string>
@@ -67,66 +68,66 @@
<string name="settings">Nastavení</string>
<string name="select_snooze_delay">Nastavit délku odložení</string>
<string name="hint_title">Věděli jste?</string>
<string name="hint_drag">Přeřazení záznamů proveď stisknutím a podržením názvu zvyku a poté přesunutím na správné místo.</string>
<string name="hint_landscape">Můžeš vidět více dnů otočením telefonu na šířku.</string>
<string name="hint_drag">Přeřazení záznamů proveďte stisknutím a podržením názvu zvyku a poté přesunutím na správné místo.</string>
<string name="hint_landscape">Můžete vidět více dnů otočením telefonu na šířku.</string>
<string name="habit_not_found">Zvyk smazán / nenalezen</string>
<string name="weekends">Víkendy</string>
<string name="any_weekday">Pondělí až pátek</string>
<string name="any_day">Jakýkoliv den v týdnu</string>
<string name="select_weekdays">Vyber dny</string>
<string name="select_weekdays">Vyberte dny</string>
<string name="export_to_csv">Exportovat CSV</string>
<string name="done_label">Hotovo</string>
<string name="clear_label">Smazat</string>
<string name="select_hours">Vyber hodiny</string>
<string name="select_minutes">Vyber minuty</string>
<string name="select_hours">Vyberte hodiny</string>
<string name="select_minutes">Vyberte minuty</string>
<string name="about">O nás</string>
<string name="translators">Překladatelé</string>
<string name="developers">Vývojáři</string>
<string name="version_n">Verze %s</string>
<string name="frequency">Frekvence</string>
<string name="checkmark">Zatržítko</string>
<string name="best_streaks">Nejlepší serie</string>
<string name="checkmark">Fajfka</string>
<string name="best_streaks">Nejlepší série</string>
<string name="every_day">Každý den</string>
<string name="every_week">Každý týden</string>
<string name="help">Pomoc a FAQ</string>
<string name="could_not_export">Export selhal.</string>
<string name="could_not_import">Import selhal.</string>
<string name="file_not_recognized">Soubor netozpoznán.</string>
<string name="file_not_recognized">Soubor nerozpoznán.</string>
<string name="habits_imported">Zvyky úspěšně importovány.</string>
<string name="import_data">Importovat</string>
<string name="export_full_backup">Kompletní export</string>
<string name="import_data_summary">Podpora exportů z této aplikace, ale také souborů vygenerovaných aplikacemi od Tickmate, HabitBull nebo Rewire. Pro více info si prečti FAQ.</string>
<string name="export_as_csv_summary">Generuje soubory, které můžeš otevřít v tabulkových editorech, jako jsou Microsoft Excel nebo OpenOffice Calc. Tyto soubory nelze importovat zpět.</string>
<string name="export_full_backup_summary">Generuje soubor, který obsahuje všechna tvoje data. Tento soubor můžeš importovat zpět.</string>
<string name="import_data_summary">Podporuje exporty z této aplikace, ale také soubory vygenerované aplikacemi od Tickmate, HabitBull nebo Rewire. Pro více informací si prečtěte FAQ.</string>
<string name="export_as_csv_summary">Generuje soubory, které mohou být otevřeny v tabulkových editorech jako jsou Microsoft Excel nebo OpenOffice Calc. Tyto soubory nelze importovat zpět.</string>
<string name="export_full_backup_summary">Generuje soubor, který obsahuje všechna Vaše data. Tento soubor může být importován zpět.</string>
<string name="bug_report_failed">Generace výpisu chyb selhala.</string>
<string name="generate_bug_report">Generovat výpis chyb</string>
<string name="troubleshooting">Řešení problémů</string>
<string name="help_translate">Pomozte s překladem aplikace</string>
<string name="night_mode" comment="dark_theme">Noční téma</string>
<string name="use_pure_black">Zobrazit čistě černou v nočním tématu</string>
<string name="pure_black_description">Nahra šedé pozadí čistou černou v nočním tématu. Snižuje spotřebu baterie v telefonech s AMOLED displejem.</string>
<string name="night_mode">Temný motiv</string>
<string name="use_pure_black">Zobrazit čistě černou v temném motivu</string>
<string name="pure_black_description">Nahrazuje v temném motivu šedé pozadí čistou černou. Snižuje spotřebu baterie v telefonech s AMOLED displejem.</string>
<string name="interface_preferences">Rozhraní</string>
<string name="reverse_days">Otočit pořadí dnů</string>
<string name="reverse_days_description">Zobrazí dny na úvodní stránce v obráceném pořadí</string>
<string name="reverse_days_description">Zobrazit dny na úvodní stránce v obráceném pořadí.</string>
<string name="day">Den</string>
<string name="week">Týden</string>
<string name="month">Měsíc</string>
<string name="quarter">Čtvrtletí</string>
<string name="year">Rok</string>
<string name="total">Celkem</string>
<string name="yes_or_no">Ano, či Ne</string>
<string name="yes_or_no">Ano nebo Ne</string>
<string name="every_x_days">Každých %d dní</string>
<string name="every_x_weeks">Každých %d týdnů</string>
<string name="score">Skóre</string>
<string name="reminder_sound">Zvuk upomínky</string>
<string name="reminder_sound">Zvuk připomínky</string>
<string name="none">Žádný</string>
<string name="filter">Filtr</string>
<string name="hide_completed">Skrýt dokončené</string>
<string name="hide_archived">Skrýt archivované</string>
<string name="sticky_notifications">Připnout notifikaci</string>
<string name="sticky_notifications_description">Zabraňuje notifikaci její odstranění odsunutím.</string>
<string name="led_notifications">Světelná notifikace</string>
<string name="led_notifications_description">Telefon zabliká při upozornění. Fungující pouze na telefonech s notifikační LED diodou.</string>
<string name="sticky_notifications">Připnout upozornění</string>
<string name="sticky_notifications_description">Zabraňuje odstranění upozornění přejetím. </string>
<string name="led_notifications">Světelné upozornění</string>
<string name="led_notifications_description">Blikání diody při upozornění. Funkční pouze na telefonech s notifikační LED diodou.</string>
<string name="repair_database">Opravit databázi</string>
<string name="database_repaired">Databáze opravena.</string>
<string name="uncheck">Odznačit</string>
@@ -138,39 +139,54 @@
<string name="by_name">Abecedně</string>
<string name="by_color">Podle barvy</string>
<string name="by_score">Podle skóre</string>
<string name="by_status">Podle statusu</string>
<string name="export">Export</string>
<string name="long_press_to_edit">Stiskni a drž pro změnu hodnoty</string>
<string name="change_value">Změnit hodnotu</string>
<string name="long_press_to_edit">Stiskněte a držte pro změnu hodnoty</string>
<string name="calendar">Kalendář</string>
<string name="unit">Jednotka</string>
<string name="example_question_boolean">např. Cvičil jsi dnes?</string>
<string name="example_question_boolean">Např. Cvičil jsi dnes?</string>
<string name="question">Otázka</string>
<string name="target">Cíl</string>
<string name="yes">Ano</string>
<string name="no">Ne</string>
<string name="customize_notification_summary">Změnit zvuk, vibrace, světlo a další nastavení notifikací</string>
<string name="customize_notification">Přizpůsobit oznáme</string>
<string name="customize_notification_summary">Změnit zvuk, vibrace, světlo a další nastavení upozornění</string>
<string name="customize_notification">Přizpůsobit upozorně</string>
<string name="pref_view_privacy">Zobrazit zásady ochrany osobních údajů</string>
<string name="view_all_contributors">Zobrazit všechny přispěvatele&#8230;</string>
<string name="database">Databáze</string>
<string name="widget_opacity_title">Neprůhlednost widgetu</string>
<string name="widget_opacity_description">Udělá widgety průhlednější nebo neprůhlednější na domovské obrazovce.</string>
<string name="widget_opacity_title">Průhlednost widgetu</string>
<string name="widget_opacity_description">Upravuje průhlednost pozadí widgetu na domovské obrazovce.</string>
<string name="first_day_of_the_week">První den v týdnu</string>
<string name="default_reminder_question">Dokončili jste dnes tento vyk?</string>
<string name="default_reminder_question">Dokončili jste dnes tento zvyk?</string>
<string name="notes">Poznámky</string>
<string name="example_notes">(nepovinné)</string>
<string name="yes_or_no_example">např. Vzbudil ses dnes brzy? Cvičil jsi dnes? Hrál jsi šachy?</string>
<string name="yes_or_no_example">Např. Vzbudil ses dnes brzy? Cvičil jsi dnes? Hrál jsi šachy?</string>
<string name="measurable">Měřitelný</string>
<string name="measurable_example">Např. Kolik kilometrů jsi dnes uběhl? Kolik stránek jsi dnes přečetl?</string>
<string name="x_times_per_week">%d krát týdně</string>
<string name="x_times_per_month">%d krát za měsíc</string>
<string name="yes_or_no_short_example">např. Cviče</string>
<string name="x_times_per_y_days">%d krát za %d d</string>
<string name="yes_or_no_short_example">Např. Cvičení</string>
<string name="color">Barva</string>
<string name="example_target">např. 15</string>
<string name="measurable_short_example">např. Běh</string>
<string name="measurable_question_example">Např. kolik mil jste dnes uběhl?</string>
<string name="measurable_units_example">např. míle</string>
<string name="example_target">Např. 15</string>
<string name="measurable_short_example">Např. Běh</string>
<string name="measurable_question_example">Např. Kolik kilometrů jste dnes uběhl?</string>
<string name="measurable_units_example">Např. Kilometry</string>
<string name="every_month">Každý měsíc</string>
<string name="validation_cannot_be_blank">Musíte vyplnit</string>
<string name="today">Dnes</string>
<string name="enter">Vyplnit</string>
<string name="no_habits">Nenalezeny žádné zvyky</string>
<string name="no_numerical_habits">Nenalezeny žádné měřitelné zvyky</string>
<string name="no_boolean_habits">Nenalezeny žádné \"ano/ne\" zvyky</string>
<string name="increment">Zvětšit</string>
<string name="decrement">Zmenšit</string>
<string name="pref_skip_title">Povolit přeskakování dnů</string>
<string name="pref_skip_description">Klikněte dvakrát pro přidání pomlčky (přeskočení dne) místo fajfky. Pomlčka nezmění Vaše skóre, ani nepřeruší Vaši výzvu. </string>
<string name="pref_unknown_title">Při chybějícím údaji zobrazit otazník</string>
<string name="pref_unknown_description">Odlište dny bez údajů od nesplněného zvyku. Pro zadání \"nesplněno\" klikněte dvakrát. </string>
<string name="you_are_now_a_developer">Nyní jste vývojář</string>
<string name="activity_not_found">Pro daný krok nebyla nalezena aplikace</string>
<string name="pref_midnight_delay_title">Po půlnoci prodloužit den o několik hodin</string>
<string name="pref_midnight_delay_description">Počkat do 3:00 ráno pro zobrazení nového dne. Užitečné, pokud chodíte spát po půlnoci. Vyžaduje restartování aplikace. </string>
</resources>

View File

@@ -75,7 +75,6 @@
<string name="interval_always_ask">Spørg altid</string>
<string name="interval_custom">Brugerdefineret...</string>
<string name="pref_toggle_title">Tjek vaner med kort tryk</string>
<string name="pref_toggle_description">Sæt tjekmærker med et enkelt tryk i stedet for tryk-og-hold. Mere bekvemmeligt, men kan forårsage uhensigtede tryk.</string>
<string name="pref_rate_this_app">Bedøm denne app på Google Play</string>
<string name="pref_send_feedback">Send feedback til udvikleren</string>
<string name="pref_view_source_code">Se kildekoden på GitHub</string>
@@ -136,7 +135,7 @@
<string name="generate_bug_report">Generer fejlrapport</string>
<string name="troubleshooting">Fejlfinding</string>
<string name="help_translate">Hjælpe med at oversætte denne app</string>
<string name="night_mode" comment="dark_theme">Nat-tilstand</string>
<string name="night_mode">Nat-tilstand</string>
<string name="use_pure_black">Brug ren sort i nat-tilstand</string>
<string name="pure_black_description">Erstatter grå baggrunde med ren sort i nat-tilstand. Reducerer batteriforbruget i telefoner med AMOLED skærm.</string>
<string name="interface_preferences">Grænseflade</string>
@@ -175,7 +174,6 @@
<string name="by_status">Efter status</string>
<string name="export">Eksporter</string>
<string name="long_press_to_edit">Tryk-og-hold for at ændre værdien</string>
<string name="change_value">Skift værdi</string>
<string name="calendar">Kalender</string>
<string name="unit">Enhed</string>
<string name="example_question_boolean">f.eks. Har du trænet i dag?</string>
@@ -199,6 +197,7 @@
<string name="measurable_example">f.eks Hvor mange kilometer kørte du i dag? Hvor mange sider læste du?</string>
<string name="x_times_per_week">%d gange om ugen</string>
<string name="x_times_per_month">%d gange om måneden</string>
<string name="x_times_per_y_days">%d gange på %d dage</string>
<string name="yes_or_no_short_example">f.eks. Motion</string>
<string name="color">Farve</string>
<string name="example_target">f.eks. 15</string>

View File

@@ -75,7 +75,7 @@
<string name="interval_always_ask">Immer fragen</string>
<string name="interval_custom">Benutzerdefiniert...</string>
<string name="pref_toggle_title">Markierung durch kurzes Tippen ändern</string>
<string name="pref_toggle_description">Abhaken durch einfaches Tippen, anstatt durch Tippen und Halten. Bequemer, kann aber eine falsche Auswahl verursachen.</string>
<string name="pref_toggle_description_2">Häkchen durch einfaches Antippen setzen, anstatt durch Drücken und Halten.</string>
<string name="pref_rate_this_app">Bewerte diese App auf Google Play</string>
<string name="pref_send_feedback">Sende dem Entwickler Feedback</string>
<string name="pref_view_source_code">Zeige den Quellcode auf GitHub</string>
@@ -99,7 +99,7 @@
<string name="any_weekday">Montag bis Freitag</string>
<string name="any_day">Jeden Tag</string>
<string name="select_weekdays">Tage auswählen</string>
<string name="export_to_csv">Exportiere als CSV</string>
<string name="export_to_csv">Als CSV exportieren</string>
<string name="done_label">Fertig</string>
<string name="clear_label">Löschen</string>
<string name="select_hours">Stunden auswählen</string>
@@ -119,7 +119,7 @@
<string name="file_not_recognized">Datei nicht erkannt.</string>
<string name="habits_imported">Gewohnheiten erfolgreich importiert.</string>
<string name="import_data">Daten importieren</string>
<string name="export_full_backup">Exportiere vollständige Sicherung</string>
<string name="export_full_backup">Vollständige Sicherung exportieren</string>
<string name="import_data_summary">Unterstützt vollständige Sicherungen dieser App, als auch von Tickmate, HabitBull und Rewire. Siehe FAQ für weitere Informationen.</string>
<string name="export_as_csv_summary">Erstellt Dateien, die von Tabellenkalkulationsprogrammen wie Microsoft Excel oder LibreOffice Calc geöffnet werden können. Diese Dateien können nicht wieder importiert werden.</string>
<string name="export_full_backup_summary">Erstellt eine Datei, die alle deine Daten enthält. Diese Datei kann wieder importiert werden.</string>
@@ -127,7 +127,7 @@
<string name="generate_bug_report">Erstelle einen Fehlerbericht</string>
<string name="troubleshooting">Fehlerbehebung</string>
<string name="help_translate">Hilf mit, diese App zu übersetzen</string>
<string name="night_mode" comment="dark_theme">Nachtmodus</string>
<string name="night_mode">Nachtmodus</string>
<string name="use_pure_black">Verwende reines Schwarz im Nachtmodus</string>
<string name="pure_black_description">Ersetzt im Nachtmodus das Grau des Hintergrunds durch Schwarz. Reduziert den Stromverbrauch von Smartphones mit AMOLED Displays.</string>
<string name="interface_preferences">Oberfläche</string>
@@ -147,6 +147,7 @@
<string name="none">Keiner</string>
<string name="filter">Filter</string>
<string name="hide_completed">Erledigte verbergen</string>
<string name="hide_entered" comment="&quot;Hide entered&quot; appears in place of &quot;hide completed&quot; if the user has enabled the question marks option. This option hides all habits that have any data entered, not just the ones that have been completed. This allows the user to hide habits that have already failed early in the day.">Eingegebenes ausblenden</string>
<string name="hide_archived">Archivierte verbergen</string>
<string name="sticky_notifications">Fixiere Benachrichtigungen</string>
<string name="sticky_notifications_description">Verhindert das Wegwischen von Benachrichtigungen.</string>
@@ -166,9 +167,12 @@
<string name="by_status">Nach Zustand</string>
<string name="export">Exportieren</string>
<string name="long_press_to_edit">Gedrückt halten, um den Wert zu ändern</string>
<string name="change_value">Wert ändern</string>
<string name="value">Wert</string>
<string name="calendar">Kalender</string>
<string name="unit">Einheit</string>
<string name="target_type">Zieltyp</string>
<string name="target_type_at_least">Mindestens</string>
<string name="target_type_at_most">Höchtens</string>
<string name="example_question_boolean">z.B. Hast du heute trainiert?</string>
<string name="question">Frage</string>
<string name="target">Ziel</string>
@@ -190,6 +194,7 @@
<string name="measurable_example">z.B. Wie viele Kilometer bist du heute gelaufen? Wie viele Seiten hast du gelesen?</string>
<string name="x_times_per_week">%d mal pro Woche</string>
<string name="x_times_per_month">%d mal pro Monat</string>
<string name="x_times_per_y_days">%d Mal in %d Tagen</string>
<string name="yes_or_no_short_example">z.B. Übung</string>
<string name="color">Farbe</string>
<string name="example_target">z.B. 15</string>
@@ -203,7 +208,7 @@
<string name="no_habits">Keine Gewohnheiten gefunden</string>
<string name="no_numerical_habits">Keine messbaren Gewohnheiten gefunden</string>
<string name="no_boolean_habits">Keine Ja-oder-Nein-Gewohnheiten gefunden</string>
<string name="increment">Vergrößern</string>
<string name="increment">Erhöhen</string>
<string name="decrement">Verringern</string>
<string name="pref_skip_title">Tage überspringen aktivieren</string>
<string name="pref_skip_description">Zwei mal markieren, um eine Lücke einzutragen statt abzuhaken. Lücken lassen deine Wertung unverändert und beenden deine Serie nicht.</string>

View File

@@ -58,7 +58,6 @@
<string name="interval_always_ask">Να ερωτούμαι πάντα</string>
<string name="interval_custom">Προσαρμογή</string>
<string name="pref_toggle_title">Κάντε εναλλαγή των επαναλήψεων με σύντομο πάτημα</string>
<string name="pref_toggle_description">Βολικότερο, αλλά ίσως προκαλέσει ακούσιες εναλλαγές.</string>
<string name="pref_rate_this_app">Βαθμολογήστε αυτή την εφαρμογή στο Google Play</string>
<string name="pref_send_feedback">Στείλετε σχόλια</string>
<string name="pref_view_source_code">Δείτε τον πηγαίο κώδικα στο GitHub</string>
@@ -102,7 +101,7 @@
<string name="generate_bug_report">Παραγωγή αναφοράς bug.</string>
<string name="troubleshooting">Αντιμετ.Προβλημάτων</string>
<string name="help_translate">Βοηθήστε στην μετάφραση</string>
<string name="night_mode" comment="dark_theme">Νυχτ.Λειτ.</string>
<string name="night_mode">Νυχτ.Λειτ.</string>
<string name="use_pure_black">Χρήση απόλυτου μαύρου στη νυχτ.λειτουργία</string>
<string name="pure_black_description">Αντικαθιστά τα γκρί υπόβαθρα με απόλυτα μαύρα σε νυχτ.λειτουργία. Μειώνει την κατανάλωση μπαταρίας σε συσκευές με οθόνη AMOLED.</string>
<string name="interface_preferences">Διεπιφάνεια</string>
@@ -140,7 +139,6 @@
<string name="by_score">Με σκορ</string>
<string name="export">Εξαγωγή</string>
<string name="long_press_to_edit">Πατήστε και κρατήστε πατημένο για να αλλάξετε την τιμή</string>
<string name="change_value">Αλλαγή τιμής</string>
<string name="calendar">Ημερολόγιο</string>
<string name="unit">Μονάδα</string>
<string name="example_question_boolean">π.χ. Ασκήθηκες σήμερα;</string>
@@ -163,6 +161,7 @@
<string name="measurable">Μετρήσιμο</string>
<string name="x_times_per_week">%d φορές την εβδομάδα</string>
<string name="x_times_per_month">%d φορές το μήνα</string>
<string name="x_times_per_y_days">%d φορές την %d ημέρες</string>
<string name="yes_or_no_short_example">π.χ. Σωματική άσκηση</string>
<string name="color">Χρώμα</string>
<string name="example_target">π.χ. 15</string>

View File

@@ -58,7 +58,6 @@
<string name="interval_always_ask">Ĉiam demandu</string>
<string name="interval_custom">Kutimo</string>
<string name="pref_toggle_title">Ŝalti per mallonga gazetaro</string>
<string name="pref_toggle_description">Metu markilojn per sola frapeto anstataŭ premi kaj teni. Pli oportune, sed eble kaŭzas hazardajn ŝanĝojn.</string>
<string name="pref_rate_this_app">Taksu ĉi tiun aplikaĵon en Google Play</string>
<string name="pref_send_feedback">Sendu reagojn al programisto</string>
<string name="pref_view_source_code">Vidu fontkodon ĉe GitHub</string>
@@ -102,7 +101,7 @@
<string name="generate_bug_report">Generu raporton pri eraroj</string>
<string name="troubleshooting">Problemserĉado</string>
<string name="help_translate">Helpu traduki ĉi tiun aplikon</string>
<string name="night_mode" comment="dark_theme">Nokta reĝimo</string>
<string name="night_mode">Nokta reĝimo</string>
<string name="use_pure_black">Uzu puran nigron en malhela temo</string>
<string name="pure_black_description">Anstataŭigas grizajn fonojn per pura nigra en malhela temo. Reduktas baterian uzon en telefonoj kun AMOLED-ekrano.</string>
<string name="interface_preferences">Intervizago</string>
@@ -140,7 +139,6 @@
<string name="by_score">Laŭ poentaro</string>
<string name="export">Eksporti</string>
<string name="long_press_to_edit">Premu kaj tenu por ŝanĝi la valoron</string>
<string name="change_value">Ŝanĝi valoron</string>
<string name="calendar">Kalendaro:</string>
<string name="unit">Unueco</string>
<string name="example_question_boolean">ekz. Ĉu vi ekzercis hodiaŭ?</string>

View File

@@ -75,7 +75,7 @@
<string name="interval_always_ask">Preguntar siempre</string>
<string name="interval_custom">Personalizar...</string>
<string name="pref_toggle_title">Marca las repeticiones con una pulsación corta</string>
<string name="pref_toggle_description">Más cómodo, pero puede causar marcas accidentales.</string>
<string name="pref_toggle_description_2">Ponga marcas de verificación con un solo toque en lugar de mantener presionado.</string>
<string name="pref_rate_this_app">Valora esta aplicación en Google Play</string>
<string name="pref_send_feedback">Enviar sugerencias al desarrollador</string>
<string name="pref_view_source_code">Ver código fuente en GitHub</string>
@@ -84,7 +84,7 @@
<string name="settings">Configuración</string>
<string name="select_snooze_delay">Seleccione el retardo de la interrupción</string>
<string name="hint_title">¿Sabías qué?</string>
<string name="hint_drag">Para reordenar las entradas, mantén la pulsado sobre el nombre del hábito, después arrástralo a su posición correcta.</string>
<string name="hint_drag">Para reordenar las entradas, mantén pulsado el nombre del hábito, después arrástralo a su posición correcta.</string>
<string name="hint_landscape">Puedes ver más días al poner tu teléfono en modo horizontal.</string>
<plurals name="delete_habits_title">
<item quantity="one">¿Eliminar hábito?</item>
@@ -127,10 +127,10 @@
<string name="generate_bug_report">Generar reporte de errores</string>
<string name="troubleshooting">Solución de problemas</string>
<string name="help_translate">Ayuda a traducir esta app</string>
<string name="night_mode" comment="dark_theme">Modo nocturno</string>
<string name="night_mode">Modo nocturno</string>
<string name="use_pure_black">Utilizar color negro en modo nocturno</string>
<string name="pure_black_description">Reemplaza fondos grises por color negro en modo nocturno. Reduce el consumo de batería en teléfonos con pantalla AMOLED.</string>
<string name="interface_preferences">Interfície</string>
<string name="interface_preferences">Interfaz</string>
<string name="reverse_days">Orden inverso de días</string>
<string name="reverse_days_description">Mostrar días en orden inverso en la pantalla principal</string>
<string name="day">Día</string>
@@ -147,6 +147,7 @@
<string name="none">Ninguno</string>
<string name="filter">Filtrar</string>
<string name="hide_completed">Ocultar completos</string>
<string name="hide_entered" comment="&quot;Hide entered&quot; appears in place of &quot;hide completed&quot; if the user has enabled the question marks option. This option hides all habits that have any data entered, not just the ones that have been completed. This allows the user to hide habits that have already failed early in the day.">Ocultar ingresado</string>
<string name="hide_archived">Ocultar archivados</string>
<string name="sticky_notifications">Hacer notificaciones fijas</string>
<string name="sticky_notifications_description">Evita que las notificaciones sean descartadas.</string>
@@ -166,9 +167,12 @@
<string name="by_status">Por estado</string>
<string name="export">Exportar</string>
<string name="long_press_to_edit">Mantenga presionado para cambiar el valor</string>
<string name="change_value">Cambiar valor</string>
<string name="value">Valor</string>
<string name="calendar">Calendario</string>
<string name="unit">Unidad</string>
<string name="target_type">Tipo de objetivo</string>
<string name="target_type_at_least">Al menos</string>
<string name="target_type_at_most">Como máximo</string>
<string name="example_question_boolean">ej. ¿Has ejercitado hoy?</string>
<string name="question">Pregunta</string>
<string name="target">Objetivo</string>
@@ -190,12 +194,13 @@
<string name="measurable_example">ej. ¿Cuántas millas ha corrido hoy? ¿Cuántas páginas ha leído?</string>
<string name="x_times_per_week">%d veces por semana</string>
<string name="x_times_per_month">%d veces al mes</string>
<string name="x_times_per_y_days">%d veces en %d días</string>
<string name="yes_or_no_short_example">ej. Ejercicio</string>
<string name="color">Color</string>
<string name="example_target">ej. 15</string>
<string name="measurable_short_example">por ejemplo, correr</string>
<string name="measurable_question_example">ej. ¿Cuántos quilómetros has corrido hoy?</string>
<string name="measurable_units_example">ej. millas</string>
<string name="measurable_question_example">ej. ¿Cuántos kilómetros has corrido hoy?</string>
<string name="measurable_units_example">ej. kilómetros</string>
<string name="every_month">Cada mes</string>
<string name="validation_cannot_be_blank">No puede estar en blanco</string>
<string name="today">Hoy</string>

View File

@@ -28,6 +28,18 @@
<string name="add_habit">Gehitu ohitura</string>
<string name="color_picker_default_title">Kolorea aldatu</string>
<string name="toast_habit_created">Ohitura sortu da</string>
<plurals name="toast_habits_changed">
<item quantity="one">Ohitura aldatu da</item>
<item quantity="other">Ohiturak aldatu dira</item>
</plurals>
<plurals name="toast_habits_deleted">
<item quantity="one">Ohitura ezabatu da</item>
<item quantity="other">Ohiturak ezabatu dira</item>
</plurals>
<plurals name="toast_habits_archived">
<item quantity="one">Ohitura artxibatu da</item>
<item quantity="other">Ohiturak artxibatu dira</item>
</plurals>
<string name="overview">Ikuspegi orokorra</string>
<string name="habit_strength">Ohituraren indarra</string>
<string name="history">Historia</string>
@@ -36,6 +48,7 @@
<string name="save">Gorde</string>
<string name="streaks">Boladak</string>
<string name="no_habits_found">Ez duzu ohitura aktiborik</string>
<string name="no_habits_left_to_do">Gaurkoz amaitu duzu!</string>
<string name="long_press_to_toggle">Sakatu eta mantendu markatu edo desmarkatzeko</string>
<string name="reminder_off">Itzalita</string>
<string name="create_habit">Ohitura sortu</string>
@@ -58,7 +71,6 @@
<string name="interval_always_ask">Galdetu beti</string>
<string name="interval_custom">Pertsonalizatua...</string>
<string name="pref_toggle_title">Ukitze laburrarekin markatu</string>
<string name="pref_toggle_description">Ukitze bakar batekin marka jartzen du ukitu eta mantendu egin beharrean. Erosoagoa, baina nahi gabeko markak ekar litzake.</string>
<string name="pref_rate_this_app">Aplikazio hau Google Playen puntuatu</string>
<string name="pref_send_feedback">Zure iritzia garatzaileari bidali</string>
<string name="pref_view_source_code">Iturburu kodea GitHuben ikusi</string>
@@ -69,6 +81,10 @@
<string name="hint_title">Ba al zenekien?</string>
<string name="hint_drag">Sarrerak berrantolatzeko, sakatu eta mantendu ohituraren izena, ondoren mugi ezazu leku aproposera.</string>
<string name="hint_landscape">Egun gehiago ikus ditzakezu zure gailua paisai moduan jarriz.</string>
<plurals name="delete_habits_title">
<item quantity="one">Ohiturak ezabatu</item>
<item quantity="other">Ohiturak ezabatu</item>
</plurals>
<string name="habit_not_found">Ohitura ezabatua / ez aurkitua</string>
<string name="weekends">Asteburuak</string>
<string name="any_weekday">Astelehenetik ostiralera</string>
@@ -102,7 +118,7 @@
<string name="generate_bug_report">Akats txostena sortu</string>
<string name="troubleshooting">Arazoen konponketa</string>
<string name="help_translate">Lagundu aplikazio hau itzultzen</string>
<string name="night_mode" comment="dark_theme">Azal iluna</string>
<string name="night_mode">Azal iluna</string>
<string name="use_pure_black">erabili beltz hutsa azal ilunean</string>
<string name="pure_black_description">Atzeko plano grisak beltz hutsez aldatzen ditu azal ilunean. Bateriaren erabilera gutxitzen du AMOLED duten gailuetan.</string>
<string name="interface_preferences">Interfazea</string>
@@ -138,11 +154,14 @@
<string name="by_name">Izenaren arabera</string>
<string name="by_color">Kolorearen arabera</string>
<string name="by_score">Puntuen arabera</string>
<string name="by_status">Egoeraren arabera</string>
<string name="export">Esportatu</string>
<string name="long_press_to_edit">Sakatu luze balioa aldatzeko</string>
<string name="change_value">Aldatu balioa</string>
<string name="value">Balioa</string>
<string name="calendar">Egutegia</string>
<string name="unit">Unitatea</string>
<string name="target_type_at_least">Gutxienez</string>
<string name="target_type_at_most">Gehienez</string>
<string name="example_question_boolean">adib. ariketa egin al duzu gaur?</string>
<string name="question">Galdera</string>
<string name="target">Helburua</string>
@@ -163,6 +182,7 @@
<string name="measurable">Neurgarria</string>
<string name="x_times_per_week">Astean %d aldiz</string>
<string name="x_times_per_month">Hilean %d aldiz</string>
<string name="x_times_per_y_days">%d aldiz %d egunetan</string>
<string name="yes_or_no_short_example">adib. Ariketa</string>
<string name="color">Kolorea</string>
<string name="example_target">adib. 15</string>
@@ -172,4 +192,12 @@
<string name="every_month">Hilabetero</string>
<string name="validation_cannot_be_blank">Ezin da hutsik egon</string>
<string name="today">Gaur</string>
<string name="enter">Sartu</string>
<string name="no_habits">Ez da ohiturarik aurkitu</string>
<string name="no_numerical_habits">Ez da aurkitu ohitura neurgarririk</string>
<string name="no_boolean_habits">Ez da bai-ala-ez ohiturarik aurkitu</string>
<string name="pref_unknown_title">Adierazi galdera ikurra falta diren datuetan</string>
<string name="you_are_now_a_developer">Garatzailea zara!</string>
<string name="activity_not_found">Ez da aurkitu akzio hau gauzatu dezakeen aplikaziorik</string>
<string name="pref_midnight_delay_description">Itxaron goizeko 3:00ak arte egun berri bat erakusteko. Erabilgarria normalean gauerdia pasata lotara joaten bazara. Aplikazioa berrabiarazi behar da.</string>
</resources>

View File

@@ -75,7 +75,7 @@
<string name="interval_always_ask">همیشه پرسیده شود </string>
<string name="interval_custom">سفارشی‌سازی </string>
<string name="pref_toggle_title">با اشاره‌ی کوتاه‌مدت وضعیت عادت را تغییر بده</string>
<string name="pref_toggle_description">تیک زدن با تک‌ضربه در مقابل ضربه‌زدن و نگه‌داشتن راحت‌تر است ولی ممکن است باعث شود اشتباهی عادتی را تیک بزنید. </string>
<string name="pref_toggle_description_2">به جای فشار دادن و نگه‌داشتن، با یک ضربه تیک بزنید.</string>
<string name="pref_rate_this_app">به این برنامه در گوگل‌پلی امتیاز بدهید </string>
<string name="pref_send_feedback">ارسال بازخورد به توسعه‌دهنده</string>
<string name="pref_view_source_code">دیدن منبع برنامه در گیت‌هاب </string>
@@ -127,7 +127,7 @@
<string name="generate_bug_report">ایجاد گزارش مشکلات</string>
<string name="troubleshooting">ایرادیابی</string>
<string name="help_translate">کمک برای ترجمه این برنامه</string>
<string name="night_mode" comment="dark_theme">حالت تیره</string>
<string name="night_mode">حالت تیره</string>
<string name="use_pure_black">استفاده از رنگ سیاه خالص در حالت تیره</string>
<string name="pure_black_description">جایگزینی پس‌زمینه خاکستری با سیاه خالص در حالت تیره. استفاده از باتری را در گوشی‌های با صفحه نمایش AMOLED کاهش می‌دهد.</string>
<string name="interface_preferences">رابط کاربری</string>
@@ -147,6 +147,7 @@
<string name="none">هیچ‌کدام</string>
<string name="filter">فیلتر</string>
<string name="hide_completed">مخفی کردن کامل‌شده‌ها</string>
<string name="hide_entered">پنهان کردن مقادیر</string>
<string name="hide_archived">مخفی کردن بایگانی‌شده‌ها</string>
<string name="sticky_notifications">چسبناک کردن اعلان‌ها</string>
<string name="sticky_notifications_description">از رد کردن اعلان با کشیدن جلوگیری می‌کند.</string>
@@ -166,9 +167,12 @@
<string name="by_status">براساس وضعیت</string>
<string name="export">خروجی گرفتن</string>
<string name="long_press_to_edit">فشار دهید و نگه دارید تا مقدار را تغییر دهید</string>
<string name="change_value">تغییر مقدار</string>
<string name="value">مقدار</string>
<string name="calendar">تقویم</string>
<string name="unit">واحد</string>
<string name="target_type">نوع داده هدف</string>
<string name="target_type_at_least">حداقل</string>
<string name="target_type_at_most">حداکثر</string>
<string name="example_question_boolean">مثلا آیا امروز ورزش کردید؟</string>
<string name="question">سوال</string>
<string name="target">هدف</string>
@@ -190,6 +194,7 @@
<string name="measurable_example">مثلاً امروز چند کیلومتر دویدید؟ چند صفحه مطالعه کردید؟</string>
<string name="x_times_per_week">%d بار در هفته</string>
<string name="x_times_per_month">%d بار در ماه</string>
<string name="x_times_per_y_days">%d بار در هر %d روز</string>
<string name="yes_or_no_short_example">مثلاً ورزش کنید</string>
<string name="color">رنگ</string>
<string name="example_target">مثلاً 15</string>

View File

@@ -75,7 +75,7 @@
<string name="interval_always_ask">Kysy aina</string>
<string name="interval_custom">Muu</string>
<string name="pref_toggle_title">Vaihda merkintää lyhyellä painalluksella</string>
<string name="pref_toggle_description">Tee merkit yhdellä painalluksella pitkän painalluksen sijaan. Kätevämpi, mutta saattaa aiheuttaa vahingossa painamista.</string>
<string name="pref_toggle_description_2">Lisää valinnat yhdellä napautuksella pitkään painettuna pitämisen sijaan.</string>
<string name="pref_rate_this_app">Arvostele Google Playssä</string>
<string name="pref_send_feedback">Lähetä palautetta kehittäjälle</string>
<string name="pref_view_source_code">Katso lähdekoodi GitHubissa</string>
@@ -127,7 +127,7 @@
<string name="generate_bug_report">Luo virheraportti</string>
<string name="troubleshooting">Apua</string>
<string name="help_translate">Auta kääntämään tämä sovellus</string>
<string name="night_mode" comment="dark_theme">Yötila</string>
<string name="night_mode">Yötila</string>
<string name="use_pure_black">Käytä puhdasta mustaa yötilassa</string>
<string name="pure_black_description">Korvaa harmaat taustat puhtaalla mustalla tummalla teemalla. Vähentää akun käyttöä puhelimissa AMOLED-näytöllä.</string>
<string name="interface_preferences">Käyttöliittymä</string>
@@ -147,6 +147,7 @@
<string name="none">Ei mitään</string>
<string name="filter">Suodata</string>
<string name="hide_completed">Piilota suoritetut</string>
<string name="hide_entered">Piilota syötetty</string>
<string name="hide_archived">Piilota arkistoidut</string>
<string name="sticky_notifications">Tee ilmoituksesta kiinnitettyjä</string>
<string name="sticky_notifications_description">Estää ilmoitusten pois pyyhkäisemisen.</string>
@@ -166,9 +167,12 @@
<string name="by_status">Tilan mukaan</string>
<string name="export">Vie</string>
<string name="long_press_to_edit">Pidä painettuna muuttaaksesi arvoa</string>
<string name="change_value">Muuta arvo</string>
<string name="value">Arvo</string>
<string name="calendar">Kalenteri</string>
<string name="unit">Yksikkö</string>
<string name="target_type">Kohdetyyppi</string>
<string name="target_type_at_least">Vähintään</string>
<string name="target_type_at_most">Enintään</string>
<string name="example_question_boolean">esim. Harrastitko tänään liikuntaa?</string>
<string name="question">Kysymys</string>
<string name="target">Tavoite</string>
@@ -190,6 +194,7 @@
<string name="measurable_example">esim. Montako kilometriä juoksit tänään? Montako sivua luit?</string>
<string name="x_times_per_week">%d kertaa viikossa</string>
<string name="x_times_per_month">%d kertaa kuukaudessa</string>
<string name="x_times_per_y_days">%d kertaa %d päivässä</string>
<string name="yes_or_no_short_example">Esim. kuntoilu</string>
<string name="color">Väri</string>
<string name="example_target">Esim. 15</string>

View File

@@ -75,7 +75,7 @@
<string name="interval_always_ask">Toujours demander</string>
<string name="interval_custom">Personnaliser...</string>
<string name="pref_toggle_title">Valider l\'habitude avec un appui court</string>
<string name="pref_toggle_description">Valide l\'habitude avec un appui court plutôt qu\'un appuie long. Plus pratique, mais peut causer des activations accidentelles.</string>
<string name="pref_toggle_description_2">Cochez les cases d\'un simple appuie au lieu de les maintenir</string>
<string name="pref_rate_this_app">Notez cette app sur le Google Play Store</string>
<string name="pref_send_feedback">Envoyez un avis au développeur</string>
<string name="pref_view_source_code">Voir le code source sur GitHub</string>
@@ -127,7 +127,7 @@
<string name="generate_bug_report">Générer un rapport de bug.</string>
<string name="troubleshooting">Résolution de problèmes</string>
<string name="help_translate">Aider à traduire cette application</string>
<string name="night_mode" comment="dark_theme">Mode Nuit</string>
<string name="night_mode">Mode Nuit</string>
<string name="use_pure_black">Utiliser un noir pur dans le mode nuit</string>
<string name="pure_black_description">Remplace le fond gris par un noir pur dans le mode nuit ; cela réduit lusage de la batterie des appareils ayant un écran AMOLED.</string>
<string name="interface_preferences">Interface</string>
@@ -147,6 +147,7 @@
<string name="none">Aucun</string>
<string name="filter">Filtre</string>
<string name="hide_completed">Cacher les habitudes complétées</string>
<string name="hide_entered">Cacher les entrées</string>
<string name="hide_archived">Cacher les habitudes archivées</string>
<string name="sticky_notifications">Rendre les notifications persistantes</string>
<string name="sticky_notifications_description">Évite que les notifications ne soient enlevées.</string>
@@ -166,9 +167,12 @@
<string name="by_status">Par statut</string>
<string name="export">Exporter</string>
<string name="long_press_to_edit">Appuyez et maintenez pour changer la valeur</string>
<string name="change_value">Modifier la valeur</string>
<string name="value">Valeur</string>
<string name="calendar">Calendrier</string>
<string name="unit">Unité</string>
<string name="target_type">Type d\'objectif</string>
<string name="target_type_at_least">Au moins</string>
<string name="target_type_at_most">Au plus</string>
<string name="example_question_boolean">Par ex., avez-vous fait de l\'exercice aujourd\'hui?</string>
<string name="question">Question</string>
<string name="target">Cible</string>
@@ -191,6 +195,7 @@
Combien de pages avez-vous lu ?</string>
<string name="x_times_per_week">%d fois par semaine</string>
<string name="x_times_per_month">%d fois par mois</string>
<string name="x_times_per_y_days">%d fois en %d jours</string>
<string name="yes_or_no_short_example">Par ex, Entrainement</string>
<string name="color">Couleur</string>
<string name="example_target">Par ex, 15</string>

View File

@@ -75,8 +75,6 @@
<string name="interval_always_ask">हमेशा पूछें</string>
<string name="interval_custom">अपने तरीके से बनाएं</string>
<string name="pref_toggle_title">टॉगल पुनरावृत्ति हल्का दबाने से</string>
<string name="pref_toggle_description">\"
अधिक सुविधाजनक है, लेकिन आकस्मिक टॉगल हो सकता है ।\"</string>
<string name="pref_rate_this_app">\"
गूगले प्ले पर इस ऐप्लिकेशन को रेट करें\"</string>
<string name="pref_send_feedback">डेवेलपर को प्रतिक्रिया भेजें </string>
@@ -149,7 +147,7 @@
समस्या निवारण\"</string>
<string name="help_translate">\"
इस एप्लिकेशन का अनुवाद करने में मदद करें\"</string>
<string name="night_mode" comment="dark_theme">नाइट मोड</string>
<string name="night_mode">नाइट मोड</string>
<string name="use_pure_black">नाइट मोड मे पूरा काला यूज़ करें</string>
<string name="pure_black_description">\"
रात मोड में शुद्ध काले रंग के साथ ग्रे पृष्ठभूमि में बदलें. अमोलेड प्रदर्शन के साथ फोन में बैटरी उपयोग कम कर देता है ।\"</string>
@@ -193,7 +191,6 @@
<string name="by_status">स्थिति से</string>
<string name="export">एक्सपोर्ट करे</string>
<string name="long_press_to_edit">बदलने के लिए दबाकर रखें</string>
<string name="change_value">वैल्यू बदलें</string>
<string name="calendar">कैलेंडर</string>
<string name="unit">इकाई</string>
<string name="example_question_boolean">जैसे आपने आज व्यायाम किया?</string>
@@ -219,6 +216,7 @@
प्रति सप्ताह %d बार\"</string>
<string name="x_times_per_month">\"
प्रति माह %d बार\"</string>
<string name="x_times_per_y_days">%d बार %d दिन</string>
<string name="yes_or_no_short_example">जैसे व्यायाम</string>
<string name="color">रंग</string>
<string name="example_target">जैसे १५</string>

View File

@@ -56,7 +56,6 @@
<string name="interval_8_hour">8 sati</string>
<string name="interval_24_hour">24 sata</string>
<string name="pref_toggle_title">Označi ponavljanja sa kratkim pritisk.</string>
<string name="pref_toggle_description">Zgodnije je, no može uzrokovati slučajna označavanja.</string>
<string name="pref_rate_this_app">Ocijeni ovu aplikaciju na Google Playu</string>
<string name="pref_send_feedback">Pošalji povratne informacije raz. programeru</string>
<string name="pref_view_source_code">Pogledaj izvorni kod na GitHubu</string>
@@ -99,7 +98,7 @@
<string name="generate_bug_report">Generiraj izvješće o pogreški</string>
<string name="troubleshooting">Rješavanje problema</string>
<string name="help_translate">Pomozi prevesti ovu aplikaciju</string>
<string name="night_mode" comment="dark_theme">Noćni način</string>
<string name="night_mode">Noćni način</string>
<string name="use_pure_black">Koristi crnu boju za noćni način</string>
<string name="pure_black_description">Zamjenjuje sivu pozadinu sa crnom u noćnom načinu. To smanjuje potrošnju bateriju na uređajima s AMOLED zaslonima.</string>
<string name="interface_preferences">Sučelje</string>
@@ -133,4 +132,5 @@
<string name="by_color">Po boji</string>
<string name="by_score">Po rezultatu</string>
<string name="export">Izvezi</string>
<string name="x_times_per_y_days">%d puta u %d dani</string>
</resources>

View File

@@ -28,6 +28,22 @@
<string name="add_habit">Új szokás</string>
<string name="color_picker_default_title">Szín módosítása</string>
<string name="toast_habit_created">Szokás létrehozva</string>
<plurals name="toast_habits_changed">
<item quantity="one">Szokás módosítva</item>
<item quantity="other">Szokások módosítva</item>
</plurals>
<plurals name="toast_habits_deleted">
<item quantity="one">Szokás törölve</item>
<item quantity="other">Szokások törölve</item>
</plurals>
<plurals name="toast_habits_archived">
<item quantity="one">Szokás archiválva</item>
<item quantity="other">Szokások archiválva</item>
</plurals>
<plurals name="toast_habits_unarchived">
<item quantity="one">Szokás újraaktiválva</item>
<item quantity="other">Szokások újraaktiválva</item>
</plurals>
<string name="overview">Áttekintés</string>
<string name="habit_strength">Szokás erőssége</string>
<string name="history">Napló</string>
@@ -36,6 +52,7 @@
<string name="save">Mentés</string>
<string name="streaks">Szériák</string>
<string name="no_habits_found">Nincs aktív szokásod</string>
<string name="no_habits_left_to_do">Mára minden kész!</string>
<string name="long_press_to_toggle">Tartsd lenyomva a bejelöléshez, vagy a jelölés törléséhez</string>
<string name="reminder_off">Kikapcsolva</string>
<string name="create_habit">Szokás rögzítése</string>
@@ -58,7 +75,6 @@
<string name="interval_always_ask">Mindig rákérdez</string>
<string name="interval_custom">Egyedi...</string>
<string name="pref_toggle_title">Bejelölés rövid koppintással</string>
<string name="pref_toggle_description">Bejelölés koppintással nyomva tartás helyett. Kényelmesebb, de véletlen bejelöléseket okozhat.</string>
<string name="pref_rate_this_app">Értékeld az alkalmazást a Google Play-en</string>
<string name="pref_send_feedback">Visszajelzés küldése a fejlesztőnek</string>
<string name="pref_view_source_code">Forráskód megtekintése a GitHub-on</string>
@@ -69,6 +85,14 @@
<string name="hint_title">Tudtad?</string>
<string name="hint_drag">Az elemek újrarendezéséhez a koppints a szokás nevére, majd húzd a megfelelő helyre.</string>
<string name="hint_landscape">Több nap válik láthatóvá, ha fekvő módba állítod a telefonod kijelzőjét.</string>
<plurals name="delete_habits_title">
<item quantity="one">Törli a szokást?</item>
<item quantity="other">Törli a szokásokat?</item>
</plurals>
<plurals name="delete_habits_message">
<item quantity="one">A szokás véglegesen törölve lesz. A műveletet nem lehet visszavonni.</item>
<item quantity="other">A szokások véglegesen törölve lesznek. A műveletet nem lehet visszavonni.</item>
</plurals>
<string name="habit_not_found">Szokás törölve / nem található</string>
<string name="weekends">Hétvégente</string>
<string name="any_weekday">Hétfőtől péntekig</string>
@@ -107,7 +131,7 @@
<string name="generate_bug_report">Hibabejelentés generálása</string>
<string name="troubleshooting">Hibaelhárítás</string>
<string name="help_translate">Segíts lefordítani ezt az alkalmazást</string>
<string name="night_mode" comment="dark_theme">Éjszakai mód</string>
<string name="night_mode">Éjszakai mód</string>
<string name="use_pure_black">Fekete használata éjszakai módban</string>
<string name="pure_black_description">A szürke hátteret tiszta feketére cseréli éjszakai módban. Csökkenti az energiafelhasználást AMOLED kijelzős telefonokon.</string>
<string name="interface_preferences">Kezelőfelület</string>
@@ -143,9 +167,9 @@
<string name="by_name">Megnevezés szerint</string>
<string name="by_color">Színek szerint</string>
<string name="by_score">Pont szerint</string>
<string name="by_status">Állapot szerint</string>
<string name="export">Exportálás</string>
<string name="long_press_to_edit">Az érték módosításához tartsd lenyomva</string>
<string name="change_value">Érték módosítása</string>
<string name="calendar">Naptár</string>
<string name="unit">Egység</string>
<string name="example_question_boolean">pl. Edzettél ma?</string>
@@ -166,8 +190,10 @@
<string name="example_notes">(opcionális)</string>
<string name="yes_or_no_example">pl. Korán keltél ma fel? Edzettél? Sakkoztál?</string>
<string name="measurable">Mérhető</string>
<string name="measurable_example">pl. Hány kilométert futottál ma? Hány oldalt olvastál el?</string>
<string name="x_times_per_week">Heti %d alkalommal</string>
<string name="x_times_per_month">Havi %d alkalommal</string>
<string name="x_times_per_y_days">%d alk. / %d nap</string>
<string name="yes_or_no_short_example">pl. Edzés</string>
<string name="color">Szín</string>
<string name="example_target">pl. 15</string>
@@ -177,4 +203,18 @@
<string name="every_month">Minden hónapban</string>
<string name="validation_cannot_be_blank">Nem lehet üres</string>
<string name="today">Ma</string>
<string name="enter">Bevitel</string>
<string name="no_habits">Nem találhatók szokások</string>
<string name="no_numerical_habits">Nem található mérhető szokás</string>
<string name="no_boolean_habits">Nem található igen-vagy-nem szokás</string>
<string name="increment">Növelés</string>
<string name="decrement">Csökkentés</string>
<string name="pref_skip_title">Napok kihagyásának engedélyezése</string>
<string name="pref_skip_description">Váltás kétszer, ha kihagyást szeretne hozzáadni a pipa helyett. A kihagyások változatlanul tartják a pontszámot, és nem szakítják meg a sorozatot.</string>
<string name="pref_unknown_title">Kérdőjelek megjelenítése a hiányzó adatoknál</string>
<string name="pref_unknown_description">Az adatok nélküli napok megkülönböztetése a tényleges kihagyásoktól. Kihagyás megadásához váltson kétszer.</string>
<string name="you_are_now_a_developer">Ön mostantól már fejlesztő!</string>
<string name="activity_not_found">Ezen művelet elvégzéséhez nem található alkalmazás.</string>
<string name="pref_midnight_delay_title">A nap meghosszabbítása éjfél után néhány órával</string>
<string name="pref_midnight_delay_description">Várjon hajnali 3 -ig, hogy új napot mutasson. Hasznos, ha általában éjfél után fekszik le. Az alkalmazás újraindítását igényli.</string>
</resources>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2016-2021 Álinson Santos Xavier <git@axavier.org>
~
~ This file is part of Loop Habit Tracker.
~
~ Loop Habit Tracker is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by the
~ Free Software Foundation, either version 3 of the License, or (at your
~ option) any later version.
~
~ Loop Habit Tracker is distributed in the hope that it will be useful, but
~ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
~ more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_name">Loop Habit Tracker</string>
<string name="main_activity_title">Սովորություններ</string>
<string name="action_settings">Կարգավորումներ</string>
<string name="edit">Փոփոխել</string>
<string name="delete">Ջնջել</string>
<string name="archive">Արխիվ</string>
<string name="unarchive">Անարխիվ</string>
<string name="add_habit">Ավելացնել սովորություն</string>
<string name="color_picker_default_title">Փոխել գույնը</string>
<string name="toast_habit_created">Սովորությունը ստեղծեց</string>
<string name="history">Պատմություն</string>
<string name="clear">Մաքրել</string>
<string name="reminder">Հիշեցում</string>
<string name="save">Պահել</string>
<string name="reminder_off">Անջ.</string>
<string name="create_habit">Ստեղծել սովորությունը</string>
<string name="edit_habit">Փոփոխել սովորությունը</string>
<string name="snooze">Հետո</string>
<string name="intro_title_1">Բարի գալուստ</string>
<string name="interval_15_minutes">15 րոպե</string>
<string name="interval_30_minutes">30 րոպե</string>
<string name="interval_1_hour">1 ժամ</string>
<string name="interval_2_hour">2 ժամ</string>
<string name="interval_4_hour">4 ժամ</string>
<string name="interval_8_hour">8 ժամ</string>
<string name="interval_24_hour">24 ժամ</string>
<string name="interval_always_ask">Միշտ հարցնել</string>
<string name="links">Հղումներ</string>
<string name="name">Անուն</string>
<string name="settings">Կարգավորումներ</string>
<string name="hint_title">Գիտե՞ք</string>
<string name="weekends">Հանգստյան օրեր</string>
<string name="select_weekdays">Նշել օրեր</string>
<string name="done_label">Պատրաստ է</string>
<string name="clear_label">Մաքրել</string>
<string name="about">Մասին</string>
<string name="translators">Թարգմանիչներ</string>
<string name="version_n">Տարբերակ %s</string>
<string name="frequency">Հաճախություն</string>
<string name="every_day">Ամեն օր</string>
<string name="every_week">Ամեն շաբաթ</string>
<string name="night_mode">Մուգ տեսք</string>
<string name="day">Օր</string>
<string name="week">Շաբաթ</string>
<string name="month">Ամիս</string>
<string name="year">Տարի</string>
<string name="yes_or_no">Այո կամ ոչ</string>
<string name="every_x_days">Ամեն %d օրը մեկ</string>
<string name="every_x_weeks">Ամեն %d շաբաթը մեկ</string>
<string name="filter">Զտել</string>
<string name="habit">Սովորություն</string>
<string name="manually">Ձեռքով</string>
<string name="by_name">Անունով</string>
<string name="by_color">Գույնով</string>
<string name="calendar">Օրացույց</string>
<string name="unit">Միավոր</string>
<string name="question">Հարց</string>
<string name="yes">Այո</string>
<string name="no">Ոչ</string>
<string name="measurable">Չափելի</string>
<string name="x_times_per_week">Շաբաթական %d անգամ</string>
<string name="x_times_per_month">Ամսական %d անգամ</string>
<string name="color">Գույն</string>
<string name="today">Այսօր</string>
</resources>

View File

@@ -71,7 +71,7 @@
<string name="interval_always_ask">Selalu bertanya</string>
<string name="interval_custom">Kustom...</string>
<string name="pref_toggle_title">Tandai dengan cepat</string>
<string name="pref_toggle_description">Beri tanda centang dengan sekali ketuk bukan tekan-dan-tahan. Lebih nyaman, tapi dapat menyebabkan kesalahan penandaan.</string>
<string name="pref_toggle_description_2">Beri tanda centang dengan satu ketukan alih-alih tekan-dan-tahan.</string>
<string name="pref_rate_this_app">Berikan rating aplikasi ini di Google Play</string>
<string name="pref_send_feedback">Kirimkan umpan balik kepada Developer</string>
<string name="pref_view_source_code">Lihat kode program di GitHub</string>
@@ -130,7 +130,7 @@
<string name="generate_bug_report">Membuat laporan masalah</string>
<string name="troubleshooting">Troubleshoot</string>
<string name="help_translate">Bantu menerjemahkan aplikasi ini</string>
<string name="night_mode" comment="dark_theme">Mode malam</string>
<string name="night_mode">Mode malam</string>
<string name="use_pure_black">Gunakan warna hitam pekat pada mode malam</string>
<string name="pure_black_description">Ganti warna latar abu-abu dengan warna hitam pada mode malam. Mengurangi penggunaan baterai pada layar AMOLED.</string>
<string name="interface_preferences">Antarmuka</string>
@@ -150,6 +150,7 @@
<string name="none">Tidak ada</string>
<string name="filter">Filter</string>
<string name="hide_completed">Sembunyikan yang selesai</string>
<string name="hide_entered" comment="&quot;Hide entered&quot; appears in place of &quot;hide completed&quot; if the user has enabled the question marks option. This option hides all habits that have any data entered, not just the ones that have been completed. This allows the user to hide habits that have already failed early in the day.">Sembunyikan yang dimasukkan</string>
<string name="hide_archived">Sembunyikan yang diarsipkan</string>
<string name="sticky_notifications">Jadikan notifikasi melekat</string>
<string name="sticky_notifications_description">Mencegah notifikasi untuk terhapus.</string>
@@ -169,9 +170,12 @@
<string name="by_status">Berdasarkan status</string>
<string name="export">Ekspor</string>
<string name="long_press_to_edit">Tekan-dan-tahan untuk mengubah nilai</string>
<string name="change_value">Ubah nilai (value)</string>
<string name="value">Nilai</string>
<string name="calendar">Kalender</string>
<string name="unit">Unit</string>
<string name="target_type">Jenis Target</string>
<string name="target_type_at_least">Paling sedikit</string>
<string name="target_type_at_most">Paling banyak</string>
<string name="example_question_boolean">mis. Apakah kamu sudah berolahraga hari ini?</string>
<string name="question">Pertanyaan</string>
<string name="target">Target</string>
@@ -193,6 +197,7 @@
<string name="measurable_example">mis. Berapa km kamu berlari hari ini? Berapa lembar yang sudah kamu baca?</string>
<string name="x_times_per_week">%d kali per minggu</string>
<string name="x_times_per_month">%d kali per bulan</string>
<string name="x_times_per_y_days">%d kali dalam %d hari</string>
<string name="yes_or_no_short_example">mis. Olahraga</string>
<string name="color">Warna</string>
<string name="example_target">mis. 15</string>

View File

@@ -75,7 +75,7 @@
<string name="interval_always_ask">Chiedi sempre</string>
<string name="interval_custom">Personalizza...</string>
<string name="pref_toggle_title">Spunta le ripetizioni velocemente</string>
<string name="pref_toggle_description">Metti le spunte con un tocco singolo invece che tenendo premuto. Più comodo, ma potrebbe causare delle spunte accidentali.</string>
<string name="pref_toggle_description_2">Metti i segni di spunta con un tocco rapido invece di tenere premuto.</string>
<string name="pref_rate_this_app">Valuta quest\'app su Google Play</string>
<string name="pref_send_feedback">Manda un feedback allo sviluppatore</string>
<string name="pref_view_source_code">Vedi il codice sorgente su GitHub</string>
@@ -127,7 +127,7 @@
<string name="generate_bug_report">Genera bug report</string>
<string name="troubleshooting">Risoluzione dei problemi</string>
<string name="help_translate">Aiuta a tradurre questa app</string>
<string name="night_mode" comment="dark_theme">Modalità notte</string>
<string name="night_mode">Modalità notte</string>
<string name="use_pure_black">Usa nero puro nella modalità notte</string>
<string name="pure_black_description">Sostituisce gli sfondi grigi con sfondi neri nella modalità notte. Riduce il consumo di batteria nei dispositivi con schermo AMOLED.</string>
<string name="interface_preferences">Interfaccia</string>
@@ -147,6 +147,7 @@
<string name="none">Nessuno</string>
<string name="filter">Filtra</string>
<string name="hide_completed">Nascondi completati</string>
<string name="hide_entered" comment="&quot;Hide entered&quot; appears in place of &quot;hide completed&quot; if the user has enabled the question marks option. This option hides all habits that have any data entered, not just the ones that have been completed. This allows the user to hide habits that have already failed early in the day.">Nascondi inserito</string>
<string name="hide_archived">Nascondi archiviati</string>
<string name="sticky_notifications">Notifiche non rimuovibili</string>
<string name="sticky_notifications_description">Impedisce di poter rimuovere le notifiche.</string>
@@ -166,9 +167,12 @@
<string name="by_status">Per stato</string>
<string name="export">Esporta</string>
<string name="long_press_to_edit">Tieni premuto per cambiare il valore</string>
<string name="change_value">Cambia valore</string>
<string name="value">Valore</string>
<string name="calendar">Calendario</string>
<string name="unit">Unità</string>
<string name="target_type">Tipo di destinazione</string>
<string name="target_type_at_least">Almeno</string>
<string name="target_type_at_most">Al massimo</string>
<string name="example_question_boolean">ad es. Ti sei allenato oggi?</string>
<string name="question">Domanda</string>
<string name="target">Obiettivo</string>
@@ -190,6 +194,7 @@
<string name="measurable_example">es. Quanti chilometri hai percorso oggi? Quante pagine hai letto?</string>
<string name="x_times_per_week">%d volte a settimana</string>
<string name="x_times_per_month">%d volte al mese</string>
<string name="x_times_per_y_days">%d volte in %d giorni</string>
<string name="yes_or_no_short_example">ad es. Esercizio</string>
<string name="color">Colore</string>
<string name="example_target">ad es. 15</string>
@@ -208,6 +213,7 @@
<string name="pref_skip_title">Abilita salta giorni</string>
<string name="pref_skip_description">Attiva/disattiva due volte per aggiungere un salto invece di una spunta. Un salto mantiene il tuo punteggio invariato e non interrompe il tuo punteggio.</string>
<string name="pref_unknown_title">Mostra punti interrogativi per i dati mancanti</string>
<string name="pref_unknown_description">Differenzia i giorni senza dati dagli intervalli effettivi. Per inserire un intervallo, attiva due volte.</string>
<string name="you_are_now_a_developer">Ora sei uno sviluppatore</string>
<string name="activity_not_found">Nessuna app disponibile per gestire questa azione</string>
<string name="pref_midnight_delay_title">Prolunga il giorno di alcune ore dopo la mezzanotte</string>

View File

@@ -18,7 +18,7 @@
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_name">Loop למעקב אחר ההרגלים</string>
<string name="app_name">Loop לניהול הרגלים</string>
<string name="main_activity_title">הרגלים</string>
<string name="action_settings">הגדרות</string>
<string name="edit">עריכה</string>
@@ -68,13 +68,13 @@
<string name="check">סימון</string>
<string name="snooze">מאוחר יותר</string>
<string name="intro_title_1">ברוך בואך</string>
<string name="intro_description_1">„Loop למעקב אחר ההרגלים מסייע לך ביצירה ובשימור הרגלים טובים.</string>
<string name="intro_description_1">יישום ”Loop לניהול הרגלים מסייע לך להתחיל ולשמר הרגלים טובים.</string>
<string name="intro_title_2">יצירת הרגלים חדשים</string>
<string name="intro_description_2">בכל יום, לאחר שביצעת את ההרגל, יש לסמן זאת ביישום.</string>
<string name="intro_description_2">בכל יום, לאחר ביצוע ההרגל, יש לסמן זאת ביישום.</string>
<string name="intro_title_4">מעקב אחר ההתקדמות</string>
<string name="intro_description_4">גרפים מפורטים מציגים כיצד ההרגלים שלך השתפרו לאורך זמן.</string>
<string name="interval_15_minutes">15 דקות</string>
<string name="interval_30_minutes">30 דקות</string>
<string name="intro_description_4">גרפים מפורטים מציגים כיצד שיפרת את ההרגלים לאורך זמן.</string>
<string name="interval_15_minutes">רבע שעה</string>
<string name="interval_30_minutes">חצי שעה</string>
<string name="interval_1_hour">שעה</string>
<string name="interval_2_hour">שעתיים</string>
<string name="interval_4_hour">4 שעות</string>
@@ -83,9 +83,9 @@
<string name="interval_always_ask">תמיד לשאול</string>
<string name="interval_custom">התאמה אישית...</string>
<string name="pref_toggle_title">סימון הרגלים בלחיצה קצרה</string>
<string name="pref_toggle_description">סימון יעדים בהקשה קצרה במקום בלחיצה ממושכת. זה נוח יותר, אך יכול להוביל לסימוני הרגלים בטעות.</string>
<string name="pref_toggle_description_2">סימון הרגלים בעזרת הקשה יחידה במקום בעזרת הקשה והחזקה.</string>
<string name="pref_rate_this_app">דירוג היישום ב־Google Play</string>
<string name="pref_send_feedback">שליחת משוב למפתחים</string>
<string name="pref_send_feedback">שליחת משוב למפתח</string>
<string name="pref_view_source_code">צפייה בקוד המקור ב־GitHub</string>
<string name="links">קישורים</string>
<string name="name">שם</string>
@@ -107,8 +107,8 @@
<item quantity="other">ההרגלים יימחקו לצמיתות. לא ניתן לבטל פעולה זו.</item>
</plurals>
<string name="habit_not_found">ההרגל נמחק / לא נמצא</string>
<string name="weekends">סופי שבוע</string>
<string name="any_weekday">ימי חול</string>
<string name="weekends">שבת וראשון</string>
<string name="any_weekday">שני עד שישי</string>
<string name="any_day">כל ימות השבוע</string>
<string name="select_weekdays">בחירת ימים</string>
<string name="export_to_csv">ייצוא כקובץ CSV</string>
@@ -132,19 +132,19 @@
<string name="habits_imported">ההרגלים יובאו בהצלחה.</string>
<string name="import_data">ייבוא נתונים</string>
<string name="export_full_backup">ייצוא גיבוי מלא</string>
<string name="import_data_summary">תומך בכל הגיבויים שיוצאו על ידי היישום, כמו־גם קבצים שנוצרו על ידי Tickmate, HabitBull או Rewire. למידע נוסף נא לעיין בשאלות הנפוצות.</string>
<string name="export_as_csv_summary">ליצירת קבצים שניתן לפתוח באמצעות תוכנת גיליון אלקטרוני כגון Microsoft Exel או OpenOffice Calc. לא ניתן לייבא את נתוני הקובץ בחזרה.</string>
<string name="export_full_backup_summary">ליצירת קובץ שמכיל את כל הנתונים שלך. לא ניתן לייבא את נתוני הקובץ בחזרה.</string>
<string name="import_data_summary">תומך בכל הגיבויים שיוצאו מהיישום הזה, כמו־גם בקבצים שנוצרו על ידי Tickmate, HabitBull או Rewire. למידע נוסף נא לעיין בשאלות הנפוצות.</string>
<string name="export_as_csv_summary">ליצירת קבצים שנפתחים בתוכנת גיליון אלקטרוני כגון Microsoft Exel או OpenOffice Calc. לא ניתן לייבא את הקובץ בחזרה.</string>
<string name="export_full_backup_summary">ליצירת קובץ שמכיל את כל הנתונים שלך. לא ניתן לייבא את הקובץ בחזרה.</string>
<string name="bug_report_failed">יצירת דו״ח התקלה נכשלה.</string>
<string name="generate_bug_report">יצירת דו״ח תקלה</string>
<string name="troubleshooting">פתרון תקלות</string>
<string name="help_translate">עזרה בתרגום היישום</string>
<string name="night_mode" comment="dark_theme">ערכת נושא כהה</string>
<string name="night_mode">ערכת נושא כהה</string>
<string name="use_pure_black">רקע שחור מוחלט בערכת הנושא הכהה</string>
<string name="pure_black_description">להחלפת הרקע האפור בערכת הנושא הכהה לשחור מוחלט. זה מפחית את צריכת הסוללה במכשירים עם תצוגת AMOLED.</string>
<string name="interface_preferences">ממשק</string>
<string name="reverse_days">סדר ימים הפוך</string>
<string name="reverse_days_description">הצגת ימים בסדר הפוך במסך הראשי.</string>
<string name="reverse_days_description">הצגת הימים בסדר הפוך במסך הראשי.</string>
<string name="day">יום</string>
<string name="week">שבוע</string>
<string name="month">חודש</string>
@@ -159,6 +159,7 @@
<string name="none">ללא</string>
<string name="filter">סינון</string>
<string name="hide_completed">הסתרת יעדים שהושגו</string>
<string name="hide_entered" comment="&quot;Hide entered&quot; appears in place of &quot;hide completed&quot; if the user has enabled the question marks option. This option hides all habits that have any data entered, not just the ones that have been completed. This allows the user to hide habits that have already failed early in the day.">הסתרת ההרגלים שהושלמו</string>
<string name="hide_archived">הסתרת הארכיון</string>
<string name="sticky_notifications">יצירת תזכורות נעוצות</string>
<string name="sticky_notifications_description">למניעת התעלמות מתזכורות.</string>
@@ -178,15 +179,18 @@
<string name="by_status">לפי מצב</string>
<string name="export">ייצוא</string>
<string name="long_press_to_edit">לחיצה והחזקה ישנו את הערך</string>
<string name="change_value">שינוי ערך</string>
<string name="value">ערך</string>
<string name="calendar">לוח שנה</string>
<string name="unit">יחידה</string>
<string name="example_question_boolean">למשל: האם התעמלת היום?</string>
<string name="target_type">סוג יעד</string>
<string name="target_type_at_least">לכל הפחות</string>
<string name="target_type_at_most">לכל היותר</string>
<string name="example_question_boolean">למשל: עשית כושר היום?</string>
<string name="question">שאלה</string>
<string name="target">יעד</string>
<string name="yes">כן</string>
<string name="no">לא</string>
<string name="customize_notification_summary">שינוי הצליל, הרטט, התאורה ושאר הגדרות הקשורות להתראות</string>
<string name="customize_notification_summary">שינוי הצליל, הרטט, התאורה והגדרות התראה אחרות</string>
<string name="customize_notification">התאמת ההתראות</string>
<string name="pref_view_privacy">הצגת מדיניות הפרטיות</string>
<string name="view_all_contributors">הצגת כל המתנדבים&#8230;</string>
@@ -194,14 +198,15 @@
<string name="widget_opacity_title">אטימות היישומונים</string>
<string name="widget_opacity_description">להפיכת היישומונים שקופים או אטומים יותר במסך הבית שלך.</string>
<string name="first_day_of_the_week">היום הראשון בשבוע</string>
<string name="default_reminder_question">האם השלמת את ההרגל הזה היום?</string>
<string name="default_reminder_question">השלמת את ההרגל הזה היום?</string>
<string name="notes">הערות</string>
<string name="example_notes">(רשות)</string>
<string name="yes_or_no_example">למשל: האם התעוררת מוקדם היום? האם התעמלת? האם שיחקת שחמט?</string>
<string name="yes_or_no_example">למשל: התעוררת מוקדם היום? עשית כושר? שיחקת שחמט?</string>
<string name="measurable">הרגלים נמדדים</string>
<string name="measurable_example">למשל: כמה קילומטרים רצת היום? כמה עמודים קראת?</string>
<string name="x_times_per_week">%d פעמים בשבוע</string>
<string name="x_times_per_month">%d פעמים בחודש</string>
<string name="x_times_per_y_days">%d פעמים ב־%d ימים</string>
<string name="yes_or_no_short_example">למשל: התעמלות</string>
<string name="color">צבע</string>
<string name="example_target">למשל: 15</string>
@@ -209,12 +214,12 @@
<string name="measurable_question_example">למשל: כמה קילומטרים רצת היום?</string>
<string name="measurable_units_example">למשל: קילומטרים</string>
<string name="every_month">כל חודש</string>
<string name="validation_cannot_be_blank">חובה לתת שם</string>
<string name="validation_cannot_be_blank">זהו שדה חובה</string>
<string name="today">היום</string>
<string name="enter">מילוי</string>
<string name="no_habits">לא נמצאו הרגלים</string>
<string name="no_numerical_habits">לא נמצאו הרגלים נמדדים</string>
<string name="no_boolean_habits">לא נמצאו הרגלי כן או לא</string>
<string name="no_boolean_habits">לא נמצאו הרגלי כן או לא</string>
<string name="increment">עלייה</string>
<string name="decrement">ירידה</string>
<string name="pref_skip_title">לאפשר דילוג על ימים</string>
@@ -224,5 +229,5 @@
<string name="you_are_now_a_developer">מצב הפיתוח הופעל כעת</string>
<string name="activity_not_found">לא נמצא יישום שתומך בפעולה זו</string>
<string name="pref_midnight_delay_title">הארכת היום בכמה שעות לאחר החצות</string>
<string name="pref_midnight_delay_description">לחכות עד 3:00 כדי להציג יום חדש. שימושי אם לרוב הולכים לישון לאחר החצות. דורש הפעלה מחדש של היישום.</string>
<string name="pref_midnight_delay_description">המתנה עד 3:00 לפני הצגת יום חדש. שימושי אם לרוב הולכים לישון אחרי חצות. דורש הפעלה מחדש של היישום.</string>
</resources>

View File

@@ -37,6 +37,9 @@
<plurals name="toast_habits_archived">
<item quantity="other">習慣をアーカイブしました</item>
</plurals>
<plurals name="toast_habits_unarchived">
<item quantity="other">習慣のアーカイブを解除しました</item>
</plurals>
<string name="overview">概要</string>
<string name="habit_strength">習慣の強さ</string>
<string name="history">履歴</string>
@@ -68,7 +71,7 @@
<string name="interval_always_ask">毎回選択する</string>
<string name="interval_custom">カスタム...</string>
<string name="pref_toggle_title">タップでチェックをON/OFF</string>
<string name="pref_toggle_description">長押しではなくシングルタップでチェックを付けます。より便利ですが、誤って切り替えが起こる可能性があります。</string>
<string name="pref_toggle_description_2">長押しの代わりにワンタップでチェックマークをつけます。</string>
<string name="pref_rate_this_app">Google Play でこのアプリを評価</string>
<string name="pref_send_feedback">開発者にフィードバックを送信</string>
<string name="pref_view_source_code">GitHub でソースコードを参照</string>
@@ -118,7 +121,7 @@
<string name="generate_bug_report">バグレポートの作成</string>
<string name="troubleshooting">トラブルシューティング</string>
<string name="help_translate">このアプリの翻訳を支援する</string>
<string name="night_mode" comment="dark_theme">ダークテーマ</string>
<string name="night_mode">ダークテーマ</string>
<string name="use_pure_black">ダークテーマで完全な黒を使用する</string>
<string name="pure_black_description">夜間モードで灰色の背景を完全な黒で置き換えます。AMOLED ディスプレイの電話でバッテリー使用量を抑えます。</string>
<string name="interface_preferences">インターフェース</string>
@@ -138,6 +141,7 @@
<string name="none">なし</string>
<string name="filter">フィルター</string>
<string name="hide_completed">達成した習慣を非表示</string>
<string name="hide_entered" comment="&quot;Hide entered&quot; appears in place of &quot;hide completed&quot; if the user has enabled the question marks option. This option hides all habits that have any data entered, not just the ones that have been completed. This allows the user to hide habits that have already failed early in the day.">入力されたものを非表示にする</string>
<string name="hide_archived">アーカイブした習慣を非表示</string>
<string name="sticky_notifications">通知を固定</string>
<string name="sticky_notifications_description">通知をスワイプして消せないようにする</string>
@@ -157,9 +161,10 @@
<string name="by_status">ステータス順</string>
<string name="export">エクスポート</string>
<string name="long_press_to_edit">長押しすると値を変更できます</string>
<string name="change_value">を変更する</string>
<string name="value"></string>
<string name="calendar">カレンダー</string>
<string name="unit">単位</string>
<string name="target_type_at_least">少なくとも</string>
<string name="example_question_boolean">例:今日は運動しましたか?</string>
<string name="question">質問</string>
<string name="target">目標</string>
@@ -181,6 +186,7 @@
<string name="measurable_example">例:今日は何キロ走ったの?何ページ読んだの?</string>
<string name="x_times_per_week">1 週間に %d 回</string>
<string name="x_times_per_month">1 か月に %d 回</string>
<string name="x_times_per_y_days">%d 回 %d 日</string>
<string name="yes_or_no_short_example">例:運動</string>
<string name="color"></string>
<string name="example_target">15</string>
@@ -192,5 +198,7 @@
<string name="today">今日</string>
<string name="enter">入力</string>
<string name="no_habits">習慣が見つかりませんでした</string>
<string name="pref_skip_title">スキップ日を有効にする</string>
<string name="you_are_now_a_developer">これで開発者になりました!</string>
<string name="activity_not_found">この操作を行うアプリが見つかりませんでした。</string>
</resources>

View File

@@ -28,6 +28,18 @@
<string name="add_habit">습관 추가하기</string>
<string name="color_picker_default_title">색상 변경</string>
<string name="toast_habit_created">습관이 생성되었습니다.</string>
<plurals name="toast_habits_changed">
<item quantity="other">습관이 변경되었습니다</item>
</plurals>
<plurals name="toast_habits_deleted">
<item quantity="other">습관이 삭제되었습니다</item>
</plurals>
<plurals name="toast_habits_archived">
<item quantity="other">습관이 보관 되었습니다 </item>
</plurals>
<plurals name="toast_habits_unarchived">
<item quantity="other">습관 보관이 취소되었습니다 </item>
</plurals>
<string name="overview">한눈에 보기</string>
<string name="habit_strength">습관 강도</string>
<string name="history">이력</string>
@@ -36,6 +48,7 @@
<string name="save">저장</string>
<string name="streaks">연속</string>
<string name="no_habits_found">활성화된 습관이 없습니다.</string>
<string name="no_habits_left_to_do">오늘 할 일을 모두 마쳤습니다 </string>
<string name="long_press_to_toggle">체크하거나 해제하려면 길게 누르세요.</string>
<string name="reminder_off"></string>
<string name="create_habit">습관 만들기</string>
@@ -58,7 +71,6 @@
<string name="interval_always_ask">항상 묻기</string>
<string name="interval_custom">사용자 지정.</string>
<string name="pref_toggle_title">짧게 눌러서 전환하기</string>
<string name="pref_toggle_description">길게 누르고 있는 대신에 짧은 탭 한 번으로 체크합니다. 더 편리하지만, 실수로 전환될 수도 있습니다.</string>
<string name="pref_rate_this_app">Google Play에서 평가</string>
<string name="pref_send_feedback">개발자에게 피드백 보내기</string>
<string name="pref_view_source_code">Github에서 소스보기</string>
@@ -69,6 +81,12 @@
<string name="hint_title">아시나요?</string>
<string name="hint_drag">목록의 순서를 재배치하려면, 습관의 제목을 길게 누르고 다른 위치로 드래그하면 됩니다.</string>
<string name="hint_landscape">가로 모드에서는 더 많은 날짜를 볼 수 있습니다.</string>
<plurals name="delete_habits_title">
<item quantity="other">습관을 삭제하시겠습니까?</item>
</plurals>
<plurals name="delete_habits_message">
<item quantity="other">습관을 영구적으로 삭제합니다. 삭제 후 취소할 수 없습니다.</item>
</plurals>
<string name="habit_not_found">습관 삭제 / 찾을 수 없음</string>
<string name="weekends">주말</string>
<string name="any_weekday">주중</string>
@@ -102,7 +120,7 @@
<string name="generate_bug_report">오류보고서 작성하기</string>
<string name="troubleshooting">문제 해결</string>
<string name="help_translate">이 앱의 번역을 도와주세요</string>
<string name="night_mode" comment="dark_theme">야간 모드</string>
<string name="night_mode">야간 모드</string>
<string name="use_pure_black">야간 모드에서 검정색 사용하기</string>
<string name="pure_black_description">야간 모드의 회색 배경을 검정색으로 대체합니다. AMOLED 디스플레이를 사용하는 기기에서 배터리 사용량을 감소시킵니다.</string>
<string name="interface_preferences">인터페이스</string>
@@ -138,9 +156,9 @@
<string name="by_name">이름 순으로</string>
<string name="by_color">색상 순으로</string>
<string name="by_score">점수 순으로</string>
<string name="by_status">상태별로</string>
<string name="export">내보내기</string>
<string name="long_press_to_edit">길게 누르면 값이 변경됩니다.</string>
<string name="change_value">값 변경</string>
<string name="calendar">캘린더</string>
<string name="unit">단위</string>
<string name="example_question_boolean">예 : 오늘 운동을 했습니까?</string>
@@ -153,11 +171,21 @@
<string name="pref_view_privacy">개인 정보 취급 방침 보기</string>
<string name="view_all_contributors">모든 기여자보기&#8230;</string>
<string name="database">데이터베이스</string>
<string name="widget_opacity_title">위젯 투명도</string>
<string name="widget_opacity_description">위젯을 홈 화면에서 더 투명하게 또는 더 불투명하게 합니다.</string>
<string name="first_day_of_the_week">첫번째 요일</string>
<string name="default_reminder_question">오늘 습관을 지키셨나요?</string>
<string name="notes">메모</string>
<string name="example_notes">(선택사항)</string>
<string name="yes_or_no_example">예) 오늘 일찍 일어났나요? 운동 하셨나요? 체스를 하셨나요?</string>
<string name="measurable">측정 가능한</string>
<string name="measurable_example">예) 오늘 몇 마일을 달렸습니까? 몇 페이지를 읽었습니까?</string>
<string name="x_times_per_week">일주일에 몇 번</string>
<string name="x_times_per_month">한 달에 몇 번</string>
<string name="x_times_per_y_days">%d 번 %d 일 동안</string>
<string name="yes_or_no_short_example">예) 운동</string>
<string name="color"></string>
<string name="example_target">예) 15</string>
<string name="every_month">매월</string>
<string name="today">오늘</string>
</resources>

View File

@@ -71,7 +71,7 @@
<string name="interval_always_ask">Altijd vragen</string>
<string name="interval_custom">Aangepast...</string>
<string name="pref_toggle_title">Wijzig herhalingen door kort indrukken</string>
<string name="pref_toggle_description">Zet vinkjes met een enkel tikje in plaats van ingedrukt houden. Handiger, maar kan onbedoelde wijzigingen veroorzaken.</string>
<string name="pref_toggle_description_2">Zet vinkjes met een enkele keer drukken in plaats van ingedrukt te houden.</string>
<string name="pref_rate_this_app">Beoordeel deze app in Google Play</string>
<string name="pref_send_feedback">Stuur feedback aan de ontwikkelaar</string>
<string name="pref_view_source_code">Bekijk de broncode op GitHub</string>
@@ -115,7 +115,7 @@
<string name="generate_bug_report">Genereer foutenrapport</string>
<string name="troubleshooting">Probleemoplossing</string>
<string name="help_translate">Help deze app te vertalen</string>
<string name="night_mode" comment="dark_theme">Nachtmodus</string>
<string name="night_mode">Nachtmodus</string>
<string name="use_pure_black">Gebruik puur zwart bij het donkere thema</string>
<string name="pure_black_description">Vervangt grijze achtergronden door puur zwart in het donkere thema. Vermindert batterijgebruik bij telefoons met AMOLED scherm.</string>
<string name="interface_preferences">Interface</string>
@@ -135,6 +135,7 @@
<string name="none">Stil</string>
<string name="filter">Filteren</string>
<string name="hide_completed">Verberg voltooide</string>
<string name="hide_entered" comment="&quot;Hide entered&quot; appears in place of &quot;hide completed&quot; if the user has enabled the question marks option. This option hides all habits that have any data entered, not just the ones that have been completed. This allows the user to hide habits that have already failed early in the day.">Verberg ingevoerde</string>
<string name="hide_archived">Verberg gearchiveerde</string>
<string name="sticky_notifications">Maak meldingen persistent</string>
<string name="sticky_notifications_description">Voorkom dat meldingen weggehaald kunnen worden.</string>
@@ -154,9 +155,12 @@
<string name="by_status">Per status</string>
<string name="export">Exporteren</string>
<string name="long_press_to_edit">Ingedrukt houden om de waarde te wijzigen</string>
<string name="change_value">Waarde wijzigen</string>
<string name="value">Waarde</string>
<string name="calendar">Kalender</string>
<string name="unit">Eenheid</string>
<string name="target_type">Doeltype</string>
<string name="target_type_at_least">Minimaal</string>
<string name="target_type_at_most">Maximaal</string>
<string name="example_question_boolean">bijv. Heb je vandaag gesport?</string>
<string name="question">Vraag</string>
<string name="target">Doel</string>
@@ -178,6 +182,7 @@
<string name="measurable_example">bijv. Hoeveel kilometer heb je vandaag gelopen? Hoeveel pagina\'s heb je gelezen?</string>
<string name="x_times_per_week">%d keer per week</string>
<string name="x_times_per_month">%d keer per maand</string>
<string name="x_times_per_y_days">%d keer in %d dagen</string>
<string name="yes_or_no_short_example">bijv. Sporten</string>
<string name="color">Kleur</string>
<string name="example_target">bijv. 15</string>

View File

@@ -57,7 +57,6 @@
<string name="interval_24_hour">1 døgn</string>
<string name="interval_custom">Egendefinert...</string>
<string name="pref_toggle_title">Veksl med enkelttrykk</string>
<string name="pref_toggle_description">Sett på haker med et enkelttrykk i stedet for å tykke og holde. Mer praktisk, men kan forårsake utilsiktede vekslinger.</string>
<string name="pref_rate_this_app">Vurdér denne appen på Google Play</string>
<string name="pref_send_feedback">Send tilbakemelding til utviklerne</string>
<string name="pref_view_source_code">Vis kildekode på GitHub</string>
@@ -100,7 +99,7 @@
<string name="generate_bug_report">Generér feilrapport</string>
<string name="troubleshooting">Feilsøkning</string>
<string name="help_translate">Hjelp med å oversette denne appen</string>
<string name="night_mode" comment="dark_theme">Nattmodus</string>
<string name="night_mode">Nattmodus</string>
<string name="use_pure_black">Bruk batterisparing i nattmodus</string>
<string name="pure_black_description">Bytter ut grå bakgunner med helt svarte i nattmodus. Reduserer betteribruk hos telefoner med AMOLED-skjerm.</string>
<string name="interface_preferences">Grensesnitt</string>
@@ -135,6 +134,6 @@
<string name="by_color">Etter farge</string>
<string name="by_score">Etter poengsum</string>
<string name="export">Eksportér</string>
<string name="change_value">Endre verdi</string>
<string name="question">Spørsmål</string>
<string name="x_times_per_y_days">%d ganger på %d dager</string>
</resources>

View File

@@ -48,8 +48,8 @@
</plurals>
<plurals name="toast_habits_unarchived">
<item quantity="one">Nawyk przywrócony z archiwum</item>
<item quantity="few">Nawyki przywrócone z archiwum</item>
<item quantity="many">Nawyk przywrócony z archiwum</item>
<item quantity="few">Nawyki zostały przywrócone z archiwum</item>
<item quantity="many">Nawyki zostały przywrócone z archiwum</item>
<item quantity="other">Nawyki zostały przywrócone z archiwum</item>
</plurals>
<string name="overview">Przegląd</string>
@@ -83,7 +83,7 @@
<string name="interval_always_ask">Zawsze pytaj</string>
<string name="interval_custom">Własne ustawienia...</string>
<string name="pref_toggle_title">Przełącz powtarzanie krótkim naciśnięciem</string>
<string name="pref_toggle_description">Wygodniejsze, ale może spowodować przypadkowe przełączenia.</string>
<string name="pref_toggle_description_2">Umieść znaczniki wyboru jednym dotknięciem zamiast naciśnięcia i przytrzymania.</string>
<string name="pref_rate_this_app">Oceń tę aplikację w Google Play</string>
<string name="pref_send_feedback">Prześlij uwagi do programisty</string>
<string name="pref_view_source_code">Zobacz kod źródłowy na GitHub\'ie</string>
@@ -104,7 +104,7 @@
<item quantity="one">Nawyk zostanie trwale usunięty. Tej czynności nie można cofnąć.</item>
<item quantity="few">Nawyki zostaną trwale usunięte. Tej czynności nie można cofnąć.</item>
<item quantity="many">Nawyki zostaną trwale usunięte. Tej czynności nie można cofnąć.</item>
<item quantity="other">Nawyki zostaną trwale usunięte. Tej operacji nie można cofnąć.</item>
<item quantity="other">Nawyki zostaną trwale usunięte. Tej czynności nie można cofnąć.</item>
</plurals>
<string name="habit_not_found">Nawyk usunięty/nie znaleziony</string>
<string name="weekends">Weekendy</string>
@@ -139,7 +139,7 @@
<string name="generate_bug_report">Wygeneruj raport o błędach</string>
<string name="troubleshooting">Rozwiązywanie problemów</string>
<string name="help_translate">Pomóż w tłumaczeniu tej aplikacji</string>
<string name="night_mode" comment="dark_theme">Tryb nocny</string>
<string name="night_mode">Tryb nocny</string>
<string name="use_pure_black">Używaj pełnej czerni w trybie nocnym</string>
<string name="pure_black_description">Zamienia szare tła na pełną czerń w trybie nocnym. Zmniejsza zużycie baterii w telefonach z ekranem AMOLED.</string>
<string name="interface_preferences">Interfejs</string>
@@ -159,6 +159,7 @@
<string name="none">Brak</string>
<string name="filter">Filtruj</string>
<string name="hide_completed">Ukryj zakończone</string>
<string name="hide_entered" comment="&quot;Hide entered&quot; appears in place of &quot;hide completed&quot; if the user has enabled the question marks option. This option hides all habits that have any data entered, not just the ones that have been completed. This allows the user to hide habits that have already failed early in the day.">Ukryj wprowadzone</string>
<string name="hide_archived">Ukryj archiwizowane</string>
<string name="sticky_notifications">Przypinaj powiadomienia</string>
<string name="sticky_notifications_description">Zapobiega usunięciu powiadomień.</string>
@@ -178,9 +179,12 @@
<string name="by_status">Według statusu</string>
<string name="export">Eksportuj</string>
<string name="long_press_to_edit">Naciśnij i przytrzymaj, aby zmienić wartość</string>
<string name="change_value">Zmień wartość</string>
<string name="value">Wartość</string>
<string name="calendar">Kalendarz</string>
<string name="unit">Jednostka</string>
<string name="target_type">Rodzaj celu:</string>
<string name="target_type_at_least">Co najmniej</string>
<string name="target_type_at_most">Maksymalnie</string>
<string name="example_question_boolean">np. Czy ćwiczyłeś dzisiaj?</string>
<string name="question">Pytanie</string>
<string name="target">Cel</string>
@@ -192,7 +196,7 @@
<string name="view_all_contributors">Zobacz wszystkich współtwórców</string>
<string name="database">Baza danych</string>
<string name="widget_opacity_title">Przezroczystość widżetu</string>
<string name="widget_opacity_description">Sprawia, że widżety są bardziej przezroczyste lub bardziej nieprzezroczyste na ekranie głównym.</string>
<string name="widget_opacity_description">Sprawia, że widżety są bardziej lub mniej przezroczyste na ekranie głównym.</string>
<string name="first_day_of_the_week">Pierwszy dzień tygodnia</string>
<string name="default_reminder_question">Czy wytrwałeś dziś w nawyku?</string>
<string name="notes">Notatki</string>
@@ -202,6 +206,7 @@
<string name="measurable_example">np. Ile mil przejechałeś dzisiaj? Ile stron przeczytałeś?</string>
<string name="x_times_per_week">%d razy w tygodniu</string>
<string name="x_times_per_month">%d razy w miesiącu</string>
<string name="x_times_per_y_days">%d razy w ciągu %d dni</string>
<string name="yes_or_no_short_example">np. ćwiczenia</string>
<string name="color">Kolor</string>
<string name="example_target">np. 15</string>

View File

@@ -75,7 +75,7 @@
<string name="interval_always_ask">Perguntar sempre</string>
<string name="interval_custom">Personalizar...</string>
<string name="pref_toggle_title">Marcar repetições com um toque curto</string>
<string name="pref_toggle_description">Mais conveniente, mas pode causar marcações acidentais</string>
<string name="pref_toggle_description_2">Adicione marcações com um simples toque, ao invés de pressionar e segurar.</string>
<string name="pref_rate_this_app">Avaliar esse app no Google Play</string>
<string name="pref_send_feedback">Mandar sugestões para o desenvolvedor</string>
<string name="pref_view_source_code">Ver código-fonte no GitHub</string>
@@ -127,7 +127,7 @@
<string name="generate_bug_report">Gerar relatório de erros.</string>
<string name="troubleshooting">Solução de problemas</string>
<string name="help_translate">Ajude a traduzir este app</string>
<string name="night_mode" comment="dark_theme">Modo noturno</string>
<string name="night_mode">Modo noturno</string>
<string name="use_pure_black">Usar preto em modo noturno</string>
<string name="pure_black_description">Substitui os tons de cinza por preto puro em modo noturno. Economiza bateria em telefones com tela AMOLED.</string>
<string name="interface_preferences">Interface</string>
@@ -147,6 +147,7 @@
<string name="none">Nenhum</string>
<string name="filter">Filtro</string>
<string name="hide_completed">Ocultar concluído</string>
<string name="hide_entered" comment="&quot;Hide entered&quot; appears in place of &quot;hide completed&quot; if the user has enabled the question marks option. This option hides all habits that have any data entered, not just the ones that have been completed. This allows the user to hide habits that have already failed early in the day.">Ocultar marcado</string>
<string name="hide_archived">Ocultar arquivado</string>
<string name="sticky_notifications">Tornar notificações persistentes</string>
<string name="sticky_notifications_description">Impede que as notificações sejam removidas.</string>
@@ -166,9 +167,12 @@
<string name="by_status">Por status</string>
<string name="export">Exportar</string>
<string name="long_press_to_edit">Pressione e segure para alterar o valor</string>
<string name="change_value">Alterar valor</string>
<string name="value">Valor</string>
<string name="calendar">Calendário</string>
<string name="unit">Unidade</string>
<string name="target_type">Tipo de meta</string>
<string name="target_type_at_least">Pelo menos</string>
<string name="target_type_at_most">No máximo</string>
<string name="example_question_boolean">ex.: Você se exercitou hoje?</string>
<string name="question">Questão</string>
<string name="target">Alvo</string>
@@ -190,6 +194,7 @@
<string name="measurable_example">ex.: Quantos km você correu hoje? Quantas páginas você leu?</string>
<string name="x_times_per_week">%d vezes por semana</string>
<string name="x_times_per_month">%d vezes por mês</string>
<string name="x_times_per_y_days">%d vezes em %d dias</string>
<string name="yes_or_no_short_example">ex: Exercício</string>
<string name="color">Cor</string>
<string name="example_target">Ex: 15</string>

Some files were not shown because too many files have changed in this diff Show More