mirror of
https://github.com/FossifyOrg/File-Manager.git
synced 2026-11-04 12:03:02 -05:00
Compare commits
259
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
005cba755b | ||
|
|
c95de62b90 | ||
|
|
5d1894ba42 | ||
|
|
7f074fe17c | ||
|
|
1ee4d0636e | ||
|
|
2b0873f4b1 | ||
|
|
9ae4b70ae6 | ||
|
|
ef7524c013 | ||
|
|
5a1027caa1 | ||
|
|
68e06aab8e | ||
|
|
aef9f9566e | ||
|
|
82b3c98c9a | ||
|
|
6bfcd8d1ea | ||
|
|
7a90732f96 | ||
|
|
e299956da2 | ||
|
|
a5d92c7f76 | ||
|
|
7844f4b85a | ||
|
|
95548acecc | ||
|
|
9c29ef68a8 | ||
|
|
3fdb6cd380 | ||
|
|
0856c68e2a | ||
|
|
4080ea9b06 | ||
|
|
ef41411d5b | ||
|
|
f79e8b5ebd | ||
|
|
a2eeb40309 | ||
|
|
a4390a22b0 | ||
|
|
6591c26758 | ||
|
|
577f510c61 | ||
|
|
0e22535a06 | ||
|
|
77e6f4fb9e | ||
|
|
c1253e1de2 | ||
|
|
ab8989ad92 | ||
|
|
bfe06e62c6 | ||
|
|
fea0394118 | ||
|
|
d7636f9d4a | ||
|
|
02c508d4e1 | ||
|
|
328a0a8f3c | ||
|
|
a5d0f3cf1b | ||
|
|
87b1dabca3 | ||
|
|
aabfcde47b | ||
|
|
77b2611dc9 | ||
|
|
99f13929e3 | ||
|
|
6cf1bfe5c5 | ||
|
|
f53f84677c | ||
|
|
7493541725 | ||
|
|
5e316369df | ||
|
|
878fa50963 | ||
|
|
893526efa0 | ||
|
|
2d3cb1a555 | ||
|
|
5b4a82615e | ||
|
|
a660857cc6 | ||
|
|
d8bef198cd | ||
|
|
3a3ccfe959 | ||
|
|
60c6fbc304 | ||
|
|
3f0f9e2df8 | ||
|
|
74b34e8fb0 | ||
|
|
06db3c88b4 | ||
|
|
d6987db37f | ||
|
|
d98e78eda1 | ||
|
|
1fbfc978ca | ||
|
|
c9b998f4a7 | ||
|
|
2258a58a2d | ||
|
|
eb95cb540d | ||
|
|
8f74c493e0 | ||
|
|
a2d6e4d7c2 | ||
|
|
1480831b15 | ||
|
|
0211111a34 | ||
|
|
64032a3082 | ||
|
|
463d016d68 | ||
|
|
4346de59d2 | ||
|
|
9f5b41d6fa | ||
|
|
6879b7871a | ||
|
|
efcc213ed6 | ||
|
|
432c9bf929 | ||
|
|
900d9c197b | ||
|
|
b09e037e61 | ||
|
|
ddb8afdfc6 | ||
|
|
4cfc92b0fe | ||
|
|
a1f06bfcbc | ||
|
|
be63034b1c | ||
|
|
8a8b9b9da8 | ||
|
|
c76a56061b | ||
|
|
23f0e848c4 | ||
|
|
65ebbf059a | ||
|
|
8887b510ca | ||
|
|
1f8efdf9fe | ||
|
|
7b6e49111a | ||
|
|
60f30bca73 | ||
|
|
d056d6d57b | ||
|
|
1e64ef351c | ||
|
|
1b6241aaff | ||
|
|
dd6f701f39 | ||
|
|
16e51ca4f5 | ||
|
|
0dea8e0576 | ||
|
|
323c882128 | ||
|
|
1476234289 | ||
|
|
b96aee5a2d | ||
|
|
e25bd7750f | ||
|
|
ae8ca6b2e8 | ||
|
|
07fb062a0d | ||
|
|
75c5d3c5ec | ||
|
|
8e5ccc05ba | ||
|
|
26fc5f1c22 | ||
|
|
86e79e5e0b | ||
|
|
42ba12b1ce | ||
|
|
2a36e87588 | ||
|
|
a155339348 | ||
|
|
24eb4ad3cd | ||
|
|
0d36078e70 | ||
|
|
67d77b3431 | ||
|
|
d9ef0f78b3 | ||
|
|
f57e492c16 | ||
|
|
5f7b12e736 | ||
|
|
40091ff02b | ||
|
|
8231505848 | ||
|
|
3b8eb29e28 | ||
|
|
baaf7ffa80 | ||
|
|
046c2c1bc0 | ||
|
|
2237f84971 | ||
|
|
4cc0ce941c | ||
|
|
ff35055f8f | ||
|
|
8eea02c2aa | ||
|
|
c0d7f64551 | ||
|
|
749c398aa6 | ||
|
|
8812e0ba58 | ||
|
|
6a30697c16 | ||
|
|
146ad3b129 | ||
|
|
b3fc8c7e6f | ||
|
|
599b2cad0b | ||
|
|
f0631e274a | ||
|
|
90741e28ea | ||
|
|
d1ed44688e | ||
|
|
eb75e8bafc | ||
|
|
8c723eb004 | ||
|
|
4ed2868456 | ||
|
|
547bf5421e | ||
|
|
c97940a3d9 | ||
|
|
2889538bf7 | ||
|
|
d911299f2f | ||
|
|
e8ca000dce | ||
|
|
b098f3dc99 | ||
|
|
f820b6e617 | ||
|
|
a0bbc177d7 | ||
|
|
0a0590cab6 | ||
|
|
7a4adb8783 | ||
|
|
044ac49a9c | ||
|
|
5921c27328 | ||
|
|
c12d1d7631 | ||
|
|
0c9892a9e5 | ||
|
|
57fbcea742 | ||
|
|
7ae71a5d22 | ||
|
|
00b21b8b0f | ||
|
|
18ae5f3229 | ||
|
|
b1b1599cc5 | ||
|
|
97791feaed | ||
|
|
a4c8da6c31 | ||
|
|
e6c465d9d0 | ||
|
|
ee20fa406f | ||
|
|
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.6.4 (16)
|
||||||
@@ -18,7 +18,7 @@ body:
|
|||||||
required: true
|
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."
|
- 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
|
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
|
required: true
|
||||||
- label: "I have read the FAQs inside the app (Menu -> About -> FAQs) and my problem isn't listed."
|
- label: "I have read the FAQs inside the app (Menu -> About -> FAQs) and my problem isn't listed."
|
||||||
required: true
|
required: true
|
||||||
@@ -77,9 +77,6 @@ body:
|
|||||||
What did you do for the bug to show up?
|
What did you do for the bug to show up?
|
||||||
|
|
||||||
If you can't cause the bug to show up again reliably (and hence don't have a proper set of steps to give us), please still try to give as many details as possible on how you think you encountered the bug.
|
If you can't cause the bug to show up again reliably (and hence don't have a proper set of steps to give us), please still try to give as many details as possible on how you think you encountered the bug.
|
||||||
|
|
||||||
⚠️ Please **DO NOT** add links to SimpleMobileTools issues as they can be deleted at any time. Instead, copy-paste any useful information or instructions manually.
|
|
||||||
|
|
||||||
placeholder: |
|
placeholder: |
|
||||||
1. Go to '...'
|
1. Go to '...'
|
||||||
2. Click on '....'
|
2. Click on '....'
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
blank_issues_enabled: false
|
blank_issues_enabled: false
|
||||||
contact_links:
|
contact_links:
|
||||||
- name: Questions
|
- name: Questions
|
||||||
url: https://github.com/FossifyOrg/File-Manager/discussions
|
url: https://github.com/orgs/FossifyOrg/discussions
|
||||||
about: Please ask and answer questions here.
|
about: Please ask and answer questions here.
|
||||||
@@ -16,7 +16,7 @@ body:
|
|||||||
options:
|
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."
|
- 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
|
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
|
required: true
|
||||||
- label: "I have read the FAQs inside the app (Menu -> About -> FAQs) and my problem isn't listed."
|
- label: "I have read the FAQs inside the app (Menu -> About -> FAQs) and my problem isn't listed."
|
||||||
required: true
|
required: true
|
||||||
@@ -33,8 +33,6 @@ body:
|
|||||||
label: Feature description
|
label: Feature description
|
||||||
description: |
|
description: |
|
||||||
Explain how you want the app's look or behavior to change to suit your needs.
|
Explain how you want the app's look or behavior to change to suit your needs.
|
||||||
|
|
||||||
⚠️ Please **DO NOT** add links to SimpleMobileTools issues as they can be deleted at any time. Instead, copy-paste any useful information manually.
|
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
|
|||||||
+20
-6
@@ -1,4 +1,18 @@
|
|||||||
version: 2
|
version: 2
|
||||||
|
|
||||||
|
registries:
|
||||||
|
maven-google:
|
||||||
|
type: maven-repository
|
||||||
|
url: "https://dl.google.com/dl/android/maven2/"
|
||||||
|
|
||||||
|
maven-central:
|
||||||
|
type: maven-repository
|
||||||
|
url: "https://repo.maven.apache.org/maven2"
|
||||||
|
|
||||||
|
jitpack:
|
||||||
|
type: maven-repository
|
||||||
|
url: "https://www.jitpack.io"
|
||||||
|
|
||||||
updates:
|
updates:
|
||||||
- package-ecosystem: "bundler"
|
- package-ecosystem: "bundler"
|
||||||
directory: "/"
|
directory: "/"
|
||||||
@@ -8,19 +22,21 @@ updates:
|
|||||||
prefix: "chore"
|
prefix: "chore"
|
||||||
prefix-development: "chore"
|
prefix-development: "chore"
|
||||||
include: "scope"
|
include: "scope"
|
||||||
assignees:
|
|
||||||
- "naveensingh"
|
|
||||||
|
|
||||||
- package-ecosystem: "gradle"
|
- package-ecosystem: "gradle"
|
||||||
directory: "/"
|
directory: "/"
|
||||||
|
registries:
|
||||||
|
- maven-central
|
||||||
|
- maven-google
|
||||||
|
- jitpack
|
||||||
schedule:
|
schedule:
|
||||||
interval: "weekly"
|
interval: "weekly"
|
||||||
commit-message:
|
commit-message:
|
||||||
prefix: "chore"
|
prefix: "chore"
|
||||||
prefix-development: "chore"
|
prefix-development: "chore"
|
||||||
include: "scope"
|
include: "scope"
|
||||||
assignees:
|
ignore:
|
||||||
- "naveensingh"
|
- dependency-name: "org.fossify:commons"
|
||||||
|
|
||||||
- package-ecosystem: "github-actions"
|
- package-ecosystem: "github-actions"
|
||||||
directory: "/"
|
directory: "/"
|
||||||
@@ -30,5 +46,3 @@ updates:
|
|||||||
prefix: "chore"
|
prefix: "chore"
|
||||||
prefix-development: "chore"
|
prefix-development: "chore"
|
||||||
include: "scope"
|
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:
|
jobs:
|
||||||
call-image-minimizer-workflow:
|
call-image-minimizer-workflow:
|
||||||
uses: FossifyOrg/.github/.github/workflows/image-minimizer.yml@main
|
uses: FossifyOrg/.github/.github/workflows/image-minimizer.yml@main
|
||||||
secrets:
|
secrets: inherit
|
||||||
FOSSIFYBOT_TOKEN: ${{ secrets.FOSSIFYBOT_TOKEN }}
|
|
||||||
@@ -2,11 +2,10 @@ name: No Response
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '0 12 * * *' # Runs daily at noon
|
- cron: "0 12 * * *" # Runs daily at noon
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
call-no-response-workflow:
|
call-no-response-workflow:
|
||||||
uses: FossifyOrg/.github/.github/workflows/no-response.yml@main
|
uses: FossifyOrg/.github/.github/workflows/no-response.yml@main
|
||||||
secrets:
|
secrets: inherit
|
||||||
FOSSIFYBOT_TOKEN: ${{ secrets.FOSSIFYBOT_TOKEN }}
|
|
||||||
@@ -4,12 +4,7 @@ on:
|
|||||||
pull_request_target:
|
pull_request_target:
|
||||||
types: [opened]
|
types: [opened]
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
# write permission is not required as FOSSIFYBOT_TOKEN is used
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
call-pr-labeler-workflow:
|
call-pr-labeler-workflow:
|
||||||
uses: FossifyOrg/.github/.github/workflows/pr-labeler.yml@main
|
uses: FossifyOrg/.github/.github/workflows/pr-labeler.yml@main
|
||||||
secrets:
|
secrets: inherit
|
||||||
FOSSIFYBOT_TOKEN: ${{ secrets.FOSSIFYBOT_TOKEN }}
|
|
||||||
@@ -2,7 +2,11 @@ name: PR
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ master ]
|
branches: [main]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
call-pr-workflow:
|
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,9 +2,17 @@ name: Testing build (on PR)
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ master ]
|
branches: [main]
|
||||||
types: [ labeled, opened, synchronize, reopened ]
|
types: [labeled, opened, synchronize, reopened]
|
||||||
|
paths-ignore:
|
||||||
|
- ".github/**"
|
||||||
|
- "CHANGELOG.md"
|
||||||
|
- "docs/**"
|
||||||
|
- "fastlane/**"
|
||||||
|
- "LICENSE"
|
||||||
|
- "README.md"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
call-testing-build-workflow:
|
call-testing-build-workflow:
|
||||||
uses: FossifyOrg/.github/.github/workflows/testing-build.yml@main
|
uses: FossifyOrg/.github/.github/workflows/testing-build.yml@main
|
||||||
|
secrets: inherit
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
name: Update Fossify Commons
|
||||||
|
|
||||||
|
on:
|
||||||
|
repository_dispatch:
|
||||||
|
types: [update-commons]
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: "0 6 * * 0"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update-commons:
|
||||||
|
uses: FossifyOrg/.github/.github/workflows/update-commons.yml@main
|
||||||
|
secrets: inherit
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
name: Update lint baselines
|
||||||
|
|
||||||
|
on:
|
||||||
|
repository_dispatch:
|
||||||
|
types: [update-lint-baselines]
|
||||||
|
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
|
keystore.properties
|
||||||
fastlane/fastlane.json
|
fastlane/fastlane.json
|
||||||
fastlane/report.xml
|
fastlane/report.xml
|
||||||
|
.kotlin/
|
||||||
+116
-16
@@ -1,5 +1,4 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||||
@@ -7,23 +6,104 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
## [1.1.0] - 2025-05-21
|
## [1.6.4] - 2026-11-03
|
||||||
|
### Changed
|
||||||
|
- Updated translations
|
||||||
|
|
||||||
|
## [1.6.3] - 2026-10-20
|
||||||
|
### Changed
|
||||||
|
- Updated translations
|
||||||
|
|
||||||
|
## [1.6.2] - 2026-10-10
|
||||||
|
### Changed
|
||||||
|
- Updated translations
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fixed the modification of the original timestamp when decompressing folders ([#190])
|
||||||
|
|
||||||
|
## [1.6.1] - 2026-02-14
|
||||||
|
### Changed
|
||||||
|
- Updated translations
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fixed file size calculations to use SI decimal units (divide by 1000)
|
||||||
|
|
||||||
|
## [1.6.0] - 2026-01-30
|
||||||
### Added
|
### Added
|
||||||
|
- Added support for custom fonts
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Updated translations
|
||||||
|
|
||||||
|
## [1.5.0] - 2025-12-16
|
||||||
|
### Changed
|
||||||
|
- Updated translations
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fixed an issue where existing files were overwritten when saving new files ([#131])
|
||||||
|
|
||||||
|
## [1.4.0] - 2025-10-29
|
||||||
|
### Changed
|
||||||
|
- Compatibility updates for Android 15 & 16
|
||||||
|
- Updated translations
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fixed duplicated entries when viewing protected ZIP files ([#76])
|
||||||
|
|
||||||
|
## [1.3.1] - 2025-10-02
|
||||||
|
### Changed
|
||||||
|
- Updated translations
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fixed files from hidden folders showing up in storage tab browser ([#217])
|
||||||
|
- Fixed an issue where existing files were overwritten when saving new files ([#131])
|
||||||
|
|
||||||
|
## [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])
|
- Added SHA-1 and SHA-256 hashes to file properties ([#149])
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- Replaced checkboxes with switches
|
- Replaced checkboxes with switches
|
||||||
- Updated translations
|
- Updated translations
|
||||||
|
|
||||||
### Removed
|
### Removed
|
||||||
|
|
||||||
- Dropped support for Android 7 and older versions
|
- Dropped support for Android 7 and older versions
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- Files saved via `Save As` option are now named properly ([#37])
|
- Files saved via `Save As` option are now named properly ([#37])
|
||||||
- Decompressed folders are now named properly ([#120])
|
- Decompressed folders are now named properly ([#120])
|
||||||
- Text editor no longer resets on device rotation ([#106])
|
- Text editor no longer resets on device rotation ([#106])
|
||||||
@@ -33,36 +113,56 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- Fixed invisible content when using app lock ([#150])
|
- Fixed invisible content when using app lock ([#150])
|
||||||
|
|
||||||
## [1.0.1] - 2024-03-17
|
## [1.0.1] - 2024-03-17
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- Folders now use primary/accent color.
|
- Folders now use primary/accent color.
|
||||||
- Enhanced search performance in the text editor.
|
- Enhanced search performance in the text editor.
|
||||||
- Added some translations.
|
- Added some translations.
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- Addressed unnecessary delays when renaming files.
|
- Addressed unnecessary delays when renaming files.
|
||||||
- Fixed unresponsive behavior when viewing contents of a zip file.
|
- Fixed unresponsive behavior when viewing contents of a zip file.
|
||||||
- Disabled the use of invalid characters such as `/` for batch file renaming.
|
- Disabled the use of invalid characters such as `/` for batch file renaming.
|
||||||
- Fixed invisible sort menu when viewing storage summary.
|
- Fixed invisible sort menu when viewing storage summary.
|
||||||
|
|
||||||
## [1.0.0] - 2024-01-07
|
## [1.0.0] - 2024-01-07
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Initial release
|
- Initial release
|
||||||
|
|
||||||
[Unreleased]: https://github.com/FossifyOrg/File-Manager/compare/1.1.0...HEAD
|
|
||||||
[1.1.0]: https://github.com/FossifyOrg/File-Manager/compare/1.0.1...1.1.0
|
|
||||||
[1.0.1]: https://github.com/FossifyOrg/File-Manager/compare/1.0.0...1.0.1
|
|
||||||
[1.0.0]: https://github.com/FossifyOrg/File-Manager/releases/tag/1.0.0
|
|
||||||
|
|
||||||
[#27]: https://github.com/FossifyOrg/File-Manager/issues/27
|
[#27]: https://github.com/FossifyOrg/File-Manager/issues/27
|
||||||
[#37]: https://github.com/FossifyOrg/File-Manager/issues/37
|
[#37]: https://github.com/FossifyOrg/File-Manager/issues/37
|
||||||
[#136]: https://github.com/FossifyOrg/File-Manager/issues/136
|
[#76]: https://github.com/FossifyOrg/File-Manager/issues/76
|
||||||
|
[#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
|
[#105]: https://github.com/FossifyOrg/File-Manager/issues/105
|
||||||
[#106]: https://github.com/FossifyOrg/File-Manager/issues/106
|
[#106]: https://github.com/FossifyOrg/File-Manager/issues/106
|
||||||
[#120]: https://github.com/FossifyOrg/File-Manager/issues/120
|
[#120]: https://github.com/FossifyOrg/File-Manager/issues/120
|
||||||
|
[#131]: https://github.com/FossifyOrg/File-Manager/issues/131
|
||||||
|
[#136]: https://github.com/FossifyOrg/File-Manager/issues/136
|
||||||
[#149]: https://github.com/FossifyOrg/File-Manager/issues/149
|
[#149]: https://github.com/FossifyOrg/File-Manager/issues/149
|
||||||
[#150]: https://github.com/FossifyOrg/File-Manager/issues/150
|
[#150]: https://github.com/FossifyOrg/File-Manager/issues/150
|
||||||
|
[#176]: https://github.com/FossifyOrg/File-Manager/issues/176
|
||||||
|
[#190]: https://github.com/FossifyOrg/File-Manager/issues/190
|
||||||
|
[#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.6.4...HEAD
|
||||||
|
[1.6.4]: https://github.com/FossifyOrg/File-Manager/compare/1.6.3...1.6.4
|
||||||
|
[1.6.3]: https://github.com/FossifyOrg/File-Manager/compare/1.6.2...1.6.3
|
||||||
|
[1.6.2]: https://github.com/FossifyOrg/File-Manager/compare/1.6.1...1.6.2
|
||||||
|
[1.6.1]: https://github.com/FossifyOrg/File-Manager/compare/1.6.0...1.6.1
|
||||||
|
[1.6.0]: https://github.com/FossifyOrg/File-Manager/compare/1.5.0...1.6.0
|
||||||
|
[1.5.0]: https://github.com/FossifyOrg/File-Manager/compare/1.4.0...1.5.0
|
||||||
|
[1.4.0]: https://github.com/FossifyOrg/File-Manager/compare/1.3.1...1.4.0
|
||||||
|
[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
|
||||||
+158
-118
@@ -1,112 +1,116 @@
|
|||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
CFPropertyList (3.0.7)
|
CFPropertyList (3.0.8)
|
||||||
base64
|
|
||||||
nkf
|
|
||||||
rexml
|
|
||||||
abbrev (0.1.2)
|
abbrev (0.1.2)
|
||||||
addressable (2.8.7)
|
addressable (2.9.2)
|
||||||
public_suffix (>= 2.0.2, < 7.0)
|
public_suffix (>= 2.0.2, < 8.0)
|
||||||
artifactory (3.0.17)
|
artifactory (3.0.17)
|
||||||
atomos (0.1.3)
|
atomos (0.1.3)
|
||||||
aws-eventstream (1.3.2)
|
aws-eventstream (1.4.1)
|
||||||
aws-partitions (1.1097.0)
|
aws-partitions (1.1300.0)
|
||||||
aws-sdk-core (3.223.0)
|
aws-sdk-core (3.263.0)
|
||||||
aws-eventstream (~> 1, >= 1.3.0)
|
aws-eventstream (~> 1, >= 1.4.1)
|
||||||
aws-partitions (~> 1, >= 1.992.0)
|
aws-partitions (~> 1, >= 1.992.0)
|
||||||
aws-sigv4 (~> 1.9)
|
aws-sigv4 (~> 1.9)
|
||||||
base64
|
base64
|
||||||
|
bigdecimal
|
||||||
jmespath (~> 1, >= 1.6.1)
|
jmespath (~> 1, >= 1.6.1)
|
||||||
logger
|
logger
|
||||||
aws-sdk-kms (1.100.0)
|
rexml (~> 3.4, >= 3.4.2)
|
||||||
aws-sdk-core (~> 3, >= 3.216.0)
|
aws-sdk-kms (1.138.0)
|
||||||
|
aws-sdk-core (~> 3, >= 3.263.0)
|
||||||
aws-sigv4 (~> 1.5)
|
aws-sigv4 (~> 1.5)
|
||||||
aws-sdk-s3 (1.185.0)
|
aws-sdk-s3 (1.237.0)
|
||||||
aws-sdk-core (~> 3, >= 3.216.0)
|
aws-sdk-core (~> 3, >= 3.263.0)
|
||||||
aws-sdk-kms (~> 1)
|
aws-sdk-kms (~> 1)
|
||||||
aws-sigv4 (~> 1.5)
|
aws-sigv4 (~> 1.5)
|
||||||
aws-sigv4 (1.11.0)
|
aws-sigv4 (1.12.1)
|
||||||
aws-eventstream (~> 1, >= 1.0.2)
|
aws-eventstream (~> 1, >= 1.0.2)
|
||||||
babosa (1.0.4)
|
babosa (1.0.4)
|
||||||
base64 (0.2.0)
|
base64 (0.3.0)
|
||||||
|
benchmark (0.5.0)
|
||||||
|
bigdecimal (4.1.3)
|
||||||
|
cgi (0.5.2)
|
||||||
claide (1.1.0)
|
claide (1.1.0)
|
||||||
colored (1.2)
|
colored (1.2)
|
||||||
colored2 (3.1.2)
|
colored2 (3.1.2)
|
||||||
commander (4.6.0)
|
commander (4.6.0)
|
||||||
highline (~> 2.0.0)
|
highline (~> 2.0.0)
|
||||||
|
csv (3.3.7)
|
||||||
declarative (0.0.20)
|
declarative (0.0.20)
|
||||||
digest-crc (0.7.0)
|
digest-crc (0.7.0)
|
||||||
rake (>= 12.0.0, < 14.0.0)
|
rake (>= 12.0.0, < 14.0.0)
|
||||||
domain_name (0.6.20240107)
|
domain_name (0.7.20261007)
|
||||||
dotenv (2.8.1)
|
dotenv (2.8.1)
|
||||||
emoji_regex (3.2.3)
|
emoji_regex (3.2.3)
|
||||||
excon (0.112.0)
|
erb (6.0.7)
|
||||||
faraday (1.10.4)
|
excon (1.10.0)
|
||||||
faraday-em_http (~> 1.0)
|
faraday (2.15.1)
|
||||||
faraday-em_synchrony (~> 1.0)
|
faraday-net_http (>= 2.0, < 3.6)
|
||||||
faraday-excon (~> 1.1)
|
json
|
||||||
faraday-httpclient (~> 1.0)
|
logger
|
||||||
faraday-multipart (~> 1.0)
|
faraday-cookie_jar (0.0.8)
|
||||||
faraday-net_http (~> 1.0)
|
|
||||||
faraday-net_http_persistent (~> 1.0)
|
|
||||||
faraday-patron (~> 1.0)
|
|
||||||
faraday-rack (~> 1.0)
|
|
||||||
faraday-retry (~> 1.0)
|
|
||||||
ruby2_keywords (>= 0.0.4)
|
|
||||||
faraday-cookie_jar (0.0.7)
|
|
||||||
faraday (>= 0.8.0)
|
faraday (>= 0.8.0)
|
||||||
http-cookie (~> 1.0.0)
|
http-cookie (>= 1.0.0)
|
||||||
faraday-em_http (1.0.0)
|
faraday-follow_redirects (0.5.0)
|
||||||
faraday-em_synchrony (1.0.0)
|
faraday (>= 1, < 3)
|
||||||
faraday-excon (1.1.0)
|
faraday-multipart (1.2.0)
|
||||||
faraday-httpclient (1.0.1)
|
|
||||||
faraday-multipart (1.1.0)
|
|
||||||
multipart-post (~> 2.0)
|
multipart-post (~> 2.0)
|
||||||
faraday-net_http (1.0.2)
|
faraday-net_http (3.5.0)
|
||||||
faraday-net_http_persistent (1.2.0)
|
net-http (~> 0.5)
|
||||||
faraday-patron (1.0.0)
|
faraday-retry (2.4.0)
|
||||||
faraday-rack (1.0.0)
|
faraday (~> 2.0)
|
||||||
faraday-retry (1.0.3)
|
fastimage (2.4.3)
|
||||||
faraday_middleware (1.2.1)
|
fastlane (2.241.2)
|
||||||
faraday (~> 1.0)
|
CFPropertyList (>= 2.3, < 5.0.0)
|
||||||
fastimage (2.4.0)
|
abbrev (~> 0.1)
|
||||||
fastlane (2.227.2)
|
addressable (>= 2.9.0, < 3.0.0)
|
||||||
CFPropertyList (>= 2.3, < 4.0.0)
|
|
||||||
addressable (>= 2.8, < 3.0.0)
|
|
||||||
artifactory (~> 3.0)
|
artifactory (~> 3.0)
|
||||||
aws-sdk-s3 (~> 1.0)
|
aws-sdk-s3 (~> 1.197)
|
||||||
babosa (>= 1.0.3, < 2.0.0)
|
babosa (>= 1.0.3, < 2.0.0)
|
||||||
bundler (>= 1.12.0, < 3.0.0)
|
base64 (~> 0.2)
|
||||||
|
benchmark (>= 0.1.0)
|
||||||
|
bundler (>= 2.4.0, < 5.0.0)
|
||||||
|
cgi (~> 0.4)
|
||||||
colored (~> 1.2)
|
colored (~> 1.2)
|
||||||
commander (~> 4.6)
|
commander (~> 4.6)
|
||||||
|
csv (~> 3.3)
|
||||||
dotenv (>= 2.1.1, < 3.0.0)
|
dotenv (>= 2.1.1, < 3.0.0)
|
||||||
emoji_regex (>= 0.1, < 4.0)
|
emoji_regex (>= 0.1, < 4.0)
|
||||||
excon (>= 0.71.0, < 1.0.0)
|
erb (>= 4.0, < 7.0)
|
||||||
faraday (~> 1.0)
|
excon (>= 1.0.0, < 2.0.0)
|
||||||
faraday-cookie_jar (~> 0.0.6)
|
faraday (~> 2.7)
|
||||||
faraday_middleware (~> 1.0)
|
faraday-cookie_jar (~> 0.0.8)
|
||||||
|
faraday-follow_redirects (~> 0.3)
|
||||||
|
faraday-multipart (~> 1.0)
|
||||||
|
faraday-retry (~> 2.0)
|
||||||
fastimage (>= 2.1.0, < 3.0.0)
|
fastimage (>= 2.1.0, < 3.0.0)
|
||||||
fastlane-sirp (>= 1.0.0)
|
fastlane-sirp (>= 1.1.0)
|
||||||
gh_inspector (>= 1.1.2, < 2.0.0)
|
gh_inspector (>= 1.1.2, < 2.0.0)
|
||||||
google-apis-androidpublisher_v3 (~> 0.3)
|
google-apis-androidpublisher_v3 (~> 0.99)
|
||||||
google-apis-playcustomapp_v1 (~> 0.1)
|
google-apis-playcustomapp_v1 (~> 0.1)
|
||||||
google-cloud-env (>= 1.6.0, < 2.0.0)
|
google-cloud-env (>= 1.6.0, < 2.5.0)
|
||||||
google-cloud-storage (~> 1.31)
|
google-cloud-storage (~> 1.31)
|
||||||
highline (~> 2.0)
|
highline (~> 2.0)
|
||||||
http-cookie (~> 1.0.5)
|
irb (>= 1.8)
|
||||||
json (< 3.0.0)
|
json (< 3.0.0)
|
||||||
jwt (>= 2.1.0, < 3)
|
jwt (>= 2.10.3, < 4)
|
||||||
|
logger (>= 1.6, < 2.0)
|
||||||
mini_magick (>= 4.9.4, < 5.0.0)
|
mini_magick (>= 4.9.4, < 5.0.0)
|
||||||
|
multi_json (~> 1.12)
|
||||||
multipart-post (>= 2.0.0, < 3.0.0)
|
multipart-post (>= 2.0.0, < 3.0.0)
|
||||||
|
mutex_m (~> 0.3)
|
||||||
naturally (~> 2.2)
|
naturally (~> 2.2)
|
||||||
|
nkf (~> 0.2)
|
||||||
optparse (>= 0.1.1, < 1.0.0)
|
optparse (>= 0.1.1, < 1.0.0)
|
||||||
|
ostruct (>= 0.1.0)
|
||||||
plist (>= 3.1.0, < 4.0.0)
|
plist (>= 3.1.0, < 4.0.0)
|
||||||
rubyzip (>= 2.0.0, < 3.0.0)
|
rubyzip (>= 3.4.0, < 4.0.0)
|
||||||
security (= 0.1.5)
|
security (~> 0.3)
|
||||||
simctl (~> 1.6.3)
|
simctl (~> 1.6.3)
|
||||||
terminal-notifier (>= 2.0.0, < 3.0.0)
|
terminal-notifier (>= 3.1.0, < 4.0.0)
|
||||||
terminal-table (~> 3)
|
terminal-table (~> 4)
|
||||||
tty-screen (>= 0.6.3, < 1.0.0)
|
tty-screen (>= 0.6.3, < 1.0.0)
|
||||||
tty-spinner (>= 0.8.0, < 1.0.0)
|
tty-spinner (>= 0.8.0, < 1.0.0)
|
||||||
word_wrap (~> 1.0.0)
|
word_wrap (~> 1.0.0)
|
||||||
@@ -115,104 +119,140 @@ GEM
|
|||||||
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
|
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
|
||||||
fastlane-plugin-fossify (1.0.2)
|
fastlane-plugin-fossify (1.0.2)
|
||||||
abbrev
|
abbrev
|
||||||
fastlane-sirp (1.0.0)
|
fastlane-sirp (1.1.0)
|
||||||
sysrandom (~> 1.0)
|
|
||||||
gh_inspector (1.1.3)
|
gh_inspector (1.1.3)
|
||||||
google-apis-androidpublisher_v3 (0.54.0)
|
google-apis-androidpublisher_v3 (0.111.0)
|
||||||
google-apis-core (>= 0.11.0, < 2.a)
|
google-apis-core (>= 0.15.0, < 2.a)
|
||||||
google-apis-core (0.11.3)
|
google-apis-core (1.4.0)
|
||||||
addressable (~> 2.5, >= 2.5.1)
|
addressable (~> 2.9)
|
||||||
googleauth (>= 0.16.2, < 2.a)
|
faraday (~> 2.13)
|
||||||
httpclient (>= 2.8.1, < 3.a)
|
faraday-follow_redirects (~> 0.3)
|
||||||
mini_mime (~> 1.0)
|
googleauth (~> 1.14)
|
||||||
|
mini_mime (~> 1.1)
|
||||||
|
multi_json (~> 1.11)
|
||||||
representable (~> 3.0)
|
representable (~> 3.0)
|
||||||
retriable (>= 2.0, < 4.a)
|
retriable (>= 3.1, < 5.0)
|
||||||
rexml
|
google-apis-iamcredentials_v1 (0.28.0)
|
||||||
google-apis-iamcredentials_v1 (0.17.0)
|
google-apis-core (>= 0.15.0, < 2.a)
|
||||||
google-apis-core (>= 0.11.0, < 2.a)
|
google-apis-playcustomapp_v1 (0.18.0)
|
||||||
google-apis-playcustomapp_v1 (0.13.0)
|
google-apis-core (>= 0.15.0, < 2.a)
|
||||||
google-apis-core (>= 0.11.0, < 2.a)
|
google-apis-storage_v1 (0.70.0)
|
||||||
google-apis-storage_v1 (0.31.0)
|
google-apis-core (>= 0.15.0, < 2.a)
|
||||||
google-apis-core (>= 0.11.0, < 2.a)
|
google-cloud-core (1.9.1)
|
||||||
google-cloud-core (1.8.0)
|
|
||||||
google-cloud-env (>= 1.0, < 3.a)
|
google-cloud-env (>= 1.0, < 3.a)
|
||||||
google-cloud-errors (~> 1.0)
|
google-cloud-errors (~> 1.0)
|
||||||
google-cloud-env (1.6.0)
|
google-cloud-env (2.4.1)
|
||||||
faraday (>= 0.17.3, < 3.0)
|
base64 (~> 0.2)
|
||||||
google-cloud-errors (1.5.0)
|
faraday (>= 1.0, < 3.a)
|
||||||
google-cloud-storage (1.47.0)
|
google-cloud-errors (1.7.1)
|
||||||
|
google-cloud-storage (1.62.1)
|
||||||
addressable (~> 2.8)
|
addressable (~> 2.8)
|
||||||
digest-crc (~> 0.4)
|
digest-crc (~> 0.4)
|
||||||
google-apis-iamcredentials_v1 (~> 0.1)
|
google-apis-core (>= 0.18, < 2)
|
||||||
google-apis-storage_v1 (~> 0.31.0)
|
google-apis-iamcredentials_v1 (~> 0.18)
|
||||||
|
google-apis-storage_v1 (>= 0.42)
|
||||||
google-cloud-core (~> 1.6)
|
google-cloud-core (~> 1.6)
|
||||||
googleauth (>= 0.16.2, < 2.a)
|
googleauth (~> 1.9)
|
||||||
mini_mime (~> 1.0)
|
mini_mime (~> 1.0)
|
||||||
googleauth (1.8.1)
|
google-logging-utils (0.2.2)
|
||||||
faraday (>= 0.17.3, < 3.a)
|
googleauth (1.17.7)
|
||||||
jwt (>= 1.4, < 3.0)
|
faraday (>= 1.0, < 3.a)
|
||||||
multi_json (~> 1.11)
|
google-cloud-env (~> 2.2)
|
||||||
|
google-logging-utils (~> 0.1)
|
||||||
|
jwt (>= 1.4, < 4.0)
|
||||||
os (>= 0.9, < 2.0)
|
os (>= 0.9, < 2.0)
|
||||||
|
pstore (~> 0.1)
|
||||||
signet (>= 0.16, < 2.a)
|
signet (>= 0.16, < 2.a)
|
||||||
highline (2.0.3)
|
highline (2.0.3)
|
||||||
http-cookie (1.0.8)
|
http-cookie (1.1.6)
|
||||||
domain_name (~> 0.5)
|
domain_name (~> 0.5)
|
||||||
httpclient (2.9.0)
|
io-console (0.9.5)
|
||||||
mutex_m
|
irb (1.18.0)
|
||||||
|
pp (>= 0.6.0)
|
||||||
|
prism (>= 1.3.0)
|
||||||
|
rdoc (>= 4.0.0)
|
||||||
|
reline (>= 0.4.2)
|
||||||
jmespath (1.6.2)
|
jmespath (1.6.2)
|
||||||
json (2.11.3)
|
json (2.21.2)
|
||||||
jwt (2.10.1)
|
jwt (3.3.0)
|
||||||
base64
|
base64
|
||||||
logger (1.7.0)
|
logger (1.7.0)
|
||||||
mini_magick (4.13.2)
|
mini_magick (4.13.2)
|
||||||
mini_mime (1.1.5)
|
mini_mime (1.1.5)
|
||||||
multi_json (1.15.0)
|
multi_json (1.21.2)
|
||||||
multipart-post (2.4.1)
|
multipart-post (2.4.1)
|
||||||
mutex_m (0.3.0)
|
mutex_m (0.3.0)
|
||||||
nanaimo (0.4.0)
|
nanaimo (0.4.0)
|
||||||
naturally (2.2.1)
|
naturally (2.3.0)
|
||||||
nkf (0.2.0)
|
net-http (0.10.0)
|
||||||
optparse (0.6.0)
|
net-protocol (>= 0.3.0)
|
||||||
|
uri (>= 0.11.1)
|
||||||
|
net-protocol (0.4.0)
|
||||||
|
timeout
|
||||||
|
nkf (0.3.0)
|
||||||
|
optparse (0.8.1)
|
||||||
os (1.1.4)
|
os (1.1.4)
|
||||||
|
ostruct (0.6.3)
|
||||||
plist (3.7.2)
|
plist (3.7.2)
|
||||||
public_suffix (6.0.2)
|
pp (0.6.4)
|
||||||
rake (13.2.1)
|
prettyprint
|
||||||
representable (3.2.0)
|
prettyprint (0.2.1)
|
||||||
|
prism (2.1.0)
|
||||||
|
prism (2.1.0-x86_64-linux-gnu)
|
||||||
|
pstore (0.3.0)
|
||||||
|
public_suffix (7.0.5)
|
||||||
|
rake (13.4.2)
|
||||||
|
rbs (4.2.0)
|
||||||
|
logger
|
||||||
|
prism (>= 1.6.0)
|
||||||
|
tsort
|
||||||
|
rdoc (8.1.0)
|
||||||
|
erb
|
||||||
|
prism (>= 1.6.0)
|
||||||
|
rbs (>= 4.0.0)
|
||||||
|
tsort
|
||||||
|
reline (0.7.0)
|
||||||
|
io-console (~> 0.5)
|
||||||
|
representable (3.3.1)
|
||||||
declarative (< 0.1.0)
|
declarative (< 0.1.0)
|
||||||
trailblazer-option (>= 0.1.1, < 0.2.0)
|
trailblazer-option (>= 0.1.1, < 0.2.0)
|
||||||
uber (< 0.2.0)
|
uber (< 0.2.0)
|
||||||
retriable (3.1.2)
|
retriable (4.2.0)
|
||||||
rexml (3.4.1)
|
rexml (3.4.4)
|
||||||
rouge (3.28.0)
|
rouge (3.28.0)
|
||||||
ruby2_keywords (0.0.5)
|
rubyzip (3.7.0)
|
||||||
rubyzip (2.4.1)
|
security (0.4.0)
|
||||||
security (0.1.5)
|
signet (0.22.2)
|
||||||
signet (0.20.0)
|
|
||||||
addressable (~> 2.8)
|
addressable (~> 2.8)
|
||||||
faraday (>= 0.17.5, < 3.a)
|
faraday (>= 0.17.5, < 3.a)
|
||||||
jwt (>= 1.5, < 3.0)
|
jwt (>= 1.5, < 4.0)
|
||||||
multi_json (~> 1.10)
|
|
||||||
simctl (1.6.10)
|
simctl (1.6.10)
|
||||||
CFPropertyList
|
CFPropertyList
|
||||||
naturally
|
naturally
|
||||||
sysrandom (1.0.5)
|
terminal-notifier (3.1.0)
|
||||||
terminal-notifier (2.0.0)
|
terminal-table (4.0.0)
|
||||||
terminal-table (3.0.2)
|
unicode-display_width (>= 1.1.1, < 4)
|
||||||
unicode-display_width (>= 1.1.1, < 3)
|
timeout (0.6.1)
|
||||||
trailblazer-option (0.1.2)
|
trailblazer-option (0.1.2)
|
||||||
|
tsort (0.2.0)
|
||||||
tty-cursor (0.7.1)
|
tty-cursor (0.7.1)
|
||||||
tty-screen (0.8.2)
|
tty-screen (0.8.2)
|
||||||
tty-spinner (0.9.3)
|
tty-spinner (0.9.3)
|
||||||
tty-cursor (~> 0.7)
|
tty-cursor (~> 0.7)
|
||||||
uber (0.1.0)
|
uber (0.1.0)
|
||||||
unicode-display_width (2.6.0)
|
unicode-display_width (3.3.0)
|
||||||
|
unicode-emoji (~> 4.3)
|
||||||
|
unicode-emoji (4.3.0)
|
||||||
|
uri (1.1.2)
|
||||||
word_wrap (1.0.0)
|
word_wrap (1.0.0)
|
||||||
xcodeproj (1.27.0)
|
xcodeproj (1.28.1)
|
||||||
CFPropertyList (>= 2.3.3, < 4.0)
|
CFPropertyList (>= 2.3.3, < 4.0)
|
||||||
atomos (~> 0.1.3)
|
atomos (~> 0.1.3)
|
||||||
|
base64
|
||||||
claide (>= 1.0.2, < 2.0)
|
claide (>= 1.0.2, < 2.0)
|
||||||
colored2 (~> 3.1)
|
colored2 (~> 3.1)
|
||||||
nanaimo (~> 0.4.0)
|
nanaimo (~> 0.4.0)
|
||||||
|
nkf
|
||||||
rexml (>= 3.3.6, < 4.0)
|
rexml (>= 3.3.6, < 4.0)
|
||||||
xcpretty (0.4.1)
|
xcpretty (0.4.1)
|
||||||
rouge (~> 3.28.0)
|
rouge (~> 3.28.0)
|
||||||
|
|||||||
+26
-12
@@ -1,11 +1,10 @@
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName
|
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||||
import org.jetbrains.kotlin.konan.properties.Properties
|
import org.jetbrains.kotlin.konan.properties.Properties
|
||||||
import java.io.FileInputStream
|
import java.io.FileInputStream
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.android)
|
alias(libs.plugins.android)
|
||||||
alias(libs.plugins.kotlinAndroid)
|
|
||||||
alias(libs.plugins.detekt)
|
alias(libs.plugins.detekt)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -22,16 +21,20 @@ fun hasSigningVars(): Boolean {
|
|||||||
&& providers.environmentVariable("SIGNING_STORE_PASSWORD").orNull != null
|
&& providers.environmentVariable("SIGNING_STORE_PASSWORD").orNull != null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
base {
|
||||||
|
val versionCode = project.property("VERSION_CODE").toString().toInt()
|
||||||
|
archivesName = "file-manager-$versionCode"
|
||||||
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdk = project.libs.versions.app.build.compileSDKVersion.get().toInt()
|
compileSdk = project.libs.versions.app.build.compileSDKVersion.get().toInt()
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId = libs.versions.app.version.appId.get()
|
applicationId = project.property("APP_ID").toString()
|
||||||
minSdk = project.libs.versions.app.build.minimumSDK.get().toInt()
|
minSdk = project.libs.versions.app.build.minimumSDK.get().toInt()
|
||||||
targetSdk = project.libs.versions.app.build.targetSDK.get().toInt()
|
targetSdk = project.libs.versions.app.build.targetSDK.get().toInt()
|
||||||
versionName = project.libs.versions.app.version.versionName.get()
|
versionName = project.property("VERSION_NAME").toString()
|
||||||
versionCode = project.libs.versions.app.version.versionCode.get().toInt()
|
versionCode = project.property("VERSION_CODE").toString().toInt()
|
||||||
archivesName.set("file-manager-$versionCode")
|
|
||||||
multiDexEnabled = true
|
multiDexEnabled = true
|
||||||
vectorDrawables.useSupportLibrary = true
|
vectorDrawables.useSupportLibrary = true
|
||||||
}
|
}
|
||||||
@@ -79,13 +82,12 @@ android {
|
|||||||
|
|
||||||
flavorDimensions.add("variants")
|
flavorDimensions.add("variants")
|
||||||
productFlavors {
|
productFlavors {
|
||||||
register("core")
|
|
||||||
register("foss")
|
register("foss")
|
||||||
register("gplay")
|
register("gplay")
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
getByName("main").java.srcDirs("src/main/kotlin")
|
getByName("main").java.directories.add("src/main/kotlin")
|
||||||
}
|
}
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
@@ -98,17 +100,25 @@ android {
|
|||||||
includeInApk = false
|
includeInApk = false
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType<KotlinCompile> {
|
androidResources {
|
||||||
kotlinOptions.jvmTarget = project.libs.versions.app.build.kotlinJVMTarget.get()
|
@Suppress("UnstableApiUsage")
|
||||||
|
generateLocaleConfig = true
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace = libs.versions.app.version.appId.get()
|
tasks.withType<KotlinCompile> {
|
||||||
|
compilerOptions.jvmTarget.set(
|
||||||
|
JvmTarget.fromTarget(project.libs.versions.app.build.kotlinJVMTarget.get())
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace = project.property("APP_ID").toString()
|
||||||
|
|
||||||
lint {
|
lint {
|
||||||
checkReleaseBuilds = false
|
checkReleaseBuilds = false
|
||||||
abortOnError = true
|
abortOnError = true
|
||||||
warningsAsErrors = true
|
warningsAsErrors = false
|
||||||
baseline = file("lint-baseline.xml")
|
baseline = file("lint-baseline.xml")
|
||||||
|
lintConfig = rootProject.file("lint.xml")
|
||||||
}
|
}
|
||||||
|
|
||||||
bundle {
|
bundle {
|
||||||
@@ -120,6 +130,9 @@ android {
|
|||||||
|
|
||||||
detekt {
|
detekt {
|
||||||
baseline = file("detekt-baseline.xml")
|
baseline = file("detekt-baseline.xml")
|
||||||
|
config.setFrom("$rootDir/detekt.yml")
|
||||||
|
buildUponDefaultConfig = true
|
||||||
|
allRules = false
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
@@ -131,4 +144,5 @@ dependencies {
|
|||||||
implementation(libs.gestureviews)
|
implementation(libs.gestureviews)
|
||||||
implementation(libs.autofittextview)
|
implementation(libs.autofittextview)
|
||||||
implementation(libs.zip4j)
|
implementation(libs.zip4j)
|
||||||
|
detektPlugins(libs.compose.detekt)
|
||||||
}
|
}
|
||||||
+6
-74
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" ?>
|
<?xml version="1.0" ?>
|
||||||
<SmellBaseline>
|
<SmellBaseline>
|
||||||
<ManuallySuppressedIssues></ManuallySuppressedIssues>
|
<ManuallySuppressedIssues/>
|
||||||
<CurrentIssues>
|
<CurrentIssues>
|
||||||
<ID>ComplexCondition:Activity.kt$(hide && filename.startsWith('.')) || (!hide && !filename.startsWith('.'))</ID>
|
<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>
|
<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: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>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 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:ItemsAdapter.kt$ItemsAdapter$override fun actionItemPressed(id: Int)</ID>
|
||||||
<ID>CyclomaticComplexMethod:MainActivity.kt$MainActivity$private fun setupOptionsMenu()</ID>
|
<ID>CyclomaticComplexMethod:MainActivity.kt$MainActivity$private fun setupOptionsMenu()</ID>
|
||||||
<ID>CyclomaticComplexMethod:MimeTypesActivity.kt$MimeTypesActivity$private fun getProperFileDirItems(callback: (ArrayList<FileDirItem>) -> Unit)</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:MimeTypesActivity.kt$MimeTypesActivity${}</ID>
|
||||||
<ID>EmptyFunctionBlock:StorageFragment.kt$StorageFragment${}</ID>
|
<ID>EmptyFunctionBlock:StorageFragment.kt$StorageFragment${}</ID>
|
||||||
<ID>LargeClass:ItemsAdapter.kt$ItemsAdapter : MyRecyclerViewAdapterOnPopupTextUpdate</ID>
|
<ID>LargeClass:ItemsAdapter.kt$ItemsAdapter : MyRecyclerViewAdapterOnPopupTextUpdate</ID>
|
||||||
<ID>LargeClass:MainActivity.kt$MainActivity : SimpleActivity</ID>
|
|
||||||
<ID>LongMethod:DecompressActivity.kt$DecompressActivity$private fun fillAllListItems(uri: Uri, callback: () -> 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:DecompressActivity.kt$DecompressActivity$while</ID>
|
||||||
<ID>LoopWithTooManyJumpStatements:StorageFragment.kt$StorageFragment$do</ID>
|
<ID>LoopWithTooManyJumpStatements:StorageFragment.kt$StorageFragment$do</ID>
|
||||||
<ID>MagicNumber:Config.kt$Config$1.2f</ID>
|
<ID>MagicNumber:Config.kt$Config$1.2f</ID>
|
||||||
@@ -41,15 +35,11 @@
|
|||||||
<ID>MagicNumber:ItemsAdapter.kt$ItemsAdapter$180</ID>
|
<ID>MagicNumber:ItemsAdapter.kt$ItemsAdapter$180</ID>
|
||||||
<ID>MagicNumber:ItemsAdapter.kt$ItemsAdapter$4</ID>
|
<ID>MagicNumber:ItemsAdapter.kt$ItemsAdapter$4</ID>
|
||||||
<ID>MagicNumber:ItemsFragment.kt$ItemsFragment$3</ID>
|
<ID>MagicNumber:ItemsFragment.kt$ItemsFragment$3</ID>
|
||||||
<ID>MagicNumber:Long.kt$1000.0</ID>
|
|
||||||
<ID>MagicNumber:MimeTypesActivity.kt$MimeTypesActivity$1000</ID>
|
|
||||||
<ID>MagicNumber:ReadTextActivity.kt$ReadTextActivity$250</ID>
|
<ID>MagicNumber:ReadTextActivity.kt$ReadTextActivity$250</ID>
|
||||||
<ID>MagicNumber:ReadTextActivity.kt$ReadTextActivity$50</ID>
|
<ID>MagicNumber:ReadTextActivity.kt$ReadTextActivity$50</ID>
|
||||||
<ID>MagicNumber:RecentsFragment.kt$RecentsFragment$1000</ID>
|
|
||||||
<ID>MagicNumber:RecentsFragment.kt$RecentsFragment$3</ID>
|
<ID>MagicNumber:RecentsFragment.kt$RecentsFragment$3</ID>
|
||||||
<ID>MagicNumber:RecentsFragment.kt$RecentsFragment$50</ID>
|
<ID>MagicNumber:RecentsFragment.kt$RecentsFragment$50</ID>
|
||||||
<ID>MagicNumber:RootHelpers.kt$RootHelpers.<no name provided>$5</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$100000</ID>
|
||||||
<ID>MagicNumber:StorageFragment.kt$StorageFragment$2000</ID>
|
<ID>MagicNumber:StorageFragment.kt$StorageFragment$2000</ID>
|
||||||
<ID>MagicNumber:StorageFragment.kt$StorageFragment$3</ID>
|
<ID>MagicNumber:StorageFragment.kt$StorageFragment$3</ID>
|
||||||
@@ -62,39 +52,11 @@
|
|||||||
<ID>MaxLineLength:CompressAsDialog.kt$CompressAsDialog$val indexOfDot = if (filename.contains('.') && !activity.getIsPathDirectory(path)) filename.lastIndexOf(".") else filename.length</ID>
|
<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:Config.kt$Config$set(wasStorageAnalysisTabAdded) = prefs.edit().putBoolean(WAS_STORAGE_ANALYSIS_TAB_ADDED, wasStorageAnalysisTabAdded).apply()</ID>
|
||||||
<ID>MaxLineLength:Context.kt$fun Context.isPathOnRoot(path: String)</ID>
|
<ID>MaxLineLength:Context.kt$fun Context.isPathOnRoot(path: String)</ID>
|
||||||
<ID>MaxLineLength:DecompressActivity.kt$DecompressActivity$binding.decompressToolbar.title = realPath?.getFilenameFromPath() ?: Uri.decode(uri.toString().getFilenameFromPath())</ID>
|
|
||||||
<ID>MaxLineLength:DecompressActivity.kt$DecompressActivity$updateMaterialActivityViews(decompressCoordinator, decompressList, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
|
|
||||||
<ID>MaxLineLength:DecompressItemsAdapter.kt$DecompressItemsAdapter$class</ID>
|
<ID>MaxLineLength:DecompressItemsAdapter.kt$DecompressItemsAdapter$class</ID>
|
||||||
<ID>MaxLineLength:DecompressItemsAdapter.kt$DecompressItemsAdapter$val drawable = fileDrawables.getOrElse(fileName.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable })</ID>
|
<ID>MaxLineLength:DecompressItemsAdapter.kt$DecompressItemsAdapter$val drawable = fileDrawables.getOrElse(fileName.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable })</ID>
|
||||||
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$FilePickerDialog</ID>
|
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$FilePickerDialog</ID>
|
||||||
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$ManageFavoritesAdapter(this@FavoritesActivity, favorites, this@FavoritesActivity, manageFavoritesList) { }</ID>
|
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$ManageFavoritesAdapter(this@FavoritesActivity, favorites, this@FavoritesActivity, manageFavoritesList) { }</ID>
|
||||||
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$updateMaterialActivityViews(manageFavoritesCoordinator, manageFavoritesList, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
|
|
||||||
<ID>MaxLineLength: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$}</ID>
|
||||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemDirGrid$override</ID>
|
|
||||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemEmpty$override</ID>
|
|
||||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemFileDirList$override</ID>
|
|
||||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemFileDirList$return ItemFileDirListBindingAdapter(ItemFileDirListBinding.inflate(layoutInflater, viewGroup, attachToRoot))</ID>
|
|
||||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemFileGrid$override</ID>
|
|
||||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemSection$override</ID>
|
|
||||||
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$ItemsAdapter</ID>
|
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$ItemsAdapter</ID>
|
||||||
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$class</ID>
|
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$class</ID>
|
||||||
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$context</ID>
|
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$context</ID>
|
||||||
@@ -117,55 +79,40 @@
|
|||||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$if</ID>
|
<ID>MaxLineLength:MainActivity.kt$MainActivity$if</ID>
|
||||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$private fun getInactiveTabIndexes(activeIndex: Int)</ID>
|
<ID>MaxLineLength:MainActivity.kt$MainActivity$private fun getInactiveTabIndexes(activeIndex: Int)</ID>
|
||||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$resultIntent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION</ID>
|
<ID>MaxLineLength:MainActivity.kt$MainActivity$resultIntent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION</ID>
|
||||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$updateMaterialActivityViews(binding.mainCoordinator, null, useTransparentNavigation = false, useTopSearchMenu = true)</ID>
|
|
||||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$val isPickFileIntent = action == RingtoneManager.ACTION_RINGTONE_PICKER || action == Intent.ACTION_GET_CONTENT || action == Intent.ACTION_PICK</ID>
|
|
||||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$val licenses = LICENSE_GLIDE or LICENSE_PATTERN or LICENSE_REPRINT or LICENSE_GESTURE_VIEWS or LICENSE_AUTOFITTEXTVIEW or LICENSE_ZIP4J</ID>
|
<ID>MaxLineLength:MainActivity.kt$MainActivity$val licenses = LICENSE_GLIDE or LICENSE_PATTERN or LICENSE_REPRINT or LICENSE_GESTURE_VIEWS or LICENSE_AUTOFITTEXTVIEW or LICENSE_ZIP4J</ID>
|
||||||
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$!extraAudioMimeTypes.contains(fullMimetype)</ID>
|
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$!extraAudioMimeTypes.contains(fullMimetype)</ID>
|
||||||
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$if</ID>
|
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$if</ID>
|
||||||
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$updateMaterialActivityViews(mimetypesCoordinator, mimetypesList, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
|
|
||||||
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$val fullMimetype = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault()) ?: return@queryCursor</ID>
|
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$val fullMimetype = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault()) ?: return@queryCursor</ID>
|
||||||
<ID>MaxLineLength:MyViewPagerFragment.kt$MyViewPagerFragment$abstract</ID>
|
<ID>MaxLineLength:MyViewPagerFragment.kt$MyViewPagerFragment$abstract</ID>
|
||||||
<ID>MaxLineLength:MyViewPagerFragment.kt$MyViewPagerFragment$val fabIcon = context.resources.getColoredDrawableWithColor(iconId, context.getProperPrimaryColor().getContrastColor())</ID>
|
<ID>MaxLineLength:MyViewPagerFragment.kt$MyViewPagerFragment$val fabIcon = context.resources.getColoredDrawableWithColor(iconId, context.getProperPrimaryColor().getContrastColor())</ID>
|
||||||
<ID>MaxLineLength:ReadTextActivity.kt$ReadTextActivity$if</ID>
|
<ID>MaxLineLength:ReadTextActivity.kt$ReadTextActivity$if</ID>
|
||||||
<ID>MaxLineLength:ReadTextActivity.kt$ReadTextActivity$private</ID>
|
<ID>MaxLineLength:ReadTextActivity.kt$ReadTextActivity$private</ID>
|
||||||
<ID>MaxLineLength:ReadTextActivity.kt$ReadTextActivity$updateMaterialActivityViews(readTextCoordinator, readTextView, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
|
|
||||||
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$ItemsAdapter</ID>
|
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$ItemsAdapter</ID>
|
||||||
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$binding.recentsSwipeRefresh.isEnabled = lastSearchedText.isEmpty() && activity?.config?.enablePullToRefresh != false</ID>
|
<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$class</ID>
|
||||||
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$if</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$fun</ID>
|
||||||
<ID>MaxLineLength:RootHelpers.kt$RootHelpers$private</ID>
|
<ID>MaxLineLength:RootHelpers.kt$RootHelpers$private</ID>
|
||||||
<ID>MaxLineLength:SaveAsActivity.kt$SaveAsActivity$FilePickerDialog</ID>
|
<ID>MaxLineLength:SaveAsActivity.kt$SaveAsActivity$FilePickerDialog</ID>
|
||||||
<ID>MaxLineLength:SaveAsDialog.kt$SaveAsDialog$val title = String.format(activity.getString(R.string.file_already_exists_overwrite), newFilename)</ID>
|
<ID>MaxLineLength:SaveAsDialog.kt$SaveAsDialog$val title = String.format(activity.getString(R.string.file_already_exists_overwrite), newFilename)</ID>
|
||||||
<ID>MaxLineLength:SettingsActivity.kt$SettingsActivity$settingsUseEnglishHolder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") && !isTiramisuPlus())</ID>
|
<ID>MaxLineLength:SettingsActivity.kt$SettingsActivity$settingsUseEnglishHolder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") && !isTiramisuPlus())</ID>
|
||||||
<ID>MaxLineLength:SettingsActivity.kt$SettingsActivity$updateMaterialActivityViews(settingsCoordinator, settingsHolder, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
|
|
||||||
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$class</ID>
|
|
||||||
<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: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$@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 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 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 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: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: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$override fun setupFragment(activity: SimpleActivity)</ID>
|
||||||
<ID>NestedBlockDepth:StorageFragment.kt$StorageFragment$private fun getAllFiles(volumeName: String): ArrayList<FileDirItem></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:MainActivity.kt$MainActivity$override fun onBackPressedCompat(): Boolean</ID>
|
||||||
<ID>SwallowedException:ItemsAdapter.kt$ItemsAdapter$e: Exception</ID>
|
<ID>SwallowedException:ItemsAdapter.kt$ItemsAdapter$e: Exception</ID>
|
||||||
<ID>SwallowedException:MimeTypesActivity.kt$MimeTypesActivity$e: Exception</ID>
|
<ID>SwallowedException:MimeTypesActivity.kt$MimeTypesActivity$e: Exception</ID>
|
||||||
<ID>SwallowedException:StorageFragment.kt$StorageFragment$e: Exception</ID>
|
<ID>SwallowedException:StorageFragment.kt$StorageFragment$e: Exception</ID>
|
||||||
<ID>TooGenericExceptionCaught:DecompressActivity.kt$DecompressActivity$e: Exception</ID>
|
<ID>TooGenericExceptionCaught:DecompressActivity.kt$DecompressActivity$e: Exception</ID>
|
||||||
<ID>TooGenericExceptionCaught:ItemsAdapter.kt$ItemsAdapter$e: Exception</ID>
|
<ID>TooGenericExceptionCaught:ItemsAdapter.kt$ItemsAdapter$e: Exception</ID>
|
||||||
<ID>TooGenericExceptionCaught:ItemsAdapter.kt$ItemsAdapter$exception: 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:MimeTypesActivity.kt$MimeTypesActivity$e: Exception</ID>
|
||||||
<ID>TooGenericExceptionCaught:ReadTextActivity.kt$ReadTextActivity$e: Exception</ID>
|
<ID>TooGenericExceptionCaught:ReadTextActivity.kt$ReadTextActivity$e: Exception</ID>
|
||||||
<ID>TooGenericExceptionCaught:RecentsFragment.kt$RecentsFragment$e: Exception</ID>
|
<ID>TooGenericExceptionCaught:RecentsFragment.kt$RecentsFragment$e: Exception</ID>
|
||||||
@@ -188,35 +135,20 @@
|
|||||||
<ID>VariableNaming:ItemsAdapter.kt$ItemsAdapter$val SAFPath = getFirstSelectedItemPath()</ID>
|
<ID>VariableNaming:ItemsAdapter.kt$ItemsAdapter$val SAFPath = getFirstSelectedItemPath()</ID>
|
||||||
<ID>VariableNaming:RecentsFragment.kt$RecentsFragment$private val RECENTS_LIMIT = 50</ID>
|
<ID>VariableNaming:RecentsFragment.kt$RecentsFragment$private val RECENTS_LIMIT = 50</ID>
|
||||||
<ID>VariableNaming:StorageFragment.kt$StorageFragment$private val SIZE_DIVIDER = 100000</ID>
|
<ID>VariableNaming:StorageFragment.kt$StorageFragment$private val SIZE_DIVIDER = 100000</ID>
|
||||||
<ID>WildcardImport:Activity.kt$import org.fossify.commons.extensions.*</ID>
|
|
||||||
<ID>WildcardImport:Activity.kt$import org.fossify.filemanager.helpers.*</ID>
|
|
||||||
<ID>WildcardImport:ChangeSortingDialog.kt$import org.fossify.commons.helpers.*</ID>
|
<ID>WildcardImport:ChangeSortingDialog.kt$import org.fossify.commons.helpers.*</ID>
|
||||||
<ID>WildcardImport:CompressAsDialog.kt$import org.fossify.commons.extensions.*</ID>
|
<ID>WildcardImport:CompressAsDialog.kt$import org.fossify.commons.extensions.*</ID>
|
||||||
<ID>WildcardImport:CreateNewItemDialog.kt$import org.fossify.commons.extensions.*</ID>
|
<ID>WildcardImport:CreateNewItemDialog.kt$import org.fossify.commons.extensions.*</ID>
|
||||||
<ID>WildcardImport:DecompressActivity.kt$import org.fossify.commons.extensions.*</ID>
|
|
||||||
<ID>WildcardImport:InsertFilenameDialog.kt$import org.fossify.commons.extensions.*</ID>
|
<ID>WildcardImport:InsertFilenameDialog.kt$import org.fossify.commons.extensions.*</ID>
|
||||||
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.commons.dialogs.*</ID>
|
|
||||||
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.commons.extensions.*</ID>
|
|
||||||
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.commons.helpers.*</ID>
|
|
||||||
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.filemanager.databinding.*</ID>
|
|
||||||
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.filemanager.extensions.*</ID>
|
|
||||||
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.filemanager.helpers.*</ID>
|
|
||||||
<ID>WildcardImport:ItemsFragment.kt$import org.fossify.commons.extensions.*</ID>
|
<ID>WildcardImport:ItemsFragment.kt$import org.fossify.commons.extensions.*</ID>
|
||||||
<ID>WildcardImport:ItemsFragment.kt$import org.fossify.commons.helpers.*</ID>
|
<ID>WildcardImport:ItemsFragment.kt$import org.fossify.commons.helpers.*</ID>
|
||||||
<ID>WildcardImport:MainActivity.kt$import org.fossify.commons.extensions.*</ID>
|
|
||||||
<ID>WildcardImport:MainActivity.kt$import org.fossify.commons.helpers.*</ID>
|
|
||||||
<ID>WildcardImport:ManageFavoritesAdapter.kt$import android.view.*</ID>
|
<ID>WildcardImport:ManageFavoritesAdapter.kt$import android.view.*</ID>
|
||||||
<ID>WildcardImport:MimeTypesActivity.kt$import org.fossify.commons.extensions.*</ID>
|
<ID>WildcardImport:MimeTypesActivity.kt$import org.fossify.commons.extensions.*</ID>
|
||||||
<ID>WildcardImport:MimeTypesActivity.kt$import org.fossify.filemanager.helpers.*</ID>
|
<ID>WildcardImport:MimeTypesActivity.kt$import org.fossify.filemanager.helpers.*</ID>
|
||||||
<ID>WildcardImport:MyViewPagerFragment.kt$import org.fossify.commons.extensions.*</ID>
|
<ID>WildcardImport:MyViewPagerFragment.kt$import org.fossify.commons.extensions.*</ID>
|
||||||
<ID>WildcardImport:ReadTextActivity.kt$import org.fossify.commons.extensions.*</ID>
|
<ID>WildcardImport:ReadTextActivity.kt$import org.fossify.commons.extensions.*</ID>
|
||||||
<ID>WildcardImport:RecentsFragment.kt$import org.fossify.commons.extensions.*</ID>
|
|
||||||
<ID>WildcardImport:SaveAsActivity.kt$import org.fossify.commons.extensions.*</ID>
|
<ID>WildcardImport:SaveAsActivity.kt$import org.fossify.commons.extensions.*</ID>
|
||||||
<ID>WildcardImport:SaveAsDialog.kt$import org.fossify.commons.extensions.*</ID>
|
<ID>WildcardImport:SaveAsDialog.kt$import org.fossify.commons.extensions.*</ID>
|
||||||
<ID>WildcardImport:SettingsActivity.kt$import org.fossify.commons.extensions.*</ID>
|
<ID>WildcardImport:SettingsActivity.kt$import org.fossify.commons.extensions.*</ID>
|
||||||
<ID>WildcardImport:SettingsActivity.kt$import org.fossify.commons.helpers.*</ID>
|
<ID>WildcardImport:SettingsActivity.kt$import org.fossify.commons.helpers.*</ID>
|
||||||
<ID>WildcardImport:StorageFragment.kt$import org.fossify.commons.extensions.*</ID>
|
|
||||||
<ID>WildcardImport:StorageFragment.kt$import org.fossify.commons.helpers.*</ID>
|
|
||||||
<ID>WildcardImport:StorageFragment.kt$import org.fossify.filemanager.helpers.*</ID>
|
|
||||||
</CurrentIssues>
|
</CurrentIssues>
|
||||||
</SmellBaseline>
|
</SmellBaseline>
|
||||||
+279
-195
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<issues format="6" by="lint 8.3.0" type="baseline" client="gradle" dependencies="false" name="AGP (8.3.0)" variant="all" version="8.3.0">
|
<issues format="6" by="lint 9.4.1" type="baseline" client="gradle" dependencies="false" name="AGP (9.4.1)" variant="all" version="9.4.1">
|
||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="ScopedStorage"
|
id="ScopedStorage"
|
||||||
@@ -14,68 +14,24 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="NewApi"
|
id="NewApi"
|
||||||
message="Call requires API level 33 (current min is 23): `launchChangeAppLanguageIntent`"
|
message="Call requires API level 33 (current min is 26): `launchChangeAppLanguageIntent`"
|
||||||
errorLine1=" launchChangeAppLanguageIntent()"
|
errorLine1=" launchChangeAppLanguageIntent()"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
file="src/main/kotlin/org/fossify/filemanager/activities/SettingsActivity.kt"
|
file="src/main/kotlin/org/fossify/filemanager/activities/SettingsActivity.kt"
|
||||||
line="92"
|
line="91"
|
||||||
column="17"/>
|
column="17"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="UnusedAttribute"
|
id="OldTargetApi"
|
||||||
message="Attribute `appCategory` is only used in API level 26 and higher (current min is 23)"
|
message="Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the `android.os.Build.VERSION_CODES` javadoc for details."
|
||||||
errorLine1=" android:appCategory="productivity""
|
errorLine1="app-build-targetSDK = "36""
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~">
|
||||||
<location
|
<location
|
||||||
file="src/main/AndroidManifest.xml"
|
file="$HOME/work/File-Manager/File-Manager/gradle/libs.versions.toml"
|
||||||
line="22"
|
line="22"
|
||||||
column="9"/>
|
column="23"/>
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="UnusedAttribute"
|
|
||||||
message="Attribute `localeConfig` is only used in API level 33 and higher (current min is 23)"
|
|
||||||
errorLine1=" android:localeConfig="@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"/>
|
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
<issue
|
<issue
|
||||||
@@ -91,101 +47,46 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="AndroidGradlePluginVersion"
|
id="AndroidGradlePluginVersion"
|
||||||
message="A newer version of com.android.application than 8.3.0 is available: 8.6.1. (There is also a newer version of 8.3.𝑥 available, if upgrading to 8.6.1 is difficult: 8.3.2)"
|
message="A newer version of com.android.application than 9.4.1 is available: 9.5.0"
|
||||||
errorLine1="gradlePlugins-agp = "8.3.0""
|
errorLine1="gradlePlugins-agp = "9.4.1""
|
||||||
errorLine2=" ~~~~~~~">
|
errorLine2=" ~~~~~~~">
|
||||||
<location
|
<location
|
||||||
file="$HOME/Projects/Community/FossifyOrg/File-Manager/gradle/libs.versions.toml"
|
file="$HOME/work/File-Manager/File-Manager/gradle/libs.versions.toml"
|
||||||
line="18"
|
line="19"
|
||||||
column="21"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
|
||||||
id="AndroidGradlePluginVersion"
|
|
||||||
message="A newer version of com.android.application than 8.3.0 is available: 8.6.1. (There is also a newer version of 8.3.𝑥 available, if upgrading to 8.6.1 is difficult: 8.3.2)"
|
|
||||||
errorLine1="gradlePlugins-agp = "8.3.0""
|
|
||||||
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"
|
|
||||||
column="21"/>
|
column="21"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="GradleDependency"
|
id="GradleDependency"
|
||||||
message="A newer version of org.jetbrains.kotlin.android than 1.9.10 is available: 1.9.25"
|
message="A newer version of `app-build-compileSDKVersion` than 36 is available: 37"
|
||||||
errorLine1="kotlin = "1.9.10""
|
errorLine1="app-build-compileSDKVersion = "36""
|
||||||
errorLine2=" ~~~~~~~~">
|
errorLine2=" ~~~~">
|
||||||
<location
|
<location
|
||||||
file="$HOME/Projects/Community/FossifyOrg/File-Manager/gradle/libs.versions.toml"
|
file="$HOME/work/File-Manager/File-Manager/gradle/libs.versions.toml"
|
||||||
line="3"
|
line="21"
|
||||||
column="10"/>
|
column="31"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="GradleDependency"
|
id="NewerVersionAvailable"
|
||||||
message="A newer version of org.jetbrains.kotlin.android than 1.9.10 is available: 1.9.25"
|
message="A newer version of io.nlopez.compose.rules:detekt than 0.4.28 is available: 0.6.8"
|
||||||
errorLine1="kotlin = "1.9.10""
|
errorLine1="detektCompose = "0.4.28""
|
||||||
errorLine2=" ~~~~~~~~">
|
errorLine2=" ~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
file="$HOME/Projects/Community/FossifyOrg/File-Manager/gradle/libs.versions.toml"
|
file="$HOME/work/File-Manager/File-Manager/gradle/libs.versions.toml"
|
||||||
line="3"
|
line="6"
|
||||||
column="10"/>
|
column="17"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="GradleDependency"
|
id="NewerVersionAvailable"
|
||||||
message="A newer version of org.jetbrains.kotlin.android than 1.9.10 is available: 1.9.25"
|
message="A newer version of com.alexvasilkov:gesture-views than 2.9.0 is available: 2.10.0"
|
||||||
errorLine1="kotlin = "1.9.10""
|
errorLine1="gestureviews = "2.9.0""
|
||||||
errorLine2=" ~~~~~~~~">
|
errorLine2=" ~~~~~~~">
|
||||||
<location
|
<location
|
||||||
file="$HOME/Projects/Community/FossifyOrg/File-Manager/gradle/libs.versions.toml"
|
file="$HOME/work/File-Manager/File-Manager/gradle/libs.versions.toml"
|
||||||
line="3"
|
line="14"
|
||||||
column="10"/>
|
column="16"/>
|
||||||
</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"/>
|
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
<issue
|
<issue
|
||||||
@@ -206,7 +107,7 @@
|
|||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
||||||
line="286"
|
line="376"
|
||||||
column="28"/>
|
column="28"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
@@ -217,13 +118,13 @@
|
|||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
||||||
line="941"
|
line="1152"
|
||||||
column="24"/>
|
column="24"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu)"
|
||||||
errorLine1=" <string name="app_launcher_name">File Manager_debug</string>"
|
errorLine1=" <string name="app_launcher_name">File Manager_debug</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -234,7 +135,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu)"
|
||||||
errorLine1=" <string name="app_launcher_name">File Manager</string>"
|
errorLine1=" <string name="app_launcher_name">File Manager</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -245,7 +146,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "ne" (Nepali), "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)"
|
||||||
errorLine1=" <string name="press_back_again">Press back again to exit</string>"
|
errorLine1=" <string name="press_back_again">Press back again to exit</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -256,7 +157,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "ne" (Nepali), "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), "ckb""
|
||||||
errorLine1=" <string name="go_to_home_folder">Go to home folder</string>"
|
errorLine1=" <string name="go_to_home_folder">Go to home folder</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -267,7 +168,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "ne" (Nepali), "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), "ckb""
|
||||||
errorLine1=" <string name="set_as_home_folder">Set as home folder</string>"
|
errorLine1=" <string name="set_as_home_folder">Set as home folder</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -278,7 +179,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "ckb""
|
||||||
errorLine1=" <string name="home_folder_updated">Home folder updated</string>"
|
errorLine1=" <string name="home_folder_updated">Home folder updated</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -289,7 +190,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "ckb""
|
||||||
errorLine1=" <string name="copy_path">Copy path to clipboard</string>"
|
errorLine1=" <string name="copy_path">Copy path to clipboard</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -300,7 +201,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "ckb""
|
||||||
errorLine1=" <string name="path_copied">Path copied</string>"
|
errorLine1=" <string name="path_copied">Path copied</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -311,7 +212,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "ckb""
|
||||||
errorLine1=" <string name="select_audio_file">Please select an audio file</string>"
|
errorLine1=" <string name="select_audio_file">Please select an audio file</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -322,7 +223,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "ckb""
|
||||||
errorLine1=" <string name="search_folder">Search folder</string>"
|
errorLine1=" <string name="search_folder">Search folder</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -333,7 +234,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "bqi", "ckb""
|
||||||
errorLine1=" <string name="rooted_device_only">This operation works only on rooted devices</string>"
|
errorLine1=" <string name="rooted_device_only">This operation works only on rooted devices</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -344,7 +245,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "cy" (Welsh)"
|
||||||
errorLine1=" <string name="recents">Recents</string>"
|
errorLine1=" <string name="recents">Recents</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -355,7 +256,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "cy" (Welsh), "ckb""
|
||||||
errorLine1=" <string name="show_recents">Show recents</string>"
|
errorLine1=" <string name="show_recents">Show recents</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -366,7 +267,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "cy" (Welsh), "ckb""
|
||||||
errorLine1=" <string name="invert_colors">Invert colors</string>"
|
errorLine1=" <string name="invert_colors">Invert colors</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -377,7 +278,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu)"
|
||||||
errorLine1=" <string name="open_as">Open as</string>"
|
errorLine1=" <string name="open_as">Open as</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -388,7 +289,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu)"
|
||||||
errorLine1=" <string name="text_file">Text file</string>"
|
errorLine1=" <string name="text_file">Text file</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -399,7 +300,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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)"
|
||||||
errorLine1=" <string name="image_file">Image file</string>"
|
errorLine1=" <string name="image_file">Image file</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -410,7 +311,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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)"
|
||||||
errorLine1=" <string name="audio_file">Audio file</string>"
|
errorLine1=" <string name="audio_file">Audio file</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -421,7 +322,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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)"
|
||||||
errorLine1=" <string name="video_file">Video file</string>"
|
errorLine1=" <string name="video_file">Video file</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -432,7 +333,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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)"
|
||||||
errorLine1=" <string name="other_file">Other file</string>"
|
errorLine1=" <string name="other_file">Other file</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -443,7 +344,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "bqi""
|
||||||
errorLine1=" <string name="compress">Compress</string>"
|
errorLine1=" <string name="compress">Compress</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -454,7 +355,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "bqi""
|
||||||
errorLine1=" <string name="decompress">Decompress</string>"
|
errorLine1=" <string name="decompress">Decompress</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -465,7 +366,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "bqi""
|
||||||
errorLine1=" <string name="compress_as">Compress as</string>"
|
errorLine1=" <string name="compress_as">Compress as</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -476,7 +377,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "bqi""
|
||||||
errorLine1=" <string name="compressing">Compressing…</string>"
|
errorLine1=" <string name="compressing">Compressing…</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -487,7 +388,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "bqi""
|
||||||
errorLine1=" <string name="decompressing">Decompressing…</string>"
|
errorLine1=" <string name="decompressing">Decompressing…</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -498,7 +399,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "bqi""
|
||||||
errorLine1=" <string name="compression_successful">Compression successful</string>"
|
errorLine1=" <string name="compression_successful">Compression successful</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -509,7 +410,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "bqi""
|
||||||
errorLine1=" <string name="decompression_successful">Decompression successful</string>"
|
errorLine1=" <string name="decompression_successful">Decompression successful</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -520,7 +421,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "bqi", "ckb""
|
||||||
errorLine1=" <string name="compressing_failed">Compressing failed</string>"
|
errorLine1=" <string name="compressing_failed">Compressing failed</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -531,7 +432,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "bqi", "ckb""
|
||||||
errorLine1=" <string name="decompressing_failed">Decompressing failed</string>"
|
errorLine1=" <string name="decompressing_failed">Decompressing failed</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -542,7 +443,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "bqi", "ckb""
|
||||||
errorLine1=" <string name="manage_favorites">Manage favorites</string>"
|
errorLine1=" <string name="manage_favorites">Manage favorites</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -553,7 +454,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "bqi", "ckb""
|
||||||
errorLine1=" <string name="go_to_favorite">Go to favorite</string>"
|
errorLine1=" <string name="go_to_favorite">Go to favorite</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -564,7 +465,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "bqi", "ckb""
|
||||||
errorLine1=" <string name="favorites_activity_placeholder">You can add frequently used folders to favorites for easy access from anywhere.</string>"
|
errorLine1=" <string name="favorites_activity_placeholder">You can add frequently used folders to favorites for easy access from anywhere.</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -575,7 +476,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "bqi""
|
||||||
errorLine1=" <string name="file_editor">File Editor</string>"
|
errorLine1=" <string name="file_editor">File Editor</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -586,7 +487,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "cy" (Welsh), "bqi", "ckb""
|
||||||
errorLine1=" <string name="storage_analysis">Storage analysis</string>"
|
errorLine1=" <string name="storage_analysis">Storage analysis</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -597,7 +498,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "bqi""
|
||||||
errorLine1=" <string name="images">Images</string>"
|
errorLine1=" <string name="images">Images</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -608,7 +509,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "nn" (Norwegian Nynorsk), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "bqi""
|
||||||
errorLine1=" <string name="videos">Videos</string>"
|
errorLine1=" <string name="videos">Videos</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -619,7 +520,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "ne" (Nepali), "az" (Azerbaijani), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "cy" (Welsh)"
|
||||||
errorLine1=" <string name="audio">Audio</string>"
|
errorLine1=" <string name="audio">Audio</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -630,7 +531,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "cy" (Welsh), "bqi""
|
||||||
errorLine1=" <string name="documents">Documents</string>"
|
errorLine1=" <string name="documents">Documents</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -641,7 +542,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "cy" (Welsh), "bqi""
|
||||||
errorLine1=" <string name="downloads">Downloads</string>"
|
errorLine1=" <string name="downloads">Downloads</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -652,7 +553,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "cy" (Welsh), "bqi""
|
||||||
errorLine1=" <string name="archives">Archives</string>"
|
errorLine1=" <string name="archives">Archives</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -663,7 +564,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "cy" (Welsh), "bqi""
|
||||||
errorLine1=" <string name="others">Others</string>"
|
errorLine1=" <string name="others">Others</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -674,7 +575,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "cy" (Welsh), "bqi""
|
||||||
errorLine1=" <string name="storage_free">free</string>"
|
errorLine1=" <string name="storage_free">free</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -685,7 +586,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "cy" (Welsh), "bqi""
|
||||||
errorLine1=" <string name="total_storage">Total storage: %s</string>"
|
errorLine1=" <string name="total_storage">Total storage: %s</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -696,7 +597,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "bqi", "ckb""
|
||||||
errorLine1=" <string name="enable_root_access">Enable root access</string>"
|
errorLine1=" <string name="enable_root_access">Enable root access</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -707,7 +608,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
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), "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), "cy" (Welsh), "bqi", "ckb""
|
||||||
errorLine1=" <string name="press_back_twice">Require pressing Back twice to leave the app</string>"
|
errorLine1=" <string name="press_back_twice">Require pressing Back twice to leave the app</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -723,7 +624,7 @@
|
|||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
||||||
line="797"
|
line="980"
|
||||||
column="13"/>
|
column="13"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
@@ -734,7 +635,7 @@
|
|||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
||||||
line="801"
|
line="984"
|
||||||
column="13"/>
|
column="13"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
@@ -745,7 +646,7 @@
|
|||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
||||||
line="808"
|
line="991"
|
||||||
column="9"/>
|
column="9"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
@@ -756,7 +657,7 @@
|
|||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
||||||
line="814"
|
line="997"
|
||||||
column="9"/>
|
column="9"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
@@ -767,10 +668,17 @@
|
|||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
file="src/main/kotlin/org/fossify/filemanager/adapters/ItemsAdapter.kt"
|
||||||
line="819"
|
line="1002"
|
||||||
column="9"/>
|
column="9"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
|
<issue
|
||||||
|
id="ObsoleteSdkInt"
|
||||||
|
message="This folder configuration (`v26`) is unnecessary; `minSdkVersion` is 26. Merge all the resources in this folder into `mipmap-anydpi`.">
|
||||||
|
<location
|
||||||
|
file="src/main/res/mipmap-anydpi-v26"/>
|
||||||
|
</issue>
|
||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="Overdraw"
|
id="Overdraw"
|
||||||
message="Possible overdraw: Root element paints background `?attr/selectableItemBackground` with a theme that also paints a background (inferred theme is `@style/AppTheme`)"
|
message="Possible overdraw: Root element paints background `?attr/selectableItemBackground` with a theme that also paints a background (inferred theme is `@style/AppTheme`)"
|
||||||
@@ -804,6 +712,17 @@
|
|||||||
column="5"/>
|
column="5"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
|
<issue
|
||||||
|
id="UnusedResources"
|
||||||
|
message="The resource `R.bool.show_donate_in_about` appears to be unused"
|
||||||
|
errorLine1=" <bool name="show_donate_in_about">true</bool>"
|
||||||
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
|
<location
|
||||||
|
file="src/foss/res/values/bools.xml"
|
||||||
|
line="3"
|
||||||
|
column="11"/>
|
||||||
|
</issue>
|
||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="UnusedResources"
|
id="UnusedResources"
|
||||||
message="The resource `R.dimen.grid_view_icon_size` appears to be unused"
|
message="The resource `R.dimen.grid_view_icon_size` appears to be unused"
|
||||||
@@ -859,17 +778,6 @@
|
|||||||
column="14"/>
|
column="14"/>
|
||||||
</issue>
|
</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
|
<issue
|
||||||
id="UnusedResources"
|
id="UnusedResources"
|
||||||
message="The resource `R.string.path_copied` appears to be unused"
|
message="The resource `R.string.path_copied` appears to be unused"
|
||||||
@@ -936,6 +844,17 @@
|
|||||||
column="13"/>
|
column="13"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
|
<issue
|
||||||
|
id="NotShrinkingResources"
|
||||||
|
message="If enabling minification, also set isShrinkResources = true"
|
||||||
|
errorLine1=" isMinifyEnabled = true"
|
||||||
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
|
<location
|
||||||
|
file="build.gradle.kts"
|
||||||
|
line="72"
|
||||||
|
column="13"/>
|
||||||
|
</issue>
|
||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="UselessParent"
|
id="UselessParent"
|
||||||
message="This `RelativeLayout` layout or its `FrameLayout` parent is possibly unnecessary; transfer the `background` attribute to the other view"
|
message="This `RelativeLayout` layout or its `FrameLayout` parent is possibly unnecessary; transfer the `background` attribute to the other view"
|
||||||
@@ -958,6 +877,171 @@
|
|||||||
column="6"/>
|
column="6"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
|
<issue
|
||||||
|
id="UseKtx"
|
||||||
|
message="Use the KTX extension function `SharedPreferences.edit` instead?"
|
||||||
|
errorLine1=" set(show) = prefs.edit().putBoolean(SHOW_HIDDEN, show).apply()"
|
||||||
|
errorLine2=" ~~~~~~~~~~~~">
|
||||||
|
<location
|
||||||
|
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
|
||||||
|
line="17"
|
||||||
|
column="21"/>
|
||||||
|
</issue>
|
||||||
|
|
||||||
|
<issue
|
||||||
|
id="UseKtx"
|
||||||
|
message="Use the KTX extension function `SharedPreferences.edit` instead?"
|
||||||
|
errorLine1=" set(temporarilyShowHidden) = prefs.edit().putBoolean(TEMPORARILY_SHOW_HIDDEN, temporarilyShowHidden).apply()"
|
||||||
|
errorLine2=" ~~~~~~~~~~~~">
|
||||||
|
<location
|
||||||
|
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
|
||||||
|
line="21"
|
||||||
|
column="38"/>
|
||||||
|
</issue>
|
||||||
|
|
||||||
|
<issue
|
||||||
|
id="UseKtx"
|
||||||
|
message="Use the KTX extension function `SharedPreferences.edit` instead?"
|
||||||
|
errorLine1=" set(pressBackTwice) = prefs.edit().putBoolean(PRESS_BACK_TWICE, pressBackTwice).apply()"
|
||||||
|
errorLine2=" ~~~~~~~~~~~~">
|
||||||
|
<location
|
||||||
|
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
|
||||||
|
line="27"
|
||||||
|
column="31"/>
|
||||||
|
</issue>
|
||||||
|
|
||||||
|
<issue
|
||||||
|
id="UseKtx"
|
||||||
|
message="Use the KTX extension function `SharedPreferences.edit` instead?"
|
||||||
|
errorLine1=" set(homeFolder) = prefs.edit().putString(HOME_FOLDER, homeFolder).apply()"
|
||||||
|
errorLine2=" ~~~~~~~~~~~~">
|
||||||
|
<location
|
||||||
|
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
|
||||||
|
line="38"
|
||||||
|
column="27"/>
|
||||||
|
</issue>
|
||||||
|
|
||||||
|
<issue
|
||||||
|
id="UseKtx"
|
||||||
|
message="Use the KTX extension function `SharedPreferences.edit` instead?"
|
||||||
|
errorLine1=" set(isRootAvailable) = prefs.edit().putBoolean(IS_ROOT_AVAILABLE, isRootAvailable).apply()"
|
||||||
|
errorLine2=" ~~~~~~~~~~~~">
|
||||||
|
<location
|
||||||
|
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
|
||||||
|
line="69"
|
||||||
|
column="32"/>
|
||||||
|
</issue>
|
||||||
|
|
||||||
|
<issue
|
||||||
|
id="UseKtx"
|
||||||
|
message="Use the KTX extension function `SharedPreferences.edit` instead?"
|
||||||
|
errorLine1=" set(enableRootAccess) = prefs.edit().putBoolean(ENABLE_ROOT_ACCESS, enableRootAccess).apply()"
|
||||||
|
errorLine2=" ~~~~~~~~~~~~">
|
||||||
|
<location
|
||||||
|
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
|
||||||
|
line="73"
|
||||||
|
column="33"/>
|
||||||
|
</issue>
|
||||||
|
|
||||||
|
<issue
|
||||||
|
id="UseKtx"
|
||||||
|
message="Use the KTX extension function `SharedPreferences.edit` instead?"
|
||||||
|
errorLine1=" set(editorTextZoom) = prefs.edit().putFloat(EDITOR_TEXT_ZOOM, editorTextZoom).apply()"
|
||||||
|
errorLine2=" ~~~~~~~~~~~~">
|
||||||
|
<location
|
||||||
|
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
|
||||||
|
line="77"
|
||||||
|
column="31"/>
|
||||||
|
</issue>
|
||||||
|
|
||||||
|
<issue
|
||||||
|
id="UseKtx"
|
||||||
|
message="Use the KTX extension function `SharedPreferences.edit` instead?"
|
||||||
|
errorLine1=" prefs.edit().putInt(VIEW_TYPE_PREFIX + path.lowercase(Locale.getDefault()), value).apply()"
|
||||||
|
errorLine2=" ~~~~~~~~~~~~">
|
||||||
|
<location
|
||||||
|
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
|
||||||
|
line="83"
|
||||||
|
column="13"/>
|
||||||
|
</issue>
|
||||||
|
|
||||||
|
<issue
|
||||||
|
id="UseKtx"
|
||||||
|
message="Use the KTX extension function `SharedPreferences.edit` instead?"
|
||||||
|
errorLine1=" prefs.edit().remove(VIEW_TYPE_PREFIX + path.lowercase(Locale.getDefault())).apply()"
|
||||||
|
errorLine2=" ~~~~~~~~~~~~">
|
||||||
|
<location
|
||||||
|
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
|
||||||
|
line="90"
|
||||||
|
column="9"/>
|
||||||
|
</issue>
|
||||||
|
|
||||||
|
<issue
|
||||||
|
id="UseKtx"
|
||||||
|
message="Use the KTX extension function `SharedPreferences.edit` instead?"
|
||||||
|
errorLine1=" set(fileColumnCnt) = prefs.edit().putInt(getFileColumnsField(), fileColumnCnt).apply()"
|
||||||
|
errorLine2=" ~~~~~~~~~~~~">
|
||||||
|
<location
|
||||||
|
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
|
||||||
|
line="97"
|
||||||
|
column="30"/>
|
||||||
|
</issue>
|
||||||
|
|
||||||
|
<issue
|
||||||
|
id="UseKtx"
|
||||||
|
message="Use the KTX extension function `SharedPreferences.edit` instead?"
|
||||||
|
errorLine1=" set(displayFilenames) = prefs.edit().putBoolean(DISPLAY_FILE_NAMES, displayFilenames).apply()"
|
||||||
|
errorLine2=" ~~~~~~~~~~~~">
|
||||||
|
<location
|
||||||
|
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
|
||||||
|
line="115"
|
||||||
|
column="33"/>
|
||||||
|
</issue>
|
||||||
|
|
||||||
|
<issue
|
||||||
|
id="UseKtx"
|
||||||
|
message="Use the KTX extension function `SharedPreferences.edit` instead?"
|
||||||
|
errorLine1=" set(showTabs) = prefs.edit().putInt(SHOW_TABS, showTabs).apply()"
|
||||||
|
errorLine2=" ~~~~~~~~~~~~">
|
||||||
|
<location
|
||||||
|
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
|
||||||
|
line="119"
|
||||||
|
column="25"/>
|
||||||
|
</issue>
|
||||||
|
|
||||||
|
<issue
|
||||||
|
id="UseKtx"
|
||||||
|
message="Use the KTX extension function `SharedPreferences.edit` instead?"
|
||||||
|
errorLine1=" set(wasStorageAnalysisTabAdded) = prefs.edit().putBoolean(WAS_STORAGE_ANALYSIS_TAB_ADDED, wasStorageAnalysisTabAdded).apply()"
|
||||||
|
errorLine2=" ~~~~~~~~~~~~">
|
||||||
|
<location
|
||||||
|
file="src/main/kotlin/org/fossify/filemanager/helpers/Config.kt"
|
||||||
|
line="123"
|
||||||
|
column="43"/>
|
||||||
|
</issue>
|
||||||
|
|
||||||
|
<issue
|
||||||
|
id="UseKtx"
|
||||||
|
message="Use the KTX extension function `String.toUri` instead?"
|
||||||
|
errorLine1=" intent.data = Uri.parse("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
|
<issue
|
||||||
id="ClickableViewAccessibility"
|
id="ClickableViewAccessibility"
|
||||||
message="Custom view `GestureEditText` overrides `onTouchEvent` but not `performClick`"
|
message="Custom view `GestureEditText` overrides `onTouchEvent` but not `performClick`"
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<bool name="show_donate_in_about">true</bool>
|
<bool name="show_donate_in_about">true</bool>
|
||||||
<bool name="hide_google_relations">true</bool>
|
<bool name="is_google_play_build">false</bool>
|
||||||
<bool name="pretend_thank_you_installed">true</bool>
|
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<bool name="show_donate_in_about">false</bool>
|
<bool name="show_donate_in_about">false</bool>
|
||||||
<bool name="hide_google_relations">false</bool>
|
<bool name="is_google_play_build">true</bool>
|
||||||
<bool name="hide_all_external_links">true</bool>
|
|
||||||
</resources>
|
</resources>
|
||||||
@@ -22,7 +22,6 @@
|
|||||||
android:appCategory="productivity"
|
android:appCategory="productivity"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:label="@string/app_launcher_name"
|
android:label="@string/app_launcher_name"
|
||||||
android:localeConfig="@xml/locale_config"
|
|
||||||
android:requestLegacyExternalStorage="true"
|
android:requestLegacyExternalStorage="true"
|
||||||
android:roundIcon="@mipmap/ic_launcher"
|
android:roundIcon="@mipmap/ic_launcher"
|
||||||
android:theme="@style/AppTheme">
|
android:theme="@style/AppTheme">
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import org.fossify.filemanager.R
|
|||||||
import org.fossify.filemanager.adapters.DecompressItemsAdapter
|
import org.fossify.filemanager.adapters.DecompressItemsAdapter
|
||||||
import org.fossify.filemanager.databinding.ActivityDecompressBinding
|
import org.fossify.filemanager.databinding.ActivityDecompressBinding
|
||||||
import org.fossify.filemanager.extensions.config
|
import org.fossify.filemanager.extensions.config
|
||||||
|
import org.fossify.filemanager.extensions.setLastModified
|
||||||
import org.fossify.filemanager.models.ListItem
|
import org.fossify.filemanager.models.ListItem
|
||||||
import java.io.BufferedInputStream
|
import java.io.BufferedInputStream
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@@ -44,13 +45,12 @@ class DecompressActivity : SimpleActivity() {
|
|||||||
private var filename = ""
|
private var filename = ""
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
isMaterialActivity = true
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
setupOptionsMenu()
|
setupOptionsMenu()
|
||||||
binding.apply {
|
binding.apply {
|
||||||
updateMaterialActivityViews(decompressCoordinator, decompressList, useTransparentNavigation = true, useTopSearchMenu = false)
|
setupEdgeToEdge(padBottomSystem = listOf(decompressList))
|
||||||
setupMaterialScrollListener(decompressList, decompressToolbar)
|
setupMaterialScrollListener(binding.decompressList, binding.decompressAppbar)
|
||||||
}
|
}
|
||||||
|
|
||||||
uri = intent.data
|
uri = intent.data
|
||||||
@@ -69,7 +69,7 @@ class DecompressActivity : SimpleActivity() {
|
|||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
setupToolbar(binding.decompressToolbar, NavigationIcon.Arrow)
|
setupTopAppBar(binding.decompressAppbar, NavigationIcon.Arrow)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSaveInstanceState(outState: Bundle) {
|
override fun onSaveInstanceState(outState: Bundle) {
|
||||||
@@ -87,16 +87,18 @@ class DecompressActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBackPressed() {
|
override fun onBackPressedCompat(): Boolean {
|
||||||
if (currentPath.isEmpty()) {
|
return if (currentPath.isEmpty()) {
|
||||||
super.onBackPressed()
|
false
|
||||||
} else {
|
} else {
|
||||||
val newPath = if (currentPath.contains("/")) currentPath.getParentPath() else ""
|
val newPath = if (currentPath.contains("/")) currentPath.getParentPath() else ""
|
||||||
updateCurrentPath(newPath)
|
updateCurrentPath(newPath)
|
||||||
|
true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupFilesList() {
|
private fun setupFilesList() {
|
||||||
|
allFiles.clear()
|
||||||
fillAllListItems(uri!!) {
|
fillAllListItems(uri!!) {
|
||||||
updateCurrentPath("")
|
updateCurrentPath("")
|
||||||
}
|
}
|
||||||
@@ -153,6 +155,7 @@ class DecompressActivity : SimpleActivity() {
|
|||||||
zipInputStream.setPassword(password?.toCharArray())
|
zipInputStream.setPassword(password?.toCharArray())
|
||||||
}
|
}
|
||||||
val buffer = ByteArray(1024)
|
val buffer = ByteArray(1024)
|
||||||
|
val foldersTimestamp = mutableListOf<Pair<File, LocalFileHeader>>()
|
||||||
|
|
||||||
zipInputStream.use {
|
zipInputStream.use {
|
||||||
while (true) {
|
while (true) {
|
||||||
@@ -161,18 +164,25 @@ class DecompressActivity : SimpleActivity() {
|
|||||||
val parent = "$destination/$filename"
|
val parent = "$destination/$filename"
|
||||||
val newPath = "$parent/${entry.fileName.trimEnd('/')}"
|
val newPath = "$parent/${entry.fileName.trimEnd('/')}"
|
||||||
|
|
||||||
|
|
||||||
if (!getDoesFilePathExist(parent)) {
|
if (!getDoesFilePathExist(parent)) {
|
||||||
if (!createDirectorySync(parent)) {
|
if (!createDirectorySync(parent)) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entry.isDirectory) {
|
val outputFile = File(newPath)
|
||||||
|
|
||||||
|
val isVulnerableForZipPathTraversal = !outputFile.canonicalPath.startsWith(parent)
|
||||||
|
if (isVulnerableForZipPathTraversal) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
val isVulnerableForZipPathTraversal = !File(newPath).canonicalPath.startsWith(parent)
|
if (entry.isDirectory) {
|
||||||
if (isVulnerableForZipPathTraversal) {
|
if (!outputFile.exists()) {
|
||||||
|
outputFile.mkdirs()
|
||||||
|
}
|
||||||
|
foldersTimestamp.add(Pair(outputFile, entry))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,8 +197,11 @@ class DecompressActivity : SimpleActivity() {
|
|||||||
fos!!.write(buffer, 0, count)
|
fos!!.write(buffer, 0, count)
|
||||||
}
|
}
|
||||||
fos!!.close()
|
fos!!.close()
|
||||||
|
outputFile.setLastModified(entry)
|
||||||
|
}
|
||||||
|
for ((outputFile, entry) in foldersTimestamp.asReversed()) {
|
||||||
|
outputFile.setLastModified(entry)
|
||||||
}
|
}
|
||||||
|
|
||||||
toast(R.string.decompression_successful)
|
toast(R.string.decompression_successful)
|
||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,20 +18,19 @@ class FavoritesActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
|||||||
private val binding by viewBinding(ActivityFavoritesBinding::inflate)
|
private val binding by viewBinding(ActivityFavoritesBinding::inflate)
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
isMaterialActivity = true
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
setupOptionsMenu()
|
setupOptionsMenu()
|
||||||
updateFavorites()
|
updateFavorites()
|
||||||
binding.apply {
|
binding.apply {
|
||||||
updateMaterialActivityViews(manageFavoritesCoordinator, manageFavoritesList, useTransparentNavigation = true, useTopSearchMenu = false)
|
setupEdgeToEdge(padBottomSystem = listOf(manageFavoritesList))
|
||||||
setupMaterialScrollListener(manageFavoritesList, manageFavoritesToolbar)
|
setupMaterialScrollListener(binding.manageFavoritesList, binding.manageFavoritesAppbar)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
setupToolbar(binding.manageFavoritesToolbar, NavigationIcon.Arrow)
|
setupTopAppBar(binding.manageFavoritesAppbar, NavigationIcon.Arrow)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupOptionsMenu() {
|
private fun setupOptionsMenu() {
|
||||||
|
|||||||
@@ -1,22 +1,17 @@
|
|||||||
package org.fossify.filemanager.activities
|
package org.fossify.filemanager.activities
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.ClipData
|
import android.content.ClipData
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.media.RingtoneManager
|
import android.media.RingtoneManager
|
||||||
import android.net.Uri
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Environment
|
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.provider.Settings
|
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.viewpager.widget.ViewPager
|
import androidx.viewpager.widget.ViewPager
|
||||||
import com.stericson.RootTools.RootTools
|
import com.stericson.RootTools.RootTools
|
||||||
import me.grantland.widget.AutofitHelper
|
import me.grantland.widget.AutofitHelper
|
||||||
import org.fossify.commons.dialogs.ConfirmationAdvancedDialog
|
|
||||||
import org.fossify.commons.dialogs.RadioGroupDialog
|
import org.fossify.commons.dialogs.RadioGroupDialog
|
||||||
import org.fossify.commons.extensions.appLaunched
|
import org.fossify.commons.extensions.appLaunched
|
||||||
import org.fossify.commons.extensions.appLockManager
|
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.onGlobalLayout
|
||||||
import org.fossify.commons.extensions.onTabSelectionChanged
|
import org.fossify.commons.extensions.onTabSelectionChanged
|
||||||
import org.fossify.commons.extensions.sdCardPath
|
import org.fossify.commons.extensions.sdCardPath
|
||||||
import org.fossify.commons.extensions.showErrorToast
|
|
||||||
import org.fossify.commons.extensions.toast
|
import org.fossify.commons.extensions.toast
|
||||||
import org.fossify.commons.extensions.updateBottomTabItemColors
|
import org.fossify.commons.extensions.updateBottomTabItemColors
|
||||||
import org.fossify.commons.extensions.viewBinding
|
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.TAB_STORAGE_ANALYSIS
|
||||||
import org.fossify.commons.helpers.VIEW_TYPE_GRID
|
import org.fossify.commons.helpers.VIEW_TYPE_GRID
|
||||||
import org.fossify.commons.helpers.ensureBackgroundThread
|
import org.fossify.commons.helpers.ensureBackgroundThread
|
||||||
import org.fossify.commons.helpers.isRPlus
|
|
||||||
import org.fossify.commons.models.FAQItem
|
import org.fossify.commons.models.FAQItem
|
||||||
import org.fossify.commons.models.RadioItem
|
import org.fossify.commons.models.RadioItem
|
||||||
import org.fossify.commons.models.Release
|
import org.fossify.commons.models.Release
|
||||||
@@ -82,9 +75,10 @@ import org.fossify.filemanager.interfaces.ItemOperationsListener
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class MainActivity : SimpleActivity() {
|
class MainActivity : SimpleActivity() {
|
||||||
|
override var isSearchBarEnabled = true
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val BACK_PRESS_TIMEOUT = 5000
|
private const val BACK_PRESS_TIMEOUT = 5000
|
||||||
private const val MANAGE_STORAGE_RC = 201
|
|
||||||
private const val PICKED_PATH = "picked_path"
|
private const val PICKED_PATH = "picked_path"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,7 +93,6 @@ class MainActivity : SimpleActivity() {
|
|||||||
private var mStoredShowTabs = 0
|
private var mStoredShowTabs = 0
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
isMaterialActivity = true
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
appLaunched(BuildConfig.APPLICATION_ID)
|
appLaunched(BuildConfig.APPLICATION_ID)
|
||||||
@@ -117,7 +110,7 @@ class MainActivity : SimpleActivity() {
|
|||||||
storeStateVariables()
|
storeStateVariables()
|
||||||
setupTabs()
|
setupTabs()
|
||||||
|
|
||||||
updateMaterialActivityViews(binding.mainCoordinator, null, useTransparentNavigation = false, useTopSearchMenu = true)
|
setupEdgeToEdge(padBottomImeAndSystem = listOf(binding.mainTabsHolder))
|
||||||
|
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
config.temporarilyShowHidden = false
|
config.temporarilyShowHidden = false
|
||||||
@@ -168,12 +161,13 @@ class MainActivity : SimpleActivity() {
|
|||||||
config.lastUsedViewPagerPage = binding.mainViewPager.currentItem
|
config.lastUsedViewPagerPage = binding.mainViewPager.currentItem
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBackPressed() {
|
override fun onBackPressedCompat(): Boolean {
|
||||||
val currentFragment = getCurrentFragment()
|
val currentFragment = getCurrentFragment()
|
||||||
if (binding.mainMenu.isSearchOpen) {
|
if (binding.mainMenu.isSearchOpen) {
|
||||||
binding.mainMenu.closeSearch()
|
binding.mainMenu.closeSearch()
|
||||||
|
return true
|
||||||
} else if (currentFragment is RecentsFragment || currentFragment is StorageFragment) {
|
} else if (currentFragment is RecentsFragment || currentFragment is StorageFragment) {
|
||||||
super.onBackPressed()
|
return false
|
||||||
} else if ((currentFragment as ItemsFragment).getBreadcrumbs().getItemCount() <= 1) {
|
} else if ((currentFragment as ItemsFragment).getBreadcrumbs().getItemCount() <= 1) {
|
||||||
if (!wasBackJustPressed && config.pressBackTwice) {
|
if (!wasBackJustPressed && config.pressBackTwice) {
|
||||||
wasBackJustPressed = true
|
wasBackJustPressed = true
|
||||||
@@ -181,13 +175,16 @@ class MainActivity : SimpleActivity() {
|
|||||||
Handler().postDelayed({
|
Handler().postDelayed({
|
||||||
wasBackJustPressed = false
|
wasBackJustPressed = false
|
||||||
}, BACK_PRESS_TIMEOUT.toLong())
|
}, BACK_PRESS_TIMEOUT.toLong())
|
||||||
|
return true
|
||||||
} else {
|
} else {
|
||||||
appLockManager.lock()
|
appLockManager.lock()
|
||||||
finish()
|
finish()
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
currentFragment.getBreadcrumbs().removeBreadcrumb()
|
currentFragment.getBreadcrumbs().removeBreadcrumb()
|
||||||
openPath(currentFragment.getBreadcrumbs().getLastItem().path)
|
openPath(currentFragment.getBreadcrumbs().getLastItem().path)
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -197,7 +194,7 @@ class MainActivity : SimpleActivity() {
|
|||||||
val currentViewType = config.getFolderViewType(currentFragment.currentPath)
|
val currentViewType = config.getFolderViewType(currentFragment.currentPath)
|
||||||
val favorites = config.favorites
|
val favorites = config.favorites
|
||||||
|
|
||||||
binding.mainMenu.getToolbar().menu.apply {
|
binding.mainMenu.requireToolbar().menu.apply {
|
||||||
findItem(R.id.sort).isVisible = currentFragment is ItemsFragment
|
findItem(R.id.sort).isVisible = currentFragment is ItemsFragment
|
||||||
findItem(R.id.change_view_type).isVisible = currentFragment !is StorageFragment
|
findItem(R.id.change_view_type).isVisible = currentFragment !is StorageFragment
|
||||||
|
|
||||||
@@ -214,7 +211,7 @@ class MainActivity : SimpleActivity() {
|
|||||||
|
|
||||||
findItem(R.id.column_count).isVisible = currentViewType == VIEW_TYPE_GRID && currentFragment !is StorageFragment
|
findItem(R.id.column_count).isVisible = currentViewType == VIEW_TYPE_GRID && currentFragment !is StorageFragment
|
||||||
|
|
||||||
findItem(R.id.more_apps_from_us).isVisible = !resources.getBoolean(R.bool.hide_google_relations)
|
findItem(R.id.more_apps_from_us).isVisible = resources.getBoolean(R.bool.is_google_play_build)
|
||||||
findItem(R.id.settings).isVisible = !isCreateDocumentIntent
|
findItem(R.id.settings).isVisible = !isCreateDocumentIntent
|
||||||
findItem(R.id.about).isVisible = !isCreateDocumentIntent
|
findItem(R.id.about).isVisible = !isCreateDocumentIntent
|
||||||
}
|
}
|
||||||
@@ -222,7 +219,7 @@ class MainActivity : SimpleActivity() {
|
|||||||
|
|
||||||
private fun setupOptionsMenu() {
|
private fun setupOptionsMenu() {
|
||||||
binding.mainMenu.apply {
|
binding.mainMenu.apply {
|
||||||
getToolbar().inflateMenu(R.menu.menu)
|
requireToolbar().inflateMenu(R.menu.menu)
|
||||||
toggleHideOnScroll(false)
|
toggleHideOnScroll(false)
|
||||||
setupMenu()
|
setupMenu()
|
||||||
|
|
||||||
@@ -236,7 +233,7 @@ class MainActivity : SimpleActivity() {
|
|||||||
getCurrentFragment()?.searchQueryChanged(text)
|
getCurrentFragment()?.searchQueryChanged(text)
|
||||||
}
|
}
|
||||||
|
|
||||||
getToolbar().setOnMenuItemClickListener { menuItem ->
|
requireToolbar().setOnMenuItemClickListener { menuItem ->
|
||||||
if (getCurrentFragment() == null) {
|
if (getCurrentFragment() == null) {
|
||||||
return@setOnMenuItemClickListener true
|
return@setOnMenuItemClickListener true
|
||||||
}
|
}
|
||||||
@@ -281,17 +278,7 @@ 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() {
|
private fun updateMenuColors() {
|
||||||
updateStatusbarColor(getProperBackgroundColor())
|
|
||||||
binding.mainMenu.updateColors()
|
binding.mainMenu.updateColors()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -323,38 +310,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) {
|
private fun initFileManager(refreshRecents: Boolean) {
|
||||||
if (intent.action == Intent.ACTION_VIEW && intent.data != null) {
|
if (intent.action == Intent.ACTION_VIEW && intent.data != null) {
|
||||||
val data = intent.data
|
val data = intent.data
|
||||||
@@ -411,7 +366,9 @@ class MainActivity : SimpleActivity() {
|
|||||||
private fun setupTabs() {
|
private fun setupTabs() {
|
||||||
binding.mainTabsHolder.removeAllTabs()
|
binding.mainTabsHolder.removeAllTabs()
|
||||||
val action = intent.action
|
val action = intent.action
|
||||||
val isPickFileIntent = action == RingtoneManager.ACTION_RINGTONE_PICKER || action == Intent.ACTION_GET_CONTENT || action == Intent.ACTION_PICK
|
val isPickFileIntent = action == RingtoneManager.ACTION_RINGTONE_PICKER
|
||||||
|
|| action == Intent.ACTION_GET_CONTENT
|
||||||
|
|| action == Intent.ACTION_PICK
|
||||||
val isCreateDocumentIntent = action == Intent.ACTION_CREATE_DOCUMENT
|
val isCreateDocumentIntent = action == Intent.ACTION_CREATE_DOCUMENT
|
||||||
|
|
||||||
if (isPickFileIntent) {
|
if (isPickFileIntent) {
|
||||||
@@ -464,7 +421,6 @@ class MainActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val bottomBarColor = getBottomNavigationBackgroundColor()
|
val bottomBarColor = getBottomNavigationBackgroundColor()
|
||||||
updateNavigationBarColor(bottomBarColor)
|
|
||||||
mainTabsHolder.setBackgroundColor(bottomBarColor)
|
mainTabsHolder.setBackgroundColor(bottomBarColor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -628,7 +584,7 @@ class MainActivity : SimpleActivity() {
|
|||||||
FAQItem(R.string.faq_9_title_commons, R.string.faq_9_text_commons)
|
FAQItem(R.string.faq_9_title_commons, R.string.faq_9_text_commons)
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!resources.getBoolean(R.bool.hide_google_relations)) {
|
if (resources.getBoolean(R.bool.is_google_play_build)) {
|
||||||
faqItems.add(FAQItem(R.string.faq_2_title_commons, R.string.faq_2_text_commons))
|
faqItems.add(FAQItem(R.string.faq_2_title_commons, R.string.faq_2_text_commons))
|
||||||
faqItems.add(FAQItem(R.string.faq_6_title_commons, R.string.faq_6_text_commons))
|
faqItems.add(FAQItem(R.string.faq_6_title_commons, R.string.faq_6_text_commons))
|
||||||
faqItems.add(FAQItem(R.string.faq_7_title_commons, R.string.faq_7_text_commons))
|
faqItems.add(FAQItem(R.string.faq_7_title_commons, R.string.faq_7_text_commons))
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import org.fossify.filemanager.databinding.ActivityMimetypesBinding
|
|||||||
import org.fossify.filemanager.dialogs.ChangeSortingDialog
|
import org.fossify.filemanager.dialogs.ChangeSortingDialog
|
||||||
import org.fossify.filemanager.dialogs.ChangeViewTypeDialog
|
import org.fossify.filemanager.dialogs.ChangeViewTypeDialog
|
||||||
import org.fossify.filemanager.extensions.config
|
import org.fossify.filemanager.extensions.config
|
||||||
|
import org.fossify.filemanager.extensions.isPathInHiddenFolder
|
||||||
import org.fossify.filemanager.extensions.tryOpenPathIntent
|
import org.fossify.filemanager.extensions.tryOpenPathIntent
|
||||||
import org.fossify.filemanager.helpers.*
|
import org.fossify.filemanager.helpers.*
|
||||||
import org.fossify.filemanager.interfaces.ItemOperationsListener
|
import org.fossify.filemanager.interfaces.ItemOperationsListener
|
||||||
@@ -43,14 +44,13 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
|||||||
private var currentVolume = PRIMARY_VOLUME_NAME
|
private var currentVolume = PRIMARY_VOLUME_NAME
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
isMaterialActivity = true
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
setupOptionsMenu()
|
setupOptionsMenu()
|
||||||
refreshMenuItems()
|
refreshMenuItems()
|
||||||
binding.apply {
|
binding.apply {
|
||||||
updateMaterialActivityViews(mimetypesCoordinator, mimetypesList, useTransparentNavigation = true, useTopSearchMenu = false)
|
setupEdgeToEdge(padBottomImeAndSystem = listOf(mimetypesList))
|
||||||
setupMaterialScrollListener(mimetypesList, mimetypesToolbar)
|
setupMaterialScrollListener(binding.mimetypesList, binding.mimetypesAppbar)
|
||||||
}
|
}
|
||||||
|
|
||||||
currentMimeType = intent.getStringExtra(SHOW_MIMETYPE) ?: return
|
currentMimeType = intent.getStringExtra(SHOW_MIMETYPE) ?: return
|
||||||
@@ -84,7 +84,7 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
|||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
setupToolbar(binding.mimetypesToolbar, NavigationIcon.Arrow, searchMenuItem = searchMenuItem)
|
setupTopAppBar(binding.mimetypesAppbar, NavigationIcon.Arrow, searchMenuItem = searchMenuItem)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun refreshMenuItems() {
|
private fun refreshMenuItems() {
|
||||||
@@ -133,10 +133,11 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
|||||||
override fun selectedPaths(paths: ArrayList<String>) {}
|
override fun selectedPaths(paths: ArrayList<String>) {}
|
||||||
|
|
||||||
fun searchQueryChanged(text: String) {
|
fun searchQueryChanged(text: String) {
|
||||||
val searchText = text.trim()
|
val normalizedText = text.normalizeString()
|
||||||
lastSearchedText = searchText
|
val searchNormalizedText = normalizedText.trim()
|
||||||
|
lastSearchedText = searchNormalizedText
|
||||||
when {
|
when {
|
||||||
searchText.isEmpty() -> {
|
searchNormalizedText.isEmpty() -> {
|
||||||
binding.apply {
|
binding.apply {
|
||||||
mimetypesFastscroller.beVisible()
|
mimetypesFastscroller.beVisible()
|
||||||
getRecyclerAdapter()?.updateItems(storedItems)
|
getRecyclerAdapter()?.updateItems(storedItems)
|
||||||
@@ -145,7 +146,7 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
searchText.length == 1 -> {
|
searchNormalizedText.length == 1 -> {
|
||||||
binding.apply {
|
binding.apply {
|
||||||
mimetypesFastscroller.beGone()
|
mimetypesFastscroller.beGone()
|
||||||
mimetypesPlaceholder.beVisible()
|
mimetypesPlaceholder.beVisible()
|
||||||
@@ -155,11 +156,13 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
|||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
ensureBackgroundThread {
|
ensureBackgroundThread {
|
||||||
if (lastSearchedText != searchText) {
|
if (lastSearchedText != searchNormalizedText) {
|
||||||
return@ensureBackgroundThread
|
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 {
|
runOnUiThread {
|
||||||
getRecyclerAdapter()?.updateItems(listItems, text)
|
getRecyclerAdapter()?.updateItems(listItems, text)
|
||||||
@@ -285,7 +288,10 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
|||||||
try {
|
try {
|
||||||
val fullMimetype = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault()) ?: return@queryCursor
|
val fullMimetype = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault()) ?: return@queryCursor
|
||||||
val name = cursor.getStringValue(MediaStore.Files.FileColumns.DISPLAY_NAME)
|
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
|
return@queryCursor
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -294,7 +300,6 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
|||||||
return@queryCursor
|
return@queryCursor
|
||||||
}
|
}
|
||||||
|
|
||||||
val path = cursor.getStringValue(MediaStore.Files.FileColumns.DATA)
|
|
||||||
val lastModified = cursor.getLongValue(MediaStore.Files.FileColumns.DATE_MODIFIED) * 1000
|
val lastModified = cursor.getLongValue(MediaStore.Files.FileColumns.DATE_MODIFIED) * 1000
|
||||||
|
|
||||||
val mimetype = fullMimetype.substringBefore("/")
|
val mimetype = fullMimetype.substringBefore("/")
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import android.net.Uri
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.print.PrintAttributes
|
import android.print.PrintAttributes
|
||||||
import android.print.PrintManager
|
import android.print.PrintManager
|
||||||
|
import android.util.Base64
|
||||||
import android.view.inputmethod.EditorInfo
|
import android.view.inputmethod.EditorInfo
|
||||||
import android.webkit.WebResourceRequest
|
import android.webkit.WebResourceRequest
|
||||||
import android.webkit.WebView
|
import android.webkit.WebView
|
||||||
@@ -50,13 +51,12 @@ class ReadTextActivity : SimpleActivity() {
|
|||||||
private lateinit var searchClearBtn: ImageView
|
private lateinit var searchClearBtn: ImageView
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
isMaterialActivity = true
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
setupOptionsMenu()
|
setupOptionsMenu()
|
||||||
binding.apply {
|
binding.apply {
|
||||||
updateMaterialActivityViews(readTextCoordinator, readTextView, useTransparentNavigation = true, useTopSearchMenu = false)
|
setupEdgeToEdge(padBottomImeAndSystem = listOf(readTextView))
|
||||||
setupMaterialScrollListener(readTextHolder, readTextToolbar)
|
setupMaterialScrollListener(binding.readTextHolder, binding.readTextAppbar)
|
||||||
}
|
}
|
||||||
|
|
||||||
searchQueryET = findViewById(R.id.search_query)
|
searchQueryET = findViewById(R.id.search_query)
|
||||||
@@ -95,7 +95,7 @@ class ReadTextActivity : SimpleActivity() {
|
|||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
setupToolbar(binding.readTextToolbar, NavigationIcon.Arrow)
|
setupTopAppBar(binding.readTextAppbar, NavigationIcon.Arrow)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSaveInstanceState(outState: Bundle) {
|
override fun onSaveInstanceState(outState: Bundle) {
|
||||||
@@ -119,22 +119,26 @@ class ReadTextActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBackPressed() {
|
override fun onBackPressedCompat(): Boolean {
|
||||||
val hasUnsavedChanges = originalText != binding.readTextView.text.toString()
|
val hasUnsavedChanges = originalText != binding.readTextView.text.toString()
|
||||||
when {
|
return when {
|
||||||
isSearchActive -> closeSearch()
|
isSearchActive -> {
|
||||||
|
closeSearch()
|
||||||
|
true
|
||||||
|
}
|
||||||
hasUnsavedChanges && System.currentTimeMillis() - lastSavePromptTS > SAVE_DISCARD_PROMPT_INTERVAL -> {
|
hasUnsavedChanges && System.currentTimeMillis() - lastSavePromptTS > SAVE_DISCARD_PROMPT_INTERVAL -> {
|
||||||
lastSavePromptTS = System.currentTimeMillis()
|
lastSavePromptTS = System.currentTimeMillis()
|
||||||
ConfirmationAdvancedDialog(this, "", R.string.save_before_closing, R.string.save, R.string.discard) {
|
ConfirmationAdvancedDialog(this, "", R.string.save_before_closing, R.string.save, R.string.discard) {
|
||||||
if (it) {
|
if (it) {
|
||||||
saveText(true)
|
saveText(true)
|
||||||
} else {
|
} else {
|
||||||
super.onBackPressed()
|
performDefaultBack()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> super.onBackPressed()
|
else -> false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,6 +147,7 @@ class ReadTextActivity : SimpleActivity() {
|
|||||||
when (menuItem.itemId) {
|
when (menuItem.itemId) {
|
||||||
R.id.menu_search -> openSearch()
|
R.id.menu_search -> openSearch()
|
||||||
R.id.menu_save -> saveText()
|
R.id.menu_save -> saveText()
|
||||||
|
R.id.menu_save_as -> saveAsText()
|
||||||
R.id.menu_open_with -> openPath(intent.dataString!!, true)
|
R.id.menu_open_with -> openPath(intent.dataString!!, true)
|
||||||
R.id.menu_print -> printText()
|
R.id.menu_print -> printText()
|
||||||
else -> return@setOnMenuItemClickListener false
|
else -> return@setOnMenuItemClickListener false
|
||||||
@@ -164,10 +169,14 @@ class ReadTextActivity : SimpleActivity() {
|
|||||||
}, 250)
|
}, 250)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun saveText(shouldExitAfterSaving: Boolean = false) {
|
private fun updateFilePath() {
|
||||||
if (filePath.isEmpty()) {
|
if (filePath.isEmpty()) {
|
||||||
filePath = getRealPathFromURI(intent.data!!) ?: ""
|
filePath = getRealPathFromURI(intent.data!!) ?: ""
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun saveAsText(shouldExitAfterSaving: Boolean = false) {
|
||||||
|
updateFilePath()
|
||||||
|
|
||||||
if (filePath.isEmpty()) {
|
if (filePath.isEmpty()) {
|
||||||
SaveAsDialog(this, filePath, true) { _, filename ->
|
SaveAsDialog(this, filePath, true) { _, filename ->
|
||||||
@@ -181,6 +190,7 @@ class ReadTextActivity : SimpleActivity() {
|
|||||||
} else {
|
} else {
|
||||||
SELECT_SAVE_FILE_INTENT
|
SELECT_SAVE_FILE_INTENT
|
||||||
}
|
}
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
startActivityForResult(this, requestCode)
|
startActivityForResult(this, requestCode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -199,6 +209,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) {
|
private fun saveTextContent(outputStream: OutputStream?, shouldExitAfterSaving: Boolean, shouldOverwriteOriginalText: Boolean) {
|
||||||
if (outputStream != null) {
|
if (outputStream != null) {
|
||||||
val currentText = binding.readTextView.text.toString()
|
val currentText = binding.readTextView.text.toString()
|
||||||
@@ -211,7 +236,7 @@ class ReadTextActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (shouldExitAfterSaving) {
|
if (shouldExitAfterSaving) {
|
||||||
super.onBackPressed()
|
performDefaultBack()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
toast(R.string.unknown_error_occurred)
|
toast(R.string.unknown_error_occurred)
|
||||||
@@ -229,7 +254,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) {
|
} catch (e: Exception) {
|
||||||
showErrorToast(e)
|
showErrorToast(e)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,21 @@ class SaveAsActivity : SimpleActivity() {
|
|||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(binding.root)
|
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) {
|
if (intent.action == Intent.ACTION_SEND && intent.extras?.containsKey(Intent.EXTRA_STREAM) == true) {
|
||||||
FilePickerDialog(this, pickFile = false, showHidden = config.shouldShowHidden(), showFAB = true, showFavoritesButton = true) {
|
FilePickerDialog(this, pickFile = false, showHidden = config.shouldShowHidden(), showFAB = true, showFavoritesButton = true) {
|
||||||
val destination = it
|
val destination = it
|
||||||
@@ -36,14 +50,15 @@ class SaveAsActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val source = intent.getParcelableExtra<Uri>(Intent.EXTRA_STREAM)!!
|
val source = intent.getParcelableExtra<Uri>(Intent.EXTRA_STREAM)!!
|
||||||
val filename = getFilenameFromContentUri(source)
|
val originalFilename = getFilenameFromContentUri(source)
|
||||||
?: source.toString().getFilenameFromPath()
|
?: source.toString().getFilenameFromPath()
|
||||||
|
val filename = sanitizeFilename(originalFilename)
|
||||||
val mimeType = contentResolver.getType(source)
|
val mimeType = contentResolver.getType(source)
|
||||||
?: intent.type?.takeIf { it != "*/*" }
|
?: intent.type?.takeIf { it != "*/*" }
|
||||||
?: filename.getMimeType()
|
?: filename.getMimeType()
|
||||||
val inputStream = contentResolver.openInputStream(source)
|
val inputStream = contentResolver.openInputStream(source)
|
||||||
|
|
||||||
val destinationPath = "$destination/$filename"
|
val destinationPath = getAvailablePath("$destination/$filename")
|
||||||
val outputStream = getFileOutputStreamSync(destinationPath, mimeType, null)!!
|
val outputStream = getFileOutputStreamSync(destinationPath, mimeType, null)!!
|
||||||
inputStream!!.copyTo(outputStream)
|
inputStream!!.copyTo(outputStream)
|
||||||
rescanPaths(arrayListOf(destinationPath))
|
rescanPaths(arrayListOf(destinationPath))
|
||||||
@@ -64,6 +79,37 @@ class SaveAsActivity : SimpleActivity() {
|
|||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
setupToolbar(binding.activitySaveAsToolbar, NavigationIcon.Arrow)
|
setupTopAppBar(binding.activitySaveAsAppbar, NavigationIcon.Arrow)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun sanitizeFilename(filename: String): String {
|
||||||
|
return filename.replace("[/\\\\<>:\"|?*\u0000-\u001F]".toRegex(), "_")
|
||||||
|
.takeIf { it.isNotBlank() } ?: "unnamed_file"
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getAvailablePath(destinationPath: String): String {
|
||||||
|
if (!getDoesFilePathExist(destinationPath)) {
|
||||||
|
return destinationPath
|
||||||
|
}
|
||||||
|
|
||||||
|
val file = File(destinationPath)
|
||||||
|
return findAvailableName(file)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun findAvailableName(file: File): String {
|
||||||
|
val parent = file.parent ?: return file.absolutePath
|
||||||
|
val name = file.nameWithoutExtension
|
||||||
|
val ext = if (file.extension.isNotEmpty()) ".${file.extension}" else ""
|
||||||
|
|
||||||
|
var index = 1
|
||||||
|
var newPath: String
|
||||||
|
|
||||||
|
do {
|
||||||
|
newPath = "$parent/${name}_$index$ext"
|
||||||
|
index++
|
||||||
|
} while (getDoesFilePathExist(newPath))
|
||||||
|
|
||||||
|
return newPath
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -21,18 +21,17 @@ class SettingsActivity : SimpleActivity() {
|
|||||||
private val binding by viewBinding(ActivitySettingsBinding::inflate)
|
private val binding by viewBinding(ActivitySettingsBinding::inflate)
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
isMaterialActivity = true
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
binding.apply {
|
binding.apply {
|
||||||
updateMaterialActivityViews(settingsCoordinator, settingsHolder, useTransparentNavigation = true, useTopSearchMenu = false)
|
setupEdgeToEdge(padBottomSystem = listOf(settingsNestedScrollview))
|
||||||
setupMaterialScrollListener(settingsNestedScrollview, settingsToolbar)
|
setupMaterialScrollListener(binding.settingsNestedScrollview, binding.settingsAppbar)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
setupToolbar(binding.settingsToolbar, NavigationIcon.Arrow)
|
setupTopAppBar(binding.settingsAppbar, NavigationIcon.Arrow)
|
||||||
|
|
||||||
setupCustomizeColors()
|
setupCustomizeColors()
|
||||||
setupUseEnglish()
|
setupUseEnglish()
|
||||||
|
|||||||
@@ -1,9 +1,15 @@
|
|||||||
package org.fossify.filemanager.activities
|
package org.fossify.filemanager.activities
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.Intent
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
|
import android.provider.Settings
|
||||||
import org.fossify.commons.activities.BaseSimpleActivity
|
import org.fossify.commons.activities.BaseSimpleActivity
|
||||||
|
import org.fossify.commons.dialogs.ConfirmationAdvancedDialog
|
||||||
import org.fossify.commons.extensions.hasPermission
|
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.PERMISSION_WRITE_STORAGE
|
||||||
import org.fossify.commons.helpers.isRPlus
|
import org.fossify.commons.helpers.isRPlus
|
||||||
import org.fossify.filemanager.R
|
import org.fossify.filemanager.R
|
||||||
@@ -31,10 +37,23 @@ open class SimpleActivity : BaseSimpleActivity() {
|
|||||||
R.mipmap.ic_launcher_grey_black
|
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 getAppLauncherName() = getString(R.string.app_launcher_name)
|
||||||
|
|
||||||
override fun getRepositoryName() = "File-Manager"
|
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")
|
@SuppressLint("NewApi")
|
||||||
fun hasStoragePermission(): Boolean {
|
fun hasStoragePermission(): Boolean {
|
||||||
return if (isRPlus()) {
|
return if (isRPlus()) {
|
||||||
@@ -43,4 +62,39 @@ open class SimpleActivity : BaseSimpleActivity() {
|
|||||||
hasPermission(PERMISSION_WRITE_STORAGE)
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -117,8 +117,8 @@ class DecompressItemsAdapter(activity: SimpleActivity, var listItems: MutableLis
|
|||||||
private fun getImagePathToLoad(path: String): Any {
|
private fun getImagePathToLoad(path: String): Any {
|
||||||
return if (path.endsWith(".apk", true)) {
|
return 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
|
||||||
val appInfo = packageInfo.applicationInfo
|
if (appInfo != null) {
|
||||||
appInfo.sourceDir = path
|
appInfo.sourceDir = path
|
||||||
appInfo.publicSourceDir = path
|
appInfo.publicSourceDir = path
|
||||||
appInfo.loadIcon(activity.packageManager)
|
appInfo.loadIcon(activity.packageManager)
|
||||||
|
|||||||
@@ -101,6 +101,7 @@ import org.fossify.filemanager.extensions.config
|
|||||||
import org.fossify.filemanager.extensions.isPathOnRoot
|
import org.fossify.filemanager.extensions.isPathOnRoot
|
||||||
import org.fossify.filemanager.extensions.isZipFile
|
import org.fossify.filemanager.extensions.isZipFile
|
||||||
import org.fossify.filemanager.extensions.setAs
|
import org.fossify.filemanager.extensions.setAs
|
||||||
|
import org.fossify.filemanager.extensions.setLastModified
|
||||||
import org.fossify.filemanager.extensions.sharePaths
|
import org.fossify.filemanager.extensions.sharePaths
|
||||||
import org.fossify.filemanager.extensions.toggleItemVisibility
|
import org.fossify.filemanager.extensions.toggleItemVisibility
|
||||||
import org.fossify.filemanager.extensions.tryOpenPathIntent
|
import org.fossify.filemanager.extensions.tryOpenPathIntent
|
||||||
@@ -127,7 +128,8 @@ class ItemsAdapter(
|
|||||||
private val swipeRefreshLayout: SwipeRefreshLayout?,
|
private val swipeRefreshLayout: SwipeRefreshLayout?,
|
||||||
canHaveIndividualViewType: Boolean = true,
|
canHaveIndividualViewType: Boolean = true,
|
||||||
itemClick: (Any) -> Unit,
|
itemClick: (Any) -> Unit,
|
||||||
) : MyRecyclerViewAdapter(activity, recyclerView, itemClick), RecyclerViewFastScroller.OnPopupTextUpdate {
|
) : MyRecyclerViewAdapter(activity, recyclerView, itemClick),
|
||||||
|
RecyclerViewFastScroller.OnPopupTextUpdate {
|
||||||
|
|
||||||
private lateinit var fileDrawable: Drawable
|
private lateinit var fileDrawable: Drawable
|
||||||
private lateinit var folderDrawable: Drawable
|
private lateinit var folderDrawable: Drawable
|
||||||
@@ -142,7 +144,9 @@ class ItemsAdapter(
|
|||||||
|
|
||||||
private val config = activity.config
|
private val config = activity.config
|
||||||
private val viewType = if (canHaveIndividualViewType) {
|
private val viewType = if (canHaveIndividualViewType) {
|
||||||
config.getFolderViewType(listItems.firstOrNull { !it.isSectionTitle }?.mPath?.getParentPath() ?: "")
|
config.getFolderViewType(
|
||||||
|
path = listItems.firstOrNull { !it.isSectionTitle }?.mPath?.getParentPath().orEmpty()
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
config.viewType
|
config.viewType
|
||||||
}
|
}
|
||||||
@@ -168,7 +172,8 @@ class ItemsAdapter(
|
|||||||
|
|
||||||
override fun prepareActionMode(menu: Menu) {
|
override fun prepareActionMode(menu: Menu) {
|
||||||
menu.apply {
|
menu.apply {
|
||||||
findItem(R.id.cab_decompress).isVisible = getSelectedFileDirItems().map { it.path }.any { it.isZipFile() }
|
findItem(R.id.cab_decompress).isVisible =
|
||||||
|
getSelectedFileDirItems().map { it.path }.any { it.isZipFile() }
|
||||||
findItem(R.id.cab_confirm_selection).isVisible = isPickMultipleIntent
|
findItem(R.id.cab_confirm_selection).isVisible = isPickMultipleIntent
|
||||||
findItem(R.id.cab_copy_path).isVisible = isOneItemSelected()
|
findItem(R.id.cab_copy_path).isVisible = isOneItemSelected()
|
||||||
findItem(R.id.cab_open_with).isVisible = isOneFileSelected()
|
findItem(R.id.cab_open_with).isVisible = isOneFileSelected()
|
||||||
@@ -206,13 +211,21 @@ class ItemsAdapter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getSelectableItemCount() = listItems.filter { !it.isSectionTitle && !it.isGridTypeDivider }.size
|
override fun getSelectableItemCount(): Int {
|
||||||
|
return listItems.filter { !it.isSectionTitle && !it.isGridTypeDivider }.size
|
||||||
|
}
|
||||||
|
|
||||||
override fun getIsItemSelectable(position: Int) = !listItems[position].isSectionTitle && !listItems[position].isGridTypeDivider
|
override fun getIsItemSelectable(position: Int): Boolean {
|
||||||
|
return !listItems[position].isSectionTitle && !listItems[position].isGridTypeDivider
|
||||||
|
}
|
||||||
|
|
||||||
override fun getItemSelectionKey(position: Int) = listItems.getOrNull(position)?.path?.hashCode()
|
override fun getItemSelectionKey(position: Int): Int? {
|
||||||
|
return listItems.getOrNull(position)?.path?.hashCode()
|
||||||
|
}
|
||||||
|
|
||||||
override fun getItemKeyPosition(key: Int) = listItems.indexOfFirst { it.path.hashCode() == key }
|
override fun getItemKeyPosition(key: Int): Int {
|
||||||
|
return listItems.indexOfFirst { it.path.hashCode() == key }
|
||||||
|
}
|
||||||
|
|
||||||
override fun onActionModeCreated() {
|
override fun onActionModeCreated() {
|
||||||
swipeRefreshLayout?.isRefreshing = false
|
swipeRefreshLayout?.isRefreshing = false
|
||||||
@@ -233,25 +246,37 @@ class ItemsAdapter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||||
val binding = Binding.getByItemViewType(viewType, isListViewType).inflate(layoutInflater, parent, false)
|
val binding = Binding.getByItemViewType(viewType, isListViewType)
|
||||||
|
.inflate(layoutInflater, parent, false)
|
||||||
|
|
||||||
return createViewHolder(binding.root)
|
return createViewHolder(binding.root)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) {
|
||||||
val fileDirItem = listItems[position]
|
val fileDirItem = listItems[position]
|
||||||
holder.bindView(fileDirItem, true, !fileDirItem.isSectionTitle) { itemView, layoutPosition ->
|
holder.bindView(
|
||||||
|
any = fileDirItem,
|
||||||
|
allowSingleClick = true,
|
||||||
|
allowLongClick = !fileDirItem.isSectionTitle
|
||||||
|
) { itemView, layoutPosition ->
|
||||||
val viewType = getItemViewType(position)
|
val viewType = getItemViewType(position)
|
||||||
setupView(Binding.getByItemViewType(viewType, isListViewType).bind(itemView), fileDirItem)
|
setupView(
|
||||||
|
binding = Binding.getByItemViewType(viewType, isListViewType).bind(itemView),
|
||||||
|
listItem = fileDirItem
|
||||||
|
)
|
||||||
}
|
}
|
||||||
bindViewHolder(holder)
|
bindViewHolder(holder)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getItemCount() = listItems.size
|
override fun getItemCount() = listItems.size
|
||||||
|
|
||||||
private fun getItemWithKey(key: Int): FileDirItem? = listItems.firstOrNull { it.path.hashCode() == key }
|
private fun getItemWithKey(key: Int): FileDirItem? {
|
||||||
|
return listItems.firstOrNull { it.path.hashCode() == key }
|
||||||
|
}
|
||||||
|
|
||||||
private fun isOneFileSelected() = isOneItemSelected() && getItemWithKey(selectedKeys.first())?.isDirectory == false
|
private fun isOneFileSelected(): Boolean {
|
||||||
|
return isOneItemSelected() && getItemWithKey(selectedKeys.first())?.isDirectory == false
|
||||||
|
}
|
||||||
|
|
||||||
private fun checkHideBtnVisibility(menu: Menu) {
|
private fun checkHideBtnVisibility(menu: Menu) {
|
||||||
var hiddenCnt = 0
|
var hiddenCnt = 0
|
||||||
@@ -270,7 +295,10 @@ class ItemsAdapter(
|
|||||||
|
|
||||||
private fun confirmSelection() {
|
private fun confirmSelection() {
|
||||||
if (selectedKeys.isNotEmpty()) {
|
if (selectedKeys.isNotEmpty()) {
|
||||||
val paths = getSelectedFileDirItems().asSequence().filter { !it.isDirectory }.map { it.path }.toMutableList() as ArrayList<String>
|
val paths = getSelectedFileDirItems()
|
||||||
|
.asSequence()
|
||||||
|
.filter { !it.isDirectory }.map { it.path }
|
||||||
|
.toMutableList() as ArrayList<String>
|
||||||
if (paths.isEmpty()) {
|
if (paths.isEmpty()) {
|
||||||
finishActMode()
|
finishActMode()
|
||||||
} else {
|
} else {
|
||||||
@@ -349,7 +377,11 @@ class ItemsAdapter(
|
|||||||
getShortcutImage(path, drawable) {
|
getShortcutImage(path, drawable) {
|
||||||
val intent = Intent(activity, SplashActivity::class.java)
|
val intent = Intent(activity, SplashActivity::class.java)
|
||||||
intent.action = Intent.ACTION_VIEW
|
intent.action = Intent.ACTION_VIEW
|
||||||
intent.flags = intent.flags or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NO_HISTORY
|
intent.flags =
|
||||||
|
intent.flags or
|
||||||
|
Intent.FLAG_ACTIVITY_NEW_TASK or
|
||||||
|
Intent.FLAG_ACTIVITY_CLEAR_TASK or
|
||||||
|
Intent.FLAG_ACTIVITY_NO_HISTORY
|
||||||
intent.data = Uri.fromFile(File(path))
|
intent.data = Uri.fromFile(File(path))
|
||||||
|
|
||||||
val shortcut = ShortcutInfo.Builder(activity, path)
|
val shortcut = ShortcutInfo.Builder(activity, path)
|
||||||
@@ -365,7 +397,8 @@ class ItemsAdapter(
|
|||||||
|
|
||||||
private fun getShortcutImage(path: String, drawable: Drawable, callback: () -> Unit) {
|
private fun getShortcutImage(path: String, drawable: Drawable, callback: () -> Unit) {
|
||||||
val appIconColor = baseConfig.appIconColor
|
val appIconColor = baseConfig.appIconColor
|
||||||
(drawable as LayerDrawable).findDrawableByLayerId(R.id.shortcut_folder_background).applyColorFilter(appIconColor)
|
(drawable as LayerDrawable).findDrawableByLayerId(R.id.shortcut_folder_background)
|
||||||
|
.applyColorFilter(appIconColor)
|
||||||
if (activity.getIsPathDirectory(path)) {
|
if (activity.getIsPathDirectory(path)) {
|
||||||
callback()
|
callback()
|
||||||
} else {
|
} else {
|
||||||
@@ -386,10 +419,15 @@ class ItemsAdapter(
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
val bitmap = builder.get()
|
val bitmap = builder.get()
|
||||||
drawable.findDrawableByLayerId(R.id.shortcut_folder_background).applyColorFilter(0)
|
drawable.findDrawableByLayerId(R.id.shortcut_folder_background)
|
||||||
|
.applyColorFilter(0)
|
||||||
drawable.setDrawableByLayerId(R.id.shortcut_folder_image, bitmap)
|
drawable.setDrawableByLayerId(R.id.shortcut_folder_image, bitmap)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
val fileIcon = fileDrawables.getOrElse(path.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable })
|
val fileIcon = fileDrawables
|
||||||
|
.getOrElse(
|
||||||
|
key = path.substringAfterLast(".").lowercase(Locale.getDefault()),
|
||||||
|
defaultValue = { fileDrawable }
|
||||||
|
)
|
||||||
drawable.setDrawableByLayerId(R.id.shortcut_folder_image, fileIcon)
|
drawable.setDrawableByLayerId(R.id.shortcut_folder_image, fileIcon)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -414,15 +452,19 @@ class ItemsAdapter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
activity.isPathOnOTG(path) -> {
|
activity.isPathOnOTG(path) -> {
|
||||||
activity.getDocumentFile(path)?.listFiles()?.filter { if (shouldShowHidden) true else !it.name!!.startsWith(".") }?.forEach {
|
activity.getDocumentFile(path)?.listFiles()
|
||||||
addFileUris(it.uri.toString(), paths)
|
?.filter { if (shouldShowHidden) true else !it.name!!.startsWith(".") }
|
||||||
}
|
?.forEach {
|
||||||
|
addFileUris(it.uri.toString(), paths)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
File(path).listFiles()?.filter { if (shouldShowHidden) true else !it.name.startsWith('.') }?.forEach {
|
File(path).listFiles()
|
||||||
addFileUris(it.absolutePath, paths)
|
?.filter { if (shouldShowHidden) true else !it.name.startsWith('.') }
|
||||||
}
|
?.forEach {
|
||||||
|
addFileUris(it.absolutePath, paths)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -481,11 +523,21 @@ class ItemsAdapter(
|
|||||||
if (activity.isPathOnRoot(it) || activity.isPathOnRoot(firstFile.path)) {
|
if (activity.isPathOnRoot(it) || activity.isPathOnRoot(firstFile.path)) {
|
||||||
copyMoveRootItems(files, it, isCopyOperation)
|
copyMoveRootItems(files, it, isCopyOperation)
|
||||||
} else {
|
} else {
|
||||||
activity.copyMoveFilesTo(files, source, it, isCopyOperation, false, config.shouldShowHidden()) {
|
activity.copyMoveFilesTo(
|
||||||
|
fileDirItems = files,
|
||||||
|
source = source,
|
||||||
|
destination = it,
|
||||||
|
isCopyOperation = isCopyOperation,
|
||||||
|
copyPhotoVideoOnly = false,
|
||||||
|
copyHidden = config.shouldShowHidden()
|
||||||
|
) {
|
||||||
if (!isCopyOperation) {
|
if (!isCopyOperation) {
|
||||||
files.forEach { sourceFileDir ->
|
files.forEach { sourceFileDir ->
|
||||||
val sourcePath = sourceFileDir.path
|
val sourcePath = sourceFileDir.path
|
||||||
if (activity.isRestrictedSAFOnlyRoot(sourcePath) && activity.getDoesFilePathExist(sourcePath)) {
|
if (
|
||||||
|
activity.isRestrictedSAFOnlyRoot(sourcePath)
|
||||||
|
&& activity.getDoesFilePathExist(sourcePath)
|
||||||
|
) {
|
||||||
activity.deleteFile(sourceFileDir, true) {
|
activity.deleteFile(sourceFileDir, true) {
|
||||||
listener?.refreshFragment()
|
listener?.refreshFragment()
|
||||||
activity.runOnUiThread {
|
activity.runOnUiThread {
|
||||||
@@ -494,8 +546,12 @@ class ItemsAdapter(
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
val sourceFile = File(sourcePath)
|
val sourceFile = File(sourcePath)
|
||||||
if (activity.getDoesFilePathExist(source) && activity.getIsPathDirectory(source) &&
|
if (
|
||||||
sourceFile.list()?.isEmpty() == true && sourceFile.getProperSize(true) == 0L && sourceFile.getFileCount(true) == 0
|
activity.getDoesFilePathExist(source)
|
||||||
|
&& activity.getIsPathDirectory(source)
|
||||||
|
&& sourceFile.list()?.isEmpty() == true
|
||||||
|
&& sourceFile.getProperSize(true) == 0L
|
||||||
|
&& sourceFile.getFileCount(true) == 0
|
||||||
) {
|
) {
|
||||||
val sourceFolder = sourceFile.toFileDirItem(activity)
|
val sourceFolder = sourceFile.toFileDirItem(activity)
|
||||||
activity.deleteFile(sourceFolder, true) {
|
activity.deleteFile(sourceFolder, true) {
|
||||||
@@ -519,7 +575,11 @@ class ItemsAdapter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun copyMoveRootItems(files: ArrayList<FileDirItem>, destinationPath: String, isCopyOperation: Boolean) {
|
private fun copyMoveRootItems(
|
||||||
|
files: ArrayList<FileDirItem>,
|
||||||
|
destinationPath: String,
|
||||||
|
isCopyOperation: Boolean
|
||||||
|
) {
|
||||||
activity.toast(R.string.copying)
|
activity.toast(R.string.copying)
|
||||||
ensureBackgroundThread {
|
ensureBackgroundThread {
|
||||||
val fileCnt = files.size
|
val fileCnt = files.size
|
||||||
@@ -585,7 +645,11 @@ class ItemsAdapter(
|
|||||||
return@handleSAFDialog
|
return@handleSAFDialog
|
||||||
}
|
}
|
||||||
|
|
||||||
val paths = getSelectedFileDirItems().asSequence().map { it.path }.filter { it.isZipFile() }.toList()
|
val paths = getSelectedFileDirItems()
|
||||||
|
.asSequence()
|
||||||
|
.map { it.path }
|
||||||
|
.filter { it.isZipFile() }
|
||||||
|
.toList()
|
||||||
ensureBackgroundThread {
|
ensureBackgroundThread {
|
||||||
tryDecompressingPaths(paths) { success ->
|
tryDecompressingPaths(paths) { success ->
|
||||||
activity.runOnUiThread {
|
activity.runOnUiThread {
|
||||||
@@ -602,15 +666,28 @@ class ItemsAdapter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun tryDecompressingPaths(sourcePaths: List<String>, callback: (success: Boolean) -> Unit) {
|
private fun tryDecompressingPaths(
|
||||||
|
sourcePaths: List<String>,
|
||||||
|
callback: (success: Boolean) -> Unit
|
||||||
|
) {
|
||||||
sourcePaths.forEach { path ->
|
sourcePaths.forEach { path ->
|
||||||
ZipInputStream(BufferedInputStream(activity.getFileInputStreamSync(path))).use { zipInputStream ->
|
ZipInputStream(BufferedInputStream(activity.getFileInputStreamSync(path))).use { zipInputStream ->
|
||||||
try {
|
try {
|
||||||
val fileDirItems = ArrayList<FileDirItem>()
|
val fileDirItems = ArrayList<FileDirItem>()
|
||||||
var entry = zipInputStream.nextEntry
|
var entry = zipInputStream.nextEntry
|
||||||
while (entry != null) {
|
while (entry != null) {
|
||||||
val currPath = if (entry.isDirectory) path else "${path.getParentPath().trimEnd('/')}/${entry.fileName}"
|
val currPath = if (entry.isDirectory) {
|
||||||
val fileDirItem = FileDirItem(currPath, entry.fileName, entry.isDirectory, 0, entry.uncompressedSize)
|
path
|
||||||
|
} else {
|
||||||
|
"${path.getParentPath().trimEnd('/')}/${entry.fileName}"
|
||||||
|
}
|
||||||
|
val fileDirItem = FileDirItem(
|
||||||
|
path = currPath,
|
||||||
|
name = entry.fileName,
|
||||||
|
isDirectory = entry.isDirectory,
|
||||||
|
children = 0,
|
||||||
|
size = entry.uncompressedSize
|
||||||
|
)
|
||||||
fileDirItems.add(fileDirItem)
|
fileDirItems.add(fileDirItem)
|
||||||
entry = zipInputStream.nextEntry
|
entry = zipInputStream.nextEntry
|
||||||
}
|
}
|
||||||
@@ -635,9 +712,16 @@ class ItemsAdapter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun decompressPaths(paths: List<String>, conflictResolutions: LinkedHashMap<String, Int>, callback: (success: Boolean) -> Unit) {
|
private fun decompressPaths(
|
||||||
|
paths: List<String>,
|
||||||
|
conflictResolutions: LinkedHashMap<String, Int>,
|
||||||
|
callback: (success: Boolean) -> Unit
|
||||||
|
) {
|
||||||
paths.forEach { path ->
|
paths.forEach { path ->
|
||||||
val zipInputStream = ZipInputStream(BufferedInputStream(activity.getFileInputStreamSync(path)))
|
val zipInputStream =
|
||||||
|
ZipInputStream(BufferedInputStream(activity.getFileInputStreamSync(path)))
|
||||||
|
|
||||||
|
val foldersTimestamp = mutableListOf<Pair<File, LocalFileHeader>>()
|
||||||
zipInputStream.use {
|
zipInputStream.use {
|
||||||
try {
|
try {
|
||||||
var entry = zipInputStream.nextEntry
|
var entry = zipInputStream.nextEntry
|
||||||
@@ -650,11 +734,15 @@ class ItemsAdapter(
|
|||||||
val resolution = getConflictResolution(conflictResolutions, newPath)
|
val resolution = getConflictResolution(conflictResolutions, newPath)
|
||||||
val doesPathExist = activity.getDoesFilePathExist(newPath)
|
val doesPathExist = activity.getDoesFilePathExist(newPath)
|
||||||
if (doesPathExist && resolution == CONFLICT_OVERWRITE) {
|
if (doesPathExist && resolution == CONFLICT_OVERWRITE) {
|
||||||
val fileDirItem = FileDirItem(newPath, newPath.getFilenameFromPath(), entry.isDirectory)
|
val fileDirItem = FileDirItem(
|
||||||
|
path = newPath,
|
||||||
|
name = newPath.getFilenameFromPath(),
|
||||||
|
isDirectory = entry.isDirectory
|
||||||
|
)
|
||||||
if (activity.getIsPathDirectory(path)) {
|
if (activity.getIsPathDirectory(path)) {
|
||||||
activity.deleteFolderBg(fileDirItem, false) {
|
activity.deleteFolderBg(fileDirItem, false) {
|
||||||
if (it) {
|
if (it) {
|
||||||
extractEntry(newPath, entry, zipInputStream)
|
extractEntry(newPath, entry, zipInputStream, foldersTimestamp)
|
||||||
} else {
|
} else {
|
||||||
callback(false)
|
callback(false)
|
||||||
}
|
}
|
||||||
@@ -662,18 +750,21 @@ class ItemsAdapter(
|
|||||||
} else {
|
} else {
|
||||||
activity.deleteFileBg(fileDirItem, false, false) {
|
activity.deleteFileBg(fileDirItem, false, false) {
|
||||||
if (it) {
|
if (it) {
|
||||||
extractEntry(newPath, entry, zipInputStream)
|
extractEntry(newPath, entry, zipInputStream, foldersTimestamp)
|
||||||
} else {
|
} else {
|
||||||
callback(false)
|
callback(false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (!doesPathExist) {
|
} else if (!doesPathExist) {
|
||||||
extractEntry(newPath, entry, zipInputStream)
|
extractEntry(newPath, entry, zipInputStream, foldersTimestamp)
|
||||||
}
|
}
|
||||||
|
|
||||||
entry = zipInputStream.nextEntry
|
entry = zipInputStream.nextEntry
|
||||||
}
|
}
|
||||||
|
for ((dir, header) in foldersTimestamp.asReversed()) {
|
||||||
|
dir.setLastModified(header)
|
||||||
|
}
|
||||||
callback(true)
|
callback(true)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
activity.showErrorToast(e)
|
activity.showErrorToast(e)
|
||||||
@@ -683,21 +774,33 @@ class ItemsAdapter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun extractEntry(newPath: String, entry: LocalFileHeader, zipInputStream: ZipInputStream) {
|
private fun extractEntry(
|
||||||
|
newPath: String,
|
||||||
|
entry: LocalFileHeader,
|
||||||
|
zipInputStream: ZipInputStream,
|
||||||
|
foldersTimestamp: MutableList<Pair<File, LocalFileHeader>>
|
||||||
|
) {
|
||||||
if (entry.isDirectory) {
|
if (entry.isDirectory) {
|
||||||
if (!activity.createDirectorySync(newPath) && !activity.getDoesFilePathExist(newPath)) {
|
if (!activity.createDirectorySync(newPath) && !activity.getDoesFilePathExist(newPath)) {
|
||||||
val error = String.format(activity.getString(R.string.could_not_create_file), newPath)
|
val error =
|
||||||
|
String.format(activity.getString(R.string.could_not_create_file), newPath)
|
||||||
activity.showErrorToast(error)
|
activity.showErrorToast(error)
|
||||||
|
} else {
|
||||||
|
foldersTimestamp.add(Pair(File(newPath), entry))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
val fos = activity.getFileOutputStreamSync(newPath, newPath.getMimeType())
|
val fos = activity.getFileOutputStreamSync(newPath, newPath.getMimeType())
|
||||||
if (fos != null) {
|
if (fos != null) {
|
||||||
zipInputStream.copyTo(fos)
|
zipInputStream.copyTo(fos)
|
||||||
|
File(newPath).setLastModified(entry)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getConflictResolution(conflictResolutions: LinkedHashMap<String, Int>, path: String): Int {
|
private fun getConflictResolution(
|
||||||
|
conflictResolutions: LinkedHashMap<String, Int>,
|
||||||
|
path: String
|
||||||
|
): Int {
|
||||||
return if (conflictResolutions.size == 1 && conflictResolutions.containsKey("")) {
|
return if (conflictResolutions.size == 1 && conflictResolutions.containsKey("")) {
|
||||||
conflictResolutions[""]!!
|
conflictResolutions[""]!!
|
||||||
} else if (conflictResolutions.containsKey(path)) {
|
} else if (conflictResolutions.containsKey(path)) {
|
||||||
@@ -708,15 +811,21 @@ class ItemsAdapter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("NewApi")
|
@SuppressLint("NewApi")
|
||||||
private fun compressPaths(sourcePaths: List<String>, targetPath: String, password: String? = null): Boolean {
|
private fun compressPaths(
|
||||||
|
sourcePaths: List<String>,
|
||||||
|
targetPath: String,
|
||||||
|
password: String? = null
|
||||||
|
): Boolean {
|
||||||
val queue = LinkedList<String>()
|
val queue = LinkedList<String>()
|
||||||
val fos = activity.getFileOutputStreamSync(targetPath, "application/zip") ?: return false
|
val fos = activity.getFileOutputStreamSync(targetPath, "application/zip") ?: return false
|
||||||
|
|
||||||
val zout = password?.let { ZipOutputStream(fos, password.toCharArray()) } ?: ZipOutputStream(fos)
|
val zout =
|
||||||
|
password?.let { ZipOutputStream(fos, password.toCharArray()) } ?: ZipOutputStream(fos)
|
||||||
var res: Closeable = fos
|
var res: Closeable = fos
|
||||||
|
|
||||||
fun zipEntry(name: String) = ZipParameters().also {
|
fun zipEntry(name: String, lastModified: Long) = ZipParameters().also {
|
||||||
it.fileNameInZip = name
|
it.fileNameInZip = name
|
||||||
|
it.lastModifiedFileTime = lastModified
|
||||||
if (password != null) {
|
if (password != null) {
|
||||||
it.isEncryptFiles = true
|
it.isEncryptFiles = true
|
||||||
it.encryptionMethod = EncryptionMethod.AES
|
it.encryptionMethod = EncryptionMethod.AES
|
||||||
@@ -732,9 +841,11 @@ class ItemsAdapter(
|
|||||||
queue.push(mainFilePath)
|
queue.push(mainFilePath)
|
||||||
if (activity.getIsPathDirectory(mainFilePath)) {
|
if (activity.getIsPathDirectory(mainFilePath)) {
|
||||||
name = "${mainFilePath.getFilenameFromPath()}/"
|
name = "${mainFilePath.getFilenameFromPath()}/"
|
||||||
|
val dirModified = File(mainFilePath).lastModified()
|
||||||
zout.putNextEntry(
|
zout.putNextEntry(
|
||||||
ZipParameters().also {
|
ZipParameters().also {
|
||||||
it.fileNameInZip = name
|
it.fileNameInZip = name
|
||||||
|
it.lastModifiedFileTime = dirModified
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -749,9 +860,9 @@ class ItemsAdapter(
|
|||||||
if (activity.getIsPathDirectory(file.path)) {
|
if (activity.getIsPathDirectory(file.path)) {
|
||||||
queue.push(file.path)
|
queue.push(file.path)
|
||||||
name = "${name.trimEnd('/')}/"
|
name = "${name.trimEnd('/')}/"
|
||||||
zout.putNextEntry(zipEntry(name))
|
zout.putNextEntry(zipEntry(name, file.modified))
|
||||||
} else {
|
} else {
|
||||||
zout.putNextEntry(zipEntry(name))
|
zout.putNextEntry(zipEntry(name, file.modified))
|
||||||
activity.getFileInputStreamSync(file.path)!!.copyTo(zout)
|
activity.getFileInputStreamSync(file.path)!!.copyTo(zout)
|
||||||
zout.closeEntry()
|
zout.closeEntry()
|
||||||
}
|
}
|
||||||
@@ -764,9 +875,9 @@ class ItemsAdapter(
|
|||||||
if (activity.getIsPathDirectory(file.absolutePath)) {
|
if (activity.getIsPathDirectory(file.absolutePath)) {
|
||||||
queue.push(file.absolutePath)
|
queue.push(file.absolutePath)
|
||||||
name = "${name.trimEnd('/')}/"
|
name = "${name.trimEnd('/')}/"
|
||||||
zout.putNextEntry(zipEntry(name))
|
zout.putNextEntry(zipEntry(name, file.lastModified()))
|
||||||
} else {
|
} else {
|
||||||
zout.putNextEntry(zipEntry(name))
|
zout.putNextEntry(zipEntry(name, file.lastModified()))
|
||||||
activity.getFileInputStreamSync(file.path)!!.copyTo(zout)
|
activity.getFileInputStreamSync(file.path)!!.copyTo(zout)
|
||||||
zout.closeEntry()
|
zout.closeEntry()
|
||||||
}
|
}
|
||||||
@@ -774,8 +885,14 @@ class ItemsAdapter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
name = if (base == currentPath) currentPath.getFilenameFromPath() else mainFilePath.relativizeWith(base)
|
name =
|
||||||
zout.putNextEntry(zipEntry(name))
|
if (base == currentPath) {
|
||||||
|
currentPath.getFilenameFromPath()
|
||||||
|
} else {
|
||||||
|
mainFilePath.relativizeWith(base)
|
||||||
|
}
|
||||||
|
val fileModified = File(mainFilePath).lastModified()
|
||||||
|
zout.putNextEntry(zipEntry(name, fileModified))
|
||||||
activity.getFileInputStreamSync(mainFilePath)!!.copyTo(zout)
|
activity.getFileInputStreamSync(mainFilePath)!!.copyTo(zout)
|
||||||
zout.closeEntry()
|
zout.closeEntry()
|
||||||
}
|
}
|
||||||
@@ -849,7 +966,11 @@ class ItemsAdapter(
|
|||||||
|
|
||||||
private fun getFirstSelectedItemPath() = getSelectedFileDirItems().first().path
|
private fun getFirstSelectedItemPath() = getSelectedFileDirItems().first().path
|
||||||
|
|
||||||
private fun getSelectedFileDirItems() = listItems.filter { selectedKeys.contains(it.path.hashCode()) } as ArrayList<FileDirItem>
|
private fun getSelectedFileDirItems(): ArrayList<FileDirItem> {
|
||||||
|
return listItems.filter {
|
||||||
|
selectedKeys.contains(it.path.hashCode())
|
||||||
|
} as ArrayList<FileDirItem>
|
||||||
|
}
|
||||||
|
|
||||||
fun updateItems(newItems: ArrayList<ListItem>, highlightText: String = "") {
|
fun updateItems(newItems: ArrayList<ListItem>, highlightText: String = "") {
|
||||||
if (newItems.hashCode() != currentItemsHash) {
|
if (newItems.hashCode() != currentItemsHash) {
|
||||||
@@ -895,7 +1016,8 @@ class ItemsAdapter(
|
|||||||
override fun onViewRecycled(holder: ViewHolder) {
|
override fun onViewRecycled(holder: ViewHolder) {
|
||||||
super.onViewRecycled(holder)
|
super.onViewRecycled(holder)
|
||||||
if (!activity.isDestroyed && !activity.isFinishing) {
|
if (!activity.isDestroyed && !activity.isFinishing) {
|
||||||
val icon = Binding.getByItemViewType(holder.itemViewType, isListViewType).bind(holder.itemView).itemIcon
|
val icon = Binding.getByItemViewType(holder.itemViewType, isListViewType)
|
||||||
|
.bind(holder.itemView).itemIcon
|
||||||
if (icon != null) {
|
if (icon != null) {
|
||||||
Glide.with(activity).clear(icon)
|
Glide.with(activity).clear(icon)
|
||||||
}
|
}
|
||||||
@@ -907,16 +1029,35 @@ class ItemsAdapter(
|
|||||||
binding.apply {
|
binding.apply {
|
||||||
if (listItem.isSectionTitle) {
|
if (listItem.isSectionTitle) {
|
||||||
itemIcon?.setImageDrawable(folderDrawable)
|
itemIcon?.setImageDrawable(folderDrawable)
|
||||||
itemSection?.text = if (textToHighlight.isEmpty()) listItem.mName else listItem.mName.highlightTextPart(textToHighlight, properPrimaryColor)
|
itemSection?.text =
|
||||||
|
if (textToHighlight.isEmpty()) {
|
||||||
|
listItem.mName
|
||||||
|
} else {
|
||||||
|
listItem.mName.highlightTextPart(
|
||||||
|
textToHighlight = textToHighlight,
|
||||||
|
color = properPrimaryColor
|
||||||
|
)
|
||||||
|
}
|
||||||
itemSection?.setTextColor(textColor)
|
itemSection?.setTextColor(textColor)
|
||||||
itemSection?.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)
|
itemSection?.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)
|
||||||
} else if (!listItem.isGridTypeDivider) {
|
} else if (!listItem.isGridTypeDivider) {
|
||||||
root.setupViewBackground(activity)
|
root.setupViewBackground(activity)
|
||||||
itemFrame.isSelected = isSelected
|
itemFrame.isSelected = isSelected
|
||||||
val fileName = listItem.name
|
val fileName = listItem.name
|
||||||
itemName?.text = if (textToHighlight.isEmpty()) fileName else fileName.highlightTextPart(textToHighlight, properPrimaryColor)
|
itemName?.text =
|
||||||
|
if (textToHighlight.isEmpty()) {
|
||||||
|
fileName
|
||||||
|
} else {
|
||||||
|
fileName.highlightTextPart(
|
||||||
|
textToHighlight = textToHighlight,
|
||||||
|
color = properPrimaryColor
|
||||||
|
)
|
||||||
|
}
|
||||||
itemName?.setTextColor(textColor)
|
itemName?.setTextColor(textColor)
|
||||||
itemName?.setTextSize(TypedValue.COMPLEX_UNIT_PX, if (isListViewType) fontSize else smallerFontSize)
|
itemName?.setTextSize(
|
||||||
|
TypedValue.COMPLEX_UNIT_PX,
|
||||||
|
if (isListViewType) fontSize else smallerFontSize
|
||||||
|
)
|
||||||
|
|
||||||
itemDetails?.setTextColor(textColor)
|
itemDetails?.setTextColor(textColor)
|
||||||
itemDetails?.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)
|
itemDetails?.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)
|
||||||
@@ -945,7 +1086,10 @@ class ItemsAdapter(
|
|||||||
itemDate?.beVisible()
|
itemDate?.beVisible()
|
||||||
itemDate?.text = listItem.modified.formatDate(activity, dateFormat, timeFormat)
|
itemDate?.text = listItem.modified.formatDate(activity, dateFormat, timeFormat)
|
||||||
|
|
||||||
val drawable = fileDrawables.getOrElse(fileName.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable })
|
val drawable = fileDrawables.getOrElse(
|
||||||
|
key = fileName.substringAfterLast(".").lowercase(Locale.getDefault()),
|
||||||
|
defaultValue = { fileDrawable }
|
||||||
|
)
|
||||||
val options = RequestOptions()
|
val options = RequestOptions()
|
||||||
.signature(listItem.getKey())
|
.signature(listItem.getKey())
|
||||||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||||
@@ -970,14 +1114,18 @@ class ItemsAdapter(
|
|||||||
return activity.resources.getQuantityString(R.plurals.items, children, children)
|
return activity.resources.getQuantityString(R.plurals.items, children, children)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getOTGPublicPath(itemToLoad: String) =
|
private fun getOTGPublicPath(itemToLoad: String): String {
|
||||||
"${baseConfig.OTGTreeUri}/document/${baseConfig.OTGPartition}%3A${itemToLoad.substring(baseConfig.OTGPath.length).replace("/", "%2F")}"
|
return "${baseConfig.OTGTreeUri}/document/${baseConfig.OTGPartition}%3A${
|
||||||
|
itemToLoad.substring(baseConfig.OTGPath.length).replace("/", "%2F")
|
||||||
|
}"
|
||||||
|
}
|
||||||
|
|
||||||
private fun getImagePathToLoad(path: String): Any {
|
private fun getImagePathToLoad(path: String): Any {
|
||||||
var itemToLoad = if (path.endsWith(".apk", true)) {
|
var itemToLoad = if (path.endsWith(".apk", true)) {
|
||||||
val packageInfo = activity.packageManager.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES)
|
val packageInfo =
|
||||||
if (packageInfo != null) {
|
activity.packageManager.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES)
|
||||||
val appInfo = packageInfo.applicationInfo
|
val appInfo = packageInfo?.applicationInfo
|
||||||
|
if (appInfo != null) {
|
||||||
appInfo.sourceDir = path
|
appInfo.sourceDir = path
|
||||||
appInfo.publicSourceDir = path
|
appInfo.publicSourceDir = path
|
||||||
appInfo.loadIcon(activity.packageManager)
|
appInfo.loadIcon(activity.packageManager)
|
||||||
@@ -998,13 +1146,16 @@ class ItemsAdapter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun initDrawables() {
|
fun initDrawables() {
|
||||||
folderDrawable = resources.getColoredDrawableWithColor(R.drawable.ic_folder_vector, properPrimaryColor)
|
folderDrawable =
|
||||||
|
resources.getColoredDrawableWithColor(R.drawable.ic_folder_vector, properPrimaryColor)
|
||||||
folderDrawable.alpha = 180
|
folderDrawable.alpha = 180
|
||||||
fileDrawable = resources.getDrawable(R.drawable.ic_file_generic)
|
fileDrawable = resources.getDrawable(R.drawable.ic_file_generic)
|
||||||
fileDrawables = getFilePlaceholderDrawables(activity)
|
fileDrawables = getFilePlaceholderDrawables(activity)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onChange(position: Int) = listItems.getOrNull(position)?.getBubbleText(activity, dateFormat, timeFormat) ?: ""
|
override fun onChange(position: Int): String {
|
||||||
|
return listItems.getOrNull(position)?.getBubbleText(activity, dateFormat, timeFormat) ?: ""
|
||||||
|
}
|
||||||
|
|
||||||
private sealed interface Binding {
|
private sealed interface Binding {
|
||||||
companion object {
|
companion object {
|
||||||
@@ -1025,12 +1176,23 @@ class ItemsAdapter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding
|
fun inflate(
|
||||||
|
layoutInflater: LayoutInflater,
|
||||||
|
viewGroup: ViewGroup,
|
||||||
|
attachToRoot: Boolean
|
||||||
|
): ItemViewBinding
|
||||||
|
|
||||||
fun bind(view: View): ItemViewBinding
|
fun bind(view: View): ItemViewBinding
|
||||||
|
|
||||||
data object ItemSection : Binding {
|
data object ItemSection : Binding {
|
||||||
override fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding {
|
override fun inflate(
|
||||||
return ItemSectionBindingAdapter(ItemSectionBinding.inflate(layoutInflater, viewGroup, attachToRoot))
|
layoutInflater: LayoutInflater,
|
||||||
|
viewGroup: ViewGroup,
|
||||||
|
attachToRoot: Boolean
|
||||||
|
): ItemViewBinding {
|
||||||
|
return ItemSectionBindingAdapter(
|
||||||
|
ItemSectionBinding.inflate(layoutInflater, viewGroup, attachToRoot)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun bind(view: View): ItemViewBinding {
|
override fun bind(view: View): ItemViewBinding {
|
||||||
@@ -1039,8 +1201,14 @@ class ItemsAdapter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
data object ItemEmpty : Binding {
|
data object ItemEmpty : Binding {
|
||||||
override fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding {
|
override fun inflate(
|
||||||
return ItemEmptyBindingAdapter(ItemEmptyBinding.inflate(layoutInflater, viewGroup, attachToRoot))
|
layoutInflater: LayoutInflater,
|
||||||
|
viewGroup: ViewGroup,
|
||||||
|
attachToRoot: Boolean
|
||||||
|
): ItemViewBinding {
|
||||||
|
return ItemEmptyBindingAdapter(
|
||||||
|
ItemEmptyBinding.inflate(layoutInflater, viewGroup, attachToRoot)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun bind(view: View): ItemViewBinding {
|
override fun bind(view: View): ItemViewBinding {
|
||||||
@@ -1049,8 +1217,14 @@ class ItemsAdapter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
data object ItemFileDirList : Binding {
|
data object ItemFileDirList : Binding {
|
||||||
override fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding {
|
override fun inflate(
|
||||||
return ItemFileDirListBindingAdapter(ItemFileDirListBinding.inflate(layoutInflater, viewGroup, attachToRoot))
|
layoutInflater: LayoutInflater,
|
||||||
|
viewGroup: ViewGroup,
|
||||||
|
attachToRoot: Boolean
|
||||||
|
): ItemViewBinding {
|
||||||
|
return ItemFileDirListBindingAdapter(
|
||||||
|
ItemFileDirListBinding.inflate(layoutInflater, viewGroup, attachToRoot)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun bind(view: View): ItemViewBinding {
|
override fun bind(view: View): ItemViewBinding {
|
||||||
@@ -1059,8 +1233,14 @@ class ItemsAdapter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
data object ItemDirGrid : Binding {
|
data object ItemDirGrid : Binding {
|
||||||
override fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding {
|
override fun inflate(
|
||||||
return ItemDirGridBindingAdapter(ItemDirGridBinding.inflate(layoutInflater, viewGroup, attachToRoot))
|
layoutInflater: LayoutInflater,
|
||||||
|
viewGroup: ViewGroup,
|
||||||
|
attachToRoot: Boolean
|
||||||
|
): ItemViewBinding {
|
||||||
|
return ItemDirGridBindingAdapter(
|
||||||
|
ItemDirGridBinding.inflate(layoutInflater, viewGroup, attachToRoot)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun bind(view: View): ItemViewBinding {
|
override fun bind(view: View): ItemViewBinding {
|
||||||
@@ -1069,8 +1249,14 @@ class ItemsAdapter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
data object ItemFileGrid : Binding {
|
data object ItemFileGrid : Binding {
|
||||||
override fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding {
|
override fun inflate(
|
||||||
return ItemFileGridBindingAdapter(ItemFileGridBinding.inflate(layoutInflater, viewGroup, attachToRoot))
|
layoutInflater: LayoutInflater,
|
||||||
|
viewGroup: ViewGroup,
|
||||||
|
attachToRoot: Boolean
|
||||||
|
): ItemViewBinding {
|
||||||
|
return ItemFileGridBindingAdapter(
|
||||||
|
ItemFileGridBinding.inflate(layoutInflater, viewGroup, attachToRoot)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun bind(view: View): ItemViewBinding {
|
override fun bind(view: View): ItemViewBinding {
|
||||||
@@ -1112,7 +1298,9 @@ class ItemsAdapter(
|
|||||||
override fun getRoot(): View = binding.root
|
override fun getRoot(): View = binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ItemFileDirListBindingAdapter(val binding: ItemFileDirListBinding) : ItemViewBinding {
|
private class ItemFileDirListBindingAdapter(
|
||||||
|
val binding: ItemFileDirListBinding
|
||||||
|
) : ItemViewBinding {
|
||||||
override val itemFrame: FrameLayout = binding.itemFrame
|
override val itemFrame: FrameLayout = binding.itemFrame
|
||||||
override val itemName: TextView = binding.itemName
|
override val itemName: TextView = binding.itemName
|
||||||
override val itemIcon: ImageView = binding.itemIcon
|
override val itemIcon: ImageView = binding.itemIcon
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package org.fossify.filemanager.adapters
|
package org.fossify.filemanager.adapters
|
||||||
|
|
||||||
import android.view.*
|
import android.view.*
|
||||||
import android.widget.PopupMenu
|
import androidx.appcompat.widget.PopupMenu
|
||||||
import org.fossify.commons.activities.BaseSimpleActivity
|
import org.fossify.commons.activities.BaseSimpleActivity
|
||||||
import org.fossify.commons.adapters.MyRecyclerViewAdapter
|
import org.fossify.commons.adapters.MyRecyclerViewAdapter
|
||||||
import org.fossify.commons.extensions.getPopupMenuTheme
|
import org.fossify.commons.extensions.getPopupMenuTheme
|
||||||
|
|||||||
@@ -22,7 +22,8 @@ class ViewPagerAdapter(val activity: SimpleActivity, val tabsToShow: ArrayList<I
|
|||||||
|
|
||||||
(view as MyViewPagerFragment<*>).apply {
|
(view as MyViewPagerFragment<*>).apply {
|
||||||
val isPickRingtoneIntent = activity.intent.action == RingtoneManager.ACTION_RINGTONE_PICKER
|
val isPickRingtoneIntent = activity.intent.action == RingtoneManager.ACTION_RINGTONE_PICKER
|
||||||
val isGetContentIntent = activity.intent.action == Intent.ACTION_GET_CONTENT || activity.intent.action == Intent.ACTION_PICK
|
val isGetContentIntent = activity.intent.action == Intent.ACTION_GET_CONTENT
|
||||||
|
|| activity.intent.action == Intent.ACTION_PICK
|
||||||
val isCreateDocumentIntent = activity.intent.action == Intent.ACTION_CREATE_DOCUMENT
|
val isCreateDocumentIntent = activity.intent.action == Intent.ACTION_CREATE_DOCUMENT
|
||||||
val allowPickingMultipleIntent = activity.intent.getBooleanExtra(Intent.EXTRA_ALLOW_MULTIPLE, false)
|
val allowPickingMultipleIntent = activity.intent.getBooleanExtra(Intent.EXTRA_ALLOW_MULTIPLE, false)
|
||||||
val getContentMimeType = if (isGetContentIntent) {
|
val getContentMimeType = if (isGetContentIntent) {
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ package org.fossify.filemanager.extensions
|
|||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.view.View
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
|
||||||
import androidx.core.content.FileProvider
|
import androidx.core.content.FileProvider
|
||||||
import org.fossify.commons.activities.BaseSimpleActivity
|
import org.fossify.commons.activities.BaseSimpleActivity
|
||||||
import org.fossify.commons.extensions.getFilenameFromPath
|
import org.fossify.commons.extensions.getFilenameFromPath
|
||||||
@@ -85,27 +83,3 @@ fun BaseSimpleActivity.toggleItemVisibility(oldPath: String, hide: Boolean, call
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun AppCompatActivity.showSystemUI(toggleActionBarVisibility: Boolean) {
|
|
||||||
if (toggleActionBarVisibility) {
|
|
||||||
supportActionBar?.show()
|
|
||||||
}
|
|
||||||
|
|
||||||
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
|
|
||||||
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
|
|
||||||
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
|
||||||
}
|
|
||||||
|
|
||||||
fun AppCompatActivity.hideSystemUI(toggleActionBarVisibility: Boolean) {
|
|
||||||
if (toggleActionBarVisibility) {
|
|
||||||
supportActionBar?.hide()
|
|
||||||
}
|
|
||||||
|
|
||||||
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
|
|
||||||
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
|
|
||||||
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
|
|
||||||
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
|
|
||||||
View.SYSTEM_UI_FLAG_LOW_PROFILE or
|
|
||||||
View.SYSTEM_UI_FLAG_FULLSCREEN or
|
|
||||||
View.SYSTEM_UI_FLAG_IMMERSIVE
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
package org.fossify.filemanager.extensions
|
|
||||||
|
|
||||||
import java.text.DecimalFormat
|
|
||||||
|
|
||||||
// use 1000 instead of 1024 at dividing
|
|
||||||
fun Long.formatSizeThousand(): String {
|
|
||||||
if (this <= 0) {
|
|
||||||
return "0 B"
|
|
||||||
}
|
|
||||||
|
|
||||||
val units = arrayOf("B", "kB", "MB", "GB", "TB")
|
|
||||||
val digitGroups = (Math.log10(toDouble()) / Math.log10(1000.0)).toInt()
|
|
||||||
return "${DecimalFormat("#,##0.#").format(this / Math.pow(1000.0, digitGroups.toDouble()))} ${units[digitGroups]}"
|
|
||||||
}
|
|
||||||
@@ -1,3 +1,15 @@
|
|||||||
package org.fossify.filemanager.extensions
|
package org.fossify.filemanager.extensions
|
||||||
|
|
||||||
fun String.isZipFile() = endsWith(".zip", true)
|
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)
|
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 children = if (isDirectory && getProperChildCount) file.getDirectChildrenCount(context, showHidden) else 0
|
||||||
val size = if (isDirectory) {
|
val size = if (isDirectory) {
|
||||||
if (isSortingBySize) {
|
if (isSortingBySize) {
|
||||||
@@ -377,6 +377,7 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF
|
|||||||
return files
|
return files
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val normalizedText = text.normalizeString()
|
||||||
val sorting = context!!.config.getFolderSorting(path)
|
val sorting = context!!.config.getFolderSorting(path)
|
||||||
FileDirItem.sorting = context!!.config.getFolderSorting(currentPath)
|
FileDirItem.sorting = context!!.config.getFolderSorting(currentPath)
|
||||||
val isSortingBySize = sorting and SORT_BY_SIZE != 0
|
val isSortingBySize = sorting and SORT_BY_SIZE != 0
|
||||||
@@ -386,7 +387,7 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (it.isDirectory) {
|
if (it.isDirectory) {
|
||||||
if (it.name.contains(text, true)) {
|
if (it.name.normalizeString().contains(normalizedText, true)) {
|
||||||
val fileDirItem = getListItemFromFile(it, isSortingBySize, HashMap(), false)
|
val fileDirItem = getListItemFromFile(it, isSortingBySize, HashMap(), false)
|
||||||
if (fileDirItem != null) {
|
if (fileDirItem != null) {
|
||||||
files.add(fileDirItem)
|
files.add(fileDirItem)
|
||||||
@@ -395,7 +396,7 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF
|
|||||||
|
|
||||||
files.addAll(searchFiles(text, it.absolutePath))
|
files.addAll(searchFiles(text, it.absolutePath))
|
||||||
} else {
|
} else {
|
||||||
if (it.name.contains(text, true)) {
|
if (it.name.normalizeString().contains(normalizedText, true)) {
|
||||||
val fileDirItem = getListItemFromFile(it, isSortingBySize, HashMap(), false)
|
val fileDirItem = getListItemFromFile(it, isSortingBySize, HashMap(), false)
|
||||||
if (fileDirItem != null) {
|
if (fileDirItem != null) {
|
||||||
files.add(fileDirItem)
|
files.add(fileDirItem)
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import org.fossify.commons.extensions.getDoesFilePathExist
|
|||||||
import org.fossify.commons.extensions.getFilenameFromPath
|
import org.fossify.commons.extensions.getFilenameFromPath
|
||||||
import org.fossify.commons.extensions.getLongValue
|
import org.fossify.commons.extensions.getLongValue
|
||||||
import org.fossify.commons.extensions.getStringValue
|
import org.fossify.commons.extensions.getStringValue
|
||||||
|
import org.fossify.commons.extensions.normalizeString
|
||||||
import org.fossify.commons.extensions.showErrorToast
|
import org.fossify.commons.extensions.showErrorToast
|
||||||
import org.fossify.commons.helpers.VIEW_TYPE_GRID
|
import org.fossify.commons.helpers.VIEW_TYPE_GRID
|
||||||
import org.fossify.commons.helpers.VIEW_TYPE_LIST
|
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.adapters.ItemsAdapter
|
||||||
import org.fossify.filemanager.databinding.RecentsFragmentBinding
|
import org.fossify.filemanager.databinding.RecentsFragmentBinding
|
||||||
import org.fossify.filemanager.extensions.config
|
import org.fossify.filemanager.extensions.config
|
||||||
|
import org.fossify.filemanager.extensions.isPathInHiddenFolder
|
||||||
import org.fossify.filemanager.helpers.MAX_COLUMN_COUNT
|
import org.fossify.filemanager.helpers.MAX_COLUMN_COUNT
|
||||||
import org.fossify.filemanager.interfaces.ItemOperationsListener
|
import org.fossify.filemanager.interfaces.ItemOperationsListener
|
||||||
import org.fossify.filemanager.models.ListItem
|
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 name = cursor.getStringValue(FileColumns.DISPLAY_NAME) ?: path.getFilenameFromPath()
|
||||||
val size = cursor.getLongValue(FileColumns.SIZE)
|
val size = cursor.getLongValue(FileColumns.SIZE)
|
||||||
val modified = cursor.getLongValue(FileColumns.DATE_MODIFIED) * 1000
|
val modified = cursor.getLongValue(FileColumns.DATE_MODIFIED) * 1000
|
||||||
val fileDirItem = ListItem(path, name, false, 0, size, modified, false, false)
|
val isHiddenFile = name.startsWith(".")
|
||||||
if ((showHidden || !name.startsWith(".")) && activity?.getDoesFilePathExist(path) == true) {
|
val shouldShow = showHidden || (!isHiddenFile && !path.isPathInHiddenFolder())
|
||||||
|
if (shouldShow && activity?.getDoesFilePathExist(path) == true) {
|
||||||
if (wantedMimeTypes.any { isProperMimeType(it, path, false) }) {
|
if (wantedMimeTypes.any { isProperMimeType(it, path, false) }) {
|
||||||
|
val fileDirItem = ListItem(path, name, false, 0, size, modified, false, false)
|
||||||
listItems.add(fileDirItem)
|
listItems.add(fileDirItem)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -242,7 +246,11 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
|||||||
|
|
||||||
override fun searchQueryChanged(text: String) {
|
override fun searchQueryChanged(text: String) {
|
||||||
lastSearchedText = text
|
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 {
|
binding.apply {
|
||||||
(recentsList.adapter as? ItemsAdapter)?.updateItems(filtered, text)
|
(recentsList.adapter as? ItemsAdapter)?.updateItems(filtered, text)
|
||||||
recentsPlaceholder.beVisibleIf(filtered.isEmpty())
|
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.getProperBackgroundColor
|
||||||
import org.fossify.commons.extensions.getProperPrimaryColor
|
import org.fossify.commons.extensions.getProperPrimaryColor
|
||||||
import org.fossify.commons.extensions.getStringValue
|
import org.fossify.commons.extensions.getStringValue
|
||||||
|
import org.fossify.commons.extensions.normalizeString
|
||||||
import org.fossify.commons.extensions.queryCursor
|
import org.fossify.commons.extensions.queryCursor
|
||||||
import org.fossify.commons.extensions.showErrorToast
|
import org.fossify.commons.extensions.showErrorToast
|
||||||
import org.fossify.commons.extensions.updateTextColors
|
import org.fossify.commons.extensions.updateTextColors
|
||||||
@@ -45,7 +46,6 @@ import org.fossify.filemanager.adapters.ItemsAdapter
|
|||||||
import org.fossify.filemanager.databinding.ItemStorageVolumeBinding
|
import org.fossify.filemanager.databinding.ItemStorageVolumeBinding
|
||||||
import org.fossify.filemanager.databinding.StorageFragmentBinding
|
import org.fossify.filemanager.databinding.StorageFragmentBinding
|
||||||
import org.fossify.filemanager.extensions.config
|
import org.fossify.filemanager.extensions.config
|
||||||
import org.fossify.filemanager.extensions.formatSizeThousand
|
|
||||||
import org.fossify.filemanager.extensions.getAllVolumeNames
|
import org.fossify.filemanager.extensions.getAllVolumeNames
|
||||||
import org.fossify.filemanager.helpers.ARCHIVES
|
import org.fossify.filemanager.helpers.ARCHIVES
|
||||||
import org.fossify.filemanager.helpers.AUDIO
|
import org.fossify.filemanager.helpers.AUDIO
|
||||||
@@ -64,8 +64,10 @@ import org.fossify.filemanager.interfaces.ItemOperationsListener
|
|||||||
import org.fossify.filemanager.models.ListItem
|
import org.fossify.filemanager.models.ListItem
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment<MyViewPagerFragment.StorageInnerBinding>(context, attributeSet),
|
class StorageFragment(
|
||||||
ItemOperationsListener {
|
context: Context,
|
||||||
|
attributeSet: AttributeSet
|
||||||
|
) : MyViewPagerFragment<MyViewPagerFragment.StorageInnerBinding>(context, attributeSet), ItemOperationsListener {
|
||||||
private val SIZE_DIVIDER = 100000
|
private val SIZE_DIVIDER = 100000
|
||||||
private var allDeviceListItems = ArrayList<ListItem>()
|
private var allDeviceListItems = ArrayList<ListItem>()
|
||||||
private var lastSearchedText = ""
|
private var lastSearchedText = ""
|
||||||
@@ -95,7 +97,6 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
|||||||
}
|
}
|
||||||
|
|
||||||
totalSpace.text = String.format(context.getString(R.string.total_storage), "…")
|
totalSpace.text = String.format(context.getString(R.string.total_storage), "…")
|
||||||
getSizes(volumeName)
|
|
||||||
|
|
||||||
if (volumeNames.size > 1) {
|
if (volumeNames.size > 1) {
|
||||||
root.children.forEach { it.beGone() }
|
root.children.forEach { it.beGone() }
|
||||||
@@ -155,8 +156,7 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
|||||||
val tealColor = context.resources.getColor(R.color.md_teal_700)
|
val tealColor = context.resources.getColor(R.color.md_teal_700)
|
||||||
val pinkColor = context.resources.getColor(R.color.md_pink_700)
|
val pinkColor = context.resources.getColor(R.color.md_pink_700)
|
||||||
|
|
||||||
volumes.entries.forEach { (it, volumeBinding) ->
|
volumes.values.forEach { volumeBinding ->
|
||||||
getSizes(it)
|
|
||||||
volumeBinding.apply {
|
volumeBinding.apply {
|
||||||
mainStorageUsageProgressbar.setIndicatorColor(properPrimaryColor)
|
mainStorageUsageProgressbar.setIndicatorColor(properPrimaryColor)
|
||||||
mainStorageUsageProgressbar.trackColor = properPrimaryColor.adjustAlpha(LOWER_ALPHA)
|
mainStorageUsageProgressbar.trackColor = properPrimaryColor.adjustAlpha(LOWER_ALPHA)
|
||||||
@@ -253,7 +253,8 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
|||||||
try {
|
try {
|
||||||
context.queryCursor(uri, projection) { cursor ->
|
context.queryCursor(uri, projection) { cursor ->
|
||||||
try {
|
try {
|
||||||
val mimeType = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault())
|
val mimeType =
|
||||||
|
cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault())
|
||||||
val size = cursor.getLongValue(MediaStore.Files.FileColumns.SIZE)
|
val size = cursor.getLongValue(MediaStore.Files.FileColumns.SIZE)
|
||||||
if (mimeType == null) {
|
if (mimeType == null) {
|
||||||
if (size > 0 && size != 4096L) {
|
if (size > 0 && size != 4096L) {
|
||||||
@@ -310,7 +311,8 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
|||||||
if (storageVolume.isPrimary) {
|
if (storageVolume.isPrimary) {
|
||||||
// internal storage
|
// internal storage
|
||||||
volumeName = PRIMARY_VOLUME_NAME
|
volumeName = PRIMARY_VOLUME_NAME
|
||||||
val storageStatsManager = context.getSystemService(AppCompatActivity.STORAGE_STATS_SERVICE) as StorageStatsManager
|
val storageStatsManager =
|
||||||
|
context.getSystemService(AppCompatActivity.STORAGE_STATS_SERVICE) as StorageStatsManager
|
||||||
val uuid = StorageManager.UUID_DEFAULT
|
val uuid = StorageManager.UUID_DEFAULT
|
||||||
totalStorageSpace = storageStatsManager.getTotalBytes(uuid)
|
totalStorageSpace = storageStatsManager.getTotalBytes(uuid)
|
||||||
freeStorageSpace = storageStatsManager.getFreeBytes(uuid)
|
freeStorageSpace = storageStatsManager.getFreeBytes(uuid)
|
||||||
@@ -323,24 +325,33 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
|||||||
post {
|
post {
|
||||||
volumes[volumeName]?.apply {
|
volumes[volumeName]?.apply {
|
||||||
arrayOf(
|
arrayOf(
|
||||||
mainStorageUsageProgressbar, imagesProgressbar, videosProgressbar, audioProgressbar, documentsProgressbar,
|
mainStorageUsageProgressbar,
|
||||||
archivesProgressbar, othersProgressbar
|
imagesProgressbar,
|
||||||
|
videosProgressbar,
|
||||||
|
audioProgressbar,
|
||||||
|
documentsProgressbar,
|
||||||
|
archivesProgressbar,
|
||||||
|
othersProgressbar
|
||||||
).forEach {
|
).forEach {
|
||||||
it.max = (totalStorageSpace / SIZE_DIVIDER).toInt()
|
it.max = (totalStorageSpace / SIZE_DIVIDER).toInt()
|
||||||
}
|
}
|
||||||
|
|
||||||
mainStorageUsageProgressbar.progress = ((totalStorageSpace - freeStorageSpace) / SIZE_DIVIDER).toInt()
|
mainStorageUsageProgressbar.progress =
|
||||||
|
((totalStorageSpace - freeStorageSpace) / SIZE_DIVIDER).toInt()
|
||||||
|
|
||||||
mainStorageUsageProgressbar.beVisible()
|
mainStorageUsageProgressbar.beVisible()
|
||||||
freeSpaceValue.text = freeStorageSpace.formatSizeThousand()
|
freeSpaceValue.text = freeStorageSpace.formatSize()
|
||||||
totalSpace.text = String.format(context.getString(R.string.total_storage), totalStorageSpace.formatSizeThousand())
|
totalSpace.text =
|
||||||
|
String.format(context.getString(R.string.total_storage), totalStorageSpace.formatSize())
|
||||||
freeSpaceLabel.beVisible()
|
freeSpaceLabel.beVisible()
|
||||||
|
getSizes(volumeName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun searchQueryChanged(text: String) {
|
override fun searchQueryChanged(text: String) {
|
||||||
|
val normalizedText = text.normalizeString()
|
||||||
lastSearchedText = text
|
lastSearchedText = text
|
||||||
binding.apply {
|
binding.apply {
|
||||||
if (text.isNotEmpty()) {
|
if (text.isNotEmpty()) {
|
||||||
@@ -365,8 +376,10 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
|||||||
} else {
|
} else {
|
||||||
showProgressBar()
|
showProgressBar()
|
||||||
ensureBackgroundThread {
|
ensureBackgroundThread {
|
||||||
val start = System.currentTimeMillis()
|
val filtered = allDeviceListItems.filter {
|
||||||
val filtered = allDeviceListItems.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList<ListItem>
|
it.mName.normalizeString().contains(normalizedText, true)
|
||||||
|
}.toMutableList() as ArrayList<ListItem>
|
||||||
|
|
||||||
if (lastSearchedText != text) {
|
if (lastSearchedText != text) {
|
||||||
return@ensureBackgroundThread
|
return@ensureBackgroundThread
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,22 +5,29 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
<org.fossify.commons.views.MyAppBarLayout
|
||||||
android:id="@+id/decompress_toolbar"
|
android:id="@+id/decompress_appbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="wrap_content">
|
||||||
android:background="@color/color_primary"
|
|
||||||
app:menu="@menu/menu_decompress"
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
app:title="@string/decompress"
|
android:id="@+id/decompress_toolbar"
|
||||||
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
android:background="@color/color_primary"
|
||||||
|
app:menu="@menu/menu_decompress"
|
||||||
|
app:title="@string/decompress"
|
||||||
|
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
||||||
|
|
||||||
|
</org.fossify.commons.views.MyAppBarLayout>
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/decompress_wrapper"
|
android:id="@+id/decompress_wrapper"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="?attr/actionBarSize"
|
|
||||||
android:fillViewport="true"
|
android:fillViewport="true"
|
||||||
android:scrollbars="none">
|
android:scrollbars="none"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||||
|
|
||||||
<org.fossify.commons.views.MyRecyclerView
|
<org.fossify.commons.views.MyRecyclerView
|
||||||
android:id="@+id/decompress_list"
|
android:id="@+id/decompress_list"
|
||||||
|
|||||||
@@ -6,22 +6,29 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
<org.fossify.commons.views.MyAppBarLayout
|
||||||
android:id="@+id/manage_favorites_toolbar"
|
android:id="@+id/manage_favorites_appbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="wrap_content">
|
||||||
android:background="@color/color_primary"
|
|
||||||
app:menu="@menu/menu_favorites"
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
app:title="@string/manage_favorites"
|
android:id="@+id/manage_favorites_toolbar"
|
||||||
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
android:background="@color/color_primary"
|
||||||
|
app:menu="@menu/menu_favorites"
|
||||||
|
app:title="@string/manage_favorites"
|
||||||
|
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
||||||
|
|
||||||
|
</org.fossify.commons.views.MyAppBarLayout>
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/manage_favorites_holder"
|
android:id="@+id/manage_favorites_holder"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="?attr/actionBarSize"
|
|
||||||
android:fillViewport="true"
|
android:fillViewport="true"
|
||||||
android:scrollbars="none">
|
android:scrollbars="none"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||||
|
|
||||||
<org.fossify.commons.views.MyRecyclerView
|
<org.fossify.commons.views.MyRecyclerView
|
||||||
android:id="@+id/manage_favorites_list"
|
android:id="@+id/manage_favorites_list"
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
android:id="@+id/main_holder"
|
android:id="@+id/main_holder"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginTop="?attr/actionBarSize">
|
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||||
|
|
||||||
<org.fossify.commons.views.MyViewPager
|
<org.fossify.commons.views.MyViewPager
|
||||||
android:id="@+id/main_view_pager"
|
android:id="@+id/main_view_pager"
|
||||||
|
|||||||
@@ -5,21 +5,28 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
<org.fossify.commons.views.MyAppBarLayout
|
||||||
android:id="@+id/mimetypes_toolbar"
|
android:id="@+id/mimetypes_appbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="wrap_content">
|
||||||
android:background="@color/color_primary"
|
|
||||||
app:menu="@menu/menu_mimetypes"
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
android:id="@+id/mimetypes_toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
android:background="@color/color_primary"
|
||||||
|
app:menu="@menu/menu_mimetypes"
|
||||||
|
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
||||||
|
|
||||||
|
</org.fossify.commons.views.MyAppBarLayout>
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/mimetypes_holder"
|
android:id="@+id/mimetypes_holder"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="?attr/actionBarSize"
|
|
||||||
android:fillViewport="true"
|
android:fillViewport="true"
|
||||||
android:scrollbars="none">
|
android:scrollbars="none"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||||
|
|
||||||
<org.fossify.commons.views.MyTextView
|
<org.fossify.commons.views.MyTextView
|
||||||
android:id="@+id/mimetypes_placeholder"
|
android:id="@+id/mimetypes_placeholder"
|
||||||
|
|||||||
@@ -5,23 +5,30 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
<org.fossify.commons.views.MyAppBarLayout
|
||||||
android:id="@+id/read_text_toolbar"
|
android:id="@+id/read_text_appbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="wrap_content">
|
||||||
android:background="@color/color_primary"
|
|
||||||
app:menu="@menu/menu_editor"
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
app:title="@string/file_editor"
|
android:id="@+id/read_text_toolbar"
|
||||||
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
android:background="@color/color_primary"
|
||||||
|
app:menu="@menu/menu_editor"
|
||||||
|
app:title="@string/file_editor"
|
||||||
|
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
||||||
|
|
||||||
|
</org.fossify.commons.views.MyAppBarLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/read_text_wrapper"
|
android:id="@+id/read_text_wrapper"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="?attr/actionBarSize"
|
|
||||||
android:fillViewport="true"
|
android:fillViewport="true"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:scrollbars="none">
|
android:scrollbars="none"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||||
|
|
||||||
<include
|
<include
|
||||||
android:id="@+id/search_wrapper"
|
android:id="@+id/search_wrapper"
|
||||||
|
|||||||
@@ -5,18 +5,25 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
<org.fossify.commons.views.MyAppBarLayout
|
||||||
android:id="@+id/activity_save_as_toolbar"
|
android:id="@+id/activity_save_as_appbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="wrap_content">
|
||||||
android:background="@color/color_primary"
|
|
||||||
app:title="@string/save_as"
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
android:id="@+id/activity_save_as_toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
android:background="@color/color_primary"
|
||||||
|
app:title="@string/save_as"
|
||||||
|
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
||||||
|
|
||||||
|
</org.fossify.commons.views.MyAppBarLayout>
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/activity_save_as_holder"
|
android:id="@+id/activity_save_as_holder"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginTop="?attr/actionBarSize" />
|
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
||||||
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
@@ -6,21 +6,28 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
<org.fossify.commons.views.MyAppBarLayout
|
||||||
android:id="@+id/settings_toolbar"
|
android:id="@+id/settings_appbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="wrap_content">
|
||||||
android:background="@color/color_primary"
|
|
||||||
app:title="@string/settings"
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
android:id="@+id/settings_toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
android:background="@color/color_primary"
|
||||||
|
app:title="@string/settings"
|
||||||
|
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
||||||
|
|
||||||
|
</org.fossify.commons.views.MyAppBarLayout>
|
||||||
|
|
||||||
<androidx.core.widget.NestedScrollView
|
<androidx.core.widget.NestedScrollView
|
||||||
android:id="@+id/settings_nested_scrollview"
|
android:id="@+id/settings_nested_scrollview"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginTop="?attr/actionBarSize"
|
|
||||||
android:fillViewport="true"
|
android:fillViewport="true"
|
||||||
android:scrollbars="none">
|
android:scrollbars="none"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/settings_holder"
|
android:id="@+id/settings_holder"
|
||||||
@@ -63,6 +70,11 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/general_settings" />
|
android:text="@string/general_settings" />
|
||||||
|
|
||||||
|
<org.fossify.commons.views.PurchaseThankYouItem
|
||||||
|
android:id="@+id/settings_purchase_thank_you_holder"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"/>
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/settings_use_english_holder"
|
android:id="@+id/settings_use_english_holder"
|
||||||
style="@style/SettingsHolderSwitchStyle"
|
style="@style/SettingsHolderSwitchStyle"
|
||||||
|
|||||||
@@ -11,8 +11,13 @@
|
|||||||
<item
|
<item
|
||||||
android:id="@+id/menu_save"
|
android:id="@+id/menu_save"
|
||||||
android:icon="@drawable/ic_save_vector"
|
android:icon="@drawable/ic_save_vector"
|
||||||
android:title="@string/save_as"
|
android:title="@string/save"
|
||||||
app:showAsAction="always" />
|
app:showAsAction="always" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/menu_save_as"
|
||||||
|
android:showAsAction="never"
|
||||||
|
android:title="@string/save_as"
|
||||||
|
app:showAsAction="never" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/menu_print"
|
android:id="@+id/menu_print"
|
||||||
android:icon="@drawable/ic_print_vector"
|
android:icon="@drawable/ic_print_vector"
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
unqualifiedResLocale=en-US
|
||||||
@@ -1,38 +1,47 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_launcher_name">مدير الملفات</string>
|
<string name="app_launcher_name">مدير الملفات</string>
|
||||||
<string name="press_back_again">اضغط مرة أخرى للخروج</string>
|
<string name="press_back_again">انقر مرة أخرى للخروج</string>
|
||||||
<string name="go_to_home_folder">الذهاب الى الرئيسية</string>
|
<string name="go_to_home_folder">اذهب إلى المجلد المنزل</string>
|
||||||
<string name="set_as_home_folder">تعيين كمجلد رئيسي</string>
|
<string name="set_as_home_folder">عيّن كمجلد المنزل</string>
|
||||||
<string name="home_folder_updated">تم تحديث المجلد الرئيسي</string>
|
<string name="home_folder_updated">حُدِّث مجلد المنزل</string>
|
||||||
<string name="copy_path">نسخ المسار الى الحافظة</string>
|
<string name="copy_path">انسخ المسار إلى الحافظة</string>
|
||||||
<string name="path_copied">تم نسخ المسار</string>
|
<string name="path_copied">نُسخ المسار</string>
|
||||||
<string name="select_audio_file">الرجاء تحديد ملف صوتي</string>
|
<string name="select_audio_file">الرجاء تحديد ملف صوتي</string>
|
||||||
<string name="search_folder">مجلد البحث</string>
|
<string name="search_folder">مجلد البحث</string>
|
||||||
<string name="rooted_device_only">تعمل هذه العملية فقط على الأجهزة المتجذرة</string>
|
<string name="rooted_device_only">تعمل هذه العملية فقط على الأجهزة المتجذرة</string>
|
||||||
<string name="recents">الأحدث</string>
|
<string name="recents">الأحدث</string>
|
||||||
<string name="show_recents">إظهار الأحدث</string>
|
<string name="show_recents">أظهر الأحدث</string>
|
||||||
<string name="invert_colors">عكس الألوان</string>
|
<string name="invert_colors">اعكس الألوان</string>
|
||||||
<string name="compress">ضغط</string>
|
<string name="compress">اضغط</string>
|
||||||
<string name="decompress">فك الضغط</string>
|
<string name="decompress">فك الضغط</string>
|
||||||
<string name="compress_as">ضغط كا</string>
|
<string name="compress_as">اضغط كَ</string>
|
||||||
<string name="compressing">ضغط…</string>
|
<string name="compressing">جار الضغط…</string>
|
||||||
<string name="decompressing">فك الضغط…</string>
|
<string name="decompressing">جارِ فك الضغط…</string>
|
||||||
<string name="compression_successful">نجح الضغط</string>
|
<string name="compression_successful">نجح الضغط</string>
|
||||||
<string name="decompression_successful">نجح التفكيك</string>
|
<string name="decompression_successful">نجح فك ضغط</string>
|
||||||
<string name="compressing_failed">أخفق الضغط</string>
|
<string name="compressing_failed">فشل الضغط</string>
|
||||||
<string name="decompressing_failed">أخفق إلغاء الضغط</string>
|
<string name="decompressing_failed">فشل فك الضغط</string>
|
||||||
<string name="manage_favorites">إدارة المفضلة</string>
|
<string name="manage_favorites">أدر المفضلة</string>
|
||||||
<string name="go_to_favorite">الذهاب الى المفضلة</string>
|
<string name="go_to_favorite">اذهب الى المفضلة</string>
|
||||||
<string name="favorites_activity_placeholder">يمكنك إضافة المجلدات المستخدمة بشكل متكرر إلى المفضلة لسهولة الوصول إليها من أي مكان.</string>
|
<string name="favorites_activity_placeholder">يمكنك إضافة المجلدات المستخدمة بشكل متكرر إلى المفضلة لسهولة الوصول إليها من أي مكان.</string>
|
||||||
<string name="file_editor">محرر الملفات</string>
|
<string name="file_editor">محرّر الملفات</string>
|
||||||
<string name="storage_analysis">تحليل التخزين</string>
|
<string name="storage_analysis">تحليل التخزين</string>
|
||||||
<string name="images">الصور</string>
|
<string name="images">الصور</string>
|
||||||
<string name="videos">الفيديوهات</string>
|
<string name="videos">الفيديوهات</string>
|
||||||
<string name="archives">الأرشيف</string>
|
<string name="archives">الأرشيف</string>
|
||||||
<string name="others">الاخرين</string>
|
<string name="others">الآخرين</string>
|
||||||
<string name="total_storage">إجمالي مساحة التخزين: %s</string>
|
<string name="total_storage">إجمالي مساحة التخزين: %s</string>
|
||||||
<string name="enable_root_access">تفعيل الدخول الى مسار الروت</string>
|
<string name="enable_root_access">فعّل وصول الجذر (root)</string>
|
||||||
<string name="press_back_twice">تتطلب الضغط على رجوع مرتين لمغادرة التطبيق</string>
|
<string name="press_back_twice">يتطلب النقر على رجوع مرتين لمغادرة التطبيق</string>
|
||||||
<string name="audio">صوت</string>
|
<string name="audio">صوت</string>
|
||||||
|
<string name="documents">المستندات</string>
|
||||||
|
<string name="downloads">التنزيلات</string>
|
||||||
|
<string name="storage_free">خالية</string>
|
||||||
|
<string name="open_as">افتح كـ</string>
|
||||||
|
<string name="image_file">ملف صورة</string>
|
||||||
|
<string name="text_file">ملف نصي</string>
|
||||||
|
<string name="audio_file">ملف صوتي</string>
|
||||||
|
<string name="video_file">ملف فيديو</string>
|
||||||
|
<string name="other_file">ملف آخر</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,2 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources></resources>
|
<resources>
|
||||||
|
<string name="audio">Audio</string>
|
||||||
|
</resources>
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
<string name="file_editor">Файлов редактор</string>
|
<string name="file_editor">Файлов редактор</string>
|
||||||
<string name="storage_analysis">Анализ на съхранението</string>
|
<string name="storage_analysis">Анализ на съхранението</string>
|
||||||
<string name="images">Изображения</string>
|
<string name="images">Изображения</string>
|
||||||
<string name="videos">Видеоклипове</string>
|
<string name="videos">Видео</string>
|
||||||
<string name="archives">Архиви</string>
|
<string name="archives">Архиви</string>
|
||||||
<string name="others">Други</string>
|
<string name="others">Други</string>
|
||||||
<string name="total_storage">Общо място за съхранение: %s</string>
|
<string name="total_storage">Общо място за съхранение: %s</string>
|
||||||
@@ -44,4 +44,4 @@
|
|||||||
<string name="storage_free">свободно</string>
|
<string name="storage_free">свободно</string>
|
||||||
<string name="documents">Документи</string>
|
<string name="documents">Документи</string>
|
||||||
<string name="audio">Аудиофайлове</string>
|
<string name="audio">Аудиофайлове</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?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>
|
||||||
|
<string name="app_launcher_name">دؽوۉداری فایل</string>
|
||||||
|
<string name="path_copied">تور لف گیری وابی</string>
|
||||||
|
<string name="select_audio_file">فایل آرنگی ن پسند کۊنین</string>
|
||||||
|
<string name="search_folder">پیتینیڌن دوبلگه</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="press_back_again">سی و در زیڌن، ز نۊ دویمه وورگشتن ن بزنین</string>
|
||||||
|
<string name="home_folder_updated">دوبلگه هووه ورۊ رسۊوی وابی</string>
|
||||||
|
<string name="audio">دونگ</string>
|
||||||
|
</resources>
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
<string name="set_as_home_folder">Estableix com a carpeta d\'inici</string>
|
<string name="set_as_home_folder">Estableix com a carpeta d\'inici</string>
|
||||||
<string name="home_folder_updated">S\'ha actualitzat la carpeta d\'inici</string>
|
<string name="home_folder_updated">S\'ha actualitzat la carpeta d\'inici</string>
|
||||||
<string name="copy_path">Copia el camí al porta-retalls</string>
|
<string name="copy_path">Copia el camí al porta-retalls</string>
|
||||||
<string name="path_copied">S\'ha copiat el camí</string>
|
<string name="path_copied">Ruta copiada</string>
|
||||||
<string name="select_audio_file">Seleccioneu un fitxer d\'àudio</string>
|
<string name="select_audio_file">Seleccioneu un fitxer d\'àudio</string>
|
||||||
<string name="search_folder">Cerca carpeta</string>
|
<string name="search_folder">Cerca carpeta</string>
|
||||||
<string name="rooted_device_only">Aquesta operació només funciona en dispositius amb «root»</string>
|
<string name="rooted_device_only">Aquesta operació només funciona en dispositius amb «root»</string>
|
||||||
@@ -44,4 +44,4 @@
|
|||||||
<string name="press_back_twice">Cal que premeu Enrere dues vegades per a sortir de l\'aplicació</string>
|
<string name="press_back_twice">Cal que premeu Enrere dues vegades per a sortir de l\'aplicació</string>
|
||||||
<string name="documents">Documents</string>
|
<string name="documents">Documents</string>
|
||||||
<string name="recents">Recents</string>
|
<string name="recents">Recents</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,4 +1,29 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_launcher_name">بەڕێوەبەری فایل</string>
|
<string name="app_launcher_name">بەڕێوەبەری پەڕگە</string>
|
||||||
</resources>
|
<string name="press_back_again">بۆ دەرچوون دووبارە گەڕانەوە داگرە</string>
|
||||||
|
<string name="recents">دوایین</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="file_editor">دەستکاریکەری پەڕگە</string>
|
||||||
|
<string name="images">وێنەکان</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="total_storage">سەرجەمی بیرگە: %s</string>
|
||||||
|
</resources>
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
<string name="videos">Videa</string>
|
<string name="videos">Videa</string>
|
||||||
<string name="audio">Zvuk</string>
|
<string name="audio">Zvuk</string>
|
||||||
<string name="documents">Dokumenty</string>
|
<string name="documents">Dokumenty</string>
|
||||||
<string name="downloads">Stažené</string>
|
<string name="downloads">Stahování</string>
|
||||||
<string name="archives">Archivy</string>
|
<string name="archives">Archivy</string>
|
||||||
<string name="others">Ostatní</string>
|
<string name="others">Ostatní</string>
|
||||||
<string name="storage_free">volné</string>
|
<string name="storage_free">volné</string>
|
||||||
|
|||||||
@@ -28,11 +28,11 @@
|
|||||||
<string name="decompression_successful">Dekomprimeret</string>
|
<string name="decompression_successful">Dekomprimeret</string>
|
||||||
<string name="compressing_failed">Komprimering mislykkedes</string>
|
<string name="compressing_failed">Komprimering mislykkedes</string>
|
||||||
<string name="decompressing_failed">Dekomprimering 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="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="file_editor">Fileditor</string>
|
||||||
<string name="storage_analysis">Lagersanalyse</string>
|
<string name="storage_analysis">Lagringsanalyse</string>
|
||||||
<string name="images">Billeder</string>
|
<string name="images">Billeder</string>
|
||||||
<string name="videos">Videoer</string>
|
<string name="videos">Videoer</string>
|
||||||
<string name="audio">Lyd</string>
|
<string name="audio">Lyd</string>
|
||||||
@@ -42,6 +42,6 @@
|
|||||||
<string name="others">Andre</string>
|
<string name="others">Andre</string>
|
||||||
<string name="storage_free">fri</string>
|
<string name="storage_free">fri</string>
|
||||||
<string name="total_storage">Samlet lagerplads: %s</string>
|
<string name="total_storage">Samlet lagerplads: %s</string>
|
||||||
<string name="enable_root_access">Aktiver root-adgang</string>
|
<string name="enable_root_access">Aktivér root-adgang</string>
|
||||||
<string name="press_back_twice">Kræv to tryk på tilbage for at forlade appen</string>
|
<string name="press_back_twice">Dobbelttryk på Tilbage for at afslutte appen</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
<string name="path_copied">Η διαδρομή αντιγράφηκε</string>
|
<string name="path_copied">Η διαδρομή αντιγράφηκε</string>
|
||||||
<string name="select_audio_file">Επιλέξτε ένα αρχείο ήχου</string>
|
<string name="select_audio_file">Επιλέξτε ένα αρχείο ήχου</string>
|
||||||
<string name="search_folder">Αναζήτηση φακέλου</string>
|
<string name="search_folder">Αναζήτηση φακέλου</string>
|
||||||
<string name="rooted_device_only">Αυτό το χαρακτηριστικό λειτουργεί μόνο σε συσκευές με πρόσβαση στον ριζικό κατάλογο.</string>
|
<string name="rooted_device_only">Αυτό το χαρακτηριστικό λειτουργεί μόνο σε συσκευές με πρόσβαση στον ριζικό κατάλογο</string>
|
||||||
<string name="recents">Πρόσφατα</string>
|
<string name="recents">Πρόσφατα</string>
|
||||||
<string name="show_recents">Εμφάνιση προσφάτων</string>
|
<string name="show_recents">Εμφάνιση προσφάτων</string>
|
||||||
<string name="invert_colors">Αντιστροφή χρωμάτων</string>
|
<string name="invert_colors">Αντιστροφή χρωμάτων</string>
|
||||||
|
|||||||
@@ -1,2 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources></resources>
|
<resources>
|
||||||
|
<string name="app_launcher_name">File Manager</string>
|
||||||
|
<string name="invert_colors">Invert colours</string>
|
||||||
|
<string name="audio">Audio</string>
|
||||||
|
<string name="press_back_again">Press back again to exit</string>
|
||||||
|
<string name="go_to_home_folder">Go to home folder</string>
|
||||||
|
<string name="set_as_home_folder">Set as home folder</string>
|
||||||
|
</resources>
|
||||||
@@ -1,2 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources></resources>
|
<resources>
|
||||||
|
<string name="app_launcher_name">Gestor de archivos</string>
|
||||||
|
<string name="press_back_again">Presione hacia atrás nuevamente para salir</string>
|
||||||
|
<string name="go_to_home_folder">Ir a la carpeta de inicio</string>
|
||||||
|
</resources>
|
||||||
@@ -1,5 +1,47 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="images">تصاویر</string>
|
<string name="images">تصاویر</string>
|
||||||
<string name="audio">صدا</string>
|
<string name="audio">صوت</string>
|
||||||
</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="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="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="videos">ویدیوها</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">فعالسازی دسترسی روت</string>
|
||||||
|
<string name="press_back_twice">برای خروج از برنامه، دو بار دکمهٔ بازگشت را بزنید</string>
|
||||||
|
</resources>
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
<string name="downloads">Lataukset</string>
|
<string name="downloads">Lataukset</string>
|
||||||
<string name="archives">Arkistot</string>
|
<string name="archives">Arkistot</string>
|
||||||
<string name="others">Muut</string>
|
<string name="others">Muut</string>
|
||||||
<string name="storage_free">ilmainen</string>
|
<string name="storage_free">vapaana</string>
|
||||||
<string name="total_storage">Tallennustila: %s</string>
|
<string name="total_storage">Tallennustila: %s</string>
|
||||||
<string name="enable_root_access">Ota käyttöön root-ominaisuudet</string>
|
<string name="enable_root_access">Ota käyttöön root-ominaisuudet</string>
|
||||||
<string name="press_back_twice">Ota käyttöön sovelluksesta poistuminen kahdella takaisin-painikkeen painalluksella</string>
|
<string name="press_back_twice">Ota käyttöön sovelluksesta poistuminen kahdella takaisin-painikkeen painalluksella</string>
|
||||||
|
|||||||
@@ -26,8 +26,8 @@
|
|||||||
<string name="decompressing">Décompression…</string>
|
<string name="decompressing">Décompression…</string>
|
||||||
<string name="compression_successful">Compression réussie</string>
|
<string name="compression_successful">Compression réussie</string>
|
||||||
<string name="decompression_successful">Décompression réussie</string>
|
<string name="decompression_successful">Décompression réussie</string>
|
||||||
<string name="compressing_failed">Compression ratée</string>
|
<string name="compressing_failed">Échec de la compression</string>
|
||||||
<string name="decompressing_failed">Décompression ratée</string>
|
<string name="decompressing_failed">Échec de la décompression</string>
|
||||||
<string name="manage_favorites">Gérer les favoris</string>
|
<string name="manage_favorites">Gérer les favoris</string>
|
||||||
<string name="go_to_favorite">Aller au favori</string>
|
<string name="go_to_favorite">Aller au favori</string>
|
||||||
<string name="favorites_activity_placeholder">Vous pouvez ajouter des dossiers souvent utilisés comme favoris pour y avoir accès rapidement depuis n\'importe où.</string>
|
<string name="favorites_activity_placeholder">Vous pouvez ajouter des dossiers souvent utilisés comme favoris pour y avoir accès rapidement depuis n\'importe où.</string>
|
||||||
|
|||||||
@@ -3,14 +3,14 @@
|
|||||||
<string name="app_launcher_name">Fájlkezelő</string>
|
<string name="app_launcher_name">Fájlkezelő</string>
|
||||||
<string name="press_back_again">A kilépéshez nyomja meg újra a vissza gombot</string>
|
<string name="press_back_again">A kilépéshez nyomja meg újra a vissza gombot</string>
|
||||||
<string name="go_to_home_folder">Ugrás a kezdőmappára</string>
|
<string name="go_to_home_folder">Ugrás a kezdőmappára</string>
|
||||||
<string name="set_as_home_folder">Beállítás kezdőmappának</string>
|
<string name="set_as_home_folder">Beállítás főmappaként</string>
|
||||||
<string name="home_folder_updated">Kezdőmappa frissítve</string>
|
<string name="home_folder_updated">Főmappa frissítve</string>
|
||||||
<string name="copy_path">Útvonal vágólapra másolása</string>
|
<string name="copy_path">Útvonal vágólapra másolása</string>
|
||||||
<string name="path_copied">Útvonal másolva</string>
|
<string name="path_copied">Útvonal másolva</string>
|
||||||
<string name="select_audio_file">Válasszon egy hangfájlt</string>
|
<string name="select_audio_file">Kérem, válasszon egy hangfájlt</string>
|
||||||
<string name="search_folder">Mappa keresése</string>
|
<string name="search_folder">Mappa keresése</string>
|
||||||
<string name="rooted_device_only">Ez a művelet csak root jogosultságot támogató eszközökön működik</string>
|
<string name="rooted_device_only">Ez a művelet csak root-olt eszközökön működik</string>
|
||||||
<string name="recents">Frissek</string>
|
<string name="recents">Legutóbbiak</string>
|
||||||
<string name="show_recents">Frissek megjelenítése</string>
|
<string name="show_recents">Frissek megjelenítése</string>
|
||||||
<string name="invert_colors">Színek invertálása</string>
|
<string name="invert_colors">Színek invertálása</string>
|
||||||
<string name="open_as">Megnyitás másként</string>
|
<string name="open_as">Megnyitás másként</string>
|
||||||
@@ -44,4 +44,4 @@
|
|||||||
<string name="total_storage">Összes tárhely: %s</string>
|
<string name="total_storage">Összes tárhely: %s</string>
|
||||||
<string name="enable_root_access">Root hozzáférés engedélyezése</string>
|
<string name="enable_root_access">Root hozzáférés engedélyezése</string>
|
||||||
<string name="press_back_twice">A Vissza gombot kétszer kelljen megnyomni az alkalmazásból történő kilépéshez</string>
|
<string name="press_back_twice">A Vissza gombot kétszer kelljen megnyomni az alkalmazásból történő kilépéshez</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_launcher_name">מנהל קבצים</string>
|
<string name="app_launcher_name">מנהל הקבצים</string>
|
||||||
<string name="press_back_again">לחץ שוב אחורה כדי לצאת</string>
|
<string name="press_back_again">ליציאה יש ללחוץ אחורה פעם נוספת</string>
|
||||||
<string name="go_to_home_folder">עבור לתיקיית הבית</string>
|
<string name="go_to_home_folder">מעבר לתיקיית הבית</string>
|
||||||
<string name="set_as_home_folder">הגדר כתיקיית בית</string>
|
<string name="set_as_home_folder">הגדר כתיקיית בית</string>
|
||||||
<string name="home_folder_updated">תיקיית הבית עודכנה</string>
|
<string name="home_folder_updated">תיקיית הבית עודכנה</string>
|
||||||
<string name="copy_path">העתק נתיב ללוח</string>
|
<string name="copy_path">העתק נתיב ללוח</string>
|
||||||
<string name="path_copied">הנתיב הועתק</string>
|
<string name="path_copied">הנתיב הועתק</string>
|
||||||
<string name="select_audio_file">אנא בחר קובץ שמע</string>
|
<string name="select_audio_file">אנא בחר קובץ שמע</string>
|
||||||
<string name="search_folder">חיפוש תיקייה</string>
|
<string name="search_folder">חיפוש תיקייה</string>
|
||||||
<string name="rooted_device_only">פעולה זו פועלת רק במכשירים עם רוט</string>
|
<string name="rooted_device_only">פעולה זו עובדת רק במכשירים עם רוט</string>
|
||||||
<string name="recents">אחרונים</string>
|
<string name="recents">אחרונים</string>
|
||||||
<string name="show_recents">הצג את האחרונים</string>
|
<string name="show_recents">הצג אחרונים</string>
|
||||||
<string name="invert_colors">הפוך צבעים</string>
|
<string name="invert_colors">הפוך צבעים</string>
|
||||||
<string name="open_as">פתח כ</string>
|
<string name="open_as">פתח כ</string>
|
||||||
<string name="text_file">קובץ טקסט</string>
|
<string name="text_file">קובץ טקסט</string>
|
||||||
@@ -19,29 +19,29 @@
|
|||||||
<string name="audio_file">קובץ שמע</string>
|
<string name="audio_file">קובץ שמע</string>
|
||||||
<string name="video_file">קובץ וידיאו</string>
|
<string name="video_file">קובץ וידיאו</string>
|
||||||
<string name="other_file">קובץ אחר</string>
|
<string name="other_file">קובץ אחר</string>
|
||||||
<string name="compress">לדחוס</string>
|
<string name="compress">דחיסה</string>
|
||||||
<string name="decompress">לבטל דחיסה</string>
|
<string name="decompress">חילוץ</string>
|
||||||
<string name="compress_as">דחוס כ</string>
|
<string name="compress_as">דחיסה כ</string>
|
||||||
<string name="compressing">דוחס…</string>
|
<string name="compressing">דוחס…</string>
|
||||||
<string name="decompressing">משחרר דחיסה…</string>
|
<string name="decompressing">מחלץ…</string>
|
||||||
<string name="compression_successful">הדחיסה הצליחה</string>
|
<string name="compression_successful">הדחיסה הצליחה</string>
|
||||||
<string name="decompression_successful">שחרור הדחיסה הצליח</string>
|
<string name="decompression_successful">החילוץ הצליח</string>
|
||||||
<string name="compressing_failed">הדחיסה נכשלה</string>
|
<string name="compressing_failed">הדחיסה נכשלה</string>
|
||||||
<string name="decompressing_failed">פעולת שחרור הדחיסה נכשל</string>
|
<string name="decompressing_failed">החילוץ נכשל</string>
|
||||||
<string name="manage_favorites">נהל מועדפים</string>
|
<string name="manage_favorites">נהל מועדפים</string>
|
||||||
<string name="go_to_favorite">עבור למועדפים</string>
|
<string name="go_to_favorite">עבור למועדפים</string>
|
||||||
<string name="favorites_activity_placeholder">אתה יכול להוסיף תיקיות בשימוש תכוף למועדפים לגישה נוחה מכל מקום.</string>
|
<string name="favorites_activity_placeholder">באפשרותך להוסיף תיקיות בשימוש תכוף למועדפים לגישה נוחה מכל מקום.</string>
|
||||||
<string name="file_editor">עורך הקבצים</string>
|
<string name="file_editor">עורך הקבצים</string>
|
||||||
<string name="storage_analysis">ניתוח אחסון</string>
|
<string name="storage_analysis">ניתוח אחסון</string>
|
||||||
<string name="images">תמונות</string>
|
<string name="images">תמונות</string>
|
||||||
<string name="videos">וידיאו</string>
|
<string name="videos">סרטונים</string>
|
||||||
<string name="audio">אודיו</string>
|
<string name="audio">שמע</string>
|
||||||
<string name="documents">מסמכים</string>
|
<string name="documents">מסמכים</string>
|
||||||
<string name="downloads">הורדות</string>
|
<string name="downloads">הורדות</string>
|
||||||
<string name="archives">ארכיון</string>
|
<string name="archives">ארכיונים</string>
|
||||||
<string name="others">אחרים</string>
|
<string name="others">אחרים</string>
|
||||||
<string name="storage_free">חינם</string>
|
<string name="storage_free">חופשי</string>
|
||||||
<string name="total_storage">שטח אחסון כולל: %s</string>
|
<string name="total_storage">שטח אחסון כולל: %s</string>
|
||||||
<string name="enable_root_access">אפשר גישת שורש</string>
|
<string name="enable_root_access">אפשר גישת שורש</string>
|
||||||
<string name="press_back_twice">דרוש לחיצה על חזרה פעמיים כדי לצאת מהאפליקציה דרוש לחיצה על חזרה פעמיים כדי לצאת מהאפליקציה</string>
|
<string name="press_back_twice">דרישת לחיצה כפולה על כפתור אחורה כדי לצאת מהאפליקציה</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string name="images">Tugniwin</string>
|
||||||
|
<string name="videos">Tividyutin</string>
|
||||||
|
<string name="audio">Imesli</string>
|
||||||
|
<string name="documents">Isemliyen</string>
|
||||||
|
<string name="downloads">Isidar</string>
|
||||||
|
<string name="archives">Iɣbaren</string>
|
||||||
|
<string name="others">Wiyyaḍ</string>
|
||||||
|
<string name="storage_free">i d-yeqqimen</string>
|
||||||
|
<string name="app_launcher_name">Amsefrak n ifuyla</string>
|
||||||
|
<string name="compress">Tussda</string>
|
||||||
|
<string name="open_as">Ldi am</string>
|
||||||
|
<string name="text_file">Afaylu aḍris</string>
|
||||||
|
<string name="image_file">Afaylu n tugna</string>
|
||||||
|
<string name="audio_file">Afaylu n imesli</string>
|
||||||
|
<string name="video_file">Ifuyla n uvidyu</string>
|
||||||
|
<string name="other_file">Afaylu nniḍen</string>
|
||||||
|
<string name="compress_as">Ssed am</string>
|
||||||
|
<string name="recents">N melmi kan</string>
|
||||||
|
<string name="file_editor">Amaẓrag n ufaylu</string>
|
||||||
|
<string name="go_to_home_folder">Ddu ar ukaram agejdan</string>
|
||||||
|
<string name="home_folder_updated">Akaram agejdan yettwalqem</string>
|
||||||
|
<string name="copy_path">Nɣel abrid ɣer tecfawt</string>
|
||||||
|
<string name="search_folder">Nadi akaram</string>
|
||||||
|
<string name="rooted_device_only">Tamhelt-a tetteddu kan deg yibenkan iẓaranen</string>
|
||||||
|
<string name="show_recents">Sken ineggura</string>
|
||||||
|
<string name="compressing">Asekkussem…</string>
|
||||||
|
<string name="compression_successful">Asekkussem yedda akken iwata</string>
|
||||||
|
<string name="decompression_successful">Tukksa n usekkusem tedda akken iwata</string>
|
||||||
|
<string name="compressing_failed">Asekkussem ur yedda ara</string>
|
||||||
|
<string name="favorites_activity_placeholder">Tzemreḍ ad ternuḍ ikaramen yettwasqedcen s waṭas ɣer unurifen i unekcum s wudem fessusen seg yal amḍiq.</string>
|
||||||
|
<string name="storage_analysis">Aslaḍ n tkatut</string>
|
||||||
|
<string name="decompress">Ssef</string>
|
||||||
|
<string name="press_back_again">Sit tikkelt-nniḍen akken ad teffɣeḍ</string>
|
||||||
|
<string name="set_as_home_folder">Sbadu d akaram agejdan</string>
|
||||||
|
<string name="path_copied">Abrid yettwanɣel</string>
|
||||||
|
<string name="select_audio_file">Ma ulac aɣilif, fren afaylu ameslaw</string>
|
||||||
|
<string name="invert_colors">Tti initen</string>
|
||||||
|
<string name="decompressing">Tukksa n usekkussem…</string>
|
||||||
|
<string name="decompressing_failed">Tuccḍa deg tukksa n usekkussem</string>
|
||||||
|
<string name="manage_favorites">Sefrek inurifen</string>
|
||||||
|
<string name="go_to_favorite">Ddu ɣer unurif</string>
|
||||||
|
<string name="total_storage">Amḍiq n usekles amatu: %s</string>
|
||||||
|
<string name="enable_root_access">Rmed anekcum ɣer uẓar</string>
|
||||||
|
<string name="press_back_twice">Yessefk ad tsiteḍ snat n tikkal akken ad teffɣeḍ seg usnas</string>
|
||||||
|
</resources>
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
<string name="video_file">비디오 파일</string>
|
<string name="video_file">비디오 파일</string>
|
||||||
<string name="other_file">기타 파일</string>
|
<string name="other_file">기타 파일</string>
|
||||||
<string name="total_storage">전체 저장공간: %s</string>
|
<string name="total_storage">전체 저장공간: %s</string>
|
||||||
<string name="audio">음성</string>
|
<string name="audio">오디오</string>
|
||||||
<string name="storage_analysis">저장공간 분석</string>
|
<string name="storage_analysis">저장공간 분석</string>
|
||||||
<string name="documents">문서</string>
|
<string name="documents">문서</string>
|
||||||
<string name="downloads">다운로드</string>
|
<string name="downloads">다운로드</string>
|
||||||
@@ -43,4 +43,5 @@
|
|||||||
<string name="rooted_device_only">이 작업은 루팅된 기기에서만 작동합니다</string>
|
<string name="rooted_device_only">이 작업은 루팅된 기기에서만 작동합니다</string>
|
||||||
<string name="recents">최근 파일</string>
|
<string name="recents">최근 파일</string>
|
||||||
<string name="show_recents">최근 파일 보기</string>
|
<string name="show_recents">최근 파일 보기</string>
|
||||||
</resources>
|
<string name="storage_free">여유 공간</string>
|
||||||
|
</resources>
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_launcher_name">Failų tvarkytuvė</string>
|
<string name="app_launcher_name">Failų tvarkytuvė</string>
|
||||||
<string name="press_back_again">Paspauskite atgal dar kartą, norėdami išeiti</string>
|
<string name="press_back_again">Dar kartą paspauskite atgal, kad išeitumėte</string>
|
||||||
<string name="copy_path">Kopijuoti kelią į iškarpinę</string>
|
<string name="copy_path">Kopijuoti kelią į iškarpinę</string>
|
||||||
<string name="path_copied">Kelias nukopijuotas</string>
|
<string name="path_copied">Kelias nukopijuotas</string>
|
||||||
<string name="select_audio_file">Pasirinkite garso įrašo failą</string>
|
<string name="select_audio_file">Pasirinkite garso įrašo failą</string>
|
||||||
<string name="search_folder">Ieškoti aplanke</string>
|
<string name="search_folder">Ieškoti aplanką</string>
|
||||||
<string name="open_as">Atverti kaip</string>
|
<string name="open_as">Atverti kaip</string>
|
||||||
<string name="text_file">Tekstinis failas</string>
|
<string name="text_file">Tekstinis failas</string>
|
||||||
<string name="image_file">Paveikslo failas</string>
|
<string name="image_file">Vaizdo failas</string>
|
||||||
<string name="audio_file">Garso įrašo failas</string>
|
<string name="audio_file">Garso įrašo failas</string>
|
||||||
<string name="video_file">Vaizdo įrašo failas</string>
|
<string name="video_file">Vaizdo įrašo failas</string>
|
||||||
<string name="other_file">Kitas failas</string>
|
<string name="other_file">Kitas failas</string>
|
||||||
@@ -19,16 +19,29 @@
|
|||||||
<string name="decompressing">Išskleidžiama…</string>
|
<string name="decompressing">Išskleidžiama…</string>
|
||||||
<string name="compression_successful">Glaudinimas sėkmingas</string>
|
<string name="compression_successful">Glaudinimas sėkmingas</string>
|
||||||
<string name="decompression_successful">Išskleidimas sėkmingas</string>
|
<string name="decompression_successful">Išskleidimas sėkmingas</string>
|
||||||
<string name="compressing_failed">Nepavyko glaudinti</string>
|
<string name="compressing_failed">Glaudinimas nepavyko.</string>
|
||||||
<string name="decompressing_failed">Nepavyko išskleisti</string>
|
<string name="decompressing_failed">Išskleidimas nepavyko.</string>
|
||||||
<string name="file_editor">Failų redaktorius</string>
|
<string name="file_editor">Failų rengyklė</string>
|
||||||
<string name="storage_analysis">Saugyklos analizė</string>
|
<string name="storage_analysis">Saugyklos analizė</string>
|
||||||
<string name="images">Paveikslai</string>
|
<string name="images">Vaizdai</string>
|
||||||
<string name="videos">Vaizdo įrašai</string>
|
<string name="videos">Vaizdo įrašai</string>
|
||||||
<string name="audio">Garso įrašai</string>
|
<string name="audio">Garso įrašai</string>
|
||||||
<string name="documents">Dokumentai</string>
|
<string name="documents">Dokumentai</string>
|
||||||
<string name="downloads">Atsiuntimai</string>
|
<string name="downloads">Atsisiuntimai</string>
|
||||||
<string name="archives">Archyvai</string>
|
<string name="archives">Archyvai</string>
|
||||||
<string name="others">Kiti</string>
|
<string name="others">Kiti</string>
|
||||||
<string name="storage_free">laisva</string>
|
<string name="storage_free">laisva</string>
|
||||||
|
<string name="enable_root_access">Įjungti pagrindinį prieigą</string>
|
||||||
|
<string name="total_storage">Bendra saugykla: %s</string>
|
||||||
|
<string name="invert_colors">Invertuoti spalvas</string>
|
||||||
|
<string name="rooted_device_only">Ši operacija veikia tik pagrindiniuose įrenginiuose.</string>
|
||||||
|
<string name="recents">Naujausiai</string>
|
||||||
|
<string name="show_recents">Rodyti naujausių</string>
|
||||||
|
<string name="press_back_twice">Reikalauti dukart paspausti „Atgal“, kad palikti programėlę</string>
|
||||||
|
<string name="manage_favorites">Tvarkyti mėgstamus</string>
|
||||||
|
<string name="go_to_favorite">Eiti į mėgstamą</string>
|
||||||
|
<string name="favorites_activity_placeholder">Dažnai naudojamus aplankus galite pridėti prie mėgstamų, kad juos būtų lengva pasiekti iš bet kur.</string>
|
||||||
|
<string name="go_to_home_folder">Eiti į pagrindinį aplanką</string>
|
||||||
|
<string name="set_as_home_folder">Nustatyti kaip pagrindinį aplanką</string>
|
||||||
|
<string name="home_folder_updated">Pagrindinis aplankas atnaujintas</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,2 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources></resources>
|
<resources>
|
||||||
|
<string name="press_back_again">Притиснете назад уште еднаш за да излезете</string>
|
||||||
|
<string name="app_launcher_name">Управител со датотеки</string>
|
||||||
|
</resources>
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
<string name="path_copied">Bane kopiert</string>
|
<string name="path_copied">Bane kopiert</string>
|
||||||
<string name="select_audio_file">Vennligst velg en lydfil</string>
|
<string name="select_audio_file">Vennligst velg en lydfil</string>
|
||||||
<string name="search_folder">Søk etter mappe</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="recents">Nylige</string>
|
||||||
<string name="show_recents">Vis nylige</string>
|
<string name="show_recents">Vis nylige</string>
|
||||||
<string name="open_as">Åpne som</string>
|
<string name="open_as">Åpne som</string>
|
||||||
@@ -40,4 +40,8 @@
|
|||||||
<string name="storage_free">ledig</string>
|
<string name="storage_free">ledig</string>
|
||||||
<string name="total_storage">Total lagring: %s</string>
|
<string name="total_storage">Total lagring: %s</string>
|
||||||
<string name="enable_root_access">Aktiver root-tilgang</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>
|
</resources>
|
||||||
@@ -1,2 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources></resources>
|
<resources>
|
||||||
|
<string name="app_launcher_name">Filbehandlar</string>
|
||||||
|
<string name="open_as">Opne som</string>
|
||||||
|
<string name="text_file">Tekstfil</string>
|
||||||
|
<string name="audio">Ljod</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"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_launcher_name">Arquivos</string>
|
<string name="app_launcher_name">Gerenciador de Arquivos</string>
|
||||||
<string name="press_back_again">Aperte novamente o botão Voltar para sair</string>
|
<string name="press_back_again">Aperte novamente o botão Voltar para sair</string>
|
||||||
<string name="go_to_home_folder">Ir para Pasta Principal</string>
|
<string name="go_to_home_folder">Ir para Pasta Principal</string>
|
||||||
<string name="set_as_home_folder">Definir como Pasta Principal</string>
|
<string name="set_as_home_folder">Definir como Pasta Principal</string>
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
<string name="recents">Недавнее</string>
|
<string name="recents">Недавнее</string>
|
||||||
<string name="show_recents">Показывать недавнее</string>
|
<string name="show_recents">Показывать недавнее</string>
|
||||||
<string name="invert_colors">Инвертировать цвета</string>
|
<string name="invert_colors">Инвертировать цвета</string>
|
||||||
<string name="open_as">Открыть как…</string>
|
<string name="open_as">Открыть как</string>
|
||||||
<string name="text_file">Текст</string>
|
<string name="text_file">Текст</string>
|
||||||
<string name="image_file">Изображение</string>
|
<string name="image_file">Изображение</string>
|
||||||
<string name="audio_file">Звуковой файл</string>
|
<string name="audio_file">Звуковой файл</string>
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
<string name="other_file">Другое</string>
|
<string name="other_file">Другое</string>
|
||||||
<string name="compress">Сжать</string>
|
<string name="compress">Сжать</string>
|
||||||
<string name="decompress">Извлечь</string>
|
<string name="decompress">Извлечь</string>
|
||||||
<string name="compress_as">Сжать как…</string>
|
<string name="compress_as">Сжать как</string>
|
||||||
<string name="compressing">Сжатие…</string>
|
<string name="compressing">Сжатие…</string>
|
||||||
<string name="decompressing">Извлечение…</string>
|
<string name="decompressing">Извлечение…</string>
|
||||||
<string name="compression_successful">Сжатие успешно</string>
|
<string name="compression_successful">Сжатие успешно</string>
|
||||||
|
|||||||
@@ -43,4 +43,5 @@
|
|||||||
<string name="total_storage">Úložisko celkom: %s</string>
|
<string name="total_storage">Úložisko celkom: %s</string>
|
||||||
<string name="enable_root_access">Povoliť prístup ku koreňovým súborom</string>
|
<string name="enable_root_access">Povoliť prístup ku koreňovým súborom</string>
|
||||||
<string name="press_back_twice">Vyžadovať stlačenie Späť na opustenie apky dvakrát</string>
|
<string name="press_back_twice">Vyžadovať stlačenie Späť na opustenie apky dvakrát</string>
|
||||||
|
<string name="audio">Zvuk</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_launcher_name">Филе Манагер</string>
|
<string name="app_launcher_name">Менаџер фајлова</string>
|
||||||
<string name="press_back_again">Притисните поново да бисте изашли</string>
|
<string name="press_back_again">Притисните поново да бисте изашли</string>
|
||||||
<string name="go_to_home_folder">Идите у почетни фолдер</string>
|
<string name="go_to_home_folder">Идите у почетни фолдер</string>
|
||||||
<string name="set_as_home_folder">Постави као почетни фолдер</string>
|
<string name="set_as_home_folder">Постави као почетни фолдер</string>
|
||||||
|
|||||||
@@ -43,4 +43,5 @@
|
|||||||
<string name="total_storage">மொத்த சேமிப்பிடம்: %s</string>
|
<string name="total_storage">மொத்த சேமிப்பிடம்: %s</string>
|
||||||
<string name="enable_root_access">ரூட் அணுகலை இயக்கு</string>
|
<string name="enable_root_access">ரூட் அணுகலை இயக்கு</string>
|
||||||
<string name="press_back_twice">செயலியை வெளியேற இரண்டு முறை பின் அழுத்த கோரு</string>
|
<string name="press_back_twice">செயலியை வெளியேற இரண்டு முறை பின் அழுத்த கோரு</string>
|
||||||
|
<string name="invert_colors">தலைகீழாக வண்ணங்கள்</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,3 +1,47 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
<string name="images">รูปภาพ</string>
|
||||||
|
<string name="videos">วิดีโอ</string>
|
||||||
|
<string name="audio">เสียง</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="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="compressing">กำลังบีบอัด…</string>
|
||||||
|
<string name="compress_as">บีบอัดเป็น</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="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">เปิดใช้งานการเข้าถึงสิทธิ์รูท</string>
|
||||||
|
<string name="press_back_twice">ต้องกดปุ่มย้อนกลับสองครั้งเพื่อออกจากแอป</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -18,19 +18,19 @@
|
|||||||
<string name="image_file">Resim dosyası</string>
|
<string name="image_file">Resim dosyası</string>
|
||||||
<string name="audio_file">Ses dosyası</string>
|
<string name="audio_file">Ses dosyası</string>
|
||||||
<string name="video_file">Video dosyası</string>
|
<string name="video_file">Video dosyası</string>
|
||||||
<string name="other_file">Diğer dosya</string>
|
<string name="other_file">Diğer dosyalar</string>
|
||||||
<string name="compress">Sıkıştır</string>
|
<string name="compress">Sıkıştır</string>
|
||||||
<string name="decompress">Çöz</string>
|
<string name="decompress">Çıkar</string>
|
||||||
<string name="compress_as">Sıkıştır</string>
|
<string name="compress_as">Sıkıştır</string>
|
||||||
<string name="compressing">Sıkıştırılıyor…</string>
|
<string name="compressing">Sıkıştırılıyor…</string>
|
||||||
<string name="decompressing">Çözülüyor…</string>
|
<string name="decompressing">Çıkarılıyor…</string>
|
||||||
<string name="compression_successful">Sıkıştırma başarılı</string>
|
<string name="compression_successful">Sıkıştırma başarılı</string>
|
||||||
<string name="decompression_successful">Çözme başarılı</string>
|
<string name="decompression_successful">Çıkarma başarılı</string>
|
||||||
<string name="compressing_failed">Sıkıştırma başarısız</string>
|
<string name="compressing_failed">Sıkıştırma başarısız</string>
|
||||||
<string name="decompressing_failed">Çözme başarısız</string>
|
<string name="decompressing_failed">Çıkarma başarısız</string>
|
||||||
<string name="manage_favorites">Gözdeleri yönet</string>
|
<string name="manage_favorites">Gözdeleri yönet</string>
|
||||||
<string name="go_to_favorite">Gözdeye git</string>
|
<string name="go_to_favorite">Gözdeye git</string>
|
||||||
<string name="favorites_activity_placeholder">Sık kullanılan klasörleri her yerden kolay erişmek için gözdelere ekleyebilirsiniz.</string>
|
<string name="favorites_activity_placeholder">Sık kullanılan klasörlere her yerden kolay erişmek için gözdelere ekleyebilirsiniz.</string>
|
||||||
<string name="file_editor">Dosya Düzenleyici</string>
|
<string name="file_editor">Dosya Düzenleyici</string>
|
||||||
<string name="storage_analysis">Depolama analizi</string>
|
<string name="storage_analysis">Depolama analizi</string>
|
||||||
<string name="images">Resimler</string>
|
<string name="images">Resimler</string>
|
||||||
@@ -44,4 +44,4 @@
|
|||||||
<string name="total_storage">Toplam depolama: %s</string>
|
<string name="total_storage">Toplam depolama: %s</string>
|
||||||
<string name="enable_root_access">Root erişimini etkinleştir</string>
|
<string name="enable_root_access">Root erişimini etkinleştir</string>
|
||||||
<string name="press_back_twice">Uygulamadan çıkmak için Geri tuşuna iki kez basmayı gerektir</string>
|
<string name="press_back_twice">Uygulamadan çıkmak için Geri tuşuna iki kez basmayı gerektir</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,20 +1,20 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_launcher_name">Менеджер Файлів</string>
|
<string name="app_launcher_name">Менеджер файлів</string>
|
||||||
<string name="press_back_again">Для виходу натисніть Назад ще раз</string>
|
<string name="press_back_again">Для виходу натисніть «Назад» ще раз</string>
|
||||||
<string name="go_to_home_folder">Перейти у домашню теку</string>
|
<string name="go_to_home_folder">Перейти у домашню теку</string>
|
||||||
<string name="set_as_home_folder">Встановити як головну теку</string>
|
<string name="set_as_home_folder">Встановити як головну теку</string>
|
||||||
<string name="home_folder_updated">Головну теку оновлено</string>
|
<string name="home_folder_updated">Головну теку оновлено</string>
|
||||||
<string name="copy_path">Скопіювати шлях у буфер обміну</string>
|
<string name="copy_path">Скопіювати шлях у буфер обміну</string>
|
||||||
<string name="path_copied">Шлях скопійовано</string>
|
<string name="path_copied">Шлях скопійовано</string>
|
||||||
<string name="select_audio_file">Будь ласка, оберіть аудіо файл</string>
|
<string name="select_audio_file">Оберіть аудіофайл</string>
|
||||||
<string name="search_folder">Шукати теку</string>
|
<string name="search_folder">Шукати теку</string>
|
||||||
<string name="rooted_device_only">Ця команда працює лише на пристроях з root-доступом</string>
|
<string name="rooted_device_only">Ця команда працює лише на пристроях з root-доступом</string>
|
||||||
<string name="recents">Останні</string>
|
<string name="recents">Останні</string>
|
||||||
<string name="show_recents">Показати останні</string>
|
<string name="show_recents">Показати останні</string>
|
||||||
<string name="invert_colors">Інвертувати кольори</string>
|
<string name="invert_colors">Інвертувати кольори</string>
|
||||||
<string name="open_as">Відкрити як файл</string>
|
<string name="open_as">Відкрити як</string>
|
||||||
<string name="text_file">Текстовий</string>
|
<string name="text_file">Текст</string>
|
||||||
<string name="image_file">Зображення</string>
|
<string name="image_file">Зображення</string>
|
||||||
<string name="audio_file">Аудіо</string>
|
<string name="audio_file">Аудіо</string>
|
||||||
<string name="video_file">Відео</string>
|
<string name="video_file">Відео</string>
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
<string name="decompression_successful">Успішно розпаковано</string>
|
<string name="decompression_successful">Успішно розпаковано</string>
|
||||||
<string name="compressing_failed">Не вдалося стиснути</string>
|
<string name="compressing_failed">Не вдалося стиснути</string>
|
||||||
<string name="decompressing_failed">Не вдалося розпакувати</string>
|
<string name="decompressing_failed">Не вдалося розпакувати</string>
|
||||||
<string name="manage_favorites">Керувати вибраним</string>
|
<string name="manage_favorites">Керувати вибраними</string>
|
||||||
<string name="go_to_favorite">Перейти у вибране</string>
|
<string name="go_to_favorite">Перейти у вибране</string>
|
||||||
<string name="favorites_activity_placeholder">Ви можете додати теки, які часто відкриваєте, у вибране, щоб швидко отримати до них доступ.</string>
|
<string name="favorites_activity_placeholder">Ви можете додати теки, які часто відкриваєте, у вибране, щоб швидко отримати до них доступ.</string>
|
||||||
<string name="file_editor">Редактор файлів</string>
|
<string name="file_editor">Редактор файлів</string>
|
||||||
@@ -37,11 +37,11 @@
|
|||||||
<string name="videos">Відео</string>
|
<string name="videos">Відео</string>
|
||||||
<string name="audio">Аудіо</string>
|
<string name="audio">Аудіо</string>
|
||||||
<string name="documents">Документи</string>
|
<string name="documents">Документи</string>
|
||||||
<string name="downloads">Завантажене</string>
|
<string name="downloads">Завантаження</string>
|
||||||
<string name="archives">Архіви</string>
|
<string name="archives">Архіви</string>
|
||||||
<string name="others">Інше</string>
|
<string name="others">Інше</string>
|
||||||
<string name="storage_free">вільно</string>
|
<string name="storage_free">вільно</string>
|
||||||
<string name="total_storage">Всього пам\'яті: %s</string>
|
<string name="total_storage">Всього пам\'яті: %s</string>
|
||||||
<string name="enable_root_access">Активувати root-доступ</string>
|
<string name="enable_root_access">Активувати root-доступ</string>
|
||||||
<string name="press_back_twice">Натисніть «Назад» двічі, щоб вийти зі застосунку</string>
|
<string name="press_back_twice">Вимагати натиснути «Назад» двічі, щоб вийти із застосунку</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
<resources>
|
<resources>
|
||||||
<string name="images">Hình ảnh</string>
|
<string name="images">Hình ảnh</string>
|
||||||
<string name="home_folder_updated">Đã cập nhật thư mục chính</string>
|
<string name="home_folder_updated">Đã cập nhật thư mục chính</string>
|
||||||
<string name="app_launcher_name">Quản lý tập tin</string>
|
<string name="app_launcher_name">Quản lý tệp</string>
|
||||||
<string name="recents">Gần đây</string>
|
<string name="recents">Gần đây</string>
|
||||||
<string name="path_copied">Đã sao chép đường dẫn</string>
|
<string name="path_copied">Đã sao chép đường dẫn</string>
|
||||||
<string name="rooted_device_only">Thao tác này chỉ hiệu quả trên các thiết bị đã root</string>
|
<string name="rooted_device_only">Thao tác này chỉ hiệu quả trên các thiết bị đã root</string>
|
||||||
@@ -14,8 +14,8 @@
|
|||||||
<string name="decompression_successful">Giải nén thành công</string>
|
<string name="decompression_successful">Giải nén thành công</string>
|
||||||
<string name="compressing_failed">Không thể nén</string>
|
<string name="compressing_failed">Không thể nén</string>
|
||||||
<string name="decompressing_failed">Không thể giải nén</string>
|
<string name="decompressing_failed">Không thể giải nén</string>
|
||||||
<string name="manage_favorites">Quản lý mục yêu thích</string>
|
<string name="manage_favorites">Những mục yêu thích</string>
|
||||||
<string name="go_to_favorite">Đến mục yêu thích</string>
|
<string name="go_to_favorite">Mục yêu thích</string>
|
||||||
<string name="go_to_home_folder">Đến thư mục chính</string>
|
<string name="go_to_home_folder">Đến thư mục chính</string>
|
||||||
<string name="set_as_home_folder">Đặt làm thư mục chính</string>
|
<string name="set_as_home_folder">Đặt làm thư mục chính</string>
|
||||||
<string name="audio">Âm thanh</string>
|
<string name="audio">Âm thanh</string>
|
||||||
@@ -23,11 +23,11 @@
|
|||||||
<string name="documents">Tài liệu</string>
|
<string name="documents">Tài liệu</string>
|
||||||
<string name="downloads">Tải xuống</string>
|
<string name="downloads">Tải xuống</string>
|
||||||
<string name="videos">Video</string>
|
<string name="videos">Video</string>
|
||||||
<string name="archives">File nén</string>
|
<string name="archives">Tệp nén</string>
|
||||||
<string name="others">Khác</string>
|
<string name="others">Khác</string>
|
||||||
<string name="press_back_again">Nhấn quay lại để thoát</string>
|
<string name="press_back_again">Nhấn quay lại để thoát</string>
|
||||||
<string name="search_folder">Tìm kiếm thư mục</string>
|
<string name="search_folder">Tìm kiếm thư mục</string>
|
||||||
<string name="select_audio_file">Hãy chọn một file âm thanh</string>
|
<string name="select_audio_file">Hãy chọn một tệp âm thanh</string>
|
||||||
<string name="copy_path">Sao chép đường dẫn</string>
|
<string name="copy_path">Sao chép đường dẫn</string>
|
||||||
<string name="invert_colors">Đảo màu</string>
|
<string name="invert_colors">Đảo màu</string>
|
||||||
<string name="show_recents">Hiển thị gần đây</string>
|
<string name="show_recents">Hiển thị gần đây</string>
|
||||||
@@ -39,9 +39,9 @@
|
|||||||
<string name="decompressing">Đang giải nén…</string>
|
<string name="decompressing">Đang giải nén…</string>
|
||||||
<string name="compression_successful">Nén thành công</string>
|
<string name="compression_successful">Nén thành công</string>
|
||||||
<string name="favorites_activity_placeholder">Bạn có thể thêm các thư mục thường xuyên sử dụng vào mục yêu thích để truy cập nhanh hơn.</string>
|
<string name="favorites_activity_placeholder">Bạn có thể thêm các thư mục thường xuyên sử dụng vào mục yêu thích để truy cập nhanh hơn.</string>
|
||||||
<string name="file_editor">Trình chỉnh sửa file</string>
|
<string name="file_editor">Trình chỉnh sửa tệp</string>
|
||||||
<string name="storage_free">trống</string>
|
<string name="storage_free">trống</string>
|
||||||
<string name="total_storage">Tổng bộ nhớ: %s</string>
|
<string name="total_storage">Tổng bộ nhớ: %s</string>
|
||||||
<string name="enable_root_access">Cho phép truy cập root</string>
|
<string name="enable_root_access">Cho phép truy cập root</string>
|
||||||
<string name="press_back_twice">Nhấn Quay lại hai lần để thoát ứng dụng</string>
|
<string name="press_back_twice">Nhấn đúp Quay lại để thoát ứng dụng</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -43,5 +43,5 @@
|
|||||||
<string name="storage_free">可用</string>
|
<string name="storage_free">可用</string>
|
||||||
<string name="total_storage">总存储:%s</string>
|
<string name="total_storage">总存储:%s</string>
|
||||||
<string name="enable_root_access">启用 root 访问</string>
|
<string name="enable_root_access">启用 root 访问</string>
|
||||||
<string name="press_back_twice">需要按两次返回键才能离开应用程序</string>
|
<string name="press_back_twice">需要按两次返回键才能离开应用</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,4 +1,47 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="images">圖片</string>
|
<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"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_launcher_name">簡易檔案管理器</string>
|
<string name="app_launcher_name">檔案管理器</string>
|
||||||
<string name="press_back_again">再按一次返回以離開</string>
|
<string name="press_back_again">再按一次返回以離開</string>
|
||||||
<string name="go_to_home_folder">前往主資料夾</string>
|
<string name="go_to_home_folder">前往主資料夾</string>
|
||||||
<string name="set_as_home_folder">設為主資料夾</string>
|
<string name="set_as_home_folder">設為主資料夾</string>
|
||||||
@@ -44,4 +44,4 @@
|
|||||||
<string name="show_recents">顯示最近造訪</string>
|
<string name="show_recents">顯示最近造訪</string>
|
||||||
<string name="documents">文件</string>
|
<string name="documents">文件</string>
|
||||||
<string name="storage_free">可用空間</string>
|
<string name="storage_free">可用空間</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.android).apply(false)
|
alias(libs.plugins.android).apply(false)
|
||||||
alias(libs.plugins.kotlinAndroid).apply(false)
|
|
||||||
alias(libs.plugins.detekt).apply(false)
|
alias(libs.plugins.detekt).apply(false)
|
||||||
}
|
}
|
||||||
+63
@@ -0,0 +1,63 @@
|
|||||||
|
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
|
||||||
|
ReturnCount:
|
||||||
|
active: true
|
||||||
|
max: 4
|
||||||
|
excludeGuardClauses: true
|
||||||
|
excludes: ["**/test/**", "**/androidTest/**"]
|
||||||
|
|
||||||
|
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,30 @@
|
|||||||
|
Cansat de gestors d'arxius que alenteixen i envaeixen la vostra privadesa? Tingueu una experiència ràpida, segura i completament personalitzable amb el gestor de fitxers Fossify. ⚡
|
||||||
|
|
||||||
|
🚀 DOMINEU EL MÓN DIGITAL AMB UNA NAVEGACIÓ RÀPIDA:
|
||||||
|
• Gestioneu ràpidament els arxius amb facilitat de compressió i transferència, mantenint la vostra vida digital organitzada.
|
||||||
|
• Accediu ràpidament a les carpetes més utilitzades amb una carpeta d'inici personalitzable i dreceres preferides.
|
||||||
|
• Trobeu allò que necessiteu en segons amb opcions intuïtives de navegació, cerca i ordenació.
|
||||||
|
|
||||||
|
🔐 FORTIFIQUEU LES VOSTRES DADES AMB UNA PRIVADESA I SEGURETAT INIGUALABLES:
|
||||||
|
• Assegureu els fitxers confidencials amb contrasenya, patró o bloqueig d'empremtes digitals per a elements ocults o tota l'aplicació.
|
||||||
|
• No es requereix accés a internet: els vostres fitxers es mantenen privats i segurs al vostre dispositiu.
|
||||||
|
|
||||||
|
💾 DOMINEU L'EMMAGATZEMATGE COM UN PROFESSIONAL:
|
||||||
|
• Netegeu l'espai amb una compressió fàcil de fitxers i carpetes per a maximitzar el potencial del dispositiu.
|
||||||
|
• Identifiqueu i netegeu fitxers devoradors d'espai amb l'eina integrada d'anàlisi d'emmagatzematge.
|
||||||
|
• Navegueu sense problemes pels fitxers arrel, les targetes SD i els dispositius USB per una organització total.
|
||||||
|
|
||||||
|
📁 OPTIMITZEU EL FLUX DE TREBALL AMB EINES ÚTILS:
|
||||||
|
• Creeu dreceres d'escriptori per a l'accés instantani als fitxers i carpetes més utilitzats.
|
||||||
|
• Editeu, imprimiu o llegiu documents fàcilment amb l'editor lleuger de fitxers, millorat mitjançant gestos de zoom.
|
||||||
|
|
||||||
|
🌈 FEU-HO VOSTRE AMB UNA PERSONALITZACIÓ INFINITA:
|
||||||
|
• Gaudiu d'una experiència lliure d'anuncis i de codi obert que us dona el control, no dels gegants corporatius.
|
||||||
|
• Personalitzeu els colors, temes i icones per a reflectir el vostre estil i preferències úniques.
|
||||||
|
|
||||||
|
Llenceu els gestors de fitxers inflats i que envaeixen la privadesa i experimenteu una veritable llibertat amb el Fossify File Manager. Descarregueu-lo ara i recupereu el control de la vostra vida digital!
|
||||||
|
|
||||||
|
Exploreu més aplicacions de Fossify: https://www.fossify.org
|
||||||
|
Codi font: https://www.github.com/FossifyOrg
|
||||||
|
Uniu-vos a la comunitat a Reddit: https://www.reddit.com/r/Fossify
|
||||||
|
Connecteu a Telegram: https://t.me/Fossify
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Explorador de fitxers senzill, lleuger i de codi font obert, funcional.
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
Changed:
|
||||||
|
|
||||||
|
• Compatibility updates for Android 15 & 16
|
||||||
|
• Updated translations
|
||||||
|
|
||||||
|
Fixed:
|
||||||
|
|
||||||
|
• Fixed duplicated entries when viewing protected ZIP files
|
||||||
|
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
Changed:
|
||||||
|
|
||||||
|
• Updated translations
|
||||||
|
|
||||||
|
Fixed:
|
||||||
|
|
||||||
|
• Fixed an issue where existing files were overwritten when saving new files
|
||||||
|
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
Added:
|
||||||
|
|
||||||
|
• Added support for custom fonts
|
||||||
|
|
||||||
|
Changed:
|
||||||
|
|
||||||
|
• Updated translations
|
||||||
|
|
||||||
Loaded 100 of 128 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user