71 Commits
Author SHA1 Message Date
Naveen Singh 8c711104ed chore(release): v1.2.2 (6) (#259) 2025-09-01 20:07:22 +05:30
fossifybot[bot] e7186a9c79 chore(release): v1.2.1 (5) (#254)
Co-authored-by: fossifybot[bot] <212866877+fossifybot[bot]@users.noreply.github.com>
2025-09-01 13:45:22 +00:00
dependabot[bot] 55eff8a6ae chore(deps): bump org.fossify:commons from 5.0.0 to 5.0.2 (#258)
Bumps [org.fossify:commons](https://github.com/FossifyOrg/commons) from 5.0.0 to 5.0.2.
- [Commits](https://github.com/FossifyOrg/commons/compare/5.0.0...5.0.2)

---
updated-dependencies:
- dependency-name: org.fossify:commons
  dependency-version: 5.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-01 19:11:16 +05:30
Matheus Campos 8b76e7f28a chore(l10n): update Spanish (American) translations
Currently translated at 6.8% (3 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/es_US/
Via: Weblate
2025-09-01 19:04:31 +05:30
GaucovyAero 0bee809420 chore(l10n): update Slovak translations
Currently translated at 100.0% (44 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/sk/
Via: Weblate
2025-09-01 19:04:31 +05:30
Kfir Pshititsky 2b51c3f2fa chore(l10n): update Hebrew translations
Currently translated at 100.0% (44 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/he/
Via: Weblate
2025-09-01 19:04:31 +05:30
Kfir Pshititsky 1b03d62494 chore(l10n): update Hebrew translations
Currently translated at 100.0% (44 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/he/
Via: Weblate
2025-09-01 19:04:31 +05:30
fossifybot[bot] e9ecfe53a4 chore: update lint baselines (#256)
Co-authored-by: fossifybot[bot] <212866877+fossifybot[bot]@users.noreply.github.com>
2025-09-01 10:01:03 +05:30
Naveen Singh da8202ee2d fix: set progress after computing total size (#253)
Refs: https://github.com/FossifyOrg/File-Manager/issues/251
2025-08-26 02:26:13 +05:30
Naveen Singh 31d4fdbf4f refactor(settings): remove color customization lock and add thank you button (#252) 2025-08-25 04:02:37 +05:30
Naveen Singh f68fe061e0 chore(deps): downgrade com.android.application from 8.12.0 to 8.11.1 (#249) 2025-08-22 04:57:19 +05:30
Naveen Singh f24a8089d2 docs: redirect questions to general discussions (#247) 2025-08-20 16:16:40 +05:30
dependabot[bot] 1571214647 chore(deps): bump org.jetbrains.kotlin.android from 2.2.0 to 2.2.10 (#246)
Bumps [org.jetbrains.kotlin.android](https://github.com/JetBrains/kotlin) from 2.2.0 to 2.2.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/v2.2.0...v2.2.10)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-18 22:39:18 +05:30
dependabot[bot] 5da4a63e8d chore(deps): bump org.fossify:commons from 4.3.0 to 4.4.2 (#243)
Bumps [org.fossify:commons](https://github.com/FossifyOrg/commons) from 4.3.0 to 4.4.2.
- [Commits](https://github.com/FossifyOrg/commons/compare/4.3.0...4.4.2)

---
updated-dependencies:
- dependency-name: org.fossify:commons
  dependency-version: 4.4.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-09 22:57:58 +05:30
dependabot[bot] aeb8977a77 chore(deps): bump io.nlopez.compose.rules:detekt from 0.4.25 to 0.4.27 (#244)
Bumps [io.nlopez.compose.rules:detekt](https://github.com/mrmans0n/compose-rules) from 0.4.25 to 0.4.27.
- [Release notes](https://github.com/mrmans0n/compose-rules/releases)
- [Commits](https://github.com/mrmans0n/compose-rules/compare/v0.4.25...v0.4.27)

---
updated-dependencies:
- dependency-name: io.nlopez.compose.rules:detekt
  dependency-version: 0.4.27
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-09 22:55:05 +05:30
dependabot[bot] 0b93fcbb3e chore(deps): bump com.android.application from 8.11.1 to 8.12.0 (#245)
Bumps com.android.application from 8.11.1 to 8.12.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-09 22:51:12 +05:30
fossifybot[bot] 39f9b00f6a chore: update lint baselines (#242)
Co-authored-by: fossifybot[bot] <212866877+fossifybot[bot]@users.noreply.github.com>
2025-08-01 09:16:47 +05:30
dependabot[bot] cfc1a89300 chore(deps): bump io.nlopez.compose.rules:detekt from 0.4.22 to 0.4.25 (#238)
Bumps [io.nlopez.compose.rules:detekt](https://github.com/mrmans0n/compose-rules) from 0.4.22 to 0.4.25.
- [Release notes](https://github.com/mrmans0n/compose-rules/releases)
- [Commits](https://github.com/mrmans0n/compose-rules/compare/v0.4.22...v0.4.25)

---
updated-dependencies:
- dependency-name: io.nlopez.compose.rules:detekt
  dependency-version: 0.4.25
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-21 22:42:18 +05:30
dependabot[bot] 5e8cd437d2 chore(deps): bump org.fossify:commons from 4.2.0 to 4.3.0 (#234)
Bumps [org.fossify:commons](https://github.com/FossifyOrg/commons) from 4.2.0 to 4.3.0.
- [Commits](https://github.com/FossifyOrg/commons/compare/4.2.0...4.3.0)

---
updated-dependencies:
- dependency-name: org.fossify:commons
  dependency-version: 4.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-14 23:44:40 +05:30
dependabot[bot] 3832e9db5d chore(deps): bump com.android.application from 8.11.0 to 8.11.1 (#233)
Bumps com.android.application from 8.11.0 to 8.11.1.

---
updated-dependencies:
- dependency-name: com.android.application
  dependency-version: 8.11.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-14 22:45:52 +05:30
fossifybot[bot] 1f61e17fd3 chore(release): v1.2.0 (4) (#210)
Co-authored-by: fossifybot[bot] <212866877+fossifybot[bot]@users.noreply.github.com>
2025-07-12 16:56:47 +05:30
Quentin PAGÈS 259d185b95 chore(l10n): update Occitan translations
Currently translated at 100.0% (44 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/oc/
Via: Weblate
2025-07-12 16:12:30 +05:30
Quentin PAGÈS c69d10b8fe chore(l10n): update French translations
Currently translated at 100.0% (44 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/fr/
Via: Weblate
2025-07-12 16:12:30 +05:30
Quentin PAGÈS 21637a6d8a chore(l10n): update Occitan translations
Currently translated at 81.8% (36 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/oc/
Via: Weblate
2025-07-12 16:12:30 +05:30
Ismail Choudhury ac4be152ed chore(l10n): update English (United Kingdom) translations
Currently translated at 2.2% (1 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/en_GB/
Via: Weblate
2025-07-12 16:12:30 +05:30
Quentin PAGÈS e52a9bc776 feat(l10n): add Occitan translations
Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/oc/
Via: Weblate
2025-07-12 16:12:30 +05:30
jonnysemon 1066344336 chore(l10n): update Arabic translations
Currently translated at 100.0% (2 of 2 strings)

Translation: Fossify/File-Manager metadata
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager-metadata/ar/
Via: Weblate
2025-07-12 16:12:30 +05:30
jonnysemon d8500c0c2a chore(l10n): update Arabic translations
Currently translated at 100.0% (44 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/ar/
Via: Weblate
2025-07-12 16:12:30 +05:30
AND 81276fe6c0 chore(l10n): update Macedonian translations
Currently translated at 4.5% (2 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/mk/
Via: Weblate
2025-07-12 16:12:30 +05:30
Naveen Singh 70ad7a07bc chore(l10n): update Portuguese (Brazil) translations
Currently translated at 100.0% (44 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/pt_BR/
Via: Weblate
2025-07-12 16:12:30 +05:30
Petri Hämäläinen ec0f0f7893 chore(l10n): update Finnish translations
Currently translated at 100.0% (44 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/fi/
Via: Weblate
2025-07-12 16:12:30 +05:30
Oasis Tri c2953276e2 chore(l10n): update French translations
Currently translated at 100.0% (2 of 2 strings)

Translation: Fossify/File-Manager metadata
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager-metadata/fr/
Via: Weblate
2025-07-12 16:12:30 +05:30
elid 0b208bf63b chore(l10n): update Hebrew translations
Currently translated at 100.0% (44 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/he/
Via: Weblate
2025-07-12 16:12:30 +05:30
Naveen Singh 141010a523 fix: save timestamp when compressing items (#232)
* fix: save timestamp when compressing items

See: https://github.com/FossifyOrg/File-Manager/issues/189

* style: reformat code

* chore: update baselines

* docs: update changelog
2025-07-12 15:58:50 +05:30
dependabot[bot]andNaveen Singh 8d2a67dc50 chore(deps): bump com.android.application from 8.10.1 to 8.11.0 (#223)
* chore(deps): bump com.android.application from 8.10.1 to 8.11.0

Bumps com.android.application from 8.10.1 to 8.11.0.

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

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): update gradle wrapper

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Naveen Singh <snaveen935@gmail.com>
2025-07-07 20:11:36 +05:30
dependabot[bot] 0172a2517b chore(deps): bump org.fossify:commons from 4.1.0 to 4.2.0 (#230)
Bumps org.fossify:commons from 4.1.0 to 4.2.0.

---
updated-dependencies:
- dependency-name: org.fossify:commons
  dependency-version: 4.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-04 21:19:27 +05:30
Naveen Singh 986d7d5215 feat: handle ACTION_OPEN_DOCUMENT intent (#229)
See: https://github.com/FossifyOrg/File-Manager/issues/213
2025-07-04 20:36:50 +05:30
Naveen Singh 769c0dbb6a chore: ignore extra translations and update detekt rules
* chore: ignore extra translations in lint

Extra translations are removed automatically by Weblate

* chore: update detekt rules

More compose-friendly

* chore: update lint baselines
2025-07-03 21:16:27 +05:30
dependabot[bot] 7d1f4c5eed chore(deps): bump org.fossify:commons from 4.0.0 to 4.1.0 (#222)
Bumps [org.fossify:commons](https://github.com/FossifyOrg/commons) from 4.0.0 to 4.1.0.
- [Commits](https://github.com/FossifyOrg/commons/compare/4.0.0...4.1.0)

---
updated-dependencies:
- dependency-name: org.fossify:commons
  dependency-version: 4.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-01 17:26:22 +05:30
Naveen Singh 1d16ff7505 chore(deps): bump RootTools to 965c154e20 (#227) 2025-07-01 17:17:20 +05:30
Naveen Singh e2b73dd6e7 chore(deps): switch to naveensingh/RootShell (#226)
Just another ancient relic that needed resurrection.
2025-07-01 16:56:57 +05:30
dependabot[bot]andNaveen Singh 24122e36f8 chore(deps): bump org.fossify:commons from 3.0.5 to 4.0.0 (#215)
* chore(deps): bump org.fossify:commons from 3.0.5 to 4.0.0

Bumps [org.fossify:commons](https://github.com/FossifyOrg/commons) from 3.0.5 to 4.0.0.
- [Commits](https://github.com/FossifyOrg/commons/compare/3.0.5...4.0.0)

---
updated-dependencies:
- dependency-name: org.fossify:commons
  dependency-version: 4.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(i18n): generate locale config automatically

One can be maintained in-app if missing translations become a problem.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Naveen Singh <snaveen935@gmail.com>
2025-06-25 15:45:35 +05:30
dependabot[bot] 9ad80710e8 chore(deps): bump org.jetbrains.kotlin.android from 2.1.21 to 2.2.0 (#216)
Bumps [org.jetbrains.kotlin.android](https://github.com/JetBrains/kotlin) from 2.1.21 to 2.2.0.
- [Release notes](https://github.com/JetBrains/kotlin/releases)
- [Changelog](https://github.com/JetBrains/kotlin/blob/v2.2.0/ChangeLog.md)
- [Commits](https://github.com/JetBrains/kotlin/compare/v2.1.21...v2.2.0)

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlin.android
  dependency-version: 2.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-24 16:35:58 +05:30
Naveen Singh 6c87991332 chore: update lint rules and baselines (#218) 2025-06-24 16:08:05 +05:30
dependabot[bot] 467021f8c1 chore(deps): bump org.fossify:commons from 3.0.3 to 3.0.5 (#212)
Bumps [org.fossify:commons](https://github.com/FossifyOrg/commons) from 3.0.3 to 3.0.5.
- [Commits](https://github.com/FossifyOrg/commons/compare/3.0.3...3.0.5)

---
updated-dependencies:
- dependency-name: org.fossify:commons
  dependency-version: 3.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-17 19:07:39 +05:30
dependabot[bot] 96c6e28800 chore(deps): bump fastlane from 2.227.2 to 2.228.0 (#211)
Bumps [fastlane](https://github.com/fastlane/fastlane) from 2.227.2 to 2.228.0.
- [Release notes](https://github.com/fastlane/fastlane/releases)
- [Changelog](https://github.com/fastlane/fastlane/blob/master/CHANGELOG.latest.md)
- [Commits](https://github.com/fastlane/fastlane/compare/fastlane/2.227.2...fastlane/2.228.0)

---
updated-dependencies:
- dependency-name: fastlane
  dependency-version: 2.228.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 20:46:38 +05:30
Naveen Singh 21e2ab1510 docs(changelog): add translations entry (#209) 2025-06-09 20:08:15 +05:30
Naveen Singh 9ffeb94a35 ci: add fastlane metadata validation and update release trigger
* ci: auto trigger release pull requests when on changelog update

* chore: add code owners

* ci: add fastlane metadata validation
2025-06-09 14:48:47 +05:30
dependabot[bot] 5738639e97 chore(deps): bump org.fossify:commons from 3.0.0 to 3.0.3 (#204)
Bumps org.fossify:commons from 3.0.0 to 3.0.3.

---
updated-dependencies:
- dependency-name: org.fossify:commons
  dependency-version: 3.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-07 15:18:28 +05:30
Naveen Singh 32aeae6b38 ci: update release workflows 2025-06-06 20:43:23 +05:30
elid 416cf9675a chore(l10n): update Hebrew translations
Currently translated at 100.0% (44 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/he/
Via: Weblate
2025-06-06 18:43:17 +05:30
mastoduy 4e0b5ba7b6 chore(l10n): update Vietnamese translations
Currently translated at 100.0% (2 of 2 strings)

Translation: Fossify/File-Manager metadata
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager-metadata/vi/
Via: Weblate
2025-06-06 18:43:17 +05:30
mastoduy d3fe0f8bc4 chore(l10n): update Vietnamese translations
Currently translated at 100.0% (44 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/vi/
Via: Weblate
2025-06-06 18:43:17 +05:30
Vaclovas Intas 8151b2dd00 chore(l10n): update Lithuanian translations
Currently translated at 100.0% (44 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/lt/
Via: Weblate
2025-06-06 18:43:17 +05:30
elid f9f37718de chore(l10n): update Hebrew translations
Currently translated at 100.0% (44 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/he/
Via: Weblate
2025-06-06 18:43:17 +05:30
Bora Atıcı ba605b59e3 chore(l10n): update Turkish translations
Currently translated at 100.0% (44 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/tr/
Via: Weblate
2025-06-06 18:43:17 +05:30
abdelbasset jabrane bd7d2204ee chore(l10n): update Arabic translations
Currently translated at 100.0% (44 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/ar/
Via: Weblate
2025-06-06 18:43:17 +05:30
dependabot[bot] d8720bb355 chore(deps): bump org.fossify:commons from 2.0.1 to 3.0.0 (#203)
Bumps org.fossify:commons from 2.0.1 to 3.0.0.

---
updated-dependencies:
- dependency-name: org.fossify:commons
  dependency-version: 3.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-02 19:42:12 +05:30
dependabot[bot] f23a4925a7 chore(deps): bump com.android.application from 8.10.0 to 8.10.1 (#198)
Bumps com.android.application from 8.10.0 to 8.10.1.

---
updated-dependencies:
- dependency-name: com.android.application
  dependency-version: 8.10.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-29 12:42:09 +05:30
Naveen Singh 30dd2397a2 ci(dependabot): add jitpack registry for gradle 2025-05-29 11:47:39 +05:30
Flavio F. M 9dad0da353 chore(l10n): update Portuguese (Brazil) translations
Currently translated at 100.0% (44 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/pt_BR/
Via: Weblate
2025-05-26 15:15:51 +05:30
109247019824 6f96f85d1a chore(l10n): update Bulgarian translations
Currently translated at 100.0% (44 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/bg/
Via: Weblate
2025-05-26 15:15:51 +05:30
Yurt Page 27acc647d8 chore(l10n): update Russian translations
Currently translated at 100.0% (2 of 2 strings)

Translation: Fossify/File-Manager metadata
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager-metadata/ru/
Via: Weblate
2025-05-26 15:15:51 +05:30
Yurt Page f3c01f4846 chore(l10n): update Russian translations
Currently translated at 100.0% (44 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/ru/
Via: Weblate
2025-05-26 15:15:51 +05:30
elid 33b783bf3c chore(l10n): update Hebrew translations
Currently translated at 100.0% (2 of 2 strings)

Translation: Fossify/File-Manager metadata
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager-metadata/he/
Via: Weblate
2025-05-26 15:15:51 +05:30
elid 45f9b5c261 chore(l10n): update Hebrew translations
Currently translated at 100.0% (44 of 44 strings)

Translation: Fossify/File-Manager
Translate-URL: https://hosted.weblate.org/projects/fossify/file-manager/he/
Via: Weblate
2025-05-26 15:15:51 +05:30
Naveen Singh ea082d2dd1 build: move app version to gradle.properties (#193) 2025-05-26 14:16:19 +05:30
Timur Erofeev ef23996ced fix: preserve timestamps when decompressing ZIP files
* Preserve modified date when unzip files.

* Preserve modified date when unzip files via actions menu

- Additionally handle the case with 0 last modified time.
2025-05-25 07:50:35 +05:30
Naveen Singh 68aec3ac61 ci: use fossifybot github app token 2025-05-22 19:34:56 +05:30
dependabot[bot] 93893ce919 chore(deps): bump io.gitlab.arturbosch.detekt from 1.23.3 to 1.23.8 (#161)
Bumps [io.gitlab.arturbosch.detekt](https://github.com/detekt/detekt) from 1.23.3 to 1.23.8.
- [Release notes](https://github.com/detekt/detekt/releases)
- [Commits](https://github.com/detekt/detekt/compare/v1.23.3...v1.23.8)

---
updated-dependencies:
- dependency-name: io.gitlab.arturbosch.detekt
  dependency-version: 1.23.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-22 09:21:38 +05:30
dependabot[bot]andNaveen Singh 222995b4b6 chore(deps): bump org.jetbrains.kotlin.android from 1.9.25 to 2.1.21 (#175)
* chore(deps): bump org.jetbrains.kotlin.android from 1.9.25 to 2.1.21

Bumps [org.jetbrains.kotlin.android](https://github.com/JetBrains/kotlin) from 1.9.25 to 2.1.21.
- [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.9.25...v2.1.21)

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlin.android
  dependency-version: 2.1.21
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build: update archives name property to use archivesBaseName

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Naveen Singh <snaveen935@gmail.com>
2025-05-22 09:21:20 +05:30
64 changed files with 1045 additions and 587 deletions

No files matched your search

+2
View File
@@ -0,0 +1,2 @@
# Auto-generated file. DO NOT EDIT.
1.2.2
-3
View File
@@ -77,9 +77,6 @@ body:
What did you do for the bug to show up? What did you do for the bug to show up?
If you can't cause the bug to show up again reliably (and hence don't have a proper set of steps to give us), please still try to give as many details as possible on how you think you encountered the bug. If you can't cause the bug to show up again reliably (and hence don't have a proper set of steps to give us), please still try to give as many details as possible on how you think you encountered the bug.
⚠️ Please **DO NOT** add links to SimpleMobileTools issues as they can be deleted at any time. Instead, copy-paste any useful information or instructions manually.
placeholder: | placeholder: |
1. Go to '...' 1. Go to '...'
2. Click on '....' 2. Click on '....'
+1 -1
View File
@@ -1,5 +1,5 @@
blank_issues_enabled: false blank_issues_enabled: false
contact_links: contact_links:
- name: Questions - name: Questions
url: https://github.com/FossifyOrg/File-Manager/discussions url: https://github.com/orgs/FossifyOrg/discussions
about: Please ask and answer questions here. about: Please ask and answer questions here.
@@ -33,8 +33,6 @@ body:
label: Feature description label: Feature description
description: | description: |
Explain how you want the app's look or behavior to change to suit your needs. Explain how you want the app's look or behavior to change to suit your needs.
⚠️ Please **DO NOT** add links to SimpleMobileTools issues as they can be deleted at any time. Instead, copy-paste any useful information manually.
validations: validations:
required: true required: true
+18 -6
View File
@@ -1,4 +1,18 @@
version: 2 version: 2
registries:
maven-google:
type: maven-repository
url: "https://dl.google.com/dl/android/maven2/"
maven-central:
type: maven-repository
url: "https://repo.maven.apache.org/maven2"
jitpack:
type: maven-repository
url: "https://jitpack.io"
updates: updates:
- package-ecosystem: "bundler" - package-ecosystem: "bundler"
directory: "/" directory: "/"
@@ -8,19 +22,19 @@ updates:
prefix: "chore" prefix: "chore"
prefix-development: "chore" prefix-development: "chore"
include: "scope" include: "scope"
assignees:
- "naveensingh"
- package-ecosystem: "gradle" - package-ecosystem: "gradle"
directory: "/" directory: "/"
registries:
- maven-central
- maven-google
- jitpack
schedule: schedule:
interval: "weekly" interval: "weekly"
commit-message: commit-message:
prefix: "chore" prefix: "chore"
prefix-development: "chore" prefix-development: "chore"
include: "scope" include: "scope"
assignees:
- "naveensingh"
- package-ecosystem: "github-actions" - package-ecosystem: "github-actions"
directory: "/" directory: "/"
@@ -30,5 +44,3 @@ updates:
prefix: "chore" prefix: "chore"
prefix-development: "chore" prefix-development: "chore"
include: "scope" include: "scope"
assignees:
- "naveensingh"
-25
View File
@@ -1,25 +0,0 @@
name: Github Release
on:
push:
tags:
- "*.*.*"
permissions:
contents: read
jobs:
call-release-workflow:
uses: FossifyOrg/.github/.github/workflows/release.yml@main
with:
tag: ${{ github.ref_name }}
flavor: "foss"
package_name: "org.fossify.filemanager"
secrets:
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }}
SERVICE_ACCOUNT_JSON_KEY_BASE64: ""
FOSSIFYBOT_TOKEN: ${{ secrets.FOSSIFYBOT_TOKEN }}
-46
View File
@@ -1,46 +0,0 @@
name: Google Play Release
on:
workflow_dispatch:
inputs:
track:
description: "Google Play Store release track"
required: false
type: choice
default: "beta"
options:
- internal
- alpha
- beta
- production
rollout:
description: "Rollout fraction (0.0-1.0)"
required: false
type: string
default: "0.05"
validate_only:
description: "Fastlane dry-run?"
required: false
type: boolean
default: false
permissions:
contents: read
jobs:
call-release-workflow:
uses: FossifyOrg/.github/.github/workflows/release.yml@main
with:
flavor: "gplay"
package_name: "org.fossify.filemanager"
track: ${{ github.event.inputs.track }}
rollout: ${{ github.event.inputs.rollout }}
validate_only: ${{ github.event.inputs.validate_only == 'true' }}
secrets:
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }}
SERVICE_ACCOUNT_JSON_KEY_BASE64: ${{ secrets.SERVICE_ACCOUNT_JSON_KEY_BASE64 }}
FOSSIFYBOT_TOKEN: ""
+1 -2
View File
@@ -11,5 +11,4 @@ on:
jobs: jobs:
call-image-minimizer-workflow: call-image-minimizer-workflow:
uses: FossifyOrg/.github/.github/workflows/image-minimizer.yml@main uses: FossifyOrg/.github/.github/workflows/image-minimizer.yml@main
secrets: secrets: inherit
FOSSIFYBOT_TOKEN: ${{ secrets.FOSSIFYBOT_TOKEN }}
+2 -3
View File
@@ -2,11 +2,10 @@ name: No Response
on: on:
schedule: schedule:
- cron: '0 12 * * *' # Runs daily at noon - cron: "0 12 * * *" # Runs daily at noon
workflow_dispatch: workflow_dispatch:
jobs: jobs:
call-no-response-workflow: call-no-response-workflow:
uses: FossifyOrg/.github/.github/workflows/no-response.yml@main uses: FossifyOrg/.github/.github/workflows/no-response.yml@main
secrets: secrets: inherit
FOSSIFYBOT_TOKEN: ${{ secrets.FOSSIFYBOT_TOKEN }}
+1 -6
View File
@@ -4,12 +4,7 @@ on:
pull_request_target: pull_request_target:
types: [opened] types: [opened]
permissions:
contents: read
# write permission is not required as FOSSIFYBOT_TOKEN is used
jobs: jobs:
call-pr-labeler-workflow: call-pr-labeler-workflow:
uses: FossifyOrg/.github/.github/workflows/pr-labeler.yml@main uses: FossifyOrg/.github/.github/workflows/pr-labeler.yml@main
secrets: secrets: inherit
FOSSIFYBOT_TOKEN: ${{ secrets.FOSSIFYBOT_TOKEN }}
+1 -1
View File
@@ -2,7 +2,7 @@ name: PR
on: on:
pull_request: pull_request:
branches: [ master ] branches: [ main ]
jobs: jobs:
call-pr-workflow: call-pr-workflow:
+15
View File
@@ -0,0 +1,15 @@
name: Prepare Release PR
on:
repository_dispatch:
types: [prepare-release]
workflow_dispatch:
push:
branches: [main]
paths:
- "CHANGELOG.md"
jobs:
call-release-pr:
uses: FossifyOrg/.github/.github/workflows/prepare-release-pr.yml@main
secrets: inherit
-17
View File
@@ -1,17 +0,0 @@
name: Release Commenter
on:
release:
types: [published]
permissions:
contents: read
issues: read
pull-requests: read
# write permission is not required as FOSSIFYBOT_TOKEN is used
jobs:
call-release-commenter:
uses: FossifyOrg/.github/.github/workflows/release-commenter.yml@main
secrets:
FOSSIFYBOT_TOKEN: ${{ secrets.FOSSIFYBOT_TOKEN }}
+17
View File
@@ -0,0 +1,17 @@
name: Release
on:
push:
branches: [ main ]
paths:
- ".fossify/release-marker.txt"
jobs:
call-release-workflow:
name: Release
uses: FossifyOrg/.github/.github/workflows/release.yml@main
with:
track: ${{ vars.GPLAY_TRACK || 'beta' }}
rollout: ${{ vars.GPLAY_ROLLOUT || '0.05' }}
validate_only: ${{ vars.GPLAY_DRY_RUN == 'true' }}
secrets: inherit
+1 -1
View File
@@ -2,7 +2,7 @@ name: Testing build (on PR)
on: on:
pull_request: pull_request:
branches: [ master ] branches: [ main ]
types: [ labeled, opened, synchronize, reopened ] types: [ labeled, opened, synchronize, reopened ]
jobs: jobs:
@@ -0,0 +1,11 @@
name: Update lint baselines
on:
workflow_dispatch:
schedule:
- cron: "0 0 1 * *"
jobs:
update-lint-baselines:
uses: FossifyOrg/.github/.github/workflows/update-lint-baselines.yml@main
secrets: inherit
@@ -0,0 +1,15 @@
name: Fastlane metadata validation
on:
push:
branches: [main]
paths:
- "fastlane/**"
pull_request:
branches: [main]
paths:
- "fastlane/**"
jobs:
validate:
uses: FossifyOrg/.github/.github/workflows/validate-fastlane-metadata.yml@main
+1
View File
@@ -10,3 +10,4 @@ keystore.jks
keystore.properties keystore.properties
fastlane/fastlane.json fastlane/fastlane.json
fastlane/report.xml fastlane/report.xml
.kotlin/
+24 -17
View File
@@ -1,5 +1,4 @@
# Changelog # Changelog
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
@@ -7,23 +6,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
## [1.2.2] - 2025-09-01
### Changed
- Updated translations
### Fixed
- Fixed empty storage usage bars on initial load ([#251])
## [1.2.0] - 2025-07-12
### Changed
- Updated translations
### Fixed
- File modification time is now preserved when compressing/decompressing files ([#176])
## [1.1.0] - 2025-05-21 ## [1.1.0] - 2025-05-21
### Added ### Added
- Added SHA-1 and SHA-256 hashes to file properties ([#149]) - Added SHA-1 and SHA-256 hashes to file properties ([#149])
### Changed ### Changed
- Replaced checkboxes with switches - Replaced checkboxes with switches
- Updated translations - Updated translations
### Removed ### Removed
- Dropped support for Android 7 and older versions - Dropped support for Android 7 and older versions
### Fixed ### Fixed
- Files saved via `Save As` option are now named properly ([#37]) - Files saved via `Save As` option are now named properly ([#37])
- Decompressed folders are now named properly ([#120]) - Decompressed folders are now named properly ([#120])
- Text editor no longer resets on device rotation ([#106]) - Text editor no longer resets on device rotation ([#106])
@@ -33,36 +41,35 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Fixed invisible content when using app lock ([#150]) - Fixed invisible content when using app lock ([#150])
## [1.0.1] - 2024-03-17 ## [1.0.1] - 2024-03-17
### Changed ### Changed
- Folders now use primary/accent color. - Folders now use primary/accent color.
- Enhanced search performance in the text editor. - Enhanced search performance in the text editor.
- Added some translations. - Added some translations.
### Fixed ### Fixed
- Addressed unnecessary delays when renaming files. - Addressed unnecessary delays when renaming files.
- Fixed unresponsive behavior when viewing contents of a zip file. - Fixed unresponsive behavior when viewing contents of a zip file.
- Disabled the use of invalid characters such as `/` for batch file renaming. - Disabled the use of invalid characters such as `/` for batch file renaming.
- Fixed invisible sort menu when viewing storage summary. - Fixed invisible sort menu when viewing storage summary.
## [1.0.0] - 2024-01-07 ## [1.0.0] - 2024-01-07
### Added ### Added
- Initial release - Initial release
[Unreleased]: https://github.com/FossifyOrg/File-Manager/compare/1.1.0...HEAD
[1.1.0]: https://github.com/FossifyOrg/File-Manager/compare/1.0.1...1.1.0
[1.0.1]: https://github.com/FossifyOrg/File-Manager/compare/1.0.0...1.0.1
[1.0.0]: https://github.com/FossifyOrg/File-Manager/releases/tag/1.0.0
[#27]: https://github.com/FossifyOrg/File-Manager/issues/27 [#27]: https://github.com/FossifyOrg/File-Manager/issues/27
[#37]: https://github.com/FossifyOrg/File-Manager/issues/37 [#37]: https://github.com/FossifyOrg/File-Manager/issues/37
[#136]: https://github.com/FossifyOrg/File-Manager/issues/136
[#105]: https://github.com/FossifyOrg/File-Manager/issues/105 [#105]: https://github.com/FossifyOrg/File-Manager/issues/105
[#106]: https://github.com/FossifyOrg/File-Manager/issues/106 [#106]: https://github.com/FossifyOrg/File-Manager/issues/106
[#120]: https://github.com/FossifyOrg/File-Manager/issues/120 [#120]: https://github.com/FossifyOrg/File-Manager/issues/120
[#136]: https://github.com/FossifyOrg/File-Manager/issues/136
[#149]: https://github.com/FossifyOrg/File-Manager/issues/149 [#149]: https://github.com/FossifyOrg/File-Manager/issues/149
[#150]: https://github.com/FossifyOrg/File-Manager/issues/150 [#150]: https://github.com/FossifyOrg/File-Manager/issues/150
[#176]: https://github.com/FossifyOrg/File-Manager/issues/176
[#251]: https://github.com/FossifyOrg/File-Manager/issues/251
[Unreleased]: https://github.com/FossifyOrg/File-Manager/compare/1.2.2...HEAD
[1.2.2]: https://github.com/FossifyOrg/File-Manager/compare/1.2.0...1.2.2
[1.2.0]: https://github.com/FossifyOrg/File-Manager/compare/1.1.0...1.2.0
[1.1.0]: https://github.com/FossifyOrg/File-Manager/compare/1.0.1...1.1.0
[1.0.1]: https://github.com/FossifyOrg/File-Manager/compare/1.0.0...1.0.1
[1.0.0]: https://github.com/FossifyOrg/File-Manager/releases/tag/1.0.0
+1
View File
@@ -0,0 +1 @@
* @naveensingh
+13 -13
View File
@@ -10,26 +10,26 @@ GEM
public_suffix (>= 2.0.2, < 7.0) public_suffix (>= 2.0.2, < 7.0)
artifactory (3.0.17) artifactory (3.0.17)
atomos (0.1.3) atomos (0.1.3)
aws-eventstream (1.3.2) aws-eventstream (1.4.0)
aws-partitions (1.1097.0) aws-partitions (1.1116.0)
aws-sdk-core (3.223.0) aws-sdk-core (3.225.2)
aws-eventstream (~> 1, >= 1.3.0) aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0) aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9) aws-sigv4 (~> 1.9)
base64 base64
jmespath (~> 1, >= 1.6.1) jmespath (~> 1, >= 1.6.1)
logger logger
aws-sdk-kms (1.100.0) aws-sdk-kms (1.105.0)
aws-sdk-core (~> 3, >= 3.216.0) aws-sdk-core (~> 3, >= 3.225.0)
aws-sigv4 (~> 1.5) aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.185.0) aws-sdk-s3 (1.189.1)
aws-sdk-core (~> 3, >= 3.216.0) aws-sdk-core (~> 3, >= 3.225.0)
aws-sdk-kms (~> 1) aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5) aws-sigv4 (~> 1.5)
aws-sigv4 (1.11.0) aws-sigv4 (1.12.1)
aws-eventstream (~> 1, >= 1.0.2) aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4) babosa (1.0.4)
base64 (0.2.0) base64 (0.3.0)
claide (1.1.0) claide (1.1.0)
colored (1.2) colored (1.2)
colored2 (3.1.2) colored2 (3.1.2)
@@ -71,7 +71,7 @@ GEM
faraday_middleware (1.2.1) faraday_middleware (1.2.1)
faraday (~> 1.0) faraday (~> 1.0)
fastimage (2.4.0) fastimage (2.4.0)
fastlane (2.227.2) fastlane (2.228.0)
CFPropertyList (>= 2.3, < 4.0.0) CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0) addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0) artifactory (~> 3.0)
@@ -160,7 +160,7 @@ GEM
httpclient (2.9.0) httpclient (2.9.0)
mutex_m mutex_m
jmespath (1.6.2) jmespath (1.6.2)
json (2.11.3) json (2.12.2)
jwt (2.10.1) jwt (2.10.1)
base64 base64
logger (1.7.0) logger (1.7.0)
@@ -170,13 +170,13 @@ GEM
multipart-post (2.4.1) multipart-post (2.4.1)
mutex_m (0.3.0) mutex_m (0.3.0)
nanaimo (0.4.0) nanaimo (0.4.0)
naturally (2.2.1) naturally (2.3.0)
nkf (0.2.0) nkf (0.2.0)
optparse (0.6.0) optparse (0.6.0)
os (1.1.4) os (1.1.4)
plist (3.7.2) plist (3.7.2)
public_suffix (6.0.2) public_suffix (6.0.2)
rake (13.2.1) rake (13.3.0)
representable (3.2.0) representable (3.2.0)
declarative (< 0.1.0) declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0) trailblazer-option (>= 0.1.1, < 0.2.0)
+21 -9
View File
@@ -1,4 +1,4 @@
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.konan.properties.Properties import org.jetbrains.kotlin.konan.properties.Properties
import java.io.FileInputStream import java.io.FileInputStream
@@ -26,14 +26,14 @@ android {
compileSdk = project.libs.versions.app.build.compileSDKVersion.get().toInt() compileSdk = project.libs.versions.app.build.compileSDKVersion.get().toInt()
defaultConfig { defaultConfig {
applicationId = libs.versions.app.version.appId.get() applicationId = project.property("APP_ID").toString()
minSdk = project.libs.versions.app.build.minimumSDK.get().toInt() minSdk = project.libs.versions.app.build.minimumSDK.get().toInt()
targetSdk = project.libs.versions.app.build.targetSDK.get().toInt() targetSdk = project.libs.versions.app.build.targetSDK.get().toInt()
versionName = project.libs.versions.app.version.versionName.get() versionName = project.property("VERSION_NAME").toString()
versionCode = project.libs.versions.app.version.versionCode.get().toInt() versionCode = project.property("VERSION_CODE").toString().toInt()
archivesName.set("file-manager-$versionCode")
multiDexEnabled = true multiDexEnabled = true
vectorDrawables.useSupportLibrary = true vectorDrawables.useSupportLibrary = true
setProperty("archivesBaseName", "file-manager-$versionCode")
} }
signingConfigs { signingConfigs {
@@ -98,17 +98,25 @@ android {
includeInApk = false includeInApk = false
} }
tasks.withType<KotlinCompile> { androidResources {
kotlinOptions.jvmTarget = project.libs.versions.app.build.kotlinJVMTarget.get() @Suppress("UnstableApiUsage")
generateLocaleConfig = true
} }
namespace = libs.versions.app.version.appId.get() tasks.withType<KotlinCompile> {
compilerOptions.jvmTarget.set(
JvmTarget.fromTarget(project.libs.versions.app.build.kotlinJVMTarget.get())
)
}
namespace = project.property("APP_ID").toString()
lint { lint {
checkReleaseBuilds = false checkReleaseBuilds = false
abortOnError = true abortOnError = true
warningsAsErrors = true warningsAsErrors = false
baseline = file("lint-baseline.xml") baseline = file("lint-baseline.xml")
lintConfig = rootProject.file("lint.xml")
} }
bundle { bundle {
@@ -120,6 +128,9 @@ android {
detekt { detekt {
baseline = file("detekt-baseline.xml") baseline = file("detekt-baseline.xml")
config.setFrom("$rootDir/detekt.yml")
buildUponDefaultConfig = true
allRules = false
} }
dependencies { dependencies {
@@ -131,4 +142,5 @@ dependencies {
implementation(libs.gestureviews) implementation(libs.gestureviews)
implementation(libs.autofittextview) implementation(libs.autofittextview)
implementation(libs.zip4j) implementation(libs.zip4j)
detektPlugins(libs.compose.detekt)
} }
+6 -59
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" ?> <?xml version="1.0" ?>
<SmellBaseline> <SmellBaseline>
<ManuallySuppressedIssues></ManuallySuppressedIssues> <ManuallySuppressedIssues/>
<CurrentIssues> <CurrentIssues>
<ID>ComplexCondition:Activity.kt$(hide &amp;&amp; filename.startsWith('.')) || (!hide &amp;&amp; !filename.startsWith('.'))</ID> <ID>ComplexCondition:Activity.kt$(hide &amp;&amp; filename.startsWith('.')) || (!hide &amp;&amp; !filename.startsWith('.'))</ID>
<ID>ComplexCondition:ItemsAdapter.kt$ItemsAdapter$activity.getDoesFilePathExist(source) &amp;&amp; activity.getIsPathDirectory(source) &amp;&amp; sourceFile.list()?.isEmpty() == true &amp;&amp; sourceFile.getProperSize(true) == 0L &amp;&amp; sourceFile.getFileCount(true) == 0</ID> <ID>ComplexCondition:ItemsAdapter.kt$ItemsAdapter$activity.getDoesFilePathExist(source) &amp;&amp; activity.getIsPathDirectory(source) &amp;&amp; sourceFile.list()?.isEmpty() == true &amp;&amp; sourceFile.getProperSize(true) == 0L &amp;&amp; sourceFile.getFileCount(true) == 0</ID>
@@ -9,8 +9,7 @@
<ID>ComplexCondition:MimeTypesActivity.kt$MimeTypesActivity$mimetype != "image" &amp;&amp; mimetype != "video" &amp;&amp; mimetype != "audio" &amp;&amp; mimetype != "text" &amp;&amp; !extraAudioMimeTypes.contains(fullMimetype) &amp;&amp; !extraDocumentMimeTypes.contains(fullMimetype) &amp;&amp; !archiveMimeTypes.contains(fullMimetype)</ID> <ID>ComplexCondition:MimeTypesActivity.kt$MimeTypesActivity$mimetype != "image" &amp;&amp; mimetype != "video" &amp;&amp; mimetype != "audio" &amp;&amp; mimetype != "text" &amp;&amp; !extraAudioMimeTypes.contains(fullMimetype) &amp;&amp; !extraDocumentMimeTypes.contains(fullMimetype) &amp;&amp; !archiveMimeTypes.contains(fullMimetype)</ID>
<ID>ComplexCondition:ReadTextActivity.kt$ReadTextActivity$requestCode == SELECT_SAVE_FILE_INTENT &amp;&amp; resultCode == Activity.RESULT_OK &amp;&amp; resultData != null &amp;&amp; resultData.data != null</ID> <ID>ComplexCondition:ReadTextActivity.kt$ReadTextActivity$requestCode == SELECT_SAVE_FILE_INTENT &amp;&amp; resultCode == Activity.RESULT_OK &amp;&amp; resultData != null &amp;&amp; resultData.data != null</ID>
<ID>CyclomaticComplexMethod:DecompressActivity.kt$DecompressActivity$private fun decompressTo(destination: String)</ID> <ID>CyclomaticComplexMethod:DecompressActivity.kt$DecompressActivity$private fun decompressTo(destination: String)</ID>
<ID>CyclomaticComplexMethod:DecompressActivity.kt$DecompressActivity$private fun fillAllListItems(uri: Uri, callback: () -&gt; Unit)</ID> <ID>CyclomaticComplexMethod:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths( sourcePaths: List&lt;String&gt;, targetPath: String, password: String? = null ): Boolean</ID>
<ID>CyclomaticComplexMethod:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths(sourcePaths: List&lt;String&gt;, targetPath: String, password: String? = null): Boolean</ID>
<ID>CyclomaticComplexMethod:ItemsAdapter.kt$ItemsAdapter$override fun actionItemPressed(id: Int)</ID> <ID>CyclomaticComplexMethod:ItemsAdapter.kt$ItemsAdapter$override fun actionItemPressed(id: Int)</ID>
<ID>CyclomaticComplexMethod:MainActivity.kt$MainActivity$private fun setupOptionsMenu()</ID> <ID>CyclomaticComplexMethod:MainActivity.kt$MainActivity$private fun setupOptionsMenu()</ID>
<ID>CyclomaticComplexMethod:MimeTypesActivity.kt$MimeTypesActivity$private fun getProperFileDirItems(callback: (ArrayList&lt;FileDirItem&gt;) -&gt; Unit)</ID> <ID>CyclomaticComplexMethod:MimeTypesActivity.kt$MimeTypesActivity$private fun getProperFileDirItems(callback: (ArrayList&lt;FileDirItem&gt;) -&gt; Unit)</ID>
@@ -23,11 +22,6 @@
<ID>EmptyFunctionBlock:MimeTypesActivity.kt$MimeTypesActivity${}</ID> <ID>EmptyFunctionBlock:MimeTypesActivity.kt$MimeTypesActivity${}</ID>
<ID>EmptyFunctionBlock:StorageFragment.kt$StorageFragment${}</ID> <ID>EmptyFunctionBlock:StorageFragment.kt$StorageFragment${}</ID>
<ID>LargeClass:ItemsAdapter.kt$ItemsAdapter : MyRecyclerViewAdapterOnPopupTextUpdate</ID> <ID>LargeClass:ItemsAdapter.kt$ItemsAdapter : MyRecyclerViewAdapterOnPopupTextUpdate</ID>
<ID>LargeClass:MainActivity.kt$MainActivity : SimpleActivity</ID>
<ID>LongMethod:DecompressActivity.kt$DecompressActivity$private fun fillAllListItems(uri: Uri, callback: () -&gt; Unit)</ID>
<ID>LongMethod:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths(sourcePaths: List&lt;String&gt;, targetPath: String, password: String? = null): Boolean</ID>
<ID>LongMethod:MimeTypesActivity.kt$MimeTypesActivity$private fun getProperFileDirItems(callback: (ArrayList&lt;FileDirItem&gt;) -&gt; Unit)</ID>
<ID>LongParameterList:ItemsAdapter.kt$ItemsAdapter$( activity: SimpleActivity, var listItems: MutableList&lt;ListItem&gt;, private val listener: ItemOperationsListener?, recyclerView: MyRecyclerView, private val isPickMultipleIntent: Boolean, private val swipeRefreshLayout: SwipeRefreshLayout?, canHaveIndividualViewType: Boolean = true, itemClick: (Any) -&gt; Unit, )</ID>
<ID>LoopWithTooManyJumpStatements:DecompressActivity.kt$DecompressActivity$while</ID> <ID>LoopWithTooManyJumpStatements:DecompressActivity.kt$DecompressActivity$while</ID>
<ID>LoopWithTooManyJumpStatements:StorageFragment.kt$StorageFragment$do</ID> <ID>LoopWithTooManyJumpStatements:StorageFragment.kt$StorageFragment$do</ID>
<ID>MagicNumber:Config.kt$Config$1.2f</ID> <ID>MagicNumber:Config.kt$Config$1.2f</ID>
@@ -41,15 +35,11 @@
<ID>MagicNumber:ItemsAdapter.kt$ItemsAdapter$180</ID> <ID>MagicNumber:ItemsAdapter.kt$ItemsAdapter$180</ID>
<ID>MagicNumber:ItemsAdapter.kt$ItemsAdapter$4</ID> <ID>MagicNumber:ItemsAdapter.kt$ItemsAdapter$4</ID>
<ID>MagicNumber:ItemsFragment.kt$ItemsFragment$3</ID> <ID>MagicNumber:ItemsFragment.kt$ItemsFragment$3</ID>
<ID>MagicNumber:Long.kt$1000.0</ID>
<ID>MagicNumber:MimeTypesActivity.kt$MimeTypesActivity$1000</ID>
<ID>MagicNumber:ReadTextActivity.kt$ReadTextActivity$250</ID> <ID>MagicNumber:ReadTextActivity.kt$ReadTextActivity$250</ID>
<ID>MagicNumber:ReadTextActivity.kt$ReadTextActivity$50</ID> <ID>MagicNumber:ReadTextActivity.kt$ReadTextActivity$50</ID>
<ID>MagicNumber:RecentsFragment.kt$RecentsFragment$1000</ID>
<ID>MagicNumber:RecentsFragment.kt$RecentsFragment$3</ID> <ID>MagicNumber:RecentsFragment.kt$RecentsFragment$3</ID>
<ID>MagicNumber:RecentsFragment.kt$RecentsFragment$50</ID> <ID>MagicNumber:RecentsFragment.kt$RecentsFragment$50</ID>
<ID>MagicNumber:RootHelpers.kt$RootHelpers.&lt;no name provided&gt;$5</ID> <ID>MagicNumber:RootHelpers.kt$RootHelpers.&lt;no name provided&gt;$5</ID>
<ID>MagicNumber:StorageFragment.kt$StorageFragment$1000</ID>
<ID>MagicNumber:StorageFragment.kt$StorageFragment$100000</ID> <ID>MagicNumber:StorageFragment.kt$StorageFragment$100000</ID>
<ID>MagicNumber:StorageFragment.kt$StorageFragment$2000</ID> <ID>MagicNumber:StorageFragment.kt$StorageFragment$2000</ID>
<ID>MagicNumber:StorageFragment.kt$StorageFragment$3</ID> <ID>MagicNumber:StorageFragment.kt$StorageFragment$3</ID>
@@ -62,39 +52,13 @@
<ID>MaxLineLength:CompressAsDialog.kt$CompressAsDialog$val indexOfDot = if (filename.contains('.') &amp;&amp; !activity.getIsPathDirectory(path)) filename.lastIndexOf(".") else filename.length</ID> <ID>MaxLineLength:CompressAsDialog.kt$CompressAsDialog$val indexOfDot = if (filename.contains('.') &amp;&amp; !activity.getIsPathDirectory(path)) filename.lastIndexOf(".") else filename.length</ID>
<ID>MaxLineLength:Config.kt$Config$set(wasStorageAnalysisTabAdded) = prefs.edit().putBoolean(WAS_STORAGE_ANALYSIS_TAB_ADDED, wasStorageAnalysisTabAdded).apply()</ID> <ID>MaxLineLength:Config.kt$Config$set(wasStorageAnalysisTabAdded) = prefs.edit().putBoolean(WAS_STORAGE_ANALYSIS_TAB_ADDED, wasStorageAnalysisTabAdded).apply()</ID>
<ID>MaxLineLength:Context.kt$fun Context.isPathOnRoot(path: String)</ID> <ID>MaxLineLength:Context.kt$fun Context.isPathOnRoot(path: String)</ID>
<ID>MaxLineLength:DecompressActivity.kt$DecompressActivity$binding.decompressToolbar.title = realPath?.getFilenameFromPath() ?: Uri.decode(uri.toString().getFilenameFromPath())</ID>
<ID>MaxLineLength:DecompressActivity.kt$DecompressActivity$updateMaterialActivityViews(decompressCoordinator, decompressList, useTransparentNavigation = true, useTopSearchMenu = false)</ID> <ID>MaxLineLength:DecompressActivity.kt$DecompressActivity$updateMaterialActivityViews(decompressCoordinator, decompressList, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
<ID>MaxLineLength:DecompressItemsAdapter.kt$DecompressItemsAdapter$class</ID> <ID>MaxLineLength:DecompressItemsAdapter.kt$DecompressItemsAdapter$class</ID>
<ID>MaxLineLength:DecompressItemsAdapter.kt$DecompressItemsAdapter$val drawable = fileDrawables.getOrElse(fileName.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable })</ID> <ID>MaxLineLength:DecompressItemsAdapter.kt$DecompressItemsAdapter$val drawable = fileDrawables.getOrElse(fileName.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable })</ID>
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$FilePickerDialog</ID> <ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$FilePickerDialog</ID>
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$ManageFavoritesAdapter(this@FavoritesActivity, favorites, this@FavoritesActivity, manageFavoritesList) { }</ID> <ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$ManageFavoritesAdapter(this@FavoritesActivity, favorites, this@FavoritesActivity, manageFavoritesList) { }</ID>
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$updateMaterialActivityViews(manageFavoritesCoordinator, manageFavoritesList, useTransparentNavigation = true, useTopSearchMenu = false)</ID> <ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$updateMaterialActivityViews(manageFavoritesCoordinator, manageFavoritesList, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$"${baseConfig.OTGTreeUri}/document/${baseConfig.OTGPartition}%3A${itemToLoad.substring(baseConfig.OTGPath.length).replace("/", "%2F")}"</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$(drawable as LayerDrawable).findDrawableByLayerId(R.id.shortcut_folder_background).applyColorFilter(appIconColor)</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$File(path).listFiles()?.filter { if (shouldShowHidden) true else !it.name.startsWith('.') }</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$activity.getDocumentFile(path)?.listFiles()?.filter { if (shouldShowHidden) true else !it.name!!.startsWith(".") }</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$if</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$intent.flags = intent.flags or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NO_HISTORY</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$itemName?.text = if (textToHighlight.isEmpty()) fileName else fileName.highlightTextPart(textToHighlight, properPrimaryColor)</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$itemSection?.text = if (textToHighlight.isEmpty()) listItem.mName else listItem.mName.highlightTextPart(textToHighlight, properPrimaryColor)</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$name = if (base == currentPath) currentPath.getFilenameFromPath() else mainFilePath.relativizeWith(base)</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$override fun getIsItemSelectable(position: Int)</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$override fun onChange(position: Int)</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$private</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$private fun getSelectedFileDirItems()</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$sourceFile.list()?.isEmpty() == true</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$val currPath = if (entry.isDirectory) path else "${path.getParentPath().trimEnd('/')}/${entry.fileName}"</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$val drawable = fileDrawables.getOrElse(fileName.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable })</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$val fileDirItem = FileDirItem(currPath, entry.fileName, entry.isDirectory, 0, entry.uncompressedSize)</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$val fileIcon = fileDrawables.getOrElse(path.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable })</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$val paths = getSelectedFileDirItems().asSequence().filter { !it.isDirectory }.map { it.path }.toMutableList() as ArrayList&lt;String&gt;</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$}</ID> <ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$}</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemDirGrid$override</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemEmpty$override</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemFileDirList$override</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemFileDirList$return ItemFileDirListBindingAdapter(ItemFileDirListBinding.inflate(layoutInflater, viewGroup, attachToRoot))</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemFileGrid$override</ID>
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemSection$override</ID>
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$ItemsAdapter</ID> <ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$ItemsAdapter</ID>
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$class</ID> <ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$class</ID>
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$context</ID> <ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$context</ID>
@@ -118,7 +82,6 @@
<ID>MaxLineLength:MainActivity.kt$MainActivity$private fun getInactiveTabIndexes(activeIndex: Int)</ID> <ID>MaxLineLength:MainActivity.kt$MainActivity$private fun getInactiveTabIndexes(activeIndex: Int)</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$resultIntent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION</ID> <ID>MaxLineLength:MainActivity.kt$MainActivity$resultIntent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$updateMaterialActivityViews(binding.mainCoordinator, null, useTransparentNavigation = false, useTopSearchMenu = true)</ID> <ID>MaxLineLength:MainActivity.kt$MainActivity$updateMaterialActivityViews(binding.mainCoordinator, null, useTransparentNavigation = false, useTopSearchMenu = true)</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$val isPickFileIntent = action == RingtoneManager.ACTION_RINGTONE_PICKER || action == Intent.ACTION_GET_CONTENT || action == Intent.ACTION_PICK</ID>
<ID>MaxLineLength:MainActivity.kt$MainActivity$val licenses = LICENSE_GLIDE or LICENSE_PATTERN or LICENSE_REPRINT or LICENSE_GESTURE_VIEWS or LICENSE_AUTOFITTEXTVIEW or LICENSE_ZIP4J</ID> <ID>MaxLineLength:MainActivity.kt$MainActivity$val licenses = LICENSE_GLIDE or LICENSE_PATTERN or LICENSE_REPRINT or LICENSE_GESTURE_VIEWS or LICENSE_AUTOFITTEXTVIEW or LICENSE_ZIP4J</ID>
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$!extraAudioMimeTypes.contains(fullMimetype)</ID> <ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$!extraAudioMimeTypes.contains(fullMimetype)</ID>
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$if</ID> <ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$if</ID>
@@ -147,18 +110,17 @@
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$val filtered = allDeviceListItems.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList&lt;ListItem&gt;</ID> <ID>MaxLineLength:StorageFragment.kt$StorageFragment$val filtered = allDeviceListItems.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList&lt;ListItem&gt;</ID>
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$val mimeType = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault())</ID> <ID>MaxLineLength:StorageFragment.kt$StorageFragment$val mimeType = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault())</ID>
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$val storageStatsManager = context.getSystemService(AppCompatActivity.STORAGE_STATS_SERVICE) as StorageStatsManager</ID> <ID>MaxLineLength:StorageFragment.kt$StorageFragment$val storageStatsManager = context.getSystemService(AppCompatActivity.STORAGE_STATS_SERVICE) as StorageStatsManager</ID>
<ID>MaxLineLength:ViewPagerAdapter.kt$ViewPagerAdapter$val isGetContentIntent = activity.intent.action == Intent.ACTION_GET_CONTENT || activity.intent.action == Intent.ACTION_PICK</ID>
<ID>NestedBlockDepth:DecompressActivity.kt$DecompressActivity$private fun decompressTo(destination: String)</ID> <ID>NestedBlockDepth:DecompressActivity.kt$DecompressActivity$private fun decompressTo(destination: String)</ID>
<ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths(sourcePaths: List&lt;String&gt;, targetPath: String, password: String? = null): Boolean</ID> <ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths( sourcePaths: List&lt;String&gt;, targetPath: String, password: String? = null ): Boolean</ID>
<ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$private fun decompressPaths(paths: List&lt;String&gt;, conflictResolutions: LinkedHashMap&lt;String, Int&gt;, callback: (success: Boolean) -&gt; Unit)</ID> <ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$private fun decompressPaths( paths: List&lt;String&gt;, conflictResolutions: LinkedHashMap&lt;String, Int&gt;, callback: (success: Boolean) -&gt; Unit )</ID>
<ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$private fun setupView(binding: ItemViewBinding, listItem: ListItem)</ID> <ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$private fun setupView(binding: ItemViewBinding, listItem: ListItem)</ID>
<ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$private fun tryDecompressingPaths(sourcePaths: List&lt;String&gt;, callback: (success: Boolean) -&gt; Unit)</ID> <ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$private fun tryDecompressingPaths( sourcePaths: List&lt;String&gt;, callback: (success: Boolean) -&gt; Unit )</ID>
<ID>NestedBlockDepth:ItemsFragment.kt$ItemsFragment$private fun getRegularItemsOf(path: String, callback: (originalPath: String, items: ArrayList&lt;ListItem&gt;) -&gt; Unit)</ID> <ID>NestedBlockDepth:ItemsFragment.kt$ItemsFragment$private fun getRegularItemsOf(path: String, callback: (originalPath: String, items: ArrayList&lt;ListItem&gt;) -&gt; Unit)</ID>
<ID>NestedBlockDepth:ItemsFragment.kt$ItemsFragment$private fun searchFiles(text: String, path: String): ArrayList&lt;ListItem&gt;</ID> <ID>NestedBlockDepth:ItemsFragment.kt$ItemsFragment$private fun searchFiles(text: String, path: String): ArrayList&lt;ListItem&gt;</ID>
<ID>NestedBlockDepth:RecentsFragment.kt$RecentsFragment$private fun getRecents(callback: (recents: ArrayList&lt;ListItem&gt;) -&gt; Unit)</ID> <ID>NestedBlockDepth:RecentsFragment.kt$RecentsFragment$private fun getRecents(callback: (recents: ArrayList&lt;ListItem&gt;) -&gt; Unit)</ID>
<ID>NestedBlockDepth:StorageFragment.kt$StorageFragment$override fun setupFragment(activity: SimpleActivity)</ID> <ID>NestedBlockDepth:StorageFragment.kt$StorageFragment$override fun setupFragment(activity: SimpleActivity)</ID>
<ID>NestedBlockDepth:StorageFragment.kt$StorageFragment$private fun getAllFiles(volumeName: String): ArrayList&lt;FileDirItem&gt;</ID> <ID>NestedBlockDepth:StorageFragment.kt$StorageFragment$private fun getAllFiles(volumeName: String): ArrayList&lt;FileDirItem&gt;</ID>
<ID>ReturnCount:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths(sourcePaths: List&lt;String&gt;, targetPath: String, password: String? = null): Boolean</ID> <ID>ReturnCount:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths( sourcePaths: List&lt;String&gt;, targetPath: String, password: String? = null ): Boolean</ID>
<ID>SwallowedException:ItemsAdapter.kt$ItemsAdapter$e: Exception</ID> <ID>SwallowedException:ItemsAdapter.kt$ItemsAdapter$e: Exception</ID>
<ID>SwallowedException:MimeTypesActivity.kt$MimeTypesActivity$e: Exception</ID> <ID>SwallowedException:MimeTypesActivity.kt$MimeTypesActivity$e: Exception</ID>
<ID>SwallowedException:StorageFragment.kt$StorageFragment$e: Exception</ID> <ID>SwallowedException:StorageFragment.kt$StorageFragment$e: Exception</ID>
@@ -188,35 +150,20 @@
<ID>VariableNaming:ItemsAdapter.kt$ItemsAdapter$val SAFPath = getFirstSelectedItemPath()</ID> <ID>VariableNaming:ItemsAdapter.kt$ItemsAdapter$val SAFPath = getFirstSelectedItemPath()</ID>
<ID>VariableNaming:RecentsFragment.kt$RecentsFragment$private val RECENTS_LIMIT = 50</ID> <ID>VariableNaming:RecentsFragment.kt$RecentsFragment$private val RECENTS_LIMIT = 50</ID>
<ID>VariableNaming:StorageFragment.kt$StorageFragment$private val SIZE_DIVIDER = 100000</ID> <ID>VariableNaming:StorageFragment.kt$StorageFragment$private val SIZE_DIVIDER = 100000</ID>
<ID>WildcardImport:Activity.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:Activity.kt$import org.fossify.filemanager.helpers.*</ID>
<ID>WildcardImport:ChangeSortingDialog.kt$import org.fossify.commons.helpers.*</ID> <ID>WildcardImport:ChangeSortingDialog.kt$import org.fossify.commons.helpers.*</ID>
<ID>WildcardImport:CompressAsDialog.kt$import org.fossify.commons.extensions.*</ID> <ID>WildcardImport:CompressAsDialog.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:CreateNewItemDialog.kt$import org.fossify.commons.extensions.*</ID> <ID>WildcardImport:CreateNewItemDialog.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:DecompressActivity.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:InsertFilenameDialog.kt$import org.fossify.commons.extensions.*</ID> <ID>WildcardImport:InsertFilenameDialog.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.commons.dialogs.*</ID>
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.commons.helpers.*</ID>
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.filemanager.databinding.*</ID>
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.filemanager.extensions.*</ID>
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.filemanager.helpers.*</ID>
<ID>WildcardImport:ItemsFragment.kt$import org.fossify.commons.extensions.*</ID> <ID>WildcardImport:ItemsFragment.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:ItemsFragment.kt$import org.fossify.commons.helpers.*</ID> <ID>WildcardImport:ItemsFragment.kt$import org.fossify.commons.helpers.*</ID>
<ID>WildcardImport:MainActivity.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:MainActivity.kt$import org.fossify.commons.helpers.*</ID>
<ID>WildcardImport:ManageFavoritesAdapter.kt$import android.view.*</ID> <ID>WildcardImport:ManageFavoritesAdapter.kt$import android.view.*</ID>
<ID>WildcardImport:MimeTypesActivity.kt$import org.fossify.commons.extensions.*</ID> <ID>WildcardImport:MimeTypesActivity.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:MimeTypesActivity.kt$import org.fossify.filemanager.helpers.*</ID> <ID>WildcardImport:MimeTypesActivity.kt$import org.fossify.filemanager.helpers.*</ID>
<ID>WildcardImport:MyViewPagerFragment.kt$import org.fossify.commons.extensions.*</ID> <ID>WildcardImport:MyViewPagerFragment.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:ReadTextActivity.kt$import org.fossify.commons.extensions.*</ID> <ID>WildcardImport:ReadTextActivity.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:RecentsFragment.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:SaveAsActivity.kt$import org.fossify.commons.extensions.*</ID> <ID>WildcardImport:SaveAsActivity.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:SaveAsDialog.kt$import org.fossify.commons.extensions.*</ID> <ID>WildcardImport:SaveAsDialog.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:SettingsActivity.kt$import org.fossify.commons.extensions.*</ID> <ID>WildcardImport:SettingsActivity.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:SettingsActivity.kt$import org.fossify.commons.helpers.*</ID> <ID>WildcardImport:SettingsActivity.kt$import org.fossify.commons.helpers.*</ID>
<ID>WildcardImport:StorageFragment.kt$import org.fossify.commons.extensions.*</ID>
<ID>WildcardImport:StorageFragment.kt$import org.fossify.commons.helpers.*</ID>
<ID>WildcardImport:StorageFragment.kt$import org.fossify.filemanager.helpers.*</ID>
</CurrentIssues> </CurrentIssues>
</SmellBaseline> </SmellBaseline>
+249 -198
View File
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<issues format="6" by="lint 8.3.0" type="baseline" client="gradle" dependencies="false" name="AGP (8.3.0)" variant="all" version="8.3.0"> <issues format="6" by="lint 8.11.1" type="baseline" client="gradle" dependencies="false" name="AGP (8.11.1)" variant="all" version="8.11.1">
<issue <issue
id="ScopedStorage" id="ScopedStorage"
@@ -14,7 +14,7 @@
<issue <issue
id="NewApi" id="NewApi"
message="Call requires API level 33 (current min is 23): `launchChangeAppLanguageIntent`" message="Call requires API level 33 (current min is 26): `launchChangeAppLanguageIntent`"
errorLine1=" launchChangeAppLanguageIntent()" errorLine1=" launchChangeAppLanguageIntent()"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -24,58 +24,14 @@
</issue> </issue>
<issue <issue
id="UnusedAttribute" id="OldTargetApi"
message="Attribute `appCategory` is only used in API level 26 and higher (current min is 23)" message="Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the `android.os.Build.VERSION_CODES` javadoc for details."
errorLine1=" android:appCategory=&quot;productivity&quot;" errorLine1="app-build-targetSDK = &quot;34&quot;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~">
<location <location
file="src/main/AndroidManifest.xml" file="$HOME/work/File-Manager/File-Manager/gradle/libs.versions.toml"
line="22" line="22"
column="9"/> column="23"/>
</issue>
<issue
id="UnusedAttribute"
message="Attribute `localeConfig` is only used in API level 33 and higher (current min is 23)"
errorLine1=" android:localeConfig=&quot;@xml/locale_config&quot;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="src/main/AndroidManifest.xml"
line="25"
column="9"/>
</issue>
<issue
id="AppLinkUrlError"
message="Missing URL"
errorLine1=" &lt;intent-filter>"
errorLine2=" ^">
<location
file="src/main/AndroidManifest.xml"
line="69"
column="13"/>
</issue>
<issue
id="AppLinkUrlError"
message="Missing URL"
errorLine1=" &lt;intent-filter>"
errorLine2=" ^">
<location
file="src/main/AndroidManifest.xml"
line="96"
column="13"/>
</issue>
<issue
id="AppLinkUrlError"
message="Missing URL"
errorLine1=" &lt;intent-filter>"
errorLine2=" ^">
<location
file="src/main/AndroidManifest.xml"
line="108"
column="13"/>
</issue> </issue>
<issue <issue
@@ -91,101 +47,35 @@
<issue <issue
id="AndroidGradlePluginVersion" id="AndroidGradlePluginVersion"
message="A newer version of com.android.application than 8.3.0 is available: 8.6.1. (There is also a newer version of 8.3.𝑥 available, if upgrading to 8.6.1 is difficult: 8.3.2)" message="A newer version of Gradle than 8.13 is available: 8.14.3"
errorLine1="gradlePlugins-agp = &quot;8.3.0&quot;" errorLine1="distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip"
errorLine2=" ~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
file="$HOME/Projects/Community/FossifyOrg/File-Manager/gradle/libs.versions.toml" file="$HOME/work/File-Manager/File-Manager/gradle/wrapper/gradle-wrapper.properties"
line="18" line="3"
column="21"/> column="17"/>
</issue> </issue>
<issue <issue
id="AndroidGradlePluginVersion" id="AndroidGradlePluginVersion"
message="A newer version of com.android.application than 8.3.0 is available: 8.6.1. (There is also a newer version of 8.3.𝑥 available, if upgrading to 8.6.1 is difficult: 8.3.2)" message="A newer version of com.android.application than 8.11.1 is available: 8.12.2"
errorLine1="gradlePlugins-agp = &quot;8.3.0&quot;" errorLine1="gradlePlugins-agp = &quot;8.11.1&quot;"
errorLine2=" ~~~~~~~"> errorLine2=" ~~~~~~~~">
<location <location
file="$HOME/Projects/Community/FossifyOrg/File-Manager/gradle/libs.versions.toml" file="$HOME/work/File-Manager/File-Manager/gradle/libs.versions.toml"
line="18" line="19"
column="21"/>
</issue>
<issue
id="AndroidGradlePluginVersion"
message="A newer version of com.android.application than 8.3.0 is available: 8.6.1. (There is also a newer version of 8.3.𝑥 available, if upgrading to 8.6.1 is difficult: 8.3.2)"
errorLine1="gradlePlugins-agp = &quot;8.3.0&quot;"
errorLine2=" ~~~~~~~">
<location
file="$HOME/Projects/Community/FossifyOrg/File-Manager/gradle/libs.versions.toml"
line="18"
column="21"/> column="21"/>
</issue> </issue>
<issue <issue
id="GradleDependency" id="GradleDependency"
message="A newer version of org.jetbrains.kotlin.android than 1.9.10 is available: 1.9.25" message="A newer version of `compileSdkVersion` than 34 is available: 36"
errorLine1="kotlin = &quot;1.9.10&quot;" errorLine1="app-build-compileSDKVersion = &quot;34&quot;"
errorLine2=" ~~~~~~~~"> errorLine2=" ~~~~">
<location <location
file="$HOME/Projects/Community/FossifyOrg/File-Manager/gradle/libs.versions.toml" file="$HOME/work/File-Manager/File-Manager/gradle/libs.versions.toml"
line="3" line="21"
column="10"/> column="31"/>
</issue>
<issue
id="GradleDependency"
message="A newer version of org.jetbrains.kotlin.android than 1.9.10 is available: 1.9.25"
errorLine1="kotlin = &quot;1.9.10&quot;"
errorLine2=" ~~~~~~~~">
<location
file="$HOME/Projects/Community/FossifyOrg/File-Manager/gradle/libs.versions.toml"
line="3"
column="10"/>
</issue>
<issue
id="GradleDependency"
message="A newer version of org.jetbrains.kotlin.android than 1.9.10 is available: 1.9.25"
errorLine1="kotlin = &quot;1.9.10&quot;"
errorLine2=" ~~~~~~~~">
<location
file="$HOME/Projects/Community/FossifyOrg/File-Manager/gradle/libs.versions.toml"
line="3"
column="10"/>
</issue>
<issue
id="GradleDependency"
message="A newer version of org.fossify:commons than 18ad1dd308 is available: 8685963657"
errorLine1="commons = &quot;18ad1dd308&quot;"
errorLine2=" ~~~~~~~~~~~~">
<location
file="$HOME/Projects/Community/FossifyOrg/File-Manager/gradle/libs.versions.toml"
line="10"
column="11"/>
</issue>
<issue
id="GradleDependency"
message="A newer version of org.fossify:commons than 18ad1dd308 is available: 8685963657"
errorLine1="commons = &quot;18ad1dd308&quot;"
errorLine2=" ~~~~~~~~~~~~">
<location
file="$HOME/Projects/Community/FossifyOrg/File-Manager/gradle/libs.versions.toml"
line="10"
column="11"/>
</issue>
<issue
id="GradleDependency"
message="A newer version of org.fossify:commons than 18ad1dd308 is available: 8685963657"
errorLine1="commons = &quot;18ad1dd308&quot;"
errorLine2=" ~~~~~~~~~~~~">
<location
file="$HOME/Projects/Community/FossifyOrg/File-Manager/gradle/libs.versions.toml"
line="10"
column="11"/>
</issue> </issue>
<issue <issue
@@ -206,7 +96,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt" file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
line="286" line="376"
column="28"/> column="28"/>
</issue> </issue>
@@ -217,13 +107,13 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt" file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
line="941" line="1144"
column="24"/> column="24"/>
</issue> </issue>
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;app_launcher_name&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai)" message="&quot;app_launcher_name&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai)"
errorLine1=" &lt;string name=&quot;app_launcher_name&quot;>File Manager_debug&lt;/string>" errorLine1=" &lt;string name=&quot;app_launcher_name&quot;>File Manager_debug&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -234,7 +124,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;app_launcher_name&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai)" message="&quot;app_launcher_name&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai)"
errorLine1=" &lt;string name=&quot;app_launcher_name&quot;>File Manager&lt;/string>" errorLine1=" &lt;string name=&quot;app_launcher_name&quot;>File Manager&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -245,7 +135,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;press_back_again&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;press_back_again&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;press_back_again&quot;>Press back again to exit&lt;/string>" errorLine1=" &lt;string name=&quot;press_back_again&quot;>Press back again to exit&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -256,7 +146,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;go_to_home_folder&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lt&quot; (Lithuanian), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;go_to_home_folder&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;go_to_home_folder&quot;>Go to home folder&lt;/string>" errorLine1=" &lt;string name=&quot;go_to_home_folder&quot;>Go to home folder&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -267,7 +157,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;set_as_home_folder&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lt&quot; (Lithuanian), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;set_as_home_folder&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;set_as_home_folder&quot;>Set as home folder&lt;/string>" errorLine1=" &lt;string name=&quot;set_as_home_folder&quot;>Set as home folder&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -278,7 +168,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;home_folder_updated&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lt&quot; (Lithuanian), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;home_folder_updated&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;home_folder_updated&quot;>Home folder updated&lt;/string>" errorLine1=" &lt;string name=&quot;home_folder_updated&quot;>Home folder updated&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -289,7 +179,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;copy_path&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;copy_path&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;copy_path&quot;>Copy path to clipboard&lt;/string>" errorLine1=" &lt;string name=&quot;copy_path&quot;>Copy path to clipboard&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~">
<location <location
@@ -300,7 +190,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;path_copied&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;path_copied&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;path_copied&quot;>Path copied&lt;/string>" errorLine1=" &lt;string name=&quot;path_copied&quot;>Path copied&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location <location
@@ -311,7 +201,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;select_audio_file&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;select_audio_file&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;select_audio_file&quot;>Please select an audio file&lt;/string>" errorLine1=" &lt;string name=&quot;select_audio_file&quot;>Please select an audio file&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -322,7 +212,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;search_folder&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;search_folder&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;search_folder&quot;>Search folder&lt;/string>" errorLine1=" &lt;string name=&quot;search_folder&quot;>Search folder&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -333,7 +223,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;rooted_device_only&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lt&quot; (Lithuanian), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;rooted_device_only&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;rooted_device_only&quot;>This operation works only on rooted devices&lt;/string>" errorLine1=" &lt;string name=&quot;rooted_device_only&quot;>This operation works only on rooted devices&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -344,7 +234,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;recents&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lt&quot; (Lithuanian), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;" message="&quot;recents&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;recents&quot;>Recents&lt;/string>" errorLine1=" &lt;string name=&quot;recents&quot;>Recents&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~">
<location <location
@@ -355,7 +245,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;show_recents&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lt&quot; (Lithuanian), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;" message="&quot;show_recents&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;show_recents&quot;>Show recents&lt;/string>" errorLine1=" &lt;string name=&quot;show_recents&quot;>Show recents&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -366,7 +256,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;invert_colors&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lt&quot; (Lithuanian), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;nb&quot; (Norwegian Bokmål), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;ta&quot; (Tamil), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;" message="&quot;invert_colors&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;nb&quot; (Norwegian Bokmål), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;ta&quot; (Tamil), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;invert_colors&quot;>Invert colors&lt;/string>" errorLine1=" &lt;string name=&quot;invert_colors&quot;>Invert colors&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -377,7 +267,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;open_as&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ar&quot; (Arabic), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;open_as&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;open_as&quot;>Open as&lt;/string>" errorLine1=" &lt;string name=&quot;open_as&quot;>Open as&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~">
<location <location
@@ -388,7 +278,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;text_file&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ar&quot; (Arabic), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;text_file&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;text_file&quot;>Text file&lt;/string>" errorLine1=" &lt;string name=&quot;text_file&quot;>Text file&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~">
<location <location
@@ -399,7 +289,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;image_file&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ar&quot; (Arabic), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;image_file&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;image_file&quot;>Image file&lt;/string>" errorLine1=" &lt;string name=&quot;image_file&quot;>Image file&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~">
<location <location
@@ -410,7 +300,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;audio_file&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ar&quot; (Arabic), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;audio_file&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;audio_file&quot;>Audio file&lt;/string>" errorLine1=" &lt;string name=&quot;audio_file&quot;>Audio file&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~">
<location <location
@@ -421,7 +311,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;video_file&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ar&quot; (Arabic), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;video_file&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;video_file&quot;>Video file&lt;/string>" errorLine1=" &lt;string name=&quot;video_file&quot;>Video file&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~">
<location <location
@@ -432,7 +322,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;other_file&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ar&quot; (Arabic), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;other_file&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;other_file&quot;>Other file&lt;/string>" errorLine1=" &lt;string name=&quot;other_file&quot;>Other file&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~">
<location <location
@@ -443,7 +333,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;compress&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;compress&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;compress&quot;>Compress&lt;/string>" errorLine1=" &lt;string name=&quot;compress&quot;>Compress&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~">
<location <location
@@ -454,7 +344,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;decompress&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;decompress&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;decompress&quot;>Decompress&lt;/string>" errorLine1=" &lt;string name=&quot;decompress&quot;>Decompress&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~">
<location <location
@@ -465,7 +355,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;compress_as&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;compress_as&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;compress_as&quot;>Compress as&lt;/string>" errorLine1=" &lt;string name=&quot;compress_as&quot;>Compress as&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location <location
@@ -476,7 +366,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;compressing&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;compressing&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;compressing&quot;>Compressing…&lt;/string>" errorLine1=" &lt;string name=&quot;compressing&quot;>Compressing…&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location <location
@@ -487,7 +377,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;decompressing&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;decompressing&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;decompressing&quot;>Decompressing…&lt;/string>" errorLine1=" &lt;string name=&quot;decompressing&quot;>Decompressing…&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -498,7 +388,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;compression_successful&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;compression_successful&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;compression_successful&quot;>Compression successful&lt;/string>" errorLine1=" &lt;string name=&quot;compression_successful&quot;>Compression successful&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -509,7 +399,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;decompression_successful&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;decompression_successful&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;decompression_successful&quot;>Decompression successful&lt;/string>" errorLine1=" &lt;string name=&quot;decompression_successful&quot;>Decompression successful&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -520,7 +410,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;compressing_failed&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;compressing_failed&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;compressing_failed&quot;>Compressing failed&lt;/string>" errorLine1=" &lt;string name=&quot;compressing_failed&quot;>Compressing failed&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -531,7 +421,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;decompressing_failed&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;decompressing_failed&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;decompressing_failed&quot;>Decompressing failed&lt;/string>" errorLine1=" &lt;string name=&quot;decompressing_failed&quot;>Decompressing failed&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -542,7 +432,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;manage_favorites&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lt&quot; (Lithuanian), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;manage_favorites&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;manage_favorites&quot;>Manage favorites&lt;/string>" errorLine1=" &lt;string name=&quot;manage_favorites&quot;>Manage favorites&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -553,7 +443,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;go_to_favorite&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lt&quot; (Lithuanian), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;go_to_favorite&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;go_to_favorite&quot;>Go to favorite&lt;/string>" errorLine1=" &lt;string name=&quot;go_to_favorite&quot;>Go to favorite&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -564,7 +454,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;favorites_activity_placeholder&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lt&quot; (Lithuanian), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;favorites_activity_placeholder&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;favorites_activity_placeholder&quot;>You can add frequently used folders to favorites for easy access from anywhere.&lt;/string>" errorLine1=" &lt;string name=&quot;favorites_activity_placeholder&quot;>You can add frequently used folders to favorites for easy access from anywhere.&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -575,7 +465,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;file_editor&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;file_editor&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;file_editor&quot;>File Editor&lt;/string>" errorLine1=" &lt;string name=&quot;file_editor&quot;>File Editor&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location <location
@@ -586,7 +476,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;storage_analysis&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;nb&quot; (Norwegian Bokmål), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;" message="&quot;storage_analysis&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;nb&quot; (Norwegian Bokmål), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;storage_analysis&quot;>Storage analysis&lt;/string>" errorLine1=" &lt;string name=&quot;storage_analysis&quot;>Storage analysis&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -597,7 +487,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;images&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;nn&quot; (Norwegian Nynorsk), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;images&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;nn&quot; (Norwegian Nynorsk), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;images&quot;>Images&lt;/string>" errorLine1=" &lt;string name=&quot;images&quot;>Images&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~">
<location <location
@@ -608,7 +498,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;videos&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;videos&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;videos&quot;>Videos&lt;/string>" errorLine1=" &lt;string name=&quot;videos&quot;>Videos&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~">
<location <location
@@ -619,7 +509,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;audio&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ar&quot; (Arabic), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;sk&quot; (Slovak), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;" message="&quot;audio&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;sk&quot; (Slovak), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;audio&quot;>Audio&lt;/string>" errorLine1=" &lt;string name=&quot;audio&quot;>Audio&lt;/string>"
errorLine2=" ~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~">
<location <location
@@ -630,7 +520,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;documents&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ar&quot; (Arabic), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;" message="&quot;documents&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;documents&quot;>Documents&lt;/string>" errorLine1=" &lt;string name=&quot;documents&quot;>Documents&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~">
<location <location
@@ -641,7 +531,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;downloads&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ar&quot; (Arabic), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;" message="&quot;downloads&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;downloads&quot;>Downloads&lt;/string>" errorLine1=" &lt;string name=&quot;downloads&quot;>Downloads&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~">
<location <location
@@ -652,7 +542,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;archives&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;" message="&quot;archives&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;archives&quot;>Archives&lt;/string>" errorLine1=" &lt;string name=&quot;archives&quot;>Archives&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~">
<location <location
@@ -663,7 +553,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;others&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;nb&quot; (Norwegian Bokmål), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;" message="&quot;others&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;nb&quot; (Norwegian Bokmål), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;others&quot;>Others&lt;/string>" errorLine1=" &lt;string name=&quot;others&quot;>Others&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~">
<location <location
@@ -674,7 +564,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;storage_free&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;ar&quot; (Arabic), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;ko&quot; (Korean), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;" message="&quot;storage_free&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;ko&quot; (Korean), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;storage_free&quot;>free&lt;/string>" errorLine1=" &lt;string name=&quot;storage_free&quot;>free&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -685,7 +575,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;total_storage&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lt&quot; (Lithuanian), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;" message="&quot;total_storage&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;total_storage&quot;>Total storage: %s&lt;/string>" errorLine1=" &lt;string name=&quot;total_storage&quot;>Total storage: %s&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -696,7 +586,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;enable_root_access&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lt&quot; (Lithuanian), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;" message="&quot;enable_root_access&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;ne&quot; (Nepali), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;enable_root_access&quot;>Enable root access&lt;/string>" errorLine1=" &lt;string name=&quot;enable_root_access&quot;>Enable root access&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -707,7 +597,7 @@
<issue <issue
id="MissingTranslation" id="MissingTranslation"
message="&quot;press_back_twice&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lt&quot; (Lithuanian), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;eo&quot; (Esperanto), &quot;nb&quot; (Norwegian Bokmål), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;br&quot; (Breton), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;" message="&quot;press_back_twice&quot; is not translated in &quot;fil&quot; (Filipino; Pilipino), &quot;lv&quot; (Latvian), &quot;ia&quot; (Interlingua), &quot;mk&quot; (Macedonian), &quot;ml&quot; (Malayalam), &quot;ms&quot; (Malay), &quot;en&quot; (English), &quot;nb&quot; (Norwegian Bokmål), &quot;ne&quot; (Nepali), &quot;az&quot; (Azerbaijani), &quot;fa&quot; (Persian), &quot;nn&quot; (Norwegian Nynorsk), &quot;bn&quot; (Bangla), &quot;bs&quot; (Bosnian), &quot;si&quot; (Sinhala), &quot;zgh&quot; (Standard Moroccan Tamazight), &quot;ltg&quot;, &quot;kn&quot; (Kannada), &quot;or&quot; (Odia), &quot;kr&quot; (Kanuri), &quot;sat&quot; (Santali), &quot;cr&quot; (Cree), &quot;te&quot; (Telugu), &quot;th&quot; (Thai), &quot;cy&quot; (Welsh), &quot;ckb&quot;"
errorLine1=" &lt;string name=&quot;press_back_twice&quot;>Require pressing Back twice to leave the app&lt;/string>" errorLine1=" &lt;string name=&quot;press_back_twice&quot;>Require pressing Back twice to leave the app&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location <location
@@ -723,7 +613,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location <location
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt" file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
line="797" line="972"
column="13"/> column="13"/>
</issue> </issue>
@@ -734,7 +624,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location <location
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt" file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
line="801" line="976"
column="13"/> column="13"/>
</issue> </issue>
@@ -745,7 +635,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location <location
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt" file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
line="808" line="983"
column="9"/> column="9"/>
</issue> </issue>
@@ -756,7 +646,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location <location
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt" file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
line="814" line="989"
column="9"/> column="9"/>
</issue> </issue>
@@ -767,10 +657,17 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location <location
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt" file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
line="819" line="994"
column="9"/> column="9"/>
</issue> </issue>
<issue
id="ObsoleteSdkInt"
message="This folder configuration (`v26`) is unnecessary; `minSdkVersion` is 26. Merge all the resources in this folder into `mipmap-anydpi`.">
<location
file="src/main/res/mipmap-anydpi-v26"/>
</issue>
<issue <issue
id="Overdraw" id="Overdraw"
message="Possible overdraw: Root element paints background `?attr/selectableItemBackground` with a theme that also paints a background (inferred theme is `@style/AppTheme`)" message="Possible overdraw: Root element paints background `?attr/selectableItemBackground` with a theme that also paints a background (inferred theme is `@style/AppTheme`)"
@@ -859,17 +756,6 @@
column="14"/> column="14"/>
</issue> </issue>
<issue
id="UnusedResources"
message="The resource `R.menu.menu_pdf_viewer` appears to be unused"
errorLine1="&lt;menu xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;"
errorLine2="^">
<location
file="src/main/res/menu/menu_pdf_viewer.xml"
line="2"
column="1"/>
</issue>
<issue <issue
id="UnusedResources" id="UnusedResources"
message="The resource `R.string.path_copied` appears to be unused" message="The resource `R.string.path_copied` appears to be unused"
@@ -958,6 +844,171 @@
column="6"/> column="6"/>
</issue> </issue>
<issue
id="UseKtx"
message="Use the KTX extension function `SharedPreferences.edit` instead?"
errorLine1=" set(show) = prefs.edit().putBoolean(SHOW_HIDDEN, show).apply()"
errorLine2=" ~~~~~~~~~~~~">
<location
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
line="17"
column="21"/>
</issue>
<issue
id="UseKtx"
message="Use the KTX extension function `SharedPreferences.edit` instead?"
errorLine1=" set(temporarilyShowHidden) = prefs.edit().putBoolean(TEMPORARILY_SHOW_HIDDEN, temporarilyShowHidden).apply()"
errorLine2=" ~~~~~~~~~~~~">
<location
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
line="21"
column="38"/>
</issue>
<issue
id="UseKtx"
message="Use the KTX extension function `SharedPreferences.edit` instead?"
errorLine1=" set(pressBackTwice) = prefs.edit().putBoolean(PRESS_BACK_TWICE, pressBackTwice).apply()"
errorLine2=" ~~~~~~~~~~~~">
<location
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
line="27"
column="31"/>
</issue>
<issue
id="UseKtx"
message="Use the KTX extension function `SharedPreferences.edit` instead?"
errorLine1=" set(homeFolder) = prefs.edit().putString(HOME_FOLDER, homeFolder).apply()"
errorLine2=" ~~~~~~~~~~~~">
<location
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
line="38"
column="27"/>
</issue>
<issue
id="UseKtx"
message="Use the KTX extension function `SharedPreferences.edit` instead?"
errorLine1=" set(isRootAvailable) = prefs.edit().putBoolean(IS_ROOT_AVAILABLE, isRootAvailable).apply()"
errorLine2=" ~~~~~~~~~~~~">
<location
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
line="69"
column="32"/>
</issue>
<issue
id="UseKtx"
message="Use the KTX extension function `SharedPreferences.edit` instead?"
errorLine1=" set(enableRootAccess) = prefs.edit().putBoolean(ENABLE_ROOT_ACCESS, enableRootAccess).apply()"
errorLine2=" ~~~~~~~~~~~~">
<location
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
line="73"
column="33"/>
</issue>
<issue
id="UseKtx"
message="Use the KTX extension function `SharedPreferences.edit` instead?"
errorLine1=" set(editorTextZoom) = prefs.edit().putFloat(EDITOR_TEXT_ZOOM, editorTextZoom).apply()"
errorLine2=" ~~~~~~~~~~~~">
<location
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
line="77"
column="31"/>
</issue>
<issue
id="UseKtx"
message="Use the KTX extension function `SharedPreferences.edit` instead?"
errorLine1=" prefs.edit().putInt(VIEW_TYPE_PREFIX + path.lowercase(Locale.getDefault()), value).apply()"
errorLine2=" ~~~~~~~~~~~~">
<location
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
line="83"
column="13"/>
</issue>
<issue
id="UseKtx"
message="Use the KTX extension function `SharedPreferences.edit` instead?"
errorLine1=" prefs.edit().remove(VIEW_TYPE_PREFIX + path.lowercase(Locale.getDefault())).apply()"
errorLine2=" ~~~~~~~~~~~~">
<location
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
line="90"
column="9"/>
</issue>
<issue
id="UseKtx"
message="Use the KTX extension function `SharedPreferences.edit` instead?"
errorLine1=" set(fileColumnCnt) = prefs.edit().putInt(getFileColumnsField(), fileColumnCnt).apply()"
errorLine2=" ~~~~~~~~~~~~">
<location
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
line="97"
column="30"/>
</issue>
<issue
id="UseKtx"
message="Use the KTX extension function `SharedPreferences.edit` instead?"
errorLine1=" set(displayFilenames) = prefs.edit().putBoolean(DISPLAY_FILE_NAMES, displayFilenames).apply()"
errorLine2=" ~~~~~~~~~~~~">
<location
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
line="115"
column="33"/>
</issue>
<issue
id="UseKtx"
message="Use the KTX extension function `SharedPreferences.edit` instead?"
errorLine1=" set(showTabs) = prefs.edit().putInt(SHOW_TABS, showTabs).apply()"
errorLine2=" ~~~~~~~~~~~~">
<location
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
line="119"
column="25"/>
</issue>
<issue
id="UseKtx"
message="Use the KTX extension function `SharedPreferences.edit` instead?"
errorLine1=" set(wasStorageAnalysisTabAdded) = prefs.edit().putBoolean(WAS_STORAGE_ANALYSIS_TAB_ADDED, wasStorageAnalysisTabAdded).apply()"
errorLine2=" ~~~~~~~~~~~~">
<location
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
line="123"
column="43"/>
</issue>
<issue
id="UseKtx"
message="Use the KTX extension function `String.toUri` instead?"
errorLine1=" intent.data = Uri.parse(&quot;package:$packageName&quot;)"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="src/main/kotlin/org/fossify/filemanager/activities/MainActivity.kt"
line="340"
column="43"/>
</issue>
<issue
id="UseKtx"
message="Use the KTX extension function `String.toUri` instead?"
errorLine1=" intent.data = Uri.parse(&quot;package:$packageName&quot;)"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="src/main/kotlin/org/fossify/filemanager/activities/MainActivity.kt"
line="340"
column="43"/>
</issue>
<issue <issue
id="ClickableViewAccessibility" id="ClickableViewAccessibility"
message="Custom view `GestureEditText` overrides `onTouchEvent` but not `performClick`" message="Custom view `GestureEditText` overrides `onTouchEvent` but not `performClick`"
-1
View File
@@ -2,5 +2,4 @@
<resources> <resources>
<bool name="show_donate_in_about">false</bool> <bool name="show_donate_in_about">false</bool>
<bool name="hide_google_relations">false</bool> <bool name="hide_google_relations">false</bool>
<bool name="hide_all_external_links">true</bool>
</resources> </resources>
+8 -1
View File
@@ -22,7 +22,6 @@
android:appCategory="productivity" android:appCategory="productivity"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_launcher_name" android:label="@string/app_launcher_name"
android:localeConfig="@xml/locale_config"
android:requestLegacyExternalStorage="true" android:requestLegacyExternalStorage="true"
android:roundIcon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher"
android:theme="@style/AppTheme"> android:theme="@style/AppTheme">
@@ -61,6 +60,14 @@
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
</intent-filter> </intent-filter>
<intent-filter>
<action android:name="android.intent.action.OPEN_DOCUMENT" />
<data android:mimeType="*/*" />
<category android:name="android.intent.category.OPENABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter> <intent-filter>
<action android:name="android.intent.action.RINGTONE_PICKER" /> <action android:name="android.intent.action.RINGTONE_PICKER" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
@@ -26,6 +26,7 @@ import org.fossify.filemanager.R
import org.fossify.filemanager.adapters.DecompressItemsAdapter import org.fossify.filemanager.adapters.DecompressItemsAdapter
import org.fossify.filemanager.databinding.ActivityDecompressBinding import org.fossify.filemanager.databinding.ActivityDecompressBinding
import org.fossify.filemanager.extensions.config import org.fossify.filemanager.extensions.config
import org.fossify.filemanager.extensions.setLastModified
import org.fossify.filemanager.models.ListItem import org.fossify.filemanager.models.ListItem
import java.io.BufferedInputStream import java.io.BufferedInputStream
import java.io.File import java.io.File
@@ -171,7 +172,9 @@ class DecompressActivity : SimpleActivity() {
continue continue
} }
val isVulnerableForZipPathTraversal = !File(newPath).canonicalPath.startsWith(parent) val outputFile = File(newPath)
val isVulnerableForZipPathTraversal = !outputFile.canonicalPath.startsWith(parent)
if (isVulnerableForZipPathTraversal) { if (isVulnerableForZipPathTraversal) {
continue continue
} }
@@ -187,6 +190,7 @@ class DecompressActivity : SimpleActivity() {
fos!!.write(buffer, 0, count) fos!!.write(buffer, 0, count)
} }
fos!!.close() fos!!.close()
outputFile.setLastModified(entry)
} }
toast(R.string.decompression_successful) toast(R.string.decompression_successful)
@@ -411,7 +411,10 @@ class MainActivity : SimpleActivity() {
private fun setupTabs() { private fun setupTabs() {
binding.mainTabsHolder.removeAllTabs() binding.mainTabsHolder.removeAllTabs()
val action = intent.action val action = intent.action
val isPickFileIntent = action == RingtoneManager.ACTION_RINGTONE_PICKER || action == Intent.ACTION_GET_CONTENT || action == Intent.ACTION_PICK val isPickFileIntent = action == RingtoneManager.ACTION_RINGTONE_PICKER
|| action == Intent.ACTION_GET_CONTENT
|| action == Intent.ACTION_PICK
|| action == Intent.ACTION_OPEN_DOCUMENT
val isCreateDocumentIntent = action == Intent.ACTION_CREATE_DOCUMENT val isCreateDocumentIntent = action == Intent.ACTION_CREATE_DOCUMENT
if (isPickFileIntent) { if (isPickFileIntent) {
@@ -101,6 +101,7 @@ import org.fossify.filemanager.extensions.config
import org.fossify.filemanager.extensions.isPathOnRoot import org.fossify.filemanager.extensions.isPathOnRoot
import org.fossify.filemanager.extensions.isZipFile import org.fossify.filemanager.extensions.isZipFile
import org.fossify.filemanager.extensions.setAs import org.fossify.filemanager.extensions.setAs
import org.fossify.filemanager.extensions.setLastModified
import org.fossify.filemanager.extensions.sharePaths import org.fossify.filemanager.extensions.sharePaths
import org.fossify.filemanager.extensions.toggleItemVisibility import org.fossify.filemanager.extensions.toggleItemVisibility
import org.fossify.filemanager.extensions.tryOpenPathIntent import org.fossify.filemanager.extensions.tryOpenPathIntent
@@ -127,7 +128,8 @@ class ItemsAdapter(
private val swipeRefreshLayout: SwipeRefreshLayout?, private val swipeRefreshLayout: SwipeRefreshLayout?,
canHaveIndividualViewType: Boolean = true, canHaveIndividualViewType: Boolean = true,
itemClick: (Any) -> Unit, itemClick: (Any) -> Unit,
) : MyRecyclerViewAdapter(activity, recyclerView, itemClick), RecyclerViewFastScroller.OnPopupTextUpdate { ) : MyRecyclerViewAdapter(activity, recyclerView, itemClick),
RecyclerViewFastScroller.OnPopupTextUpdate {
private lateinit var fileDrawable: Drawable private lateinit var fileDrawable: Drawable
private lateinit var folderDrawable: Drawable private lateinit var folderDrawable: Drawable
@@ -142,7 +144,9 @@ class ItemsAdapter(
private val config = activity.config private val config = activity.config
private val viewType = if (canHaveIndividualViewType) { private val viewType = if (canHaveIndividualViewType) {
config.getFolderViewType(listItems.firstOrNull { !it.isSectionTitle }?.mPath?.getParentPath() ?: "") config.getFolderViewType(
path = listItems.firstOrNull { !it.isSectionTitle }?.mPath?.getParentPath().orEmpty()
)
} else { } else {
config.viewType config.viewType
} }
@@ -168,7 +172,8 @@ class ItemsAdapter(
override fun prepareActionMode(menu: Menu) { override fun prepareActionMode(menu: Menu) {
menu.apply { menu.apply {
findItem(R.id.cab_decompress).isVisible = getSelectedFileDirItems().map { it.path }.any { it.isZipFile() } findItem(R.id.cab_decompress).isVisible =
getSelectedFileDirItems().map { it.path }.any { it.isZipFile() }
findItem(R.id.cab_confirm_selection).isVisible = isPickMultipleIntent findItem(R.id.cab_confirm_selection).isVisible = isPickMultipleIntent
findItem(R.id.cab_copy_path).isVisible = isOneItemSelected() findItem(R.id.cab_copy_path).isVisible = isOneItemSelected()
findItem(R.id.cab_open_with).isVisible = isOneFileSelected() findItem(R.id.cab_open_with).isVisible = isOneFileSelected()
@@ -206,13 +211,21 @@ class ItemsAdapter(
} }
} }
override fun getSelectableItemCount() = listItems.filter { !it.isSectionTitle && !it.isGridTypeDivider }.size override fun getSelectableItemCount(): Int {
return listItems.filter { !it.isSectionTitle && !it.isGridTypeDivider }.size
}
override fun getIsItemSelectable(position: Int) = !listItems[position].isSectionTitle && !listItems[position].isGridTypeDivider override fun getIsItemSelectable(position: Int): Boolean {
return !listItems[position].isSectionTitle && !listItems[position].isGridTypeDivider
}
override fun getItemSelectionKey(position: Int) = listItems.getOrNull(position)?.path?.hashCode() override fun getItemSelectionKey(position: Int): Int? {
return listItems.getOrNull(position)?.path?.hashCode()
}
override fun getItemKeyPosition(key: Int) = listItems.indexOfFirst { it.path.hashCode() == key } override fun getItemKeyPosition(key: Int): Int {
return listItems.indexOfFirst { it.path.hashCode() == key }
}
override fun onActionModeCreated() { override fun onActionModeCreated() {
swipeRefreshLayout?.isRefreshing = false swipeRefreshLayout?.isRefreshing = false
@@ -233,25 +246,37 @@ class ItemsAdapter(
} }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val binding = Binding.getByItemViewType(viewType, isListViewType).inflate(layoutInflater, parent, false) val binding = Binding.getByItemViewType(viewType, isListViewType)
.inflate(layoutInflater, parent, false)
return createViewHolder(binding.root) return createViewHolder(binding.root)
} }
override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) { override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) {
val fileDirItem = listItems[position] val fileDirItem = listItems[position]
holder.bindView(fileDirItem, true, !fileDirItem.isSectionTitle) { itemView, layoutPosition -> holder.bindView(
any = fileDirItem,
allowSingleClick = true,
allowLongClick = !fileDirItem.isSectionTitle
) { itemView, layoutPosition ->
val viewType = getItemViewType(position) val viewType = getItemViewType(position)
setupView(Binding.getByItemViewType(viewType, isListViewType).bind(itemView), fileDirItem) setupView(
binding = Binding.getByItemViewType(viewType, isListViewType).bind(itemView),
listItem = fileDirItem
)
} }
bindViewHolder(holder) bindViewHolder(holder)
} }
override fun getItemCount() = listItems.size override fun getItemCount() = listItems.size
private fun getItemWithKey(key: Int): FileDirItem? = listItems.firstOrNull { it.path.hashCode() == key } private fun getItemWithKey(key: Int): FileDirItem? {
return listItems.firstOrNull { it.path.hashCode() == key }
}
private fun isOneFileSelected() = isOneItemSelected() && getItemWithKey(selectedKeys.first())?.isDirectory == false private fun isOneFileSelected(): Boolean {
return isOneItemSelected() && getItemWithKey(selectedKeys.first())?.isDirectory == false
}
private fun checkHideBtnVisibility(menu: Menu) { private fun checkHideBtnVisibility(menu: Menu) {
var hiddenCnt = 0 var hiddenCnt = 0
@@ -270,7 +295,10 @@ class ItemsAdapter(
private fun confirmSelection() { private fun confirmSelection() {
if (selectedKeys.isNotEmpty()) { if (selectedKeys.isNotEmpty()) {
val paths = getSelectedFileDirItems().asSequence().filter { !it.isDirectory }.map { it.path }.toMutableList() as ArrayList<String> val paths = getSelectedFileDirItems()
.asSequence()
.filter { !it.isDirectory }.map { it.path }
.toMutableList() as ArrayList<String>
if (paths.isEmpty()) { if (paths.isEmpty()) {
finishActMode() finishActMode()
} else { } else {
@@ -349,7 +377,11 @@ class ItemsAdapter(
getShortcutImage(path, drawable) { getShortcutImage(path, drawable) {
val intent = Intent(activity, SplashActivity::class.java) val intent = Intent(activity, SplashActivity::class.java)
intent.action = Intent.ACTION_VIEW intent.action = Intent.ACTION_VIEW
intent.flags = intent.flags or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NO_HISTORY intent.flags =
intent.flags or
Intent.FLAG_ACTIVITY_NEW_TASK or
Intent.FLAG_ACTIVITY_CLEAR_TASK or
Intent.FLAG_ACTIVITY_NO_HISTORY
intent.data = Uri.fromFile(File(path)) intent.data = Uri.fromFile(File(path))
val shortcut = ShortcutInfo.Builder(activity, path) val shortcut = ShortcutInfo.Builder(activity, path)
@@ -365,7 +397,8 @@ class ItemsAdapter(
private fun getShortcutImage(path: String, drawable: Drawable, callback: () -> Unit) { private fun getShortcutImage(path: String, drawable: Drawable, callback: () -> Unit) {
val appIconColor = baseConfig.appIconColor val appIconColor = baseConfig.appIconColor
(drawable as LayerDrawable).findDrawableByLayerId(R.id.shortcut_folder_background).applyColorFilter(appIconColor) (drawable as LayerDrawable).findDrawableByLayerId(R.id.shortcut_folder_background)
.applyColorFilter(appIconColor)
if (activity.getIsPathDirectory(path)) { if (activity.getIsPathDirectory(path)) {
callback() callback()
} else { } else {
@@ -386,10 +419,15 @@ class ItemsAdapter(
try { try {
val bitmap = builder.get() val bitmap = builder.get()
drawable.findDrawableByLayerId(R.id.shortcut_folder_background).applyColorFilter(0) drawable.findDrawableByLayerId(R.id.shortcut_folder_background)
.applyColorFilter(0)
drawable.setDrawableByLayerId(R.id.shortcut_folder_image, bitmap) drawable.setDrawableByLayerId(R.id.shortcut_folder_image, bitmap)
} catch (e: Exception) { } catch (e: Exception) {
val fileIcon = fileDrawables.getOrElse(path.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable }) val fileIcon = fileDrawables
.getOrElse(
key = path.substringAfterLast(".").lowercase(Locale.getDefault()),
defaultValue = { fileDrawable }
)
drawable.setDrawableByLayerId(R.id.shortcut_folder_image, fileIcon) drawable.setDrawableByLayerId(R.id.shortcut_folder_image, fileIcon)
} }
@@ -414,15 +452,19 @@ class ItemsAdapter(
} }
activity.isPathOnOTG(path) -> { activity.isPathOnOTG(path) -> {
activity.getDocumentFile(path)?.listFiles()?.filter { if (shouldShowHidden) true else !it.name!!.startsWith(".") }?.forEach { activity.getDocumentFile(path)?.listFiles()
addFileUris(it.uri.toString(), paths) ?.filter { if (shouldShowHidden) true else !it.name!!.startsWith(".") }
} ?.forEach {
addFileUris(it.uri.toString(), paths)
}
} }
else -> { else -> {
File(path).listFiles()?.filter { if (shouldShowHidden) true else !it.name.startsWith('.') }?.forEach { File(path).listFiles()
addFileUris(it.absolutePath, paths) ?.filter { if (shouldShowHidden) true else !it.name.startsWith('.') }
} ?.forEach {
addFileUris(it.absolutePath, paths)
}
} }
} }
} else { } else {
@@ -481,11 +523,21 @@ class ItemsAdapter(
if (activity.isPathOnRoot(it) || activity.isPathOnRoot(firstFile.path)) { if (activity.isPathOnRoot(it) || activity.isPathOnRoot(firstFile.path)) {
copyMoveRootItems(files, it, isCopyOperation) copyMoveRootItems(files, it, isCopyOperation)
} else { } else {
activity.copyMoveFilesTo(files, source, it, isCopyOperation, false, config.shouldShowHidden()) { activity.copyMoveFilesTo(
fileDirItems = files,
source = source,
destination = it,
isCopyOperation = isCopyOperation,
copyPhotoVideoOnly = false,
copyHidden = config.shouldShowHidden()
) {
if (!isCopyOperation) { if (!isCopyOperation) {
files.forEach { sourceFileDir -> files.forEach { sourceFileDir ->
val sourcePath = sourceFileDir.path val sourcePath = sourceFileDir.path
if (activity.isRestrictedSAFOnlyRoot(sourcePath) && activity.getDoesFilePathExist(sourcePath)) { if (
activity.isRestrictedSAFOnlyRoot(sourcePath)
&& activity.getDoesFilePathExist(sourcePath)
) {
activity.deleteFile(sourceFileDir, true) { activity.deleteFile(sourceFileDir, true) {
listener?.refreshFragment() listener?.refreshFragment()
activity.runOnUiThread { activity.runOnUiThread {
@@ -494,8 +546,12 @@ class ItemsAdapter(
} }
} else { } else {
val sourceFile = File(sourcePath) val sourceFile = File(sourcePath)
if (activity.getDoesFilePathExist(source) && activity.getIsPathDirectory(source) && if (
sourceFile.list()?.isEmpty() == true && sourceFile.getProperSize(true) == 0L && sourceFile.getFileCount(true) == 0 activity.getDoesFilePathExist(source)
&& activity.getIsPathDirectory(source)
&& sourceFile.list()?.isEmpty() == true
&& sourceFile.getProperSize(true) == 0L
&& sourceFile.getFileCount(true) == 0
) { ) {
val sourceFolder = sourceFile.toFileDirItem(activity) val sourceFolder = sourceFile.toFileDirItem(activity)
activity.deleteFile(sourceFolder, true) { activity.deleteFile(sourceFolder, true) {
@@ -519,7 +575,11 @@ class ItemsAdapter(
} }
} }
private fun copyMoveRootItems(files: ArrayList<FileDirItem>, destinationPath: String, isCopyOperation: Boolean) { private fun copyMoveRootItems(
files: ArrayList<FileDirItem>,
destinationPath: String,
isCopyOperation: Boolean
) {
activity.toast(R.string.copying) activity.toast(R.string.copying)
ensureBackgroundThread { ensureBackgroundThread {
val fileCnt = files.size val fileCnt = files.size
@@ -585,7 +645,11 @@ class ItemsAdapter(
return@handleSAFDialog return@handleSAFDialog
} }
val paths = getSelectedFileDirItems().asSequence().map { it.path }.filter { it.isZipFile() }.toList() val paths = getSelectedFileDirItems()
.asSequence()
.map { it.path }
.filter { it.isZipFile() }
.toList()
ensureBackgroundThread { ensureBackgroundThread {
tryDecompressingPaths(paths) { success -> tryDecompressingPaths(paths) { success ->
activity.runOnUiThread { activity.runOnUiThread {
@@ -602,15 +666,28 @@ class ItemsAdapter(
} }
} }
private fun tryDecompressingPaths(sourcePaths: List<String>, callback: (success: Boolean) -> Unit) { private fun tryDecompressingPaths(
sourcePaths: List<String>,
callback: (success: Boolean) -> Unit
) {
sourcePaths.forEach { path -> sourcePaths.forEach { path ->
ZipInputStream(BufferedInputStream(activity.getFileInputStreamSync(path))).use { zipInputStream -> ZipInputStream(BufferedInputStream(activity.getFileInputStreamSync(path))).use { zipInputStream ->
try { try {
val fileDirItems = ArrayList<FileDirItem>() val fileDirItems = ArrayList<FileDirItem>()
var entry = zipInputStream.nextEntry var entry = zipInputStream.nextEntry
while (entry != null) { while (entry != null) {
val currPath = if (entry.isDirectory) path else "${path.getParentPath().trimEnd('/')}/${entry.fileName}" val currPath = if (entry.isDirectory) {
val fileDirItem = FileDirItem(currPath, entry.fileName, entry.isDirectory, 0, entry.uncompressedSize) path
} else {
"${path.getParentPath().trimEnd('/')}/${entry.fileName}"
}
val fileDirItem = FileDirItem(
path = currPath,
name = entry.fileName,
isDirectory = entry.isDirectory,
children = 0,
size = entry.uncompressedSize
)
fileDirItems.add(fileDirItem) fileDirItems.add(fileDirItem)
entry = zipInputStream.nextEntry entry = zipInputStream.nextEntry
} }
@@ -635,9 +712,14 @@ class ItemsAdapter(
} }
} }
private fun decompressPaths(paths: List<String>, conflictResolutions: LinkedHashMap<String, Int>, callback: (success: Boolean) -> Unit) { private fun decompressPaths(
paths: List<String>,
conflictResolutions: LinkedHashMap<String, Int>,
callback: (success: Boolean) -> Unit
) {
paths.forEach { path -> paths.forEach { path ->
val zipInputStream = ZipInputStream(BufferedInputStream(activity.getFileInputStreamSync(path))) val zipInputStream =
ZipInputStream(BufferedInputStream(activity.getFileInputStreamSync(path)))
zipInputStream.use { zipInputStream.use {
try { try {
var entry = zipInputStream.nextEntry var entry = zipInputStream.nextEntry
@@ -650,7 +732,11 @@ class ItemsAdapter(
val resolution = getConflictResolution(conflictResolutions, newPath) val resolution = getConflictResolution(conflictResolutions, newPath)
val doesPathExist = activity.getDoesFilePathExist(newPath) val doesPathExist = activity.getDoesFilePathExist(newPath)
if (doesPathExist && resolution == CONFLICT_OVERWRITE) { if (doesPathExist && resolution == CONFLICT_OVERWRITE) {
val fileDirItem = FileDirItem(newPath, newPath.getFilenameFromPath(), entry.isDirectory) val fileDirItem = FileDirItem(
path = newPath,
name = newPath.getFilenameFromPath(),
isDirectory = entry.isDirectory
)
if (activity.getIsPathDirectory(path)) { if (activity.getIsPathDirectory(path)) {
activity.deleteFolderBg(fileDirItem, false) { activity.deleteFolderBg(fileDirItem, false) {
if (it) { if (it) {
@@ -683,21 +769,30 @@ class ItemsAdapter(
} }
} }
private fun extractEntry(newPath: String, entry: LocalFileHeader, zipInputStream: ZipInputStream) { private fun extractEntry(
newPath: String,
entry: LocalFileHeader,
zipInputStream: ZipInputStream
) {
if (entry.isDirectory) { if (entry.isDirectory) {
if (!activity.createDirectorySync(newPath) && !activity.getDoesFilePathExist(newPath)) { if (!activity.createDirectorySync(newPath) && !activity.getDoesFilePathExist(newPath)) {
val error = String.format(activity.getString(R.string.could_not_create_file), newPath) val error =
String.format(activity.getString(R.string.could_not_create_file), newPath)
activity.showErrorToast(error) activity.showErrorToast(error)
} }
} else { } else {
val fos = activity.getFileOutputStreamSync(newPath, newPath.getMimeType()) val fos = activity.getFileOutputStreamSync(newPath, newPath.getMimeType())
if (fos != null) { if (fos != null) {
zipInputStream.copyTo(fos) zipInputStream.copyTo(fos)
File(newPath).setLastModified(entry)
} }
} }
} }
private fun getConflictResolution(conflictResolutions: LinkedHashMap<String, Int>, path: String): Int { private fun getConflictResolution(
conflictResolutions: LinkedHashMap<String, Int>,
path: String
): Int {
return if (conflictResolutions.size == 1 && conflictResolutions.containsKey("")) { return if (conflictResolutions.size == 1 && conflictResolutions.containsKey("")) {
conflictResolutions[""]!! conflictResolutions[""]!!
} else if (conflictResolutions.containsKey(path)) { } else if (conflictResolutions.containsKey(path)) {
@@ -708,15 +803,21 @@ class ItemsAdapter(
} }
@SuppressLint("NewApi") @SuppressLint("NewApi")
private fun compressPaths(sourcePaths: List<String>, targetPath: String, password: String? = null): Boolean { private fun compressPaths(
sourcePaths: List<String>,
targetPath: String,
password: String? = null
): Boolean {
val queue = LinkedList<String>() val queue = LinkedList<String>()
val fos = activity.getFileOutputStreamSync(targetPath, "application/zip") ?: return false val fos = activity.getFileOutputStreamSync(targetPath, "application/zip") ?: return false
val zout = password?.let { ZipOutputStream(fos, password.toCharArray()) } ?: ZipOutputStream(fos) val zout =
password?.let { ZipOutputStream(fos, password.toCharArray()) } ?: ZipOutputStream(fos)
var res: Closeable = fos var res: Closeable = fos
fun zipEntry(name: String) = ZipParameters().also { fun zipEntry(name: String, lastModified: Long) = ZipParameters().also {
it.fileNameInZip = name it.fileNameInZip = name
it.lastModifiedFileTime = lastModified
if (password != null) { if (password != null) {
it.isEncryptFiles = true it.isEncryptFiles = true
it.encryptionMethod = EncryptionMethod.AES it.encryptionMethod = EncryptionMethod.AES
@@ -732,9 +833,11 @@ class ItemsAdapter(
queue.push(mainFilePath) queue.push(mainFilePath)
if (activity.getIsPathDirectory(mainFilePath)) { if (activity.getIsPathDirectory(mainFilePath)) {
name = "${mainFilePath.getFilenameFromPath()}/" name = "${mainFilePath.getFilenameFromPath()}/"
val dirModified = File(mainFilePath).lastModified()
zout.putNextEntry( zout.putNextEntry(
ZipParameters().also { ZipParameters().also {
it.fileNameInZip = name it.fileNameInZip = name
it.lastModifiedFileTime = dirModified
} }
) )
} }
@@ -749,9 +852,9 @@ class ItemsAdapter(
if (activity.getIsPathDirectory(file.path)) { if (activity.getIsPathDirectory(file.path)) {
queue.push(file.path) queue.push(file.path)
name = "${name.trimEnd('/')}/" name = "${name.trimEnd('/')}/"
zout.putNextEntry(zipEntry(name)) zout.putNextEntry(zipEntry(name, file.modified))
} else { } else {
zout.putNextEntry(zipEntry(name)) zout.putNextEntry(zipEntry(name, file.modified))
activity.getFileInputStreamSync(file.path)!!.copyTo(zout) activity.getFileInputStreamSync(file.path)!!.copyTo(zout)
zout.closeEntry() zout.closeEntry()
} }
@@ -764,9 +867,9 @@ class ItemsAdapter(
if (activity.getIsPathDirectory(file.absolutePath)) { if (activity.getIsPathDirectory(file.absolutePath)) {
queue.push(file.absolutePath) queue.push(file.absolutePath)
name = "${name.trimEnd('/')}/" name = "${name.trimEnd('/')}/"
zout.putNextEntry(zipEntry(name)) zout.putNextEntry(zipEntry(name, file.lastModified()))
} else { } else {
zout.putNextEntry(zipEntry(name)) zout.putNextEntry(zipEntry(name, file.lastModified()))
activity.getFileInputStreamSync(file.path)!!.copyTo(zout) activity.getFileInputStreamSync(file.path)!!.copyTo(zout)
zout.closeEntry() zout.closeEntry()
} }
@@ -774,8 +877,14 @@ class ItemsAdapter(
} }
} else { } else {
name = if (base == currentPath) currentPath.getFilenameFromPath() else mainFilePath.relativizeWith(base) name =
zout.putNextEntry(zipEntry(name)) if (base == currentPath) {
currentPath.getFilenameFromPath()
} else {
mainFilePath.relativizeWith(base)
}
val fileModified = File(mainFilePath).lastModified()
zout.putNextEntry(zipEntry(name, fileModified))
activity.getFileInputStreamSync(mainFilePath)!!.copyTo(zout) activity.getFileInputStreamSync(mainFilePath)!!.copyTo(zout)
zout.closeEntry() zout.closeEntry()
} }
@@ -849,7 +958,11 @@ class ItemsAdapter(
private fun getFirstSelectedItemPath() = getSelectedFileDirItems().first().path private fun getFirstSelectedItemPath() = getSelectedFileDirItems().first().path
private fun getSelectedFileDirItems() = listItems.filter { selectedKeys.contains(it.path.hashCode()) } as ArrayList<FileDirItem> private fun getSelectedFileDirItems(): ArrayList<FileDirItem> {
return listItems.filter {
selectedKeys.contains(it.path.hashCode())
} as ArrayList<FileDirItem>
}
fun updateItems(newItems: ArrayList<ListItem>, highlightText: String = "") { fun updateItems(newItems: ArrayList<ListItem>, highlightText: String = "") {
if (newItems.hashCode() != currentItemsHash) { if (newItems.hashCode() != currentItemsHash) {
@@ -895,7 +1008,8 @@ class ItemsAdapter(
override fun onViewRecycled(holder: ViewHolder) { override fun onViewRecycled(holder: ViewHolder) {
super.onViewRecycled(holder) super.onViewRecycled(holder)
if (!activity.isDestroyed && !activity.isFinishing) { if (!activity.isDestroyed && !activity.isFinishing) {
val icon = Binding.getByItemViewType(holder.itemViewType, isListViewType).bind(holder.itemView).itemIcon val icon = Binding.getByItemViewType(holder.itemViewType, isListViewType)
.bind(holder.itemView).itemIcon
if (icon != null) { if (icon != null) {
Glide.with(activity).clear(icon) Glide.with(activity).clear(icon)
} }
@@ -907,16 +1021,35 @@ class ItemsAdapter(
binding.apply { binding.apply {
if (listItem.isSectionTitle) { if (listItem.isSectionTitle) {
itemIcon?.setImageDrawable(folderDrawable) itemIcon?.setImageDrawable(folderDrawable)
itemSection?.text = if (textToHighlight.isEmpty()) listItem.mName else listItem.mName.highlightTextPart(textToHighlight, properPrimaryColor) itemSection?.text =
if (textToHighlight.isEmpty()) {
listItem.mName
} else {
listItem.mName.highlightTextPart(
textToHighlight = textToHighlight,
color = properPrimaryColor
)
}
itemSection?.setTextColor(textColor) itemSection?.setTextColor(textColor)
itemSection?.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize) itemSection?.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)
} else if (!listItem.isGridTypeDivider) { } else if (!listItem.isGridTypeDivider) {
root.setupViewBackground(activity) root.setupViewBackground(activity)
itemFrame.isSelected = isSelected itemFrame.isSelected = isSelected
val fileName = listItem.name val fileName = listItem.name
itemName?.text = if (textToHighlight.isEmpty()) fileName else fileName.highlightTextPart(textToHighlight, properPrimaryColor) itemName?.text =
if (textToHighlight.isEmpty()) {
fileName
} else {
fileName.highlightTextPart(
textToHighlight = textToHighlight,
color = properPrimaryColor
)
}
itemName?.setTextColor(textColor) itemName?.setTextColor(textColor)
itemName?.setTextSize(TypedValue.COMPLEX_UNIT_PX, if (isListViewType) fontSize else smallerFontSize) itemName?.setTextSize(
TypedValue.COMPLEX_UNIT_PX,
if (isListViewType) fontSize else smallerFontSize
)
itemDetails?.setTextColor(textColor) itemDetails?.setTextColor(textColor)
itemDetails?.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize) itemDetails?.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)
@@ -945,7 +1078,10 @@ class ItemsAdapter(
itemDate?.beVisible() itemDate?.beVisible()
itemDate?.text = listItem.modified.formatDate(activity, dateFormat, timeFormat) itemDate?.text = listItem.modified.formatDate(activity, dateFormat, timeFormat)
val drawable = fileDrawables.getOrElse(fileName.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable }) val drawable = fileDrawables.getOrElse(
key = fileName.substringAfterLast(".").lowercase(Locale.getDefault()),
defaultValue = { fileDrawable }
)
val options = RequestOptions() val options = RequestOptions()
.signature(listItem.getKey()) .signature(listItem.getKey())
.diskCacheStrategy(DiskCacheStrategy.RESOURCE) .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
@@ -970,12 +1106,16 @@ class ItemsAdapter(
return activity.resources.getQuantityString(R.plurals.items, children, children) return activity.resources.getQuantityString(R.plurals.items, children, children)
} }
private fun getOTGPublicPath(itemToLoad: String) = private fun getOTGPublicPath(itemToLoad: String): String {
"${baseConfig.OTGTreeUri}/document/${baseConfig.OTGPartition}%3A${itemToLoad.substring(baseConfig.OTGPath.length).replace("/", "%2F")}" return "${baseConfig.OTGTreeUri}/document/${baseConfig.OTGPartition}%3A${
itemToLoad.substring(baseConfig.OTGPath.length).replace("/", "%2F")
}"
}
private fun getImagePathToLoad(path: String): Any { private fun getImagePathToLoad(path: String): Any {
var itemToLoad = if (path.endsWith(".apk", true)) { var itemToLoad = if (path.endsWith(".apk", true)) {
val packageInfo = activity.packageManager.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES) val packageInfo =
activity.packageManager.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES)
if (packageInfo != null) { if (packageInfo != null) {
val appInfo = packageInfo.applicationInfo val appInfo = packageInfo.applicationInfo
appInfo.sourceDir = path appInfo.sourceDir = path
@@ -998,13 +1138,16 @@ class ItemsAdapter(
} }
fun initDrawables() { fun initDrawables() {
folderDrawable = resources.getColoredDrawableWithColor(R.drawable.ic_folder_vector, properPrimaryColor) folderDrawable =
resources.getColoredDrawableWithColor(R.drawable.ic_folder_vector, properPrimaryColor)
folderDrawable.alpha = 180 folderDrawable.alpha = 180
fileDrawable = resources.getDrawable(R.drawable.ic_file_generic) fileDrawable = resources.getDrawable(R.drawable.ic_file_generic)
fileDrawables = getFilePlaceholderDrawables(activity) fileDrawables = getFilePlaceholderDrawables(activity)
} }
override fun onChange(position: Int) = listItems.getOrNull(position)?.getBubbleText(activity, dateFormat, timeFormat) ?: "" override fun onChange(position: Int): String {
return listItems.getOrNull(position)?.getBubbleText(activity, dateFormat, timeFormat) ?: ""
}
private sealed interface Binding { private sealed interface Binding {
companion object { companion object {
@@ -1025,12 +1168,23 @@ class ItemsAdapter(
} }
} }
fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding fun inflate(
layoutInflater: LayoutInflater,
viewGroup: ViewGroup,
attachToRoot: Boolean
): ItemViewBinding
fun bind(view: View): ItemViewBinding fun bind(view: View): ItemViewBinding
data object ItemSection : Binding { data object ItemSection : Binding {
override fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding { override fun inflate(
return ItemSectionBindingAdapter(ItemSectionBinding.inflate(layoutInflater, viewGroup, attachToRoot)) layoutInflater: LayoutInflater,
viewGroup: ViewGroup,
attachToRoot: Boolean
): ItemViewBinding {
return ItemSectionBindingAdapter(
ItemSectionBinding.inflate(layoutInflater, viewGroup, attachToRoot)
)
} }
override fun bind(view: View): ItemViewBinding { override fun bind(view: View): ItemViewBinding {
@@ -1039,8 +1193,14 @@ class ItemsAdapter(
} }
data object ItemEmpty : Binding { data object ItemEmpty : Binding {
override fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding { override fun inflate(
return ItemEmptyBindingAdapter(ItemEmptyBinding.inflate(layoutInflater, viewGroup, attachToRoot)) layoutInflater: LayoutInflater,
viewGroup: ViewGroup,
attachToRoot: Boolean
): ItemViewBinding {
return ItemEmptyBindingAdapter(
ItemEmptyBinding.inflate(layoutInflater, viewGroup, attachToRoot)
)
} }
override fun bind(view: View): ItemViewBinding { override fun bind(view: View): ItemViewBinding {
@@ -1049,8 +1209,14 @@ class ItemsAdapter(
} }
data object ItemFileDirList : Binding { data object ItemFileDirList : Binding {
override fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding { override fun inflate(
return ItemFileDirListBindingAdapter(ItemFileDirListBinding.inflate(layoutInflater, viewGroup, attachToRoot)) layoutInflater: LayoutInflater,
viewGroup: ViewGroup,
attachToRoot: Boolean
): ItemViewBinding {
return ItemFileDirListBindingAdapter(
ItemFileDirListBinding.inflate(layoutInflater, viewGroup, attachToRoot)
)
} }
override fun bind(view: View): ItemViewBinding { override fun bind(view: View): ItemViewBinding {
@@ -1059,8 +1225,14 @@ class ItemsAdapter(
} }
data object ItemDirGrid : Binding { data object ItemDirGrid : Binding {
override fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding { override fun inflate(
return ItemDirGridBindingAdapter(ItemDirGridBinding.inflate(layoutInflater, viewGroup, attachToRoot)) layoutInflater: LayoutInflater,
viewGroup: ViewGroup,
attachToRoot: Boolean
): ItemViewBinding {
return ItemDirGridBindingAdapter(
ItemDirGridBinding.inflate(layoutInflater, viewGroup, attachToRoot)
)
} }
override fun bind(view: View): ItemViewBinding { override fun bind(view: View): ItemViewBinding {
@@ -1069,8 +1241,14 @@ class ItemsAdapter(
} }
data object ItemFileGrid : Binding { data object ItemFileGrid : Binding {
override fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding { override fun inflate(
return ItemFileGridBindingAdapter(ItemFileGridBinding.inflate(layoutInflater, viewGroup, attachToRoot)) layoutInflater: LayoutInflater,
viewGroup: ViewGroup,
attachToRoot: Boolean
): ItemViewBinding {
return ItemFileGridBindingAdapter(
ItemFileGridBinding.inflate(layoutInflater, viewGroup, attachToRoot)
)
} }
override fun bind(view: View): ItemViewBinding { override fun bind(view: View): ItemViewBinding {
@@ -1112,7 +1290,9 @@ class ItemsAdapter(
override fun getRoot(): View = binding.root override fun getRoot(): View = binding.root
} }
private class ItemFileDirListBindingAdapter(val binding: ItemFileDirListBinding) : ItemViewBinding { private class ItemFileDirListBindingAdapter(
val binding: ItemFileDirListBinding
) : ItemViewBinding {
override val itemFrame: FrameLayout = binding.itemFrame override val itemFrame: FrameLayout = binding.itemFrame
override val itemName: TextView = binding.itemName override val itemName: TextView = binding.itemName
override val itemIcon: ImageView = binding.itemIcon override val itemIcon: ImageView = binding.itemIcon
@@ -22,7 +22,9 @@ class ViewPagerAdapter(val activity: SimpleActivity, val tabsToShow: ArrayList<I
(view as MyViewPagerFragment<*>).apply { (view as MyViewPagerFragment<*>).apply {
val isPickRingtoneIntent = activity.intent.action == RingtoneManager.ACTION_RINGTONE_PICKER val isPickRingtoneIntent = activity.intent.action == RingtoneManager.ACTION_RINGTONE_PICKER
val isGetContentIntent = activity.intent.action == Intent.ACTION_GET_CONTENT || activity.intent.action == Intent.ACTION_PICK val isGetContentIntent = activity.intent.action == Intent.ACTION_GET_CONTENT
|| activity.intent.action == Intent.ACTION_PICK
|| activity.intent.action == Intent.ACTION_OPEN_DOCUMENT
val isCreateDocumentIntent = activity.intent.action == Intent.ACTION_CREATE_DOCUMENT val isCreateDocumentIntent = activity.intent.action == Intent.ACTION_CREATE_DOCUMENT
val allowPickingMultipleIntent = activity.intent.getBooleanExtra(Intent.EXTRA_ALLOW_MULTIPLE, false) val allowPickingMultipleIntent = activity.intent.getBooleanExtra(Intent.EXTRA_ALLOW_MULTIPLE, false)
val getContentMimeType = if (isGetContentIntent) { val getContentMimeType = if (isGetContentIntent) {
@@ -0,0 +1,15 @@
package org.fossify.filemanager.extensions
import net.lingala.zip4j.model.LocalFileHeader
import java.io.File
fun File.setLastModified(localFileHeader: LocalFileHeader) {
setLastModified(localFileHeader.lastModifiedOrCurrentTimeMillis)
}
private val LocalFileHeader.lastModifiedOrCurrentTimeMillis
get() = if (lastModifiedTimeEpoch == 0L) {
System.currentTimeMillis()
} else {
lastModifiedTimeEpoch
}
@@ -95,7 +95,6 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
} }
totalSpace.text = String.format(context.getString(R.string.total_storage), "…") totalSpace.text = String.format(context.getString(R.string.total_storage), "…")
getSizes(volumeName)
if (volumeNames.size > 1) { if (volumeNames.size > 1) {
root.children.forEach { it.beGone() } root.children.forEach { it.beGone() }
@@ -155,8 +154,7 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
val tealColor = context.resources.getColor(R.color.md_teal_700) val tealColor = context.resources.getColor(R.color.md_teal_700)
val pinkColor = context.resources.getColor(R.color.md_pink_700) val pinkColor = context.resources.getColor(R.color.md_pink_700)
volumes.entries.forEach { (it, volumeBinding) -> volumes.values.forEach { volumeBinding ->
getSizes(it)
volumeBinding.apply { volumeBinding.apply {
mainStorageUsageProgressbar.setIndicatorColor(properPrimaryColor) mainStorageUsageProgressbar.setIndicatorColor(properPrimaryColor)
mainStorageUsageProgressbar.trackColor = properPrimaryColor.adjustAlpha(LOWER_ALPHA) mainStorageUsageProgressbar.trackColor = properPrimaryColor.adjustAlpha(LOWER_ALPHA)
@@ -335,6 +333,7 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
freeSpaceValue.text = freeStorageSpace.formatSizeThousand() freeSpaceValue.text = freeStorageSpace.formatSizeThousand()
totalSpace.text = String.format(context.getString(R.string.total_storage), totalStorageSpace.formatSizeThousand()) totalSpace.text = String.format(context.getString(R.string.total_storage), totalStorageSpace.formatSizeThousand())
freeSpaceLabel.beVisible() freeSpaceLabel.beVisible()
getSizes(volumeName)
} }
} }
} }
@@ -365,7 +364,6 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
} else { } else {
showProgressBar() showProgressBar()
ensureBackgroundThread { ensureBackgroundThread {
val start = System.currentTimeMillis()
val filtered = allDeviceListItems.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList<ListItem> val filtered = allDeviceListItems.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList<ListItem>
if (lastSearchedText != text) { if (lastSearchedText != text) {
return@ensureBackgroundThread return@ensureBackgroundThread
@@ -63,6 +63,11 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/general_settings" /> android:text="@string/general_settings" />
<org.fossify.commons.views.PurchaseThankYouItem
android:id="@+id/settings_purchase_thank_you_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<RelativeLayout <RelativeLayout
android:id="@+id/settings_use_english_holder" android:id="@+id/settings_use_english_holder"
style="@style/SettingsHolderSwitchStyle" style="@style/SettingsHolderSwitchStyle"
+1
View File
@@ -0,0 +1 @@
unqualifiedResLocale=en-US
+29 -20
View File
@@ -2,37 +2,46 @@
<resources> <resources>
<string name="app_launcher_name">مدير الملفات</string> <string name="app_launcher_name">مدير الملفات</string>
<string name="press_back_again">اضغط مرة أخرى للخروج</string> <string name="press_back_again">اضغط مرة أخرى للخروج</string>
<string name="go_to_home_folder">الذهاب الى الرئيسية</string> <string name="go_to_home_folder">اذهب إلى المجلد المنزل</string>
<string name="set_as_home_folder">تعيين كمجلد رئيسي</string> <string name="set_as_home_folder">عيّن كمجلد المنزل</string>
<string name="home_folder_updated">تم تحديث المجلد الرئيسي</string> <string name="home_folder_updated">حُدِّث مجلد المنزل</string>
<string name="copy_path">نسخ المسار الى الحافظة</string> <string name="copy_path">انسخ المسار إلى الحافظة</string>
<string name="path_copied">تم نسخ المسار</string> <string name="path_copied">نُسخ المسار</string>
<string name="select_audio_file">الرجاء تحديد ملف صوتي</string> <string name="select_audio_file">الرجاء تحديد ملف صوتي</string>
<string name="search_folder">مجلد البحث</string> <string name="search_folder">مجلد البحث</string>
<string name="rooted_device_only">تعمل هذه العملية فقط على الأجهزة المتجذرة</string> <string name="rooted_device_only">تعمل هذه العملية فقط على الأجهزة المتجذرة</string>
<string name="recents">الأحدث</string> <string name="recents">الأحدث</string>
<string name="show_recents">إظهار الأحدث</string> <string name="show_recents">أظهر الأحدث</string>
<string name="invert_colors">عكس الألوان</string> <string name="invert_colors">اعكس الألوان</string>
<string name="compress">ضغط</string> <string name="compress">اضغط</string>
<string name="decompress">فك الضغط</string> <string name="decompress">فك الضغط</string>
<string name="compress_as">ضغط كا</string> <string name="compress_as">اضغط كَ</string>
<string name="compressing">ضغط…</string> <string name="compressing">جار الضغط…</string>
<string name="decompressing">فك الضغط…</string> <string name="decompressing">جارِ فك الضغط…</string>
<string name="compression_successful">نجح الضغط</string> <string name="compression_successful">نجح الضغط</string>
<string name="decompression_successful">نجح التفكيك</string> <string name="decompression_successful">نجح فك ضغط</string>
<string name="compressing_failed">أخفق الضغط</string> <string name="compressing_failed">فشل الضغط</string>
<string name="decompressing_failed">أخفق إلغاء الضغط</string> <string name="decompressing_failed">فشل فك الضغط</string>
<string name="manage_favorites">إدارة المفضلة</string> <string name="manage_favorites">أدر المفضلة</string>
<string name="go_to_favorite">الذهاب الى المفضلة</string> <string name="go_to_favorite">اذهب الى المفضلة</string>
<string name="favorites_activity_placeholder">يمكنك إضافة المجلدات المستخدمة بشكل متكرر إلى المفضلة لسهولة الوصول إليها من أي مكان.</string> <string name="favorites_activity_placeholder">يمكنك إضافة المجلدات المستخدمة بشكل متكرر إلى المفضلة لسهولة الوصول إليها من أي مكان.</string>
<string name="file_editor">محرر الملفات</string> <string name="file_editor">محرّر الملفات</string>
<string name="storage_analysis">تحليل التخزين</string> <string name="storage_analysis">تحليل التخزين</string>
<string name="images">الصور</string> <string name="images">الصور</string>
<string name="videos">الفيديوهات</string> <string name="videos">الفيديوهات</string>
<string name="archives">الأرشيف</string> <string name="archives">الأرشيف</string>
<string name="others">الاخرين</string> <string name="others">الآخرين</string>
<string name="total_storage">إجمالي مساحة التخزين: %s</string> <string name="total_storage">إجمالي مساحة التخزين: %s</string>
<string name="enable_root_access">تفعيل الدخول الى مسار الروت</string> <string name="enable_root_access">فعّل وصول الجذر (root)</string>
<string name="press_back_twice">تتطلب الضغط على رجوع مرتين لمغادرة التطبيق</string> <string name="press_back_twice">يتطلب النقر على رجوع مرتين لمغادرة التطبيق</string>
<string name="audio">صوت</string> <string name="audio">صوت</string>
<string name="documents">المستندات</string>
<string name="downloads">التنزيلات</string>
<string name="storage_free">خالية</string>
<string name="open_as">افتح كـ</string>
<string name="image_file">ملف صورة</string>
<string name="text_file">ملف نصي</string>
<string name="audio_file">ملف صوتي</string>
<string name="video_file">ملف فيديو</string>
<string name="other_file">ملف آخر</string>
</resources> </resources>
+2 -2
View File
@@ -34,7 +34,7 @@
<string name="file_editor">Файлов редактор</string> <string name="file_editor">Файлов редактор</string>
<string name="storage_analysis">Анализ на съхранението</string> <string name="storage_analysis">Анализ на съхранението</string>
<string name="images">Изображения</string> <string name="images">Изображения</string>
<string name="videos">Видеоклипове</string> <string name="videos">Видео</string>
<string name="archives">Архиви</string> <string name="archives">Архиви</string>
<string name="others">Други</string> <string name="others">Други</string>
<string name="total_storage">Общо място за съхранение: %s</string> <string name="total_storage">Общо място за съхранение: %s</string>
@@ -44,4 +44,4 @@
<string name="storage_free">свободно</string> <string name="storage_free">свободно</string>
<string name="documents">Документи</string> <string name="documents">Документи</string>
<string name="audio">Аудиофайлове</string> <string name="audio">Аудиофайлове</string>
</resources> </resources>
+3 -1
View File
@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources></resources> <resources>
<string name="app_launcher_name">File Manager</string>
</resources>
+5 -1
View File
@@ -1,2 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources></resources> <resources>
<string name="app_launcher_name">Gestor de archivos</string>
<string name="press_back_again">Presione hacia atrás nuevamente para salir</string>
<string name="go_to_home_folder">Ir a la carpeta de inicio</string>
</resources>
+1 -1
View File
@@ -39,7 +39,7 @@
<string name="downloads">Lataukset</string> <string name="downloads">Lataukset</string>
<string name="archives">Arkistot</string> <string name="archives">Arkistot</string>
<string name="others">Muut</string> <string name="others">Muut</string>
<string name="storage_free">ilmainen</string> <string name="storage_free">vapaana</string>
<string name="total_storage">Tallennustila: %s</string> <string name="total_storage">Tallennustila: %s</string>
<string name="enable_root_access">Ota käyttöön root-ominaisuudet</string> <string name="enable_root_access">Ota käyttöön root-ominaisuudet</string>
<string name="press_back_twice">Ota käyttöön sovelluksesta poistuminen kahdella takaisin-painikkeen painalluksella</string> <string name="press_back_twice">Ota käyttöön sovelluksesta poistuminen kahdella takaisin-painikkeen painalluksella</string>
+2 -2
View File
@@ -26,8 +26,8 @@
<string name="decompressing">Décompression…</string> <string name="decompressing">Décompression…</string>
<string name="compression_successful">Compression réussie</string> <string name="compression_successful">Compression réussie</string>
<string name="decompression_successful">Décompression réussie</string> <string name="decompression_successful">Décompression réussie</string>
<string name="compressing_failed">Compression ratée</string> <string name="compressing_failed">Échec de la compression</string>
<string name="decompressing_failed">Décompression ratée</string> <string name="decompressing_failed">Échec de la décompression</string>
<string name="manage_favorites">Gérer les favoris</string> <string name="manage_favorites">Gérer les favoris</string>
<string name="go_to_favorite">Aller au favori</string> <string name="go_to_favorite">Aller au favori</string>
<string name="favorites_activity_placeholder">Vous pouvez ajouter des dossiers souvent utilisés comme favoris pour y avoir accès rapidement depuis n\'importe où.</string> <string name="favorites_activity_placeholder">Vous pouvez ajouter des dossiers souvent utilisés comme favoris pour y avoir accès rapidement depuis n\'importe où.</string>
+16 -16
View File
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="app_launcher_name">מנהל קבצים</string> <string name="app_launcher_name">מנהל הקבצים</string>
<string name="press_back_again">לחץ שוב אחורה כדי לצאת</string> <string name="press_back_again">ליציאה יש ללחוץ אחורה פעם נוספת</string>
<string name="go_to_home_folder">עבור לתיקיית הבית</string> <string name="go_to_home_folder">מעבר לתיקיית הבית</string>
<string name="set_as_home_folder">הגדר כתיקיית בית</string> <string name="set_as_home_folder">הגדר כתיקיית בית</string>
<string name="home_folder_updated">תיקיית הבית עודכנה</string> <string name="home_folder_updated">תיקיית הבית עודכנה</string>
<string name="copy_path">העתק נתיב ללוח</string> <string name="copy_path">העתק נתיב ללוח</string>
<string name="path_copied">הנתיב הועתק</string> <string name="path_copied">הנתיב הועתק</string>
<string name="select_audio_file">אנא בחר קובץ שמע</string> <string name="select_audio_file">אנא בחר קובץ שמע</string>
<string name="search_folder">‪חיפוש תיקייה</string> <string name="search_folder">‪חיפוש תיקייה</string>
<string name="rooted_device_only">פעולה זו פועלת רק במכשירים עם רוט</string> <string name="rooted_device_only">פעולה זו עובדת רק במכשירים עם רוט</string>
<string name="recents">אחרונים</string> <string name="recents">אחרונים</string>
<string name="show_recents">הצג את האחרונים</string> <string name="show_recents">הצג אחרונים</string>
<string name="invert_colors">הפוך צבעים</string> <string name="invert_colors">הפוך צבעים</string>
<string name="open_as">פתח כ</string> <string name="open_as">פתח כ</string>
<string name="text_file">קובץ טקסט</string> <string name="text_file">קובץ טקסט</string>
@@ -19,29 +19,29 @@
<string name="audio_file">קובץ שמע</string> <string name="audio_file">קובץ שמע</string>
<string name="video_file">קובץ וידיאו</string> <string name="video_file">קובץ וידיאו</string>
<string name="other_file">קובץ אחר</string> <string name="other_file">קובץ אחר</string>
<string name="compress">לדחוס</string> <string name="compress">דחיסה</string>
<string name="decompress">לבטל דחיסה</string> <string name="decompress">חילוץ</string>
<string name="compress_as">דחוס כ</string> <string name="compress_as">דחיסה כ</string>
<string name="compressing">דוחס…</string> <string name="compressing">דוחס…</string>
<string name="decompressing">משחרר דחיסה…</string> <string name="decompressing">מחלץ…</string>
<string name="compression_successful">הדחיסה הצליחה</string> <string name="compression_successful">הדחיסה הצליחה</string>
<string name="decompression_successful">שחרור הדחיסה הצליח</string> <string name="decompression_successful">החילוץ הצליח</string>
<string name="compressing_failed">הדחיסה נכשלה</string> <string name="compressing_failed">הדחיסה נכשלה</string>
<string name="decompressing_failed">פעולת שחרור הדחיסה נכשל</string> <string name="decompressing_failed">החילוץ נכשל</string>
<string name="manage_favorites">נהל מועדפים</string> <string name="manage_favorites">נהל מועדפים</string>
<string name="go_to_favorite">עבור למועדפים</string> <string name="go_to_favorite">עבור למועדפים</string>
<string name="favorites_activity_placeholder">‪אתה יכול להוסיף תיקיות בשימוש תכוף למועדפים לגישה נוחה מכל מקום.</string> <string name="favorites_activity_placeholder">באפשרותך להוסיף תיקיות בשימוש תכוף למועדפים לגישה נוחה מכל מקום.</string>
<string name="file_editor">עורך הקבצים</string> <string name="file_editor">עורך הקבצים</string>
<string name="storage_analysis">ניתוח אחסון</string> <string name="storage_analysis">ניתוח אחסון</string>
<string name="images">תמונות</string> <string name="images">תמונות</string>
<string name="videos">וידיאו</string> <string name="videos">סרטונים</string>
<string name="audio">אודיו</string> <string name="audio">שמע</string>
<string name="documents">מסמכים</string> <string name="documents">מסמכים</string>
<string name="downloads">הורדות</string> <string name="downloads">הורדות</string>
<string name="archives">ארכיון</string> <string name="archives">ארכיון</string>
<string name="others">אחרים</string> <string name="others">אחרים</string>
<string name="storage_free">חינם</string> <string name="storage_free">חופשי</string>
<string name="total_storage">שטח אחסון כולל: %s</string> <string name="total_storage">שטח אחסון כולל: %s</string>
<string name="enable_root_access">אפשר גישת שורש</string> <string name="enable_root_access">אפשר גישת שורש</string>
<string name="press_back_twice">דרוש לחיצה על חזרה פעמיים כדי לצאת מהאפליקציה דרוש לחיצה על חזרה פעמיים כדי לצאת מהאפליקציה</string> <string name="press_back_twice">דרישת לחיצה כפולה על כפתור אחורה כדי לצאת מהאפליקציה</string>
</resources> </resources>
+21 -8
View File
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="app_launcher_name">Failų tvarkytuvė</string> <string name="app_launcher_name">Failų tvarkytuvė</string>
<string name="press_back_again">Paspauskite atgal dar kartą, norėdami išeiti</string> <string name="press_back_again">Dar kartą paspauskite atgal, kad išeitumėte</string>
<string name="copy_path">Kopijuoti kelią į iškarpinę</string> <string name="copy_path">Kopijuoti kelią į iškarpinę</string>
<string name="path_copied">Kelias nukopijuotas</string> <string name="path_copied">Kelias nukopijuotas</string>
<string name="select_audio_file">Pasirinkite garso įrašo failą</string> <string name="select_audio_file">Pasirinkite garso įrašo failą</string>
<string name="search_folder">Ieškoti aplanke</string> <string name="search_folder">Ieškoti aplanką</string>
<string name="open_as">Atverti kaip</string> <string name="open_as">Atverti kaip</string>
<string name="text_file">Tekstinis failas</string> <string name="text_file">Tekstinis failas</string>
<string name="image_file">Paveikslo failas</string> <string name="image_file">Vaizdo failas</string>
<string name="audio_file">Garso įrašo failas</string> <string name="audio_file">Garso įrašo failas</string>
<string name="video_file">Vaizdo įrašo failas</string> <string name="video_file">Vaizdo įrašo failas</string>
<string name="other_file">Kitas failas</string> <string name="other_file">Kitas failas</string>
@@ -19,16 +19,29 @@
<string name="decompressing">Išskleidžiama…</string> <string name="decompressing">Išskleidžiama…</string>
<string name="compression_successful">Glaudinimas sėkmingas</string> <string name="compression_successful">Glaudinimas sėkmingas</string>
<string name="decompression_successful">Išskleidimas sėkmingas</string> <string name="decompression_successful">Išskleidimas sėkmingas</string>
<string name="compressing_failed">Nepavyko glaudinti</string> <string name="compressing_failed">Glaudinimas nepavyko.</string>
<string name="decompressing_failed">Nepavyko išskleisti</string> <string name="decompressing_failed">Išskleidimas nepavyko.</string>
<string name="file_editor">Failų redaktorius</string> <string name="file_editor">Failų rengyklė</string>
<string name="storage_analysis">Saugyklos analizė</string> <string name="storage_analysis">Saugyklos analizė</string>
<string name="images">Paveikslai</string> <string name="images">Vaizdai</string>
<string name="videos">Vaizdo įrašai</string> <string name="videos">Vaizdo įrašai</string>
<string name="audio">Garso įrašai</string> <string name="audio">Garso įrašai</string>
<string name="documents">Dokumentai</string> <string name="documents">Dokumentai</string>
<string name="downloads">Atsiuntimai</string> <string name="downloads">Atsisiuntimai</string>
<string name="archives">Archyvai</string> <string name="archives">Archyvai</string>
<string name="others">Kiti</string> <string name="others">Kiti</string>
<string name="storage_free">laisva</string> <string name="storage_free">laisva</string>
<string name="enable_root_access">Įjungti pagrindinį prieigą</string>
<string name="total_storage">Bendra saugykla: %s</string>
<string name="invert_colors">Invertuoti spalvas</string>
<string name="rooted_device_only">Ši operacija veikia tik pagrindiniuose įrenginiuose.</string>
<string name="recents">Naujausiai</string>
<string name="show_recents">Rodyti naujausių</string>
<string name="press_back_twice">Reikalauti dukart paspausti „Atgal“, kad palikti programėlę</string>
<string name="manage_favorites">Tvarkyti mėgstamus</string>
<string name="go_to_favorite">Eiti į mėgstamą</string>
<string name="favorites_activity_placeholder">Dažnai naudojamus aplankus galite pridėti prie mėgstamų, kad juos būtų lengva pasiekti iš bet kur.</string>
<string name="go_to_home_folder">Eiti į pagrindinį aplanką</string>
<string name="set_as_home_folder">Nustatyti kaip pagrindinį aplanką</string>
<string name="home_folder_updated">Pagrindinis aplankas atnaujintas</string>
</resources> </resources>
+4 -1
View File
@@ -1,2 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources></resources> <resources>
<string name="press_back_again">Притиснете назад уште еднаш за да излезете</string>
<string name="app_launcher_name">Управител со датотеки</string>
</resources>
+47
View File
@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="search_folder">Cercar dins lo dossièr</string>
<string name="invert_colors">Invertir las colors</string>
<string name="images">Imatges</string>
<string name="app_launcher_name">Gestionari de fichièrs</string>
<string name="recents">Recents</string>
<string name="show_recents">Mostrar los recents</string>
<string name="open_as">Dobrir coma</string>
<string name="text_file">Fichièr tèxte</string>
<string name="image_file">Fichièr imatge</string>
<string name="audio_file">Fichièr àudio</string>
<string name="video_file">Fichièr vidèo</string>
<string name="other_file">Autre fichièr</string>
<string name="decompress">Descompressar</string>
<string name="compress_as">Compressar coma</string>
<string name="compressing">Compression…</string>
<string name="decompressing">Descompression…</string>
<string name="compression_successful">Compression reüssida</string>
<string name="go_to_favorite">Anar als favorits</string>
<string name="file_editor">Editor de fichièrs</string>
<string name="videos">Vidèos</string>
<string name="audio">Àudio</string>
<string name="downloads">Telecargaments</string>
<string name="archives">Fichièrs</string>
<string name="others">Autres</string>
<string name="storage_free">disponible</string>
<string name="total_storage">Emmagazinatge total : %s</string>
<string name="enable_root_access">Activar l’accès root</string>
<string name="press_back_again">Tocatz de nòu en rèire per sortir</string>
<string name="go_to_home_folder">Anar al dossièr principal</string>
<string name="set_as_home_folder">Definir coma dossièr principal</string>
<string name="home_folder_updated">Dossièr per defaut actualizat</string>
<string name="copy_path">Copiar l’emplaçament al quichapapièrs</string>
<string name="path_copied">Emplaçament copiat</string>
<string name="select_audio_file">Seleccionatz un fichièr àudio</string>
<string name="compress">Compressar</string>
<string name="documents">Documents</string>
<string name="rooted_device_only">Aquesta operacion fonciona sonque suls aparelhs rootats</string>
<string name="decompression_successful">Descompression reüssida</string>
<string name="compressing_failed">Fracàs de la compression</string>
<string name="decompressing_failed">Fracàs de la descompression</string>
<string name="manage_favorites">Gerir los favorits</string>
<string name="storage_analysis">Analisi de l\'emmagazinatge</string>
<string name="press_back_twice">Cal quichar dos còps la tòca Entrada per quitar l\'aplicacion</string>
<string name="favorites_activity_placeholder">Podètz apondre los dossièrs utilizatq frequentament per i accedir de pertot.</string>
</resources>
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="app_launcher_name">Arquivos</string> <string name="app_launcher_name">Gerenciador de Arquivos</string>
<string name="press_back_again">Aperte novamente o botão Voltar para sair</string> <string name="press_back_again">Aperte novamente o botão Voltar para sair</string>
<string name="go_to_home_folder">Ir para Pasta Principal</string> <string name="go_to_home_folder">Ir para Pasta Principal</string>
<string name="set_as_home_folder">Definir como Pasta Principal</string> <string name="set_as_home_folder">Definir como Pasta Principal</string>
+2 -2
View File
@@ -13,7 +13,7 @@
<string name="recents">Недавнее</string> <string name="recents">Недавнее</string>
<string name="show_recents">Показывать недавнее</string> <string name="show_recents">Показывать недавнее</string>
<string name="invert_colors">Инвертировать цвета</string> <string name="invert_colors">Инвертировать цвета</string>
<string name="open_as">Открыть как…</string> <string name="open_as">Открыть как</string>
<string name="text_file">Текст</string> <string name="text_file">Текст</string>
<string name="image_file">Изображение</string> <string name="image_file">Изображение</string>
<string name="audio_file">Звуковой файл</string> <string name="audio_file">Звуковой файл</string>
@@ -21,7 +21,7 @@
<string name="other_file">Другое</string> <string name="other_file">Другое</string>
<string name="compress">Сжать</string> <string name="compress">Сжать</string>
<string name="decompress">Извлечь</string> <string name="decompress">Извлечь</string>
<string name="compress_as">Сжать как…</string> <string name="compress_as">Сжать как</string>
<string name="compressing">Сжатие…</string> <string name="compressing">Сжатие…</string>
<string name="decompressing">Извлечение…</string> <string name="decompressing">Извлечение…</string>
<string name="compression_successful">Сжатие успешно</string> <string name="compression_successful">Сжатие успешно</string>
+1
View File
@@ -43,4 +43,5 @@
<string name="total_storage">Úložisko celkom: %s</string> <string name="total_storage">Úložisko celkom: %s</string>
<string name="enable_root_access">Povoliť prístup ku koreňovým súborom</string> <string name="enable_root_access">Povoliť prístup ku koreňovým súborom</string>
<string name="press_back_twice">Vyžadovať stlačenie Späť na opustenie apky dvakrát</string> <string name="press_back_twice">Vyžadovať stlačenie Späť na opustenie apky dvakrát</string>
<string name="audio">Zvuk</string>
</resources> </resources>
+7 -7
View File
@@ -18,19 +18,19 @@
<string name="image_file">Resim dosyası</string> <string name="image_file">Resim dosyası</string>
<string name="audio_file">Ses dosyası</string> <string name="audio_file">Ses dosyası</string>
<string name="video_file">Video dosyası</string> <string name="video_file">Video dosyası</string>
<string name="other_file">Diğer dosya</string> <string name="other_file">Diğer dosyalar</string>
<string name="compress">Sıkıştır</string> <string name="compress">Sıkıştır</string>
<string name="decompress">Çöz</string> <string name="decompress">Çıkar</string>
<string name="compress_as">Sıkıştır</string> <string name="compress_as">Sıkıştır</string>
<string name="compressing">Sıkıştırılıyor…</string> <string name="compressing">Sıkıştırılıyor…</string>
<string name="decompressing">Çözülüyor…</string> <string name="decompressing">Çıkarılıyor…</string>
<string name="compression_successful">Sıkıştırma başarılı</string> <string name="compression_successful">Sıkıştırma başarılı</string>
<string name="decompression_successful">Çözme başarılı</string> <string name="decompression_successful">Çıkarma başarılı</string>
<string name="compressing_failed">Sıkıştırma başarısız</string> <string name="compressing_failed">Sıkıştırma başarısız</string>
<string name="decompressing_failed">Çözme başarısız</string> <string name="decompressing_failed">Çıkarma başarısız</string>
<string name="manage_favorites">Gözdeleri yönet</string> <string name="manage_favorites">Gözdeleri yönet</string>
<string name="go_to_favorite">Gözdeye git</string> <string name="go_to_favorite">Gözdeye git</string>
<string name="favorites_activity_placeholder">Sık kullanılan klasörleri her yerden kolay erişmek için gözdelere ekleyebilirsiniz.</string> <string name="favorites_activity_placeholder">Sık kullanılan klasörlere her yerden kolay erişmek için gözdelere ekleyebilirsiniz.</string>
<string name="file_editor">Dosya Düzenleyici</string> <string name="file_editor">Dosya Düzenleyici</string>
<string name="storage_analysis">Depolama analizi</string> <string name="storage_analysis">Depolama analizi</string>
<string name="images">Resimler</string> <string name="images">Resimler</string>
@@ -44,4 +44,4 @@
<string name="total_storage">Toplam depolama: %s</string> <string name="total_storage">Toplam depolama: %s</string>
<string name="enable_root_access">Root erişimini etkinleştir</string> <string name="enable_root_access">Root erişimini etkinleştir</string>
<string name="press_back_twice">Uygulamadan çıkmak için Geri tuşuna iki kez basmayı gerektir</string> <string name="press_back_twice">Uygulamadan çıkmak için Geri tuşuna iki kez basmayı gerektir</string>
</resources> </resources>
+3 -3
View File
@@ -14,8 +14,8 @@
<string name="decompression_successful">Giải nén thành công</string> <string name="decompression_successful">Giải nén thành công</string>
<string name="compressing_failed">Không thể nén</string> <string name="compressing_failed">Không thể nén</string>
<string name="decompressing_failed">Không thể giải nén</string> <string name="decompressing_failed">Không thể giải nén</string>
<string name="manage_favorites">Quản lý mục yêu thích</string> <string name="manage_favorites">Mục yêu thích</string>
<string name="go_to_favorite">Đến mục yêu thích</string> <string name="go_to_favorite">Mục yêu thích</string>
<string name="go_to_home_folder">Đến thư mục chính</string> <string name="go_to_home_folder">Đến thư mục chính</string>
<string name="set_as_home_folder">Đặt làm thư mục chính</string> <string name="set_as_home_folder">Đặt làm thư mục chính</string>
<string name="audio">Âm thanh</string> <string name="audio">Âm thanh</string>
@@ -44,4 +44,4 @@
<string name="total_storage">Tổng bộ nhớ: %s</string> <string name="total_storage">Tổng bộ nhớ: %s</string>
<string name="enable_root_access">Cho phép truy cập root</string> <string name="enable_root_access">Cho phép truy cập root</string>
<string name="press_back_twice">Nhấn Quay lại hai lần để thoát ứng dụng</string> <string name="press_back_twice">Nhấn Quay lại hai lần để thoát ứng dụng</string>
</resources> </resources>
+58
View File
@@ -0,0 +1,58 @@
build:
maxIssues: 0
weights:
complexity: 2
LongParameterList: 2
style: 1
processors:
active: true
exclude:
- "FunctionCountProcessor"
- "PropertyCountProcessor"
config:
validation: true
complexity:
LongParameterList:
active: true
functionThreshold: 10
constructorThreshold: 8
ignoreDefaultParameters: true
ignoreAnnotated:
- "Composable"
LongMethod:
active: true
threshold: 120
ignoreAnnotated:
- "Composable"
- "Preview"
style:
MagicNumber:
active: true
ignoreAnnotated: ["Composable"]
ignoreEnums: true
ignoreNumbers: ["-1", "0", "1", "2", "42", "1000"]
MaxLineLength:
active: true
maxLineLength: 120
excludePackageStatements: true
excludeImportStatements: true
naming:
FunctionNaming:
active: true
ignoreAnnotated: ["Composable", "Preview"]
functionPattern: "[a-z][A-Za-z0-9]*"
Compose: # io.nlopez.compose.rules
ComposableParametersOrdering:
active: true
ModifierDefaultValue:
active: true
MissingModifierDefaultValue:
active: true
PublicComposablePreview:
active: true
@@ -0,0 +1,30 @@
هل سئمت من مديري الملفات الذين يبطئونك وينتهكون خصوصيتك؟ افتح تجربة سريعة وآمنة وقابلة للتخصيص بالكامل مع مدير الملفات Fossify. ⚡
🚀 سيطر على عالمك الرقمي من خلال التنقل فائق السرعة:
• أدر ملفاتك بسرعة من خلال إمكانيات الضغط والنقل السهلة، مما يحافظ على تنظيم حياتك الرقمية.
• يمكنك الوصول بسرعة إلى المجلدات الأكثر استخدامًا لديك باستخدام مجلد المنزل القابل للتخصيص واختصارات المفضلة.
• ابحث عما تحتاجه في ثوانٍ باستخدام خيارات التنقل والبحث والفرز البديهية.
🔐 عزز بياناتك بخصوصية وأمان لا مثيل لهما:
• أمّن الملفات الحساسة بكلمة مرور أو نمط أو أقفال بصمة الإصبع للعناصر المخفية أو التطبيق بأكمله.
• لا يلزم الوصول إلى الإنترنت - تظل ملفاتك خاصة وآمنة على جهازك.
💾 أتقن تخزينك مثل المحترفين:
• أفرغ المساحة بضغط سهل للملفات والمجلدات لزيادة إمكانات جهازك.
• تحديد وتنظيف الملفات التي تستهلك مساحة كبيرة باستخدام أداة تحليل التخزين المضمنة.
• يمكنك التنقل بسلاسة في ملفات الجذر وبطاقات SD وأجهزة USB للتنظيم الكامل.
📁 حسّن سير عملك باستخدام أدوات يدوية:
• أنشئ اختصارات لسطح المكتب للوصول الفوري إلى الملفات والمجلدات الأكثر استخدامًا لديك.
• حرّر المستندات أو طباعتها أو قراءتها بسهولة باستخدام محرر الملفات الخفيف، المعزز بإيماءات التكبير/التصغير.
اجعلها خاصة بك مع التخصيص اللانهائي:
• استمتع بتجربة مفتوحة المصدر وخالية من الإعلانات تمنحك التحكم، وليس الشركات العملاقة.
• خصّص الألوان والسمات والأيقونات لتعكس أسلوبك وتفضيلاتك الفريدة.
تخلص من مديري الملفات المنتفخين والمنتهكين للخصوصية واستمتع بالحرية الحقيقية مع مدير الملفات Fossify. نزّل الآن واستعد التحكم في حياتك الرقمية!
استكشف المزيد من التطبيقات بواسطة Fossify: https://www.fossify.org
كود المصدر: https://www.github.com/FossifyOrg
انضم إلى المجتمع على Reddit: https://www.reddit.com/r/Fossify
تواصل على Telegram: https://t.me/Fossify
@@ -0,0 +1 @@
مستكشف ملفات عملي وخفيف ومفتوح المصدر مزود بميزات أساسية.
@@ -0,0 +1,8 @@
Changed:
• Updated translations
Fixed:
• File modification time is now preserved when compressing/decompressing files
@@ -0,0 +1,8 @@
Changed:
• Updated translations
Fixed:
• Fixed empty storage usage bars on initial load
@@ -1,30 +1,30 @@
Fatigué des gestionnaires de fichiers qui vous ralentissent et envahissent votre vie privée ? Découvrez une expérience rapide comme l'éclair, sécurisée et entièrement personnalisable avec Fossify File Manager. ⚡ Fatigué des gestionnaires de fichiers qui vous ralentissent et envahissent votre vie privée ? Découvrez une expérience rapide comme l'éclair, sécurisée et entièrement personnalisable avec Fossify File Manager. ⚡
🚀 DOMINEZ VOTRE MONDE NUMÉRIQUE AVEC UNE NAVIGATION ULTRA-RAPIDE : 🚀 DOMINEZ VOTRE MONDE NUMÉRIQUE AVEC UNE NAVIGATION ULTRA-RAPIDE :
• Gérez rapidement vos fichiers avec des capacités de compression et de transfert faciles, pour garder votre vie numérique organisée. • Gérez rapidement vos fichiers avec des capacités de compression et de transfert faciles, pour garder votre vie numérique organisée.
• Accédez rapidement aux dossiers que vous utilisez le plus grâce à la personnalisation du dossier d’accueil et à des raccourcis vers vos favoris. • Accédez rapidement aux dossiers que vous utilisez le plus grâce à la personnalisation du dossier d’accueil et à des raccourcis vers vos favoris.
• Trouvez ce dont vous avez besoin en quelques secondes grâce à des options intuitives de navigation, de recherche et de tri. • Trouvez ce dont vous avez besoin en quelques secondes grâce à des options intuitives de navigation, de recherche et de tri.
🔐 RENFORCEZ VOS DONNÉES AVEC UNE CONFIDENTIALITÉ ET UNE SÉCURITÉ INÉGALÉES : 🔐 RENFORCEZ VOS DONNÉES AVEC UNE CONFIDENTIALITÉ ET UNE SÉCURITÉ INÉGALÉES :
• Sécurisez les fichiers sensibles avec un mot de passe, un schéma ou votre empreinte digitale, pour les éléments cachés ou pour toute l'application. • Sécurisez les fichiers sensibles avec un mot de passe, un schéma ou votre empreinte digitale, pour les éléments cachés ou pour toute l'application.
• Aucun accès Internet requis – vos fichiers restent privés et sécurisés sur votre appareil. • Aucun accès Internet requis – vos fichiers restent privés et sécurisés sur votre appareil.
💾 MAÎTRISEZ VOTRE STOCKAGE COMME UN PRO : 💾 MAÎTRISEZ VOTRE STOCKAGE COMME UN PRO :
• Libérez de l'espace avec une compression facile des fichiers et des dossiers pour maximiser le potentiel de votre appareil. • Libérez de l'espace avec une compression facile des fichiers et des dossiers pour maximiser le potentiel de votre appareil.
• Identifiez et nettoyez les fichiers occupant beaucoup d'espace avec l'outil d'analyse de stockage intégré. • Identifiez et nettoyez les fichiers occupant beaucoup d'espace avec l'outil d'analyse de stockage intégré.
• Naviguez en toute transparence dans les fichiers racine, les cartes SD et les périphériques USB pour une organisation parfaite. • Naviguez en toute transparence dans les fichiers racine, les cartes SD et les périphériques USB pour une organisation parfaite.
📁 OPTIMISEZ VOS TÂCHES AVEC DES OUTILS PRATIQUES : 📁 OPTIMISEZ VOS TÂCHES AVEC DES OUTILS PRATIQUES :
• Créez des raccourcis sur votre écran d’accueil pour un accès instantané aux fichiers et dossiers que vous utilisez le plus. • Créez des raccourcis sur votre écran d’accueil pour un accès instantané aux fichiers et dossiers que vous utilisez le plus.
• Modifiez, imprimez ou lisez facilement des documents avec l'éditeur de fichiers légers, doté de gestes de zoom. • Modifiez, imprimez ou lisez facilement des documents avec l'éditeur de fichiers légers, doté de gestes de zoom.
🌈 FAITES-LE VÔTRE AVEC UNE PERSONNALISATION SANS FIN : 🌈 FAITES-LE VÔTRE AVEC UNE PERSONNALISATION SANS FIN :
• Profitez d'une expérience open-source sans publicités qui vous donne le contrôle, pas des applications appartenant à des géants. • Profitez d'une expérience open-source sans publicités qui vous donne le contrôle, pas des applications appartenant à des géants du numérique.
• Personnalisez les couleurs, les thèmes et les icônes pour refléter votre style unique et vos préférences. • Personnalisez les couleurs, les thèmes et les icônes pour refléter votre style unique et vos préférences.
Abandonnez les gestionnaires de fichiers gonflés et envahissent la vie privée, faites l'expérience d'une véritable liberté avec Fossify File Manager. Téléchargez maintenant et reprenez en main votre vie numérique ! Abandonnez les gestionnaires de fichiers encombrés et envahissant votre vie privée, faites l'expérience d'une véritable liberté avec Fossify File Manager. Téléchargez-le maintenant et reprenez en main votre vie numérique !
Explorez plus d'apps de Fossify : https://www.fossify.org Découvre plus d'applis de Fossify : https://www.fossify.org
Code open-source : https://www.github.com/FossifyOrg Code open-source : https://www.github.com/FossifyOrg
Rejoignez la communauté sur Reddit : https://www.reddit.com/r/Fossify Rejoignez la communauté sur Reddit : https://www.reddit.com/r/Fossify
Restez connecté via Telegram : https://t.me/Fossify Restez connecté via Telegram : https://t.me/Fossify
@@ -0,0 +1,30 @@
נמאס לכם ממנהלי קבצים שמאיטים אתכם ופולשים לפרטיותכם? פתחו חוויה מהירה כברק, מאובטחת וניתנת להתאמה אישית לחלוטין עם Fossify File Manager. ⚡
<br><br>
🚀 שלטו בעולם הדיגיטלי שלכם עם ניווט מהיר במיוחד:<br>
* נהלו את הקבצים שלכם במהירות עם יכולות דחיסה והעברה קלות, ושמרו על חייכם הדיגיטליים מאורגנים.
* גשו במהירות לתיקיות הנפוצות ביותר שלכם עם קיצורי דרך מותאמים אישית לתיקיית הבית ולמועדפים.
* מצאו את מה שאתם צריכים תוך שניות עם אפשרויות ניווט, חיפוש ומיון אינטואיטיביות.
<br><br>
🔐 חזקו את הנתונים שלכם עם פרטיות ואבטחה ללא תחרות:<br>
* אבטחו קבצים רגישים עם סיסמה, דפוס או טביעת אצבע לפריטים מוסתרים או לכל האפליקציה.
* אין צורך בגישה לאינטרנט – הקבצים שלכם נשארים פרטיים ומאובטחים במכשיר שלכם.
<br><br>
💾 שלטו באחסון שלכם כמו מקצוענים:<br>
* פנו מקום עם דחיסת קבצים ותיקיות קלה כדי למקסם את פוטנציאל המכשיר שלכם.
* זהו ונקה קבצים תופסי מקום עם כלי ניתוח האחסון המובנה.
* נווטו בצורה חלקה בקבצי שורש, כרטיסי SD והתקני USB לארגון מוחלט.
<br><br>
📁 ייעלו את זרימת העבודה שלכם עם כלים שימושיים:<br>
* צרו קיצורי דרך לשולחן העבודה לגישה מיידית לקבצים ולתיקיות הנפוצים ביותר שלכם.
* ערוך, הדפס או קרא מסמכים בקלות באמצעות עורך הקבצים הקל, המשופר על ידי מחוות זום.
<br><br>
🌈 הפכו את זה לשלכם עם התאמה אישית אינסופית:<br>
* תיהנו מחוויה ללא פרסומות, קוד פתוח, ששמה אתכם בשליטה, לא ענקיות תאגידים.
* התאימו אישית צבעים, ערכות נושא וסמלים כדי לשקף את הסגנון וההעדפות הייחודיים שלכם.
<br><br>
היפטרו ממנהלי הקבצים הנפוחים והפולשניים לפרטיות וחוו חופש אמיתי עם Fossify File Manager. הורידו עכשיו וקחו בחזרה את השליטה על חייכם הדיגיטליים!
<br><br>
חקרו עוד אפליקציות של Fossify: https://www.fossify.org<br>
קוד מקור: https://www.github.com/FossifyOrg<br>
הצטרפו לקהילה ב-Reddit: https://www.reddit.com/r/Fossify<br>
התחברו בטלגרם: https://t.me/Fossify
@@ -0,0 +1 @@
Удобный, лёгкий и свободный проводник файлов с основными возможностями.
@@ -1,24 +1,24 @@
Bạn đã chán các trình quản lý file làm chậm và xâm phạm quyền riêng tư của mình? Hãy mở khóa trải nghiệm cực nhanh, an toàn và hoàn toàn tùy chỉnh với Fossify File Manager. ⚡ Bạn đã chán các trình quản lý file làm chậm và xâm phạm quyền riêng tư của mình? Hãy mở khóa trải nghiệm cực nhanh, an toàn và hoàn toàn tùy chỉnh với Fossify File Manager.
🚀 LẤY LẠI THẾ GIỚI SỐ CỦA BẠN VỚI ĐIỀU HƯỚNG NHANH CHÓNG: 🚀 LẤY LẠI THẾ GIỚI SỐ CỦA BẠN VỚI ĐIỀU HƯỚNG NHANH CHÓNG
• Nén và chuyển dữ liệu dễ dàng, giúp dữ liệu luôn ngăn nắp. • Nén và chuyển dữ liệu dễ dàng, giúp dữ liệu luôn ngăn nắp.
• Truy cập nhanh vào các thư mục được sử dụng nhiều nhất của bạn với thư mục chính có thể tùy chỉnh và các phím tắt yêu thích. • Truy cập nhanh vào các thư mục được sử dụng nhiều nhất của bạn với thư mục chính có thể tùy chỉnh và các phím tắt yêu thích.
• Tìm những gì bạn cần trong vài giây với các tùy chọn điều hướng, tìm kiếm và sắp xếp trực quan. • Tìm những gì bạn cần trong vài giây với các tùy chọn điều hướng, tìm kiếm và sắp xếp trực quan.
🔐 TÍNH RIÊNG TƯ VÀ BẢO MẬT VÔ ĐỊCH: 🔐 TÍNH RIÊNG TƯ VÀ BẢO MẬT VÔ ĐỊCH
• Bảo mật các file nhạy cảm bằng mật khẩu, mẫu hoặc khóa vân tay cho các mục hoặc toàn bộ ứng dụng. • Bảo mật các file nhạy cảm bằng mật khẩu, mẫu hoặc khóa vân tay cho các mục hoặc toàn bộ ứng dụng.
• Không cần truy cập internet – các tệp của bạn luôn riêng tư và an toàn trên thiết bị của bạn. • Không cần truy cập internet – các tệp của bạn luôn riêng tư và an toàn trên thiết bị của bạn.
💾 LÀM CHỦ BỘ NHỚ NHƯ MỘT CHUYÊN GIA: 💾 LÀM CHỦ BỘ NHỚ NHƯ MỘT CHUYÊN GIA
• Giải phóng không gian với tính năng nén file và thư mục dễ dàng để tối đa hóa tiềm năng của thiết bị. • Giải phóng không gian với tính năng nén file và thư mục dễ dàng để tối đa hóa tiềm năng của thiết bị.
• Xác định và dọn dẹp các file chiếm nhiều dung lượng bằng công cụ phân tích tích hợp. • Xác định và dọn dẹp các file chiếm nhiều dung lượng bằng công cụ phân tích có sẵn.
• Điều hướng liền mạch các file gốc, thẻ SD và thiết bị USB để sắp xếp toàn bộ. • Điều hướng liền mạch các file gốc, thẻ SD và thiết bị USB để sắp xếp toàn bộ.
📁 TỐI ƯU HÓA QUY TRÌNH LÀM VIỆC BẰNG CÁC CÔNG CỤ TIỆN DỤNG: 📁 TỐI ƯU HÓA QUY TRÌNH LÀM VIỆC BẰNG CÁC CÔNG CỤ TIỆN DỤNG
• Tạo các phím tắt trên màn hình để truy cập tức thì vào các file và thư mục được sử dụng nhiều nhất. • Tạo các phím tắt trên màn hình để truy cập tức thì vào các file và thư mục được sử dụng nhiều nhất.
• Chỉnh sửa, in hoặc đọc tài liệu dễ dàng bằng trình chỉnh sửa tệp nhẹ, được cải tiến bằng cử chỉ thu phóng. • Chỉnh sửa, in hoặc đọc tài liệu dễ dàng bằng trình chỉnh sửa tệp nhẹ, được cải tiến bằng cử chỉ thu phóng.
🌈 TÙY CHỈNH KHÔNG GIỚI HẠN: 🌈 TÙY CHỈNH KHÔNG GIỚI HẠN
• Tận hưởng trải nghiệm mã nguồn mở, không có quảng cáo giúp bạn kiểm soát, không phải những gã khổng lồ. • Tận hưởng trải nghiệm mã nguồn mở, không có quảng cáo giúp bạn kiểm soát, không phải những gã khổng lồ.
• Cá nhân hóa màu sắc, chủ đề và biểu tượng để phản ánh phong cách và sở thích độc đáo của bạn. • Cá nhân hóa màu sắc, chủ đề và biểu tượng để phản ánh phong cách và sở thích độc đáo của bạn.
@@ -26,5 +26,5 @@ Bỏ các trình quản lý tệp cồng kềnh, xâm phạm quyền riêng tư
Khám phá thêm các ứng dụng của Fossify: https://www.fossify.org Khám phá thêm các ứng dụng của Fossify: https://www.fossify.org
Mã nguồn: https://www.github.com/FossifyOrg Mã nguồn: https://www.github.com/FossifyOrg
Tham gia cộng đồng trên Reddit: https://www.reddit.com/r/Fossify Cộng đồng trên Reddit: https://www.reddit.com/r/Fossify
Kết nối trên Telegram: https://t.me/Fossify Kết nối trên Telegram: https://t.me/Fossify
+5
View File
@@ -18,3 +18,8 @@ org.gradle.jvmargs=-Xmx4g
# This option should only be used with decoupled projects. More details, visit # This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true # org.gradle.parallel=true
# Versioning
VERSION_NAME=1.2.2
VERSION_CODE=6
APP_ID=org.fossify.filemanager
+10 -11
View File
@@ -1,41 +1,40 @@
[versions] [versions]
#jetbrains #jetbrains
kotlin = "1.9.25" kotlin = "2.2.10"
#Detekt #Detekt
detekt = "1.23.3" detekt = "1.23.8"
detektCompose = "0.4.27"
#AndroidX #AndroidX
androidx-swiperefreshlayout = "1.1.0" androidx-swiperefreshlayout = "1.1.0"
androidx-documentfile = "1.1.0" androidx-documentfile = "1.1.0"
#Fossify #Fossify
commons = "2.0.1" commons = "5.0.2"
#Other #Other
autofittextview = "0.2.1" autofittextview = "0.2.1"
gestureviews = "2.8.3" gestureviews = "2.8.3"
rootshell = "1.6" rootshell = "bc7e5d398e"
roottools = "87d3d22e93" roottools = "965c154e20"
zip4j = "2.11.5" zip4j = "2.11.5"
#Gradle #Gradle
gradlePlugins-agp = "8.10.0" gradlePlugins-agp = "8.11.1"
#build #build
app-build-compileSDKVersion = "34" app-build-compileSDKVersion = "34"
app-build-targetSDK = "34" app-build-targetSDK = "34"
app-build-minimumSDK = "26" app-build-minimumSDK = "26"
app-build-javaVersion = "VERSION_17" app-build-javaVersion = "VERSION_17"
app-build-kotlinJVMTarget = "17" app-build-kotlinJVMTarget = "17"
#versioning
app-version-appId = "org.fossify.filemanager"
app-version-versionCode = "3"
app-version-versionName = "1.1.0"
[libraries] [libraries]
#AndroidX #AndroidX
androidx-swiperefreshlayout = { module = "androidx.swiperefreshlayout:swiperefreshlayout", version.ref = "androidx-swiperefreshlayout" } androidx-swiperefreshlayout = { module = "androidx.swiperefreshlayout:swiperefreshlayout", version.ref = "androidx-swiperefreshlayout" }
androidx-documentfile = { module = "androidx.documentfile:documentfile", version.ref = "androidx-documentfile" } androidx-documentfile = { module = "androidx.documentfile:documentfile", version.ref = "androidx-documentfile" }
#Compose
compose-detekt = { module = "io.nlopez.compose.rules:detekt", version.ref = "detektCompose" }
#Fossify #Fossify
fossify-commons = { module = "org.fossify:commons", version.ref = "commons" } fossify-commons = { module = "org.fossify:commons", version.ref = "commons" }
#Other #Other
autofittextview = { module = "me.grantland:autofittextview", version.ref = "autofittextview" } autofittextview = { module = "me.grantland:autofittextview", version.ref = "autofittextview" }
gestureviews = { module = "com.alexvasilkov:gesture-views", version.ref = "gestureviews" } gestureviews = { module = "com.alexvasilkov:gesture-views", version.ref = "gestureviews" }
rootshell = { module = "com.github.Stericson:RootShell", version.ref = "rootshell" } rootshell = { module = "com.github.naveensingh:RootShell", version.ref = "rootshell" }
roottools = { module = "com.github.naveensingh:RootTools", version.ref = "roottools" } roottools = { module = "com.github.naveensingh:RootTools", version.ref = "roottools" }
zip4j = { module = "net.lingala.zip4j:zip4j", version.ref = "zip4j" } zip4j = { module = "net.lingala.zip4j:zip4j", version.ref = "zip4j" }
[plugins] [plugins]
Binary file not shown.
+1 -1
View File
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=true validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
Vendored
+2 -3
View File
@@ -86,8 +86,7 @@ done
# shellcheck disable=SC2034 # shellcheck disable=SC2034
APP_BASE_NAME=${0##*/} APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value. # Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum MAX_FD=maximum
@@ -206,7 +205,7 @@ fi
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command: # Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped. # and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line. # treated as '${Hostname}' itself on the command line.
+35
View File
@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<lint>
<!-- Fatal -->
<issue id="ExportedReceiver" severity="error" />
<issue id="ExportedService" severity="error" />
<issue id="ExportedContentProvider" severity="error" />
<issue id="MissingPermission" severity="error" />
<issue id="NotificationPermission" severity="error" />
<issue id="UnsafeOptInUsageError" severity="error" />
<issue id="StringFormatMatches" severity="error" />
<issue id="StringFormatInvalid" severity="error" />
<issue id="StringFormatCount" severity="error" />
<issue id="Range" severity="error" />
<issue id="CheckResult" severity="error" />
<issue id="WrongThread" severity="error" />
<issue id="Recycle" severity="error" />
<issue id="StaticFieldLeak" severity="error" />
<issue id="UseRequireInsteadOfGet" severity="error" />
<issue id="ClickableViewAccessibility" severity="error" />
<issue id="RtlSymmetry" severity="warning" />
<issue id="SetTextI18n" severity="warning" />
<!-- Warnings -->
<issue id="AllowBackup" severity="warning" />
<issue id="MissingTranslation" severity="warning" />
<issue id="UnusedResources" severity="warning" />
<issue id="UnusedQuantity" severity="warning" />
<issue id="MissingQuantity" severity="warning" />
<issue id="ContentDescription" severity="warning" />
<issue id="VectorPath" severity="warning" />
<issue id="IconDensities" severity="warning" />
<issue id="GradleDependency" severity="warning" />
<issue id="Overdraw" severity="warning" />
<issue id="ExtraTranslation" severity="warning" />
</lint>