mirror of
https://github.com/FossifyOrg/File-Manager.git
synced 2026-11-04 12:03:02 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c55d685022 | ||
|
|
1e2e304f70 | ||
|
|
e0b1e884ce | ||
|
|
dfd73bddd0 | ||
|
|
a88355c9ad | ||
|
|
e6593a5c6b | ||
|
|
880f383e76 | ||
|
|
ab31c828a1 | ||
|
|
f71a4b7f55 | ||
|
|
c2482ee5dc | ||
|
|
de5b6da9d5 | ||
|
|
4812bc8d4b | ||
|
|
3ec4591b58 | ||
|
|
d11a710106 | ||
|
|
2cf0fdf7d1 | ||
|
|
25fe232c27 | ||
|
|
f733553ff3 | ||
|
|
5b278f6e4a | ||
|
|
fec28af74f | ||
|
|
eb4d38d25a | ||
|
|
8647071c66 | ||
|
|
630d7b2cea | ||
|
|
223e644f36 | ||
|
|
055bfbd3b8 | ||
|
|
ceb7a5f2a2 | ||
|
|
20aee9162d | ||
|
|
7a5f797a2a | ||
|
|
10a83a18b1 | ||
|
|
fb3384fb08 | ||
|
|
666c8d8c53 | ||
|
|
8c711104ed | ||
|
|
e7186a9c79 | ||
|
|
55eff8a6ae | ||
|
|
8b76e7f28a | ||
|
|
0bee809420 | ||
|
|
2b51c3f2fa | ||
|
|
1b03d62494 | ||
|
|
e9ecfe53a4 | ||
|
|
da8202ee2d | ||
|
|
31d4fdbf4f | ||
|
|
f68fe061e0 | ||
|
|
f24a8089d2 | ||
|
|
1571214647 | ||
|
|
5da4a63e8d | ||
|
|
aeb8977a77 | ||
|
|
0b93fcbb3e | ||
|
|
39f9b00f6a | ||
|
|
cfc1a89300 | ||
|
|
5e8cd437d2 | ||
|
|
3832e9db5d | ||
|
|
1f61e17fd3 | ||
|
|
259d185b95 | ||
|
|
c69d10b8fe | ||
|
|
21637a6d8a | ||
|
|
ac4be152ed | ||
|
|
e52a9bc776 | ||
|
|
1066344336 | ||
|
|
d8500c0c2a | ||
|
|
81276fe6c0 | ||
|
|
70ad7a07bc | ||
|
|
ec0f0f7893 | ||
|
|
c2953276e2 | ||
|
|
0b208bf63b | ||
|
|
141010a523 | ||
|
|
8d2a67dc50 | ||
|
|
0172a2517b | ||
|
|
986d7d5215 | ||
|
|
769c0dbb6a | ||
|
|
7d1f4c5eed | ||
|
|
1d16ff7505 | ||
|
|
e2b73dd6e7 | ||
|
|
24122e36f8 | ||
|
|
9ad80710e8 | ||
|
|
6c87991332 | ||
|
|
467021f8c1 | ||
|
|
96c6e28800 | ||
|
|
21e2ab1510 | ||
|
|
9ffeb94a35 | ||
|
|
5738639e97 | ||
|
|
32aeae6b38 | ||
|
|
416cf9675a | ||
|
|
4e0b5ba7b6 | ||
|
|
d3fe0f8bc4 | ||
|
|
8151b2dd00 | ||
|
|
f9f37718de | ||
|
|
ba605b59e3 | ||
|
|
bd7d2204ee | ||
|
|
d8720bb355 | ||
|
|
f23a4925a7 | ||
|
|
30dd2397a2 | ||
|
|
9dad0da353 | ||
|
|
6f96f85d1a | ||
|
|
27acc647d8 | ||
|
|
f3c01f4846 | ||
|
|
33b783bf3c | ||
|
|
45f9b5c261 | ||
|
|
ea082d2dd1 | ||
|
|
ef23996ced | ||
|
|
68aec3ac61 | ||
|
|
93893ce919 | ||
|
|
222995b4b6 |
No files matched your search
@@ -0,0 +1,2 @@
|
||||
# Auto-generated file. DO NOT EDIT.
|
||||
1.3.1
|
||||
@@ -18,7 +18,7 @@ body:
|
||||
required: true
|
||||
- label: "I made sure that there are **no existing issues** - [open](https://github.com/FossifyOrg/File-Manager/issues) or [closed](https://github.com/FossifyOrg/File-Manager/issues?q=is%3Aissue+is%3Aclosed) - to which I could contribute my information."
|
||||
required: true
|
||||
- label: "I made sure that there are **no existing discussions** - [open](https://github.com/FossifyOrg/File-Manager/discussions) or [closed](https://github.com/FossifyOrg/File-Manager/discussions?discussions_q=is%3Aclosed) - to which I could contribute my information."
|
||||
- label: "I made sure that there are **no existing discussions** - [open](https://github.com/orgs/FossifyOrg/discussions?discussions_q=is:open+label:filemanager) or [closed](https://github.com/orgs/FossifyOrg/discussions?discussions_q=is:closed+label:filemanager) - to which I could contribute my information."
|
||||
required: true
|
||||
- label: "I have read the FAQs inside the app (Menu -> About -> FAQs) and my problem isn't listed."
|
||||
required: true
|
||||
@@ -77,9 +77,6 @@ body:
|
||||
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.
|
||||
|
||||
⚠️ 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: |
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Questions
|
||||
url: https://github.com/FossifyOrg/File-Manager/discussions
|
||||
url: https://github.com/orgs/FossifyOrg/discussions
|
||||
about: Please ask and answer questions here.
|
||||
@@ -16,7 +16,7 @@ body:
|
||||
options:
|
||||
- label: "I made sure that there are **no existing issues** - [open](https://github.com/FossifyOrg/File-Manager/issues) or [closed](https://github.com/FossifyOrg/File-Manager/issues?q=is%3Aissue+is%3Aclosed) - to which I could contribute my information."
|
||||
required: true
|
||||
- label: "I made sure that there are **no existing discussions** - [open](https://github.com/FossifyOrg/File-Manager/discussions) or [closed](https://github.com/FossifyOrg/File-Manager/discussions?discussions_q=is%3Aclosed) - to which I could contribute my information."
|
||||
- label: "I made sure that there are **no existing discussions** - [open](https://github.com/orgs/FossifyOrg/discussions?discussions_q=is:open+label:filemanager) or [closed](https://github.com/orgs/FossifyOrg/discussions?discussions_q=is:closed+label:filemanager) - to which I could contribute my information."
|
||||
required: true
|
||||
- label: "I have read the FAQs inside the app (Menu -> About -> FAQs) and my problem isn't listed."
|
||||
required: true
|
||||
@@ -33,8 +33,6 @@ body:
|
||||
label: Feature description
|
||||
description: |
|
||||
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:
|
||||
required: true
|
||||
|
||||
|
||||
+18
-6
@@ -1,4 +1,18 @@
|
||||
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:
|
||||
- package-ecosystem: "bundler"
|
||||
directory: "/"
|
||||
@@ -8,19 +22,19 @@ updates:
|
||||
prefix: "chore"
|
||||
prefix-development: "chore"
|
||||
include: "scope"
|
||||
assignees:
|
||||
- "naveensingh"
|
||||
|
||||
- package-ecosystem: "gradle"
|
||||
directory: "/"
|
||||
registries:
|
||||
- maven-central
|
||||
- maven-google
|
||||
- jitpack
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
commit-message:
|
||||
prefix: "chore"
|
||||
prefix-development: "chore"
|
||||
include: "scope"
|
||||
assignees:
|
||||
- "naveensingh"
|
||||
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
@@ -30,5 +44,3 @@ updates:
|
||||
prefix: "chore"
|
||||
prefix-development: "chore"
|
||||
include: "scope"
|
||||
assignees:
|
||||
- "naveensingh"
|
||||
@@ -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 }}
|
||||
@@ -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: ""
|
||||
@@ -11,5 +11,4 @@ on:
|
||||
jobs:
|
||||
call-image-minimizer-workflow:
|
||||
uses: FossifyOrg/.github/.github/workflows/image-minimizer.yml@main
|
||||
secrets:
|
||||
FOSSIFYBOT_TOKEN: ${{ secrets.FOSSIFYBOT_TOKEN }}
|
||||
secrets: inherit
|
||||
@@ -2,11 +2,10 @@ name: No Response
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 12 * * *' # Runs daily at noon
|
||||
- cron: "0 12 * * *" # Runs daily at noon
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
call-no-response-workflow:
|
||||
uses: FossifyOrg/.github/.github/workflows/no-response.yml@main
|
||||
secrets:
|
||||
FOSSIFYBOT_TOKEN: ${{ secrets.FOSSIFYBOT_TOKEN }}
|
||||
secrets: inherit
|
||||
@@ -4,12 +4,7 @@ on:
|
||||
pull_request_target:
|
||||
types: [opened]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
# write permission is not required as FOSSIFYBOT_TOKEN is used
|
||||
|
||||
jobs:
|
||||
call-pr-labeler-workflow:
|
||||
uses: FossifyOrg/.github/.github/workflows/pr-labeler.yml@main
|
||||
secrets:
|
||||
FOSSIFYBOT_TOKEN: ${{ secrets.FOSSIFYBOT_TOKEN }}
|
||||
secrets: inherit
|
||||
@@ -2,7 +2,7 @@ name: PR
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
branches: [ main ]
|
||||
|
||||
jobs:
|
||||
call-pr-workflow:
|
||||
|
||||
@@ -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
|
||||
@@ -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 }}
|
||||
@@ -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
|
||||
@@ -2,7 +2,7 @@ name: Testing build (on PR)
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
branches: [ main ]
|
||||
types: [ labeled, opened, synchronize, reopened ]
|
||||
|
||||
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
|
||||
@@ -10,3 +10,4 @@ keystore.jks
|
||||
keystore.properties
|
||||
fastlane/fastlane.json
|
||||
fastlane/report.xml
|
||||
.kotlin/
|
||||
+61
-16
@@ -1,5 +1,4 @@
|
||||
# Changelog
|
||||
|
||||
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/),
|
||||
@@ -7,23 +6,59 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [1.1.0] - 2025-05-21
|
||||
## [1.3.1] - 2025-10-02
|
||||
### Changed
|
||||
- Updated translations
|
||||
|
||||
### Fixed
|
||||
- Fixed files from hidden folders showing up in storage tab browser ([#217])
|
||||
|
||||
## [1.3.0] - 2025-09-30
|
||||
### Added
|
||||
- Added a separate "Save as" option in the text editor ([#224])
|
||||
|
||||
### Changed
|
||||
- Save button now overwrites files directly in the text editor ([#224])
|
||||
- Search now ignores accents and diacritics ([#95])
|
||||
- Updated translations
|
||||
|
||||
### Fixed
|
||||
- Fixed folders showing up incorrectly as files in copy/move dialog ([#267])
|
||||
- Fixed error when saving files with unsupported characters ([#250])
|
||||
- Fixed missing permission prompt on initial "Save as" launch ([#85])
|
||||
- Fixed printing text files containing a "#" ([#104])
|
||||
- Fixed files in hidden folders showing up in recent tab ([#217])
|
||||
|
||||
## [1.2.3] - 2025-09-15
|
||||
### Fixed
|
||||
- Fixed folders showing up incorrectly as files in some cases ([#80])
|
||||
|
||||
## [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
|
||||
### Added
|
||||
- Added SHA-1 and SHA-256 hashes to file properties ([#149])
|
||||
|
||||
### Changed
|
||||
|
||||
- Replaced checkboxes with switches
|
||||
- Updated translations
|
||||
|
||||
### Removed
|
||||
|
||||
- Dropped support for Android 7 and older versions
|
||||
|
||||
### Fixed
|
||||
|
||||
- Files saved via `Save As` option are now named properly ([#37])
|
||||
- Decompressed folders are now named properly ([#120])
|
||||
- Text editor no longer resets on device rotation ([#106])
|
||||
@@ -33,36 +68,46 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- Fixed invisible content when using app lock ([#150])
|
||||
|
||||
## [1.0.1] - 2024-03-17
|
||||
|
||||
### Changed
|
||||
|
||||
- Folders now use primary/accent color.
|
||||
- Enhanced search performance in the text editor.
|
||||
- Added some translations.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Addressed unnecessary delays when renaming files.
|
||||
- Fixed unresponsive behavior when viewing contents of a zip file.
|
||||
- Disabled the use of invalid characters such as `/` for batch file renaming.
|
||||
- Fixed invisible sort menu when viewing storage summary.
|
||||
|
||||
## [1.0.0] - 2024-01-07
|
||||
|
||||
### Added
|
||||
|
||||
- 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
|
||||
[#37]: https://github.com/FossifyOrg/File-Manager/issues/37
|
||||
[#136]: https://github.com/FossifyOrg/File-Manager/issues/136
|
||||
[#80]: https://github.com/FossifyOrg/File-Manager/issues/80
|
||||
[#85]: https://github.com/FossifyOrg/File-Manager/issues/85
|
||||
[#95]: https://github.com/FossifyOrg/File-Manager/issues/95
|
||||
[#104]: https://github.com/FossifyOrg/File-Manager/issues/104
|
||||
[#105]: https://github.com/FossifyOrg/File-Manager/issues/105
|
||||
[#106]: https://github.com/FossifyOrg/File-Manager/issues/106
|
||||
[#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
|
||||
[#150]: https://github.com/FossifyOrg/File-Manager/issues/150
|
||||
[#176]: https://github.com/FossifyOrg/File-Manager/issues/176
|
||||
[#217]: https://github.com/FossifyOrg/File-Manager/issues/217
|
||||
[#224]: https://github.com/FossifyOrg/File-Manager/issues/224
|
||||
[#250]: https://github.com/FossifyOrg/File-Manager/issues/250
|
||||
[#251]: https://github.com/FossifyOrg/File-Manager/issues/251
|
||||
[#267]: https://github.com/FossifyOrg/File-Manager/issues/267
|
||||
|
||||
[Unreleased]: https://github.com/FossifyOrg/File-Manager/compare/1.3.1...HEAD
|
||||
[1.3.1]: https://github.com/FossifyOrg/File-Manager/compare/1.3.0...1.3.1
|
||||
[1.3.0]: https://github.com/FossifyOrg/File-Manager/compare/1.2.3...1.3.0
|
||||
[1.2.3]: https://github.com/FossifyOrg/File-Manager/compare/1.2.2...1.2.3
|
||||
[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
|
||||
@@ -0,0 +1 @@
|
||||
* @naveensingh
|
||||
+14
-14
@@ -10,26 +10,26 @@ GEM
|
||||
public_suffix (>= 2.0.2, < 7.0)
|
||||
artifactory (3.0.17)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.3.2)
|
||||
aws-partitions (1.1097.0)
|
||||
aws-sdk-core (3.223.0)
|
||||
aws-eventstream (1.4.0)
|
||||
aws-partitions (1.1116.0)
|
||||
aws-sdk-core (3.225.2)
|
||||
aws-eventstream (~> 1, >= 1.3.0)
|
||||
aws-partitions (~> 1, >= 1.992.0)
|
||||
aws-sigv4 (~> 1.9)
|
||||
base64
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
logger
|
||||
aws-sdk-kms (1.100.0)
|
||||
aws-sdk-core (~> 3, >= 3.216.0)
|
||||
aws-sdk-kms (1.105.0)
|
||||
aws-sdk-core (~> 3, >= 3.225.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sdk-s3 (1.185.0)
|
||||
aws-sdk-core (~> 3, >= 3.216.0)
|
||||
aws-sdk-s3 (1.189.1)
|
||||
aws-sdk-core (~> 3, >= 3.225.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sigv4 (1.11.0)
|
||||
aws-sigv4 (1.12.1)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
base64 (0.2.0)
|
||||
base64 (0.3.0)
|
||||
claide (1.1.0)
|
||||
colored (1.2)
|
||||
colored2 (3.1.2)
|
||||
@@ -71,7 +71,7 @@ GEM
|
||||
faraday_middleware (1.2.1)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.4.0)
|
||||
fastlane (2.227.2)
|
||||
fastlane (2.228.0)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
@@ -160,7 +160,7 @@ GEM
|
||||
httpclient (2.9.0)
|
||||
mutex_m
|
||||
jmespath (1.6.2)
|
||||
json (2.11.3)
|
||||
json (2.12.2)
|
||||
jwt (2.10.1)
|
||||
base64
|
||||
logger (1.7.0)
|
||||
@@ -170,19 +170,19 @@ GEM
|
||||
multipart-post (2.4.1)
|
||||
mutex_m (0.3.0)
|
||||
nanaimo (0.4.0)
|
||||
naturally (2.2.1)
|
||||
naturally (2.3.0)
|
||||
nkf (0.2.0)
|
||||
optparse (0.6.0)
|
||||
os (1.1.4)
|
||||
plist (3.7.2)
|
||||
public_suffix (6.0.2)
|
||||
rake (13.2.1)
|
||||
rake (13.3.0)
|
||||
representable (3.2.0)
|
||||
declarative (< 0.1.0)
|
||||
trailblazer-option (>= 0.1.1, < 0.2.0)
|
||||
uber (< 0.2.0)
|
||||
retriable (3.1.2)
|
||||
rexml (3.4.1)
|
||||
rexml (3.4.2)
|
||||
rouge (3.28.0)
|
||||
ruby2_keywords (0.0.5)
|
||||
rubyzip (2.4.1)
|
||||
|
||||
+21
-9
@@ -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.konan.properties.Properties
|
||||
import java.io.FileInputStream
|
||||
@@ -26,14 +26,14 @@ android {
|
||||
compileSdk = project.libs.versions.app.build.compileSDKVersion.get().toInt()
|
||||
|
||||
defaultConfig {
|
||||
applicationId = libs.versions.app.version.appId.get()
|
||||
applicationId = project.property("APP_ID").toString()
|
||||
minSdk = project.libs.versions.app.build.minimumSDK.get().toInt()
|
||||
targetSdk = project.libs.versions.app.build.targetSDK.get().toInt()
|
||||
versionName = project.libs.versions.app.version.versionName.get()
|
||||
versionCode = project.libs.versions.app.version.versionCode.get().toInt()
|
||||
archivesName.set("file-manager-$versionCode")
|
||||
versionName = project.property("VERSION_NAME").toString()
|
||||
versionCode = project.property("VERSION_CODE").toString().toInt()
|
||||
multiDexEnabled = true
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
setProperty("archivesBaseName", "file-manager-$versionCode")
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
@@ -98,17 +98,25 @@ android {
|
||||
includeInApk = false
|
||||
}
|
||||
|
||||
tasks.withType<KotlinCompile> {
|
||||
kotlinOptions.jvmTarget = project.libs.versions.app.build.kotlinJVMTarget.get()
|
||||
androidResources {
|
||||
@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 {
|
||||
checkReleaseBuilds = false
|
||||
abortOnError = true
|
||||
warningsAsErrors = true
|
||||
warningsAsErrors = false
|
||||
baseline = file("lint-baseline.xml")
|
||||
lintConfig = rootProject.file("lint.xml")
|
||||
}
|
||||
|
||||
bundle {
|
||||
@@ -120,6 +128,9 @@ android {
|
||||
|
||||
detekt {
|
||||
baseline = file("detekt-baseline.xml")
|
||||
config.setFrom("$rootDir/detekt.yml")
|
||||
buildUponDefaultConfig = true
|
||||
allRules = false
|
||||
}
|
||||
|
||||
dependencies {
|
||||
@@ -131,4 +142,5 @@ dependencies {
|
||||
implementation(libs.gestureviews)
|
||||
implementation(libs.autofittextview)
|
||||
implementation(libs.zip4j)
|
||||
detektPlugins(libs.compose.detekt)
|
||||
}
|
||||
+6
-62
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" ?>
|
||||
<SmellBaseline>
|
||||
<ManuallySuppressedIssues></ManuallySuppressedIssues>
|
||||
<ManuallySuppressedIssues/>
|
||||
<CurrentIssues>
|
||||
<ID>ComplexCondition:Activity.kt$(hide && filename.startsWith('.')) || (!hide && !filename.startsWith('.'))</ID>
|
||||
<ID>ComplexCondition:ItemsAdapter.kt$ItemsAdapter$activity.getDoesFilePathExist(source) && activity.getIsPathDirectory(source) && sourceFile.list()?.isEmpty() == true && sourceFile.getProperSize(true) == 0L && sourceFile.getFileCount(true) == 0</ID>
|
||||
@@ -9,8 +9,7 @@
|
||||
<ID>ComplexCondition:MimeTypesActivity.kt$MimeTypesActivity$mimetype != "image" && mimetype != "video" && mimetype != "audio" && mimetype != "text" && !extraAudioMimeTypes.contains(fullMimetype) && !extraDocumentMimeTypes.contains(fullMimetype) && !archiveMimeTypes.contains(fullMimetype)</ID>
|
||||
<ID>ComplexCondition:ReadTextActivity.kt$ReadTextActivity$requestCode == SELECT_SAVE_FILE_INTENT && resultCode == Activity.RESULT_OK && resultData != null && resultData.data != null</ID>
|
||||
<ID>CyclomaticComplexMethod:DecompressActivity.kt$DecompressActivity$private fun decompressTo(destination: String)</ID>
|
||||
<ID>CyclomaticComplexMethod:DecompressActivity.kt$DecompressActivity$private fun fillAllListItems(uri: Uri, callback: () -> Unit)</ID>
|
||||
<ID>CyclomaticComplexMethod:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths(sourcePaths: List<String>, targetPath: String, password: String? = null): Boolean</ID>
|
||||
<ID>CyclomaticComplexMethod:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths( sourcePaths: List<String>, targetPath: String, password: String? = null ): Boolean</ID>
|
||||
<ID>CyclomaticComplexMethod:ItemsAdapter.kt$ItemsAdapter$override fun actionItemPressed(id: Int)</ID>
|
||||
<ID>CyclomaticComplexMethod:MainActivity.kt$MainActivity$private fun setupOptionsMenu()</ID>
|
||||
<ID>CyclomaticComplexMethod:MimeTypesActivity.kt$MimeTypesActivity$private fun getProperFileDirItems(callback: (ArrayList<FileDirItem>) -> Unit)</ID>
|
||||
@@ -23,11 +22,6 @@
|
||||
<ID>EmptyFunctionBlock:MimeTypesActivity.kt$MimeTypesActivity${}</ID>
|
||||
<ID>EmptyFunctionBlock:StorageFragment.kt$StorageFragment${}</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: () -> Unit)</ID>
|
||||
<ID>LongMethod:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths(sourcePaths: List<String>, targetPath: String, password: String? = null): Boolean</ID>
|
||||
<ID>LongMethod:MimeTypesActivity.kt$MimeTypesActivity$private fun getProperFileDirItems(callback: (ArrayList<FileDirItem>) -> Unit)</ID>
|
||||
<ID>LongParameterList:ItemsAdapter.kt$ItemsAdapter$( activity: SimpleActivity, var listItems: MutableList<ListItem>, private val listener: ItemOperationsListener?, recyclerView: MyRecyclerView, private val isPickMultipleIntent: Boolean, private val swipeRefreshLayout: SwipeRefreshLayout?, canHaveIndividualViewType: Boolean = true, itemClick: (Any) -> Unit, )</ID>
|
||||
<ID>LoopWithTooManyJumpStatements:DecompressActivity.kt$DecompressActivity$while</ID>
|
||||
<ID>LoopWithTooManyJumpStatements:StorageFragment.kt$StorageFragment$do</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$4</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$50</ID>
|
||||
<ID>MagicNumber:RecentsFragment.kt$RecentsFragment$1000</ID>
|
||||
<ID>MagicNumber:RecentsFragment.kt$RecentsFragment$3</ID>
|
||||
<ID>MagicNumber:RecentsFragment.kt$RecentsFragment$50</ID>
|
||||
<ID>MagicNumber:RootHelpers.kt$RootHelpers.<no name provided>$5</ID>
|
||||
<ID>MagicNumber:StorageFragment.kt$StorageFragment$1000</ID>
|
||||
<ID>MagicNumber:StorageFragment.kt$StorageFragment$100000</ID>
|
||||
<ID>MagicNumber:StorageFragment.kt$StorageFragment$2000</ID>
|
||||
<ID>MagicNumber:StorageFragment.kt$StorageFragment$3</ID>
|
||||
@@ -62,39 +52,13 @@
|
||||
<ID>MaxLineLength:CompressAsDialog.kt$CompressAsDialog$val indexOfDot = if (filename.contains('.') && !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: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:DecompressItemsAdapter.kt$DecompressItemsAdapter$class</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$ManageFavoritesAdapter(this@FavoritesActivity, favorites, this@FavoritesActivity, manageFavoritesList) { }</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<String></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$class</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$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$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:MimeTypesActivity.kt$MimeTypesActivity$!extraAudioMimeTypes.contains(fullMimetype)</ID>
|
||||
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$if</ID>
|
||||
@@ -133,7 +96,6 @@
|
||||
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$binding.recentsSwipeRefresh.isEnabled = lastSearchedText.isEmpty() && activity?.config?.enablePullToRefresh != false</ID>
|
||||
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$class</ID>
|
||||
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$if</ID>
|
||||
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$val filtered = filesIgnoringSearch.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList<ListItem></ID>
|
||||
<ID>MaxLineLength:RootHelpers.kt$RootHelpers$fun</ID>
|
||||
<ID>MaxLineLength:RootHelpers.kt$RootHelpers$private</ID>
|
||||
<ID>MaxLineLength:SaveAsActivity.kt$SaveAsActivity$FilePickerDialog</ID>
|
||||
@@ -144,28 +106,25 @@
|
||||
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$mainStorageUsageProgressbar</ID>
|
||||
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$mainStorageUsageProgressbar.progress = ((totalStorageSpace - freeStorageSpace) / SIZE_DIVIDER).toInt()</ID>
|
||||
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$totalSpace.text = String.format(context.getString(R.string.total_storage), totalStorageSpace.formatSizeThousand())</ID>
|
||||
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$val filtered = allDeviceListItems.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList<ListItem></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: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:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths(sourcePaths: List<String>, targetPath: String, password: String? = null): Boolean</ID>
|
||||
<ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$private fun decompressPaths(paths: List<String>, conflictResolutions: LinkedHashMap<String, Int>, callback: (success: Boolean) -> Unit)</ID>
|
||||
<ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths( sourcePaths: List<String>, targetPath: String, password: String? = null ): Boolean</ID>
|
||||
<ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$private fun decompressPaths( paths: List<String>, conflictResolutions: LinkedHashMap<String, Int>, callback: (success: Boolean) -> Unit )</ID>
|
||||
<ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$private fun setupView(binding: ItemViewBinding, listItem: ListItem)</ID>
|
||||
<ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$private fun tryDecompressingPaths(sourcePaths: List<String>, callback: (success: Boolean) -> Unit)</ID>
|
||||
<ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$private fun tryDecompressingPaths( sourcePaths: List<String>, callback: (success: Boolean) -> Unit )</ID>
|
||||
<ID>NestedBlockDepth:ItemsFragment.kt$ItemsFragment$private fun getRegularItemsOf(path: String, callback: (originalPath: String, items: ArrayList<ListItem>) -> Unit)</ID>
|
||||
<ID>NestedBlockDepth:ItemsFragment.kt$ItemsFragment$private fun searchFiles(text: String, path: String): ArrayList<ListItem></ID>
|
||||
<ID>NestedBlockDepth:RecentsFragment.kt$RecentsFragment$private fun getRecents(callback: (recents: ArrayList<ListItem>) -> Unit)</ID>
|
||||
<ID>NestedBlockDepth:StorageFragment.kt$StorageFragment$override fun setupFragment(activity: SimpleActivity)</ID>
|
||||
<ID>NestedBlockDepth:StorageFragment.kt$StorageFragment$private fun getAllFiles(volumeName: String): ArrayList<FileDirItem></ID>
|
||||
<ID>ReturnCount:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths(sourcePaths: List<String>, targetPath: String, password: String? = null): Boolean</ID>
|
||||
<ID>ReturnCount:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths( sourcePaths: List<String>, targetPath: String, password: String? = null ): Boolean</ID>
|
||||
<ID>SwallowedException:ItemsAdapter.kt$ItemsAdapter$e: Exception</ID>
|
||||
<ID>SwallowedException:MimeTypesActivity.kt$MimeTypesActivity$e: Exception</ID>
|
||||
<ID>SwallowedException:StorageFragment.kt$StorageFragment$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:DecompressActivity.kt$DecompressActivity$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:ItemsAdapter.kt$ItemsAdapter$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:ItemsAdapter.kt$ItemsAdapter$exception: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:MainActivity.kt$MainActivity$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:MimeTypesActivity.kt$MimeTypesActivity$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:ReadTextActivity.kt$ReadTextActivity$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:RecentsFragment.kt$RecentsFragment$e: Exception</ID>
|
||||
@@ -188,35 +147,20 @@
|
||||
<ID>VariableNaming:ItemsAdapter.kt$ItemsAdapter$val SAFPath = getFirstSelectedItemPath()</ID>
|
||||
<ID>VariableNaming:RecentsFragment.kt$RecentsFragment$private val RECENTS_LIMIT = 50</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:CompressAsDialog.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: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.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:MimeTypesActivity.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:MimeTypesActivity.kt$import org.fossify.filemanager.helpers.*</ID>
|
||||
<ID>WildcardImport:MyViewPagerFragment.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: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.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>
|
||||
</SmellBaseline>
|
||||
+249
-198
@@ -1,5 +1,5 @@
|
||||
<?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
|
||||
id="ScopedStorage"
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
<issue
|
||||
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()"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -24,58 +24,14 @@
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="UnusedAttribute"
|
||||
message="Attribute `appCategory` is only used in API level 26 and higher (current min is 23)"
|
||||
errorLine1=" android:appCategory="productivity""
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
id="OldTargetApi"
|
||||
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="app-build-targetSDK = "34""
|
||||
errorLine2=" ~~~~">
|
||||
<location
|
||||
file="src/main/AndroidManifest.xml"
|
||||
file="$HOME/work/File-Manager/File-Manager/gradle/libs.versions.toml"
|
||||
line="22"
|
||||
column="9"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="UnusedAttribute"
|
||||
message="Attribute `localeConfig` is only used in API level 33 and higher (current min is 23)"
|
||||
errorLine1=" android:localeConfig="@xml/locale_config""
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/AndroidManifest.xml"
|
||||
line="25"
|
||||
column="9"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="AppLinkUrlError"
|
||||
message="Missing URL"
|
||||
errorLine1=" <intent-filter>"
|
||||
errorLine2=" ^">
|
||||
<location
|
||||
file="src/main/AndroidManifest.xml"
|
||||
line="69"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="AppLinkUrlError"
|
||||
message="Missing URL"
|
||||
errorLine1=" <intent-filter>"
|
||||
errorLine2=" ^">
|
||||
<location
|
||||
file="src/main/AndroidManifest.xml"
|
||||
line="96"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="AppLinkUrlError"
|
||||
message="Missing URL"
|
||||
errorLine1=" <intent-filter>"
|
||||
errorLine2=" ^">
|
||||
<location
|
||||
file="src/main/AndroidManifest.xml"
|
||||
line="108"
|
||||
column="13"/>
|
||||
column="23"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
@@ -91,101 +47,35 @@
|
||||
|
||||
<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 = "8.3.0""
|
||||
errorLine2=" ~~~~~~~">
|
||||
message="A newer version of Gradle than 8.13 is available: 8.14.3"
|
||||
errorLine1="distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="$HOME/Projects/Community/FossifyOrg/File-Manager/gradle/libs.versions.toml"
|
||||
line="18"
|
||||
column="21"/>
|
||||
file="$HOME/work/File-Manager/File-Manager/gradle/wrapper/gradle-wrapper.properties"
|
||||
line="3"
|
||||
column="17"/>
|
||||
</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 = "8.3.0""
|
||||
errorLine2=" ~~~~~~~">
|
||||
message="A newer version of com.android.application than 8.11.1 is available: 8.13.0. (There is also a newer version of 8.11.𝑥 available, if upgrading to 8.13.0 is difficult: 8.11.2)"
|
||||
errorLine1="gradlePlugins-agp = "8.11.1""
|
||||
errorLine2=" ~~~~~~~~">
|
||||
<location
|
||||
file="$HOME/Projects/Community/FossifyOrg/File-Manager/gradle/libs.versions.toml"
|
||||
line="18"
|
||||
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 = "8.3.0""
|
||||
errorLine2=" ~~~~~~~">
|
||||
<location
|
||||
file="$HOME/Projects/Community/FossifyOrg/File-Manager/gradle/libs.versions.toml"
|
||||
line="18"
|
||||
file="$HOME/work/File-Manager/File-Manager/gradle/libs.versions.toml"
|
||||
line="19"
|
||||
column="21"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="GradleDependency"
|
||||
message="A newer version of org.jetbrains.kotlin.android than 1.9.10 is available: 1.9.25"
|
||||
errorLine1="kotlin = "1.9.10""
|
||||
errorLine2=" ~~~~~~~~">
|
||||
message="A newer version of `compileSdkVersion` than 34 is available: 36"
|
||||
errorLine1="app-build-compileSDKVersion = "34""
|
||||
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 = "1.9.10""
|
||||
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 = "1.9.10""
|
||||
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 = "18ad1dd308""
|
||||
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 = "18ad1dd308""
|
||||
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 = "18ad1dd308""
|
||||
errorLine2=" ~~~~~~~~~~~~">
|
||||
<location
|
||||
file="$HOME/Projects/Community/FossifyOrg/File-Manager/gradle/libs.versions.toml"
|
||||
line="10"
|
||||
column="11"/>
|
||||
file="$HOME/work/File-Manager/File-Manager/gradle/libs.versions.toml"
|
||||
line="21"
|
||||
column="31"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
@@ -206,7 +96,7 @@
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
||||
line="286"
|
||||
line="376"
|
||||
column="28"/>
|
||||
</issue>
|
||||
|
||||
@@ -217,13 +107,13 @@
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
||||
line="941"
|
||||
line="1144"
|
||||
column="24"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""app_launcher_name" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai)"
|
||||
message=""app_launcher_name" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ml" (Malayalam), "ms" (Malay), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai)"
|
||||
errorLine1=" <string name="app_launcher_name">File Manager_debug</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -234,7 +124,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""app_launcher_name" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai)"
|
||||
message=""app_launcher_name" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ml" (Malayalam), "ms" (Malay), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai)"
|
||||
errorLine1=" <string name="app_launcher_name">File Manager</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -245,7 +135,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""press_back_again" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""press_back_again" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="press_back_again">Press back again to exit</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -256,7 +146,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""go_to_home_folder" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""go_to_home_folder" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="go_to_home_folder">Go to home folder</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -267,7 +157,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""set_as_home_folder" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""set_as_home_folder" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="set_as_home_folder">Set as home folder</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -278,7 +168,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""home_folder_updated" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""home_folder_updated" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="home_folder_updated">Home folder updated</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -289,7 +179,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""copy_path" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""copy_path" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="copy_path">Copy path to clipboard</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -300,7 +190,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""path_copied" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""path_copied" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="path_copied">Path copied</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -311,7 +201,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""select_audio_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""select_audio_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="select_audio_file">Please select an audio file</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -322,7 +212,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""search_folder" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""search_folder" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="search_folder">Search folder</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -333,7 +223,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""rooted_device_only" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""rooted_device_only" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="rooted_device_only">This operation works only on rooted devices</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -344,7 +234,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""recents" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
message=""recents" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
errorLine1=" <string name="recents">Recents</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -355,7 +245,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""show_recents" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
message=""show_recents" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
errorLine1=" <string name="show_recents">Show recents</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -366,7 +256,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""invert_colors" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "nb" (Norwegian Bokmål), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
message=""invert_colors" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
errorLine1=" <string name="invert_colors">Invert colors</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -377,7 +267,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""open_as" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ar" (Arabic), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""open_as" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="open_as">Open as</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -388,7 +278,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""text_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ar" (Arabic), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""text_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="text_file">Text file</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -399,7 +289,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""image_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ar" (Arabic), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""image_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="image_file">Image file</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -410,7 +300,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""audio_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ar" (Arabic), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""audio_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="audio_file">Audio file</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -421,7 +311,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""video_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ar" (Arabic), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""video_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="video_file">Video file</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -432,7 +322,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""other_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ar" (Arabic), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""other_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="other_file">Other file</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -443,7 +333,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""compress" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""compress" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="compress">Compress</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -454,7 +344,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""decompress" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""decompress" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="decompress">Decompress</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -465,7 +355,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""compress_as" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""compress_as" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="compress_as">Compress as</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -476,7 +366,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""compressing" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""compressing" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="compressing">Compressing…</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -487,7 +377,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""decompressing" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""decompressing" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="decompressing">Decompressing…</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -498,7 +388,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""compression_successful" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""compression_successful" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="compression_successful">Compression successful</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -509,7 +399,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""decompression_successful" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""decompression_successful" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="decompression_successful">Decompression successful</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -520,7 +410,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""compressing_failed" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""compressing_failed" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="compressing_failed">Compressing failed</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -531,7 +421,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""decompressing_failed" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""decompressing_failed" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="decompressing_failed">Decompressing failed</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -542,7 +432,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""manage_favorites" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""manage_favorites" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="manage_favorites">Manage favorites</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -553,7 +443,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""go_to_favorite" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""go_to_favorite" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="go_to_favorite">Go to favorite</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -564,7 +454,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""favorites_activity_placeholder" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""favorites_activity_placeholder" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="favorites_activity_placeholder">You can add frequently used folders to favorites for easy access from anywhere.</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -575,7 +465,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""file_editor" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""file_editor" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="file_editor">File Editor</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -586,7 +476,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""storage_analysis" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "nb" (Norwegian Bokmål), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
message=""storage_analysis" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
errorLine1=" <string name="storage_analysis">Storage analysis</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -597,7 +487,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""images" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""images" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="images">Images</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -608,7 +498,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""videos" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""videos" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="videos">Videos</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -619,7 +509,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""audio" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ar" (Arabic), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "sk" (Slovak), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
message=""audio" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
errorLine1=" <string name="audio">Audio</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -630,7 +520,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""documents" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ar" (Arabic), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
message=""documents" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
errorLine1=" <string name="documents">Documents</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -641,7 +531,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""downloads" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ar" (Arabic), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
message=""downloads" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
errorLine1=" <string name="downloads">Downloads</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -652,7 +542,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""archives" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
message=""archives" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
errorLine1=" <string name="archives">Archives</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -663,7 +553,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""others" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "nb" (Norwegian Bokmål), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
message=""others" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
errorLine1=" <string name="others">Others</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -674,7 +564,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""storage_free" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "ar" (Arabic), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
message=""storage_free" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
errorLine1=" <string name="storage_free">free</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -685,7 +575,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""total_storage" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
message=""total_storage" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
errorLine1=" <string name="total_storage">Total storage: %s</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -696,7 +586,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""enable_root_access" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
message=""enable_root_access" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
||||
errorLine1=" <string name="enable_root_access">Enable root access</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -707,7 +597,7 @@
|
||||
|
||||
<issue
|
||||
id="MissingTranslation"
|
||||
message=""press_back_twice" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "nb" (Norwegian Bokmål), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
message=""press_back_twice" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
||||
errorLine1=" <string name="press_back_twice">Require pressing Back twice to leave the app</string>"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
@@ -723,7 +613,7 @@
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
||||
line="797"
|
||||
line="972"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
@@ -734,7 +624,7 @@
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
||||
line="801"
|
||||
line="976"
|
||||
column="13"/>
|
||||
</issue>
|
||||
|
||||
@@ -745,7 +635,7 @@
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
||||
line="808"
|
||||
line="983"
|
||||
column="9"/>
|
||||
</issue>
|
||||
|
||||
@@ -756,7 +646,7 @@
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
||||
line="814"
|
||||
line="989"
|
||||
column="9"/>
|
||||
</issue>
|
||||
|
||||
@@ -767,10 +657,17 @@
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
||||
line="819"
|
||||
line="994"
|
||||
column="9"/>
|
||||
</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
|
||||
id="Overdraw"
|
||||
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"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="UnusedResources"
|
||||
message="The resource `R.menu.menu_pdf_viewer` appears to be unused"
|
||||
errorLine1="<menu xmlns:android="http://schemas.android.com/apk/res/android""
|
||||
errorLine2="^">
|
||||
<location
|
||||
file="src/main/res/menu/menu_pdf_viewer.xml"
|
||||
line="2"
|
||||
column="1"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="UnusedResources"
|
||||
message="The resource `R.string.path_copied` appears to be unused"
|
||||
@@ -958,6 +844,171 @@
|
||||
column="6"/>
|
||||
</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("package:$packageName")"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/filemanager/activities/SimpleActivity.kt"
|
||||
line="80"
|
||||
column="43"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="UseKtx"
|
||||
message="Use the KTX extension function `String.toUri` instead?"
|
||||
errorLine1=" intent.data = Uri.parse("package:$packageName")"
|
||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||
<location
|
||||
file="src/main/kotlin/org/fossify/filemanager/activities/SimpleActivity.kt"
|
||||
line="80"
|
||||
column="43"/>
|
||||
</issue>
|
||||
|
||||
<issue
|
||||
id="ClickableViewAccessibility"
|
||||
message="Custom view `GestureEditText` overrides `onTouchEvent` but not `performClick`"
|
||||
|
||||
@@ -2,5 +2,4 @@
|
||||
<resources>
|
||||
<bool name="show_donate_in_about">false</bool>
|
||||
<bool name="hide_google_relations">false</bool>
|
||||
<bool name="hide_all_external_links">true</bool>
|
||||
</resources>
|
||||
@@ -22,7 +22,6 @@
|
||||
android:appCategory="productivity"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_launcher_name"
|
||||
android:localeConfig="@xml/locale_config"
|
||||
android:requestLegacyExternalStorage="true"
|
||||
android:roundIcon="@mipmap/ic_launcher"
|
||||
android:theme="@style/AppTheme">
|
||||
@@ -61,6 +60,14 @@
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</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>
|
||||
<action android:name="android.intent.action.RINGTONE_PICKER" />
|
||||
<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.databinding.ActivityDecompressBinding
|
||||
import org.fossify.filemanager.extensions.config
|
||||
import org.fossify.filemanager.extensions.setLastModified
|
||||
import org.fossify.filemanager.models.ListItem
|
||||
import java.io.BufferedInputStream
|
||||
import java.io.File
|
||||
@@ -171,7 +172,9 @@ class DecompressActivity : SimpleActivity() {
|
||||
continue
|
||||
}
|
||||
|
||||
val isVulnerableForZipPathTraversal = !File(newPath).canonicalPath.startsWith(parent)
|
||||
val outputFile = File(newPath)
|
||||
|
||||
val isVulnerableForZipPathTraversal = !outputFile.canonicalPath.startsWith(parent)
|
||||
if (isVulnerableForZipPathTraversal) {
|
||||
continue
|
||||
}
|
||||
@@ -187,6 +190,7 @@ class DecompressActivity : SimpleActivity() {
|
||||
fos!!.write(buffer, 0, count)
|
||||
}
|
||||
fos!!.close()
|
||||
outputFile.setLastModified(entry)
|
||||
}
|
||||
|
||||
toast(R.string.decompression_successful)
|
||||
|
||||
@@ -1,22 +1,17 @@
|
||||
package org.fossify.filemanager.activities
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.content.ClipData
|
||||
import android.content.Intent
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.media.RingtoneManager
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.os.Environment
|
||||
import android.os.Handler
|
||||
import android.provider.Settings
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import com.stericson.RootTools.RootTools
|
||||
import me.grantland.widget.AutofitHelper
|
||||
import org.fossify.commons.dialogs.ConfirmationAdvancedDialog
|
||||
import org.fossify.commons.dialogs.RadioGroupDialog
|
||||
import org.fossify.commons.extensions.appLaunched
|
||||
import org.fossify.commons.extensions.appLockManager
|
||||
@@ -43,7 +38,6 @@ import org.fossify.commons.extensions.launchMoreAppsFromUsIntent
|
||||
import org.fossify.commons.extensions.onGlobalLayout
|
||||
import org.fossify.commons.extensions.onTabSelectionChanged
|
||||
import org.fossify.commons.extensions.sdCardPath
|
||||
import org.fossify.commons.extensions.showErrorToast
|
||||
import org.fossify.commons.extensions.toast
|
||||
import org.fossify.commons.extensions.updateBottomTabItemColors
|
||||
import org.fossify.commons.extensions.viewBinding
|
||||
@@ -59,7 +53,6 @@ import org.fossify.commons.helpers.TAB_RECENT_FILES
|
||||
import org.fossify.commons.helpers.TAB_STORAGE_ANALYSIS
|
||||
import org.fossify.commons.helpers.VIEW_TYPE_GRID
|
||||
import org.fossify.commons.helpers.ensureBackgroundThread
|
||||
import org.fossify.commons.helpers.isRPlus
|
||||
import org.fossify.commons.models.FAQItem
|
||||
import org.fossify.commons.models.RadioItem
|
||||
import org.fossify.commons.models.Release
|
||||
@@ -84,7 +77,6 @@ import java.io.File
|
||||
class MainActivity : SimpleActivity() {
|
||||
companion object {
|
||||
private const val BACK_PRESS_TIMEOUT = 5000
|
||||
private const val MANAGE_STORAGE_RC = 201
|
||||
private const val PICKED_PATH = "picked_path"
|
||||
}
|
||||
|
||||
@@ -281,15 +273,6 @@ class MainActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
|
||||
super.onActivityResult(requestCode, resultCode, resultData)
|
||||
isAskingPermissions = false
|
||||
if (requestCode == MANAGE_STORAGE_RC && isRPlus()) {
|
||||
actionOnPermission?.invoke(Environment.isExternalStorageManager())
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateMenuColors() {
|
||||
updateStatusbarColor(getProperBackgroundColor())
|
||||
binding.mainMenu.updateColors()
|
||||
@@ -323,38 +306,6 @@ class MainActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("InlinedApi")
|
||||
private fun handleStoragePermission(callback: (granted: Boolean) -> Unit) {
|
||||
actionOnPermission = null
|
||||
if (hasStoragePermission()) {
|
||||
callback(true)
|
||||
} else {
|
||||
if (isRPlus()) {
|
||||
ConfirmationAdvancedDialog(this, "", R.string.access_storage_prompt, R.string.ok, 0, false) { success ->
|
||||
if (success) {
|
||||
isAskingPermissions = true
|
||||
actionOnPermission = callback
|
||||
try {
|
||||
val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
|
||||
intent.addCategory("android.intent.category.DEFAULT")
|
||||
intent.data = Uri.parse("package:$packageName")
|
||||
startActivityForResult(intent, MANAGE_STORAGE_RC)
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
val intent = Intent()
|
||||
intent.action = Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
|
||||
startActivityForResult(intent, MANAGE_STORAGE_RC)
|
||||
}
|
||||
} else {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
handlePermission(PERMISSION_WRITE_STORAGE, callback)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun initFileManager(refreshRecents: Boolean) {
|
||||
if (intent.action == Intent.ACTION_VIEW && intent.data != null) {
|
||||
val data = intent.data
|
||||
@@ -411,7 +362,10 @@ class MainActivity : SimpleActivity() {
|
||||
private fun setupTabs() {
|
||||
binding.mainTabsHolder.removeAllTabs()
|
||||
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
|
||||
|
||||
if (isPickFileIntent) {
|
||||
|
||||
@@ -25,6 +25,7 @@ import org.fossify.filemanager.databinding.ActivityMimetypesBinding
|
||||
import org.fossify.filemanager.dialogs.ChangeSortingDialog
|
||||
import org.fossify.filemanager.dialogs.ChangeViewTypeDialog
|
||||
import org.fossify.filemanager.extensions.config
|
||||
import org.fossify.filemanager.extensions.isPathInHiddenFolder
|
||||
import org.fossify.filemanager.extensions.tryOpenPathIntent
|
||||
import org.fossify.filemanager.helpers.*
|
||||
import org.fossify.filemanager.interfaces.ItemOperationsListener
|
||||
@@ -133,10 +134,11 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
||||
override fun selectedPaths(paths: ArrayList<String>) {}
|
||||
|
||||
fun searchQueryChanged(text: String) {
|
||||
val searchText = text.trim()
|
||||
lastSearchedText = searchText
|
||||
val normalizedText = text.normalizeString()
|
||||
val searchNormalizedText = normalizedText.trim()
|
||||
lastSearchedText = searchNormalizedText
|
||||
when {
|
||||
searchText.isEmpty() -> {
|
||||
searchNormalizedText.isEmpty() -> {
|
||||
binding.apply {
|
||||
mimetypesFastscroller.beVisible()
|
||||
getRecyclerAdapter()?.updateItems(storedItems)
|
||||
@@ -145,7 +147,7 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
||||
}
|
||||
}
|
||||
|
||||
searchText.length == 1 -> {
|
||||
searchNormalizedText.length == 1 -> {
|
||||
binding.apply {
|
||||
mimetypesFastscroller.beGone()
|
||||
mimetypesPlaceholder.beVisible()
|
||||
@@ -155,11 +157,13 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
||||
|
||||
else -> {
|
||||
ensureBackgroundThread {
|
||||
if (lastSearchedText != searchText) {
|
||||
if (lastSearchedText != searchNormalizedText) {
|
||||
return@ensureBackgroundThread
|
||||
}
|
||||
|
||||
val listItems = storedItems.filter { it.name.contains(searchText, true) } as ArrayList<ListItem>
|
||||
val listItems = storedItems.filter {
|
||||
it.name.normalizeString().contains(searchNormalizedText, true)
|
||||
} as ArrayList<ListItem>
|
||||
|
||||
runOnUiThread {
|
||||
getRecyclerAdapter()?.updateItems(listItems, text)
|
||||
@@ -285,7 +289,10 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
||||
try {
|
||||
val fullMimetype = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault()) ?: return@queryCursor
|
||||
val name = cursor.getStringValue(MediaStore.Files.FileColumns.DISPLAY_NAME)
|
||||
if (!showHidden && name.startsWith(".")) {
|
||||
val path = cursor.getStringValue(MediaStore.Files.FileColumns.DATA)
|
||||
|
||||
val isHiddenFile = name.startsWith(".")
|
||||
if (!showHidden && (isHiddenFile || path.isPathInHiddenFolder())) {
|
||||
return@queryCursor
|
||||
}
|
||||
|
||||
@@ -294,7 +301,6 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
||||
return@queryCursor
|
||||
}
|
||||
|
||||
val path = cursor.getStringValue(MediaStore.Files.FileColumns.DATA)
|
||||
val lastModified = cursor.getLongValue(MediaStore.Files.FileColumns.DATE_MODIFIED) * 1000
|
||||
|
||||
val mimetype = fullMimetype.substringBefore("/")
|
||||
|
||||
@@ -7,6 +7,7 @@ import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.print.PrintAttributes
|
||||
import android.print.PrintManager
|
||||
import android.util.Base64
|
||||
import android.view.inputmethod.EditorInfo
|
||||
import android.webkit.WebResourceRequest
|
||||
import android.webkit.WebView
|
||||
@@ -143,6 +144,7 @@ class ReadTextActivity : SimpleActivity() {
|
||||
when (menuItem.itemId) {
|
||||
R.id.menu_search -> openSearch()
|
||||
R.id.menu_save -> saveText()
|
||||
R.id.menu_save_as -> saveAsText()
|
||||
R.id.menu_open_with -> openPath(intent.dataString!!, true)
|
||||
R.id.menu_print -> printText()
|
||||
else -> return@setOnMenuItemClickListener false
|
||||
@@ -164,10 +166,14 @@ class ReadTextActivity : SimpleActivity() {
|
||||
}, 250)
|
||||
}
|
||||
|
||||
private fun saveText(shouldExitAfterSaving: Boolean = false) {
|
||||
private fun updateFilePath() {
|
||||
if (filePath.isEmpty()) {
|
||||
filePath = getRealPathFromURI(intent.data!!) ?: ""
|
||||
}
|
||||
}
|
||||
|
||||
private fun saveAsText(shouldExitAfterSaving: Boolean = false) {
|
||||
updateFilePath()
|
||||
|
||||
if (filePath.isEmpty()) {
|
||||
SaveAsDialog(this, filePath, true) { _, filename ->
|
||||
@@ -181,6 +187,7 @@ class ReadTextActivity : SimpleActivity() {
|
||||
} else {
|
||||
SELECT_SAVE_FILE_INTENT
|
||||
}
|
||||
@Suppress("DEPRECATION")
|
||||
startActivityForResult(this, requestCode)
|
||||
}
|
||||
}
|
||||
@@ -199,6 +206,21 @@ class ReadTextActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun saveText(shouldExitAfterSaving: Boolean = false) {
|
||||
updateFilePath()
|
||||
|
||||
if (filePath.isEmpty()) {
|
||||
saveAsText(shouldExitAfterSaving)
|
||||
} else if (hasStoragePermission()) {
|
||||
val file = File(filePath)
|
||||
getFileOutputStream(file.toFileDirItem(this), true) {
|
||||
saveTextContent(it, shouldExitAfterSaving, true)
|
||||
}
|
||||
} else {
|
||||
toast(R.string.no_storage_permissions)
|
||||
}
|
||||
}
|
||||
|
||||
private fun saveTextContent(outputStream: OutputStream?, shouldExitAfterSaving: Boolean, shouldOverwriteOriginalText: Boolean) {
|
||||
if (outputStream != null) {
|
||||
val currentText = binding.readTextView.text.toString()
|
||||
@@ -229,7 +251,17 @@ class ReadTextActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
webView.loadData(binding.readTextView.text.toString(), "text/plain", "UTF-8")
|
||||
val text = binding.readTextView.text.toString()
|
||||
ensureBackgroundThread {
|
||||
try {
|
||||
val base64 = Base64.encodeToString(text.toByteArray(), Base64.DEFAULT)
|
||||
runOnUiThread {
|
||||
webView.loadData(base64, "text/plain", "base64")
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
}
|
||||
|
||||
@@ -18,7 +18,21 @@ class SaveAsActivity : SimpleActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(binding.root)
|
||||
tryInitFileManager()
|
||||
}
|
||||
|
||||
private fun tryInitFileManager() {
|
||||
handleStoragePermission { granted ->
|
||||
if (granted) {
|
||||
saveAsDialog()
|
||||
} else {
|
||||
toast(R.string.no_storage_permissions)
|
||||
finish()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun saveAsDialog() {
|
||||
if (intent.action == Intent.ACTION_SEND && intent.extras?.containsKey(Intent.EXTRA_STREAM) == true) {
|
||||
FilePickerDialog(this, pickFile = false, showHidden = config.shouldShowHidden(), showFAB = true, showFavoritesButton = true) {
|
||||
val destination = it
|
||||
@@ -36,8 +50,9 @@ class SaveAsActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
val source = intent.getParcelableExtra<Uri>(Intent.EXTRA_STREAM)!!
|
||||
val filename = getFilenameFromContentUri(source)
|
||||
val originalFilename = getFilenameFromContentUri(source)
|
||||
?: source.toString().getFilenameFromPath()
|
||||
val filename = sanitizeFilename(originalFilename)
|
||||
val mimeType = contentResolver.getType(source)
|
||||
?: intent.type?.takeIf { it != "*/*" }
|
||||
?: filename.getMimeType()
|
||||
@@ -66,4 +81,9 @@ class SaveAsActivity : SimpleActivity() {
|
||||
super.onResume()
|
||||
setupToolbar(binding.activitySaveAsToolbar, NavigationIcon.Arrow)
|
||||
}
|
||||
|
||||
private fun sanitizeFilename(filename: String): String {
|
||||
return filename.replace("[/\\\\<>:\"|?*\u0000-\u001F]".toRegex(), "_")
|
||||
.takeIf { it.isNotBlank() } ?: "unnamed_file"
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,15 @@
|
||||
package org.fossify.filemanager.activities
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.os.Environment
|
||||
import android.provider.Settings
|
||||
import org.fossify.commons.activities.BaseSimpleActivity
|
||||
import org.fossify.commons.dialogs.ConfirmationAdvancedDialog
|
||||
import org.fossify.commons.extensions.hasPermission
|
||||
import android.net.Uri
|
||||
import org.fossify.commons.extensions.showErrorToast
|
||||
import org.fossify.commons.extensions.toast
|
||||
import org.fossify.commons.helpers.PERMISSION_WRITE_STORAGE
|
||||
import org.fossify.commons.helpers.isRPlus
|
||||
import org.fossify.filemanager.R
|
||||
@@ -31,10 +37,23 @@ open class SimpleActivity : BaseSimpleActivity() {
|
||||
R.mipmap.ic_launcher_grey_black
|
||||
)
|
||||
|
||||
companion object {
|
||||
private const val MANAGE_STORAGE_RC = 201
|
||||
}
|
||||
|
||||
override fun getAppLauncherName() = getString(R.string.app_launcher_name)
|
||||
|
||||
override fun getRepositoryName() = "File-Manager"
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
|
||||
super.onActivityResult(requestCode, resultCode, resultData)
|
||||
isAskingPermissions = false
|
||||
if (requestCode == MANAGE_STORAGE_RC && isRPlus()) {
|
||||
actionOnPermission?.invoke(Environment.isExternalStorageManager())
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
fun hasStoragePermission(): Boolean {
|
||||
return if (isRPlus()) {
|
||||
@@ -43,4 +62,39 @@ open class SimpleActivity : BaseSimpleActivity() {
|
||||
hasPermission(PERMISSION_WRITE_STORAGE)
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("InlinedApi")
|
||||
fun handleStoragePermission(callback: (granted: Boolean) -> Unit) {
|
||||
actionOnPermission = null
|
||||
if (hasStoragePermission()) {
|
||||
callback(true)
|
||||
} else {
|
||||
if (isRPlus()) {
|
||||
ConfirmationAdvancedDialog(this, "", R.string.access_storage_prompt, R.string.ok, 0, false) { success ->
|
||||
if (success) {
|
||||
isAskingPermissions = true
|
||||
actionOnPermission = callback
|
||||
try {
|
||||
val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
|
||||
intent.addCategory("android.intent.category.DEFAULT")
|
||||
intent.data = Uri.parse("package:$packageName")
|
||||
startActivityForResult(intent, MANAGE_STORAGE_RC)
|
||||
} catch (e: android.content.ActivityNotFoundException) {
|
||||
showErrorToast(e)
|
||||
val intent = Intent()
|
||||
intent.action = Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
|
||||
startActivityForResult(intent, MANAGE_STORAGE_RC)
|
||||
} catch (e: SecurityException) {
|
||||
showErrorToast(e)
|
||||
finish()
|
||||
}
|
||||
} else {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
handlePermission(PERMISSION_WRITE_STORAGE, callback)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -101,6 +101,7 @@ import org.fossify.filemanager.extensions.config
|
||||
import org.fossify.filemanager.extensions.isPathOnRoot
|
||||
import org.fossify.filemanager.extensions.isZipFile
|
||||
import org.fossify.filemanager.extensions.setAs
|
||||
import org.fossify.filemanager.extensions.setLastModified
|
||||
import org.fossify.filemanager.extensions.sharePaths
|
||||
import org.fossify.filemanager.extensions.toggleItemVisibility
|
||||
import org.fossify.filemanager.extensions.tryOpenPathIntent
|
||||
@@ -127,7 +128,8 @@ class ItemsAdapter(
|
||||
private val swipeRefreshLayout: SwipeRefreshLayout?,
|
||||
canHaveIndividualViewType: Boolean = true,
|
||||
itemClick: (Any) -> Unit,
|
||||
) : MyRecyclerViewAdapter(activity, recyclerView, itemClick), RecyclerViewFastScroller.OnPopupTextUpdate {
|
||||
) : MyRecyclerViewAdapter(activity, recyclerView, itemClick),
|
||||
RecyclerViewFastScroller.OnPopupTextUpdate {
|
||||
|
||||
private lateinit var fileDrawable: Drawable
|
||||
private lateinit var folderDrawable: Drawable
|
||||
@@ -142,7 +144,9 @@ class ItemsAdapter(
|
||||
|
||||
private val config = activity.config
|
||||
private val viewType = if (canHaveIndividualViewType) {
|
||||
config.getFolderViewType(listItems.firstOrNull { !it.isSectionTitle }?.mPath?.getParentPath() ?: "")
|
||||
config.getFolderViewType(
|
||||
path = listItems.firstOrNull { !it.isSectionTitle }?.mPath?.getParentPath().orEmpty()
|
||||
)
|
||||
} else {
|
||||
config.viewType
|
||||
}
|
||||
@@ -168,7 +172,8 @@ class ItemsAdapter(
|
||||
|
||||
override fun prepareActionMode(menu: Menu) {
|
||||
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_copy_path).isVisible = isOneItemSelected()
|
||||
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() {
|
||||
swipeRefreshLayout?.isRefreshing = false
|
||||
@@ -233,25 +246,37 @@ class ItemsAdapter(
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) {
|
||||
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)
|
||||
setupView(Binding.getByItemViewType(viewType, isListViewType).bind(itemView), fileDirItem)
|
||||
setupView(
|
||||
binding = Binding.getByItemViewType(viewType, isListViewType).bind(itemView),
|
||||
listItem = fileDirItem
|
||||
)
|
||||
}
|
||||
bindViewHolder(holder)
|
||||
}
|
||||
|
||||
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) {
|
||||
var hiddenCnt = 0
|
||||
@@ -270,7 +295,10 @@ class ItemsAdapter(
|
||||
|
||||
private fun confirmSelection() {
|
||||
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()) {
|
||||
finishActMode()
|
||||
} else {
|
||||
@@ -349,7 +377,11 @@ class ItemsAdapter(
|
||||
getShortcutImage(path, drawable) {
|
||||
val intent = Intent(activity, SplashActivity::class.java)
|
||||
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))
|
||||
|
||||
val shortcut = ShortcutInfo.Builder(activity, path)
|
||||
@@ -365,7 +397,8 @@ class ItemsAdapter(
|
||||
|
||||
private fun getShortcutImage(path: String, drawable: Drawable, callback: () -> Unit) {
|
||||
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)) {
|
||||
callback()
|
||||
} else {
|
||||
@@ -386,10 +419,15 @@ class ItemsAdapter(
|
||||
|
||||
try {
|
||||
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)
|
||||
} 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)
|
||||
}
|
||||
|
||||
@@ -414,15 +452,19 @@ class ItemsAdapter(
|
||||
}
|
||||
|
||||
activity.isPathOnOTG(path) -> {
|
||||
activity.getDocumentFile(path)?.listFiles()?.filter { if (shouldShowHidden) true else !it.name!!.startsWith(".") }?.forEach {
|
||||
addFileUris(it.uri.toString(), paths)
|
||||
}
|
||||
activity.getDocumentFile(path)?.listFiles()
|
||||
?.filter { if (shouldShowHidden) true else !it.name!!.startsWith(".") }
|
||||
?.forEach {
|
||||
addFileUris(it.uri.toString(), paths)
|
||||
}
|
||||
}
|
||||
|
||||
else -> {
|
||||
File(path).listFiles()?.filter { if (shouldShowHidden) true else !it.name.startsWith('.') }?.forEach {
|
||||
addFileUris(it.absolutePath, paths)
|
||||
}
|
||||
File(path).listFiles()
|
||||
?.filter { if (shouldShowHidden) true else !it.name.startsWith('.') }
|
||||
?.forEach {
|
||||
addFileUris(it.absolutePath, paths)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -481,11 +523,21 @@ class ItemsAdapter(
|
||||
if (activity.isPathOnRoot(it) || activity.isPathOnRoot(firstFile.path)) {
|
||||
copyMoveRootItems(files, it, isCopyOperation)
|
||||
} 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) {
|
||||
files.forEach { sourceFileDir ->
|
||||
val sourcePath = sourceFileDir.path
|
||||
if (activity.isRestrictedSAFOnlyRoot(sourcePath) && activity.getDoesFilePathExist(sourcePath)) {
|
||||
if (
|
||||
activity.isRestrictedSAFOnlyRoot(sourcePath)
|
||||
&& activity.getDoesFilePathExist(sourcePath)
|
||||
) {
|
||||
activity.deleteFile(sourceFileDir, true) {
|
||||
listener?.refreshFragment()
|
||||
activity.runOnUiThread {
|
||||
@@ -494,8 +546,12 @@ class ItemsAdapter(
|
||||
}
|
||||
} else {
|
||||
val sourceFile = File(sourcePath)
|
||||
if (activity.getDoesFilePathExist(source) && activity.getIsPathDirectory(source) &&
|
||||
sourceFile.list()?.isEmpty() == true && sourceFile.getProperSize(true) == 0L && sourceFile.getFileCount(true) == 0
|
||||
if (
|
||||
activity.getDoesFilePathExist(source)
|
||||
&& activity.getIsPathDirectory(source)
|
||||
&& sourceFile.list()?.isEmpty() == true
|
||||
&& sourceFile.getProperSize(true) == 0L
|
||||
&& sourceFile.getFileCount(true) == 0
|
||||
) {
|
||||
val sourceFolder = sourceFile.toFileDirItem(activity)
|
||||
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)
|
||||
ensureBackgroundThread {
|
||||
val fileCnt = files.size
|
||||
@@ -585,7 +645,11 @@ class ItemsAdapter(
|
||||
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 {
|
||||
tryDecompressingPaths(paths) { success ->
|
||||
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 ->
|
||||
ZipInputStream(BufferedInputStream(activity.getFileInputStreamSync(path))).use { zipInputStream ->
|
||||
try {
|
||||
val fileDirItems = ArrayList<FileDirItem>()
|
||||
var entry = zipInputStream.nextEntry
|
||||
while (entry != null) {
|
||||
val currPath = if (entry.isDirectory) path else "${path.getParentPath().trimEnd('/')}/${entry.fileName}"
|
||||
val fileDirItem = FileDirItem(currPath, entry.fileName, entry.isDirectory, 0, entry.uncompressedSize)
|
||||
val currPath = if (entry.isDirectory) {
|
||||
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)
|
||||
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 ->
|
||||
val zipInputStream = ZipInputStream(BufferedInputStream(activity.getFileInputStreamSync(path)))
|
||||
val zipInputStream =
|
||||
ZipInputStream(BufferedInputStream(activity.getFileInputStreamSync(path)))
|
||||
zipInputStream.use {
|
||||
try {
|
||||
var entry = zipInputStream.nextEntry
|
||||
@@ -650,7 +732,11 @@ class ItemsAdapter(
|
||||
val resolution = getConflictResolution(conflictResolutions, newPath)
|
||||
val doesPathExist = activity.getDoesFilePathExist(newPath)
|
||||
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)) {
|
||||
activity.deleteFolderBg(fileDirItem, false) {
|
||||
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 (!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)
|
||||
}
|
||||
} else {
|
||||
val fos = activity.getFileOutputStreamSync(newPath, newPath.getMimeType())
|
||||
if (fos != null) {
|
||||
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("")) {
|
||||
conflictResolutions[""]!!
|
||||
} else if (conflictResolutions.containsKey(path)) {
|
||||
@@ -708,15 +803,21 @@ class ItemsAdapter(
|
||||
}
|
||||
|
||||
@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 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
|
||||
|
||||
fun zipEntry(name: String) = ZipParameters().also {
|
||||
fun zipEntry(name: String, lastModified: Long) = ZipParameters().also {
|
||||
it.fileNameInZip = name
|
||||
it.lastModifiedFileTime = lastModified
|
||||
if (password != null) {
|
||||
it.isEncryptFiles = true
|
||||
it.encryptionMethod = EncryptionMethod.AES
|
||||
@@ -732,9 +833,11 @@ class ItemsAdapter(
|
||||
queue.push(mainFilePath)
|
||||
if (activity.getIsPathDirectory(mainFilePath)) {
|
||||
name = "${mainFilePath.getFilenameFromPath()}/"
|
||||
val dirModified = File(mainFilePath).lastModified()
|
||||
zout.putNextEntry(
|
||||
ZipParameters().also {
|
||||
it.fileNameInZip = name
|
||||
it.lastModifiedFileTime = dirModified
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -749,9 +852,9 @@ class ItemsAdapter(
|
||||
if (activity.getIsPathDirectory(file.path)) {
|
||||
queue.push(file.path)
|
||||
name = "${name.trimEnd('/')}/"
|
||||
zout.putNextEntry(zipEntry(name))
|
||||
zout.putNextEntry(zipEntry(name, file.modified))
|
||||
} else {
|
||||
zout.putNextEntry(zipEntry(name))
|
||||
zout.putNextEntry(zipEntry(name, file.modified))
|
||||
activity.getFileInputStreamSync(file.path)!!.copyTo(zout)
|
||||
zout.closeEntry()
|
||||
}
|
||||
@@ -764,9 +867,9 @@ class ItemsAdapter(
|
||||
if (activity.getIsPathDirectory(file.absolutePath)) {
|
||||
queue.push(file.absolutePath)
|
||||
name = "${name.trimEnd('/')}/"
|
||||
zout.putNextEntry(zipEntry(name))
|
||||
zout.putNextEntry(zipEntry(name, file.lastModified()))
|
||||
} else {
|
||||
zout.putNextEntry(zipEntry(name))
|
||||
zout.putNextEntry(zipEntry(name, file.lastModified()))
|
||||
activity.getFileInputStreamSync(file.path)!!.copyTo(zout)
|
||||
zout.closeEntry()
|
||||
}
|
||||
@@ -774,8 +877,14 @@ class ItemsAdapter(
|
||||
}
|
||||
|
||||
} else {
|
||||
name = if (base == currentPath) currentPath.getFilenameFromPath() else mainFilePath.relativizeWith(base)
|
||||
zout.putNextEntry(zipEntry(name))
|
||||
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)
|
||||
zout.closeEntry()
|
||||
}
|
||||
@@ -849,7 +958,11 @@ class ItemsAdapter(
|
||||
|
||||
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 = "") {
|
||||
if (newItems.hashCode() != currentItemsHash) {
|
||||
@@ -895,7 +1008,8 @@ class ItemsAdapter(
|
||||
override fun onViewRecycled(holder: ViewHolder) {
|
||||
super.onViewRecycled(holder)
|
||||
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) {
|
||||
Glide.with(activity).clear(icon)
|
||||
}
|
||||
@@ -907,16 +1021,35 @@ class ItemsAdapter(
|
||||
binding.apply {
|
||||
if (listItem.isSectionTitle) {
|
||||
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?.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)
|
||||
} else if (!listItem.isGridTypeDivider) {
|
||||
root.setupViewBackground(activity)
|
||||
itemFrame.isSelected = isSelected
|
||||
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?.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?.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)
|
||||
@@ -945,7 +1078,10 @@ class ItemsAdapter(
|
||||
itemDate?.beVisible()
|
||||
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()
|
||||
.signature(listItem.getKey())
|
||||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||
@@ -970,12 +1106,16 @@ class ItemsAdapter(
|
||||
return activity.resources.getQuantityString(R.plurals.items, children, children)
|
||||
}
|
||||
|
||||
private fun getOTGPublicPath(itemToLoad: String) =
|
||||
"${baseConfig.OTGTreeUri}/document/${baseConfig.OTGPartition}%3A${itemToLoad.substring(baseConfig.OTGPath.length).replace("/", "%2F")}"
|
||||
private fun getOTGPublicPath(itemToLoad: String): String {
|
||||
return "${baseConfig.OTGTreeUri}/document/${baseConfig.OTGPartition}%3A${
|
||||
itemToLoad.substring(baseConfig.OTGPath.length).replace("/", "%2F")
|
||||
}"
|
||||
}
|
||||
|
||||
private fun getImagePathToLoad(path: String): Any {
|
||||
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) {
|
||||
val appInfo = packageInfo.applicationInfo
|
||||
appInfo.sourceDir = path
|
||||
@@ -998,13 +1138,16 @@ class ItemsAdapter(
|
||||
}
|
||||
|
||||
fun initDrawables() {
|
||||
folderDrawable = resources.getColoredDrawableWithColor(R.drawable.ic_folder_vector, properPrimaryColor)
|
||||
folderDrawable =
|
||||
resources.getColoredDrawableWithColor(R.drawable.ic_folder_vector, properPrimaryColor)
|
||||
folderDrawable.alpha = 180
|
||||
fileDrawable = resources.getDrawable(R.drawable.ic_file_generic)
|
||||
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 {
|
||||
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
|
||||
|
||||
data object ItemSection : Binding {
|
||||
override fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding {
|
||||
return ItemSectionBindingAdapter(ItemSectionBinding.inflate(layoutInflater, viewGroup, attachToRoot))
|
||||
override fun inflate(
|
||||
layoutInflater: LayoutInflater,
|
||||
viewGroup: ViewGroup,
|
||||
attachToRoot: Boolean
|
||||
): ItemViewBinding {
|
||||
return ItemSectionBindingAdapter(
|
||||
ItemSectionBinding.inflate(layoutInflater, viewGroup, attachToRoot)
|
||||
)
|
||||
}
|
||||
|
||||
override fun bind(view: View): ItemViewBinding {
|
||||
@@ -1039,8 +1193,14 @@ class ItemsAdapter(
|
||||
}
|
||||
|
||||
data object ItemEmpty : Binding {
|
||||
override fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding {
|
||||
return ItemEmptyBindingAdapter(ItemEmptyBinding.inflate(layoutInflater, viewGroup, attachToRoot))
|
||||
override fun inflate(
|
||||
layoutInflater: LayoutInflater,
|
||||
viewGroup: ViewGroup,
|
||||
attachToRoot: Boolean
|
||||
): ItemViewBinding {
|
||||
return ItemEmptyBindingAdapter(
|
||||
ItemEmptyBinding.inflate(layoutInflater, viewGroup, attachToRoot)
|
||||
)
|
||||
}
|
||||
|
||||
override fun bind(view: View): ItemViewBinding {
|
||||
@@ -1049,8 +1209,14 @@ class ItemsAdapter(
|
||||
}
|
||||
|
||||
data object ItemFileDirList : Binding {
|
||||
override fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding {
|
||||
return ItemFileDirListBindingAdapter(ItemFileDirListBinding.inflate(layoutInflater, viewGroup, attachToRoot))
|
||||
override fun inflate(
|
||||
layoutInflater: LayoutInflater,
|
||||
viewGroup: ViewGroup,
|
||||
attachToRoot: Boolean
|
||||
): ItemViewBinding {
|
||||
return ItemFileDirListBindingAdapter(
|
||||
ItemFileDirListBinding.inflate(layoutInflater, viewGroup, attachToRoot)
|
||||
)
|
||||
}
|
||||
|
||||
override fun bind(view: View): ItemViewBinding {
|
||||
@@ -1059,8 +1225,14 @@ class ItemsAdapter(
|
||||
}
|
||||
|
||||
data object ItemDirGrid : Binding {
|
||||
override fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding {
|
||||
return ItemDirGridBindingAdapter(ItemDirGridBinding.inflate(layoutInflater, viewGroup, attachToRoot))
|
||||
override fun inflate(
|
||||
layoutInflater: LayoutInflater,
|
||||
viewGroup: ViewGroup,
|
||||
attachToRoot: Boolean
|
||||
): ItemViewBinding {
|
||||
return ItemDirGridBindingAdapter(
|
||||
ItemDirGridBinding.inflate(layoutInflater, viewGroup, attachToRoot)
|
||||
)
|
||||
}
|
||||
|
||||
override fun bind(view: View): ItemViewBinding {
|
||||
@@ -1069,8 +1241,14 @@ class ItemsAdapter(
|
||||
}
|
||||
|
||||
data object ItemFileGrid : Binding {
|
||||
override fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding {
|
||||
return ItemFileGridBindingAdapter(ItemFileGridBinding.inflate(layoutInflater, viewGroup, attachToRoot))
|
||||
override fun inflate(
|
||||
layoutInflater: LayoutInflater,
|
||||
viewGroup: ViewGroup,
|
||||
attachToRoot: Boolean
|
||||
): ItemViewBinding {
|
||||
return ItemFileGridBindingAdapter(
|
||||
ItemFileGridBinding.inflate(layoutInflater, viewGroup, attachToRoot)
|
||||
)
|
||||
}
|
||||
|
||||
override fun bind(view: View): ItemViewBinding {
|
||||
@@ -1112,7 +1290,9 @@ class ItemsAdapter(
|
||||
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 itemName: TextView = binding.itemName
|
||||
override val itemIcon: ImageView = binding.itemIcon
|
||||
|
||||
@@ -22,7 +22,9 @@ class ViewPagerAdapter(val activity: SimpleActivity, val tabsToShow: ArrayList<I
|
||||
|
||||
(view as MyViewPagerFragment<*>).apply {
|
||||
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 allowPickingMultipleIntent = activity.intent.getBooleanExtra(Intent.EXTRA_ALLOW_MULTIPLE, false)
|
||||
val getContentMimeType = if (isGetContentIntent) {
|
||||
|
||||
@@ -1,3 +1,15 @@
|
||||
package org.fossify.filemanager.extensions
|
||||
|
||||
fun String.isZipFile() = endsWith(".zip", true)
|
||||
|
||||
fun String.isPathInHiddenFolder(): Boolean {
|
||||
val parts = split("/")
|
||||
for (i in 1 until parts.size - 1) {
|
||||
val part = parts[i]
|
||||
val isHidden = part.startsWith(".") && part != "." && part != ".." && part.isNotEmpty()
|
||||
if (isHidden) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -257,7 +257,7 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF
|
||||
}
|
||||
|
||||
var lastModified = lastModifieds.remove(curPath)
|
||||
val isDirectory = if (lastModified != null) false else file.isDirectory
|
||||
val isDirectory = file.isDirectory
|
||||
val children = if (isDirectory && getProperChildCount) file.getDirectChildrenCount(context, showHidden) else 0
|
||||
val size = if (isDirectory) {
|
||||
if (isSortingBySize) {
|
||||
@@ -377,6 +377,7 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF
|
||||
return files
|
||||
}
|
||||
|
||||
val normalizedText = text.normalizeString()
|
||||
val sorting = context!!.config.getFolderSorting(path)
|
||||
FileDirItem.sorting = context!!.config.getFolderSorting(currentPath)
|
||||
val isSortingBySize = sorting and SORT_BY_SIZE != 0
|
||||
@@ -386,7 +387,7 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF
|
||||
}
|
||||
|
||||
if (it.isDirectory) {
|
||||
if (it.name.contains(text, true)) {
|
||||
if (it.name.normalizeString().contains(normalizedText, true)) {
|
||||
val fileDirItem = getListItemFromFile(it, isSortingBySize, HashMap(), false)
|
||||
if (fileDirItem != null) {
|
||||
files.add(fileDirItem)
|
||||
@@ -395,7 +396,7 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF
|
||||
|
||||
files.addAll(searchFiles(text, it.absolutePath))
|
||||
} else {
|
||||
if (it.name.contains(text, true)) {
|
||||
if (it.name.normalizeString().contains(normalizedText, true)) {
|
||||
val fileDirItem = getListItemFromFile(it, isSortingBySize, HashMap(), false)
|
||||
if (fileDirItem != null) {
|
||||
files.add(fileDirItem)
|
||||
|
||||
@@ -12,6 +12,7 @@ import org.fossify.commons.extensions.getDoesFilePathExist
|
||||
import org.fossify.commons.extensions.getFilenameFromPath
|
||||
import org.fossify.commons.extensions.getLongValue
|
||||
import org.fossify.commons.extensions.getStringValue
|
||||
import org.fossify.commons.extensions.normalizeString
|
||||
import org.fossify.commons.extensions.showErrorToast
|
||||
import org.fossify.commons.helpers.VIEW_TYPE_GRID
|
||||
import org.fossify.commons.helpers.VIEW_TYPE_LIST
|
||||
@@ -24,6 +25,7 @@ import org.fossify.filemanager.activities.SimpleActivity
|
||||
import org.fossify.filemanager.adapters.ItemsAdapter
|
||||
import org.fossify.filemanager.databinding.RecentsFragmentBinding
|
||||
import org.fossify.filemanager.extensions.config
|
||||
import org.fossify.filemanager.extensions.isPathInHiddenFolder
|
||||
import org.fossify.filemanager.helpers.MAX_COLUMN_COUNT
|
||||
import org.fossify.filemanager.interfaces.ItemOperationsListener
|
||||
import org.fossify.filemanager.models.ListItem
|
||||
@@ -178,9 +180,11 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
||||
val name = cursor.getStringValue(FileColumns.DISPLAY_NAME) ?: path.getFilenameFromPath()
|
||||
val size = cursor.getLongValue(FileColumns.SIZE)
|
||||
val modified = cursor.getLongValue(FileColumns.DATE_MODIFIED) * 1000
|
||||
val fileDirItem = ListItem(path, name, false, 0, size, modified, false, false)
|
||||
if ((showHidden || !name.startsWith(".")) && activity?.getDoesFilePathExist(path) == true) {
|
||||
val isHiddenFile = name.startsWith(".")
|
||||
val shouldShow = showHidden || (!isHiddenFile && !path.isPathInHiddenFolder())
|
||||
if (shouldShow && activity?.getDoesFilePathExist(path) == true) {
|
||||
if (wantedMimeTypes.any { isProperMimeType(it, path, false) }) {
|
||||
val fileDirItem = ListItem(path, name, false, 0, size, modified, false, false)
|
||||
listItems.add(fileDirItem)
|
||||
}
|
||||
}
|
||||
@@ -242,7 +246,11 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
||||
|
||||
override fun searchQueryChanged(text: String) {
|
||||
lastSearchedText = text
|
||||
val filtered = filesIgnoringSearch.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList<ListItem>
|
||||
val normalizedText = text.normalizeString()
|
||||
val filtered = filesIgnoringSearch.filter {
|
||||
it.mName.normalizeString().contains(normalizedText, true)
|
||||
}.toMutableList() as ArrayList<ListItem>
|
||||
|
||||
binding.apply {
|
||||
(recentsList.adapter as? ItemsAdapter)?.updateItems(filtered, text)
|
||||
recentsPlaceholder.beVisibleIf(filtered.isEmpty())
|
||||
|
||||
@@ -28,6 +28,7 @@ import org.fossify.commons.extensions.getLongValue
|
||||
import org.fossify.commons.extensions.getProperBackgroundColor
|
||||
import org.fossify.commons.extensions.getProperPrimaryColor
|
||||
import org.fossify.commons.extensions.getStringValue
|
||||
import org.fossify.commons.extensions.normalizeString
|
||||
import org.fossify.commons.extensions.queryCursor
|
||||
import org.fossify.commons.extensions.showErrorToast
|
||||
import org.fossify.commons.extensions.updateTextColors
|
||||
@@ -95,7 +96,6 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
||||
}
|
||||
|
||||
totalSpace.text = String.format(context.getString(R.string.total_storage), "…")
|
||||
getSizes(volumeName)
|
||||
|
||||
if (volumeNames.size > 1) {
|
||||
root.children.forEach { it.beGone() }
|
||||
@@ -155,8 +155,7 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
||||
val tealColor = context.resources.getColor(R.color.md_teal_700)
|
||||
val pinkColor = context.resources.getColor(R.color.md_pink_700)
|
||||
|
||||
volumes.entries.forEach { (it, volumeBinding) ->
|
||||
getSizes(it)
|
||||
volumes.values.forEach { volumeBinding ->
|
||||
volumeBinding.apply {
|
||||
mainStorageUsageProgressbar.setIndicatorColor(properPrimaryColor)
|
||||
mainStorageUsageProgressbar.trackColor = properPrimaryColor.adjustAlpha(LOWER_ALPHA)
|
||||
@@ -335,12 +334,14 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
||||
freeSpaceValue.text = freeStorageSpace.formatSizeThousand()
|
||||
totalSpace.text = String.format(context.getString(R.string.total_storage), totalStorageSpace.formatSizeThousand())
|
||||
freeSpaceLabel.beVisible()
|
||||
getSizes(volumeName)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun searchQueryChanged(text: String) {
|
||||
val normalizedText = text.normalizeString()
|
||||
lastSearchedText = text
|
||||
binding.apply {
|
||||
if (text.isNotEmpty()) {
|
||||
@@ -365,8 +366,10 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
||||
} else {
|
||||
showProgressBar()
|
||||
ensureBackgroundThread {
|
||||
val start = System.currentTimeMillis()
|
||||
val filtered = allDeviceListItems.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList<ListItem>
|
||||
val filtered = allDeviceListItems.filter {
|
||||
it.mName.normalizeString().contains(normalizedText, true)
|
||||
}.toMutableList() as ArrayList<ListItem>
|
||||
|
||||
if (lastSearchedText != text) {
|
||||
return@ensureBackgroundThread
|
||||
}
|
||||
|
||||
@@ -63,6 +63,11 @@
|
||||
android:layout_height="wrap_content"
|
||||
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
|
||||
android:id="@+id/settings_use_english_holder"
|
||||
style="@style/SettingsHolderSwitchStyle"
|
||||
|
||||
@@ -11,8 +11,13 @@
|
||||
<item
|
||||
android:id="@+id/menu_save"
|
||||
android:icon="@drawable/ic_save_vector"
|
||||
android:title="@string/save_as"
|
||||
android:title="@string/save"
|
||||
app:showAsAction="always" />
|
||||
<item
|
||||
android:id="@+id/menu_save_as"
|
||||
android:showAsAction="never"
|
||||
android:title="@string/save_as"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/menu_print"
|
||||
android:icon="@drawable/ic_print_vector"
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
unqualifiedResLocale=en-US
|
||||
@@ -2,37 +2,46 @@
|
||||
<resources>
|
||||
<string name="app_launcher_name">مدير الملفات</string>
|
||||
<string name="press_back_again">اضغط مرة أخرى للخروج</string>
|
||||
<string name="go_to_home_folder">الذهاب الى الرئيسية</string>
|
||||
<string name="set_as_home_folder">تعيين كمجلد رئيسي</string>
|
||||
<string name="home_folder_updated">تم تحديث المجلد الرئيسي</string>
|
||||
<string name="copy_path">نسخ المسار الى الحافظة</string>
|
||||
<string name="path_copied">تم نسخ المسار</string>
|
||||
<string name="go_to_home_folder">اذهب إلى المجلد المنزل</string>
|
||||
<string name="set_as_home_folder">عيّن كمجلد المنزل</string>
|
||||
<string name="home_folder_updated">حُدِّث مجلد المنزل</string>
|
||||
<string name="copy_path">انسخ المسار إلى الحافظة</string>
|
||||
<string name="path_copied">نُسخ المسار</string>
|
||||
<string name="select_audio_file">الرجاء تحديد ملف صوتي</string>
|
||||
<string name="search_folder">مجلد البحث</string>
|
||||
<string name="rooted_device_only">تعمل هذه العملية فقط على الأجهزة المتجذرة</string>
|
||||
<string name="recents">الأحدث</string>
|
||||
<string name="show_recents">إظهار الأحدث</string>
|
||||
<string name="invert_colors">عكس الألوان</string>
|
||||
<string name="compress">ضغط</string>
|
||||
<string name="show_recents">أظهر الأحدث</string>
|
||||
<string name="invert_colors">اعكس الألوان</string>
|
||||
<string name="compress">اضغط</string>
|
||||
<string name="decompress">فك الضغط</string>
|
||||
<string name="compress_as">ضغط كا</string>
|
||||
<string name="compressing">ضغط…</string>
|
||||
<string name="decompressing">فك الضغط…</string>
|
||||
<string name="compress_as">اضغط كَ</string>
|
||||
<string name="compressing">جار الضغط…</string>
|
||||
<string name="decompressing">جارِ فك الضغط…</string>
|
||||
<string name="compression_successful">نجح الضغط</string>
|
||||
<string name="decompression_successful">نجح التفكيك</string>
|
||||
<string name="compressing_failed">أخفق الضغط</string>
|
||||
<string name="decompressing_failed">أخفق إلغاء الضغط</string>
|
||||
<string name="manage_favorites">إدارة المفضلة</string>
|
||||
<string name="go_to_favorite">الذهاب الى المفضلة</string>
|
||||
<string name="decompression_successful">نجح فك ضغط</string>
|
||||
<string name="compressing_failed">فشل الضغط</string>
|
||||
<string name="decompressing_failed">فشل فك الضغط</string>
|
||||
<string name="manage_favorites">أدر المفضلة</string>
|
||||
<string name="go_to_favorite">اذهب الى المفضلة</string>
|
||||
<string name="favorites_activity_placeholder">يمكنك إضافة المجلدات المستخدمة بشكل متكرر إلى المفضلة لسهولة الوصول إليها من أي مكان.</string>
|
||||
<string name="file_editor">محرر الملفات</string>
|
||||
<string name="file_editor">محرّر الملفات</string>
|
||||
<string name="storage_analysis">تحليل التخزين</string>
|
||||
<string name="images">الصور</string>
|
||||
<string name="videos">الفيديوهات</string>
|
||||
<string name="archives">الأرشيف</string>
|
||||
<string name="others">الاخرين</string>
|
||||
<string name="others">الآخرين</string>
|
||||
<string name="total_storage">إجمالي مساحة التخزين: %s</string>
|
||||
<string name="enable_root_access">تفعيل الدخول الى مسار الروت</string>
|
||||
<string name="press_back_twice">تتطلب الضغط على رجوع مرتين لمغادرة التطبيق</string>
|
||||
<string name="enable_root_access">فعّل وصول الجذر (root)</string>
|
||||
<string name="press_back_twice">يتطلب النقر على رجوع مرتين لمغادرة التطبيق</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>
|
||||
@@ -34,7 +34,7 @@
|
||||
<string name="file_editor">Файлов редактор</string>
|
||||
<string name="storage_analysis">Анализ на съхранението</string>
|
||||
<string name="images">Изображения</string>
|
||||
<string name="videos">Видеоклипове</string>
|
||||
<string name="videos">Видео</string>
|
||||
<string name="archives">Архиви</string>
|
||||
<string name="others">Други</string>
|
||||
<string name="total_storage">Общо място за съхранение: %s</string>
|
||||
@@ -44,4 +44,4 @@
|
||||
<string name="storage_free">свободно</string>
|
||||
<string name="documents">Документи</string>
|
||||
<string name="audio">Аудиофайлове</string>
|
||||
</resources>
|
||||
</resources>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="go_to_home_folder">راو و دوبلگه هووه</string>
|
||||
<string name="set_as_home_folder">سامووݩ و عونوان دوبلگه هووه</string>
|
||||
<string name="copy_path">لف گیری تور منه کیلیپ بورد</string>
|
||||
</resources>
|
||||
@@ -28,11 +28,11 @@
|
||||
<string name="decompression_successful">Dekomprimeret</string>
|
||||
<string name="compressing_failed">Komprimering mislykkedes</string>
|
||||
<string name="decompressing_failed">Dekomprimering mislykkedes</string>
|
||||
<string name="manage_favorites">Håndter favoritter</string>
|
||||
<string name="manage_favorites">Administrer favoritter</string>
|
||||
<string name="go_to_favorite">Gå til favorit</string>
|
||||
<string name="favorites_activity_placeholder">Du kan føje ofte brugte mapper til favoritter, så du hurtigt kan finde dem igen.</string>
|
||||
<string name="favorites_activity_placeholder">Du kan føje ofte brugte mapper til favoritter for nem adgang overalt.</string>
|
||||
<string name="file_editor">Fileditor</string>
|
||||
<string name="storage_analysis">Lagersanalyse</string>
|
||||
<string name="storage_analysis">Lagringsanalyse</string>
|
||||
<string name="images">Billeder</string>
|
||||
<string name="videos">Videoer</string>
|
||||
<string name="audio">Lyd</string>
|
||||
@@ -42,6 +42,6 @@
|
||||
<string name="others">Andre</string>
|
||||
<string name="storage_free">fri</string>
|
||||
<string name="total_storage">Samlet lagerplads: %s</string>
|
||||
<string name="enable_root_access">Aktiver root-adgang</string>
|
||||
<string name="press_back_twice">Kræv to tryk på tilbage for at forlade appen</string>
|
||||
<string name="enable_root_access">Aktivér root-adgang</string>
|
||||
<string name="press_back_twice">Dobbelttryk på Tilbage for at afslutte appen</string>
|
||||
</resources>
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_launcher_name">File Manager</string>
|
||||
</resources>
|
||||
@@ -1,2 +1,6 @@
|
||||
<?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>
|
||||
@@ -39,7 +39,7 @@
|
||||
<string name="downloads">Lataukset</string>
|
||||
<string name="archives">Arkistot</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="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>
|
||||
|
||||
@@ -26,8 +26,8 @@
|
||||
<string name="decompressing">Décompression…</string>
|
||||
<string name="compression_successful">Compression réussie</string>
|
||||
<string name="decompression_successful">Décompression réussie</string>
|
||||
<string name="compressing_failed">Compression ratée</string>
|
||||
<string name="decompressing_failed">Décompression ratée</string>
|
||||
<string name="compressing_failed">Échec de la compression</string>
|
||||
<string name="decompressing_failed">Échec de la décompression</string>
|
||||
<string name="manage_favorites">Gérer les favoris</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>
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_launcher_name">מנהל קבצים</string>
|
||||
<string name="press_back_again">לחץ שוב אחורה כדי לצאת</string>
|
||||
<string name="go_to_home_folder">עבור לתיקיית הבית</string>
|
||||
<string name="app_launcher_name">מנהל הקבצים</string>
|
||||
<string name="press_back_again">ליציאה יש ללחוץ אחורה פעם נוספת</string>
|
||||
<string name="go_to_home_folder">מעבר לתיקיית הבית</string>
|
||||
<string name="set_as_home_folder">הגדר כתיקיית בית</string>
|
||||
<string name="home_folder_updated">תיקיית הבית עודכנה</string>
|
||||
<string name="copy_path">העתק נתיב ללוח</string>
|
||||
<string name="path_copied">הנתיב הועתק</string>
|
||||
<string name="select_audio_file">אנא בחר קובץ שמע</string>
|
||||
<string name="search_folder">חיפוש תיקייה</string>
|
||||
<string name="rooted_device_only">פעולה זו פועלת רק במכשירים עם רוט</string>
|
||||
<string name="rooted_device_only">פעולה זו עובדת רק במכשירים עם רוט</string>
|
||||
<string name="recents">אחרונים</string>
|
||||
<string name="show_recents">הצג את האחרונים</string>
|
||||
<string name="show_recents">הצג אחרונים</string>
|
||||
<string name="invert_colors">הפוך צבעים</string>
|
||||
<string name="open_as">פתח כ</string>
|
||||
<string name="text_file">קובץ טקסט</string>
|
||||
@@ -19,29 +19,29 @@
|
||||
<string name="audio_file">קובץ שמע</string>
|
||||
<string name="video_file">קובץ וידיאו</string>
|
||||
<string name="other_file">קובץ אחר</string>
|
||||
<string name="compress">לדחוס</string>
|
||||
<string name="decompress">לבטל דחיסה</string>
|
||||
<string name="compress_as">דחוס כ</string>
|
||||
<string name="compress">דחיסה</string>
|
||||
<string name="decompress">חילוץ</string>
|
||||
<string name="compress_as">דחיסה כ</string>
|
||||
<string name="compressing">דוחס…</string>
|
||||
<string name="decompressing">משחרר דחיסה…</string>
|
||||
<string name="decompressing">מחלץ…</string>
|
||||
<string name="compression_successful">הדחיסה הצליחה</string>
|
||||
<string name="decompression_successful">שחרור הדחיסה הצליח</string>
|
||||
<string name="decompression_successful">החילוץ הצליח</string>
|
||||
<string name="compressing_failed">הדחיסה נכשלה</string>
|
||||
<string name="decompressing_failed">פעולת שחרור הדחיסה נכשל</string>
|
||||
<string name="decompressing_failed">החילוץ נכשל</string>
|
||||
<string name="manage_favorites">נהל מועדפים</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="storage_analysis">ניתוח אחסון</string>
|
||||
<string name="images">תמונות</string>
|
||||
<string name="videos">וידיאו</string>
|
||||
<string name="audio">אודיו</string>
|
||||
<string name="videos">סרטונים</string>
|
||||
<string name="audio">שמע</string>
|
||||
<string name="documents">מסמכים</string>
|
||||
<string name="downloads">הורדות</string>
|
||||
<string name="archives">ארכיון</string>
|
||||
<string name="others">אחרים</string>
|
||||
<string name="storage_free">חינם</string>
|
||||
<string name="storage_free">חופשי</string>
|
||||
<string name="total_storage">שטח אחסון כולל: %s</string>
|
||||
<string name="enable_root_access">אפשר גישת שורש</string>
|
||||
<string name="press_back_twice">דרוש לחיצה על חזרה פעמיים כדי לצאת מהאפליקציה דרוש לחיצה על חזרה פעמיים כדי לצאת מהאפליקציה</string>
|
||||
<string name="press_back_twice">דרישת לחיצה כפולה על כפתור אחורה כדי לצאת מהאפליקציה</string>
|
||||
</resources>
|
||||
@@ -1,14 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<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="path_copied">Kelias nukopijuotas</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="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="video_file">Vaizdo įrašo failas</string>
|
||||
<string name="other_file">Kitas failas</string>
|
||||
@@ -19,16 +19,29 @@
|
||||
<string name="decompressing">Išskleidžiama…</string>
|
||||
<string name="compression_successful">Glaudinimas sėkmingas</string>
|
||||
<string name="decompression_successful">Išskleidimas sėkmingas</string>
|
||||
<string name="compressing_failed">Nepavyko glaudinti</string>
|
||||
<string name="decompressing_failed">Nepavyko išskleisti</string>
|
||||
<string name="file_editor">Failų redaktorius</string>
|
||||
<string name="compressing_failed">Glaudinimas nepavyko.</string>
|
||||
<string name="decompressing_failed">Išskleidimas nepavyko.</string>
|
||||
<string name="file_editor">Failų rengyklė</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="audio">Garso įrašai</string>
|
||||
<string name="documents">Dokumentai</string>
|
||||
<string name="downloads">Atsiuntimai</string>
|
||||
<string name="downloads">Atsisiuntimai</string>
|
||||
<string name="archives">Archyvai</string>
|
||||
<string name="others">Kiti</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>
|
||||
@@ -1,2 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="press_back_again">Притиснете назад уште еднаш за да излезете</string>
|
||||
<string name="app_launcher_name">Управител со датотеки</string>
|
||||
</resources>
|
||||
@@ -9,7 +9,7 @@
|
||||
<string name="path_copied">Bane kopiert</string>
|
||||
<string name="select_audio_file">Vennligst velg en lydfil</string>
|
||||
<string name="search_folder">Søk etter mappe</string>
|
||||
<string name="rooted_device_only">Denne handlingen fungerer bare på rootede enheter.</string>
|
||||
<string name="rooted_device_only">Denne handlingen fungerer bare på enheter med rot-tilgang</string>
|
||||
<string name="recents">Nylige</string>
|
||||
<string name="show_recents">Vis nylige</string>
|
||||
<string name="open_as">Åpne som</string>
|
||||
@@ -40,4 +40,8 @@
|
||||
<string name="storage_free">ledig</string>
|
||||
<string name="total_storage">Total lagring: %s</string>
|
||||
<string name="enable_root_access">Aktiver root-tilgang</string>
|
||||
<string name="invert_colors">Inverter farger</string>
|
||||
<string name="storage_analysis">Lagringsanalyse</string>
|
||||
<string name="others">Andre</string>
|
||||
<string name="press_back_twice">Trykk Tilbake to ganger for å avslutte appen</string>
|
||||
</resources>
|
||||
@@ -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,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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="go_to_home_folder">Ir para Pasta Principal</string>
|
||||
<string name="set_as_home_folder">Definir como Pasta Principal</string>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<string name="recents">Недавнее</string>
|
||||
<string name="show_recents">Показывать недавнее</string>
|
||||
<string name="invert_colors">Инвертировать цвета</string>
|
||||
<string name="open_as">Открыть как…</string>
|
||||
<string name="open_as">Открыть как</string>
|
||||
<string name="text_file">Текст</string>
|
||||
<string name="image_file">Изображение</string>
|
||||
<string name="audio_file">Звуковой файл</string>
|
||||
@@ -21,7 +21,7 @@
|
||||
<string name="other_file">Другое</string>
|
||||
<string name="compress">Сжать</string>
|
||||
<string name="decompress">Извлечь</string>
|
||||
<string name="compress_as">Сжать как…</string>
|
||||
<string name="compress_as">Сжать как</string>
|
||||
<string name="compressing">Сжатие…</string>
|
||||
<string name="decompressing">Извлечение…</string>
|
||||
<string name="compression_successful">Сжатие успешно</string>
|
||||
|
||||
@@ -43,4 +43,5 @@
|
||||
<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="press_back_twice">Vyžadovať stlačenie Späť na opustenie apky dvakrát</string>
|
||||
<string name="audio">Zvuk</string>
|
||||
</resources>
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_launcher_name">Филе Манагер</string>
|
||||
<string name="app_launcher_name">Менаџер фајлова</string>
|
||||
<string name="press_back_again">Притисните поново да бисте изашли</string>
|
||||
<string name="go_to_home_folder">Идите у почетни фолдер</string>
|
||||
<string name="set_as_home_folder">Постави као почетни фолдер</string>
|
||||
|
||||
@@ -18,19 +18,19 @@
|
||||
<string name="image_file">Resim dosyası</string>
|
||||
<string name="audio_file">Ses 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="decompress">Çöz</string>
|
||||
<string name="decompress">Çıkar</string>
|
||||
<string name="compress_as">Sıkıştır</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="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="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="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="storage_analysis">Depolama analizi</string>
|
||||
<string name="images">Resimler</string>
|
||||
@@ -44,4 +44,4 @@
|
||||
<string name="total_storage">Toplam depolama: %s</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>
|
||||
</resources>
|
||||
</resources>
|
||||
@@ -1,13 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_launcher_name">Менеджер Файлів</string>
|
||||
<string name="press_back_again">Для виходу натисніть Назад ще раз</string>
|
||||
<string name="app_launcher_name">Менеджер файлів</string>
|
||||
<string name="press_back_again">Для виходу натисніть «Назад» ще раз</string>
|
||||
<string name="go_to_home_folder">Перейти у домашню теку</string>
|
||||
<string name="set_as_home_folder">Встановити як головну теку</string>
|
||||
<string name="home_folder_updated">Головну теку оновлено</string>
|
||||
<string name="copy_path">Скопіювати шлях у буфер обміну</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="rooted_device_only">Ця команда працює лише на пристроях з root-доступом</string>
|
||||
<string name="recents">Останні</string>
|
||||
@@ -44,4 +44,4 @@
|
||||
<string name="total_storage">Всього пам\'яті: %s</string>
|
||||
<string name="enable_root_access">Активувати root-доступ</string>
|
||||
<string name="press_back_twice">Натисніть «Назад» двічі, щоб вийти зі застосунку</string>
|
||||
</resources>
|
||||
</resources>
|
||||
@@ -14,8 +14,8 @@
|
||||
<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="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="go_to_favorite">Đến mục yêu thích</string>
|
||||
<string name="manage_favorites">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="set_as_home_folder">Đặt làm thư mục chính</string>
|
||||
<string name="audio">Âm thanh</string>
|
||||
@@ -44,4 +44,4 @@
|
||||
<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="press_back_twice">Nhấn Quay lại hai lần để thoát ứng dụng</string>
|
||||
</resources>
|
||||
</resources>
|
||||
@@ -1,4 +1,47 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="images">圖片</string>
|
||||
</resources>
|
||||
<string name="videos">影片</string>
|
||||
<string name="app_launcher_name">檔案管理器</string>
|
||||
<string name="press_back_again">再按一次返回以離開</string>
|
||||
<string name="go_to_home_folder">前往主資料夾</string>
|
||||
<string name="set_as_home_folder">設為主資料夾</string>
|
||||
<string name="home_folder_updated">主資料夾已更新</string>
|
||||
<string name="copy_path">路徑複製到剪貼簿</string>
|
||||
<string name="path_copied">路徑已複製</string>
|
||||
<string name="select_audio_file">請選擇一個音訊檔案</string>
|
||||
<string name="search_folder">搜尋資料夾</string>
|
||||
<string name="rooted_device_only">這個操作只對已 root 的裝置有用</string>
|
||||
<string name="recents">最近瀏覽</string>
|
||||
<string name="show_recents">顯示最近瀏覽</string>
|
||||
<string name="invert_colors">顏色反轉</string>
|
||||
<string name="open_as">開啟為</string>
|
||||
<string name="text_file">文字檔案</string>
|
||||
<string name="image_file">圖片檔案</string>
|
||||
<string name="audio_file">音源檔案</string>
|
||||
<string name="video_file">影片檔案</string>
|
||||
<string name="other_file">其他檔案</string>
|
||||
<string name="compress">壓縮</string>
|
||||
<string name="decompress">解壓縮</string>
|
||||
<string name="compress_as">壓縮為</string>
|
||||
<string name="compressing">壓縮中…</string>
|
||||
<string name="decompressing">解壓縮中…</string>
|
||||
<string name="compression_successful">壓縮成功</string>
|
||||
<string name="decompression_successful">解壓縮成功</string>
|
||||
<string name="compressing_failed">壓縮失敗</string>
|
||||
<string name="decompressing_failed">解壓縮失敗</string>
|
||||
<string name="manage_favorites">管理我的最愛</string>
|
||||
<string name="go_to_favorite">前往我的最愛</string>
|
||||
<string name="favorites_activity_placeholder">你可將常用資料夾加入我的最愛,方便從任何地方開啟。</string>
|
||||
<string name="file_editor">檔案編輯器</string>
|
||||
<string name="storage_analysis">儲存空間分析</string>
|
||||
<string name="audio">音訊</string>
|
||||
<string name="documents">文件</string>
|
||||
<string name="downloads">下載</string>
|
||||
<string name="archives">封存</string>
|
||||
<string name="others">其他</string>
|
||||
<string name="storage_free">可用空間</string>
|
||||
<string name="total_storage">總儲存空間:%s</string>
|
||||
<string name="enable_root_access">啟用 root 權限</string>
|
||||
<string name="press_back_twice">需按兩次返回鍵才能離開 app</string>
|
||||
</resources>
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_launcher_name">簡易檔案管理器</string>
|
||||
<string name="app_launcher_name">檔案管理器</string>
|
||||
<string name="press_back_again">再按一次返回以離開</string>
|
||||
<string name="go_to_home_folder">前往主資料夾</string>
|
||||
<string name="set_as_home_folder">設為主資料夾</string>
|
||||
@@ -44,4 +44,4 @@
|
||||
<string name="show_recents">顯示最近造訪</string>
|
||||
<string name="documents">文件</string>
|
||||
<string name="storage_free">可用空間</string>
|
||||
</resources>
|
||||
</resources>
|
||||
+58
@@ -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
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
Fixed:
|
||||
|
||||
• Fixed folders showing up incorrectly as files in some cases
|
||||
@@ -0,0 +1,16 @@
|
||||
Added:
|
||||
|
||||
• Added a separate "Save as" option in the text editor
|
||||
|
||||
Changed:
|
||||
|
||||
• Save button now overwrites files directly in the text editor
|
||||
• Search now ignores accents and diacritics
|
||||
• Updated translations
|
||||
|
||||
Fixed:
|
||||
|
||||
• Fixed folders showing up incorrectly as files in the copy/move dialog
|
||||
• Fixed error when saving files with unsupported characters
|
||||
• Fixed printing text files containing a "#"
|
||||
• Fixed files in hidden folders showing up in the recent tab
|
||||
@@ -0,0 +1,8 @@
|
||||
Changed:
|
||||
|
||||
• Updated translations
|
||||
|
||||
Fixed:
|
||||
|
||||
• Fixed files from hidden folders showing up in storage tab browser
|
||||
|
||||
@@ -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. ⚡
|
||||
|
||||
🚀 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.
|
||||
• 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.
|
||||
|
||||
🔐 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.
|
||||
• 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.
|
||||
• 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.
|
||||
|
||||
📁 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.
|
||||
• 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 :
|
||||
• Profitez d'une expérience open-source sans publicités qui vous donne le contrôle, pas des applications appartenant à des géants.
|
||||
🌈 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 du numérique.
|
||||
• 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
|
||||
Code open-source : https://www.github.com/FossifyOrg
|
||||
Rejoignez la communauté sur Reddit : https://www.reddit.com/r/Fossify
|
||||
Restez connecté via Telegram : https://t.me/Fossify
|
||||
Découvre plus d'applis de Fossify : https://www.fossify.org
|
||||
Code open-source : https://www.github.com/FossifyOrg
|
||||
Rejoignez la communauté sur Reddit : https://www.reddit.com/r/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.
|
||||
• 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Í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.
|
||||
• 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ị.
|
||||
• 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ộ.
|
||||
|
||||
📁 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.
|
||||
• 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ồ.
|
||||
• 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
|
||||
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
|
||||
@@ -0,0 +1,30 @@
|
||||
厭倦了檔案管理器會拖慢您的速度並侵犯您的私私嗎?使用 Fossify File Manager 解鎖閃電般快速、安全且完全可自訂的體驗。 ⚡
|
||||
|
||||
🚀 以極快的導航統治您的數位世界:
|
||||
• 透過簡單的壓縮和傳輸功能快速管理您的檔案,讓您的數位生活井然有序。
|
||||
• 使用可自訂的主資料夾和我的最愛捷徑快速存取最常用的資料夾。
|
||||
• 透過直觀的導航、搜尋和排序選項,在幾秒鐘內找到您需要的內容。
|
||||
|
||||
🔐 以無與倫比的私隱和安全性強化您的資料:
|
||||
• 使用密碼、圖案或指紋鎖定保護敏感檔案的隱藏項目或整個應用程式。
|
||||
• 無需網絡連線-您的檔案在您的裝置上保持私密且安全。
|
||||
|
||||
💾 像專業人士一樣掌控您的儲存:
|
||||
• 透過輕鬆的檔案和資料夾壓縮來清理空間,以最大限度地發揮設備的潛力。
|
||||
• 使用內建儲存分析工具辨識並清理佔用空間的檔案。
|
||||
• 無縫導航根檔案、SD 卡和 USB 裝置以實現整體組織。
|
||||
|
||||
📁 使用便利工具優化您的工作流程:
|
||||
• 建立桌面捷徑以即時存取最常用的檔案和資料夾。
|
||||
• 使用輕量級檔案編輯器輕鬆編輯、列印或閱讀文件,並透過縮放手勢進行增強。
|
||||
|
||||
🌈 透過無限的客製化打造您自己的:
|
||||
• 享受無廣告、開源體驗,讓您而非企業巨頭掌控一切。
|
||||
• 個人化顏色、主題和圖示以反映您獨特的風格和偏好。
|
||||
|
||||
拋棄臃腫、侵犯私隱的檔案管理器,使用 Fossify File Manager 體驗真正的自由。立即下載並重新掌控您的數位生活!
|
||||
|
||||
探索 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,30 @@
|
||||
厭倦了檔案管理器會拖慢您的速度並侵犯您的隱私嗎?使用 Fossify File Manager 解鎖閃電般快速、安全且完全可自訂的體驗。 ⚡
|
||||
|
||||
🚀 以極快的導航統治您的數位世界:
|
||||
• 透過簡單的壓縮和傳輸功能快速管理您的檔案,讓您的數位生活井井有條。
|
||||
• 使用可自訂的主資料夾和最喜愛的捷徑快速存取最常用的資料夾。
|
||||
• 透過直覺的導航、搜尋和排序選項,在幾秒鐘內找到您需要的內容。
|
||||
|
||||
🔐 以無與倫比的隱私和安全性強化您的資料:
|
||||
• 使用密碼、圖案或指紋鎖定保護敏感檔案的隱藏項目或整個應用程式。
|
||||
• 無需上網-您的檔案在您的裝置上保持私密且安全。
|
||||
|
||||
💾 像專業人士一樣掌控您的儲存:
|
||||
• 透過輕鬆的檔案和資料夾壓縮來清理空間,以最大限度地發揮設備的潛力。
|
||||
• 使用內建儲存分析工具辨識並清理佔用空間的檔案。
|
||||
• 無縫導航根檔案、SD 卡和 USB 裝置以實現整體組織。
|
||||
|
||||
📁 使用便利工具優化您的工作流程:
|
||||
• 建立桌面捷徑以即時存取最常用的檔案和資料夾。
|
||||
• 使用輕量級檔案編輯器輕鬆編輯、列印或閱讀文檔,並透過縮放手勢進行增強。
|
||||
|
||||
🌈 透過無限的客製化打造您自己的:
|
||||
• 享受無廣告、開源體驗,讓您而非企業巨頭掌控一切。
|
||||
• 個人化顏色、主題和圖示以反映您獨特的風格和偏好。
|
||||
|
||||
拋棄臃腫、侵犯隱私的檔案管理器,使用 Fossify File Manager 體驗真正的自由。立即下載並重新掌控您的數位生活!
|
||||
|
||||
探索 Fossify 的更多應用程式:https://www.fossify.org
|
||||
原始碼:https://www.github.com/FossifyOrg
|
||||
加入 Reddit 社群:https://www.reddit.com/r/Fossify
|
||||
在 Telegram 上連接:https://t.me/Fossify
|
||||
@@ -18,3 +18,8 @@ org.gradle.jvmargs=-Xmx4g
|
||||
# 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
|
||||
# org.gradle.parallel=true
|
||||
|
||||
# Versioning
|
||||
VERSION_NAME=1.3.1
|
||||
VERSION_CODE=9
|
||||
APP_ID=org.fossify.filemanager
|
||||
+10
-11
@@ -1,41 +1,40 @@
|
||||
[versions]
|
||||
#jetbrains
|
||||
kotlin = "1.9.25"
|
||||
kotlin = "2.2.20"
|
||||
#Detekt
|
||||
detekt = "1.23.3"
|
||||
detekt = "1.23.8"
|
||||
detektCompose = "0.4.27"
|
||||
#AndroidX
|
||||
androidx-swiperefreshlayout = "1.1.0"
|
||||
androidx-documentfile = "1.1.0"
|
||||
#Fossify
|
||||
commons = "2.0.1"
|
||||
commons = "5.3.0"
|
||||
#Other
|
||||
autofittextview = "0.2.1"
|
||||
gestureviews = "2.8.3"
|
||||
rootshell = "1.6"
|
||||
roottools = "87d3d22e93"
|
||||
rootshell = "bc7e5d398e"
|
||||
roottools = "965c154e20"
|
||||
zip4j = "2.11.5"
|
||||
#Gradle
|
||||
gradlePlugins-agp = "8.10.0"
|
||||
gradlePlugins-agp = "8.11.1"
|
||||
#build
|
||||
app-build-compileSDKVersion = "34"
|
||||
app-build-targetSDK = "34"
|
||||
app-build-minimumSDK = "26"
|
||||
app-build-javaVersion = "VERSION_17"
|
||||
app-build-kotlinJVMTarget = "17"
|
||||
#versioning
|
||||
app-version-appId = "org.fossify.filemanager"
|
||||
app-version-versionCode = "3"
|
||||
app-version-versionName = "1.1.0"
|
||||
[libraries]
|
||||
#AndroidX
|
||||
androidx-swiperefreshlayout = { module = "androidx.swiperefreshlayout:swiperefreshlayout", version.ref = "androidx-swiperefreshlayout" }
|
||||
androidx-documentfile = { module = "androidx.documentfile:documentfile", version.ref = "androidx-documentfile" }
|
||||
#Compose
|
||||
compose-detekt = { module = "io.nlopez.compose.rules:detekt", version.ref = "detektCompose" }
|
||||
#Fossify
|
||||
fossify-commons = { module = "org.fossify:commons", version.ref = "commons" }
|
||||
#Other
|
||||
autofittextview = { module = "me.grantland:autofittextview", version.ref = "autofittextview" }
|
||||
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" }
|
||||
zip4j = { module = "net.lingala.zip4j:zip4j", version.ref = "zip4j" }
|
||||
[plugins]
|
||||
|
||||
Vendored
BIN
Binary file not shown.
+1
-1
@@ -1,6 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
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
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
@@ -86,8 +86,7 @@ done
|
||||
# shellcheck disable=SC2034
|
||||
APP_BASE_NAME=${0##*/}
|
||||
# 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
|
||||
' "$PWD" ) || exit
|
||||
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD=maximum
|
||||
@@ -206,7 +205,7 @@ fi
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# 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.
|
||||
# * 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.
|
||||
|
||||
@@ -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>
|
||||
Reference in new issue
Block a user