mirror of
https://github.com/FossifyOrg/File-Manager.git
synced 2026-11-04 12:03:02 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
626497acc5 | ||
|
|
cb1cd83f50 | ||
|
|
0548e07f21 | ||
|
|
94924bd19c | ||
|
|
19f0a2ad35 | ||
|
|
97dcf30b47 | ||
|
|
5dae7f82f5 | ||
|
|
b302495c30 | ||
|
|
747d4b5b43 | ||
|
|
1f8f779ed1 | ||
|
|
68c00dc3c0 | ||
|
|
2fe8b22fd4 | ||
|
|
2c0e31cdcf | ||
|
|
8df0412e11 | ||
|
|
25cfd43655 | ||
|
|
73e9080b67 | ||
|
|
581d56ffdc | ||
|
|
c1f7169332 | ||
|
|
482cfeda68 | ||
|
|
d76a33730f | ||
|
|
6e97c28536 | ||
|
|
699e3ec836 | ||
|
|
31e7920991 | ||
|
|
991a99a46e | ||
|
|
72cd81e24c | ||
|
|
bdc8d9c6ab | ||
|
|
6a786d5f25 | ||
|
|
e1ca6d77f4 | ||
|
|
97db302e2e | ||
|
|
ea767df3c0 | ||
|
|
d0f7e96a84 | ||
|
|
5bbe0b59e0 | ||
|
|
00dd6f4500 | ||
|
|
9f81ce77c2 | ||
|
|
742d63af2b | ||
|
|
df9249f989 | ||
|
|
0490de7627 | ||
|
|
a0c87edc3e | ||
|
|
127a820c25 | ||
|
|
be63e6f9a8 | ||
|
|
55cc3bb441 | ||
|
|
8daff3f0db | ||
|
|
3aef65fa37 | ||
|
|
645d5d1943 | ||
|
|
3fe891a821 | ||
|
|
80793f1a0e | ||
|
|
d856a9cebd | ||
|
|
2fce420cd1 | ||
|
|
447769190b | ||
|
|
e89e5b3a17 | ||
|
|
fcdf530ffa | ||
|
|
ba339261f7 | ||
|
|
11c7a6dd5a | ||
|
|
1d9404f7fa | ||
|
|
a91f7a2df8 | ||
|
|
0332a63ee4 | ||
|
|
20b9776364 | ||
|
|
47849e1d07 | ||
|
|
e4ee20c5fb | ||
|
|
88ed94ddae | ||
|
|
827cd9114a | ||
|
|
6fd361eb14 | ||
|
|
f153ffa8e1 | ||
|
|
1383a26ef7 | ||
|
|
4f92ddbc1c | ||
|
|
4d5720d2d1 | ||
|
|
f0925f7945 | ||
|
|
0e7f0b40a1 | ||
|
|
8b6fc1cc46 | ||
|
|
1cbeab42ea | ||
|
|
69f29435c3 | ||
|
|
b5e8d10af2 | ||
|
|
395b183b77 | ||
|
|
3722501aea | ||
|
|
1500f45593 | ||
|
|
0aa27861e7 | ||
|
|
98383895c5 | ||
|
|
a1bb523e8d | ||
|
|
cd6db6d71a | ||
|
|
42a34f3d1c | ||
|
|
2c6b98e22e | ||
|
|
badf7ccd21 | ||
|
|
67788e7d4b | ||
|
|
b118080dc9 | ||
|
|
1c049561fb | ||
|
|
cb29636dd0 | ||
|
|
2b7246bbf4 | ||
|
|
e156413e42 | ||
|
|
7268af9d6c | ||
|
|
08dd3dc171 | ||
|
|
1ef3d26025 | ||
|
|
a35fb3e847 | ||
|
|
074700bf77 | ||
|
|
d850827ce7 | ||
|
|
61c3e8884b | ||
|
|
f0fa5a87ae | ||
|
|
c240674079 | ||
|
|
cbd8d60ff6 | ||
|
|
34aa03a7e0 | ||
|
|
dc34c03368 | ||
|
|
b55a9df5ab | ||
|
|
8219d1f56f | ||
|
|
ae15e123fe | ||
|
|
a6e14aa641 | ||
|
|
4c930e0944 | ||
|
|
8651f32b72 | ||
|
|
c9fb0f523d | ||
|
|
bcc92b1483 | ||
|
|
901f3bb877 | ||
|
|
36f5af651a | ||
|
|
6751fda69f | ||
|
|
bf322c6ad8 | ||
|
|
591d693ae6 | ||
|
|
8ea493739e | ||
|
|
0722176c87 | ||
|
|
a19efbda60 | ||
|
|
4ed7c97044 | ||
|
|
cec9ee04df | ||
|
|
1effc571e5 | ||
|
|
a6d53c8207 | ||
|
|
e70f6305d2 | ||
|
|
0ca9a84b5d | ||
|
|
506a60fad6 | ||
|
|
f9103a602d | ||
|
|
0cddc4a903 | ||
|
|
f5b3f0f461 | ||
|
|
caec5063bf | ||
|
|
bad5451789 | ||
|
|
0ba8d43538 | ||
|
|
47e4ef1ff0 | ||
|
|
e59e396f8d | ||
|
|
f445fe4c9d | ||
|
|
541f5eff81 | ||
|
|
e4f6317a79 | ||
|
|
38e22d4b86 | ||
|
|
3aa6d20005 | ||
|
|
3e92e44e52 | ||
|
|
4b0c8adfdc | ||
|
|
0f682cc286 | ||
|
|
afd13dd28f | ||
|
|
9f3a16e1b5 | ||
|
|
7552c26f20 | ||
|
|
005aa67f40 | ||
|
|
aebc59facd | ||
|
|
1179d0fa00 | ||
|
|
439b5faaf9 | ||
|
|
4da76fb249 | ||
|
|
b739866d05 | ||
|
|
b11df5fe5f | ||
|
|
31e0f90f75 | ||
|
|
4c6d009373 | ||
|
|
db9f44d189 | ||
|
|
0261280eff | ||
|
|
302af120f5 | ||
|
|
117c07c231 | ||
|
|
666bfb6b5c | ||
|
|
007a481aa3 | ||
|
|
d96a148404 | ||
|
|
985568ea2d | ||
|
|
2da2f05fdb | ||
|
|
9cd08ea053 | ||
|
|
3b8fdbefa8 | ||
|
|
37f41d4bbb | ||
|
|
1561e27674 | ||
|
|
ec770f54b2 | ||
|
|
73cce5535a | ||
|
|
43b979c1f8 | ||
|
|
3c262e5d93 | ||
|
|
af48fdd2c2 | ||
|
|
8aa8913620 | ||
|
|
0274fd4992 | ||
|
|
b9773efa5f | ||
|
|
272f99479b | ||
|
|
95e127a5d2 | ||
|
|
f13353427c | ||
|
|
1a29d085b3 | ||
|
|
1f8ebbfe9e | ||
|
|
3b7182c4d0 | ||
|
|
a405cbd58d | ||
|
|
87db8da87b | ||
|
|
e9c1b1f9de | ||
|
|
f4f0152f66 | ||
|
|
9ddbf27fa1 | ||
|
|
dfe9ef2f35 | ||
|
|
19668088a8 | ||
|
|
1a422ae262 | ||
|
|
706da693a7 | ||
|
|
3c93a2d2da | ||
|
|
b5c2c6a7f5 | ||
|
|
aea5b034c3 | ||
|
|
3712f9fb26 | ||
|
|
cb3e393eb8 | ||
|
|
d78f7cb507 | ||
|
|
3c87b4ad4d | ||
|
|
3e54e5666d | ||
|
|
cb40349aaf | ||
|
|
74b231a422 | ||
|
|
0ecde5324a | ||
|
|
7488a447cc | ||
|
|
c3d867daf7 | ||
|
|
ba8ceb3f17 | ||
|
|
28767b1574 | ||
|
|
42505ca035 | ||
|
|
daed9558b9 | ||
|
|
34b2cf30cb | ||
|
|
702f147071 | ||
|
|
b61eb28bf8 | ||
|
|
6d07e38e8a | ||
|
|
6d1d7181fa | ||
|
|
227e8c198f | ||
|
|
5f5aa2cbeb | ||
|
|
7a88f5102a | ||
|
|
140915ee4a | ||
|
|
41500fc620 | ||
|
|
db4b12698c | ||
|
|
63ff11b561 | ||
|
|
b83cdc3e5d | ||
|
|
4ce7da70d5 | ||
|
|
0419bc54ed | ||
|
|
b5f43bd391 | ||
|
|
8c9e7ee9ff | ||
|
|
f4bb5bcc95 | ||
|
|
0df6e2293a | ||
|
|
116adb1d60 | ||
|
|
80fd1da440 | ||
|
|
59ae8905da | ||
|
|
f05c8f87d5 | ||
|
|
d263c18c7c | ||
|
|
20442d4375 | ||
|
|
89fd8f6e43 | ||
|
|
96bec842b3 | ||
|
|
8295fb90e5 | ||
|
|
1b26eaf1dc | ||
|
|
625322c5a3 | ||
|
|
375e539d61 | ||
|
|
0aaae215ed | ||
|
|
6ca9f343a0 | ||
|
|
2cb36d2b8c | ||
|
|
b673c1d409 | ||
|
|
18afb99575 | ||
|
|
923bb1dbdf | ||
|
|
d138d51224 | ||
|
|
1d555b8372 | ||
|
|
a7c096ae59 | ||
|
|
dc63e32359 | ||
|
|
86687aed95 | ||
|
|
58c71f6822 | ||
|
|
5b999c495b | ||
|
|
18dc9580eb | ||
|
|
f6408a166e | ||
|
|
760f591d51 | ||
|
|
fa23c78b6b | ||
|
|
a3cd7a7dc2 | ||
|
|
33b2ceb60d | ||
|
|
115b96837a | ||
|
|
6d72259968 | ||
|
|
ff067d6b67 | ||
|
|
1babb14ab0 | ||
|
|
d3c717d9ba | ||
|
|
bc76ee41de | ||
|
|
cd9596a6a0 | ||
|
|
7b13773c84 | ||
|
|
700ed089ad | ||
|
|
7017d1f842 | ||
|
|
97bf72ebfe | ||
|
|
f563215a9b | ||
|
|
90337832a8 | ||
|
|
8a8312b75e | ||
|
|
c8b839ae14 | ||
|
|
0595d328bd | ||
|
|
f6f854e239 | ||
|
|
726a44002d | ||
|
|
bd60c866a2 | ||
|
|
cc1e900263 | ||
|
|
942e20b990 | ||
|
|
138980d15e | ||
|
|
a2946dc480 | ||
|
|
c2e9fc4be0 | ||
|
|
bd7c3653a6 | ||
|
|
c53aa13c13 | ||
|
|
093149b9dd | ||
|
|
4ba6ec38bb | ||
|
|
123e44bc54 | ||
|
|
b361ac312f | ||
|
|
d03216b9e8 | ||
|
|
480a7b35ea | ||
|
|
155dd96f36 | ||
|
|
0b74135051 | ||
|
|
3a2dbcb7c0 | ||
|
|
f96c7ad73b | ||
|
|
e240bc2852 | ||
|
|
af3c141612 | ||
|
|
3566e43ff9 | ||
|
|
de6cb71a80 | ||
|
|
70ba322ed5 | ||
|
|
cfa3267eee | ||
|
|
d08a671ef7 | ||
|
|
5acc808d70 | ||
|
|
369525bdb3 | ||
|
|
84a8616294 | ||
|
|
e5b3ffed62 | ||
|
|
c9f72a4c3c | ||
|
|
67a0c0be73 | ||
|
|
27a217f344 | ||
|
|
1f758c6633 | ||
|
|
5bf9f19f81 | ||
|
|
0a7d3e5cd3 | ||
|
|
2e97e1a714 | ||
|
|
113963a365 | ||
|
|
d62bf4da81 | ||
|
|
f8488baf7a | ||
|
|
1bd9bee52b | ||
|
|
46ada0cd26 | ||
|
|
0e28e07c15 | ||
|
|
97b4311f6d | ||
|
|
b82e0818b0 | ||
|
|
eef000cb14 | ||
|
|
d2964d33a3 | ||
|
|
b7d7908548 | ||
|
|
d3934af132 | ||
|
|
29611317a4 | ||
|
|
4752535504 |
No files matched your search
@@ -0,0 +1,2 @@
|
||||
# Auto-generated file. DO NOT EDIT.
|
||||
1.4.0
|
||||
@@ -1,4 +0,0 @@
|
||||
github: [naveensingh]
|
||||
patreon: naveen3singh
|
||||
liberapay: naveensingh
|
||||
custom: [https://paypal.me/naveen3singh]
|
||||
@@ -1,40 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: bug, needs triage
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Checklist**
|
||||
- [ ] I can reproduce the bug with the latest version.
|
||||
- [ ] I made sure that there are no existing issues - open or closed - to which I could contribute my information to.
|
||||
- [ ] I have read the FAQ and my problem isn't listed.
|
||||
- [ ] I have taken the time to fill in all the required details. I understand that the bug report will be dismissed otherwise.
|
||||
- [ ] This issue contains only one bug.
|
||||
- [ ] I have read and understood the [contribution guidelines.](https://github.com/FossifyOrg/General-Discussion?tab=readme-ov-file#faq)
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Device info (please complete the following information):**
|
||||
- Model: [e.g. Pixel 7]
|
||||
- OS: [e.g. Android 14]
|
||||
- Version [e.g. 6.28.1]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
@@ -0,0 +1,126 @@
|
||||
name: Bug report
|
||||
description: Create a bug report to help us improve
|
||||
labels: [ "bug", "needs triage" ]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
## Hi there 👋
|
||||
Thanks for helping us improve Fossify File-Manager by reporting a bug!
|
||||
Please fill in as much information as possible about your bug to avoid unnecessary and time-consuming back-and-forth communication.
|
||||
|
||||
- type: checkboxes
|
||||
id: checklist
|
||||
attributes:
|
||||
label: "Checklist"
|
||||
options:
|
||||
- label: "I can reproduce the bug with the latest version given [here](https://github.com/FossifyOrg/File-Manager/releases/latest)."
|
||||
required: true
|
||||
- label: "I made sure that there are **no existing issues** - [open](https://github.com/FossifyOrg/File-Manager/issues) or [closed](https://github.com/FossifyOrg/File-Manager/issues?q=is%3Aissue+is%3Aclosed) - to which I could contribute my information."
|
||||
required: true
|
||||
- label: "I made sure that there are **no existing discussions** - [open](https://github.com/orgs/FossifyOrg/discussions?discussions_q=is:open+label:filemanager) or [closed](https://github.com/orgs/FossifyOrg/discussions?discussions_q=is:closed+label:filemanager) - to which I could contribute my information."
|
||||
required: true
|
||||
- label: "I have read the FAQs inside the app (Menu -> About -> FAQs) and my problem isn't listed."
|
||||
required: true
|
||||
- label: "**I have taken the time to fill in all the required details. I understand that the bug report will be dismissed otherwise.**"
|
||||
required: true
|
||||
- label: "This issue contains only one bug."
|
||||
required: true
|
||||
- label: "I have read and understood the [contribution guidelines](https://github.com/FossifyOrg/File-Manager/blob/master/CONTRIBUTING.md)."
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: app-version
|
||||
attributes:
|
||||
label: Affected app version
|
||||
description: "Which app version were you using when you found the bug?"
|
||||
placeholder: "x.x.x - Go to App Main Menu > About > Version."
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: device-os-info
|
||||
attributes:
|
||||
label: Affected Android/Custom ROM version
|
||||
description: |
|
||||
What operating system and version were you using when you encounter the bug?
|
||||
placeholder: "Example: Android 12 / LineageOS 18.1"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: device-model-info
|
||||
attributes:
|
||||
label: Affected device model
|
||||
description: |
|
||||
What device model were you using when you encountered the bug?
|
||||
placeholder: "Example: Pixel 8 Pro / Samsung Galaxy S20"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
id: download
|
||||
attributes:
|
||||
label: How did you install the app?
|
||||
options:
|
||||
- F-Droid / IzzyOnDroid
|
||||
- Google Play Store
|
||||
- GitHub releases
|
||||
- Built from source
|
||||
- Third-party website
|
||||
|
||||
- type: textarea
|
||||
id: steps-to-reproduce
|
||||
attributes:
|
||||
label: Steps to reproduce the bug
|
||||
description: |
|
||||
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.
|
||||
placeholder: |
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: expected-behavior
|
||||
attributes:
|
||||
label: Expected behavior
|
||||
description: |
|
||||
Tell us what you expect to happen.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: actual-behavior
|
||||
attributes:
|
||||
label: Actual behavior
|
||||
description: |
|
||||
Tell us what happens with the steps given above.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: screen-media
|
||||
attributes:
|
||||
label: Screenshots/Screen recordings
|
||||
description: |
|
||||
A picture or video is worth a thousand words.
|
||||
|
||||
If applicable, drag and drop screenshots or a screen recording to help explain your problem. If your file is too big for Github to accept, try to compress it (ZIP file), or feel free to paste a link to an image/video instead.
|
||||
|
||||
- type: textarea
|
||||
id: additional-information
|
||||
attributes:
|
||||
label: Additional information
|
||||
description: |
|
||||
Please provide any additional information or context that may be relevant, for example:
|
||||
* any file or media that led to this bug
|
||||
* any crash logs (if you know how to get one)
|
||||
* the affected device is rooted, a foldable or a TV
|
||||
* you have disabled all animations on your device
|
||||
* your rabbit chewed your network cable
|
||||
* ...
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Questions
|
||||
url: https://github.com/FossifyOrg/File-Manager/discussions
|
||||
url: https://github.com/orgs/FossifyOrg/discussions
|
||||
about: Please ask and answer questions here.
|
||||
@@ -1,27 +0,0 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: feature request, needs triage
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Checklist**
|
||||
- [ ] I made sure that there are no existing issues - open or closed - to which I could contribute my information.
|
||||
- [ ] I have read the FAQ and my problem isn't listed.
|
||||
- [ ] I have taken the time to fill in all the required details. I understand that the feature request will be dismissed otherwise.
|
||||
- [ ] This issue contains only one feature request.
|
||||
- [ ] I have read and understood the [contribution guidelines.](https://github.com/FossifyOrg/General-Discussion?tab=readme-ov-file#faq)
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
@@ -0,0 +1,52 @@
|
||||
name: Feature request
|
||||
description: Suggest an idea for this project
|
||||
labels: [ "feature request", "needs triage" ]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
## Hi there 👋
|
||||
Thanks for helping us improve Fossify File-Manager by suggesting a feature!
|
||||
Please fill in as much information as possible about your feature request to avoid unnecessary and time-consuming back-and-forth communication.
|
||||
|
||||
- type: checkboxes
|
||||
id: checklist
|
||||
attributes:
|
||||
label: "Checklist"
|
||||
options:
|
||||
- label: "I made sure that there are **no existing issues** - [open](https://github.com/FossifyOrg/File-Manager/issues) or [closed](https://github.com/FossifyOrg/File-Manager/issues?q=is%3Aissue+is%3Aclosed) - to which I could contribute my information."
|
||||
required: true
|
||||
- label: "I made sure that there are **no existing discussions** - [open](https://github.com/orgs/FossifyOrg/discussions?discussions_q=is:open+label:filemanager) or [closed](https://github.com/orgs/FossifyOrg/discussions?discussions_q=is:closed+label:filemanager) - to which I could contribute my information."
|
||||
required: true
|
||||
- label: "I have read the FAQs inside the app (Menu -> About -> FAQs) and my problem isn't listed."
|
||||
required: true
|
||||
- label: "**I have taken the time to fill in all the required details. I understand that the request will be dismissed otherwise.**"
|
||||
required: true
|
||||
- label: "This issue contains only one feature request."
|
||||
required: true
|
||||
- label: "I have read and understood the [contribution guidelines](https://github.com/FossifyOrg/File-Manager/blob/master/CONTRIBUTING.md)."
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: feature-description
|
||||
attributes:
|
||||
label: Feature description
|
||||
description: |
|
||||
Explain how you want the app's look or behavior to change to suit your needs.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: why-is-the-feature-requested
|
||||
attributes:
|
||||
label: Why do you want this feature?
|
||||
description: |
|
||||
Describe any problem or limitation you come across while using the app which would be solved by this feature.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: additional-information
|
||||
attributes:
|
||||
label: Additional information
|
||||
description: Any other information you'd like to include, for instance sketches, mockups, pictures of rabbits, etc.
|
||||
@@ -0,0 +1,46 @@
|
||||
version: 2
|
||||
|
||||
registries:
|
||||
maven-google:
|
||||
type: maven-repository
|
||||
url: "https://dl.google.com/dl/android/maven2/"
|
||||
|
||||
maven-central:
|
||||
type: maven-repository
|
||||
url: "https://repo.maven.apache.org/maven2"
|
||||
|
||||
jitpack:
|
||||
type: maven-repository
|
||||
url: "https://jitpack.io"
|
||||
|
||||
updates:
|
||||
- package-ecosystem: "bundler"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
commit-message:
|
||||
prefix: "chore"
|
||||
prefix-development: "chore"
|
||||
include: "scope"
|
||||
|
||||
- package-ecosystem: "gradle"
|
||||
directory: "/"
|
||||
registries:
|
||||
- maven-central
|
||||
- maven-google
|
||||
- jitpack
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
commit-message:
|
||||
prefix: "chore"
|
||||
prefix-development: "chore"
|
||||
include: "scope"
|
||||
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
commit-message:
|
||||
prefix: "chore"
|
||||
prefix-development: "chore"
|
||||
include: "scope"
|
||||
@@ -0,0 +1,14 @@
|
||||
name: Image Minimizer
|
||||
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created, edited]
|
||||
issues:
|
||||
types: [opened, edited]
|
||||
pull_request_target:
|
||||
types: [opened, edited]
|
||||
|
||||
jobs:
|
||||
call-image-minimizer-workflow:
|
||||
uses: FossifyOrg/.github/.github/workflows/image-minimizer.yml@main
|
||||
secrets: inherit
|
||||
@@ -0,0 +1,11 @@
|
||||
name: No Response
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 12 * * *" # Runs daily at noon
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
call-no-response-workflow:
|
||||
uses: FossifyOrg/.github/.github/workflows/no-response.yml@main
|
||||
secrets: inherit
|
||||
@@ -0,0 +1,10 @@
|
||||
name: PR Labeler
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [opened]
|
||||
|
||||
jobs:
|
||||
call-pr-labeler-workflow:
|
||||
uses: FossifyOrg/.github/.github/workflows/pr-labeler.yml@main
|
||||
secrets: inherit
|
||||
@@ -0,0 +1,9 @@
|
||||
name: PR
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
|
||||
jobs:
|
||||
call-pr-workflow:
|
||||
uses: FossifyOrg/.github/.github/workflows/pr.yml@main
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1,10 @@
|
||||
name: Testing build (on PR)
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
types: [ labeled, opened, synchronize, reopened ]
|
||||
|
||||
jobs:
|
||||
call-testing-build-workflow:
|
||||
uses: FossifyOrg/.github/.github/workflows/testing-build.yml@main
|
||||
@@ -0,0 +1,11 @@
|
||||
name: Update lint baselines
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "0 0 1 * *"
|
||||
|
||||
jobs:
|
||||
update-lint-baselines:
|
||||
uses: FossifyOrg/.github/.github/workflows/update-lint-baselines.yml@main
|
||||
secrets: inherit
|
||||
@@ -0,0 +1,15 @@
|
||||
name: Fastlane metadata validation
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- "fastlane/**"
|
||||
pull_request:
|
||||
branches: [main]
|
||||
paths:
|
||||
- "fastlane/**"
|
||||
|
||||
jobs:
|
||||
validate:
|
||||
uses: FossifyOrg/.github/.github/workflows/validate-fastlane-metadata.yml@main
|
||||
+2
-2
@@ -9,5 +9,5 @@
|
||||
keystore.jks
|
||||
keystore.properties
|
||||
fastlane/fastlane.json
|
||||
Gemfile
|
||||
Gemfile.lock
|
||||
fastlane/report.xml
|
||||
.kotlin/
|
||||
+121
-5
@@ -1,7 +1,123 @@
|
||||
Changelog
|
||||
==========
|
||||
# Changelog
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
Version 1.0.0 *(2024-01-07)*
|
||||
----------------------------
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
* Initial release
|
||||
## [Unreleased]
|
||||
|
||||
## [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])
|
||||
|
||||
## [1.3.0] - 2025-09-30
|
||||
### Added
|
||||
- Added a separate "Save as" option in the text editor ([#224])
|
||||
|
||||
### Changed
|
||||
- Save button now overwrites files directly in the text editor ([#224])
|
||||
- Search now ignores accents and diacritics ([#95])
|
||||
- Updated translations
|
||||
|
||||
### Fixed
|
||||
- Fixed folders showing up incorrectly as files in copy/move dialog ([#267])
|
||||
- Fixed error when saving files with unsupported characters ([#250])
|
||||
- Fixed missing permission prompt on initial "Save as" launch ([#85])
|
||||
- Fixed printing text files containing a "#" ([#104])
|
||||
- Fixed files in hidden folders showing up in recent tab ([#217])
|
||||
|
||||
## [1.2.3] - 2025-09-15
|
||||
### Fixed
|
||||
- Fixed folders showing up incorrectly as files in some cases ([#80])
|
||||
|
||||
## [1.2.2] - 2025-09-01
|
||||
### Changed
|
||||
- Updated translations
|
||||
|
||||
### Fixed
|
||||
- Fixed empty storage usage bars on initial load ([#251])
|
||||
|
||||
## [1.2.0] - 2025-07-12
|
||||
### Changed
|
||||
- Updated translations
|
||||
|
||||
### Fixed
|
||||
- File modification time is now preserved when compressing/decompressing files ([#176])
|
||||
|
||||
## [1.1.0] - 2025-05-21
|
||||
### Added
|
||||
- Added SHA-1 and SHA-256 hashes to file properties ([#149])
|
||||
|
||||
### Changed
|
||||
- Replaced checkboxes with switches
|
||||
- Updated translations
|
||||
|
||||
### Removed
|
||||
- Dropped support for Android 7 and older versions
|
||||
|
||||
### Fixed
|
||||
- Files saved via `Save As` option are now named properly ([#37])
|
||||
- Decompressed folders are now named properly ([#120])
|
||||
- Text editor no longer resets on device rotation ([#106])
|
||||
- JSON files can now be edited in-app ([#105])
|
||||
- Fixed accidental rendering of pull-to-refresh indicator ([#27])
|
||||
- Pull-to-refresh setting is now applied as expected ([#136])
|
||||
- Fixed invisible content when using app lock ([#150])
|
||||
|
||||
## [1.0.1] - 2024-03-17
|
||||
### Changed
|
||||
- Folders now use primary/accent color.
|
||||
- Enhanced search performance in the text editor.
|
||||
- Added some translations.
|
||||
|
||||
### Fixed
|
||||
- Addressed unnecessary delays when renaming files.
|
||||
- Fixed unresponsive behavior when viewing contents of a zip file.
|
||||
- Disabled the use of invalid characters such as `/` for batch file renaming.
|
||||
- Fixed invisible sort menu when viewing storage summary.
|
||||
|
||||
## [1.0.0] - 2024-01-07
|
||||
### Added
|
||||
- Initial release
|
||||
|
||||
[#27]: https://github.com/FossifyOrg/File-Manager/issues/27
|
||||
[#37]: https://github.com/FossifyOrg/File-Manager/issues/37
|
||||
[#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
|
||||
[#106]: https://github.com/FossifyOrg/File-Manager/issues/106
|
||||
[#120]: https://github.com/FossifyOrg/File-Manager/issues/120
|
||||
[#136]: https://github.com/FossifyOrg/File-Manager/issues/136
|
||||
[#149]: https://github.com/FossifyOrg/File-Manager/issues/149
|
||||
[#150]: https://github.com/FossifyOrg/File-Manager/issues/150
|
||||
[#176]: https://github.com/FossifyOrg/File-Manager/issues/176
|
||||
[#217]: https://github.com/FossifyOrg/File-Manager/issues/217
|
||||
[#224]: https://github.com/FossifyOrg/File-Manager/issues/224
|
||||
[#250]: https://github.com/FossifyOrg/File-Manager/issues/250
|
||||
[#251]: https://github.com/FossifyOrg/File-Manager/issues/251
|
||||
[#267]: https://github.com/FossifyOrg/File-Manager/issues/267
|
||||
|
||||
[Unreleased]: https://github.com/FossifyOrg/File-Manager/compare/1.4.0...HEAD
|
||||
[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
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
Before you report something, read the reporting rules [here](https://github.com/FossifyOrg/General-Discussion#how-do-i-suggest-an-improvement-ask-a-question-or-report-an-issue) please.
|
||||
|
||||
### Contributing as a developer
|
||||
Some instructions about code style and everything that has to be done to increase the change of your code getting accepted can be found at the [General Discussion](https://github.com/FossifyOrg/General-Discussion#contribution-rules-for-developers) section.
|
||||
Some instructions about code style and everything that has to be done to increase the chance of your code getting accepted can be found at the [General Discussion](https://github.com/FossifyOrg/General-Discussion#contribution-rules-for-developers) section.
|
||||
|
||||
### Contributing as a non developer
|
||||
In case you just want to for example improve a translation, you can find the way of doing it [here](https://github.com/FossifyOrg/General-Discussion#how-can-i-suggest-an-edit-to-a-file).
|
||||
@@ -0,0 +1,4 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
gem "fastlane"
|
||||
gem "fastlane-plugin-fossify", "~> 1.0"
|
||||
+231
@@ -0,0 +1,231 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
CFPropertyList (3.0.7)
|
||||
base64
|
||||
nkf
|
||||
rexml
|
||||
abbrev (0.1.2)
|
||||
addressable (2.8.7)
|
||||
public_suffix (>= 2.0.2, < 7.0)
|
||||
artifactory (3.0.17)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.4.0)
|
||||
aws-partitions (1.1116.0)
|
||||
aws-sdk-core (3.225.2)
|
||||
aws-eventstream (~> 1, >= 1.3.0)
|
||||
aws-partitions (~> 1, >= 1.992.0)
|
||||
aws-sigv4 (~> 1.9)
|
||||
base64
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
logger
|
||||
aws-sdk-kms (1.105.0)
|
||||
aws-sdk-core (~> 3, >= 3.225.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sdk-s3 (1.189.1)
|
||||
aws-sdk-core (~> 3, >= 3.225.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sigv4 (1.12.1)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
base64 (0.3.0)
|
||||
claide (1.1.0)
|
||||
colored (1.2)
|
||||
colored2 (3.1.2)
|
||||
commander (4.6.0)
|
||||
highline (~> 2.0.0)
|
||||
declarative (0.0.20)
|
||||
digest-crc (0.7.0)
|
||||
rake (>= 12.0.0, < 14.0.0)
|
||||
domain_name (0.6.20240107)
|
||||
dotenv (2.8.1)
|
||||
emoji_regex (3.2.3)
|
||||
excon (0.112.0)
|
||||
faraday (1.10.4)
|
||||
faraday-em_http (~> 1.0)
|
||||
faraday-em_synchrony (~> 1.0)
|
||||
faraday-excon (~> 1.1)
|
||||
faraday-httpclient (~> 1.0)
|
||||
faraday-multipart (~> 1.0)
|
||||
faraday-net_http (~> 1.0)
|
||||
faraday-net_http_persistent (~> 1.0)
|
||||
faraday-patron (~> 1.0)
|
||||
faraday-rack (~> 1.0)
|
||||
faraday-retry (~> 1.0)
|
||||
ruby2_keywords (>= 0.0.4)
|
||||
faraday-cookie_jar (0.0.7)
|
||||
faraday (>= 0.8.0)
|
||||
http-cookie (~> 1.0.0)
|
||||
faraday-em_http (1.0.0)
|
||||
faraday-em_synchrony (1.0.0)
|
||||
faraday-excon (1.1.0)
|
||||
faraday-httpclient (1.0.1)
|
||||
faraday-multipart (1.1.0)
|
||||
multipart-post (~> 2.0)
|
||||
faraday-net_http (1.0.2)
|
||||
faraday-net_http_persistent (1.2.0)
|
||||
faraday-patron (1.0.0)
|
||||
faraday-rack (1.0.0)
|
||||
faraday-retry (1.0.3)
|
||||
faraday_middleware (1.2.1)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.4.0)
|
||||
fastlane (2.228.0)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
aws-sdk-s3 (~> 1.0)
|
||||
babosa (>= 1.0.3, < 2.0.0)
|
||||
bundler (>= 1.12.0, < 3.0.0)
|
||||
colored (~> 1.2)
|
||||
commander (~> 4.6)
|
||||
dotenv (>= 2.1.1, < 3.0.0)
|
||||
emoji_regex (>= 0.1, < 4.0)
|
||||
excon (>= 0.71.0, < 1.0.0)
|
||||
faraday (~> 1.0)
|
||||
faraday-cookie_jar (~> 0.0.6)
|
||||
faraday_middleware (~> 1.0)
|
||||
fastimage (>= 2.1.0, < 3.0.0)
|
||||
fastlane-sirp (>= 1.0.0)
|
||||
gh_inspector (>= 1.1.2, < 2.0.0)
|
||||
google-apis-androidpublisher_v3 (~> 0.3)
|
||||
google-apis-playcustomapp_v1 (~> 0.1)
|
||||
google-cloud-env (>= 1.6.0, < 2.0.0)
|
||||
google-cloud-storage (~> 1.31)
|
||||
highline (~> 2.0)
|
||||
http-cookie (~> 1.0.5)
|
||||
json (< 3.0.0)
|
||||
jwt (>= 2.1.0, < 3)
|
||||
mini_magick (>= 4.9.4, < 5.0.0)
|
||||
multipart-post (>= 2.0.0, < 3.0.0)
|
||||
naturally (~> 2.2)
|
||||
optparse (>= 0.1.1, < 1.0.0)
|
||||
plist (>= 3.1.0, < 4.0.0)
|
||||
rubyzip (>= 2.0.0, < 3.0.0)
|
||||
security (= 0.1.5)
|
||||
simctl (~> 1.6.3)
|
||||
terminal-notifier (>= 2.0.0, < 3.0.0)
|
||||
terminal-table (~> 3)
|
||||
tty-screen (>= 0.6.3, < 1.0.0)
|
||||
tty-spinner (>= 0.8.0, < 1.0.0)
|
||||
word_wrap (~> 1.0.0)
|
||||
xcodeproj (>= 1.13.0, < 2.0.0)
|
||||
xcpretty (~> 0.4.1)
|
||||
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
|
||||
fastlane-plugin-fossify (1.0.2)
|
||||
abbrev
|
||||
fastlane-sirp (1.0.0)
|
||||
sysrandom (~> 1.0)
|
||||
gh_inspector (1.1.3)
|
||||
google-apis-androidpublisher_v3 (0.54.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-core (0.11.3)
|
||||
addressable (~> 2.5, >= 2.5.1)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
httpclient (>= 2.8.1, < 3.a)
|
||||
mini_mime (~> 1.0)
|
||||
representable (~> 3.0)
|
||||
retriable (>= 2.0, < 4.a)
|
||||
rexml
|
||||
google-apis-iamcredentials_v1 (0.17.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-playcustomapp_v1 (0.13.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-storage_v1 (0.31.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-cloud-core (1.8.0)
|
||||
google-cloud-env (>= 1.0, < 3.a)
|
||||
google-cloud-errors (~> 1.0)
|
||||
google-cloud-env (1.6.0)
|
||||
faraday (>= 0.17.3, < 3.0)
|
||||
google-cloud-errors (1.5.0)
|
||||
google-cloud-storage (1.47.0)
|
||||
addressable (~> 2.8)
|
||||
digest-crc (~> 0.4)
|
||||
google-apis-iamcredentials_v1 (~> 0.1)
|
||||
google-apis-storage_v1 (~> 0.31.0)
|
||||
google-cloud-core (~> 1.6)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
mini_mime (~> 1.0)
|
||||
googleauth (1.8.1)
|
||||
faraday (>= 0.17.3, < 3.a)
|
||||
jwt (>= 1.4, < 3.0)
|
||||
multi_json (~> 1.11)
|
||||
os (>= 0.9, < 2.0)
|
||||
signet (>= 0.16, < 2.a)
|
||||
highline (2.0.3)
|
||||
http-cookie (1.0.8)
|
||||
domain_name (~> 0.5)
|
||||
httpclient (2.9.0)
|
||||
mutex_m
|
||||
jmespath (1.6.2)
|
||||
json (2.12.2)
|
||||
jwt (2.10.1)
|
||||
base64
|
||||
logger (1.7.0)
|
||||
mini_magick (4.13.2)
|
||||
mini_mime (1.1.5)
|
||||
multi_json (1.15.0)
|
||||
multipart-post (2.4.1)
|
||||
mutex_m (0.3.0)
|
||||
nanaimo (0.4.0)
|
||||
naturally (2.3.0)
|
||||
nkf (0.2.0)
|
||||
optparse (0.6.0)
|
||||
os (1.1.4)
|
||||
plist (3.7.2)
|
||||
public_suffix (6.0.2)
|
||||
rake (13.3.0)
|
||||
representable (3.2.0)
|
||||
declarative (< 0.1.0)
|
||||
trailblazer-option (>= 0.1.1, < 0.2.0)
|
||||
uber (< 0.2.0)
|
||||
retriable (3.1.2)
|
||||
rexml (3.4.2)
|
||||
rouge (3.28.0)
|
||||
ruby2_keywords (0.0.5)
|
||||
rubyzip (2.4.1)
|
||||
security (0.1.5)
|
||||
signet (0.20.0)
|
||||
addressable (~> 2.8)
|
||||
faraday (>= 0.17.5, < 3.a)
|
||||
jwt (>= 1.5, < 3.0)
|
||||
multi_json (~> 1.10)
|
||||
simctl (1.6.10)
|
||||
CFPropertyList
|
||||
naturally
|
||||
sysrandom (1.0.5)
|
||||
terminal-notifier (2.0.0)
|
||||
terminal-table (3.0.2)
|
||||
unicode-display_width (>= 1.1.1, < 3)
|
||||
trailblazer-option (0.1.2)
|
||||
tty-cursor (0.7.1)
|
||||
tty-screen (0.8.2)
|
||||
tty-spinner (0.9.3)
|
||||
tty-cursor (~> 0.7)
|
||||
uber (0.1.0)
|
||||
unicode-display_width (2.6.0)
|
||||
word_wrap (1.0.0)
|
||||
xcodeproj (1.27.0)
|
||||
CFPropertyList (>= 2.3.3, < 4.0)
|
||||
atomos (~> 0.1.3)
|
||||
claide (>= 1.0.2, < 2.0)
|
||||
colored2 (~> 3.1)
|
||||
nanaimo (~> 0.4.0)
|
||||
rexml (>= 3.3.6, < 4.0)
|
||||
xcpretty (0.4.1)
|
||||
rouge (~> 3.28.0)
|
||||
xcpretty-travis-formatter (1.0.1)
|
||||
xcpretty (~> 0.2, >= 0.0.7)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
x86_64-linux
|
||||
|
||||
DEPENDENCIES
|
||||
fastlane
|
||||
fastlane-plugin-fossify (~> 1.0)
|
||||
|
||||
BUNDLED WITH
|
||||
2.6.8
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
<img alt="Logo" src="graphics/icon.webp" width="120" />
|
||||
|
||||
<a href='https://play.google.com/store/apps/details?id=org.fossify.filemanager'><img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png' height=80/></a> <a href="https://f-droid.org/packages/org.fossify.filemanager/"><img src="https://fdroid.gitlab.io/artwork/badge/get-it-on-en.svg" alt="Get it on F-Droid" height=80/></a> <a href="https://apt.izzysoft.de/fdroid/index/apk/org.fossify.filemanager"><img src="https://gitlab.com/IzzyOnDroid/repo/-/raw/master/assets/IzzyOnDroid.png" alt="Get it on IzzyOnDroid" height=80/></a>
|
||||
|
||||
Tired of file managers that slow you down and invade your privacy? Unlock a lightning-fast, secure, and completely customizable experience with Fossify File Manager. ⚡
|
||||
|
||||
**🚀 DOMINATE YOUR DIGITAL WORLD WITH BLAZING-FAST NAVIGATION:**
|
||||
@@ -28,12 +30,12 @@ Tired of file managers that slow you down and invade your privacy? Unlock a ligh
|
||||
|
||||
Ditch the bloated, privacy-invading file managers and experience true freedom with Fossify File Manager. Download now and take back control of your digital life!
|
||||
|
||||
Explore more apps by Fossify: https://www.fossify.org
|
||||
Source Code: https://www.github.com/FossifyOrg
|
||||
Join the community on Reddit: https://www.reddit.com/r/Fossify
|
||||
Connect on Telegram: https://t.me/Fossify
|
||||
➡️ Explore more Fossify apps: https://www.fossify.org<br>
|
||||
➡️ Open-Source Code: https://www.github.com/FossifyOrg<br>
|
||||
➡️ Join the community on Reddit: https://www.reddit.com/r/Fossify<br>
|
||||
➡️ Connect on Telegram: https://t.me/Fossify
|
||||
|
||||
<div style="display:flex;">
|
||||
<div align="center">
|
||||
<img alt="App image" src="fastlane/metadata/android/en-US/images/phoneScreenshots/1_en-US.png" width="30%">
|
||||
<img alt="App image" src="fastlane/metadata/android/en-US/images/phoneScreenshots/3_en-US.png" width="30%">
|
||||
<img alt="App image" src="fastlane/metadata/android/en-US/images/phoneScreenshots/4_en-US.png" width="30%">
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
/build
|
||||
/foss/
|
||||
/gplay/
|
||||
+56
-11
@@ -1,4 +1,4 @@
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName
|
||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
import org.jetbrains.kotlin.konan.properties.Properties
|
||||
import java.io.FileInputStream
|
||||
@@ -6,6 +6,7 @@ import java.io.FileInputStream
|
||||
plugins {
|
||||
alias(libs.plugins.android)
|
||||
alias(libs.plugins.kotlinAndroid)
|
||||
alias(libs.plugins.detekt)
|
||||
}
|
||||
|
||||
val keystorePropertiesFile: File = rootProject.file("keystore.properties")
|
||||
@@ -14,18 +15,25 @@ if (keystorePropertiesFile.exists()) {
|
||||
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
|
||||
}
|
||||
|
||||
fun hasSigningVars(): Boolean {
|
||||
return providers.environmentVariable("SIGNING_KEY_ALIAS").orNull != null
|
||||
&& providers.environmentVariable("SIGNING_KEY_PASSWORD").orNull != null
|
||||
&& providers.environmentVariable("SIGNING_STORE_FILE").orNull != null
|
||||
&& providers.environmentVariable("SIGNING_STORE_PASSWORD").orNull != null
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdk = project.libs.versions.app.build.compileSDKVersion.get().toInt()
|
||||
|
||||
defaultConfig {
|
||||
applicationId = libs.versions.app.version.appId.get()
|
||||
applicationId = project.property("APP_ID").toString()
|
||||
minSdk = project.libs.versions.app.build.minimumSDK.get().toInt()
|
||||
targetSdk = project.libs.versions.app.build.targetSDK.get().toInt()
|
||||
versionName = project.libs.versions.app.version.versionName.get()
|
||||
versionCode = project.libs.versions.app.version.versionCode.get().toInt()
|
||||
archivesName.set("file-manager-$versionCode")
|
||||
versionName = project.property("VERSION_NAME").toString()
|
||||
versionCode = project.property("VERSION_CODE").toString().toInt()
|
||||
multiDexEnabled = true
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
setProperty("archivesBaseName", "file-manager-$versionCode")
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
@@ -36,6 +44,15 @@ android {
|
||||
storeFile = file(keystoreProperties.getProperty("storeFile"))
|
||||
storePassword = keystoreProperties.getProperty("storePassword")
|
||||
}
|
||||
} else if (hasSigningVars()) {
|
||||
register("release") {
|
||||
keyAlias = providers.environmentVariable("SIGNING_KEY_ALIAS").get()
|
||||
keyPassword = providers.environmentVariable("SIGNING_KEY_PASSWORD").get()
|
||||
storeFile = file(providers.environmentVariable("SIGNING_STORE_FILE").get())
|
||||
storePassword = providers.environmentVariable("SIGNING_STORE_PASSWORD").get()
|
||||
}
|
||||
} else {
|
||||
logger.warn("Warning: No signing config found. Build will be unsigned.")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,7 +71,7 @@ android {
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-rules.pro"
|
||||
)
|
||||
if (keystorePropertiesFile.exists()) {
|
||||
if (keystorePropertiesFile.exists() || hasSigningVars()) {
|
||||
signingConfig = signingConfigs.getByName("release")
|
||||
}
|
||||
}
|
||||
@@ -64,7 +81,7 @@ android {
|
||||
productFlavors {
|
||||
register("core")
|
||||
register("foss")
|
||||
register("prepaid")
|
||||
register("gplay")
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
@@ -77,16 +94,43 @@ android {
|
||||
targetCompatibility = currentJavaVersionFromLibs
|
||||
}
|
||||
|
||||
tasks.withType<KotlinCompile> {
|
||||
kotlinOptions.jvmTarget = project.libs.versions.app.build.kotlinJVMTarget.get()
|
||||
dependenciesInfo {
|
||||
includeInApk = false
|
||||
}
|
||||
|
||||
namespace = libs.versions.app.version.appId.get()
|
||||
androidResources {
|
||||
@Suppress("UnstableApiUsage")
|
||||
generateLocaleConfig = true
|
||||
}
|
||||
|
||||
tasks.withType<KotlinCompile> {
|
||||
compilerOptions.jvmTarget.set(
|
||||
JvmTarget.fromTarget(project.libs.versions.app.build.kotlinJVMTarget.get())
|
||||
)
|
||||
}
|
||||
|
||||
namespace = project.property("APP_ID").toString()
|
||||
|
||||
lint {
|
||||
checkReleaseBuilds = false
|
||||
abortOnError = false
|
||||
abortOnError = true
|
||||
warningsAsErrors = false
|
||||
baseline = file("lint-baseline.xml")
|
||||
lintConfig = rootProject.file("lint.xml")
|
||||
}
|
||||
|
||||
bundle {
|
||||
language {
|
||||
enableSplit = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
detekt {
|
||||
baseline = file("detekt-baseline.xml")
|
||||
config.setFrom("$rootDir/detekt.yml")
|
||||
buildUponDefaultConfig = true
|
||||
allRules = false
|
||||
}
|
||||
|
||||
dependencies {
|
||||
@@ -98,4 +142,5 @@ dependencies {
|
||||
implementation(libs.gestureviews)
|
||||
implementation(libs.autofittextview)
|
||||
implementation(libs.zip4j)
|
||||
detektPlugins(libs.compose.detekt)
|
||||
}
|
||||
@@ -0,0 +1,160 @@
|
||||
<?xml version="1.0" ?>
|
||||
<SmellBaseline>
|
||||
<ManuallySuppressedIssues/>
|
||||
<CurrentIssues>
|
||||
<ID>ComplexCondition:Activity.kt$(hide && filename.startsWith('.')) || (!hide && !filename.startsWith('.'))</ID>
|
||||
<ID>ComplexCondition:ItemsAdapter.kt$ItemsAdapter$activity.getDoesFilePathExist(source) && activity.getIsPathDirectory(source) && sourceFile.list()?.isEmpty() == true && sourceFile.getProperSize(true) == 0L && sourceFile.getFileCount(true) == 0</ID>
|
||||
<ID>ComplexCondition:ItemsAdapter.kt$ItemsAdapter$hasOTGConnected && itemToLoad is String && activity.isPathOnOTG(itemToLoad) && baseConfig.OTGTreeUri.isNotEmpty() && baseConfig.OTGPartition.isNotEmpty()</ID>
|
||||
<ID>ComplexCondition:MainActivity.kt$MainActivity$!config.wasOTGHandled && hasPermission(PERMISSION_WRITE_STORAGE) && hasOTGConnected() && config.OTGPath.isEmpty()</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>CyclomaticComplexMethod:DecompressActivity.kt$DecompressActivity$private fun decompressTo(destination: String)</ID>
|
||||
<ID>CyclomaticComplexMethod:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths( sourcePaths: List<String>, targetPath: String, password: String? = null ): Boolean</ID>
|
||||
<ID>CyclomaticComplexMethod:ItemsAdapter.kt$ItemsAdapter$override fun actionItemPressed(id: Int)</ID>
|
||||
<ID>CyclomaticComplexMethod:MainActivity.kt$MainActivity$private fun setupOptionsMenu()</ID>
|
||||
<ID>CyclomaticComplexMethod:MimeTypesActivity.kt$MimeTypesActivity$private fun getProperFileDirItems(callback: (ArrayList<FileDirItem>) -> Unit)</ID>
|
||||
<ID>CyclomaticComplexMethod:StorageFragment.kt$StorageFragment$private fun getSizesByMimeType(volumeName: String): HashMap<String, Long></ID>
|
||||
<ID>EmptyCatchBlock:MimeTypesActivity.kt$MimeTypesActivity${ }</ID>
|
||||
<ID>EmptyCatchBlock:StorageFragment.kt$StorageFragment${ }</ID>
|
||||
<ID>EmptyFunctionBlock:DecompressItemsAdapter.kt$DecompressItemsAdapter${}</ID>
|
||||
<ID>EmptyFunctionBlock:MainActivity.kt$MainActivity.<no name provided>${}</ID>
|
||||
<ID>EmptyFunctionBlock:ManageFavoritesAdapter.kt$ManageFavoritesAdapter${}</ID>
|
||||
<ID>EmptyFunctionBlock:MimeTypesActivity.kt$MimeTypesActivity${}</ID>
|
||||
<ID>EmptyFunctionBlock:StorageFragment.kt$StorageFragment${}</ID>
|
||||
<ID>LargeClass:ItemsAdapter.kt$ItemsAdapter : MyRecyclerViewAdapterOnPopupTextUpdate</ID>
|
||||
<ID>LoopWithTooManyJumpStatements:DecompressActivity.kt$DecompressActivity$while</ID>
|
||||
<ID>LoopWithTooManyJumpStatements:StorageFragment.kt$StorageFragment$do</ID>
|
||||
<ID>MagicNumber:Config.kt$Config$1.2f</ID>
|
||||
<ID>MagicNumber:Config.kt$Config$4</ID>
|
||||
<ID>MagicNumber:Config.kt$Config$8</ID>
|
||||
<ID>MagicNumber:DecompressActivity.kt$DecompressActivity$1024</ID>
|
||||
<ID>MagicNumber:DecompressItemsAdapter.kt$DecompressItemsAdapter$0.8f</ID>
|
||||
<ID>MagicNumber:DecompressItemsAdapter.kt$DecompressItemsAdapter$180</ID>
|
||||
<ID>MagicNumber:ItemsAdapter.kt$ItemsAdapter$0.8f</ID>
|
||||
<ID>MagicNumber:ItemsAdapter.kt$ItemsAdapter$10</ID>
|
||||
<ID>MagicNumber:ItemsAdapter.kt$ItemsAdapter$180</ID>
|
||||
<ID>MagicNumber:ItemsAdapter.kt$ItemsAdapter$4</ID>
|
||||
<ID>MagicNumber:ItemsFragment.kt$ItemsFragment$3</ID>
|
||||
<ID>MagicNumber:ReadTextActivity.kt$ReadTextActivity$250</ID>
|
||||
<ID>MagicNumber:ReadTextActivity.kt$ReadTextActivity$50</ID>
|
||||
<ID>MagicNumber:RecentsFragment.kt$RecentsFragment$3</ID>
|
||||
<ID>MagicNumber:RecentsFragment.kt$RecentsFragment$50</ID>
|
||||
<ID>MagicNumber:RootHelpers.kt$RootHelpers.<no name provided>$5</ID>
|
||||
<ID>MagicNumber:StorageFragment.kt$StorageFragment$100000</ID>
|
||||
<ID>MagicNumber:StorageFragment.kt$StorageFragment$2000</ID>
|
||||
<ID>MagicNumber:StorageFragment.kt$StorageFragment$3</ID>
|
||||
<ID>MagicNumber:StorageFragment.kt$StorageFragment$4096L</ID>
|
||||
<ID>MaxLineLength:Activity.kt$fun</ID>
|
||||
<ID>MaxLineLength:ChangeViewTypeDialog.kt$ChangeViewTypeDialog$class</ID>
|
||||
<ID>MaxLineLength:ChangeViewTypeDialog.kt$ChangeViewTypeDialog$val</ID>
|
||||
<ID>MaxLineLength:CompressAsDialog.kt$CompressAsDialog$FilePickerDialog</ID>
|
||||
<ID>MaxLineLength:CompressAsDialog.kt$CompressAsDialog$class</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:Context.kt$fun Context.isPathOnRoot(path: String)</ID>
|
||||
<ID>MaxLineLength:DecompressItemsAdapter.kt$DecompressItemsAdapter$class</ID>
|
||||
<ID>MaxLineLength:DecompressItemsAdapter.kt$DecompressItemsAdapter$val drawable = fileDrawables.getOrElse(fileName.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable })</ID>
|
||||
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$FilePickerDialog</ID>
|
||||
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$ManageFavoritesAdapter(this@FavoritesActivity, favorites, this@FavoritesActivity, manageFavoritesList) { }</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$}</ID>
|
||||
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$ItemsAdapter</ID>
|
||||
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$class</ID>
|
||||
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$context</ID>
|
||||
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$if</ID>
|
||||
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$private</ID>
|
||||
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$val sectionTitle = ListItem(it.path, context!!.humanizePath(it.path), true, 0, 0, 0, true, false)</ID>
|
||||
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$val sectionTitle = ListItem(parent, context!!.humanizePath(parent), false, 0, 0, 0, true, false)</ID>
|
||||
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment.<no name provided>$return</ID>
|
||||
<ID>MaxLineLength:ListItem.kt$ListItem$val mPath: String</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$// used at apps that have no file access at all, but need to work with files. For example Simple Calendar uses this at exporting events into a file</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$findItem(R.id.add_favorite).isVisible = currentFragment is ItemsFragment && !favorites.contains(currentFragment.currentPath)</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$findItem(R.id.column_count).isVisible = currentViewType == VIEW_TYPE_GRID && currentFragment !is StorageFragment</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$findItem(R.id.go_home).isVisible = currentFragment is ItemsFragment && currentFragment.currentPath != config.homeFolder</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$findItem(R.id.remove_favorite).isVisible = currentFragment is ItemsFragment && favorites.contains(currentFragment.currentPath)</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$findItem(R.id.set_as_home).isVisible = currentFragment is ItemsFragment && currentFragment.currentPath != config.homeFolder</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$findItem(R.id.stop_showing_hidden).isVisible = config.temporarilyShowHidden && currentFragment !is StorageFragment</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$findItem(R.id.temporarily_show_hidden).isVisible = !config.shouldShowHidden() && currentFragment !is StorageFragment</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$findItem(R.id.toggle_filename).isVisible = currentViewType == VIEW_TYPE_GRID && currentFragment !is StorageFragment</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$getStorageDirectories().firstOrNull { it.trimEnd('/') != internalStoragePath && it.trimEnd('/') != sdCardPath }</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$if</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$val licenses = LICENSE_GLIDE or LICENSE_PATTERN or LICENSE_REPRINT or LICENSE_GESTURE_VIEWS or LICENSE_AUTOFITTEXTVIEW or LICENSE_ZIP4J</ID>
|
||||
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$!extraAudioMimeTypes.contains(fullMimetype)</ID>
|
||||
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$if</ID>
|
||||
<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$val fabIcon = context.resources.getColoredDrawableWithColor(iconId, context.getProperPrimaryColor().getContrastColor())</ID>
|
||||
<ID>MaxLineLength:ReadTextActivity.kt$ReadTextActivity$if</ID>
|
||||
<ID>MaxLineLength:ReadTextActivity.kt$ReadTextActivity$private</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$class</ID>
|
||||
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$if</ID>
|
||||
<ID>MaxLineLength:RootHelpers.kt$RootHelpers$fun</ID>
|
||||
<ID>MaxLineLength:RootHelpers.kt$RootHelpers$private</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:SettingsActivity.kt$SettingsActivity$settingsUseEnglishHolder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") && !isTiramisuPlus())</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 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>NestedBlockDepth:DecompressActivity.kt$DecompressActivity$private fun decompressTo(destination: String)</ID>
|
||||
<ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths( sourcePaths: List<String>, targetPath: String, password: String? = null ): Boolean</ID>
|
||||
<ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$private fun decompressPaths( paths: List<String>, conflictResolutions: LinkedHashMap<String, Int>, callback: (success: Boolean) -> Unit )</ID>
|
||||
<ID>NestedBlockDepth:ItemsAdapter.kt$ItemsAdapter$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:ItemsFragment.kt$ItemsFragment$private fun getRegularItemsOf(path: String, callback: (originalPath: String, items: ArrayList<ListItem>) -> Unit)</ID>
|
||||
<ID>NestedBlockDepth:ItemsFragment.kt$ItemsFragment$private fun searchFiles(text: String, path: String): ArrayList<ListItem></ID>
|
||||
<ID>NestedBlockDepth:RecentsFragment.kt$RecentsFragment$private fun getRecents(callback: (recents: ArrayList<ListItem>) -> Unit)</ID>
|
||||
<ID>NestedBlockDepth:StorageFragment.kt$StorageFragment$override fun setupFragment(activity: SimpleActivity)</ID>
|
||||
<ID>NestedBlockDepth:StorageFragment.kt$StorageFragment$private fun getAllFiles(volumeName: String): ArrayList<FileDirItem></ID>
|
||||
<ID>ReturnCount:MainActivity.kt$MainActivity$override fun onBackPressedCompat(): Boolean</ID>
|
||||
<ID>SwallowedException:ItemsAdapter.kt$ItemsAdapter$e: Exception</ID>
|
||||
<ID>SwallowedException:MimeTypesActivity.kt$MimeTypesActivity$e: Exception</ID>
|
||||
<ID>SwallowedException:StorageFragment.kt$StorageFragment$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:DecompressActivity.kt$DecompressActivity$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:ItemsAdapter.kt$ItemsAdapter$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:ItemsAdapter.kt$ItemsAdapter$exception: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:MimeTypesActivity.kt$MimeTypesActivity$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:ReadTextActivity.kt$ReadTextActivity$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:RecentsFragment.kt$RecentsFragment$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:RootHelpers.kt$RootHelpers$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:RootHelpers.kt$RootHelpers$exception: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:SaveAsActivity.kt$SaveAsActivity$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:StorageFragment.kt$StorageFragment$e: Exception</ID>
|
||||
<ID>TooManyFunctions:DecompressActivity.kt$DecompressActivity : SimpleActivity</ID>
|
||||
<ID>TooManyFunctions:DecompressItemsAdapter.kt$DecompressItemsAdapter : MyRecyclerViewAdapter</ID>
|
||||
<ID>TooManyFunctions:ItemsAdapter.kt$ItemsAdapter : MyRecyclerViewAdapterOnPopupTextUpdate</ID>
|
||||
<ID>TooManyFunctions:ItemsFragment.kt$ItemsFragment : MyViewPagerFragmentItemOperationsListenerBreadcrumbsListener</ID>
|
||||
<ID>TooManyFunctions:MainActivity.kt$MainActivity : SimpleActivity</ID>
|
||||
<ID>TooManyFunctions:ManageFavoritesAdapter.kt$ManageFavoritesAdapter : MyRecyclerViewAdapter</ID>
|
||||
<ID>TooManyFunctions:MimeTypesActivity.kt$MimeTypesActivity : SimpleActivityItemOperationsListener</ID>
|
||||
<ID>TooManyFunctions:ReadTextActivity.kt$ReadTextActivity : SimpleActivity</ID>
|
||||
<ID>TooManyFunctions:RecentsFragment.kt$RecentsFragment : MyViewPagerFragmentItemOperationsListener</ID>
|
||||
<ID>TooManyFunctions:RootHelpers.kt$RootHelpers</ID>
|
||||
<ID>TooManyFunctions:SettingsActivity.kt$SettingsActivity : SimpleActivity</ID>
|
||||
<ID>TooManyFunctions:StorageFragment.kt$StorageFragment : MyViewPagerFragmentItemOperationsListener</ID>
|
||||
<ID>VariableNaming:ItemsAdapter.kt$ItemsAdapter$val SAFPath = getFirstSelectedItemPath()</ID>
|
||||
<ID>VariableNaming:RecentsFragment.kt$RecentsFragment$private val RECENTS_LIMIT = 50</ID>
|
||||
<ID>VariableNaming:StorageFragment.kt$StorageFragment$private val SIZE_DIVIDER = 100000</ID>
|
||||
<ID>WildcardImport:ChangeSortingDialog.kt$import org.fossify.commons.helpers.*</ID>
|
||||
<ID>WildcardImport:CompressAsDialog.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:CreateNewItemDialog.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:InsertFilenameDialog.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:ManageFavoritesAdapter.kt$import android.view.*</ID>
|
||||
<ID>WildcardImport:MimeTypesActivity.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:MimeTypesActivity.kt$import org.fossify.filemanager.helpers.*</ID>
|
||||
<ID>WildcardImport:MyViewPagerFragment.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:ReadTextActivity.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:SaveAsActivity.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:SaveAsDialog.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:SettingsActivity.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:SettingsActivity.kt$import org.fossify.commons.helpers.*</ID>
|
||||
</CurrentIssues>
|
||||
</SmellBaseline>
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1,6 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<bool name="show_donate_in_about">false</bool>
|
||||
<bool name="hide_google_relations">true</bool>
|
||||
<bool name="hide_all_external_links">true</bool>
|
||||
<bool name="hide_google_relations">false</bool>
|
||||
</resources>
|
||||
@@ -22,7 +22,6 @@
|
||||
android:appCategory="productivity"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_launcher_name"
|
||||
android:localeConfig="@xml/locale_config"
|
||||
android:requestLegacyExternalStorage="true"
|
||||
android:roundIcon="@mipmap/ic_launcher"
|
||||
android:theme="@style/AppTheme">
|
||||
@@ -97,6 +96,7 @@
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="text/*" />
|
||||
<data android:mimeType="application/json" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package org.fossify.filemanager
|
||||
|
||||
import android.app.Application
|
||||
import com.github.ajalt.reprint.core.Reprint
|
||||
import org.fossify.commons.extensions.checkUseEnglish
|
||||
import org.fossify.commons.FossifyApp
|
||||
|
||||
class App : FossifyApp() {
|
||||
override val isAppLockFeatureAvailable = true
|
||||
|
||||
class App : Application() {
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
checkUseEnglish()
|
||||
Reprint.initialize(this)
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package org.fossify.filemanager.activities
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import net.lingala.zip4j.exception.ZipException
|
||||
@@ -9,14 +8,25 @@ import net.lingala.zip4j.io.inputstream.ZipInputStream
|
||||
import net.lingala.zip4j.model.LocalFileHeader
|
||||
import org.fossify.commons.dialogs.EnterPasswordDialog
|
||||
import org.fossify.commons.dialogs.FilePickerDialog
|
||||
import org.fossify.commons.extensions.*
|
||||
import org.fossify.commons.extensions.createDirectorySync
|
||||
import org.fossify.commons.extensions.getDoesFilePathExist
|
||||
import org.fossify.commons.extensions.getFileOutputStreamSync
|
||||
import org.fossify.commons.extensions.getFilenameFromPath
|
||||
import org.fossify.commons.extensions.getMimeType
|
||||
import org.fossify.commons.extensions.getParentPath
|
||||
import org.fossify.commons.extensions.getRealPathFromURI
|
||||
import org.fossify.commons.extensions.internalStoragePath
|
||||
import org.fossify.commons.extensions.isGone
|
||||
import org.fossify.commons.extensions.showErrorToast
|
||||
import org.fossify.commons.extensions.toast
|
||||
import org.fossify.commons.extensions.viewBinding
|
||||
import org.fossify.commons.helpers.NavigationIcon
|
||||
import org.fossify.commons.helpers.ensureBackgroundThread
|
||||
import org.fossify.commons.helpers.isOreoPlus
|
||||
import org.fossify.filemanager.R
|
||||
import org.fossify.filemanager.adapters.DecompressItemsAdapter
|
||||
import org.fossify.filemanager.databinding.ActivityDecompressBinding
|
||||
import org.fossify.filemanager.extensions.config
|
||||
import org.fossify.filemanager.extensions.setLastModified
|
||||
import org.fossify.filemanager.models.ListItem
|
||||
import java.io.BufferedInputStream
|
||||
import java.io.File
|
||||
@@ -32,15 +42,15 @@ class DecompressActivity : SimpleActivity() {
|
||||
private var uri: Uri? = null
|
||||
private var password: String? = null
|
||||
private var passwordDialog: EnterPasswordDialog? = null
|
||||
private var filename = ""
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(binding.root)
|
||||
setupOptionsMenu()
|
||||
binding.apply {
|
||||
updateMaterialActivityViews(decompressCoordinator, decompressList, useTransparentNavigation = true, useTopSearchMenu = false)
|
||||
setupMaterialScrollListener(decompressList, decompressToolbar)
|
||||
setupEdgeToEdge(padBottomSystem = listOf(decompressList))
|
||||
setupMaterialScrollListener(binding.decompressList, binding.decompressAppbar)
|
||||
}
|
||||
|
||||
uri = intent.data
|
||||
@@ -52,13 +62,14 @@ class DecompressActivity : SimpleActivity() {
|
||||
password = savedInstanceState?.getString(PASSWORD, null)
|
||||
|
||||
val realPath = getRealPathFromURI(uri!!)
|
||||
binding.decompressToolbar.title = realPath?.getFilenameFromPath() ?: Uri.decode(uri.toString().getFilenameFromPath())
|
||||
filename = realPath?.getFilenameFromPath() ?: Uri.decode(uri.toString().getFilenameFromPath())
|
||||
binding.decompressToolbar.title = filename
|
||||
setupFilesList()
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setupToolbar(binding.decompressToolbar, NavigationIcon.Arrow)
|
||||
setupTopAppBar(binding.decompressAppbar, NavigationIcon.Arrow)
|
||||
}
|
||||
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
@@ -76,17 +87,20 @@ class DecompressActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupFilesList() {
|
||||
fillAllListItems(uri!!)
|
||||
updateCurrentPath("")
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
if (currentPath.isEmpty()) {
|
||||
super.onBackPressed()
|
||||
override fun onBackPressedCompat(): Boolean {
|
||||
return if (currentPath.isEmpty()) {
|
||||
false
|
||||
} else {
|
||||
val newPath = if (currentPath.contains("/")) currentPath.getParentPath() else ""
|
||||
updateCurrentPath(newPath)
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupFilesList() {
|
||||
allFiles.clear()
|
||||
fillAllListItems(uri!!) {
|
||||
updateCurrentPath("")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,6 +108,14 @@ class DecompressActivity : SimpleActivity() {
|
||||
currentPath = path
|
||||
try {
|
||||
val listItems = getFolderItems(currentPath)
|
||||
updateAdapter(listItems = listItems)
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateAdapter(listItems: MutableList<ListItem>) {
|
||||
runOnUiThread {
|
||||
DecompressItemsAdapter(this, listItems, binding.decompressList) {
|
||||
if ((it as ListItem).isDirectory) {
|
||||
updateCurrentPath(it.path)
|
||||
@@ -101,14 +123,20 @@ class DecompressActivity : SimpleActivity() {
|
||||
}.apply {
|
||||
binding.decompressList.adapter = this
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
}
|
||||
}
|
||||
|
||||
private fun decompressFiles() {
|
||||
val defaultFolder = getRealPathFromURI(uri!!) ?: internalStoragePath
|
||||
FilePickerDialog(this, defaultFolder, false, config.showHidden, true, true, showFavoritesButton = true) { destination ->
|
||||
FilePickerDialog(
|
||||
activity = this,
|
||||
currPath = defaultFolder,
|
||||
pickFile = false,
|
||||
showHidden = config.showHidden,
|
||||
showFAB = true,
|
||||
canAddShowHiddenButton = true,
|
||||
showFavoritesButton = true
|
||||
) { destination ->
|
||||
handleSAFDialog(destination) {
|
||||
if (it) {
|
||||
ensureBackgroundThread {
|
||||
@@ -131,7 +159,7 @@ class DecompressActivity : SimpleActivity() {
|
||||
zipInputStream.use {
|
||||
while (true) {
|
||||
val entry = zipInputStream.nextEntry ?: break
|
||||
val filename = title.toString().substringBeforeLast(".")
|
||||
val filename = filename.substringBeforeLast(".")
|
||||
val parent = "$destination/$filename"
|
||||
val newPath = "$parent/${entry.fileName.trimEnd('/')}"
|
||||
|
||||
@@ -145,7 +173,9 @@ class DecompressActivity : SimpleActivity() {
|
||||
continue
|
||||
}
|
||||
|
||||
val isVulnerableForZipPathTraversal = !File(newPath).canonicalPath.startsWith(parent)
|
||||
val outputFile = File(newPath)
|
||||
|
||||
val isVulnerableForZipPathTraversal = !outputFile.canonicalPath.startsWith(parent)
|
||||
if (isVulnerableForZipPathTraversal) {
|
||||
continue
|
||||
}
|
||||
@@ -161,6 +191,7 @@ class DecompressActivity : SimpleActivity() {
|
||||
fos!!.write(buffer, 0, count)
|
||||
}
|
||||
fos!!.close()
|
||||
outputFile.setLastModified(entry)
|
||||
}
|
||||
|
||||
toast(R.string.decompression_successful)
|
||||
@@ -183,13 +214,12 @@ class DecompressActivity : SimpleActivity() {
|
||||
}.sortedWith(compareBy({ !it.isDirectory }, { it.mName })).toMutableList() as ArrayList<ListItem>
|
||||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
private fun fillAllListItems(uri: Uri) {
|
||||
private fun fillAllListItems(uri: Uri, callback: () -> Unit) = ensureBackgroundThread {
|
||||
val inputStream = try {
|
||||
contentResolver.openInputStream(uri)
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
return
|
||||
return@ensureBackgroundThread
|
||||
}
|
||||
|
||||
val zipInputStream = ZipInputStream(BufferedInputStream(inputStream))
|
||||
@@ -206,9 +236,11 @@ class DecompressActivity : SimpleActivity() {
|
||||
toast(getString(R.string.invalid_password))
|
||||
passwordDialog?.clearPassword()
|
||||
} else {
|
||||
askForPassword()
|
||||
runOnUiThread {
|
||||
askForPassword()
|
||||
}
|
||||
}
|
||||
return
|
||||
return@ensureBackgroundThread
|
||||
} else {
|
||||
break
|
||||
}
|
||||
@@ -220,12 +252,39 @@ class DecompressActivity : SimpleActivity() {
|
||||
break
|
||||
}
|
||||
|
||||
val lastModified = if (isOreoPlus()) zipEntry.lastModifiedTime else 0
|
||||
// Show progress bar only after password dialog is dismissed.
|
||||
runOnUiThread {
|
||||
if (binding.progressIndicator.isGone()) {
|
||||
binding.progressIndicator.show()
|
||||
}
|
||||
}
|
||||
|
||||
if (passwordDialog != null) {
|
||||
passwordDialog?.dismiss(notify = false)
|
||||
passwordDialog = null
|
||||
}
|
||||
|
||||
val lastModified = zipEntry.lastModifiedTime
|
||||
val filename = zipEntry.fileName.removeSuffix("/")
|
||||
val listItem = ListItem(filename, filename.getFilenameFromPath(), zipEntry.isDirectory, 0, 0L, lastModified, false, false)
|
||||
allFiles.add(listItem)
|
||||
allFiles.add(
|
||||
ListItem(
|
||||
mPath = filename,
|
||||
mName = filename.getFilenameFromPath(),
|
||||
mIsDirectory = zipEntry.isDirectory,
|
||||
mChildren = 0,
|
||||
mSize = 0L,
|
||||
mModified = lastModified,
|
||||
isSectionTitle = false,
|
||||
isGridTypeDivider = false
|
||||
)
|
||||
)
|
||||
}
|
||||
passwordDialog?.dismiss(notify = false)
|
||||
|
||||
runOnUiThread {
|
||||
binding.progressIndicator.hide()
|
||||
}
|
||||
|
||||
callback()
|
||||
}
|
||||
|
||||
private fun askForPassword() {
|
||||
|
||||
@@ -18,20 +18,19 @@ class FavoritesActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
private val binding by viewBinding(ActivityFavoritesBinding::inflate)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(binding.root)
|
||||
setupOptionsMenu()
|
||||
updateFavorites()
|
||||
binding.apply {
|
||||
updateMaterialActivityViews(manageFavoritesCoordinator, manageFavoritesList, useTransparentNavigation = true, useTopSearchMenu = false)
|
||||
setupMaterialScrollListener(manageFavoritesList, manageFavoritesToolbar)
|
||||
setupEdgeToEdge(padBottomSystem = listOf(manageFavoritesList))
|
||||
setupMaterialScrollListener(binding.manageFavoritesList, binding.manageFavoritesAppbar)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setupToolbar(binding.manageFavoritesToolbar, NavigationIcon.Arrow)
|
||||
setupTopAppBar(binding.manageFavoritesAppbar, NavigationIcon.Arrow)
|
||||
}
|
||||
|
||||
private fun setupOptionsMenu() {
|
||||
|
||||
@@ -1,25 +1,58 @@
|
||||
package org.fossify.filemanager.activities
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.content.ClipData
|
||||
import android.content.Intent
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.media.RingtoneManager
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.os.Environment
|
||||
import android.os.Handler
|
||||
import android.provider.Settings
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import com.stericson.RootTools.RootTools
|
||||
import me.grantland.widget.AutofitHelper
|
||||
import org.fossify.commons.dialogs.ConfirmationAdvancedDialog
|
||||
import org.fossify.commons.dialogs.RadioGroupDialog
|
||||
import org.fossify.commons.extensions.*
|
||||
import org.fossify.commons.helpers.*
|
||||
import org.fossify.commons.extensions.appLaunched
|
||||
import org.fossify.commons.extensions.appLockManager
|
||||
import org.fossify.commons.extensions.beGoneIf
|
||||
import org.fossify.commons.extensions.checkWhatsNew
|
||||
import org.fossify.commons.extensions.getBottomNavigationBackgroundColor
|
||||
import org.fossify.commons.extensions.getColoredDrawableWithColor
|
||||
import org.fossify.commons.extensions.getFilePublicUri
|
||||
import org.fossify.commons.extensions.getMimeType
|
||||
import org.fossify.commons.extensions.getProperBackgroundColor
|
||||
import org.fossify.commons.extensions.getProperTextColor
|
||||
import org.fossify.commons.extensions.getRealPathFromURI
|
||||
import org.fossify.commons.extensions.getStorageDirectories
|
||||
import org.fossify.commons.extensions.getTimeFormat
|
||||
import org.fossify.commons.extensions.handleHiddenFolderPasswordProtection
|
||||
import org.fossify.commons.extensions.hasOTGConnected
|
||||
import org.fossify.commons.extensions.hasPermission
|
||||
import org.fossify.commons.extensions.hideKeyboard
|
||||
import org.fossify.commons.extensions.humanizePath
|
||||
import org.fossify.commons.extensions.internalStoragePath
|
||||
import org.fossify.commons.extensions.isPathOnOTG
|
||||
import org.fossify.commons.extensions.isPathOnSD
|
||||
import org.fossify.commons.extensions.launchMoreAppsFromUsIntent
|
||||
import org.fossify.commons.extensions.onGlobalLayout
|
||||
import org.fossify.commons.extensions.onTabSelectionChanged
|
||||
import org.fossify.commons.extensions.sdCardPath
|
||||
import org.fossify.commons.extensions.toast
|
||||
import org.fossify.commons.extensions.updateBottomTabItemColors
|
||||
import org.fossify.commons.extensions.viewBinding
|
||||
import org.fossify.commons.helpers.LICENSE_AUTOFITTEXTVIEW
|
||||
import org.fossify.commons.helpers.LICENSE_GESTURE_VIEWS
|
||||
import org.fossify.commons.helpers.LICENSE_GLIDE
|
||||
import org.fossify.commons.helpers.LICENSE_PATTERN
|
||||
import org.fossify.commons.helpers.LICENSE_REPRINT
|
||||
import org.fossify.commons.helpers.LICENSE_ZIP4J
|
||||
import org.fossify.commons.helpers.PERMISSION_WRITE_STORAGE
|
||||
import org.fossify.commons.helpers.TAB_FILES
|
||||
import org.fossify.commons.helpers.TAB_RECENT_FILES
|
||||
import org.fossify.commons.helpers.TAB_STORAGE_ANALYSIS
|
||||
import org.fossify.commons.helpers.VIEW_TYPE_GRID
|
||||
import org.fossify.commons.helpers.ensureBackgroundThread
|
||||
import org.fossify.commons.models.FAQItem
|
||||
import org.fossify.commons.models.RadioItem
|
||||
import org.fossify.commons.models.Release
|
||||
@@ -42,17 +75,16 @@ import org.fossify.filemanager.interfaces.ItemOperationsListener
|
||||
import java.io.File
|
||||
|
||||
class MainActivity : SimpleActivity() {
|
||||
override var isSearchBarEnabled = true
|
||||
|
||||
companion object {
|
||||
private const val BACK_PRESS_TIMEOUT = 5000
|
||||
private const val MANAGE_STORAGE_RC = 201
|
||||
private const val PICKED_PATH = "picked_path"
|
||||
}
|
||||
|
||||
private val binding by viewBinding(ActivityMainBinding::inflate)
|
||||
|
||||
private var wasBackJustPressed = false
|
||||
private var mIsPasswordProtectionPending = false
|
||||
private var mWasProtectionHandled = false
|
||||
private var mTabsToShow = ArrayList<Int>()
|
||||
|
||||
private var mStoredFontSize = 0
|
||||
@@ -61,7 +93,6 @@ class MainActivity : SimpleActivity() {
|
||||
private var mStoredShowTabs = 0
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(binding.root)
|
||||
appLaunched(BuildConfig.APPLICATION_ID)
|
||||
@@ -69,7 +100,7 @@ class MainActivity : SimpleActivity() {
|
||||
refreshMenuItems()
|
||||
mTabsToShow = getTabsList()
|
||||
|
||||
if (!config.wasStorageAnalysisTabAdded && isOreoPlus()) {
|
||||
if (!config.wasStorageAnalysisTabAdded) {
|
||||
config.wasStorageAnalysisTabAdded = true
|
||||
if (config.showTabs and TAB_STORAGE_ANALYSIS == 0) {
|
||||
config.showTabs += TAB_STORAGE_ANALYSIS
|
||||
@@ -79,24 +110,15 @@ class MainActivity : SimpleActivity() {
|
||||
storeStateVariables()
|
||||
setupTabs()
|
||||
|
||||
updateMaterialActivityViews(binding.mainCoordinator, null, useTransparentNavigation = false, useTopSearchMenu = true)
|
||||
|
||||
mIsPasswordProtectionPending = config.isAppPasswordProtectionOn
|
||||
setupEdgeToEdge(padBottomImeAndSystem = listOf(binding.mainTabsHolder))
|
||||
|
||||
if (savedInstanceState == null) {
|
||||
handleAppPasswordProtection {
|
||||
mWasProtectionHandled = it
|
||||
if (it) {
|
||||
initFragments()
|
||||
mIsPasswordProtectionPending = false
|
||||
tryInitFileManager()
|
||||
checkWhatsNewDialog()
|
||||
checkIfRootAvailable()
|
||||
checkInvalidFavorites()
|
||||
} else {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
config.temporarilyShowHidden = false
|
||||
initFragments()
|
||||
tryInitFileManager()
|
||||
checkWhatsNewDialog()
|
||||
checkIfRootAvailable()
|
||||
checkInvalidFavorites()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,7 +150,7 @@ class MainActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
if (binding.mainViewPager.adapter == null && mWasProtectionHandled) {
|
||||
if (binding.mainViewPager.adapter == null) {
|
||||
initFragments()
|
||||
}
|
||||
}
|
||||
@@ -139,17 +161,13 @@ class MainActivity : SimpleActivity() {
|
||||
config.lastUsedViewPagerPage = binding.mainViewPager.currentItem
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
config.temporarilyShowHidden = false
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
override fun onBackPressedCompat(): Boolean {
|
||||
val currentFragment = getCurrentFragment()
|
||||
if (binding.mainMenu.isSearchOpen) {
|
||||
binding.mainMenu.closeSearch()
|
||||
return true
|
||||
} else if (currentFragment is RecentsFragment || currentFragment is StorageFragment) {
|
||||
super.onBackPressed()
|
||||
return false
|
||||
} else if ((currentFragment as ItemsFragment).getBreadcrumbs().getItemCount() <= 1) {
|
||||
if (!wasBackJustPressed && config.pressBackTwice) {
|
||||
wasBackJustPressed = true
|
||||
@@ -157,12 +175,16 @@ class MainActivity : SimpleActivity() {
|
||||
Handler().postDelayed({
|
||||
wasBackJustPressed = false
|
||||
}, BACK_PRESS_TIMEOUT.toLong())
|
||||
return true
|
||||
} else {
|
||||
appLockManager.lock()
|
||||
finish()
|
||||
return true
|
||||
}
|
||||
} else {
|
||||
currentFragment.getBreadcrumbs().removeBreadcrumb()
|
||||
openPath(currentFragment.getBreadcrumbs().getLastItem().path)
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -172,7 +194,7 @@ class MainActivity : SimpleActivity() {
|
||||
val currentViewType = config.getFolderViewType(currentFragment.currentPath)
|
||||
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.change_view_type).isVisible = currentFragment !is StorageFragment
|
||||
|
||||
@@ -197,7 +219,7 @@ class MainActivity : SimpleActivity() {
|
||||
|
||||
private fun setupOptionsMenu() {
|
||||
binding.mainMenu.apply {
|
||||
getToolbar().inflateMenu(R.menu.menu)
|
||||
requireToolbar().inflateMenu(R.menu.menu)
|
||||
toggleHideOnScroll(false)
|
||||
setupMenu()
|
||||
|
||||
@@ -211,7 +233,7 @@ class MainActivity : SimpleActivity() {
|
||||
getCurrentFragment()?.searchQueryChanged(text)
|
||||
}
|
||||
|
||||
getToolbar().setOnMenuItemClickListener { menuItem ->
|
||||
requireToolbar().setOnMenuItemClickListener { menuItem ->
|
||||
if (getCurrentFragment() == null) {
|
||||
return@setOnMenuItemClickListener true
|
||||
}
|
||||
@@ -241,42 +263,15 @@ class MainActivity : SimpleActivity() {
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
super.onSaveInstanceState(outState)
|
||||
outState.putString(PICKED_PATH, getItemsFragment()?.currentPath ?: "")
|
||||
outState.putBoolean(WAS_PROTECTION_HANDLED, mWasProtectionHandled)
|
||||
}
|
||||
|
||||
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
|
||||
super.onRestoreInstanceState(savedInstanceState)
|
||||
mWasProtectionHandled = savedInstanceState.getBoolean(WAS_PROTECTION_HANDLED, false)
|
||||
val path = savedInstanceState.getString(PICKED_PATH) ?: internalStoragePath
|
||||
|
||||
if (binding.mainViewPager.adapter == null) {
|
||||
binding.mainViewPager.onGlobalLayout {
|
||||
restorePath(path)
|
||||
}
|
||||
} else {
|
||||
restorePath(path)
|
||||
}
|
||||
}
|
||||
|
||||
@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 restorePath(path: String) {
|
||||
if (!mWasProtectionHandled) {
|
||||
handleAppPasswordProtection {
|
||||
mWasProtectionHandled = it
|
||||
if (it) {
|
||||
mIsPasswordProtectionPending = false
|
||||
openPath(path, true)
|
||||
} else {
|
||||
finish()
|
||||
}
|
||||
openPath(path, true)
|
||||
}
|
||||
} else {
|
||||
openPath(path, true)
|
||||
@@ -284,7 +279,6 @@ class MainActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun updateMenuColors() {
|
||||
updateStatusbarColor(getProperBackgroundColor())
|
||||
binding.mainMenu.updateColors()
|
||||
}
|
||||
|
||||
@@ -316,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) {
|
||||
if (intent.action == Intent.ACTION_VIEW && intent.data != null) {
|
||||
val data = intent.data
|
||||
@@ -404,7 +366,9 @@ class MainActivity : SimpleActivity() {
|
||||
private fun setupTabs() {
|
||||
binding.mainTabsHolder.removeAllTabs()
|
||||
val action = intent.action
|
||||
val isPickFileIntent = action == RingtoneManager.ACTION_RINGTONE_PICKER || action == Intent.ACTION_GET_CONTENT || action == Intent.ACTION_PICK
|
||||
val isPickFileIntent = action == RingtoneManager.ACTION_RINGTONE_PICKER
|
||||
|| action == Intent.ACTION_GET_CONTENT
|
||||
|| action == Intent.ACTION_PICK
|
||||
val isCreateDocumentIntent = action == Intent.ACTION_CREATE_DOCUMENT
|
||||
|
||||
if (isPickFileIntent) {
|
||||
@@ -457,7 +421,6 @@ class MainActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
val bottomBarColor = getBottomNavigationBackgroundColor()
|
||||
updateNavigationBarColor(bottomBarColor)
|
||||
mainTabsHolder.setBackgroundColor(bottomBarColor)
|
||||
}
|
||||
}
|
||||
@@ -494,10 +457,6 @@ class MainActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun openPath(path: String, forceRefresh: Boolean = false) {
|
||||
if (mIsPasswordProtectionPending && !mWasProtectionHandled) {
|
||||
return
|
||||
}
|
||||
|
||||
var newPath = path
|
||||
val file = File(path)
|
||||
if (config.OTGPath.isNotEmpty() && config.OTGPath == path.trimEnd('/')) {
|
||||
|
||||
@@ -25,6 +25,7 @@ import org.fossify.filemanager.databinding.ActivityMimetypesBinding
|
||||
import org.fossify.filemanager.dialogs.ChangeSortingDialog
|
||||
import org.fossify.filemanager.dialogs.ChangeViewTypeDialog
|
||||
import org.fossify.filemanager.extensions.config
|
||||
import org.fossify.filemanager.extensions.isPathInHiddenFolder
|
||||
import org.fossify.filemanager.extensions.tryOpenPathIntent
|
||||
import org.fossify.filemanager.helpers.*
|
||||
import org.fossify.filemanager.interfaces.ItemOperationsListener
|
||||
@@ -43,14 +44,13 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
||||
private var currentVolume = PRIMARY_VOLUME_NAME
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(binding.root)
|
||||
setupOptionsMenu()
|
||||
refreshMenuItems()
|
||||
binding.apply {
|
||||
updateMaterialActivityViews(mimetypesCoordinator, mimetypesList, useTransparentNavigation = true, useTopSearchMenu = false)
|
||||
setupMaterialScrollListener(mimetypesList, mimetypesToolbar)
|
||||
setupEdgeToEdge(padBottomImeAndSystem = listOf(mimetypesList))
|
||||
setupMaterialScrollListener(binding.mimetypesList, binding.mimetypesAppbar)
|
||||
}
|
||||
|
||||
currentMimeType = intent.getStringExtra(SHOW_MIMETYPE) ?: return
|
||||
@@ -84,7 +84,7 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setupToolbar(binding.mimetypesToolbar, NavigationIcon.Arrow, searchMenuItem = searchMenuItem)
|
||||
setupTopAppBar(binding.mimetypesAppbar, NavigationIcon.Arrow, searchMenuItem = searchMenuItem)
|
||||
}
|
||||
|
||||
private fun refreshMenuItems() {
|
||||
@@ -133,10 +133,11 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
||||
override fun selectedPaths(paths: ArrayList<String>) {}
|
||||
|
||||
fun searchQueryChanged(text: String) {
|
||||
val searchText = text.trim()
|
||||
lastSearchedText = searchText
|
||||
val normalizedText = text.normalizeString()
|
||||
val searchNormalizedText = normalizedText.trim()
|
||||
lastSearchedText = searchNormalizedText
|
||||
when {
|
||||
searchText.isEmpty() -> {
|
||||
searchNormalizedText.isEmpty() -> {
|
||||
binding.apply {
|
||||
mimetypesFastscroller.beVisible()
|
||||
getRecyclerAdapter()?.updateItems(storedItems)
|
||||
@@ -145,7 +146,7 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
||||
}
|
||||
}
|
||||
|
||||
searchText.length == 1 -> {
|
||||
searchNormalizedText.length == 1 -> {
|
||||
binding.apply {
|
||||
mimetypesFastscroller.beGone()
|
||||
mimetypesPlaceholder.beVisible()
|
||||
@@ -155,11 +156,13 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
||||
|
||||
else -> {
|
||||
ensureBackgroundThread {
|
||||
if (lastSearchedText != searchText) {
|
||||
if (lastSearchedText != searchNormalizedText) {
|
||||
return@ensureBackgroundThread
|
||||
}
|
||||
|
||||
val listItems = storedItems.filter { it.name.contains(searchText, true) } as ArrayList<ListItem>
|
||||
val listItems = storedItems.filter {
|
||||
it.name.normalizeString().contains(searchNormalizedText, true)
|
||||
} as ArrayList<ListItem>
|
||||
|
||||
runOnUiThread {
|
||||
getRecyclerAdapter()?.updateItems(listItems, text)
|
||||
@@ -285,7 +288,10 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
||||
try {
|
||||
val fullMimetype = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault()) ?: return@queryCursor
|
||||
val name = cursor.getStringValue(MediaStore.Files.FileColumns.DISPLAY_NAME)
|
||||
if (!showHidden && name.startsWith(".")) {
|
||||
val path = cursor.getStringValue(MediaStore.Files.FileColumns.DATA)
|
||||
|
||||
val isHiddenFile = name.startsWith(".")
|
||||
if (!showHidden && (isHiddenFile || path.isPathInHiddenFolder())) {
|
||||
return@queryCursor
|
||||
}
|
||||
|
||||
@@ -294,7 +300,6 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
||||
return@queryCursor
|
||||
}
|
||||
|
||||
val path = cursor.getStringValue(MediaStore.Files.FileColumns.DATA)
|
||||
val lastModified = cursor.getLongValue(MediaStore.Files.FileColumns.DATE_MODIFIED) * 1000
|
||||
|
||||
val mimetype = fullMimetype.substringBefore("/")
|
||||
|
||||
@@ -7,6 +7,7 @@ import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.print.PrintAttributes
|
||||
import android.print.PrintManager
|
||||
import android.util.Base64
|
||||
import android.view.inputmethod.EditorInfo
|
||||
import android.webkit.WebResourceRequest
|
||||
import android.webkit.WebView
|
||||
@@ -32,6 +33,7 @@ class ReadTextActivity : SimpleActivity() {
|
||||
companion object {
|
||||
private const val SELECT_SAVE_FILE_INTENT = 1
|
||||
private const val SELECT_SAVE_FILE_AND_EXIT_INTENT = 2
|
||||
private const val KEY_UNSAVED_TEXT = "KEY_UNSAVED_TEXT"
|
||||
}
|
||||
|
||||
private val binding by viewBinding(ActivityReadTextBinding::inflate)
|
||||
@@ -49,13 +51,12 @@ class ReadTextActivity : SimpleActivity() {
|
||||
private lateinit var searchClearBtn: ImageView
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(binding.root)
|
||||
setupOptionsMenu()
|
||||
binding.apply {
|
||||
updateMaterialActivityViews(readTextCoordinator, readTextView, useTransparentNavigation = true, useTopSearchMenu = false)
|
||||
setupMaterialScrollListener(readTextHolder, readTextToolbar)
|
||||
setupEdgeToEdge(padBottomImeAndSystem = listOf(readTextView))
|
||||
setupMaterialScrollListener(binding.readTextHolder, binding.readTextAppbar)
|
||||
}
|
||||
|
||||
searchQueryET = findViewById(R.id.search_query)
|
||||
@@ -85,7 +86,7 @@ class ReadTextActivity : SimpleActivity() {
|
||||
|
||||
binding.readTextView.onGlobalLayout {
|
||||
ensureBackgroundThread {
|
||||
checkIntent(uri)
|
||||
checkIntent(uri, savedInstanceState)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,7 +95,14 @@ class ReadTextActivity : SimpleActivity() {
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setupToolbar(binding.readTextToolbar, NavigationIcon.Arrow)
|
||||
setupTopAppBar(binding.readTextAppbar, NavigationIcon.Arrow)
|
||||
}
|
||||
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
super.onSaveInstanceState(outState)
|
||||
if (originalText != binding.readTextView.text.toString()) {
|
||||
outState.putString(KEY_UNSAVED_TEXT, binding.readTextView.text.toString())
|
||||
}
|
||||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
|
||||
@@ -111,22 +119,26 @@ class ReadTextActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
override fun onBackPressedCompat(): Boolean {
|
||||
val hasUnsavedChanges = originalText != binding.readTextView.text.toString()
|
||||
when {
|
||||
isSearchActive -> closeSearch()
|
||||
return when {
|
||||
isSearchActive -> {
|
||||
closeSearch()
|
||||
true
|
||||
}
|
||||
hasUnsavedChanges && System.currentTimeMillis() - lastSavePromptTS > SAVE_DISCARD_PROMPT_INTERVAL -> {
|
||||
lastSavePromptTS = System.currentTimeMillis()
|
||||
ConfirmationAdvancedDialog(this, "", R.string.save_before_closing, R.string.save, R.string.discard) {
|
||||
if (it) {
|
||||
saveText(true)
|
||||
} else {
|
||||
super.onBackPressed()
|
||||
performDefaultBack()
|
||||
}
|
||||
}
|
||||
true
|
||||
}
|
||||
|
||||
else -> super.onBackPressed()
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,6 +147,7 @@ class ReadTextActivity : SimpleActivity() {
|
||||
when (menuItem.itemId) {
|
||||
R.id.menu_search -> openSearch()
|
||||
R.id.menu_save -> saveText()
|
||||
R.id.menu_save_as -> saveAsText()
|
||||
R.id.menu_open_with -> openPath(intent.dataString!!, true)
|
||||
R.id.menu_print -> printText()
|
||||
else -> return@setOnMenuItemClickListener false
|
||||
@@ -156,10 +169,14 @@ class ReadTextActivity : SimpleActivity() {
|
||||
}, 250)
|
||||
}
|
||||
|
||||
private fun saveText(shouldExitAfterSaving: Boolean = false) {
|
||||
private fun updateFilePath() {
|
||||
if (filePath.isEmpty()) {
|
||||
filePath = getRealPathFromURI(intent.data!!) ?: ""
|
||||
}
|
||||
}
|
||||
|
||||
private fun saveAsText(shouldExitAfterSaving: Boolean = false) {
|
||||
updateFilePath()
|
||||
|
||||
if (filePath.isEmpty()) {
|
||||
SaveAsDialog(this, filePath, true) { _, filename ->
|
||||
@@ -173,6 +190,7 @@ class ReadTextActivity : SimpleActivity() {
|
||||
} else {
|
||||
SELECT_SAVE_FILE_INTENT
|
||||
}
|
||||
@Suppress("DEPRECATION")
|
||||
startActivityForResult(this, requestCode)
|
||||
}
|
||||
}
|
||||
@@ -191,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) {
|
||||
if (outputStream != null) {
|
||||
val currentText = binding.readTextView.text.toString()
|
||||
@@ -203,7 +236,7 @@ class ReadTextActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
if (shouldExitAfterSaving) {
|
||||
super.onBackPressed()
|
||||
performDefaultBack()
|
||||
}
|
||||
} else {
|
||||
toast(R.string.unknown_error_occurred)
|
||||
@@ -221,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) {
|
||||
showErrorToast(e)
|
||||
}
|
||||
@@ -241,7 +284,7 @@ class ReadTextActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkIntent(uri: Uri) {
|
||||
private fun checkIntent(uri: Uri, savedInstanceState: Bundle?) {
|
||||
originalText = if (uri.scheme == "file") {
|
||||
filePath = uri.path!!
|
||||
val file = File(filePath)
|
||||
@@ -270,7 +313,13 @@ class ReadTextActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
runOnUiThread {
|
||||
binding.readTextView.setText(originalText)
|
||||
var textToSet = originalText
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
textToSet = savedInstanceState.getString(KEY_UNSAVED_TEXT, originalText)
|
||||
}
|
||||
|
||||
binding.readTextView.setText(textToSet)
|
||||
if (originalText.isNotEmpty()) {
|
||||
hideKeyboard()
|
||||
} else {
|
||||
@@ -316,7 +365,7 @@ class ReadTextActivity : SimpleActivity() {
|
||||
binding.readTextView.text?.clearBackgroundSpans()
|
||||
|
||||
if (text.isNotBlank() && text.length > 1) {
|
||||
searchMatches = binding.readTextView.value.searchMatches(text)
|
||||
searchMatches = binding.readTextView.text.toString().searchMatches(text)
|
||||
binding.readTextView.highlightText(text, getProperPrimaryColor())
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,21 @@ class SaveAsActivity : SimpleActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(binding.root)
|
||||
tryInitFileManager()
|
||||
}
|
||||
|
||||
private fun tryInitFileManager() {
|
||||
handleStoragePermission { granted ->
|
||||
if (granted) {
|
||||
saveAsDialog()
|
||||
} else {
|
||||
toast(R.string.no_storage_permissions)
|
||||
finish()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun saveAsDialog() {
|
||||
if (intent.action == Intent.ACTION_SEND && intent.extras?.containsKey(Intent.EXTRA_STREAM) == true) {
|
||||
FilePickerDialog(this, pickFile = false, showHidden = config.shouldShowHidden(), showFAB = true, showFavoritesButton = true) {
|
||||
val destination = it
|
||||
@@ -35,10 +49,14 @@ class SaveAsActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
val source = intent.getParcelableExtra<Uri>(Intent.EXTRA_STREAM)
|
||||
val mimeType = source!!.toString().getMimeType()
|
||||
val source = intent.getParcelableExtra<Uri>(Intent.EXTRA_STREAM)!!
|
||||
val originalFilename = getFilenameFromContentUri(source)
|
||||
?: source.toString().getFilenameFromPath()
|
||||
val filename = sanitizeFilename(originalFilename)
|
||||
val mimeType = contentResolver.getType(source)
|
||||
?: intent.type?.takeIf { it != "*/*" }
|
||||
?: filename.getMimeType()
|
||||
val inputStream = contentResolver.openInputStream(source)
|
||||
val filename = source.toString().getFilenameFromPath()
|
||||
|
||||
val destinationPath = "$destination/$filename"
|
||||
val outputStream = getFileOutputStreamSync(destinationPath, mimeType, null)!!
|
||||
@@ -61,6 +79,11 @@ class SaveAsActivity : SimpleActivity() {
|
||||
|
||||
override fun 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"
|
||||
}
|
||||
}
|
||||
@@ -21,18 +21,17 @@ class SettingsActivity : SimpleActivity() {
|
||||
private val binding by viewBinding(ActivitySettingsBinding::inflate)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(binding.root)
|
||||
binding.apply {
|
||||
updateMaterialActivityViews(settingsCoordinator, settingsHolder, useTransparentNavigation = true, useTopSearchMenu = false)
|
||||
setupMaterialScrollListener(settingsNestedScrollview, settingsToolbar)
|
||||
setupEdgeToEdge(padBottomSystem = listOf(settingsNestedScrollview))
|
||||
setupMaterialScrollListener(binding.settingsNestedScrollview, binding.settingsAppbar)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setupToolbar(binding.settingsToolbar, NavigationIcon.Arrow)
|
||||
setupTopAppBar(binding.settingsAppbar, NavigationIcon.Arrow)
|
||||
|
||||
setupCustomizeColors()
|
||||
setupUseEnglish()
|
||||
|
||||
@@ -1,9 +1,15 @@
|
||||
package org.fossify.filemanager.activities
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.os.Environment
|
||||
import android.provider.Settings
|
||||
import org.fossify.commons.activities.BaseSimpleActivity
|
||||
import org.fossify.commons.dialogs.ConfirmationAdvancedDialog
|
||||
import org.fossify.commons.extensions.hasPermission
|
||||
import android.net.Uri
|
||||
import org.fossify.commons.extensions.showErrorToast
|
||||
import org.fossify.commons.extensions.toast
|
||||
import org.fossify.commons.helpers.PERMISSION_WRITE_STORAGE
|
||||
import org.fossify.commons.helpers.isRPlus
|
||||
import org.fossify.filemanager.R
|
||||
@@ -31,8 +37,23 @@ open class SimpleActivity : BaseSimpleActivity() {
|
||||
R.mipmap.ic_launcher_grey_black
|
||||
)
|
||||
|
||||
companion object {
|
||||
private const val MANAGE_STORAGE_RC = 201
|
||||
}
|
||||
|
||||
override fun getAppLauncherName() = getString(R.string.app_launcher_name)
|
||||
|
||||
override fun getRepositoryName() = "File-Manager"
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
|
||||
super.onActivityResult(requestCode, resultCode, resultData)
|
||||
isAskingPermissions = false
|
||||
if (requestCode == MANAGE_STORAGE_RC && isRPlus()) {
|
||||
actionOnPermission?.invoke(Environment.isExternalStorageManager())
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
fun hasStoragePermission(): Boolean {
|
||||
return if (isRPlus()) {
|
||||
@@ -41,4 +62,39 @@ open class SimpleActivity : BaseSimpleActivity() {
|
||||
hasPermission(PERMISSION_WRITE_STORAGE)
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("InlinedApi")
|
||||
fun handleStoragePermission(callback: (granted: Boolean) -> Unit) {
|
||||
actionOnPermission = null
|
||||
if (hasStoragePermission()) {
|
||||
callback(true)
|
||||
} else {
|
||||
if (isRPlus()) {
|
||||
ConfirmationAdvancedDialog(this, "", R.string.access_storage_prompt, R.string.ok, 0, false) { success ->
|
||||
if (success) {
|
||||
isAskingPermissions = true
|
||||
actionOnPermission = callback
|
||||
try {
|
||||
val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
|
||||
intent.addCategory("android.intent.category.DEFAULT")
|
||||
intent.data = Uri.parse("package:$packageName")
|
||||
startActivityForResult(intent, MANAGE_STORAGE_RC)
|
||||
} catch (e: android.content.ActivityNotFoundException) {
|
||||
showErrorToast(e)
|
||||
val intent = Intent()
|
||||
intent.action = Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
|
||||
startActivityForResult(intent, MANAGE_STORAGE_RC)
|
||||
} catch (e: SecurityException) {
|
||||
showErrorToast(e)
|
||||
finish()
|
||||
}
|
||||
} else {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
handlePermission(PERMISSION_WRITE_STORAGE, callback)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -117,8 +117,8 @@ class DecompressItemsAdapter(activity: SimpleActivity, var listItems: MutableLis
|
||||
private fun getImagePathToLoad(path: String): Any {
|
||||
return if (path.endsWith(".apk", true)) {
|
||||
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.publicSourceDir = path
|
||||
appInfo.loadIcon(activity.packageManager)
|
||||
@@ -131,7 +131,7 @@ class DecompressItemsAdapter(activity: SimpleActivity, var listItems: MutableLis
|
||||
}
|
||||
|
||||
private fun initDrawables() {
|
||||
folderDrawable = resources.getColoredDrawableWithColor(R.drawable.ic_folder_vector, textColor)
|
||||
folderDrawable = resources.getColoredDrawableWithColor(R.drawable.ic_folder_vector, properPrimaryColor)
|
||||
folderDrawable.alpha = 180
|
||||
fileDrawable = resources.getDrawable(R.drawable.ic_file_generic)
|
||||
fileDrawables = getFilePlaceholderDrawables(activity)
|
||||
|
||||
@@ -35,19 +35,82 @@ import net.lingala.zip4j.model.LocalFileHeader
|
||||
import net.lingala.zip4j.model.ZipParameters
|
||||
import net.lingala.zip4j.model.enums.EncryptionMethod
|
||||
import org.fossify.commons.adapters.MyRecyclerViewAdapter
|
||||
import org.fossify.commons.dialogs.*
|
||||
import org.fossify.commons.extensions.*
|
||||
import org.fossify.commons.helpers.*
|
||||
import org.fossify.commons.dialogs.ConfirmationDialog
|
||||
import org.fossify.commons.dialogs.FilePickerDialog
|
||||
import org.fossify.commons.dialogs.PropertiesDialog
|
||||
import org.fossify.commons.dialogs.RadioGroupDialog
|
||||
import org.fossify.commons.dialogs.RenameDialog
|
||||
import org.fossify.commons.dialogs.RenameItemDialog
|
||||
import org.fossify.commons.dialogs.RenameItemsDialog
|
||||
import org.fossify.commons.extensions.applyColorFilter
|
||||
import org.fossify.commons.extensions.beGone
|
||||
import org.fossify.commons.extensions.beVisible
|
||||
import org.fossify.commons.extensions.beVisibleIf
|
||||
import org.fossify.commons.extensions.convertToBitmap
|
||||
import org.fossify.commons.extensions.copyToClipboard
|
||||
import org.fossify.commons.extensions.createDirectorySync
|
||||
import org.fossify.commons.extensions.deleteFile
|
||||
import org.fossify.commons.extensions.deleteFileBg
|
||||
import org.fossify.commons.extensions.deleteFolderBg
|
||||
import org.fossify.commons.extensions.formatDate
|
||||
import org.fossify.commons.extensions.formatSize
|
||||
import org.fossify.commons.extensions.getAndroidSAFFileItems
|
||||
import org.fossify.commons.extensions.getAndroidSAFUri
|
||||
import org.fossify.commons.extensions.getColoredDrawableWithColor
|
||||
import org.fossify.commons.extensions.getDefaultCopyDestinationPath
|
||||
import org.fossify.commons.extensions.getDocumentFile
|
||||
import org.fossify.commons.extensions.getDoesFilePathExist
|
||||
import org.fossify.commons.extensions.getFileCount
|
||||
import org.fossify.commons.extensions.getFileInputStreamSync
|
||||
import org.fossify.commons.extensions.getFileOutputStreamSync
|
||||
import org.fossify.commons.extensions.getFilenameFromPath
|
||||
import org.fossify.commons.extensions.getIsPathDirectory
|
||||
import org.fossify.commons.extensions.getMimeType
|
||||
import org.fossify.commons.extensions.getParentPath
|
||||
import org.fossify.commons.extensions.getProperSize
|
||||
import org.fossify.commons.extensions.getTextSize
|
||||
import org.fossify.commons.extensions.getTimeFormat
|
||||
import org.fossify.commons.extensions.handleDeletePasswordProtection
|
||||
import org.fossify.commons.extensions.hasOTGConnected
|
||||
import org.fossify.commons.extensions.highlightTextPart
|
||||
import org.fossify.commons.extensions.isPathOnOTG
|
||||
import org.fossify.commons.extensions.isRestrictedSAFOnlyRoot
|
||||
import org.fossify.commons.extensions.relativizeWith
|
||||
import org.fossify.commons.extensions.setupViewBackground
|
||||
import org.fossify.commons.extensions.showErrorToast
|
||||
import org.fossify.commons.extensions.toFileDirItem
|
||||
import org.fossify.commons.extensions.toast
|
||||
import org.fossify.commons.helpers.CONFLICT_OVERWRITE
|
||||
import org.fossify.commons.helpers.CONFLICT_SKIP
|
||||
import org.fossify.commons.helpers.VIEW_TYPE_LIST
|
||||
import org.fossify.commons.helpers.ensureBackgroundThread
|
||||
import org.fossify.commons.helpers.getFilePlaceholderDrawables
|
||||
import org.fossify.commons.models.FileDirItem
|
||||
import org.fossify.commons.models.RadioItem
|
||||
import org.fossify.commons.views.MyRecyclerView
|
||||
import org.fossify.filemanager.R
|
||||
import org.fossify.filemanager.activities.SimpleActivity
|
||||
import org.fossify.filemanager.activities.SplashActivity
|
||||
import org.fossify.filemanager.databinding.*
|
||||
import org.fossify.filemanager.databinding.ItemDirGridBinding
|
||||
import org.fossify.filemanager.databinding.ItemEmptyBinding
|
||||
import org.fossify.filemanager.databinding.ItemFileDirListBinding
|
||||
import org.fossify.filemanager.databinding.ItemFileGridBinding
|
||||
import org.fossify.filemanager.databinding.ItemSectionBinding
|
||||
import org.fossify.filemanager.dialogs.CompressAsDialog
|
||||
import org.fossify.filemanager.extensions.*
|
||||
import org.fossify.filemanager.helpers.*
|
||||
import org.fossify.filemanager.extensions.config
|
||||
import org.fossify.filemanager.extensions.isPathOnRoot
|
||||
import org.fossify.filemanager.extensions.isZipFile
|
||||
import org.fossify.filemanager.extensions.setAs
|
||||
import org.fossify.filemanager.extensions.setLastModified
|
||||
import org.fossify.filemanager.extensions.sharePaths
|
||||
import org.fossify.filemanager.extensions.toggleItemVisibility
|
||||
import org.fossify.filemanager.extensions.tryOpenPathIntent
|
||||
import org.fossify.filemanager.helpers.OPEN_AS_AUDIO
|
||||
import org.fossify.filemanager.helpers.OPEN_AS_IMAGE
|
||||
import org.fossify.filemanager.helpers.OPEN_AS_OTHER
|
||||
import org.fossify.filemanager.helpers.OPEN_AS_TEXT
|
||||
import org.fossify.filemanager.helpers.OPEN_AS_VIDEO
|
||||
import org.fossify.filemanager.helpers.RootHelpers
|
||||
import org.fossify.filemanager.interfaces.ItemOperationsListener
|
||||
import org.fossify.filemanager.models.ListItem
|
||||
import java.io.BufferedInputStream
|
||||
@@ -57,9 +120,16 @@ import java.util.LinkedList
|
||||
import java.util.Locale
|
||||
|
||||
class ItemsAdapter(
|
||||
activity: SimpleActivity, var listItems: MutableList<ListItem>, val listener: ItemOperationsListener?, recyclerView: MyRecyclerView,
|
||||
val isPickMultipleIntent: Boolean, val swipeRefreshLayout: SwipeRefreshLayout?, canHaveIndividualViewType: Boolean = true, itemClick: (Any) -> Unit
|
||||
) : MyRecyclerViewAdapter(activity, recyclerView, itemClick), RecyclerViewFastScroller.OnPopupTextUpdate {
|
||||
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,
|
||||
) : MyRecyclerViewAdapter(activity, recyclerView, itemClick),
|
||||
RecyclerViewFastScroller.OnPopupTextUpdate {
|
||||
|
||||
private lateinit var fileDrawable: Drawable
|
||||
private lateinit var folderDrawable: Drawable
|
||||
@@ -74,7 +144,9 @@ class ItemsAdapter(
|
||||
|
||||
private val config = activity.config
|
||||
private val viewType = if (canHaveIndividualViewType) {
|
||||
config.getFolderViewType(listItems.firstOrNull { !it.isSectionTitle }?.mPath?.getParentPath() ?: "")
|
||||
config.getFolderViewType(
|
||||
path = listItems.firstOrNull { !it.isSectionTitle }?.mPath?.getParentPath().orEmpty()
|
||||
)
|
||||
} else {
|
||||
config.viewType
|
||||
}
|
||||
@@ -100,13 +172,14 @@ class ItemsAdapter(
|
||||
|
||||
override fun prepareActionMode(menu: Menu) {
|
||||
menu.apply {
|
||||
findItem(R.id.cab_decompress).isVisible = getSelectedFileDirItems().map { it.path }.any { it.isZipFile() }
|
||||
findItem(R.id.cab_decompress).isVisible =
|
||||
getSelectedFileDirItems().map { it.path }.any { it.isZipFile() }
|
||||
findItem(R.id.cab_confirm_selection).isVisible = isPickMultipleIntent
|
||||
findItem(R.id.cab_copy_path).isVisible = isOneItemSelected()
|
||||
findItem(R.id.cab_open_with).isVisible = isOneFileSelected()
|
||||
findItem(R.id.cab_open_as).isVisible = isOneFileSelected()
|
||||
findItem(R.id.cab_set_as).isVisible = isOneFileSelected()
|
||||
findItem(R.id.cab_create_shortcut).isVisible = isOreoPlus() && isOneItemSelected()
|
||||
findItem(R.id.cab_create_shortcut).isVisible = isOneItemSelected()
|
||||
|
||||
checkHideBtnVisibility(this)
|
||||
}
|
||||
@@ -138,13 +211,21 @@ class ItemsAdapter(
|
||||
}
|
||||
}
|
||||
|
||||
override fun getSelectableItemCount() = listItems.filter { !it.isSectionTitle && !it.isGridTypeDivider }.size
|
||||
override fun getSelectableItemCount(): Int {
|
||||
return listItems.filter { !it.isSectionTitle && !it.isGridTypeDivider }.size
|
||||
}
|
||||
|
||||
override fun getIsItemSelectable(position: Int) = !listItems[position].isSectionTitle && !listItems[position].isGridTypeDivider
|
||||
override fun getIsItemSelectable(position: Int): Boolean {
|
||||
return !listItems[position].isSectionTitle && !listItems[position].isGridTypeDivider
|
||||
}
|
||||
|
||||
override fun getItemSelectionKey(position: Int) = listItems.getOrNull(position)?.path?.hashCode()
|
||||
override fun getItemSelectionKey(position: Int): Int? {
|
||||
return listItems.getOrNull(position)?.path?.hashCode()
|
||||
}
|
||||
|
||||
override fun getItemKeyPosition(key: Int) = listItems.indexOfFirst { it.path.hashCode() == key }
|
||||
override fun getItemKeyPosition(key: Int): Int {
|
||||
return listItems.indexOfFirst { it.path.hashCode() == key }
|
||||
}
|
||||
|
||||
override fun onActionModeCreated() {
|
||||
swipeRefreshLayout?.isRefreshing = false
|
||||
@@ -152,7 +233,7 @@ class ItemsAdapter(
|
||||
}
|
||||
|
||||
override fun onActionModeDestroyed() {
|
||||
swipeRefreshLayout?.isEnabled = true
|
||||
swipeRefreshLayout?.isEnabled = config.enablePullToRefresh
|
||||
}
|
||||
|
||||
override fun getItemViewType(position: Int): Int {
|
||||
@@ -165,25 +246,37 @@ class ItemsAdapter(
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||
val binding = Binding.getByItemViewType(viewType, isListViewType).inflate(layoutInflater, parent, false)
|
||||
val binding = Binding.getByItemViewType(viewType, isListViewType)
|
||||
.inflate(layoutInflater, parent, false)
|
||||
|
||||
return createViewHolder(binding.root)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) {
|
||||
val fileDirItem = listItems[position]
|
||||
holder.bindView(fileDirItem, true, !fileDirItem.isSectionTitle) { itemView, layoutPosition ->
|
||||
holder.bindView(
|
||||
any = fileDirItem,
|
||||
allowSingleClick = true,
|
||||
allowLongClick = !fileDirItem.isSectionTitle
|
||||
) { itemView, layoutPosition ->
|
||||
val viewType = getItemViewType(position)
|
||||
setupView(Binding.getByItemViewType(viewType, isListViewType).bind(itemView), fileDirItem)
|
||||
setupView(
|
||||
binding = Binding.getByItemViewType(viewType, isListViewType).bind(itemView),
|
||||
listItem = fileDirItem
|
||||
)
|
||||
}
|
||||
bindViewHolder(holder)
|
||||
}
|
||||
|
||||
override fun getItemCount() = listItems.size
|
||||
|
||||
private fun getItemWithKey(key: Int): FileDirItem? = listItems.firstOrNull { it.path.hashCode() == key }
|
||||
private fun getItemWithKey(key: Int): FileDirItem? {
|
||||
return listItems.firstOrNull { it.path.hashCode() == key }
|
||||
}
|
||||
|
||||
private fun isOneFileSelected() = isOneItemSelected() && getItemWithKey(selectedKeys.first())?.isDirectory == false
|
||||
private fun isOneFileSelected(): Boolean {
|
||||
return isOneItemSelected() && getItemWithKey(selectedKeys.first())?.isDirectory == false
|
||||
}
|
||||
|
||||
private fun checkHideBtnVisibility(menu: Menu) {
|
||||
var hiddenCnt = 0
|
||||
@@ -202,7 +295,10 @@ class ItemsAdapter(
|
||||
|
||||
private fun confirmSelection() {
|
||||
if (selectedKeys.isNotEmpty()) {
|
||||
val paths = getSelectedFileDirItems().asSequence().filter { !it.isDirectory }.map { it.path }.toMutableList() as ArrayList<String>
|
||||
val paths = getSelectedFileDirItems()
|
||||
.asSequence()
|
||||
.filter { !it.isDirectory }.map { it.path }
|
||||
.toMutableList() as ArrayList<String>
|
||||
if (paths.isEmpty()) {
|
||||
finishActMode()
|
||||
} else {
|
||||
@@ -281,7 +377,11 @@ class ItemsAdapter(
|
||||
getShortcutImage(path, drawable) {
|
||||
val intent = Intent(activity, SplashActivity::class.java)
|
||||
intent.action = Intent.ACTION_VIEW
|
||||
intent.flags = intent.flags or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NO_HISTORY
|
||||
intent.flags =
|
||||
intent.flags or
|
||||
Intent.FLAG_ACTIVITY_NEW_TASK or
|
||||
Intent.FLAG_ACTIVITY_CLEAR_TASK or
|
||||
Intent.FLAG_ACTIVITY_NO_HISTORY
|
||||
intent.data = Uri.fromFile(File(path))
|
||||
|
||||
val shortcut = ShortcutInfo.Builder(activity, path)
|
||||
@@ -297,7 +397,8 @@ class ItemsAdapter(
|
||||
|
||||
private fun getShortcutImage(path: String, drawable: Drawable, callback: () -> Unit) {
|
||||
val appIconColor = baseConfig.appIconColor
|
||||
(drawable as LayerDrawable).findDrawableByLayerId(R.id.shortcut_folder_background).applyColorFilter(appIconColor)
|
||||
(drawable as LayerDrawable).findDrawableByLayerId(R.id.shortcut_folder_background)
|
||||
.applyColorFilter(appIconColor)
|
||||
if (activity.getIsPathDirectory(path)) {
|
||||
callback()
|
||||
} else {
|
||||
@@ -318,10 +419,15 @@ class ItemsAdapter(
|
||||
|
||||
try {
|
||||
val bitmap = builder.get()
|
||||
drawable.findDrawableByLayerId(R.id.shortcut_folder_background).applyColorFilter(0)
|
||||
drawable.findDrawableByLayerId(R.id.shortcut_folder_background)
|
||||
.applyColorFilter(0)
|
||||
drawable.setDrawableByLayerId(R.id.shortcut_folder_image, bitmap)
|
||||
} catch (e: Exception) {
|
||||
val fileIcon = fileDrawables.getOrElse(path.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable })
|
||||
val fileIcon = fileDrawables
|
||||
.getOrElse(
|
||||
key = path.substringAfterLast(".").lowercase(Locale.getDefault()),
|
||||
defaultValue = { fileDrawable }
|
||||
)
|
||||
drawable.setDrawableByLayerId(R.id.shortcut_folder_image, fileIcon)
|
||||
}
|
||||
|
||||
@@ -346,15 +452,19 @@ class ItemsAdapter(
|
||||
}
|
||||
|
||||
activity.isPathOnOTG(path) -> {
|
||||
activity.getDocumentFile(path)?.listFiles()?.filter { if (shouldShowHidden) true else !it.name!!.startsWith(".") }?.forEach {
|
||||
addFileUris(it.uri.toString(), paths)
|
||||
}
|
||||
activity.getDocumentFile(path)?.listFiles()
|
||||
?.filter { if (shouldShowHidden) true else !it.name!!.startsWith(".") }
|
||||
?.forEach {
|
||||
addFileUris(it.uri.toString(), paths)
|
||||
}
|
||||
}
|
||||
|
||||
else -> {
|
||||
File(path).listFiles()?.filter { if (shouldShowHidden) true else !it.name.startsWith('.') }?.forEach {
|
||||
addFileUris(it.absolutePath, paths)
|
||||
}
|
||||
File(path).listFiles()
|
||||
?.filter { if (shouldShowHidden) true else !it.name.startsWith('.') }
|
||||
?.forEach {
|
||||
addFileUris(it.absolutePath, paths)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -401,23 +511,33 @@ class ItemsAdapter(
|
||||
val firstFile = files[0]
|
||||
val source = firstFile.getParentPath()
|
||||
FilePickerDialog(
|
||||
activity,
|
||||
activity.getDefaultCopyDestinationPath(config.shouldShowHidden(), source),
|
||||
false,
|
||||
config.shouldShowHidden(),
|
||||
true,
|
||||
true,
|
||||
activity = activity,
|
||||
currPath = activity.getDefaultCopyDestinationPath(config.shouldShowHidden(), source),
|
||||
pickFile = false,
|
||||
showHidden = config.shouldShowHidden(),
|
||||
showFAB = true,
|
||||
canAddShowHiddenButton = true,
|
||||
showFavoritesButton = true
|
||||
) {
|
||||
config.lastCopyPath = it
|
||||
if (activity.isPathOnRoot(it) || activity.isPathOnRoot(firstFile.path)) {
|
||||
copyMoveRootItems(files, it, isCopyOperation)
|
||||
} else {
|
||||
activity.copyMoveFilesTo(files, source, it, isCopyOperation, false, config.shouldShowHidden()) {
|
||||
activity.copyMoveFilesTo(
|
||||
fileDirItems = files,
|
||||
source = source,
|
||||
destination = it,
|
||||
isCopyOperation = isCopyOperation,
|
||||
copyPhotoVideoOnly = false,
|
||||
copyHidden = config.shouldShowHidden()
|
||||
) {
|
||||
if (!isCopyOperation) {
|
||||
files.forEach { sourceFileDir ->
|
||||
val sourcePath = sourceFileDir.path
|
||||
if (activity.isRestrictedSAFOnlyRoot(sourcePath) && activity.getDoesFilePathExist(sourcePath)) {
|
||||
if (
|
||||
activity.isRestrictedSAFOnlyRoot(sourcePath)
|
||||
&& activity.getDoesFilePathExist(sourcePath)
|
||||
) {
|
||||
activity.deleteFile(sourceFileDir, true) {
|
||||
listener?.refreshFragment()
|
||||
activity.runOnUiThread {
|
||||
@@ -426,8 +546,12 @@ class ItemsAdapter(
|
||||
}
|
||||
} else {
|
||||
val sourceFile = File(sourcePath)
|
||||
if (activity.getDoesFilePathExist(source) && activity.getIsPathDirectory(source) &&
|
||||
sourceFile.list()?.isEmpty() == true && sourceFile.getProperSize(true) == 0L && sourceFile.getFileCount(true) == 0
|
||||
if (
|
||||
activity.getDoesFilePathExist(source)
|
||||
&& activity.getIsPathDirectory(source)
|
||||
&& sourceFile.list()?.isEmpty() == true
|
||||
&& sourceFile.getProperSize(true) == 0L
|
||||
&& sourceFile.getFileCount(true) == 0
|
||||
) {
|
||||
val sourceFolder = sourceFile.toFileDirItem(activity)
|
||||
activity.deleteFile(sourceFolder, true) {
|
||||
@@ -451,7 +575,11 @@ class ItemsAdapter(
|
||||
}
|
||||
}
|
||||
|
||||
private fun copyMoveRootItems(files: ArrayList<FileDirItem>, destinationPath: String, isCopyOperation: Boolean) {
|
||||
private fun copyMoveRootItems(
|
||||
files: ArrayList<FileDirItem>,
|
||||
destinationPath: String,
|
||||
isCopyOperation: Boolean
|
||||
) {
|
||||
activity.toast(R.string.copying)
|
||||
ensureBackgroundThread {
|
||||
val fileCnt = files.size
|
||||
@@ -517,7 +645,11 @@ class ItemsAdapter(
|
||||
return@handleSAFDialog
|
||||
}
|
||||
|
||||
val paths = getSelectedFileDirItems().asSequence().map { it.path }.filter { it.isZipFile() }.toList()
|
||||
val paths = getSelectedFileDirItems()
|
||||
.asSequence()
|
||||
.map { it.path }
|
||||
.filter { it.isZipFile() }
|
||||
.toList()
|
||||
ensureBackgroundThread {
|
||||
tryDecompressingPaths(paths) { success ->
|
||||
activity.runOnUiThread {
|
||||
@@ -534,15 +666,28 @@ class ItemsAdapter(
|
||||
}
|
||||
}
|
||||
|
||||
private fun tryDecompressingPaths(sourcePaths: List<String>, callback: (success: Boolean) -> Unit) {
|
||||
private fun tryDecompressingPaths(
|
||||
sourcePaths: List<String>,
|
||||
callback: (success: Boolean) -> Unit
|
||||
) {
|
||||
sourcePaths.forEach { path ->
|
||||
ZipInputStream(BufferedInputStream(activity.getFileInputStreamSync(path))).use { zipInputStream ->
|
||||
try {
|
||||
val fileDirItems = ArrayList<FileDirItem>()
|
||||
var entry = zipInputStream.nextEntry
|
||||
while (entry != null) {
|
||||
val currPath = if (entry.isDirectory) path else "${path.getParentPath().trimEnd('/')}/${entry.fileName}"
|
||||
val fileDirItem = FileDirItem(currPath, entry.fileName, entry.isDirectory, 0, entry.uncompressedSize)
|
||||
val currPath = if (entry.isDirectory) {
|
||||
path
|
||||
} else {
|
||||
"${path.getParentPath().trimEnd('/')}/${entry.fileName}"
|
||||
}
|
||||
val fileDirItem = FileDirItem(
|
||||
path = currPath,
|
||||
name = entry.fileName,
|
||||
isDirectory = entry.isDirectory,
|
||||
children = 0,
|
||||
size = entry.uncompressedSize
|
||||
)
|
||||
fileDirItems.add(fileDirItem)
|
||||
entry = zipInputStream.nextEntry
|
||||
}
|
||||
@@ -567,9 +712,14 @@ class ItemsAdapter(
|
||||
}
|
||||
}
|
||||
|
||||
private fun decompressPaths(paths: List<String>, conflictResolutions: LinkedHashMap<String, Int>, callback: (success: Boolean) -> Unit) {
|
||||
private fun decompressPaths(
|
||||
paths: List<String>,
|
||||
conflictResolutions: LinkedHashMap<String, Int>,
|
||||
callback: (success: Boolean) -> Unit
|
||||
) {
|
||||
paths.forEach { path ->
|
||||
val zipInputStream = ZipInputStream(BufferedInputStream(activity.getFileInputStreamSync(path)))
|
||||
val zipInputStream =
|
||||
ZipInputStream(BufferedInputStream(activity.getFileInputStreamSync(path)))
|
||||
zipInputStream.use {
|
||||
try {
|
||||
var entry = zipInputStream.nextEntry
|
||||
@@ -582,7 +732,11 @@ class ItemsAdapter(
|
||||
val resolution = getConflictResolution(conflictResolutions, newPath)
|
||||
val doesPathExist = activity.getDoesFilePathExist(newPath)
|
||||
if (doesPathExist && resolution == CONFLICT_OVERWRITE) {
|
||||
val fileDirItem = FileDirItem(newPath, newPath.getFilenameFromPath(), entry.isDirectory)
|
||||
val fileDirItem = FileDirItem(
|
||||
path = newPath,
|
||||
name = newPath.getFilenameFromPath(),
|
||||
isDirectory = entry.isDirectory
|
||||
)
|
||||
if (activity.getIsPathDirectory(path)) {
|
||||
activity.deleteFolderBg(fileDirItem, false) {
|
||||
if (it) {
|
||||
@@ -615,21 +769,30 @@ class ItemsAdapter(
|
||||
}
|
||||
}
|
||||
|
||||
private fun extractEntry(newPath: String, entry: LocalFileHeader, zipInputStream: ZipInputStream) {
|
||||
private fun extractEntry(
|
||||
newPath: String,
|
||||
entry: LocalFileHeader,
|
||||
zipInputStream: ZipInputStream
|
||||
) {
|
||||
if (entry.isDirectory) {
|
||||
if (!activity.createDirectorySync(newPath) && !activity.getDoesFilePathExist(newPath)) {
|
||||
val error = String.format(activity.getString(R.string.could_not_create_file), newPath)
|
||||
val error =
|
||||
String.format(activity.getString(R.string.could_not_create_file), newPath)
|
||||
activity.showErrorToast(error)
|
||||
}
|
||||
} else {
|
||||
val fos = activity.getFileOutputStreamSync(newPath, newPath.getMimeType())
|
||||
if (fos != null) {
|
||||
zipInputStream.copyTo(fos)
|
||||
File(newPath).setLastModified(entry)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getConflictResolution(conflictResolutions: LinkedHashMap<String, Int>, path: String): Int {
|
||||
private fun getConflictResolution(
|
||||
conflictResolutions: LinkedHashMap<String, Int>,
|
||||
path: String
|
||||
): Int {
|
||||
return if (conflictResolutions.size == 1 && conflictResolutions.containsKey("")) {
|
||||
conflictResolutions[""]!!
|
||||
} else if (conflictResolutions.containsKey(path)) {
|
||||
@@ -640,15 +803,21 @@ class ItemsAdapter(
|
||||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
private fun compressPaths(sourcePaths: List<String>, targetPath: String, password: String? = null): Boolean {
|
||||
private fun compressPaths(
|
||||
sourcePaths: List<String>,
|
||||
targetPath: String,
|
||||
password: String? = null
|
||||
): Boolean {
|
||||
val queue = LinkedList<String>()
|
||||
val fos = activity.getFileOutputStreamSync(targetPath, "application/zip") ?: return false
|
||||
|
||||
val zout = password?.let { ZipOutputStream(fos, password.toCharArray()) } ?: ZipOutputStream(fos)
|
||||
val zout =
|
||||
password?.let { ZipOutputStream(fos, password.toCharArray()) } ?: ZipOutputStream(fos)
|
||||
var res: Closeable = fos
|
||||
|
||||
fun zipEntry(name: String) = ZipParameters().also {
|
||||
fun zipEntry(name: String, lastModified: Long) = ZipParameters().also {
|
||||
it.fileNameInZip = name
|
||||
it.lastModifiedFileTime = lastModified
|
||||
if (password != null) {
|
||||
it.isEncryptFiles = true
|
||||
it.encryptionMethod = EncryptionMethod.AES
|
||||
@@ -664,9 +833,11 @@ class ItemsAdapter(
|
||||
queue.push(mainFilePath)
|
||||
if (activity.getIsPathDirectory(mainFilePath)) {
|
||||
name = "${mainFilePath.getFilenameFromPath()}/"
|
||||
val dirModified = File(mainFilePath).lastModified()
|
||||
zout.putNextEntry(
|
||||
ZipParameters().also {
|
||||
it.fileNameInZip = name
|
||||
it.lastModifiedFileTime = dirModified
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -681,9 +852,9 @@ class ItemsAdapter(
|
||||
if (activity.getIsPathDirectory(file.path)) {
|
||||
queue.push(file.path)
|
||||
name = "${name.trimEnd('/')}/"
|
||||
zout.putNextEntry(zipEntry(name))
|
||||
zout.putNextEntry(zipEntry(name, file.modified))
|
||||
} else {
|
||||
zout.putNextEntry(zipEntry(name))
|
||||
zout.putNextEntry(zipEntry(name, file.modified))
|
||||
activity.getFileInputStreamSync(file.path)!!.copyTo(zout)
|
||||
zout.closeEntry()
|
||||
}
|
||||
@@ -696,9 +867,9 @@ class ItemsAdapter(
|
||||
if (activity.getIsPathDirectory(file.absolutePath)) {
|
||||
queue.push(file.absolutePath)
|
||||
name = "${name.trimEnd('/')}/"
|
||||
zout.putNextEntry(zipEntry(name))
|
||||
zout.putNextEntry(zipEntry(name, file.lastModified()))
|
||||
} else {
|
||||
zout.putNextEntry(zipEntry(name))
|
||||
zout.putNextEntry(zipEntry(name, file.lastModified()))
|
||||
activity.getFileInputStreamSync(file.path)!!.copyTo(zout)
|
||||
zout.closeEntry()
|
||||
}
|
||||
@@ -706,8 +877,14 @@ class ItemsAdapter(
|
||||
}
|
||||
|
||||
} else {
|
||||
name = if (base == currentPath) currentPath.getFilenameFromPath() else mainFilePath.relativizeWith(base)
|
||||
zout.putNextEntry(zipEntry(name))
|
||||
name =
|
||||
if (base == currentPath) {
|
||||
currentPath.getFilenameFromPath()
|
||||
} else {
|
||||
mainFilePath.relativizeWith(base)
|
||||
}
|
||||
val fileModified = File(mainFilePath).lastModified()
|
||||
zout.putNextEntry(zipEntry(name, fileModified))
|
||||
activity.getFileInputStreamSync(mainFilePath)!!.copyTo(zout)
|
||||
zout.closeEntry()
|
||||
}
|
||||
@@ -749,35 +926,43 @@ class ItemsAdapter(
|
||||
return
|
||||
}
|
||||
|
||||
activity.handleSAFDialog(SAFPath) {
|
||||
if (!it) {
|
||||
activity.handleSAFDialog(SAFPath) { granted ->
|
||||
if (!granted) {
|
||||
return@handleSAFDialog
|
||||
}
|
||||
|
||||
val files = ArrayList<FileDirItem>(selectedKeys.size)
|
||||
val positions = ArrayList<Int>()
|
||||
selectedKeys.forEach {
|
||||
config.removeFavorite(getItemWithKey(it)?.path ?: "")
|
||||
val key = it
|
||||
val position = listItems.indexOfFirst { it.path.hashCode() == key }
|
||||
if (position != -1) {
|
||||
positions.add(position)
|
||||
files.add(listItems[position])
|
||||
}
|
||||
}
|
||||
|
||||
positions.sortDescending()
|
||||
removeSelectedItems(positions)
|
||||
listener?.deleteFiles(files)
|
||||
positions.forEach {
|
||||
listItems.removeAt(it)
|
||||
ensureBackgroundThread {
|
||||
selectedKeys.forEach { key ->
|
||||
config.removeFavorite(getItemWithKey(key)?.path ?: "")
|
||||
val position = listItems.indexOfFirst { it.path.hashCode() == key }
|
||||
if (position != -1) {
|
||||
positions.add(position)
|
||||
files.add(listItems[position])
|
||||
}
|
||||
}
|
||||
|
||||
positions.sortDescending()
|
||||
activity.runOnUiThread {
|
||||
removeSelectedItems(positions)
|
||||
listener?.deleteFiles(files)
|
||||
positions.forEach {
|
||||
listItems.removeAt(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getFirstSelectedItemPath() = getSelectedFileDirItems().first().path
|
||||
|
||||
private fun getSelectedFileDirItems() = listItems.filter { selectedKeys.contains(it.path.hashCode()) } as ArrayList<FileDirItem>
|
||||
private fun getSelectedFileDirItems(): ArrayList<FileDirItem> {
|
||||
return listItems.filter {
|
||||
selectedKeys.contains(it.path.hashCode())
|
||||
} as ArrayList<FileDirItem>
|
||||
}
|
||||
|
||||
fun updateItems(newItems: ArrayList<ListItem>, highlightText: String = "") {
|
||||
if (newItems.hashCode() != currentItemsHash) {
|
||||
@@ -823,7 +1008,8 @@ class ItemsAdapter(
|
||||
override fun onViewRecycled(holder: ViewHolder) {
|
||||
super.onViewRecycled(holder)
|
||||
if (!activity.isDestroyed && !activity.isFinishing) {
|
||||
val icon = Binding.getByItemViewType(holder.itemViewType, isListViewType).bind(holder.itemView).itemIcon
|
||||
val icon = Binding.getByItemViewType(holder.itemViewType, isListViewType)
|
||||
.bind(holder.itemView).itemIcon
|
||||
if (icon != null) {
|
||||
Glide.with(activity).clear(icon)
|
||||
}
|
||||
@@ -835,16 +1021,35 @@ class ItemsAdapter(
|
||||
binding.apply {
|
||||
if (listItem.isSectionTitle) {
|
||||
itemIcon?.setImageDrawable(folderDrawable)
|
||||
itemSection?.text = if (textToHighlight.isEmpty()) listItem.mName else listItem.mName.highlightTextPart(textToHighlight, properPrimaryColor)
|
||||
itemSection?.text =
|
||||
if (textToHighlight.isEmpty()) {
|
||||
listItem.mName
|
||||
} else {
|
||||
listItem.mName.highlightTextPart(
|
||||
textToHighlight = textToHighlight,
|
||||
color = properPrimaryColor
|
||||
)
|
||||
}
|
||||
itemSection?.setTextColor(textColor)
|
||||
itemSection?.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)
|
||||
} else if (!listItem.isGridTypeDivider) {
|
||||
root.setupViewBackground(activity)
|
||||
itemFrame.isSelected = isSelected
|
||||
val fileName = listItem.name
|
||||
itemName?.text = if (textToHighlight.isEmpty()) fileName else fileName.highlightTextPart(textToHighlight, properPrimaryColor)
|
||||
itemName?.text =
|
||||
if (textToHighlight.isEmpty()) {
|
||||
fileName
|
||||
} else {
|
||||
fileName.highlightTextPart(
|
||||
textToHighlight = textToHighlight,
|
||||
color = properPrimaryColor
|
||||
)
|
||||
}
|
||||
itemName?.setTextColor(textColor)
|
||||
itemName?.setTextSize(TypedValue.COMPLEX_UNIT_PX, if (isListViewType) fontSize else smallerFontSize)
|
||||
itemName?.setTextSize(
|
||||
TypedValue.COMPLEX_UNIT_PX,
|
||||
if (isListViewType) fontSize else smallerFontSize
|
||||
)
|
||||
|
||||
itemDetails?.setTextColor(textColor)
|
||||
itemDetails?.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)
|
||||
@@ -873,7 +1078,10 @@ class ItemsAdapter(
|
||||
itemDate?.beVisible()
|
||||
itemDate?.text = listItem.modified.formatDate(activity, dateFormat, timeFormat)
|
||||
|
||||
val drawable = fileDrawables.getOrElse(fileName.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable })
|
||||
val drawable = fileDrawables.getOrElse(
|
||||
key = fileName.substringAfterLast(".").lowercase(Locale.getDefault()),
|
||||
defaultValue = { fileDrawable }
|
||||
)
|
||||
val options = RequestOptions()
|
||||
.signature(listItem.getKey())
|
||||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||
@@ -898,14 +1106,18 @@ class ItemsAdapter(
|
||||
return activity.resources.getQuantityString(R.plurals.items, children, children)
|
||||
}
|
||||
|
||||
private fun getOTGPublicPath(itemToLoad: String) =
|
||||
"${baseConfig.OTGTreeUri}/document/${baseConfig.OTGPartition}%3A${itemToLoad.substring(baseConfig.OTGPath.length).replace("/", "%2F")}"
|
||||
private fun getOTGPublicPath(itemToLoad: String): String {
|
||||
return "${baseConfig.OTGTreeUri}/document/${baseConfig.OTGPartition}%3A${
|
||||
itemToLoad.substring(baseConfig.OTGPath.length).replace("/", "%2F")
|
||||
}"
|
||||
}
|
||||
|
||||
private fun getImagePathToLoad(path: String): Any {
|
||||
var itemToLoad = if (path.endsWith(".apk", true)) {
|
||||
val packageInfo = activity.packageManager.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES)
|
||||
if (packageInfo != null) {
|
||||
val appInfo = packageInfo.applicationInfo
|
||||
val packageInfo =
|
||||
activity.packageManager.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES)
|
||||
val appInfo = packageInfo?.applicationInfo
|
||||
if (appInfo != null) {
|
||||
appInfo.sourceDir = path
|
||||
appInfo.publicSourceDir = path
|
||||
appInfo.loadIcon(activity.packageManager)
|
||||
@@ -926,13 +1138,16 @@ class ItemsAdapter(
|
||||
}
|
||||
|
||||
fun initDrawables() {
|
||||
folderDrawable = resources.getColoredDrawableWithColor(R.drawable.ic_folder_vector, textColor)
|
||||
folderDrawable =
|
||||
resources.getColoredDrawableWithColor(R.drawable.ic_folder_vector, properPrimaryColor)
|
||||
folderDrawable.alpha = 180
|
||||
fileDrawable = resources.getDrawable(R.drawable.ic_file_generic)
|
||||
fileDrawables = getFilePlaceholderDrawables(activity)
|
||||
}
|
||||
|
||||
override fun onChange(position: Int) = listItems.getOrNull(position)?.getBubbleText(activity, dateFormat, timeFormat) ?: ""
|
||||
override fun onChange(position: Int): String {
|
||||
return listItems.getOrNull(position)?.getBubbleText(activity, dateFormat, timeFormat) ?: ""
|
||||
}
|
||||
|
||||
private sealed interface Binding {
|
||||
companion object {
|
||||
@@ -953,12 +1168,23 @@ class ItemsAdapter(
|
||||
}
|
||||
}
|
||||
|
||||
fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding
|
||||
fun inflate(
|
||||
layoutInflater: LayoutInflater,
|
||||
viewGroup: ViewGroup,
|
||||
attachToRoot: Boolean
|
||||
): ItemViewBinding
|
||||
|
||||
fun bind(view: View): ItemViewBinding
|
||||
|
||||
data object ItemSection : Binding {
|
||||
override fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding {
|
||||
return ItemSectionBindingAdapter(ItemSectionBinding.inflate(layoutInflater, viewGroup, attachToRoot))
|
||||
override fun inflate(
|
||||
layoutInflater: LayoutInflater,
|
||||
viewGroup: ViewGroup,
|
||||
attachToRoot: Boolean
|
||||
): ItemViewBinding {
|
||||
return ItemSectionBindingAdapter(
|
||||
ItemSectionBinding.inflate(layoutInflater, viewGroup, attachToRoot)
|
||||
)
|
||||
}
|
||||
|
||||
override fun bind(view: View): ItemViewBinding {
|
||||
@@ -967,8 +1193,14 @@ class ItemsAdapter(
|
||||
}
|
||||
|
||||
data object ItemEmpty : Binding {
|
||||
override fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding {
|
||||
return ItemEmptyBindingAdapter(ItemEmptyBinding.inflate(layoutInflater, viewGroup, attachToRoot))
|
||||
override fun inflate(
|
||||
layoutInflater: LayoutInflater,
|
||||
viewGroup: ViewGroup,
|
||||
attachToRoot: Boolean
|
||||
): ItemViewBinding {
|
||||
return ItemEmptyBindingAdapter(
|
||||
ItemEmptyBinding.inflate(layoutInflater, viewGroup, attachToRoot)
|
||||
)
|
||||
}
|
||||
|
||||
override fun bind(view: View): ItemViewBinding {
|
||||
@@ -977,8 +1209,14 @@ class ItemsAdapter(
|
||||
}
|
||||
|
||||
data object ItemFileDirList : Binding {
|
||||
override fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding {
|
||||
return ItemFileDirListBindingAdapter(ItemFileDirListBinding.inflate(layoutInflater, viewGroup, attachToRoot))
|
||||
override fun inflate(
|
||||
layoutInflater: LayoutInflater,
|
||||
viewGroup: ViewGroup,
|
||||
attachToRoot: Boolean
|
||||
): ItemViewBinding {
|
||||
return ItemFileDirListBindingAdapter(
|
||||
ItemFileDirListBinding.inflate(layoutInflater, viewGroup, attachToRoot)
|
||||
)
|
||||
}
|
||||
|
||||
override fun bind(view: View): ItemViewBinding {
|
||||
@@ -987,8 +1225,14 @@ class ItemsAdapter(
|
||||
}
|
||||
|
||||
data object ItemDirGrid : Binding {
|
||||
override fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding {
|
||||
return ItemDirGridBindingAdapter(ItemDirGridBinding.inflate(layoutInflater, viewGroup, attachToRoot))
|
||||
override fun inflate(
|
||||
layoutInflater: LayoutInflater,
|
||||
viewGroup: ViewGroup,
|
||||
attachToRoot: Boolean
|
||||
): ItemViewBinding {
|
||||
return ItemDirGridBindingAdapter(
|
||||
ItemDirGridBinding.inflate(layoutInflater, viewGroup, attachToRoot)
|
||||
)
|
||||
}
|
||||
|
||||
override fun bind(view: View): ItemViewBinding {
|
||||
@@ -997,8 +1241,14 @@ class ItemsAdapter(
|
||||
}
|
||||
|
||||
data object ItemFileGrid : Binding {
|
||||
override fun inflate(layoutInflater: LayoutInflater, viewGroup: ViewGroup, attachToRoot: Boolean): ItemViewBinding {
|
||||
return ItemFileGridBindingAdapter(ItemFileGridBinding.inflate(layoutInflater, viewGroup, attachToRoot))
|
||||
override fun inflate(
|
||||
layoutInflater: LayoutInflater,
|
||||
viewGroup: ViewGroup,
|
||||
attachToRoot: Boolean
|
||||
): ItemViewBinding {
|
||||
return ItemFileGridBindingAdapter(
|
||||
ItemFileGridBinding.inflate(layoutInflater, viewGroup, attachToRoot)
|
||||
)
|
||||
}
|
||||
|
||||
override fun bind(view: View): ItemViewBinding {
|
||||
@@ -1040,7 +1290,9 @@ class ItemsAdapter(
|
||||
override fun getRoot(): View = binding.root
|
||||
}
|
||||
|
||||
private class ItemFileDirListBindingAdapter(val binding: ItemFileDirListBinding) : ItemViewBinding {
|
||||
private class ItemFileDirListBindingAdapter(
|
||||
val binding: ItemFileDirListBinding
|
||||
) : ItemViewBinding {
|
||||
override val itemFrame: FrameLayout = binding.itemFrame
|
||||
override val itemName: TextView = binding.itemName
|
||||
override val itemIcon: ImageView = binding.itemIcon
|
||||
|
||||
@@ -22,7 +22,8 @@ class ViewPagerAdapter(val activity: SimpleActivity, val tabsToShow: ArrayList<I
|
||||
|
||||
(view as MyViewPagerFragment<*>).apply {
|
||||
val isPickRingtoneIntent = activity.intent.action == RingtoneManager.ACTION_RINGTONE_PICKER
|
||||
val isGetContentIntent = activity.intent.action == Intent.ACTION_GET_CONTENT || activity.intent.action == Intent.ACTION_PICK
|
||||
val isGetContentIntent = activity.intent.action == Intent.ACTION_GET_CONTENT
|
||||
|| activity.intent.action == Intent.ACTION_PICK
|
||||
val isCreateDocumentIntent = activity.intent.action == Intent.ACTION_CREATE_DOCUMENT
|
||||
val allowPickingMultipleIntent = activity.intent.getBooleanExtra(Intent.EXTRA_ALLOW_MULTIPLE, false)
|
||||
val getContentMimeType = if (isGetContentIntent) {
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
package org.fossify.filemanager.dialogs
|
||||
|
||||
import org.fossify.commons.activities.BaseSimpleActivity
|
||||
import org.fossify.commons.extensions.beGone
|
||||
import org.fossify.commons.extensions.getAlertDialogBuilder
|
||||
import org.fossify.commons.extensions.setupDialogStuff
|
||||
import org.fossify.commons.helpers.TAB_FILES
|
||||
import org.fossify.commons.helpers.TAB_RECENT_FILES
|
||||
import org.fossify.commons.helpers.TAB_STORAGE_ANALYSIS
|
||||
import org.fossify.commons.helpers.isOreoPlus
|
||||
import org.fossify.commons.views.MyAppCompatCheckbox
|
||||
import org.fossify.filemanager.R
|
||||
import org.fossify.filemanager.databinding.DialogManageVisibleTabsBinding
|
||||
@@ -25,10 +23,6 @@ class ManageVisibleTabsDialog(val activity: BaseSimpleActivity) {
|
||||
put(TAB_STORAGE_ANALYSIS, R.id.manage_visible_tabs_storage_analysis)
|
||||
}
|
||||
|
||||
if (!isOreoPlus()) {
|
||||
binding.manageVisibleTabsStorageAnalysis.beGone()
|
||||
}
|
||||
|
||||
val showTabs = activity.config.showTabs
|
||||
for ((key, value) in tabs) {
|
||||
binding.root.findViewById<MyAppCompatCheckbox>(value).isChecked = showTabs and key != 0
|
||||
|
||||
@@ -2,15 +2,22 @@ package org.fossify.filemanager.extensions
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.view.View
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.content.FileProvider
|
||||
import org.fossify.commons.activities.BaseSimpleActivity
|
||||
import org.fossify.commons.extensions.*
|
||||
import org.fossify.commons.helpers.isNougatPlus
|
||||
import org.fossify.commons.extensions.getFilenameFromPath
|
||||
import org.fossify.commons.extensions.getMimeTypeFromUri
|
||||
import org.fossify.commons.extensions.getParentPath
|
||||
import org.fossify.commons.extensions.launchActivityIntent
|
||||
import org.fossify.commons.extensions.openPathIntent
|
||||
import org.fossify.commons.extensions.renameFile
|
||||
import org.fossify.commons.extensions.setAsIntent
|
||||
import org.fossify.commons.extensions.sharePathsIntent
|
||||
import org.fossify.filemanager.BuildConfig
|
||||
import org.fossify.filemanager.helpers.*
|
||||
import org.fossify.filemanager.helpers.OPEN_AS_AUDIO
|
||||
import org.fossify.filemanager.helpers.OPEN_AS_DEFAULT
|
||||
import org.fossify.filemanager.helpers.OPEN_AS_IMAGE
|
||||
import org.fossify.filemanager.helpers.OPEN_AS_TEXT
|
||||
import org.fossify.filemanager.helpers.OPEN_AS_VIDEO
|
||||
import java.io.File
|
||||
|
||||
fun Activity.sharePaths(paths: ArrayList<String>) {
|
||||
@@ -19,11 +26,9 @@ fun Activity.sharePaths(paths: ArrayList<String>) {
|
||||
|
||||
fun Activity.tryOpenPathIntent(path: String, forceChooser: Boolean, openAsType: Int = OPEN_AS_DEFAULT, finishActivity: Boolean = false) {
|
||||
if (!forceChooser && path.endsWith(".apk", true)) {
|
||||
val uri = if (isNougatPlus()) {
|
||||
FileProvider.getUriForFile(this, "${BuildConfig.APPLICATION_ID}.provider", File(path))
|
||||
} else {
|
||||
Uri.fromFile(File(path))
|
||||
}
|
||||
val uri = FileProvider.getUriForFile(
|
||||
this, "${BuildConfig.APPLICATION_ID}.provider", File(path)
|
||||
)
|
||||
|
||||
Intent().apply {
|
||||
action = Intent.ACTION_VIEW
|
||||
@@ -78,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
|
||||
}
|
||||
@@ -4,7 +4,6 @@ import android.content.Context
|
||||
import android.os.storage.StorageManager
|
||||
import org.fossify.commons.extensions.isPathOnOTG
|
||||
import org.fossify.commons.extensions.isPathOnSD
|
||||
import org.fossify.commons.helpers.isNougatPlus
|
||||
import org.fossify.filemanager.helpers.Config
|
||||
import org.fossify.filemanager.helpers.PRIMARY_VOLUME_NAME
|
||||
import java.util.Locale
|
||||
@@ -15,15 +14,13 @@ fun Context.isPathOnRoot(path: String) = !(path.startsWith(config.internalStorag
|
||||
|
||||
fun Context.getAllVolumeNames(): List<String> {
|
||||
val volumeNames = mutableListOf(PRIMARY_VOLUME_NAME)
|
||||
if (isNougatPlus()) {
|
||||
val storageManager = getSystemService(Context.STORAGE_SERVICE) as StorageManager
|
||||
getExternalFilesDirs(null)
|
||||
.mapNotNull { storageManager.getStorageVolume(it) }
|
||||
.filterNot { it.isPrimary }
|
||||
.mapNotNull { it.uuid?.lowercase(Locale.US) }
|
||||
.forEach {
|
||||
volumeNames.add(it)
|
||||
}
|
||||
}
|
||||
val storageManager = getSystemService(Context.STORAGE_SERVICE) as StorageManager
|
||||
getExternalFilesDirs(null)
|
||||
.mapNotNull { storageManager.getStorageVolume(it) }
|
||||
.filterNot { it.isPrimary }
|
||||
.mapNotNull { it.uuid?.lowercase(Locale.US) }
|
||||
.forEach {
|
||||
volumeNames.add(it)
|
||||
}
|
||||
return volumeNames
|
||||
}
|
||||
@@ -1,3 +1,15 @@
|
||||
package org.fossify.filemanager.extensions
|
||||
|
||||
fun String.isZipFile() = endsWith(".zip", true)
|
||||
|
||||
fun String.isPathInHiddenFolder(): Boolean {
|
||||
val parts = split("/")
|
||||
for (i in 1 until parts.size - 1) {
|
||||
val part = parts[i]
|
||||
val isHidden = part.startsWith(".") && part != "." && part != ".." && part.isNotEmpty()
|
||||
if (isHidden) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.fossify.filemanager.extensions
|
||||
|
||||
import net.lingala.zip4j.model.LocalFileHeader
|
||||
import java.io.File
|
||||
|
||||
fun File.setLastModified(localFileHeader: LocalFileHeader) {
|
||||
setLastModified(localFileHeader.lastModifiedOrCurrentTimeMillis)
|
||||
}
|
||||
|
||||
private val LocalFileHeader.lastModifiedOrCurrentTimeMillis
|
||||
get() = if (lastModifiedTimeEpoch == 0L) {
|
||||
System.currentTimeMillis()
|
||||
} else {
|
||||
lastModifiedTimeEpoch
|
||||
}
|
||||
@@ -186,7 +186,8 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF
|
||||
if (activity?.isDestroyed == false && activity?.isFinishing == false) {
|
||||
val config = context!!.config
|
||||
if (context.isRestrictedSAFOnlyRoot(path)) {
|
||||
activity?.handleAndroidSAFDialog(path) {
|
||||
activity?.runOnUiThread { hideProgressBar() }
|
||||
activity?.handleAndroidSAFDialog(path, openInSystemAppAllowed = true) {
|
||||
if (!it) {
|
||||
activity?.toast(R.string.no_storage_permissions)
|
||||
return@handleAndroidSAFDialog
|
||||
@@ -256,7 +257,7 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF
|
||||
}
|
||||
|
||||
var lastModified = lastModifieds.remove(curPath)
|
||||
val isDirectory = if (lastModified != null) false else file.isDirectory
|
||||
val isDirectory = file.isDirectory
|
||||
val children = if (isDirectory && getProperChildCount) file.getDirectChildrenCount(context, showHidden) else 0
|
||||
val size = if (isDirectory) {
|
||||
if (isSortingBySize) {
|
||||
@@ -376,6 +377,7 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF
|
||||
return files
|
||||
}
|
||||
|
||||
val normalizedText = text.normalizeString()
|
||||
val sorting = context!!.config.getFolderSorting(path)
|
||||
FileDirItem.sorting = context!!.config.getFolderSorting(currentPath)
|
||||
val isSortingBySize = sorting and SORT_BY_SIZE != 0
|
||||
@@ -385,7 +387,7 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF
|
||||
}
|
||||
|
||||
if (it.isDirectory) {
|
||||
if (it.name.contains(text, true)) {
|
||||
if (it.name.normalizeString().contains(normalizedText, true)) {
|
||||
val fileDirItem = getListItemFromFile(it, isSortingBySize, HashMap(), false)
|
||||
if (fileDirItem != null) {
|
||||
files.add(fileDirItem)
|
||||
@@ -394,7 +396,7 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF
|
||||
|
||||
files.addAll(searchFiles(text, it.absolutePath))
|
||||
} else {
|
||||
if (it.name.contains(text, true)) {
|
||||
if (it.name.normalizeString().contains(normalizedText, true)) {
|
||||
val fileDirItem = getListItemFromFile(it, isSortingBySize, HashMap(), false)
|
||||
if (fileDirItem != null) {
|
||||
files.add(fileDirItem)
|
||||
|
||||
@@ -6,11 +6,17 @@ import android.provider.MediaStore.Files
|
||||
import android.provider.MediaStore.Files.FileColumns
|
||||
import android.util.AttributeSet
|
||||
import androidx.core.os.bundleOf
|
||||
import org.fossify.commons.extensions.*
|
||||
import org.fossify.commons.extensions.areSystemAnimationsEnabled
|
||||
import org.fossify.commons.extensions.beVisibleIf
|
||||
import org.fossify.commons.extensions.getDoesFilePathExist
|
||||
import org.fossify.commons.extensions.getFilenameFromPath
|
||||
import org.fossify.commons.extensions.getLongValue
|
||||
import org.fossify.commons.extensions.getStringValue
|
||||
import org.fossify.commons.extensions.normalizeString
|
||||
import org.fossify.commons.extensions.showErrorToast
|
||||
import org.fossify.commons.helpers.VIEW_TYPE_GRID
|
||||
import org.fossify.commons.helpers.VIEW_TYPE_LIST
|
||||
import org.fossify.commons.helpers.ensureBackgroundThread
|
||||
import org.fossify.commons.helpers.isOreoPlus
|
||||
import org.fossify.commons.models.FileDirItem
|
||||
import org.fossify.commons.views.MyGridLayoutManager
|
||||
import org.fossify.commons.views.MyRecyclerView
|
||||
@@ -19,6 +25,7 @@ import org.fossify.filemanager.activities.SimpleActivity
|
||||
import org.fossify.filemanager.adapters.ItemsAdapter
|
||||
import org.fossify.filemanager.databinding.RecentsFragmentBinding
|
||||
import org.fossify.filemanager.extensions.config
|
||||
import org.fossify.filemanager.extensions.isPathInHiddenFolder
|
||||
import org.fossify.filemanager.helpers.MAX_COLUMN_COUNT
|
||||
import org.fossify.filemanager.interfaces.ItemOperationsListener
|
||||
import org.fossify.filemanager.models.ListItem
|
||||
@@ -156,17 +163,13 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
||||
)
|
||||
|
||||
try {
|
||||
if (isOreoPlus()) {
|
||||
val queryArgs = bundleOf(
|
||||
ContentResolver.QUERY_ARG_LIMIT to RECENTS_LIMIT,
|
||||
ContentResolver.QUERY_ARG_SORT_COLUMNS to arrayOf(FileColumns.DATE_MODIFIED),
|
||||
ContentResolver.QUERY_ARG_SORT_DIRECTION to ContentResolver.QUERY_SORT_DIRECTION_DESCENDING
|
||||
)
|
||||
context?.contentResolver?.query(uri, projection, queryArgs, null)
|
||||
} else {
|
||||
val sortOrder = "${FileColumns.DATE_MODIFIED} DESC LIMIT $RECENTS_LIMIT"
|
||||
context?.contentResolver?.query(uri, projection, null, null, sortOrder)
|
||||
}?.use { cursor ->
|
||||
val queryArgs = bundleOf(
|
||||
ContentResolver.QUERY_ARG_LIMIT to RECENTS_LIMIT,
|
||||
ContentResolver.QUERY_ARG_SORT_COLUMNS to arrayOf(FileColumns.DATE_MODIFIED),
|
||||
ContentResolver.QUERY_ARG_SORT_DIRECTION to ContentResolver.QUERY_SORT_DIRECTION_DESCENDING
|
||||
)
|
||||
|
||||
context?.contentResolver?.query(uri, projection, queryArgs, null)?.use { cursor ->
|
||||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
val path = cursor.getStringValue(FileColumns.DATA)
|
||||
@@ -177,9 +180,11 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
||||
val name = cursor.getStringValue(FileColumns.DISPLAY_NAME) ?: path.getFilenameFromPath()
|
||||
val size = cursor.getLongValue(FileColumns.SIZE)
|
||||
val modified = cursor.getLongValue(FileColumns.DATE_MODIFIED) * 1000
|
||||
val fileDirItem = ListItem(path, name, false, 0, size, modified, false, false)
|
||||
if ((showHidden || !name.startsWith(".")) && activity?.getDoesFilePathExist(path) == true) {
|
||||
val isHiddenFile = name.startsWith(".")
|
||||
val shouldShow = showHidden || (!isHiddenFile && !path.isPathInHiddenFolder())
|
||||
if (shouldShow && activity?.getDoesFilePathExist(path) == true) {
|
||||
if (wantedMimeTypes.any { isProperMimeType(it, path, false) }) {
|
||||
val fileDirItem = ListItem(path, name, false, 0, size, modified, false, false)
|
||||
listItems.add(fileDirItem)
|
||||
}
|
||||
}
|
||||
@@ -241,7 +246,11 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
||||
|
||||
override fun searchQueryChanged(text: String) {
|
||||
lastSearchedText = text
|
||||
val filtered = filesIgnoringSearch.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList<ListItem>
|
||||
val normalizedText = text.normalizeString()
|
||||
val filtered = filesIgnoringSearch.filter {
|
||||
it.mName.normalizeString().contains(normalizedText, true)
|
||||
}.toMutableList() as ArrayList<ListItem>
|
||||
|
||||
binding.apply {
|
||||
(recentsList.adapter as? ItemsAdapter)?.updateItems(filtered, text)
|
||||
recentsPlaceholder.beVisibleIf(filtered.isEmpty())
|
||||
|
||||
@@ -6,7 +6,6 @@ import android.app.usage.StorageStatsManager
|
||||
import android.content.ContentResolver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.media.MediaScannerConnection
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.os.storage.StorageManager
|
||||
@@ -17,8 +16,27 @@ import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.core.view.children
|
||||
import androidx.core.view.isVisible
|
||||
import org.fossify.commons.extensions.*
|
||||
import org.fossify.commons.helpers.*
|
||||
import org.fossify.commons.extensions.adjustAlpha
|
||||
import org.fossify.commons.extensions.applyColorFilter
|
||||
import org.fossify.commons.extensions.beGone
|
||||
import org.fossify.commons.extensions.beVisible
|
||||
import org.fossify.commons.extensions.beVisibleIf
|
||||
import org.fossify.commons.extensions.fadeIn
|
||||
import org.fossify.commons.extensions.formatSize
|
||||
import org.fossify.commons.extensions.getIsPathDirectory
|
||||
import org.fossify.commons.extensions.getLongValue
|
||||
import org.fossify.commons.extensions.getProperBackgroundColor
|
||||
import org.fossify.commons.extensions.getProperPrimaryColor
|
||||
import org.fossify.commons.extensions.getStringValue
|
||||
import org.fossify.commons.extensions.normalizeString
|
||||
import org.fossify.commons.extensions.queryCursor
|
||||
import org.fossify.commons.extensions.showErrorToast
|
||||
import org.fossify.commons.extensions.updateTextColors
|
||||
import org.fossify.commons.helpers.LOWER_ALPHA
|
||||
import org.fossify.commons.helpers.SHORT_ANIMATION_DURATION
|
||||
import org.fossify.commons.helpers.VIEW_TYPE_GRID
|
||||
import org.fossify.commons.helpers.VIEW_TYPE_LIST
|
||||
import org.fossify.commons.helpers.ensureBackgroundThread
|
||||
import org.fossify.commons.models.FileDirItem
|
||||
import org.fossify.commons.views.MyGridLayoutManager
|
||||
import org.fossify.filemanager.R
|
||||
@@ -30,10 +48,21 @@ import org.fossify.filemanager.databinding.StorageFragmentBinding
|
||||
import org.fossify.filemanager.extensions.config
|
||||
import org.fossify.filemanager.extensions.formatSizeThousand
|
||||
import org.fossify.filemanager.extensions.getAllVolumeNames
|
||||
import org.fossify.filemanager.helpers.*
|
||||
import org.fossify.filemanager.helpers.ARCHIVES
|
||||
import org.fossify.filemanager.helpers.AUDIO
|
||||
import org.fossify.filemanager.helpers.DOCUMENTS
|
||||
import org.fossify.filemanager.helpers.IMAGES
|
||||
import org.fossify.filemanager.helpers.OTHERS
|
||||
import org.fossify.filemanager.helpers.PRIMARY_VOLUME_NAME
|
||||
import org.fossify.filemanager.helpers.SHOW_MIMETYPE
|
||||
import org.fossify.filemanager.helpers.VIDEOS
|
||||
import org.fossify.filemanager.helpers.VOLUME_NAME
|
||||
import org.fossify.filemanager.helpers.archiveMimeTypes
|
||||
import org.fossify.filemanager.helpers.extraAudioMimeTypes
|
||||
import org.fossify.filemanager.helpers.extraDocumentMimeTypes
|
||||
import org.fossify.filemanager.helpers.getListItemsFromFileDirItems
|
||||
import org.fossify.filemanager.interfaces.ItemOperationsListener
|
||||
import org.fossify.filemanager.models.ListItem
|
||||
import java.io.File
|
||||
import java.util.Locale
|
||||
|
||||
class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment<MyViewPagerFragment.StorageInnerBinding>(context, attributeSet),
|
||||
@@ -67,7 +96,6 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
||||
}
|
||||
|
||||
totalSpace.text = String.format(context.getString(R.string.total_storage), "…")
|
||||
getSizes(volumeName)
|
||||
|
||||
if (volumeNames.size > 1) {
|
||||
root.children.forEach { it.beGone() }
|
||||
@@ -127,8 +155,7 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
||||
val tealColor = context.resources.getColor(R.color.md_teal_700)
|
||||
val pinkColor = context.resources.getColor(R.color.md_pink_700)
|
||||
|
||||
volumes.entries.forEach { (it, volumeBinding) ->
|
||||
getSizes(it)
|
||||
volumes.values.forEach { volumeBinding ->
|
||||
volumeBinding.apply {
|
||||
mainStorageUsageProgressbar.setIndicatorColor(properPrimaryColor)
|
||||
mainStorageUsageProgressbar.trackColor = properPrimaryColor.adjustAlpha(LOWER_ALPHA)
|
||||
@@ -175,10 +202,6 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
||||
}
|
||||
|
||||
private fun getSizes(volumeName: String) {
|
||||
if (!isOreoPlus()) {
|
||||
return
|
||||
}
|
||||
|
||||
ensureBackgroundThread {
|
||||
val filesSize = getSizesByMimeType(volumeName)
|
||||
val fileSizeImages = filesSize[IMAGES]!!
|
||||
@@ -286,24 +309,14 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
||||
if (storageVolume.isPrimary) {
|
||||
// internal storage
|
||||
volumeName = PRIMARY_VOLUME_NAME
|
||||
if (isOreoPlus()) {
|
||||
val storageStatsManager = context.getSystemService(AppCompatActivity.STORAGE_STATS_SERVICE) as StorageStatsManager
|
||||
val uuid = StorageManager.UUID_DEFAULT
|
||||
totalStorageSpace = storageStatsManager.getTotalBytes(uuid)
|
||||
freeStorageSpace = storageStatsManager.getFreeBytes(uuid)
|
||||
} else {
|
||||
totalStorageSpace = file.totalSpace
|
||||
freeStorageSpace = file.freeSpace
|
||||
}
|
||||
val storageStatsManager = context.getSystemService(AppCompatActivity.STORAGE_STATS_SERVICE) as StorageStatsManager
|
||||
val uuid = StorageManager.UUID_DEFAULT
|
||||
totalStorageSpace = storageStatsManager.getTotalBytes(uuid)
|
||||
freeStorageSpace = storageStatsManager.getFreeBytes(uuid)
|
||||
} else {
|
||||
volumeName = storageVolume.uuid!!.lowercase(Locale.US)
|
||||
totalStorageSpace = file.totalSpace
|
||||
freeStorageSpace = file.freeSpace
|
||||
post {
|
||||
ensureBackgroundThread {
|
||||
scanVolume(volumeName, file)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
post {
|
||||
@@ -321,28 +334,14 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
||||
freeSpaceValue.text = freeStorageSpace.formatSizeThousand()
|
||||
totalSpace.text = String.format(context.getString(R.string.total_storage), totalStorageSpace.formatSizeThousand())
|
||||
freeSpaceLabel.beVisible()
|
||||
getSizes(volumeName)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun scanVolume(volumeName: String, root: File) {
|
||||
val paths = mutableListOf<String>()
|
||||
if (context.isPathOnSD(root.path)) {
|
||||
File(context.sdCardPath).walkBottomUp().forEach {
|
||||
paths.add(it.path)
|
||||
}
|
||||
}
|
||||
var callbackCount = 0
|
||||
MediaScannerConnection.scanFile(context, paths.toTypedArray(), null) { _, _ ->
|
||||
callbackCount++
|
||||
if (callbackCount == paths.size) {
|
||||
getSizes(volumeName)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun searchQueryChanged(text: String) {
|
||||
val normalizedText = text.normalizeString()
|
||||
lastSearchedText = text
|
||||
binding.apply {
|
||||
if (text.isNotEmpty()) {
|
||||
@@ -367,8 +366,10 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
||||
} else {
|
||||
showProgressBar()
|
||||
ensureBackgroundThread {
|
||||
val start = System.currentTimeMillis()
|
||||
val filtered = allDeviceListItems.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList<ListItem>
|
||||
val filtered = allDeviceListItems.filter {
|
||||
it.mName.normalizeString().contains(normalizedText, true)
|
||||
}.toMutableList() as ArrayList<ListItem>
|
||||
|
||||
if (lastSearchedText != text) {
|
||||
return@ensureBackgroundThread
|
||||
}
|
||||
@@ -428,16 +429,12 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
||||
)
|
||||
|
||||
try {
|
||||
if (isOreoPlus()) {
|
||||
val queryArgs = bundleOf(
|
||||
ContentResolver.QUERY_ARG_SORT_COLUMNS to arrayOf(MediaStore.Files.FileColumns.DATE_MODIFIED),
|
||||
ContentResolver.QUERY_ARG_SORT_DIRECTION to ContentResolver.QUERY_SORT_DIRECTION_DESCENDING
|
||||
)
|
||||
context?.contentResolver?.query(uri, projection, queryArgs, null)
|
||||
} else {
|
||||
val sortOrder = "${MediaStore.Files.FileColumns.DATE_MODIFIED} DESC"
|
||||
context?.contentResolver?.query(uri, projection, null, null, sortOrder)
|
||||
}?.use { cursor ->
|
||||
val queryArgs = bundleOf(
|
||||
ContentResolver.QUERY_ARG_SORT_COLUMNS to arrayOf(MediaStore.Files.FileColumns.DATE_MODIFIED),
|
||||
ContentResolver.QUERY_ARG_SORT_DIRECTION to ContentResolver.QUERY_SORT_DIRECTION_DESCENDING
|
||||
)
|
||||
|
||||
context?.contentResolver?.query(uri, projection, queryArgs, null)?.use { cursor ->
|
||||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
try {
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
package org.fossify.filemanager.views
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
import com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller
|
||||
|
||||
class MySwipeRefreshLayout @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
) : SwipeRefreshLayout(context, attrs) {
|
||||
override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
|
||||
// Setting "isEnabled = false" is recommended for users of this ViewGroup
|
||||
// who who are not interested in the pull to refresh functionality
|
||||
// Setting this easily avoids executing code needlessly before the check for "canChildScrollUp".
|
||||
if (!isEnabled) {
|
||||
return false
|
||||
}
|
||||
return super.onInterceptTouchEvent(ev)
|
||||
}
|
||||
|
||||
override fun onStartNestedScroll(child: View, target: View, nestedScrollAxes: Int): Boolean {
|
||||
// Ignoring nested scrolls from descendants.
|
||||
// Allowing descendants to trigger nested scrolls would defeat the purpose of this class
|
||||
// and result in pull to refresh to happen for all movements on the Y axis
|
||||
// (even as part of scale/quick scale gestures) while also doubling the throbber with the overscroll shadow.
|
||||
return if (isEnabled) {
|
||||
return false
|
||||
} else {
|
||||
super.onStartNestedScroll(child, target, nestedScrollAxes)
|
||||
}
|
||||
}
|
||||
|
||||
override fun canChildScrollUp(): Boolean {
|
||||
val directChild = getChildAt(0)
|
||||
return when (directChild) {
|
||||
is RecyclerViewFastScroller -> {
|
||||
val innerRecyclerView = directChild.getChildAt(0)
|
||||
innerRecyclerView?.canScrollVertically(-1) == true
|
||||
}
|
||||
else -> super.canChildScrollUp()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,22 +5,29 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/decompress_toolbar"
|
||||
<org.fossify.commons.views.MyAppBarLayout
|
||||
android:id="@+id/decompress_appbar"
|
||||
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" />
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/decompress_toolbar"
|
||||
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
|
||||
android:id="@+id/decompress_wrapper"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="?attr/actionBarSize"
|
||||
android:fillViewport="true"
|
||||
android:scrollbars="none">
|
||||
android:scrollbars="none"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||
|
||||
<org.fossify.commons.views.MyRecyclerView
|
||||
android:id="@+id/decompress_list"
|
||||
@@ -32,4 +39,12 @@
|
||||
app:layoutManager="org.fossify.commons.views.MyLinearLayoutManager" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<com.google.android.material.progressindicator.CircularProgressIndicator
|
||||
android:id="@+id/progress_indicator"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:indeterminate="true"
|
||||
android:visibility="gone" />
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
@@ -6,22 +6,29 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/manage_favorites_toolbar"
|
||||
<org.fossify.commons.views.MyAppBarLayout
|
||||
android:id="@+id/manage_favorites_appbar"
|
||||
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" />
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/manage_favorites_toolbar"
|
||||
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
|
||||
android:id="@+id/manage_favorites_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="?attr/actionBarSize"
|
||||
android:fillViewport="true"
|
||||
android:scrollbars="none">
|
||||
android:scrollbars="none"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||
|
||||
<org.fossify.commons.views.MyRecyclerView
|
||||
android:id="@+id/manage_favorites_list"
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
android:id="@+id/main_holder"
|
||||
android:layout_width="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
|
||||
android:id="@+id/main_view_pager"
|
||||
|
||||
@@ -5,21 +5,28 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/mimetypes_toolbar"
|
||||
<org.fossify.commons.views.MyAppBarLayout
|
||||
android:id="@+id/mimetypes_appbar"
|
||||
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" />
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
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
|
||||
android:id="@+id/mimetypes_holder"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="?attr/actionBarSize"
|
||||
android:fillViewport="true"
|
||||
android:scrollbars="none">
|
||||
android:scrollbars="none"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||
|
||||
<org.fossify.commons.views.MyTextView
|
||||
android:id="@+id/mimetypes_placeholder"
|
||||
|
||||
@@ -5,23 +5,30 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/read_text_toolbar"
|
||||
<org.fossify.commons.views.MyAppBarLayout
|
||||
android:id="@+id/read_text_appbar"
|
||||
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" />
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/read_text_toolbar"
|
||||
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
|
||||
android:id="@+id/read_text_wrapper"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="?attr/actionBarSize"
|
||||
android:fillViewport="true"
|
||||
android:orientation="vertical"
|
||||
android:scrollbars="none">
|
||||
android:scrollbars="none"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||
|
||||
<include
|
||||
android:id="@+id/search_wrapper"
|
||||
|
||||
@@ -5,18 +5,25 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/activity_save_as_toolbar"
|
||||
<org.fossify.commons.views.MyAppBarLayout
|
||||
android:id="@+id/activity_save_as_appbar"
|
||||
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" />
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
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
|
||||
android:id="@+id/activity_save_as_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="?attr/actionBarSize" />
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
||||
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
@@ -6,21 +6,28 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/settings_toolbar"
|
||||
<org.fossify.commons.views.MyAppBarLayout
|
||||
android:id="@+id/settings_appbar"
|
||||
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" />
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
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
|
||||
android:id="@+id/settings_nested_scrollview"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="?attr/actionBarSize"
|
||||
android:fillViewport="true"
|
||||
android:scrollbars="none">
|
||||
android:scrollbars="none"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/settings_holder"
|
||||
@@ -63,15 +70,20 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/general_settings" />
|
||||
|
||||
<org.fossify.commons.views.PurchaseThankYouItem
|
||||
android:id="@+id/settings_purchase_thank_you_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_use_english_holder"
|
||||
style="@style/SettingsHolderCheckboxStyle"
|
||||
style="@style/SettingsHolderSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<org.fossify.commons.views.MyAppCompatCheckbox
|
||||
<org.fossify.commons.views.MyMaterialSwitch
|
||||
android:id="@+id/settings_use_english"
|
||||
style="@style/SettingsCheckboxStyle"
|
||||
style="@style/SettingsSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/use_english_language" />
|
||||
@@ -171,13 +183,13 @@
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_press_back_twice_holder"
|
||||
style="@style/SettingsHolderCheckboxStyle"
|
||||
style="@style/SettingsHolderSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<org.fossify.commons.views.MyAppCompatCheckbox
|
||||
<org.fossify.commons.views.MyMaterialSwitch
|
||||
android:id="@+id/settings_press_back_twice"
|
||||
style="@style/SettingsCheckboxStyle"
|
||||
style="@style/SettingsSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/press_back_twice" />
|
||||
@@ -197,13 +209,13 @@
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_show_hidden_holder"
|
||||
style="@style/SettingsHolderCheckboxStyle"
|
||||
style="@style/SettingsHolderSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<org.fossify.commons.views.MyAppCompatCheckbox
|
||||
<org.fossify.commons.views.MyMaterialSwitch
|
||||
android:id="@+id/settings_show_hidden"
|
||||
style="@style/SettingsCheckboxStyle"
|
||||
style="@style/SettingsSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/show_hidden_items" />
|
||||
@@ -223,13 +235,13 @@
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_enable_pull_to_refresh_holder"
|
||||
style="@style/SettingsHolderCheckboxStyle"
|
||||
style="@style/SettingsHolderSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<org.fossify.commons.views.MyAppCompatCheckbox
|
||||
<org.fossify.commons.views.MyMaterialSwitch
|
||||
android:id="@+id/settings_enable_pull_to_refresh"
|
||||
style="@style/SettingsCheckboxStyle"
|
||||
style="@style/SettingsSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/enable_pull_to_refresh" />
|
||||
@@ -249,13 +261,13 @@
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_keep_last_modified_holder"
|
||||
style="@style/SettingsHolderCheckboxStyle"
|
||||
style="@style/SettingsHolderSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<org.fossify.commons.views.MyAppCompatCheckbox
|
||||
<org.fossify.commons.views.MyMaterialSwitch
|
||||
android:id="@+id/settings_keep_last_modified"
|
||||
style="@style/SettingsCheckboxStyle"
|
||||
style="@style/SettingsSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/keep_last_modified" />
|
||||
@@ -264,13 +276,13 @@
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_skip_delete_confirmation_holder"
|
||||
style="@style/SettingsHolderCheckboxStyle"
|
||||
style="@style/SettingsHolderSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<org.fossify.commons.views.MyAppCompatCheckbox
|
||||
<org.fossify.commons.views.MyMaterialSwitch
|
||||
android:id="@+id/settings_skip_delete_confirmation"
|
||||
style="@style/SettingsCheckboxStyle"
|
||||
style="@style/SettingsSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/skip_delete_confirmation" />
|
||||
@@ -290,13 +302,13 @@
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_password_protection_holder"
|
||||
style="@style/SettingsHolderCheckboxStyle"
|
||||
style="@style/SettingsHolderSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<org.fossify.commons.views.MyAppCompatCheckbox
|
||||
<org.fossify.commons.views.MyMaterialSwitch
|
||||
android:id="@+id/settings_password_protection"
|
||||
style="@style/SettingsCheckboxStyle"
|
||||
style="@style/SettingsSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/password_protect_hidden_items" />
|
||||
@@ -305,13 +317,13 @@
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_app_password_protection_holder"
|
||||
style="@style/SettingsHolderCheckboxStyle"
|
||||
style="@style/SettingsHolderSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<org.fossify.commons.views.MyAppCompatCheckbox
|
||||
<org.fossify.commons.views.MyMaterialSwitch
|
||||
android:id="@+id/settings_app_password_protection"
|
||||
style="@style/SettingsCheckboxStyle"
|
||||
style="@style/SettingsSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/password_protect_whole_app" />
|
||||
@@ -320,13 +332,13 @@
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_file_deletion_password_protection_holder"
|
||||
style="@style/SettingsHolderCheckboxStyle"
|
||||
style="@style/SettingsHolderSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<org.fossify.commons.views.MyAppCompatCheckbox
|
||||
<org.fossify.commons.views.MyMaterialSwitch
|
||||
android:id="@+id/settings_file_deletion_password_protection"
|
||||
style="@style/SettingsCheckboxStyle"
|
||||
style="@style/SettingsSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/password_protect_file_deletion" />
|
||||
@@ -335,13 +347,13 @@
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_enable_root_access_holder"
|
||||
style="@style/SettingsHolderCheckboxStyle"
|
||||
style="@style/SettingsHolderSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<org.fossify.commons.views.MyAppCompatCheckbox
|
||||
<org.fossify.commons.views.MyMaterialSwitch
|
||||
android:id="@+id/settings_enable_root_access"
|
||||
style="@style/SettingsCheckboxStyle"
|
||||
style="@style/SettingsSwitchStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/enable_root_access" />
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
android:textStyle="italic"
|
||||
android:visibility="gone" />
|
||||
|
||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
<org.fossify.filemanager.views.MySwipeRefreshLayout
|
||||
android:id="@+id/items_swipe_refresh"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -90,7 +90,7 @@
|
||||
app:layoutManager="org.fossify.commons.views.MyGridLayoutManager" />
|
||||
|
||||
</com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller>
|
||||
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||
</org.fossify.filemanager.views.MySwipeRefreshLayout>
|
||||
</RelativeLayout>
|
||||
|
||||
<org.fossify.commons.views.MyFloatingActionButton
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
<org.fossify.filemanager.views.MySwipeRefreshLayout
|
||||
android:id="@+id/recents_swipe_refresh"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
@@ -37,5 +37,5 @@
|
||||
android:scrollbars="none"
|
||||
app:layoutManager="org.fossify.commons.views.MyGridLayoutManager" />
|
||||
|
||||
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||
</org.fossify.filemanager.views.MySwipeRefreshLayout>
|
||||
</org.fossify.filemanager.fragments.RecentsFragment>
|
||||
@@ -62,14 +62,14 @@
|
||||
android:id="@+id/settings"
|
||||
android:icon="@drawable/ic_settings_cog_vector"
|
||||
android:title="@string/settings"
|
||||
app:showAsAction="ifRoom" />
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/about"
|
||||
android:icon="@drawable/ic_info_vector"
|
||||
android:title="@string/about"
|
||||
app:showAsAction="ifRoom" />
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/more_apps_from_us"
|
||||
android:title="@string/more_apps_from_us"
|
||||
android:title="@string/more_fossify_apps"
|
||||
app:showAsAction="never" />
|
||||
</menu>
|
||||
@@ -11,13 +11,18 @@
|
||||
<item
|
||||
android:id="@+id/menu_save"
|
||||
android:icon="@drawable/ic_save_vector"
|
||||
android:title="@string/save_as"
|
||||
android:title="@string/save"
|
||||
app:showAsAction="always" />
|
||||
<item
|
||||
android:id="@+id/menu_save_as"
|
||||
android:showAsAction="never"
|
||||
android:title="@string/save_as"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/menu_print"
|
||||
android:icon="@drawable/ic_print_vector"
|
||||
android:title="@string/print"
|
||||
app:showAsAction="always" />
|
||||
app:showAsAction="ifRoom" />
|
||||
<item
|
||||
android:id="@+id/menu_open_with"
|
||||
android:showAsAction="never"
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
android:id="@+id/sort"
|
||||
android:icon="@drawable/ic_sort_vector"
|
||||
android:title="@string/sort_by"
|
||||
app:showAsAction="ifRoom" />
|
||||
app:showAsAction="always" />
|
||||
<item
|
||||
android:id="@+id/toggle_filename"
|
||||
android:icon="@drawable/ic_label_vector"
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/menu_print"
|
||||
android:icon="@drawable/ic_print_vector"
|
||||
android:title="@string/print"
|
||||
app:showAsAction="always" />
|
||||
</menu>
|
||||
@@ -0,0 +1 @@
|
||||
unqualifiedResLocale=en-US
|
||||
@@ -2,57 +2,46 @@
|
||||
<resources>
|
||||
<string name="app_launcher_name">مدير الملفات</string>
|
||||
<string name="press_back_again">اضغط مرة أخرى للخروج</string>
|
||||
<string name="go_to_home_folder">الذهاب الى الرئيسية</string>
|
||||
<string name="set_as_home_folder">تعيين كمجلد رئيسي</string>
|
||||
<string name="home_folder_updated">تم تحديث المجلد الرئيسي</string>
|
||||
<string name="copy_path">نسخ المسار الى الحافظة</string>
|
||||
<string name="path_copied">تم نسخ المسار</string>
|
||||
<string name="go_to_home_folder">اذهب إلى المجلد المنزل</string>
|
||||
<string name="set_as_home_folder">عيّن كمجلد المنزل</string>
|
||||
<string name="home_folder_updated">حُدِّث مجلد المنزل</string>
|
||||
<string name="copy_path">انسخ المسار إلى الحافظة</string>
|
||||
<string name="path_copied">نُسخ المسار</string>
|
||||
<string name="select_audio_file">الرجاء تحديد ملف صوتي</string>
|
||||
<string name="search_folder">مجلد البحث</string>
|
||||
<string name="rooted_device_only">تعمل هذه العملية فقط على الأجهزة المتجذرة</string>
|
||||
<string name="recents">الأحدث</string>
|
||||
<string name="show_recents">إظهار الأحدث</string>
|
||||
<string name="invert_colors">عكس الألوان</string>
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Open as</string>
|
||||
<string name="text_file">Text file</string>
|
||||
<string name="image_file">Image file</string>
|
||||
<string name="audio_file">Audio file</string>
|
||||
<string name="video_file">Video file</string>
|
||||
<string name="other_file">Other file</string>
|
||||
<!-- Compression -->
|
||||
<string name="compress">ضغط</string>
|
||||
<string name="compress_pro">ضغط (Pro)</string>
|
||||
<string name="show_recents">أظهر الأحدث</string>
|
||||
<string name="invert_colors">اعكس الألوان</string>
|
||||
<string name="compress">اضغط</string>
|
||||
<string name="decompress">فك الضغط</string>
|
||||
<string name="compress_as">ضغط كا</string>
|
||||
<string name="compressing">ضغط…</string>
|
||||
<string name="decompressing">فك الضغط…</string>
|
||||
<string name="compress_as">اضغط كَ</string>
|
||||
<string name="compressing">جار الضغط…</string>
|
||||
<string name="decompressing">جارِ فك الضغط…</string>
|
||||
<string name="compression_successful">نجح الضغط</string>
|
||||
<string name="decompression_successful">نجح التفكيك</string>
|
||||
<string name="compressing_failed">أخفق الضغط</string>
|
||||
<string name="decompressing_failed">أخفق إلغاء الضغط</string>
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">إدارة المفضلة</string>
|
||||
<string name="go_to_favorite">الذهاب الى المفضلة</string>
|
||||
<string name="decompression_successful">نجح فك ضغط</string>
|
||||
<string name="compressing_failed">فشل الضغط</string>
|
||||
<string name="decompressing_failed">فشل فك الضغط</string>
|
||||
<string name="manage_favorites">أدر المفضلة</string>
|
||||
<string name="go_to_favorite">اذهب الى المفضلة</string>
|
||||
<string name="favorites_activity_placeholder">يمكنك إضافة المجلدات المستخدمة بشكل متكرر إلى المفضلة لسهولة الوصول إليها من أي مكان.</string>
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">محرر الملفات</string>
|
||||
<!-- Storage analysis -->
|
||||
<string name="file_editor">محرّر الملفات</string>
|
||||
<string name="storage_analysis">تحليل التخزين</string>
|
||||
<string name="images">الصور</string>
|
||||
<string name="videos">الفيديوهات</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">الأرشيف</string>
|
||||
<string name="others">الاخرين</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="others">الآخرين</string>
|
||||
<string name="total_storage">إجمالي مساحة التخزين: %s</string>
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">تفعيل الدخول الى مسار الروت</string>
|
||||
<string name="press_back_twice">تتطلب الضغط على رجوع مرتين لمغادرة التطبيق</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
<string name="enable_root_access">فعّل وصول الجذر (root)</string>
|
||||
<string name="press_back_twice">يتطلب النقر على رجوع مرتين لمغادرة التطبيق</string>
|
||||
<string name="audio">صوت</string>
|
||||
<string name="documents">المستندات</string>
|
||||
<string name="downloads">التنزيلات</string>
|
||||
<string name="storage_free">خالية</string>
|
||||
<string name="open_as">افتح كـ</string>
|
||||
<string name="image_file">ملف صورة</string>
|
||||
<string name="text_file">ملف نصي</string>
|
||||
<string name="audio_file">ملف صوتي</string>
|
||||
<string name="video_file">ملف فيديو</string>
|
||||
<string name="other_file">ملف آخر</string>
|
||||
</resources>
|
||||
@@ -10,21 +10,7 @@
|
||||
<string name="select_audio_file">Xahiş olunur səs faylı seçin</string>
|
||||
<string name="search_folder">Qovluq axtar</string>
|
||||
<string name="rooted_device_only">Bu əməliyyat yalnız root\'lu cihazlarda işləyir</string>
|
||||
<string name="recents">Recents</string>
|
||||
<string name="show_recents">Show recents</string>
|
||||
<string name="invert_colors">Invert colors</string>
|
||||
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Open as</string>
|
||||
<string name="text_file">Text file</string>
|
||||
<string name="image_file">Image file</string>
|
||||
<string name="audio_file">Audio file</string>
|
||||
<string name="video_file">Video file</string>
|
||||
<string name="other_file">Other file</string>
|
||||
|
||||
<!-- Compression -->
|
||||
<string name="compress">Sıxışdır</string>
|
||||
<string name="compress_pro">Sıxışdır (Pro)</string>
|
||||
<string name="decompress">Çıxar</string>
|
||||
<string name="compress_as">Sıxışdır</string>
|
||||
<string name="compressing">Sıxışdırılır…</string>
|
||||
@@ -33,32 +19,9 @@
|
||||
<string name="decompression_successful">Çıxarma uğurludur</string>
|
||||
<string name="compressing_failed">Sıxışdırma alınmadı</string>
|
||||
<string name="decompressing_failed">Çıxarma alınmadı</string>
|
||||
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Sevimliləri idarə et</string>
|
||||
<string name="go_to_favorite">Sevimlilərə get</string>
|
||||
<string name="favorites_activity_placeholder">Tez-tez istifadə olunan qovluqlara sürətli əlçatanlıq üçün sevimlilərə əlavə edə bilərsiniz.</string>
|
||||
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">Fayl Redaktəsi</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Root icazəsini aktivləşdir</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
@@ -3,26 +3,23 @@
|
||||
<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="set_as_home_folder">Ўсталяваць ў якасці хатняй тэчкі</string>
|
||||
<string name="home_folder_updated">Хатняя папка абноўлена</string>
|
||||
<string name="copy_path">Капіяваць шлях у буфер абмену</string>
|
||||
<string name="copy_path">Скапіяваць шлях ў буфер абмену</string>
|
||||
<string name="path_copied">Шлях скапіяваны</string>
|
||||
<string name="select_audio_file">Выберыце аўдыяфайл</string>
|
||||
<string name="search_folder">Тэчка пошуку</string>
|
||||
<string name="rooted_device_only">Гэтая аперацыя працуе толькі на каранёвых прыладах</string>
|
||||
<string name="rooted_device_only">Гэтая каманда працуе толькі на прыладах з root-доступам</string>
|
||||
<string name="recents">Апошнія</string>
|
||||
<string name="show_recents">Паказаць апошнія</string>
|
||||
<string name="invert_colors">Інвертаваць колеры</string>
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Адкрыць як</string>
|
||||
<string name="text_file">Тэкст</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>
|
||||
<!-- Compression -->
|
||||
<string name="compress">Сціснуць</string>
|
||||
<string name="compress_pro">Сціснуць (Pro)</string>
|
||||
<string name="decompress">Распакаваць</string>
|
||||
<string name="compress_as">Сціснуць як</string>
|
||||
<string name="compressing">Сцісканне…</string>
|
||||
@@ -31,13 +28,10 @@
|
||||
<string name="decompression_successful">Распакаванне паспяхова выканана</string>
|
||||
<string name="compressing_failed">Не атрымалася сціснуць</string>
|
||||
<string name="decompressing_failed">Не атрымалася распакаваць</string>
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Кіраванне абранымі</string>
|
||||
<string name="go_to_favorite">Перайсці да абранага</string>
|
||||
<string name="favorites_activity_placeholder">Вы можаце дадаць часта выкарыстоўваюцца папкі ў абранае для лёгкага доступу з любога месца.</string>
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">Рэдактар файлаў</string>
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Аналіз сховішча</string>
|
||||
<string name="images">Выявы</string>
|
||||
<string name="videos">Відэа</string>
|
||||
@@ -46,13 +40,8 @@
|
||||
<string name="downloads">Спампоўкі</string>
|
||||
<string name="archives">Архівы</string>
|
||||
<string name="others">Іншае</string>
|
||||
<string name="storage_free">бясплатна</string>
|
||||
<string name="storage_free">свабодна</string>
|
||||
<string name="total_storage">Агульная памяць: %s</string>
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Уключыць каранёвы доступ</string>
|
||||
<string name="enable_root_access">Ўключыць root-доступ</string>
|
||||
<string name="press_back_twice">Патрабуецца двойчы націснуць \"Назад\", каб выйсці з праграмы</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
</resources>
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_launcher_name">Файлов Мениджър</string>
|
||||
<string name="app_launcher_name">Управление на файлове</string>
|
||||
<string name="press_back_again">Натиснете назад отново, за да излезете</string>
|
||||
<string name="go_to_home_folder">Към началната папка</string>
|
||||
<string name="set_as_home_folder">Задаване като начална папка</string>
|
||||
@@ -13,16 +13,13 @@
|
||||
<string name="recents">Скорошни</string>
|
||||
<string name="show_recents">Показване на скорошни</string>
|
||||
<string name="invert_colors">Обръщане на цветове</string>
|
||||
<!-- Open as -->
|
||||
<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>
|
||||
<!-- Compression -->
|
||||
<string name="compress">Компресиране</string>
|
||||
<string name="compress_pro">Компресиране (Pro)</string>
|
||||
<string name="decompress">Декомпресиране</string>
|
||||
<string name="compress_as">Компресиране като</string>
|
||||
<string name="compressing">Компресира се…</string>
|
||||
@@ -31,28 +28,20 @@
|
||||
<string name="decompression_successful">Декомпресирането е успешно</string>
|
||||
<string name="compressing_failed">Неуспешно компресиране</string>
|
||||
<string name="decompressing_failed">Неуспешно декомпресиране</string>
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Управление на любими</string>
|
||||
<string name="go_to_favorite">Към любими</string>
|
||||
<string name="favorites_activity_placeholder">Можете да добавяте често използвани папки към любими за лесен достъп от всякъде.</string>
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">Файлов редактор</string>
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Анализ на съхранението</string>
|
||||
<string name="images">Изображения</string>
|
||||
<string name="videos">Видеа</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="videos">Видео</string>
|
||||
<string name="archives">Архиви</string>
|
||||
<string name="others">Други</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Общо място за съхранение: %s</string>
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Активиране на root достъп</string>
|
||||
<string name="press_back_twice">Натискане два пъти Назад за излизане от приложението</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
<string name="downloads">Изтегляния</string>
|
||||
<string name="storage_free">свободно</string>
|
||||
<string name="documents">Документи</string>
|
||||
<string name="audio">Аудиофайлове</string>
|
||||
</resources>
|
||||
@@ -1,2 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="images">ছবিসমূহ</string>
|
||||
<string name="videos">ভিডিওসমূহ</string>
|
||||
</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>
|
||||
@@ -1,2 +1,47 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="invert_colors">Tuginañ al livioù</string>
|
||||
<string name="open_as">Digeriñ evel</string>
|
||||
<string name="text_file">Restr testenn</string>
|
||||
<string name="image_file">Restr skeudenn</string>
|
||||
<string name="audio_file">Rest aodio</string>
|
||||
<string name="video_file">Restr video</string>
|
||||
<string name="other_file">Restr all</string>
|
||||
<string name="compress">Koazhañ</string>
|
||||
<string name="compress_as">Koazhañ evel</string>
|
||||
<string name="compressing">O koazhañ…</string>
|
||||
<string name="decompressing">O tigoazhañ…</string>
|
||||
<string name="decompress">Digoazhañ</string>
|
||||
<string name="decompression_successful">Digoazhet gant berzh</string>
|
||||
<string name="compression_successful">Koazhet gant berzh</string>
|
||||
<string name="compressing_failed">C\'hwitadenn war ar c\'hoazhañ</string>
|
||||
<string name="decompressing_failed">C\'hwitadenn war an digoazhañ</string>
|
||||
<string name="favorites_activity_placeholder">Gallout a rit ouzhpennañ teuliadoù arveret alies d\'ho sinedoù evit gallout mont eno adalek n\'eus forzh pelec\'h.</string>
|
||||
<string name="file_editor">Embanner restr</string>
|
||||
<string name="manage_favorites">Ardeiñ ar sinedoù</string>
|
||||
<string name="go_to_favorite">Mont d\'ar sined</string>
|
||||
<string name="images">Skeudennoù</string>
|
||||
<string name="audio">Aodio</string>
|
||||
<string name="documents">Teulioù</string>
|
||||
<string name="downloads">Pellgargadurioù</string>
|
||||
<string name="storage_analysis">Dezrann ar c\'hadaviñ</string>
|
||||
<string name="videos">Videoioù</string>
|
||||
<string name="archives">Dielloù</string>
|
||||
<string name="storage_free">dieub</string>
|
||||
<string name="others">Re all</string>
|
||||
<string name="total_storage">Kadaviñ hollek: %s</string>
|
||||
<string name="enable_root_access">Gweredekaat an haeziñ \"root\"</string>
|
||||
<string name="press_back_twice">Dav eo pouezañ War-gil div wech evit kuitaat an arload</string>
|
||||
<string name="app_launcher_name">Ardoer restroù</string>
|
||||
<string name="press_back_again">Pouezit war an afell War-gil en-dro evit kuitaat</string>
|
||||
<string name="go_to_home_folder">Mont d\'an teuliad degemer</string>
|
||||
<string name="copy_path">Eilañ an treug er golver</string>
|
||||
<string name="path_copied">Treug eilet</string>
|
||||
<string name="select_audio_file">Diuzit ur restr aodio</string>
|
||||
<string name="recents">Nevesañ</string>
|
||||
<string name="show_recents">Diskouez ar re nevesañ</string>
|
||||
<string name="set_as_home_folder">Despizañ evel teuliad degemer</string>
|
||||
<string name="home_folder_updated">Hizivaet eo bet an teuliad degemer</string>
|
||||
<string name="search_folder">Klask en teuliad</string>
|
||||
<string name="rooted_device_only">Mont a ra en-dro ar gwezhiadur-mañ war an trevnadoù rootet hepken</string>
|
||||
</resources>
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_launcher_name">Gestor de fitxers</string>
|
||||
<string name="press_back_again">Premeu enrere de nou per sortir</string>
|
||||
<string name="press_back_again">Premeu enrere de nou per a sortir</string>
|
||||
<string name="go_to_home_folder">Ves a la 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>
|
||||
@@ -10,19 +10,15 @@
|
||||
<string name="select_audio_file">Seleccioneu un fitxer d\'àudio</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="recents">Recents</string>
|
||||
<string name="show_recents">Mostra els recents</string>
|
||||
<string name="invert_colors">Inverteix els colors</string>
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Obre com a</string>
|
||||
<string name="text_file">Fitxer de text</string>
|
||||
<string name="image_file">Fitxer d\'imatge</string>
|
||||
<string name="audio_file">Fitxer d\'àudio</string>
|
||||
<string name="video_file">Fitxer de vídeo</string>
|
||||
<string name="other_file">Altres fitxers</string>
|
||||
<!-- Compression -->
|
||||
<string name="compress">Comprimeix</string>
|
||||
<string name="compress_pro">Comprimeix (Pro)</string>
|
||||
<string name="decompress">Descomprimeix</string>
|
||||
<string name="compress_as">Comprimeix com a</string>
|
||||
<string name="compressing">S\'està comprimint…</string>
|
||||
@@ -31,28 +27,21 @@
|
||||
<string name="decompression_successful">Descompressió correcta</string>
|
||||
<string name="compressing_failed">Ha fallat la compressió</string>
|
||||
<string name="decompressing_failed">Ha fallat la descompressió</string>
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Gestiona els preferits</string>
|
||||
<string name="go_to_favorite">Ves als preferits</string>
|
||||
<string name="favorites_activity_placeholder">Podeu afegir carpetes que utilitzeu amb freqüència als preferits per accedir fàcilment des de qualsevol lloc.</string>
|
||||
<!-- File Editor -->
|
||||
<string name="favorites_activity_placeholder">Podeu afegir carpetes que utilitzeu amb freqüència als preferits per a accedir fàcilment des de qualsevol lloc.</string>
|
||||
<string name="file_editor">Editor de fitxers</string>
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Anàlisi d\'emmagatzematge</string>
|
||||
<string name="images">Imatges</string>
|
||||
<string name="videos">Vídeos</string>
|
||||
<string name="audio">Àudio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Baixades</string>
|
||||
<string name="archives">Arxius</string>
|
||||
<string name="others">Altres</string>
|
||||
<string name="storage_free">lliure</string>
|
||||
<string name="total_storage">Emmagatzematge total: %s</string>
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Habilita l\'accés «root»</string>
|
||||
<string name="press_back_twice">Cal que premeu Enrere dues vegades per sortir de l\'aplicació</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
<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="recents">Recents</string>
|
||||
</resources>
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_launcher_name">بەڕێوەبەری فایل</string>
|
||||
</resources>
|
||||
@@ -13,16 +13,13 @@
|
||||
<string name="recents">Nedávné</string>
|
||||
<string name="show_recents">Ukázat nedávné</string>
|
||||
<string name="invert_colors">Invertovat barvy</string>
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Otevřít jako</string>
|
||||
<string name="text_file">Textový soubor</string>
|
||||
<string name="image_file">Obrázkový soubor</string>
|
||||
<string name="audio_file">Zvukový soubor</string>
|
||||
<string name="video_file">Video soubor</string>
|
||||
<string name="other_file">Jiný soubor</string>
|
||||
<!-- Compression -->
|
||||
<string name="compress">Komprimovat</string>
|
||||
<string name="compress_pro">Komprimovat (Pro)</string>
|
||||
<string name="decompress">Rozbalit</string>
|
||||
<string name="compress_as">Komprimovat jako</string>
|
||||
<string name="compressing">Komprimuje se…</string>
|
||||
@@ -31,28 +28,20 @@
|
||||
<string name="decompression_successful">Rozbalení bylo úspěšné</string>
|
||||
<string name="compressing_failed">Komprimace selhala</string>
|
||||
<string name="decompressing_failed">Rozbalení selhalo</string>
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Spravovat oblíbené</string>
|
||||
<string name="go_to_favorite">Přejít na oblíbené</string>
|
||||
<string name="favorites_activity_placeholder">Přidejte často používané složky mezi oblíbené pro jednoduchý přístup odkudkoli.</string>
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">Editor souborů</string>
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Analýza úložiště</string>
|
||||
<string name="images">Obrázky</string>
|
||||
<string name="videos">Videa</string>
|
||||
<string name="audio">Zvuky</string>
|
||||
<string name="audio">Zvuk</string>
|
||||
<string name="documents">Dokumenty</string>
|
||||
<string name="downloads">Stažené</string>
|
||||
<string name="archives">Archivy</string>
|
||||
<string name="others">Ostatní</string>
|
||||
<string name="storage_free">volné</string>
|
||||
<string name="total_storage">Úložiště celkem: %s</string>
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Povolit přístup jako root</string>
|
||||
<string name="press_back_twice">Pro opuštění aplikace vyžadovat stisknutí Zpět dvakrát</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
@@ -10,21 +10,13 @@
|
||||
<string name="select_audio_file">Dewisa ffeil sain</string>
|
||||
<string name="search_folder">Chwilio\'r ffolder</string>
|
||||
<string name="rooted_device_only">Dyw\'r weithred hon ond yn gweithio ar ddyfeisiau wedi\'u gwreddio</string>
|
||||
<string name="recents">Recents</string>
|
||||
<string name="show_recents">Show recents</string>
|
||||
<string name="invert_colors">Invert colors</string>
|
||||
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Agor fel</string>
|
||||
<string name="text_file">Ffeil testun</string>
|
||||
<string name="image_file">Ffeil delwedd</string>
|
||||
<string name="audio_file">Ffeil sain</string>
|
||||
<string name="video_file">Ffeil fideo</string>
|
||||
<string name="other_file">Ffeil arall</string>
|
||||
|
||||
<!-- Compression -->
|
||||
<string name="compress">Cywasgu</string>
|
||||
<string name="compress_pro">Cywasgu (Pro)</string>
|
||||
<string name="decompress">Datgywasgu</string>
|
||||
<string name="compress_as">Cywasgu fel</string>
|
||||
<string name="compressing">Yn cywasgu…</string>
|
||||
@@ -33,32 +25,11 @@
|
||||
<string name="decompression_successful">Datgywasgwyd yn llwyddiannus</string>
|
||||
<string name="compressing_failed">Methodd y cywasgu</string>
|
||||
<string name="decompressing_failed">Methodd y datgywasgu</string>
|
||||
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Rheoli ffefrynnau</string>
|
||||
<string name="go_to_favorite">Mynd at ffefryn</string>
|
||||
<string name="favorites_activity_placeholder">Gellir ychwanegu ffolder a ddefnyddir yn aml at y ffefrynnau i gael atyn nhw\'n hawdd o unrhyw fan.</string>
|
||||
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">Golygydd Ffeiliau</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Galluogi mynediad craidd</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
<string name="images">Delweddau</string>
|
||||
<string name="videos">Fideos</string>
|
||||
</resources>
|
||||
@@ -5,24 +5,21 @@
|
||||
<string name="go_to_home_folder">Gå til hjemmemappen</string>
|
||||
<string name="set_as_home_folder">Sæt som hjemmemappe</string>
|
||||
<string name="home_folder_updated">Hjemmemappe opdateret</string>
|
||||
<string name="copy_path">Kopier sti til udklipsholderen</string>
|
||||
<string name="copy_path">Kopiér sti til udklipsholder</string>
|
||||
<string name="path_copied">Sti kopieret</string>
|
||||
<string name="select_audio_file">Vælg en lydfil</string>
|
||||
<string name="search_folder">Søg i mappe</string>
|
||||
<string name="rooted_device_only">Denne funktion virker kun på rootede enheder</string>
|
||||
<string name="rooted_device_only">Denne handling virker kun på rootede enheder</string>
|
||||
<string name="recents">Seneste</string>
|
||||
<string name="show_recents">Vis seneste</string>
|
||||
<string name="invert_colors">Invert colors</string>
|
||||
<!-- Open as -->
|
||||
<string name="invert_colors">Inverter farver</string>
|
||||
<string name="open_as">Åbn som</string>
|
||||
<string name="text_file">Tekstfil</string>
|
||||
<string name="image_file">Billedfil</string>
|
||||
<string name="audio_file">Lydfil</string>
|
||||
<string name="video_file">Videofil</string>
|
||||
<string name="other_file">Anden fil</string>
|
||||
<!-- Compression -->
|
||||
<string name="compress">Komprimer</string>
|
||||
<string name="compress_pro">Komprimer (Pro)</string>
|
||||
<string name="decompress">Dekomprimer</string>
|
||||
<string name="compress_as">Komprimer som</string>
|
||||
<string name="compressing">Komprimerer…</string>
|
||||
@@ -31,14 +28,11 @@
|
||||
<string name="decompression_successful">Dekomprimeret</string>
|
||||
<string name="compressing_failed">Komprimering mislykkedes</string>
|
||||
<string name="decompressing_failed">Dekomprimering mislykkedes</string>
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Håndter favoritter</string>
|
||||
<string name="manage_favorites">Administrer favoritter</string>
|
||||
<string name="go_to_favorite">Gå til favorit</string>
|
||||
<string name="favorites_activity_placeholder">Du kan tilføje ofte benyttede mapper til favoritter, så du hurtigt kan finde dem igen.</string>
|
||||
<!-- File Editor -->
|
||||
<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>
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Lagersanalyse</string>
|
||||
<string name="storage_analysis">Lagringsanalyse</string>
|
||||
<string name="images">Billeder</string>
|
||||
<string name="videos">Videoer</string>
|
||||
<string name="audio">Lyd</string>
|
||||
@@ -48,11 +42,6 @@
|
||||
<string name="others">Andre</string>
|
||||
<string name="storage_free">fri</string>
|
||||
<string name="total_storage">Samlet lagerplads: %s</string>
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Aktiver root-adgang</string>
|
||||
<string name="press_back_twice">Kræv to tryk på tilbage for at forlade appen</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
<string name="enable_root_access">Aktivér root-adgang</string>
|
||||
<string name="press_back_twice">Dobbelttryk på Tilbage for at afslutte appen</string>
|
||||
</resources>
|
||||
@@ -13,16 +13,13 @@
|
||||
<string name="recents">Neueste</string>
|
||||
<string name="show_recents">Neueste anzeigen</string>
|
||||
<string name="invert_colors">Farben invertieren</string>
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Öffnen als</string>
|
||||
<string name="text_file">Textdatei</string>
|
||||
<string name="image_file">Bilddatei</string>
|
||||
<string name="audio_file">Audiodatei</string>
|
||||
<string name="video_file">Videodatei</string>
|
||||
<string name="other_file">Anderer Dateityp</string>
|
||||
<!-- Compression -->
|
||||
<string name="compress">Komprimieren</string>
|
||||
<string name="compress_pro">Komprimieren (Pro)</string>
|
||||
<string name="decompress">Entpacken</string>
|
||||
<string name="compress_as">Komprimieren als</string>
|
||||
<string name="compressing">Komprimieren …</string>
|
||||
@@ -31,28 +28,20 @@
|
||||
<string name="decompression_successful">Entpacken erfolgreich</string>
|
||||
<string name="compressing_failed">Komprimieren fehlgeschlagen</string>
|
||||
<string name="decompressing_failed">Entpacken fehlgeschlagen</string>
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Favoriten verwalten</string>
|
||||
<string name="go_to_favorite">Zu Favoriten wechseln</string>
|
||||
<string name="favorites_activity_placeholder">Du kannst häufig benutzte Ordner für einen einfacheren Zugriff zu den Favoriten hinzufügen.</string>
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">Dateieditor</string>
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Speicheranalyse</string>
|
||||
<string name="images">Bilder</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archiv</string>
|
||||
<string name="others">Andere</string>
|
||||
<string name="storage_free">frei</string>
|
||||
<string name="total_storage">Gesamter Speicherplatz: %s</string>
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Root-Zugriff erlauben</string>
|
||||
<string name="press_back_twice">Zweimaliges Drücken von Zurück ist erforderlich, um die App zu verlassen</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="documents">Dokumente</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
</resources>
|
||||
@@ -13,18 +13,13 @@
|
||||
<string name="recents">Πρόσφατα</string>
|
||||
<string name="show_recents">Εμφάνιση προσφάτων</string>
|
||||
<string name="invert_colors">Αντιστροφή χρωμάτων</string>
|
||||
|
||||
<!-- Open as -->
|
||||
<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>
|
||||
|
||||
<!-- Compression -->
|
||||
<string name="compress">Συμπίεση</string>
|
||||
<string name="compress_pro">Συμπίεση (Pro)</string>
|
||||
<string name="decompress">Αποσυμπίεση</string>
|
||||
<string name="compress_as">Συμπίεση ως</string>
|
||||
<string name="compressing">Συμπιέζεται…</string>
|
||||
@@ -33,16 +28,10 @@
|
||||
<string name="decompression_successful">Η Αποσυμπίεση ολοκληρώθηκε</string>
|
||||
<string name="compressing_failed">Σφάλμα Συμπίεσης</string>
|
||||
<string name="decompressing_failed">Σφάλμα Αποσυμπίεσης</string>
|
||||
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Διαχείριση Αγαπημένων</string>
|
||||
<string name="go_to_favorite">Μετάβαση στα Αγαπημένα</string>
|
||||
<string name="favorites_activity_placeholder">Μπορείτε να προσθέσετε φακέλους που χρησιμοποιούνται συχνά στα Αγαπημένα για εύκολη πρόσβαση από οπουδήποτε.</string>
|
||||
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">Επεξεργαστής αρχείων</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Ανάλυση Αποθήκευσης</string>
|
||||
<string name="images">Εικόνες</string>
|
||||
<string name="videos">Βίντεο</string>
|
||||
@@ -53,12 +42,6 @@
|
||||
<string name="others">Άλλα</string>
|
||||
<string name="storage_free">ελεύθερα</string>
|
||||
<string name="total_storage">Σύνολο: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Ενεργοποιήστε την πρόσβαση ριζικού καταλόγου</string>
|
||||
<string name="press_back_twice">Απαιτείται διπλό πάτημα του πλήκτρου \"Πίσω\" για κλείσιμο εφαρμογής</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_launcher_name">File Manager</string>
|
||||
</resources>
|
||||
@@ -1,28 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_launcher_name">Dosieradministrilo</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>
|
||||
<string name="home_folder_updated">Home folder updated</string>
|
||||
<string name="copy_path">Copy path to clipboard</string>
|
||||
<string name="path_copied">Path copied</string>
|
||||
<string name="select_audio_file">Please select an audio file</string>
|
||||
<string name="search_folder">Search folder</string>
|
||||
<string name="rooted_device_only">This operation works only on rooted devices</string>
|
||||
<string name="recents">Recents</string>
|
||||
<string name="show_recents">Show recents</string>
|
||||
<string name="invert_colors">Invert colors</string>
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Malfermi kiel</string>
|
||||
<string name="text_file">Teksta dosiero</string>
|
||||
<string name="image_file">Bilda dosiero</string>
|
||||
<string name="audio_file">Sondosiero</string>
|
||||
<string name="video_file">Filma dosiero</string>
|
||||
<string name="other_file">Alia dosiero</string>
|
||||
<!-- Compression -->
|
||||
<string name="compress">Densigi</string>
|
||||
<string name="compress_pro">Densigi (Pro)</string>
|
||||
<string name="decompress">Maldensigi</string>
|
||||
<string name="compress_as">Densigi kiel</string>
|
||||
<string name="compressing">Densigante…</string>
|
||||
@@ -31,28 +16,32 @@
|
||||
<string name="decompression_successful">Maldensigo sukcesis</string>
|
||||
<string name="compressing_failed">Densigo malsukcesis</string>
|
||||
<string name="decompressing_failed">Maldensigo malsukcesis</string>
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Manage favorites</string>
|
||||
<string name="go_to_favorite">Go to favorite</string>
|
||||
<string name="favorites_activity_placeholder">You can add frequently used folders to favorites for easy access from anywhere.</string>
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">Dosierredaktilo</string>
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Bildoj</string>
|
||||
<string name="videos">Filmoj</string>
|
||||
<string name="audio">Sonoj</string>
|
||||
<string name="videos">Filmetoj</string>
|
||||
<string name="audio">Sono</string>
|
||||
<string name="documents">Dokumentoj</string>
|
||||
<string name="downloads">Elŝutoj</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Aliaj</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Enable root access</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
<string name="select_audio_file">Bonvolu elekti sondosieron</string>
|
||||
<string name="invert_colors">Inversigi kolorojn</string>
|
||||
<string name="manage_favorites">Administri plej ŝatatajn</string>
|
||||
<string name="go_to_favorite">Iri al plej ŝatata</string>
|
||||
<string name="favorites_activity_placeholder">Vi povas aldoni ofte uzatajn dosierujojn al viaj plej ŝatataj por facile atingi ilin el ie ajn.</string>
|
||||
<string name="archives">Arkivoj</string>
|
||||
<string name="storage_free">libera</string>
|
||||
<string name="total_storage">Tuta memoro: %s</string>
|
||||
<string name="enable_root_access">Ŝalti ĉefuzantajn permesojn</string>
|
||||
<string name="press_back_again">Premu la revenobutonon denove por eliri</string>
|
||||
<string name="go_to_home_folder">Iri al la hejma dosierujo</string>
|
||||
<string name="set_as_home_folder">Difini kiel hejma dosierujo</string>
|
||||
<string name="home_folder_updated">Hejma dosierujo ĝisdatigita</string>
|
||||
<string name="copy_path">Kopii vojon al la tondujo</string>
|
||||
<string name="path_copied">Vojo kopiita</string>
|
||||
<string name="search_folder">Serĉi dosierujon</string>
|
||||
<string name="rooted_device_only">Ĉi tiu operacio funkcias nur sur aparatoj root-itaj</string>
|
||||
<string name="recents">Lastaj</string>
|
||||
<string name="show_recents">Montri lastajn</string>
|
||||
<string name="storage_analysis">Memora analizo</string>
|
||||
<string name="press_back_twice">Postuli premi la revenobutonon du fojojn por eliri el la aplikaĵo</string>
|
||||
</resources>
|
||||
@@ -1,2 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="app_launcher_name">Gestor de archivos</string>
|
||||
<string name="press_back_again">Presione hacia atrás nuevamente para salir</string>
|
||||
<string name="go_to_home_folder">Ir a la carpeta de inicio</string>
|
||||
</resources>
|
||||
@@ -13,16 +13,13 @@
|
||||
<string name="recents">Recientes</string>
|
||||
<string name="show_recents">Mostrar recientes</string>
|
||||
<string name="invert_colors">Invertir colores</string>
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Abrir como</string>
|
||||
<string name="text_file">Archivo de texto</string>
|
||||
<string name="image_file">Imagen</string>
|
||||
<string name="audio_file">Archivo de audio</string>
|
||||
<string name="video_file">Video</string>
|
||||
<string name="other_file">Otro tipo de archivo</string>
|
||||
<!-- Compression -->
|
||||
<string name="compress">Comprimir</string>
|
||||
<string name="compress_pro">Comprimir (Pro)</string>
|
||||
<string name="decompress">Descomprimir</string>
|
||||
<string name="compress_as">Comprimir como</string>
|
||||
<string name="compressing">Comprimiendo…</string>
|
||||
@@ -31,28 +28,20 @@
|
||||
<string name="decompression_successful">Descompresión exitosa</string>
|
||||
<string name="compressing_failed">Compresión fallida</string>
|
||||
<string name="decompressing_failed">Descompresión fallida</string>
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Administrar favoritos</string>
|
||||
<string name="go_to_favorite">Ir a favoritos</string>
|
||||
<string name="favorites_activity_placeholder">Puede agregar carpetas de uso frecuente a favoritos para facilitar el acceso desde cualquier lugar.</string>
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">Editor de archivos</string>
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Análisis de almacenamiento</string>
|
||||
<string name="images">Imágenes</string>
|
||||
<string name="videos">Vídeos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documentos</string>
|
||||
<string name="downloads">Descargas</string>
|
||||
<string name="archives">Archivos</string>
|
||||
<string name="others">Otros</string>
|
||||
<string name="storage_free">libre</string>
|
||||
<string name="total_storage">Almacenamiento total: %s</string>
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Activar acceso root</string>
|
||||
<string name="press_back_twice">Se requiere presionar el botón atras dos veces para salir de la app</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
<string name="audio">Audio</string>
|
||||
</resources>
|
||||
@@ -13,16 +13,13 @@
|
||||
<string name="recents">Viimati kasutatud</string>
|
||||
<string name="show_recents">Näita viimatikasutatud faile</string>
|
||||
<string name="invert_colors">Pööra värvid tagurpidi</string>
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Ava kui</string>
|
||||
<string name="text_file">tekstifailina</string>
|
||||
<string name="image_file">pildifailina</string>
|
||||
<string name="audio_file">helifailina</string>
|
||||
<string name="video_file">videofailina</string>
|
||||
<string name="other_file">muu failina</string>
|
||||
<!-- Compression -->
|
||||
<string name="compress">Paki kokku</string>
|
||||
<string name="compress_pro">Paki kokku (Pro)</string>
|
||||
<string name="decompress">Paki lahti</string>
|
||||
<string name="compress_as">Paki kokku kui</string>
|
||||
<string name="compressing">Kokkupakkimine…</string>
|
||||
@@ -31,28 +28,20 @@
|
||||
<string name="decompression_successful">Lahtipakitud</string>
|
||||
<string name="compressing_failed">Lahtipakkimine ei õnnestunud</string>
|
||||
<string name="decompressing_failed">Kokkupakkimine ei õnnestunud</string>
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Halda lemmikuid</string>
|
||||
<string name="go_to_favorite">Ava mõni lemmikutest</string>
|
||||
<string name="favorites_activity_placeholder">Selleks, et alati oleks mugav ligipääs, lisa enamkasutatud kaustad lemmikuteks.</string>
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">Failiredaktor</string>
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Andmekandja analüüs</string>
|
||||
<string name="images">Pildid</string>
|
||||
<string name="videos">Videod</string>
|
||||
<string name="audio">Helifailid</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Dokumendid</string>
|
||||
<string name="downloads">Allalaadimised</string>
|
||||
<string name="archives">Failiarhiivid</string>
|
||||
<string name="others">Muud failid</string>
|
||||
<string name="storage_free">vaba</string>
|
||||
<string name="total_storage">Kogu salvestusruum: %s</string>
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Luba ligipääs juurkasutajale</string>
|
||||
<string name="press_back_twice">Rakendusest väljumiseks eelda kahte Tagasi-nupu vajutust</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
@@ -1,2 +1,47 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="images">Irudiak</string>
|
||||
<string name="videos">Bideoak</string>
|
||||
<string name="open_as">Ireki honela</string>
|
||||
<string name="favorites_activity_placeholder">Gogokoetara maiz erabiltzen diren karpetak gehi ditzakezu edonondik erraz sartzeko.</string>
|
||||
<string name="storage_analysis">Biltegiratze-analisia</string>
|
||||
<string name="documents">Dokumentuak</string>
|
||||
<string name="downloads">Deskargak</string>
|
||||
<string name="others">Bestelakoak</string>
|
||||
<string name="enable_root_access">Gaitu root sarbidea</string>
|
||||
<string name="press_back_twice">Sakatu Atzera bi aldiz sakatu aplikaziotik irteteko</string>
|
||||
<string name="image_file">Irudi-fitxategia</string>
|
||||
<string name="audio_file">Audio-fitxategia</string>
|
||||
<string name="compression_successful">Trinkotzea behar bezala burutu da</string>
|
||||
<string name="decompressing_failed">Deskonprimatzeak huts egin du</string>
|
||||
<string name="manage_favorites">Kudeatu gogokoak</string>
|
||||
<string name="file_editor">Fitxategien editorea</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="path_copied">Bidea kopiatu da</string>
|
||||
<string name="select_audio_file">Hautatu audio-fitxategi bat</string>
|
||||
<string name="search_folder">Bilatu karpeta</string>
|
||||
<string name="rooted_device_only">Eragiketa honek rooteatutako gailuetan bakarrik funtzionatzen du</string>
|
||||
<string name="recents">Azkenak</string>
|
||||
<string name="show_recents">Erakutsi azkenak</string>
|
||||
<string name="invert_colors">Alderantzikatu koloreak</string>
|
||||
<string name="text_file">Testu-fitxategia</string>
|
||||
<string name="video_file">Bideo-fitxategia</string>
|
||||
<string name="other_file">Bestelako fitxategia</string>
|
||||
<string name="compress">Trinkotu</string>
|
||||
<string name="compress_as">Trinkotu honela</string>
|
||||
<string name="compressing">Trinkotzen…</string>
|
||||
<string name="decompressing">Deskonprimatzen…</string>
|
||||
<string name="decompression_successful">Deskonprimatzea behar bezala burutu da</string>
|
||||
<string name="compressing_failed">Trinkotzeak huts egin du</string>
|
||||
<string name="decompress">Deskonprimatu</string>
|
||||
<string name="go_to_favorite">Joan gogokoetara</string>
|
||||
<string name="archives">Artxiboak</string>
|
||||
<string name="storage_free">librea</string>
|
||||
<string name="total_storage">Biltegiratze osoa: %s</string>
|
||||
<string name="app_launcher_name">Fitxategi kudeatzailea</string>
|
||||
<string name="press_back_again">Sakatu berriro atzera irteteko</string>
|
||||
<string name="go_to_home_folder">Joan hasierako karpetara</string>
|
||||
<string name="set_as_home_folder">Ezarri hasierako karpeta gisa</string>
|
||||
<string name="home_folder_updated">Hasierako karpeta eguneratu da</string>
|
||||
<string name="copy_path">Kopiatu bidea arbelean</string>
|
||||
</resources>
|
||||
@@ -1,2 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="images">تصاویر</string>
|
||||
<string name="audio">صدا</string>
|
||||
</resources>
|
||||
@@ -13,16 +13,13 @@
|
||||
<string name="recents">Viimeaikaiset</string>
|
||||
<string name="show_recents">Näytä viimeaikaiset</string>
|
||||
<string name="invert_colors">Käänteiset värit</string>
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Avaa nimellä</string>
|
||||
<string name="text_file">Tekstitiedostona</string>
|
||||
<string name="image_file">Kuvatiedostona</string>
|
||||
<string name="audio_file">Äänitiedostona</string>
|
||||
<string name="video_file">Videotiedostona</string>
|
||||
<string name="other_file">Jonakin muuna tiedostona</string>
|
||||
<!-- Compression -->
|
||||
<string name="compress">Pakkaa</string>
|
||||
<string name="compress_pro">Pakkaa (Pro)</string>
|
||||
<string name="decompress">Pura</string>
|
||||
<string name="compress_as">Pakkausmuoto</string>
|
||||
<string name="compressing">Pakataan…</string>
|
||||
@@ -31,28 +28,20 @@
|
||||
<string name="decompression_successful">Purkaminen valmis</string>
|
||||
<string name="compressing_failed">Pakkaaminen epäonnistui</string>
|
||||
<string name="decompressing_failed">Purkaminen epäonnistui</string>
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Hallitse suosikkeja</string>
|
||||
<string name="go_to_favorite">Mene suosikkiin</string>
|
||||
<string name="favorites_activity_placeholder">Voit lisätä usein käyttämiäsi kansiota suosikeiksi, jolloin niiden käyttö on helppoa mistä vain.</string>
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">Tiedostoeditori</string>
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Tallennustilan analyysi</string>
|
||||
<string name="images">Kuvat</string>
|
||||
<string name="videos">Videot</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Dokumentit</string>
|
||||
<string name="downloads">Lataukset</string>
|
||||
<string name="archives">Arkistot</string>
|
||||
<string name="others">Muut</string>
|
||||
<string name="storage_free">ilmainen</string>
|
||||
<string name="storage_free">vapaana</string>
|
||||
<string name="total_storage">Tallennustila: %s</string>
|
||||
<!-- Settings -->
|
||||
<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>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
<string name="audio">Ääni</string>
|
||||
</resources>
|
||||
@@ -13,46 +13,35 @@
|
||||
<string name="recents">Récents</string>
|
||||
<string name="show_recents">Afficher les récents</string>
|
||||
<string name="invert_colors">Inverser les couleurs</string>
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Ouvert comme</string>
|
||||
<string name="text_file">Fichier texte</string>
|
||||
<string name="image_file">Fichier image</string>
|
||||
<string name="audio_file">Fichier audio</string>
|
||||
<string name="video_file">Fichier vidéo</string>
|
||||
<string name="other_file">Autre fichier</string>
|
||||
<!-- Compression -->
|
||||
<string name="compress">Compresser</string>
|
||||
<string name="compress_pro">Compresser (Pro)</string>
|
||||
<string name="decompress">Décompresser</string>
|
||||
<string name="compress_as">Compresser sous</string>
|
||||
<string name="compressing">Compression…</string>
|
||||
<string name="decompressing">Décompression…</string>
|
||||
<string name="compression_successful">Compression réussie</string>
|
||||
<string name="decompression_successful">Décompression réussie</string>
|
||||
<string name="compressing_failed">Compression ratée</string>
|
||||
<string name="decompressing_failed">Décompression ratée</string>
|
||||
<!-- Favorites -->
|
||||
<string name="compressing_failed">Échec de la compression</string>
|
||||
<string name="decompressing_failed">Échec de la décompression</string>
|
||||
<string name="manage_favorites">Gérer les favoris</string>
|
||||
<string name="go_to_favorite">Aller au favori</string>
|
||||
<string name="favorites_activity_placeholder">Vous pouvez ajouter des dossiers souvent utilisés comme favoris pour y avoir accès rapidement depuis n\'importe où.</string>
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">Éditeur de fichier</string>
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Analyse du stockage</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Vidéos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Téléchargements</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Autres</string>
|
||||
<string name="storage_free">libre</string>
|
||||
<string name="total_storage">Stockage total : %s</string>
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Activer les droits root</string>
|
||||
<string name="press_back_twice">Obligation d\'appuyer deux fois sur la touche Retour pour quitter l\'application</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
<string name="audio">Audio</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="archives">Archives</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_launcher_name">Bainisteoir Comhad</string>
|
||||
<string name="go_to_home_folder">Téigh go dtí an fillteán baile</string>
|
||||
<string name="home_folder_updated">Nuashonraíodh an fillteán baile</string>
|
||||
<string name="copy_path">Cóipeáil cosán chuig an ngearrthaisce</string>
|
||||
<string name="path_copied">Cóipeáladh an cosán</string>
|
||||
<string name="invert_colors">Inbhéartaigh dathanna</string>
|
||||
<string name="open_as">Oscail mar</string>
|
||||
<string name="video_file">Comhad físe</string>
|
||||
<string name="other_file">Comhad eile</string>
|
||||
<string name="compress">Comhbhrúigh</string>
|
||||
<string name="compress_as">Comhbhrúigh mar</string>
|
||||
<string name="decompressing">Ag dí-chomhbhrú…</string>
|
||||
<string name="decompression_successful">Dí-chomhbhrú rathúil</string>
|
||||
<string name="compressing_failed">Theip ar chomhbhrú</string>
|
||||
<string name="go_to_favorite">Téigh go dtí is fearr leat</string>
|
||||
<string name="file_editor">Eagarthóir Comhad</string>
|
||||
<string name="storage_analysis">Anailís stórála</string>
|
||||
<string name="images">Íomhánna</string>
|
||||
<string name="downloads">Íoslódálacha</string>
|
||||
<string name="archives">Cartlanna</string>
|
||||
<string name="others">Eile</string>
|
||||
<string name="storage_free">saor</string>
|
||||
<string name="total_storage">Stóras iomlán: %s</string>
|
||||
<string name="enable_root_access">Cumasaigh rochtain fréimhe</string>
|
||||
<string name="press_back_twice">A cheangal ar an cnaipe Ar ais faoi dhó a fhágáil ar an aip</string>
|
||||
<string name="press_back_again">Brúigh ar ais arís chun imeacht</string>
|
||||
<string name="select_audio_file">Roghnaigh comhad fuaime</string>
|
||||
<string name="search_folder">Cuardach fillteán</string>
|
||||
<string name="recents">Le déanaí</string>
|
||||
<string name="show_recents">Taispeáin nuashonruithe</string>
|
||||
<string name="set_as_home_folder">Socraigh mar fhillteán baile</string>
|
||||
<string name="image_file">Comhad íomhá</string>
|
||||
<string name="audio_file">Comhad fuaime</string>
|
||||
<string name="rooted_device_only">Ní oibríonn an oibríocht seo ach ar fheistí fréamhaithe</string>
|
||||
<string name="text_file">Comhad téacs</string>
|
||||
<string name="decompress">Dí-chomhbhrú</string>
|
||||
<string name="compressing">Ag comhbhrúite…</string>
|
||||
<string name="favorites_activity_placeholder">Is féidir leat fillteáin a úsáidtear go minic a chur le ceanáin ar mhaithe le rochtain éasca ó áit ar bith.</string>
|
||||
<string name="videos">Físeáin</string>
|
||||
<string name="documents">Doiciméid</string>
|
||||
<string name="compression_successful">Comhbhrú rathúil</string>
|
||||
<string name="decompressing_failed">Theip ar dhí-chomhbhrú</string>
|
||||
<string name="manage_favorites">Theip ar an dí-chomhbhrú</string>
|
||||
<string name="audio">Fuaime</string>
|
||||
</resources>
|
||||
@@ -1,11 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_launcher_name">Xestor de ficheiros</string>
|
||||
<string name="press_back_again">Preme novamente para saír</string>
|
||||
<string name="go_to_home_folder">Ir para o cartafol persoal</string>
|
||||
<string name="set_as_home_folder">Poñer como predeterminado este cartafol persoal</string>
|
||||
<string name="home_folder_updated">Cartafol persoal actualizado</string>
|
||||
<string name="copy_path">Copiar ruta para a área de transferencia</string>
|
||||
<string name="app_launcher_name">Ficheiros</string>
|
||||
<string name="press_back_again">Preme outra vez para saír</string>
|
||||
<string name="go_to_home_folder">Ir ao cartafol de inicio</string>
|
||||
<string name="set_as_home_folder">Establecer como cartafol de inicio</string>
|
||||
<string name="home_folder_updated">Cartafol de inicio actualizado</string>
|
||||
<string name="copy_path">Copiar ruta ao portapapeis</string>
|
||||
<string name="path_copied">Copiouse a ruta</string>
|
||||
<string name="select_audio_file">Seleccione un ficheiro de audio</string>
|
||||
<string name="search_folder">Buscar cartafol</string>
|
||||
@@ -13,16 +13,12 @@
|
||||
<string name="recents">Recentes</string>
|
||||
<string name="show_recents">Amosar recentes</string>
|
||||
<string name="invert_colors">Inverte as cores</string>
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Abrir como</string>
|
||||
<string name="text_file">Texto</string>
|
||||
<string name="image_file">Imaxe</string>
|
||||
<string name="audio_file">Audio</string>
|
||||
<string name="video_file">Vídeo</string>
|
||||
<string name="other_file">Outro tipo de ficheiro</string>
|
||||
<!-- Compression -->
|
||||
<string name="other_file">Outros ficheiros</string>
|
||||
<string name="compress">Comprimir</string>
|
||||
<string name="compress_pro">Comprimir (Pro)</string>
|
||||
<string name="decompress">Descomprimir</string>
|
||||
<string name="compress_as">Comprimir como</string>
|
||||
<string name="compressing">Comprimindo…</string>
|
||||
@@ -31,28 +27,21 @@
|
||||
<string name="decompression_successful">Descompresión terminada</string>
|
||||
<string name="compressing_failed">Erro ao comprimir</string>
|
||||
<string name="decompressing_failed">Erro ao descomprimir</string>
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Xestionar favoritos</string>
|
||||
<string name="go_to_favorite">Ir a favorito</string>
|
||||
<string name="favorites_activity_placeholder">Pode adiccionar cartafoles como favoritos para un acesso mais rápido.</string>
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">Editor de ficheiros</string>
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Análise do almacenamento</string>
|
||||
<string name="storage_analysis">Análise da almacenaxe</string>
|
||||
<string name="images">Imaxes</string>
|
||||
<string name="videos">Vídeos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Arquivos</string>
|
||||
<string name="others">Outros</string>
|
||||
<string name="storage_free">ceibe</string>
|
||||
<string name="total_storage">Almacenamento total: %s</string>
|
||||
<!-- Settings -->
|
||||
<string name="storage_free">libre</string>
|
||||
<string name="total_storage">Almacenaxe total: %s</string>
|
||||
<string name="enable_root_access">Activar acceso root</string>
|
||||
<string name="press_back_twice">Require premer Atrás dúas veces para saír da aplicación</string>
|
||||
<!--
|
||||
Non atopou todas as cadeas que debería traducir? Existen algunhas máis en
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
<string name="audio_file">Ficheiro de audio</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documentos</string>
|
||||
<string name="downloads">Descargas</string>
|
||||
</resources>
|
||||
@@ -1,63 +1,47 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_launcher_name">फ़ाइल प्रबंधक</string>
|
||||
<string name="app_launcher_name">फाइल प्रबंधक</string>
|
||||
<string name="press_back_again">फिर से बाहर निकलने के लिए प्रेस करें</string>
|
||||
<string name="go_to_home_folder">घर फ़ोल्डर में जाओ</string>
|
||||
<string name="set_as_home_folder">होम फ़ोल्डर के रूप में सेट करें</string>
|
||||
<string name="home_folder_updated">होम फ़ोल्डर अद्यतन</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="search_folder">खोज फोल्डर</string>
|
||||
<string name="rooted_device_only">यह ऑपरेशन केवल रूटेड डिवाइस पर काम करता है</string>
|
||||
<string name="recents">हाल के</string>
|
||||
<string name="show_recents">हाल ही में दिखाएं</string>
|
||||
<string name="invert_colors">Invert colors</string>
|
||||
<!-- Open as -->
|
||||
<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>
|
||||
|
||||
<!-- Compression -->
|
||||
<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="compress_pro">संपीड़न (Pro)</string>
|
||||
<string name="decompress">अवसाद</string>
|
||||
<string name="compress_as">इस रूप में संपीड़न</string>
|
||||
<string name="compressing">संपीड़न हो रहा है</string>
|
||||
<string name="decompressing">अवसाद हो रहा है</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>
|
||||
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">पसंदीदा प्रबंधित करें</string>
|
||||
<string name="go_to_favorite">पसंदीदा के जाओ</string>
|
||||
<string name="favorites_activity_placeholder">आप कहीं से भी आसानी से पहुंच के लिए पसंदीदा में अक्सर इस्तेमाल किए जाने वाले फ़ोल्डर जोड़ सकते हैं।</string>
|
||||
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">फ़ाइल संपादक</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="file_editor">फाइल संपादक</string>
|
||||
<string name="enable_root_access">रूट एक्सेस</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
<string name="invert_colors">रंगों को उलटा करें</string>
|
||||
<string name="storage_analysis">स्टोरेज विश्लेषण</string>
|
||||
<string name="images">छवियां</string>
|
||||
<string name="videos">वीडियो</string>
|
||||
<string name="archives">अभिलेखागार</string>
|
||||
<string name="others">अन्य</string>
|
||||
<string name="storage_free">मुक्त</string>
|
||||
<string name="total_storage">कुल स्टोरेज: %s</string>
|
||||
<string name="audio">ऑडियो</string>
|
||||
<string name="documents">दस्तावेजों</string>
|
||||
<string name="downloads">डाउनलोड्स</string>
|
||||
<string name="press_back_twice">ऐप छोड़ने के लिए बैक को दो बार दबाने की आवश्यकता है</string>
|
||||
</resources>
|
||||
@@ -13,16 +13,13 @@
|
||||
<string name="recents">Nedavni</string>
|
||||
<string name="show_recents">Pokaži nedavne</string>
|
||||
<string name="invert_colors">Invertiraj boje</string>
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Otvori kao</string>
|
||||
<string name="text_file">Tekstualna datoteka</string>
|
||||
<string name="image_file">Slikovna datoteka</string>
|
||||
<string name="audio_file">Audio datoteka</string>
|
||||
<string name="video_file">Video datoteka</string>
|
||||
<string name="other_file">Ostala datoteka</string>
|
||||
<!-- Compression -->
|
||||
<string name="compress">Komprimiraj</string>
|
||||
<string name="compress_pro">Komprimiraj (Pro)</string>
|
||||
<string name="decompress">Dekomprimiraj</string>
|
||||
<string name="compress_as">Komprimiraj kao</string>
|
||||
<string name="compressing">Komprimiranje…</string>
|
||||
@@ -31,28 +28,20 @@
|
||||
<string name="decompression_successful">Dekomprimiranje uspješno</string>
|
||||
<string name="compressing_failed">Komprimiranje neuspješno</string>
|
||||
<string name="decompressing_failed">Dekomprimiranje neuspješno</string>
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Upravljaj favoritima</string>
|
||||
<string name="go_to_favorite">Idi na favorite</string>
|
||||
<string name="favorites_activity_placeholder">Možeš dodavati često korištene mape u favorite za jednostavan pristup s bilo kojeg mjesta.</string>
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">Uređivač datoteka</string>
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Analiza spremišta</string>
|
||||
<string name="images">Slike</string>
|
||||
<string name="videos">Video</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="videos">Videa</string>
|
||||
<string name="documents">Dokumenti</string>
|
||||
<string name="downloads">Preuzimanja</string>
|
||||
<string name="archives">Arhive</string>
|
||||
<string name="others">Ostali</string>
|
||||
<string name="storage_free">slobodno</string>
|
||||
<string name="total_storage">Ukupna memorija: %s</string>
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Aktiviraj administratorski pristup</string>
|
||||
<string name="press_back_twice">Zahtijevaj pritiskanje gumba „Natrag” dvaput za napuštanje aplikacije</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
<string name="audio">Audio</string>
|
||||
</resources>
|
||||
@@ -13,16 +13,13 @@
|
||||
<string name="recents">Frissek</string>
|
||||
<string name="show_recents">Frissek megjelenítése</string>
|
||||
<string name="invert_colors">Színek invertálása</string>
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Megnyitás másként</string>
|
||||
<string name="text_file">Szövegfájl</string>
|
||||
<string name="image_file">Képfájl</string>
|
||||
<string name="audio_file">Hangfájl</string>
|
||||
<string name="video_file">Videófájl</string>
|
||||
<string name="other_file">Egyéb fájl</string>
|
||||
<!-- Compression -->
|
||||
<string name="compress">Tömörítés</string>
|
||||
<string name="compress_pro">Tömörítés (Pro)</string>
|
||||
<string name="decompress">Kibontás</string>
|
||||
<string name="compress_as">Tömörítés másként</string>
|
||||
<string name="compressing">Tömörítés…</string>
|
||||
@@ -31,28 +28,20 @@
|
||||
<string name="decompression_successful">Kibontás sikeres</string>
|
||||
<string name="compressing_failed">Tömörítés sikertelen</string>
|
||||
<string name="decompressing_failed">Kibontás sikertelen</string>
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Kedvencek kezelése</string>
|
||||
<string name="go_to_favorite">Ugrás kedvenchez</string>
|
||||
<string name="favorites_activity_placeholder">A gyakran használt mappákat kedvencnek jelölheti, hogy bárhonnan könnyen elérje őket.</string>
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">Fájlszerkesztő</string>
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Tárolóelemzés</string>
|
||||
<string name="images">Képek</string>
|
||||
<string name="videos">Videók</string>
|
||||
<string name="audio">Hangok</string>
|
||||
<string name="audio">Hang</string>
|
||||
<string name="documents">Dokumentumok</string>
|
||||
<string name="downloads">Letöltések</string>
|
||||
<string name="archives">Archívumok</string>
|
||||
<string name="others">Egyebek</string>
|
||||
<string name="storage_free">szabad</string>
|
||||
<string name="total_storage">Összes tárhely: %s</string>
|
||||
<!-- Settings -->
|
||||
<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>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
</resources>
|
||||
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_launcher_name">Gestor de files</string>
|
||||
<string name="go_to_home_folder">Vader al dossier de initio</string>
|
||||
<string name="set_as_home_folder">Definir como dossier de initio</string>
|
||||
<string name="recents">Recente</string>
|
||||
<string name="show_recents">Monstrar le recentes</string>
|
||||
<string name="open_as">Aperir como</string>
|
||||
<string name="image_file">File de imagine</string>
|
||||
<string name="audio_file">File de audio</string>
|
||||
<string name="video_file">File de video</string>
|
||||
<string name="other_file">Altere files</string>
|
||||
<string name="file_editor">Editor de files</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="images">Imagines</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="downloads">Discargamentos</string>
|
||||
<string name="archives">Files</string>
|
||||
<string name="others">Alteres</string>
|
||||
<string name="storage_free">libere</string>
|
||||
<string name="enable_root_access">Activar le accesso root</string>
|
||||
<string name="home_folder_updated">Dossier de initio actualisate</string>
|
||||
<string name="copy_path">Copiar le percurso al area de transferentia</string>
|
||||
<string name="search_folder">Cercar dossier</string>
|
||||
<string name="invert_colors">Inverter le colores</string>
|
||||
<string name="text_file">File de texto</string>
|
||||
<string name="manage_favorites">Gerer le favoritos</string>
|
||||
<string name="go_to_favorite">Vader al favoritos</string>
|
||||
<string name="total_storage">Immagazinage total: %s</string>
|
||||
<string name="path_copied">Percurso copiate</string>
|
||||
<string name="select_audio_file">Selectionar un file de audio</string>
|
||||
</resources>
|
||||
@@ -1,28 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_launcher_name">File Manager</string>
|
||||
<string name="press_back_again">Tekan sekali lagi untuk keluar</string>
|
||||
<string name="go_to_home_folder">Buka folder beranda</string>
|
||||
<string name="set_as_home_folder">Setel sebagai folder beranda</string>
|
||||
<string name="home_folder_updated">Folder beranda diperbarui</string>
|
||||
<string name="copy_path">Salin jalur ke papan klip</string>
|
||||
<string name="path_copied">Jalur disalin</string>
|
||||
<string name="select_audio_file">Silakan pilih berkas audio</string>
|
||||
<string name="select_audio_file">Silakan pilih file audio</string>
|
||||
<string name="search_folder">Cari folder</string>
|
||||
<string name="rooted_device_only">Tindakan ini hanya bekerja pada perangkat dengan akses root</string>
|
||||
<string name="recents">Terkini</string>
|
||||
<string name="show_recents">Tampilkan terkini</string>
|
||||
<string name="invert_colors">Invers warna</string>
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Buka sebagai</string>
|
||||
<string name="text_file">Berkas teks</string>
|
||||
<string name="image_file">Berkas gambar</string>
|
||||
<string name="audio_file">Berkas audio</string>
|
||||
<string name="video_file">Berkas video</string>
|
||||
<string name="other_file">Berkas lainnya</string>
|
||||
<!-- Compression -->
|
||||
<string name="text_file">File teks</string>
|
||||
<string name="image_file">File gambar</string>
|
||||
<string name="audio_file">File audio</string>
|
||||
<string name="video_file">File video</string>
|
||||
<string name="other_file">File lainnya</string>
|
||||
<string name="compress">Kompres</string>
|
||||
<string name="compress_pro">Kompres (Pro)</string>
|
||||
<string name="decompress">Dekompres</string>
|
||||
<string name="compress_as">Kompres sebagai</string>
|
||||
<string name="compressing">Mengompres…</string>
|
||||
@@ -31,28 +27,21 @@
|
||||
<string name="decompression_successful">Berhasil dekompresi</string>
|
||||
<string name="compressing_failed">Gagal mengompres</string>
|
||||
<string name="decompressing_failed">Gagal dekompresi</string>
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Kelola favorit</string>
|
||||
<string name="go_to_favorite">Buka favorit</string>
|
||||
<string name="favorites_activity_placeholder">Anda bisa menambahkan folder yang sering digunakan ke favorit untuk kemudahan akses dari mana saja.</string>
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">Penyunting Berkas</string>
|
||||
<!-- Storage analysis -->
|
||||
<string name="file_editor">Penyunting File</string>
|
||||
<string name="storage_analysis">Analisis penyimpanan</string>
|
||||
<string name="images">Gambar</string>
|
||||
<string name="videos">Video</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Arsip</string>
|
||||
<string name="others">Lainnya</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total penyimpanan: %s</string>
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Aktifkan akses root</string>
|
||||
<string name="press_back_twice">Wajib tekan tombol kembali dua kali untuk keluar aplikasi</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Dokumen</string>
|
||||
<string name="app_launcher_name">Pengelola File</string>
|
||||
<string name="downloads">Unduhan</string>
|
||||
<string name="storage_free">bebas</string>
|
||||
</resources>
|
||||
@@ -13,16 +13,13 @@
|
||||
<string name="recents">Nýleg</string>
|
||||
<string name="show_recents">Sýna nýleg</string>
|
||||
<string name="invert_colors">Snúa litum við</string>
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Opna sem</string>
|
||||
<string name="text_file">Textaskrá</string>
|
||||
<string name="image_file">Myndskrá</string>
|
||||
<string name="audio_file">Hljóðskrá</string>
|
||||
<string name="video_file">Myndbandsskrá</string>
|
||||
<string name="other_file">Annað</string>
|
||||
<!-- Compression -->
|
||||
<string name="compress">Þjappa</string>
|
||||
<string name="compress_pro">Þjappa (Pro)</string>
|
||||
<string name="decompress">Afþjappa</string>
|
||||
<string name="compress_as">Þjappa sem</string>
|
||||
<string name="compressing">Að þjappa…</string>
|
||||
@@ -31,13 +28,10 @@
|
||||
<string name="decompression_successful">Afþjöppun tókst</string>
|
||||
<string name="compressing_failed">Þjöppun mistókst</string>
|
||||
<string name="decompressing_failed">Afþjöppun mistókst</string>
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Stjórna eftirlæti</string>
|
||||
<string name="go_to_favorite">Fara í eftirlæti</string>
|
||||
<string name="favorites_activity_placeholder">Þú getur sett möppur í eftirlæti til að auðvelda aðgang hvaðan sem er.</string>
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">Skráaritill</string>
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Geymslugreining</string>
|
||||
<string name="images">Myndir</string>
|
||||
<string name="videos">Myndbönd</string>
|
||||
@@ -48,7 +42,6 @@
|
||||
<string name="others">Annað</string>
|
||||
<string name="storage_free">laust</string>
|
||||
<string name="total_storage">Samtals geymslupláss: %s</string>
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Virkja aðgang að rót</string>
|
||||
<string name="press_back_twice">Krefjast þess að ýta tvisvar á „til baka“ til að loka forriti</string>
|
||||
</resources>
|
||||
@@ -13,16 +13,13 @@
|
||||
<string name="recents">Recenti</string>
|
||||
<string name="show_recents">Mostra i recenti</string>
|
||||
<string name="invert_colors">Inverti colori</string>
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Apri come</string>
|
||||
<string name="text_file">File di testo</string>
|
||||
<string name="image_file">File immagine</string>
|
||||
<string name="audio_file">File audio</string>
|
||||
<string name="video_file">File video</string>
|
||||
<string name="other_file">Altro</string>
|
||||
<!-- Compression -->
|
||||
<string name="compress">Comprimi</string>
|
||||
<string name="compress_pro">Comprimi (Pro)</string>
|
||||
<string name="decompress">Decomprimi</string>
|
||||
<string name="compress_as">Comprimi come</string>
|
||||
<string name="compressing">Compressione…</string>
|
||||
@@ -31,28 +28,20 @@
|
||||
<string name="decompression_successful">Decompressione completata</string>
|
||||
<string name="compressing_failed">Impossibile comprimere</string>
|
||||
<string name="decompressing_failed">Impossibile decomprimere</string>
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Gestisci i preferiti</string>
|
||||
<string name="go_to_favorite">Vai al preferito</string>
|
||||
<string name="favorites_activity_placeholder">Si possono aggiungere le cartelle usate frequentemente ai preferiti, per un rapido accesso da qualsiasi posizione.</string>
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">Editor dei file</string>
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Analisi dello stoccaggio</string>
|
||||
<string name="images">Immagini</string>
|
||||
<string name="videos">Video</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documenti</string>
|
||||
<string name="downloads">Scaricamenti</string>
|
||||
<string name="downloads">Scaricati</string>
|
||||
<string name="archives">Archivi</string>
|
||||
<string name="others">Altri</string>
|
||||
<string name="storage_free">libero</string>
|
||||
<string name="total_storage">Memoria totale: %s</string>
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Abilita accesso root</string>
|
||||
<string name="press_back_twice">Richiedi di premere Indietro due volte per uscire dall\'app</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
<string name="audio">Audio</string>
|
||||
</resources>
|
||||
@@ -1,58 +1,47 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_launcher_name">מנהל קבצים</string>
|
||||
<string name="press_back_again">לחץ שוב אחורה כדי לצאת</string>
|
||||
<string name="go_to_home_folder">עבור לתיקיית הבית</string>
|
||||
<string name="app_launcher_name">מנהל הקבצים</string>
|
||||
<string name="press_back_again">ליציאה יש ללחוץ אחורה פעם נוספת</string>
|
||||
<string name="go_to_home_folder">מעבר לתיקיית הבית</string>
|
||||
<string name="set_as_home_folder">הגדר כתיקיית בית</string>
|
||||
<string name="home_folder_updated">תיקיית הבית עודכנה</string>
|
||||
<string name="copy_path">העתק נתיב ללוח</string>
|
||||
<string name="path_copied">הנתיב הועתק</string>
|
||||
<string name="select_audio_file">אנא בחר קובץ שמע</string>
|
||||
<string name="search_folder">חיפוש תיקייה</string>
|
||||
<string name="rooted_device_only">פעולה זו פועלת רק במכשירים עם רוט</string>
|
||||
<string name="rooted_device_only">פעולה זו עובדת רק במכשירים עם רוט</string>
|
||||
<string name="recents">אחרונים</string>
|
||||
<string name="show_recents">הצג את האחרונים</string>
|
||||
<string name="show_recents">הצג אחרונים</string>
|
||||
<string name="invert_colors">הפוך צבעים</string>
|
||||
<!-- Open as -->
|
||||
<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>
|
||||
<!-- Compression -->
|
||||
<string name="compress">לדחוס</string>
|
||||
<string name="compress_pro">דחיסה (פרו)</string>
|
||||
<string name="decompress">לבטל דחיסה</string>
|
||||
<string name="compress_as">דחוס כ</string>
|
||||
<string name="compress">דחיסה</string>
|
||||
<string name="decompress">חילוץ</string>
|
||||
<string name="compress_as">דחיסה כ</string>
|
||||
<string name="compressing">דוחס…</string>
|
||||
<string name="decompressing">משחרר דחיסה…</string>
|
||||
<string name="decompressing">מחלץ…</string>
|
||||
<string name="compression_successful">הדחיסה הצליחה</string>
|
||||
<string name="decompression_successful">שחרור הדחיסה הצליח</string>
|
||||
<string name="decompression_successful">החילוץ הצליח</string>
|
||||
<string name="compressing_failed">הדחיסה נכשלה</string>
|
||||
<string name="decompressing_failed">פעולת שחרור הדחיסה נכשל</string>
|
||||
<!-- Favorites -->
|
||||
<string name="decompressing_failed">החילוץ נכשל</string>
|
||||
<string name="manage_favorites">נהל מועדפים</string>
|
||||
<string name="go_to_favorite">עבור למועדפים</string>
|
||||
<string name="favorites_activity_placeholder">אתה יכול להוסיף תיקיות בשימוש תכוף למועדפים לגישה נוחה מכל מקום.</string>
|
||||
<!-- File Editor -->
|
||||
<string name="favorites_activity_placeholder">באפשרותך להוסיף תיקיות בשימוש תכוף למועדפים לגישה נוחה מכל מקום.</string>
|
||||
<string name="file_editor">עורך הקבצים</string>
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">ניתוח אחסון</string>
|
||||
<string name="images">תמונות</string>
|
||||
<string name="videos">וידיאו</string>
|
||||
<string name="videos">סרטונים</string>
|
||||
<string name="audio">שמע</string>
|
||||
<string name="documents">מסמכים</string>
|
||||
<string name="downloads">הורדות</string>
|
||||
<string name="archives">ארכיון</string>
|
||||
<string name="others">אחרים</string>
|
||||
<string name="storage_free">חינם</string>
|
||||
<string name="storage_free">חופשי</string>
|
||||
<string name="total_storage">שטח אחסון כולל: %s</string>
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">אפשר גישת שורש</string>
|
||||
<string name="press_back_twice">דרוש לחיצה על חזרה פעמיים כדי לצאת מהאפליקציה דרוש לחיצה על חזרה פעמיים כדי לצאת מהאפליקציה</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
<string name="press_back_twice">דרישת לחיצה כפולה על כפתור אחורה כדי לצאת מהאפליקציה</string>
|
||||
</resources>
|
||||
@@ -13,16 +13,13 @@
|
||||
<string name="recents">最近</string>
|
||||
<string name="show_recents">最近を表示</string>
|
||||
<string name="invert_colors">色を反転</string>
|
||||
<!-- Open as -->
|
||||
<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>
|
||||
<!-- Compression -->
|
||||
<string name="compress">圧縮</string>
|
||||
<string name="compress_pro">圧縮 (Pro)</string>
|
||||
<string name="decompress">解凍</string>
|
||||
<string name="compress_as">形式を指定して圧縮</string>
|
||||
<string name="compressing">圧縮しています…</string>
|
||||
@@ -31,28 +28,20 @@
|
||||
<string name="decompression_successful">正常に解凍しました</string>
|
||||
<string name="compressing_failed">圧縮できませんでした</string>
|
||||
<string name="decompressing_failed">解凍できませんでした</string>
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">お気に入りを管理</string>
|
||||
<string name="go_to_favorite">お気に入りを開く</string>
|
||||
<string name="favorites_activity_placeholder">よく使うフォルダをお気に入りに追加すると、どこからでも簡単にアクセスできます。</string>
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">ファイル エディター</string>
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">ストレージ解析</string>
|
||||
<string name="images">画像</string>
|
||||
<string name="videos">動画</string>
|
||||
<string name="audio">オーディオ</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>
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">ルートアクセスを有効にする</string>
|
||||
<string name="press_back_twice">戻るボタンを2回押してアプリを閉じる</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
</resources>
|
||||
@@ -1,30 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<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="set_as_home_folder">홈 폴더 설정</string>
|
||||
<string name="home_folder_updated">홈 폴더 설정완료</string>
|
||||
<string name="copy_path">클립보드에 경로 복사</string>
|
||||
<string name="path_copied">클립보드에 복사됨</string>
|
||||
<string name="select_audio_file">오디도 파일을 선택하세요.</string>
|
||||
<string name="select_audio_file">오디도 파일을 선택하세요</string>
|
||||
<string name="search_folder">폴더 및 파일검색</string>
|
||||
<string name="rooted_device_only">This operation works only on rooted devices</string>
|
||||
<string name="recents">Recents</string>
|
||||
<string name="show_recents">Show recents</string>
|
||||
<string name="invert_colors">Invert colors</string>
|
||||
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Open as</string>
|
||||
<string name="text_file">Text file</string>
|
||||
<string name="image_file">Image file</string>
|
||||
<string name="audio_file">Audio file</string>
|
||||
<string name="video_file">Video file</string>
|
||||
<string name="other_file">Other file</string>
|
||||
|
||||
<!-- Compression -->
|
||||
<string name="compress">압축</string>
|
||||
<string name="compress_pro">압축 (Pro)</string>
|
||||
<string name="decompress">압축 해제</string>
|
||||
<string name="compress_as">압축 파일을 다음과 같이 생성함</string>
|
||||
<string name="compressing">압축중…</string>
|
||||
@@ -33,32 +18,29 @@
|
||||
<string name="decompression_successful">압축 해제 성공</string>
|
||||
<string name="compressing_failed">압축 실패</string>
|
||||
<string name="decompressing_failed">압축해제 실패</string>
|
||||
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">즐겨찾기 관리</string>
|
||||
<string name="go_to_favorite">즐겨찾기 이동</string>
|
||||
<string name="favorites_activity_placeholder">자주 사용하는 폴더를 즐겨찾기에 추가하여 어디서나 쉽게 접근 할 수 있습니다.</string>
|
||||
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">텍스트 편집기</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">루트 접근 활성화</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/FossifyOrg/Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
||||
<string name="images">사진</string>
|
||||
<string name="videos">동영상</string>
|
||||
<string name="invert_colors">색상 반전</string>
|
||||
<string name="image_file">사진 파일</string>
|
||||
<string name="audio_file">오디오 파일</string>
|
||||
<string name="open_as">다음으로 열기</string>
|
||||
<string name="text_file">텍스트 파일</string>
|
||||
<string name="video_file">비디오 파일</string>
|
||||
<string name="other_file">기타 파일</string>
|
||||
<string name="total_storage">전체 저장공간: %s</string>
|
||||
<string name="audio">음성</string>
|
||||
<string name="storage_analysis">저장공간 분석</string>
|
||||
<string name="documents">문서</string>
|
||||
<string name="downloads">다운로드</string>
|
||||
<string name="archives">아카이브</string>
|
||||
<string name="others">기타</string>
|
||||
<string name="press_back_twice">뒤로 가기 버튼을 두 번 눌러 앱을 종료</string>
|
||||
<string name="rooted_device_only">이 작업은 루팅된 기기에서만 작동합니다</string>
|
||||
<string name="recents">최근 파일</string>
|
||||
<string name="show_recents">최근 파일 보기</string>
|
||||
</resources>
|
||||
Loaded 100 of 190 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user