mirror of
https://github.com/FossifyOrg/File-Manager.git
synced 2026-11-05 12:32:53 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 |
No files matched your search
@@ -112,7 +112,7 @@ body:
|
||||
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 hoster here instead.
|
||||
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
|
||||
|
||||
@@ -20,14 +20,12 @@ body:
|
||||
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.**"
|
||||
- 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
|
||||
- label: "I optionally [donated](https://fossify.org/donate) to support the Fossify mission."
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
id: feature-description
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
<!-- Hey there. Thank you so much for improving Fossify. Please consider filling out the details :)-->
|
||||
|
||||
#### What is it?
|
||||
- [ ] Bugfix
|
||||
- [ ] Feature
|
||||
- [ ] Codebase improvement
|
||||
|
||||
#### Description of the changes in your PR
|
||||
<!-- Bullet points are preferred. The following is an example -->
|
||||
- Updated colors
|
||||
- Update strings
|
||||
- Added documentation
|
||||
|
||||
#### Before/After Screenshots/Screen Record
|
||||
<!-- If your PR changes the app's UI in any way, consider including screenshots or a video showing exactly what changed, so that developers and users can pinpoint it easily. Delete this if it doesn't apply to your PR.-->
|
||||
- Before:
|
||||
- After:
|
||||
|
||||
#### Fixes the following issue(s)
|
||||
<!-- Prefix issues with "Fixes" so that GitHub closes them when the PR is merged (note that each "Fixes #" should be in its own item). Also add any other relevant links. -->
|
||||
- Fixes #
|
||||
|
||||
#### Relies on the following changes
|
||||
<!-- Delete this if it doesn't apply to your PR. -->
|
||||
-
|
||||
|
||||
#### Acknowledgement
|
||||
- [ ] I read the [contribution guidelines](https://github.com/FossifyOrg/File-Manager/blob/master/CONTRIBUTING.md).
|
||||
@@ -0,0 +1,34 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "bundler"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
commit-message:
|
||||
prefix: "chore"
|
||||
prefix-development: "chore"
|
||||
include: "scope"
|
||||
assignees:
|
||||
- "naveensingh"
|
||||
|
||||
- package-ecosystem: "gradle"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
commit-message:
|
||||
prefix: "chore"
|
||||
prefix-development: "chore"
|
||||
include: "scope"
|
||||
assignees:
|
||||
- "naveensingh"
|
||||
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
commit-message:
|
||||
prefix: "chore"
|
||||
prefix-development: "chore"
|
||||
include: "scope"
|
||||
assignees:
|
||||
- "naveensingh"
|
||||
@@ -0,0 +1,25 @@
|
||||
name: Github Release
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "*.*.*"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
call-release-workflow:
|
||||
uses: FossifyOrg/.github/.github/workflows/release.yml@main
|
||||
with:
|
||||
tag: ${{ github.ref_name }}
|
||||
flavor: "foss"
|
||||
package_name: "org.fossify.filemanager"
|
||||
|
||||
secrets:
|
||||
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
|
||||
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}
|
||||
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
|
||||
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }}
|
||||
SERVICE_ACCOUNT_JSON_KEY_BASE64: ""
|
||||
FOSSIFYBOT_TOKEN: ${{ secrets.FOSSIFYBOT_TOKEN }}
|
||||
@@ -0,0 +1,46 @@
|
||||
name: Google Play Release
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
track:
|
||||
description: "Google Play Store release track"
|
||||
required: false
|
||||
type: choice
|
||||
default: "beta"
|
||||
options:
|
||||
- internal
|
||||
- alpha
|
||||
- beta
|
||||
- production
|
||||
rollout:
|
||||
description: "Rollout fraction (0.0-1.0)"
|
||||
required: false
|
||||
type: string
|
||||
default: "0.05"
|
||||
validate_only:
|
||||
description: "Fastlane dry-run?"
|
||||
required: false
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
call-release-workflow:
|
||||
uses: FossifyOrg/.github/.github/workflows/release.yml@main
|
||||
with:
|
||||
flavor: "gplay"
|
||||
package_name: "org.fossify.filemanager"
|
||||
track: ${{ github.event.inputs.track }}
|
||||
rollout: ${{ github.event.inputs.rollout }}
|
||||
validate_only: ${{ github.event.inputs.validate_only == 'true' }}
|
||||
|
||||
secrets:
|
||||
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
|
||||
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}
|
||||
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
|
||||
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }}
|
||||
SERVICE_ACCOUNT_JSON_KEY_BASE64: ${{ secrets.SERVICE_ACCOUNT_JSON_KEY_BASE64 }}
|
||||
FOSSIFYBOT_TOKEN: ""
|
||||
@@ -1,148 +0,0 @@
|
||||
/*
|
||||
* Script for minimizing big images (jpg,gif,png) when they are uploaded to GitHub and not edited otherwise.
|
||||
* Source: https://github.com/TeamNewPipe/NewPipe/blob/dev/.github/workflows/image-minimizer.js
|
||||
*/
|
||||
module.exports = async ({github, context}) => {
|
||||
const IGNORE_KEY = '<!-- IGNORE IMAGE MINIFY -->';
|
||||
const IGNORE_ALT_NAME_END = 'ignoreImageMinify';
|
||||
// Targeted maximum height
|
||||
const IMG_MAX_HEIGHT_PX = 400;
|
||||
// maximum width of GitHub issues/comments
|
||||
const IMG_MAX_WIDTH_PX = 800;
|
||||
// all images that have a lower aspect ratio (-> have a smaller width) than this will be minimized
|
||||
const MIN_ASPECT_RATIO = IMG_MAX_WIDTH_PX / IMG_MAX_HEIGHT_PX
|
||||
|
||||
// Get the body of the image
|
||||
let initialBody = null;
|
||||
if (context.eventName == 'issue_comment') {
|
||||
initialBody = context.payload.comment.body;
|
||||
} else if (context.eventName == 'issues') {
|
||||
initialBody = context.payload.issue.body;
|
||||
} else if (context.eventName == 'pull_request') {
|
||||
initialBody = context.payload.pull_request.body;
|
||||
} else {
|
||||
console.log('Aborting: No body found');
|
||||
return;
|
||||
}
|
||||
console.log(`Found body: \n${initialBody}\n`);
|
||||
|
||||
// Check if we should ignore the currently processing element
|
||||
if (initialBody.includes(IGNORE_KEY)) {
|
||||
console.log('Ignoring: Body contains IGNORE_KEY');
|
||||
return;
|
||||
}
|
||||
|
||||
// Regex for finding images (simple variant) 
|
||||
const REGEX_USER_CONTENT_IMAGE_LOOKUP = /\!\[(.*)\]\((https:\/\/[-a-z0-9]+\.githubusercontent\.com\/\d+\/[-0-9a-f]{32,512}\.(jpg|gif|png))\)/gm;
|
||||
const REGEX_ASSETS_IMAGE_LOCKUP = /\!\[(.*)\]\((https:\/\/github\.com\/[-\w\d]+\/[-\w\d]+\/assets\/\d+\/[\-0-9a-f]{32,512})\)/gm;
|
||||
|
||||
// Check if we found something
|
||||
let foundSimpleImages = REGEX_USER_CONTENT_IMAGE_LOOKUP.test(initialBody)
|
||||
|| REGEX_ASSETS_IMAGE_LOCKUP.test(initialBody);
|
||||
if (!foundSimpleImages) {
|
||||
console.log('Found no simple images to process');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('Found at least one simple image to process');
|
||||
|
||||
// Require the probe lib for getting the image dimensions
|
||||
const probe = require('probe-image-size');
|
||||
|
||||
var wasMatchModified = false;
|
||||
|
||||
// Try to find and replace the images with minimized ones
|
||||
let newBody = await replaceAsync(initialBody, REGEX_USER_CONTENT_IMAGE_LOOKUP, minimizeAsync);
|
||||
newBody = await replaceAsync(newBody, REGEX_ASSETS_IMAGE_LOCKUP, minimizeAsync);
|
||||
|
||||
if (!wasMatchModified) {
|
||||
console.log('Nothing was modified. Skipping update');
|
||||
return;
|
||||
}
|
||||
|
||||
// Update the corresponding element
|
||||
if (context.eventName == 'issue_comment') {
|
||||
console.log('Updating comment with id', context.payload.comment.id);
|
||||
await github.rest.issues.updateComment({
|
||||
comment_id: context.payload.comment.id,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: newBody
|
||||
})
|
||||
} else if (context.eventName == 'issues') {
|
||||
console.log('Updating issue', context.payload.issue.number);
|
||||
await github.rest.issues.update({
|
||||
issue_number: context.payload.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: newBody
|
||||
});
|
||||
} else if (context.eventName == 'pull_request') {
|
||||
console.log('Updating pull request', context.payload.pull_request.number);
|
||||
await github.rest.pulls.update({
|
||||
pull_number: context.payload.pull_request.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: newBody
|
||||
});
|
||||
}
|
||||
|
||||
// Async replace function from https://stackoverflow.com/a/48032528
|
||||
async function replaceAsync(str, regex, asyncFn) {
|
||||
const promises = [];
|
||||
str.replace(regex, (match, ...args) => {
|
||||
const promise = asyncFn(match, ...args);
|
||||
promises.push(promise);
|
||||
});
|
||||
const data = await Promise.all(promises);
|
||||
return str.replace(regex, () => data.shift());
|
||||
}
|
||||
|
||||
async function minimizeAsync(match, g1, g2) {
|
||||
console.log(`Found match '${match}'`);
|
||||
|
||||
if (g1.endsWith(IGNORE_ALT_NAME_END)) {
|
||||
console.log(`Ignoring match '${match}': IGNORE_ALT_NAME_END`);
|
||||
return match;
|
||||
}
|
||||
|
||||
let probeAspectRatio = 0;
|
||||
let shouldModify = false;
|
||||
try {
|
||||
console.log(`Probing ${g2}`);
|
||||
let probeResult = await probe(g2);
|
||||
if (probeResult == null) {
|
||||
throw 'No probeResult';
|
||||
}
|
||||
if (probeResult.hUnits != 'px') {
|
||||
throw `Unexpected probeResult.hUnits (expected px but got ${probeResult.hUnits})`;
|
||||
}
|
||||
if (probeResult.height <= 0) {
|
||||
throw `Unexpected probeResult.height (height is invalid: ${probeResult.height})`;
|
||||
}
|
||||
if (probeResult.wUnits != 'px') {
|
||||
throw `Unexpected probeResult.wUnits (expected px but got ${probeResult.wUnits})`;
|
||||
}
|
||||
if (probeResult.width <= 0) {
|
||||
throw `Unexpected probeResult.width (width is invalid: ${probeResult.width})`;
|
||||
}
|
||||
console.log(`Probing resulted in ${probeResult.width}x${probeResult.height}px`);
|
||||
|
||||
probeAspectRatio = probeResult.width / probeResult.height;
|
||||
shouldModify = probeResult.height > IMG_MAX_HEIGHT_PX && probeAspectRatio < MIN_ASPECT_RATIO;
|
||||
} catch(e) {
|
||||
console.log('Probing failed:', e);
|
||||
// Immediately abort
|
||||
return match;
|
||||
}
|
||||
|
||||
if (shouldModify) {
|
||||
wasMatchModified = true;
|
||||
console.log(`Modifying match '${match}'`);
|
||||
return `<img alt="${g1}" src="${g2}" width=${Math.min(600, Math.floor(IMG_MAX_HEIGHT_PX * probeAspectRatio))} />`;
|
||||
}
|
||||
|
||||
console.log(`Match '${match}' is ok/will not be modified`);
|
||||
return match;
|
||||
}
|
||||
}
|
||||
@@ -5,31 +5,11 @@ on:
|
||||
types: [created, edited]
|
||||
issues:
|
||||
types: [opened, edited]
|
||||
pull_request:
|
||||
pull_request_target:
|
||||
types: [opened, edited]
|
||||
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
try-minimize:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
|
||||
- name: Install probe-image-size
|
||||
run: npm i probe-image-size@7.2.3 --ignore-scripts
|
||||
|
||||
- name: Minimize simple images
|
||||
uses: actions/github-script@v6
|
||||
timeout-minutes: 3
|
||||
with:
|
||||
script: |
|
||||
const script = require('.github/workflows/image-minimizer.js');
|
||||
await script({github, context});
|
||||
call-image-minimizer-workflow:
|
||||
uses: FossifyOrg/.github/.github/workflows/image-minimizer.yml@main
|
||||
secrets:
|
||||
FOSSIFYBOT_TOKEN: ${{ secrets.FOSSIFYBOT_TOKEN }}
|
||||
@@ -1,25 +1,12 @@
|
||||
name: no-response
|
||||
name: No Response
|
||||
|
||||
# Both `issue_comment` and `scheduled` event types are required for this Action
|
||||
# to work properly.
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
schedule:
|
||||
# Run daily at midnight.
|
||||
- cron: '0 0 * * *'
|
||||
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
- cron: '0 12 * * *' # Runs daily at noon
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
noResponse:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: lee-dohm/no-response@v0.5.0
|
||||
with:
|
||||
token: ${{ github.token }}
|
||||
# Number of days of inactivity before an issue is closed for lack of response.
|
||||
daysUntilClose: 30
|
||||
responseRequiredLabel: waiting for author
|
||||
call-no-response-workflow:
|
||||
uses: FossifyOrg/.github/.github/workflows/no-response.yml@main
|
||||
secrets:
|
||||
FOSSIFYBOT_TOKEN: ${{ secrets.FOSSIFYBOT_TOKEN }}
|
||||
@@ -0,0 +1,15 @@
|
||||
name: PR Labeler
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [opened]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
# write permission is not required as FOSSIFYBOT_TOKEN is used
|
||||
|
||||
jobs:
|
||||
call-pr-labeler-workflow:
|
||||
uses: FossifyOrg/.github/.github/workflows/pr-labeler.yml@main
|
||||
secrets:
|
||||
FOSSIFYBOT_TOKEN: ${{ secrets.FOSSIFYBOT_TOKEN }}
|
||||
@@ -0,0 +1,9 @@
|
||||
name: PR
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
|
||||
jobs:
|
||||
call-pr-workflow:
|
||||
uses: FossifyOrg/.github/.github/workflows/pr.yml@main
|
||||
@@ -0,0 +1,17 @@
|
||||
name: Release Commenter
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
issues: read
|
||||
pull-requests: read
|
||||
# write permission is not required as FOSSIFYBOT_TOKEN is used
|
||||
|
||||
jobs:
|
||||
call-release-commenter:
|
||||
uses: FossifyOrg/.github/.github/workflows/release-commenter.yml@main
|
||||
secrets:
|
||||
FOSSIFYBOT_TOKEN: ${{ secrets.FOSSIFYBOT_TOKEN }}
|
||||
@@ -0,0 +1,10 @@
|
||||
name: Testing build (on PR)
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
types: [ labeled, opened, synchronize, reopened ]
|
||||
|
||||
jobs:
|
||||
call-testing-build-workflow:
|
||||
uses: FossifyOrg/.github/.github/workflows/testing-build.yml@main
|
||||
+1
-2
@@ -9,5 +9,4 @@
|
||||
keystore.jks
|
||||
keystore.properties
|
||||
fastlane/fastlane.json
|
||||
Gemfile
|
||||
Gemfile.lock
|
||||
fastlane/report.xml
|
||||
+64
-14
@@ -1,18 +1,68 @@
|
||||
Changelog
|
||||
==========
|
||||
# Changelog
|
||||
|
||||
Version 1.0.1 *(2024-03-17)*
|
||||
----------------------------
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
* Folders now use primary/accent color.
|
||||
* Addressed unnecessary delays when renaming files.
|
||||
* Enhanced search performance in the text editor.
|
||||
* 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.
|
||||
* Added some translations.
|
||||
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).
|
||||
|
||||
Version 1.0.0 *(2024-01-07)*
|
||||
----------------------------
|
||||
## [Unreleased]
|
||||
|
||||
* Initial release
|
||||
## [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
|
||||
|
||||
[Unreleased]: https://github.com/FossifyOrg/File-Manager/compare/1.1.0...HEAD
|
||||
[1.1.0]: https://github.com/FossifyOrg/File-Manager/compare/1.0.1...1.1.0
|
||||
[1.0.1]: https://github.com/FossifyOrg/File-Manager/compare/1.0.0...1.0.1
|
||||
[1.0.0]: https://github.com/FossifyOrg/File-Manager/releases/tag/1.0.0
|
||||
|
||||
[#27]: https://github.com/FossifyOrg/File-Manager/issues/27
|
||||
[#37]: https://github.com/FossifyOrg/File-Manager/issues/37
|
||||
[#136]: https://github.com/FossifyOrg/File-Manager/issues/136
|
||||
[#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
|
||||
[#149]: https://github.com/FossifyOrg/File-Manager/issues/149
|
||||
[#150]: https://github.com/FossifyOrg/File-Manager/issues/150
|
||||
+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.3.2)
|
||||
aws-partitions (1.1097.0)
|
||||
aws-sdk-core (3.223.0)
|
||||
aws-eventstream (~> 1, >= 1.3.0)
|
||||
aws-partitions (~> 1, >= 1.992.0)
|
||||
aws-sigv4 (~> 1.9)
|
||||
base64
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
logger
|
||||
aws-sdk-kms (1.100.0)
|
||||
aws-sdk-core (~> 3, >= 3.216.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sdk-s3 (1.185.0)
|
||||
aws-sdk-core (~> 3, >= 3.216.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sigv4 (1.11.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
base64 (0.2.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.227.2)
|
||||
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.11.3)
|
||||
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.2.1)
|
||||
nkf (0.2.0)
|
||||
optparse (0.6.0)
|
||||
os (1.1.4)
|
||||
plist (3.7.2)
|
||||
public_suffix (6.0.2)
|
||||
rake (13.2.1)
|
||||
representable (3.2.0)
|
||||
declarative (< 0.1.0)
|
||||
trailblazer-option (>= 0.1.1, < 0.2.0)
|
||||
uber (< 0.2.0)
|
||||
retriable (3.1.2)
|
||||
rexml (3.4.1)
|
||||
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
|
||||
+1
-1
@@ -1,3 +1,3 @@
|
||||
/build
|
||||
/foss/
|
||||
/prepaid/
|
||||
/gplay/
|
||||
+36
-3
@@ -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,6 +15,13 @@ 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()
|
||||
|
||||
@@ -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,6 +94,10 @@ android {
|
||||
targetCompatibility = currentJavaVersionFromLibs
|
||||
}
|
||||
|
||||
dependenciesInfo {
|
||||
includeInApk = false
|
||||
}
|
||||
|
||||
tasks.withType<KotlinCompile> {
|
||||
kotlinOptions.jvmTarget = project.libs.versions.app.build.kotlinJVMTarget.get()
|
||||
}
|
||||
@@ -85,8 +106,20 @@ android {
|
||||
|
||||
lint {
|
||||
checkReleaseBuilds = false
|
||||
abortOnError = false
|
||||
abortOnError = true
|
||||
warningsAsErrors = true
|
||||
baseline = file("lint-baseline.xml")
|
||||
}
|
||||
|
||||
bundle {
|
||||
language {
|
||||
enableSplit = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
detekt {
|
||||
baseline = file("detekt-baseline.xml")
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
@@ -0,0 +1,222 @@
|
||||
<?xml version="1.0" ?>
|
||||
<SmellBaseline>
|
||||
<ManuallySuppressedIssues></ManuallySuppressedIssues>
|
||||
<CurrentIssues>
|
||||
<ID>ComplexCondition:Activity.kt$(hide && filename.startsWith('.')) || (!hide && !filename.startsWith('.'))</ID>
|
||||
<ID>ComplexCondition:ItemsAdapter.kt$ItemsAdapter$activity.getDoesFilePathExist(source) && activity.getIsPathDirectory(source) && sourceFile.list()?.isEmpty() == true && sourceFile.getProperSize(true) == 0L && sourceFile.getFileCount(true) == 0</ID>
|
||||
<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:DecompressActivity.kt$DecompressActivity$private fun fillAllListItems(uri: Uri, callback: () -> Unit)</ID>
|
||||
<ID>CyclomaticComplexMethod:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths(sourcePaths: List<String>, targetPath: String, password: String? = null): Boolean</ID>
|
||||
<ID>CyclomaticComplexMethod:ItemsAdapter.kt$ItemsAdapter$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>LargeClass:MainActivity.kt$MainActivity : SimpleActivity</ID>
|
||||
<ID>LongMethod:DecompressActivity.kt$DecompressActivity$private fun fillAllListItems(uri: Uri, callback: () -> Unit)</ID>
|
||||
<ID>LongMethod:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths(sourcePaths: List<String>, targetPath: String, password: String? = null): Boolean</ID>
|
||||
<ID>LongMethod:MimeTypesActivity.kt$MimeTypesActivity$private fun getProperFileDirItems(callback: (ArrayList<FileDirItem>) -> Unit)</ID>
|
||||
<ID>LongParameterList:ItemsAdapter.kt$ItemsAdapter$( activity: SimpleActivity, var listItems: MutableList<ListItem>, private val listener: ItemOperationsListener?, recyclerView: MyRecyclerView, private val isPickMultipleIntent: Boolean, private val swipeRefreshLayout: SwipeRefreshLayout?, canHaveIndividualViewType: Boolean = true, itemClick: (Any) -> Unit, )</ID>
|
||||
<ID>LoopWithTooManyJumpStatements:DecompressActivity.kt$DecompressActivity$while</ID>
|
||||
<ID>LoopWithTooManyJumpStatements:StorageFragment.kt$StorageFragment$do</ID>
|
||||
<ID>MagicNumber:Config.kt$Config$1.2f</ID>
|
||||
<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:Long.kt$1000.0</ID>
|
||||
<ID>MagicNumber:MimeTypesActivity.kt$MimeTypesActivity$1000</ID>
|
||||
<ID>MagicNumber:ReadTextActivity.kt$ReadTextActivity$250</ID>
|
||||
<ID>MagicNumber:ReadTextActivity.kt$ReadTextActivity$50</ID>
|
||||
<ID>MagicNumber:RecentsFragment.kt$RecentsFragment$1000</ID>
|
||||
<ID>MagicNumber:RecentsFragment.kt$RecentsFragment$3</ID>
|
||||
<ID>MagicNumber:RecentsFragment.kt$RecentsFragment$50</ID>
|
||||
<ID>MagicNumber:RootHelpers.kt$RootHelpers.<no name provided>$5</ID>
|
||||
<ID>MagicNumber:StorageFragment.kt$StorageFragment$1000</ID>
|
||||
<ID>MagicNumber:StorageFragment.kt$StorageFragment$100000</ID>
|
||||
<ID>MagicNumber:StorageFragment.kt$StorageFragment$2000</ID>
|
||||
<ID>MagicNumber:StorageFragment.kt$StorageFragment$3</ID>
|
||||
<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:DecompressActivity.kt$DecompressActivity$binding.decompressToolbar.title = realPath?.getFilenameFromPath() ?: Uri.decode(uri.toString().getFilenameFromPath())</ID>
|
||||
<ID>MaxLineLength:DecompressActivity.kt$DecompressActivity$updateMaterialActivityViews(decompressCoordinator, decompressList, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
|
||||
<ID>MaxLineLength:DecompressItemsAdapter.kt$DecompressItemsAdapter$class</ID>
|
||||
<ID>MaxLineLength:DecompressItemsAdapter.kt$DecompressItemsAdapter$val drawable = fileDrawables.getOrElse(fileName.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable })</ID>
|
||||
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$FilePickerDialog</ID>
|
||||
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$ManageFavoritesAdapter(this@FavoritesActivity, favorites, this@FavoritesActivity, manageFavoritesList) { }</ID>
|
||||
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$updateMaterialActivityViews(manageFavoritesCoordinator, manageFavoritesList, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$"${baseConfig.OTGTreeUri}/document/${baseConfig.OTGPartition}%3A${itemToLoad.substring(baseConfig.OTGPath.length).replace("/", "%2F")}"</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$(drawable as LayerDrawable).findDrawableByLayerId(R.id.shortcut_folder_background).applyColorFilter(appIconColor)</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$File(path).listFiles()?.filter { if (shouldShowHidden) true else !it.name.startsWith('.') }</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$activity.getDocumentFile(path)?.listFiles()?.filter { if (shouldShowHidden) true else !it.name!!.startsWith(".") }</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$if</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$intent.flags = intent.flags or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NO_HISTORY</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$itemName?.text = if (textToHighlight.isEmpty()) fileName else fileName.highlightTextPart(textToHighlight, properPrimaryColor)</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$itemSection?.text = if (textToHighlight.isEmpty()) listItem.mName else listItem.mName.highlightTextPart(textToHighlight, properPrimaryColor)</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$name = if (base == currentPath) currentPath.getFilenameFromPath() else mainFilePath.relativizeWith(base)</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$override fun getIsItemSelectable(position: Int)</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$override fun onChange(position: Int)</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$private</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$private fun getSelectedFileDirItems()</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$sourceFile.list()?.isEmpty() == true</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$val currPath = if (entry.isDirectory) path else "${path.getParentPath().trimEnd('/')}/${entry.fileName}"</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$val drawable = fileDrawables.getOrElse(fileName.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable })</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$val fileDirItem = FileDirItem(currPath, entry.fileName, entry.isDirectory, 0, entry.uncompressedSize)</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$val fileIcon = fileDrawables.getOrElse(path.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable })</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$val paths = getSelectedFileDirItems().asSequence().filter { !it.isDirectory }.map { it.path }.toMutableList() as ArrayList<String></ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$}</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemDirGrid$override</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemEmpty$override</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemFileDirList$override</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemFileDirList$return ItemFileDirListBindingAdapter(ItemFileDirListBinding.inflate(layoutInflater, viewGroup, attachToRoot))</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemFileGrid$override</ID>
|
||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter.Binding.ItemSection$override</ID>
|
||||
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$ItemsAdapter</ID>
|
||||
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$class</ID>
|
||||
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$context</ID>
|
||||
<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$updateMaterialActivityViews(binding.mainCoordinator, null, useTransparentNavigation = false, useTopSearchMenu = true)</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$val isPickFileIntent = action == RingtoneManager.ACTION_RINGTONE_PICKER || action == Intent.ACTION_GET_CONTENT || action == Intent.ACTION_PICK</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$val licenses = LICENSE_GLIDE or LICENSE_PATTERN or LICENSE_REPRINT or LICENSE_GESTURE_VIEWS or LICENSE_AUTOFITTEXTVIEW or LICENSE_ZIP4J</ID>
|
||||
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$!extraAudioMimeTypes.contains(fullMimetype)</ID>
|
||||
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$if</ID>
|
||||
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$updateMaterialActivityViews(mimetypesCoordinator, mimetypesList, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
|
||||
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$val fullMimetype = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault()) ?: return@queryCursor</ID>
|
||||
<ID>MaxLineLength: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:ReadTextActivity.kt$ReadTextActivity$updateMaterialActivityViews(readTextCoordinator, readTextView, useTransparentNavigation = true, useTopSearchMenu = false)</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:RecentsFragment.kt$RecentsFragment$val filtered = filesIgnoringSearch.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList<ListItem></ID>
|
||||
<ID>MaxLineLength:RootHelpers.kt$RootHelpers$fun</ID>
|
||||
<ID>MaxLineLength:RootHelpers.kt$RootHelpers$private</ID>
|
||||
<ID>MaxLineLength:SaveAsActivity.kt$SaveAsActivity$FilePickerDialog</ID>
|
||||
<ID>MaxLineLength:SaveAsDialog.kt$SaveAsDialog$val title = String.format(activity.getString(R.string.file_already_exists_overwrite), newFilename)</ID>
|
||||
<ID>MaxLineLength:SettingsActivity.kt$SettingsActivity$settingsUseEnglishHolder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") && !isTiramisuPlus())</ID>
|
||||
<ID>MaxLineLength:SettingsActivity.kt$SettingsActivity$updateMaterialActivityViews(settingsCoordinator, settingsHolder, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
|
||||
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$class</ID>
|
||||
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$mainStorageUsageProgressbar</ID>
|
||||
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$mainStorageUsageProgressbar.progress = ((totalStorageSpace - freeStorageSpace) / SIZE_DIVIDER).toInt()</ID>
|
||||
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$totalSpace.text = String.format(context.getString(R.string.total_storage), totalStorageSpace.formatSizeThousand())</ID>
|
||||
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$val filtered = allDeviceListItems.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList<ListItem></ID>
|
||||
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$val mimeType = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault())</ID>
|
||||
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$val storageStatsManager = context.getSystemService(AppCompatActivity.STORAGE_STATS_SERVICE) as StorageStatsManager</ID>
|
||||
<ID>MaxLineLength:ViewPagerAdapter.kt$ViewPagerAdapter$val isGetContentIntent = activity.intent.action == Intent.ACTION_GET_CONTENT || activity.intent.action == Intent.ACTION_PICK</ID>
|
||||
<ID>NestedBlockDepth:DecompressActivity.kt$DecompressActivity$private fun decompressTo(destination: String)</ID>
|
||||
<ID>NestedBlockDepth: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:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths(sourcePaths: List<String>, targetPath: String, password: String? = null): Boolean</ID>
|
||||
<ID>SwallowedException:ItemsAdapter.kt$ItemsAdapter$e: Exception</ID>
|
||||
<ID>SwallowedException:MimeTypesActivity.kt$MimeTypesActivity$e: Exception</ID>
|
||||
<ID>SwallowedException:StorageFragment.kt$StorageFragment$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:DecompressActivity.kt$DecompressActivity$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:ItemsAdapter.kt$ItemsAdapter$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:ItemsAdapter.kt$ItemsAdapter$exception: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:MainActivity.kt$MainActivity$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:MimeTypesActivity.kt$MimeTypesActivity$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:ReadTextActivity.kt$ReadTextActivity$e: Exception</ID>
|
||||
<ID>TooGenericExceptionCaught:RecentsFragment.kt$RecentsFragment$e: Exception</ID>
|
||||
<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:Activity.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:Activity.kt$import org.fossify.filemanager.helpers.*</ID>
|
||||
<ID>WildcardImport:ChangeSortingDialog.kt$import org.fossify.commons.helpers.*</ID>
|
||||
<ID>WildcardImport:CompressAsDialog.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:CreateNewItemDialog.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:DecompressActivity.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:InsertFilenameDialog.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.commons.dialogs.*</ID>
|
||||
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.commons.helpers.*</ID>
|
||||
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.filemanager.databinding.*</ID>
|
||||
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.filemanager.extensions.*</ID>
|
||||
<ID>WildcardImport:ItemsAdapter.kt$import org.fossify.filemanager.helpers.*</ID>
|
||||
<ID>WildcardImport:ItemsFragment.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:ItemsFragment.kt$import org.fossify.commons.helpers.*</ID>
|
||||
<ID>WildcardImport:MainActivity.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:MainActivity.kt$import org.fossify.commons.helpers.*</ID>
|
||||
<ID>WildcardImport:ManageFavoritesAdapter.kt$import android.view.*</ID>
|
||||
<ID>WildcardImport:MimeTypesActivity.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:MimeTypesActivity.kt$import org.fossify.filemanager.helpers.*</ID>
|
||||
<ID>WildcardImport:MyViewPagerFragment.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:ReadTextActivity.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:RecentsFragment.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:SaveAsActivity.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:SaveAsDialog.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:SettingsActivity.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:SettingsActivity.kt$import org.fossify.commons.helpers.*</ID>
|
||||
<ID>WildcardImport:StorageFragment.kt$import org.fossify.commons.extensions.*</ID>
|
||||
<ID>WildcardImport:StorageFragment.kt$import org.fossify.commons.helpers.*</ID>
|
||||
<ID>WildcardImport:StorageFragment.kt$import org.fossify.filemanager.helpers.*</ID>
|
||||
</CurrentIssues>
|
||||
</SmellBaseline>
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1,6 +1,6 @@
|
||||
<?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_google_relations">false</bool>
|
||||
<bool name="hide_all_external_links">true</bool>
|
||||
</resources>
|
||||
@@ -97,6 +97,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)
|
||||
}
|
||||
}
|
||||
@@ -8,10 +8,20 @@ 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
|
||||
@@ -31,6 +41,7 @@ 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
|
||||
@@ -51,7 +62,8 @@ 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()
|
||||
}
|
||||
|
||||
@@ -145,7 +157,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('/')}"
|
||||
|
||||
@@ -247,7 +259,7 @@ class DecompressActivity : SimpleActivity() {
|
||||
passwordDialog = null
|
||||
}
|
||||
|
||||
val lastModified = if (isOreoPlus()) zipEntry.lastModifiedTime else 0
|
||||
val lastModified = zipEntry.lastModifiedTime
|
||||
val filename = zipEntry.fileName.removeSuffix("/")
|
||||
allFiles.add(
|
||||
ListItem(
|
||||
|
||||
@@ -18,8 +18,48 @@ 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.showErrorToast
|
||||
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.helpers.isRPlus
|
||||
import org.fossify.commons.models.FAQItem
|
||||
import org.fossify.commons.models.RadioItem
|
||||
import org.fossify.commons.models.Release
|
||||
@@ -51,8 +91,6 @@ class MainActivity : SimpleActivity() {
|
||||
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
|
||||
@@ -69,7 +107,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
|
||||
@@ -81,22 +119,13 @@ class MainActivity : SimpleActivity() {
|
||||
|
||||
updateMaterialActivityViews(binding.mainCoordinator, null, useTransparentNavigation = false, useTopSearchMenu = true)
|
||||
|
||||
mIsPasswordProtectionPending = config.isAppPasswordProtectionOn
|
||||
|
||||
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 +157,7 @@ class MainActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
if (binding.mainViewPager.adapter == null && mWasProtectionHandled) {
|
||||
if (binding.mainViewPager.adapter == null) {
|
||||
initFragments()
|
||||
}
|
||||
}
|
||||
@@ -139,11 +168,6 @@ class MainActivity : SimpleActivity() {
|
||||
config.lastUsedViewPagerPage = binding.mainViewPager.currentItem
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
config.temporarilyShowHidden = false
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
val currentFragment = getCurrentFragment()
|
||||
if (binding.mainMenu.isSearchOpen) {
|
||||
@@ -158,6 +182,7 @@ class MainActivity : SimpleActivity() {
|
||||
wasBackJustPressed = false
|
||||
}, BACK_PRESS_TIMEOUT.toLong())
|
||||
} else {
|
||||
appLockManager.lock()
|
||||
finish()
|
||||
}
|
||||
} else {
|
||||
@@ -241,20 +266,18 @@ 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)
|
||||
openPath(path, true)
|
||||
}
|
||||
} else {
|
||||
restorePath(path)
|
||||
openPath(path, true)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -267,22 +290,6 @@ class MainActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun restorePath(path: String) {
|
||||
if (!mWasProtectionHandled) {
|
||||
handleAppPasswordProtection {
|
||||
mWasProtectionHandled = it
|
||||
if (it) {
|
||||
mIsPasswordProtectionPending = false
|
||||
openPath(path, true)
|
||||
} else {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
openPath(path, true)
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateMenuColors() {
|
||||
updateStatusbarColor(getProperBackgroundColor())
|
||||
binding.mainMenu.updateColors()
|
||||
@@ -494,10 +501,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('/')) {
|
||||
|
||||
@@ -32,6 +32,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)
|
||||
@@ -85,7 +86,7 @@ class ReadTextActivity : SimpleActivity() {
|
||||
|
||||
binding.readTextView.onGlobalLayout {
|
||||
ensureBackgroundThread {
|
||||
checkIntent(uri)
|
||||
checkIntent(uri, savedInstanceState)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,6 +98,13 @@ class ReadTextActivity : SimpleActivity() {
|
||||
setupToolbar(binding.readTextToolbar, 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?) {
|
||||
super.onActivityResult(requestCode, resultCode, resultData)
|
||||
if (requestCode == SELECT_SAVE_FILE_INTENT && resultCode == Activity.RESULT_OK && resultData != null && resultData.data != null) {
|
||||
@@ -241,7 +249,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 +278,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 {
|
||||
|
||||
@@ -35,10 +35,13 @@ 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 filename = getFilenameFromContentUri(source)
|
||||
?: source.toString().getFilenameFromPath()
|
||||
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)!!
|
||||
|
||||
@@ -33,6 +33,8 @@ open class SimpleActivity : BaseSimpleActivity() {
|
||||
|
||||
override fun getAppLauncherName() = getString(R.string.app_launcher_name)
|
||||
|
||||
override fun getRepositoryName() = "File-Manager"
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
fun hasStoragePermission(): Boolean {
|
||||
return if (isRPlus()) {
|
||||
|
||||
@@ -35,19 +35,81 @@ 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.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
|
||||
@@ -112,7 +174,7 @@ class ItemsAdapter(
|
||||
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)
|
||||
}
|
||||
@@ -158,7 +220,7 @@ class ItemsAdapter(
|
||||
}
|
||||
|
||||
override fun onActionModeDestroyed() {
|
||||
swipeRefreshLayout?.isEnabled = true
|
||||
swipeRefreshLayout?.isEnabled = config.enablePullToRefresh
|
||||
}
|
||||
|
||||
override fun getItemViewType(position: Int): Int {
|
||||
|
||||
@@ -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,24 @@ 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 +28,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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -6,11 +6,16 @@ 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.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
|
||||
@@ -156,17 +161,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)
|
||||
|
||||
@@ -16,8 +16,26 @@ 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.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
|
||||
@@ -29,7 +47,19 @@ 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.util.Locale
|
||||
@@ -173,10 +203,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]!!
|
||||
@@ -284,15 +310,10 @@ 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
|
||||
@@ -405,16 +426,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()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -65,13 +65,13 @@
|
||||
|
||||
<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 +171,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 +197,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 +223,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 +249,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 +264,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 +290,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 +305,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 +320,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 +335,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>
|
||||
@@ -17,7 +17,7 @@
|
||||
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"
|
||||
|
||||
@@ -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>
|
||||
@@ -34,4 +34,5 @@
|
||||
<string name="total_storage">إجمالي مساحة التخزين: %s</string>
|
||||
<string name="enable_root_access">تفعيل الدخول الى مسار الروت</string>
|
||||
<string name="press_back_twice">تتطلب الضغط على رجوع مرتين لمغادرة التطبيق</string>
|
||||
<string name="audio">صوت</string>
|
||||
</resources>
|
||||
@@ -3,18 +3,18 @@
|
||||
<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>
|
||||
<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>
|
||||
@@ -40,8 +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>
|
||||
<string name="enable_root_access">Уключыць каранёвы доступ</string>
|
||||
<string name="enable_root_access">Ўключыць root-доступ</string>
|
||||
<string name="press_back_twice">Патрабуецца двойчы націснуць \"Назад\", каб выйсці з праграмы</string>
|
||||
</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>
|
||||
@@ -44,4 +44,4 @@
|
||||
<string name="storage_free">свободно</string>
|
||||
<string name="documents">Документи</string>
|
||||
<string name="audio">Аудиофайлове</string>
|
||||
</resources>
|
||||
</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>
|
||||
@@ -29,7 +29,7 @@
|
||||
<string name="decompressing_failed">Ha fallat la descompressió</string>
|
||||
<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>
|
||||
<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>
|
||||
<string name="storage_analysis">Anàlisi d\'emmagatzematge</string>
|
||||
<string name="images">Imatges</string>
|
||||
@@ -41,7 +41,7 @@
|
||||
<string name="storage_free">lliure</string>
|
||||
<string name="total_storage">Emmagatzematge total: %s</string>
|
||||
<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>
|
||||
<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>
|
||||
@@ -5,11 +5,11 @@
|
||||
<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">Inverter farver</string>
|
||||
@@ -30,7 +30,7 @@
|
||||
<string name="decompressing_failed">Dekomprimering mislykkedes</string>
|
||||
<string name="manage_favorites">Håndter 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>
|
||||
<string name="favorites_activity_placeholder">Du kan føje ofte brugte mapper til favoritter, så du hurtigt kan finde dem igen.</string>
|
||||
<string name="file_editor">Fileditor</string>
|
||||
<string name="storage_analysis">Lagersanalyse</string>
|
||||
<string name="images">Billeder</string>
|
||||
|
||||
@@ -18,9 +18,30 @@
|
||||
<string name="decompressing_failed">Maldensigo malsukcesis</string>
|
||||
<string name="file_editor">Dosierredaktilo</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="others">Aliaj</string>
|
||||
<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>
|
||||
@@ -9,7 +9,7 @@
|
||||
<string name="downloads">Deskargak</string>
|
||||
<string name="others">Bestelakoak</string>
|
||||
<string name="enable_root_access">Gaitu root sarbidea</string>
|
||||
<string name="press_back_twice">Eskatu Atzera bi aldiz sakatu aplikaziotik irteteko</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>
|
||||
@@ -20,7 +20,7 @@
|
||||
<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 ruteatutako gailuetan bakarrik funtzionatzen du</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>
|
||||
@@ -44,4 +44,4 @@
|
||||
<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>
|
||||
</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>
|
||||
@@ -17,7 +17,7 @@
|
||||
<string name="text_file">Texto</string>
|
||||
<string name="image_file">Imaxe</string>
|
||||
<string name="video_file">Vídeo</string>
|
||||
<string name="other_file">Outro tipo de ficheiro</string>
|
||||
<string name="other_file">Outros ficheiros</string>
|
||||
<string name="compress">Comprimir</string>
|
||||
<string name="decompress">Descomprimir</string>
|
||||
<string name="compress_as">Comprimir como</string>
|
||||
@@ -31,17 +31,17 @@
|
||||
<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>
|
||||
<string name="file_editor">Editor de ficheiros</string>
|
||||
<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="archives">Arquivos</string>
|
||||
<string name="others">Outros</string>
|
||||
<string name="storage_free">ceibe</string>
|
||||
<string name="total_storage">Almacenamento total: %s</string>
|
||||
<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>
|
||||
<string name="audio_file">Ficheiro de audio</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documentos</string>
|
||||
<string name="downloads">Descargas</string>
|
||||
</resources>
|
||||
</resources>
|
||||
@@ -28,5 +28,5 @@
|
||||
<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">Selige un file de audio</string>
|
||||
<string name="select_audio_file">Selectionar un file de audio</string>
|
||||
</resources>
|
||||
@@ -6,18 +6,18 @@
|
||||
<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>
|
||||
<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>
|
||||
<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="decompress">Dekompres</string>
|
||||
<string name="compress_as">Kompres sebagai</string>
|
||||
@@ -30,7 +30,7 @@
|
||||
<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>
|
||||
<string name="file_editor">Penyunting Berkas</string>
|
||||
<string name="file_editor">Penyunting File</string>
|
||||
<string name="storage_analysis">Analisis penyimpanan</string>
|
||||
<string name="images">Gambar</string>
|
||||
<string name="videos">Video</string>
|
||||
@@ -39,4 +39,9 @@
|
||||
<string name="total_storage">Total penyimpanan: %s</string>
|
||||
<string name="enable_root_access">Aktifkan akses root</string>
|
||||
<string name="press_back_twice">Wajib tekan tombol kembali dua kali untuk keluar aplikasi</string>
|
||||
</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>
|
||||
@@ -36,7 +36,7 @@
|
||||
<string name="images">Immagini</string>
|
||||
<string name="videos">Video</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>
|
||||
@@ -44,4 +44,4 @@
|
||||
<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>
|
||||
<string name="audio">Audio</string>
|
||||
</resources>
|
||||
</resources>
|
||||
@@ -35,7 +35,7 @@
|
||||
<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>
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
<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>
|
||||
@@ -44,4 +44,4 @@
|
||||
<string name="total_storage">合計ストレージ: %s</string>
|
||||
<string name="enable_root_access">ルートアクセスを有効にする</string>
|
||||
<string name="press_back_twice">戻るボタンを2回押してアプリを閉じる</string>
|
||||
</resources>
|
||||
</resources>
|
||||
@@ -1,13 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_launcher_name">파일 매니저</string>
|
||||
<string name="press_back_again">뒤로가기 버튼을 다시 누르면 종료됩니다.</string>
|
||||
<string name="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="compress">압축</string>
|
||||
<string name="decompress">압축 해제</string>
|
||||
@@ -23,4 +23,24 @@
|
||||
<string name="favorites_activity_placeholder">자주 사용하는 폴더를 즐겨찾기에 추가하여 어디서나 쉽게 접근 할 수 있습니다.</string>
|
||||
<string name="file_editor">텍스트 편집기</string>
|
||||
<string name="enable_root_access">루트 접근 활성화</string>
|
||||
</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>
|
||||
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_launcher_name">Bestandsbeheer</string>
|
||||
<string name="press_back_again">Druk nogmaals op terug om af te sluiten</string>
|
||||
<string name="press_back_again">Druk nogmaals op \'Terug\' om te sluiten</string>
|
||||
<string name="go_to_home_folder">Naar beginmap</string>
|
||||
<string name="set_as_home_folder">Als beginmap instellen</string>
|
||||
<string name="set_as_home_folder">Instellen als beginmap</string>
|
||||
<string name="home_folder_updated">Beginmap ingesteld</string>
|
||||
<string name="copy_path">Pad naar klembord kopiëren</string>
|
||||
<string name="path_copied">Pad gekopieerd</string>
|
||||
@@ -13,9 +13,9 @@
|
||||
<string name="recents">Recent geopend</string>
|
||||
<string name="show_recents">Recente items tonen</string>
|
||||
<string name="open_as">Openen als</string>
|
||||
<string name="text_file">Tekst</string>
|
||||
<string name="text_file">Tekstbestand</string>
|
||||
<string name="image_file">Afbeelding</string>
|
||||
<string name="audio_file">Geluid</string>
|
||||
<string name="audio_file">Geluidsbestand</string>
|
||||
<string name="video_file">Video</string>
|
||||
<string name="other_file">Overig</string>
|
||||
<string name="compress">Inpakken</string>
|
||||
@@ -33,14 +33,14 @@
|
||||
<string name="file_editor">Bewerken</string>
|
||||
<string name="storage_analysis">Opslaganalyse</string>
|
||||
<string name="images">Afbeeldingen</string>
|
||||
<string name="videos">Video</string>
|
||||
<string name="videos">Video\'s</string>
|
||||
<string name="documents">Documenten</string>
|
||||
<string name="archives">Archieven</string>
|
||||
<string name="others">Overig</string>
|
||||
<string name="storage_free">vrij</string>
|
||||
<string name="total_storage">Totale opslag: %s</string>
|
||||
<string name="enable_root_access">Root-toegang inschakelen</string>
|
||||
<string name="press_back_twice">Twee keer op de terugknop drukken om af te sluiten</string>
|
||||
<string name="press_back_twice">Twee keer op \'Terug\' drukken om de app te sluiten</string>
|
||||
<string name="audio">Geluid</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="invert_colors">Kleuren omdraaien</string>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_launcher_name">Gerenciador de Arquivos Fossify</string>
|
||||
<string name="app_launcher_name">Arquivos</string>
|
||||
<string name="press_back_again">Aperte novamente o botão Voltar para sair</string>
|
||||
<string name="go_to_home_folder">Ir para Pasta Principal</string>
|
||||
<string name="set_as_home_folder">Definir como Pasta Principal</string>
|
||||
@@ -43,4 +43,5 @@
|
||||
<string name="press_back_twice">Pressione o botão "voltar" duas vezes para sair do app</string>
|
||||
<string name="audio">Áudio</string>
|
||||
<string name="documents">Documentos</string>
|
||||
</resources>
|
||||
<string name="downloads">Downloads</string>
|
||||
</resources>
|
||||
@@ -3,30 +3,45 @@
|
||||
<string name="images">Imagens</string>
|
||||
<string name="videos">Vídeos</string>
|
||||
<string name="open_as">Abrir como</string>
|
||||
<string name="audio_file">Ficheiro de áudio</string>
|
||||
<string name="other_file">Outro ficheiro</string>
|
||||
<string name="file_editor">Editor de ficheiro</string>
|
||||
<string name="audio_file">Áudio</string>
|
||||
<string name="other_file">Outro tipo</string>
|
||||
<string name="file_editor">Editor de ficheiros</string>
|
||||
<string name="manage_favorites">Gerir favoritos</string>
|
||||
<string name="audio">Áudio</string>
|
||||
<string name="documents">Documentos</string>
|
||||
<string name="image_file">Ficheiro de imagem</string>
|
||||
<string name="video_file">Ficheiro de vídeo</string>
|
||||
<string name="press_back_twice">Necessita de clicar duas vezes no retroceder para sair da aplicação</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="storage_analysis">Análises de armazenamento</string>
|
||||
<string name="image_file">Imagem</string>
|
||||
<string name="video_file">Vídeo</string>
|
||||
<string name="press_back_twice">Premir duas vezes a tecla Back para sair da aplicação</string>
|
||||
<string name="downloads">Descargas</string>
|
||||
<string name="storage_analysis">Análise ao armazenamento</string>
|
||||
<string name="archives">Arquivos</string>
|
||||
<string name="others">Outros</string>
|
||||
<string name="rooted_device_only">Esta operação está apenas disponível em dispositivos rooted</string>
|
||||
<string name="rooted_device_only">Esta operação apenas funciona em dispositivos com root</string>
|
||||
<string name="recents">Recentes</string>
|
||||
<string name="total_storage">Armazenamento total: %s</string>
|
||||
<string name="storage_free">grátis</string>
|
||||
<string name="search_folder">Procurar pasta</string>
|
||||
<string name="storage_free">livre</string>
|
||||
<string name="search_folder">Pesquisar pasta</string>
|
||||
<string name="app_launcher_name">Gestor de ficheiros</string>
|
||||
<string name="press_back_again">Clique retroceder novamente para sair</string>
|
||||
<string name="go_to_home_folder">Vá para a pasta inicial</string>
|
||||
<string name="set_as_home_folder">Configurar como pasta inicial</string>
|
||||
<string name="home_folder_updated">Pasta inicial atualizada</string>
|
||||
<string name="select_audio_file">Por favor, selecione um ficheiro de áudio</string>
|
||||
<string name="press_back_again">Prima novamente para sair</string>
|
||||
<string name="go_to_home_folder">Ir para a pasta pessoal</string>
|
||||
<string name="set_as_home_folder">Definir como pasta pessoal</string>
|
||||
<string name="home_folder_updated">Pasta pessoal atualizada</string>
|
||||
<string name="select_audio_file">Selecione um ficheiro de áudio</string>
|
||||
<string name="show_recents">Mostrar recentes</string>
|
||||
<string name="invert_colors">Inverter cores</string>
|
||||
<string name="invert_colors">Inverter Cores</string>
|
||||
<string name="compressing_failed">Falha ao compactar</string>
|
||||
<string name="decompress">Descompactar</string>
|
||||
<string name="compression_successful">Compactação terminada</string>
|
||||
<string name="decompression_successful">Descompactação terminada</string>
|
||||
<string name="go_to_favorite">Ir para favorito</string>
|
||||
<string name="favorites_activity_placeholder">Pode adicionar pastas como favoritos para um acesso mais rápido.</string>
|
||||
<string name="compress_as">Compactar como</string>
|
||||
<string name="compressing">A compactar…</string>
|
||||
<string name="decompressing">A descompactar…</string>
|
||||
<string name="compress">Compactar</string>
|
||||
<string name="decompressing_failed">Falha ao descompactar</string>
|
||||
<string name="enable_root_access">Conceder acesso root</string>
|
||||
<string name="copy_path">Copiar caminho para a área de transferência</string>
|
||||
<string name="path_copied">Caminho copiado</string>
|
||||
<string name="text_file">Texto</string>
|
||||
</resources>
|
||||
@@ -43,5 +43,5 @@
|
||||
<string name="storage_free">livre</string>
|
||||
<string name="total_storage">Armazenamento total: %s</string>
|
||||
<string name="enable_root_access">Conceder acesso root</string>
|
||||
<string name="press_back_twice">Premir duas vezes a tecla Back para sair da aplicação</string>
|
||||
</resources>
|
||||
<string name="press_back_twice">Toque duas vezes na tecla Back para sair da aplicação</string>
|
||||
</resources>
|
||||
@@ -1,47 +1,47 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_launcher_name">Manager de fișiere</string>
|
||||
<string name="press_back_again">Apăsaţi din nou pe înapoi pentru a ieși</string>
|
||||
<string name="go_to_home_folder">Mergeţi la dosarul principal</string>
|
||||
<string name="set_as_home_folder">Setaţi ca dosar principal</string>
|
||||
<string name="app_launcher_name">Fișiere</string>
|
||||
<string name="press_back_again">Apasă din nou pe înapoi pentru a închide</string>
|
||||
<string name="go_to_home_folder">Du-te la dosarul principal</string>
|
||||
<string name="set_as_home_folder">Alege ca dosar principal</string>
|
||||
<string name="home_folder_updated">Dosarul principal actualizat</string>
|
||||
<string name="copy_path">Copiaţi calea în clipboard</string>
|
||||
<string name="copy_path">Copiază calea în memorie</string>
|
||||
<string name="path_copied">Cale copiată</string>
|
||||
<string name="select_audio_file">Vă rugăm să selectați un fișier audio</string>
|
||||
<string name="search_folder">Căutați în dosar</string>
|
||||
<string name="rooted_device_only">Această operațiune funcționează numai pe dispozitivele înrădăcinate</string>
|
||||
<string name="select_audio_file">Alege un fișier audio</string>
|
||||
<string name="search_folder">Caută dosarul</string>
|
||||
<string name="rooted_device_only">Aceasta funcționează numai dacă se dispune de drepturi de administrator</string>
|
||||
<string name="recents">Recente</string>
|
||||
<string name="show_recents">Afișați recentele</string>
|
||||
<string name="invert_colors">Inversați culorile</string>
|
||||
<string name="show_recents">Arată Recente</string>
|
||||
<string name="invert_colors">Inversează culorile</string>
|
||||
<string name="open_as">Deschide ca</string>
|
||||
<string name="text_file">Fișier text</string>
|
||||
<string name="image_file">Fișier imagine</string>
|
||||
<string name="audio_file">Fişier audio</string>
|
||||
<string name="video_file">Fişier video</string>
|
||||
<string name="other_file">Alt fișier</string>
|
||||
<string name="compress">Comprimare</string>
|
||||
<string name="decompress">Decomprimare</string>
|
||||
<string name="compress_as">Comprimaţi ca</string>
|
||||
<string name="compressing">Comprimare…</string>
|
||||
<string name="decompressing">Decomprimare…</string>
|
||||
<string name="other_file">Alte fișiere</string>
|
||||
<string name="compress">Comprimă</string>
|
||||
<string name="decompress">Decomprimă</string>
|
||||
<string name="compress_as">Comprimă ca</string>
|
||||
<string name="compressing">Se comprimă…</string>
|
||||
<string name="decompressing">Se decomprimă…</string>
|
||||
<string name="compression_successful">Comprimare reușită</string>
|
||||
<string name="decompression_successful">Decomprimare reușită</string>
|
||||
<string name="compressing_failed">Comprimarea a eșuat</string>
|
||||
<string name="decompressing_failed">Decomprimarea a eșuat</string>
|
||||
<string name="manage_favorites">Gestionați favoritele</string>
|
||||
<string name="go_to_favorite">Mergeți la favorite</string>
|
||||
<string name="favorites_activity_placeholder">Puteți adăuga dosarele utilizate frecvent la favorite pentru a le accesa ușor de oriunde.</string>
|
||||
<string name="compressing_failed">Comprimare nereușită</string>
|
||||
<string name="decompressing_failed">Decomprimare nereușită</string>
|
||||
<string name="manage_favorites">Gestionare preferate</string>
|
||||
<string name="go_to_favorite">Du-te la preferate</string>
|
||||
<string name="favorites_activity_placeholder">Poți adăuga în preferate dosarele utilizate frecvent pentru a le accesa ușor de oriunde.</string>
|
||||
<string name="file_editor">Editor de fișiere</string>
|
||||
<string name="storage_analysis">Analiza stocării</string>
|
||||
<string name="images">Imagini</string>
|
||||
<string name="videos">Videoclipuri</string>
|
||||
<string name="documents">Documente</string>
|
||||
<string name="downloads">Descărcări</string>
|
||||
<string name="downloads">Descărcate</string>
|
||||
<string name="archives">Arhive</string>
|
||||
<string name="others">Altele</string>
|
||||
<string name="storage_free">liber</string>
|
||||
<string name="total_storage">Spaţiu de stocare total: %s</string>
|
||||
<string name="enable_root_access">Activați accesul root</string>
|
||||
<string name="press_back_twice">Trebuie să apăsați de două ori butonul Înapoi pentru a părăsi aplicația</string>
|
||||
<string name="total_storage">Memoria totală: %s</string>
|
||||
<string name="enable_root_access">Activează accesul ca administrator</string>
|
||||
<string name="press_back_twice">Cere apăsarea de două ori a butonului Înapoi pentru a părăsi aplicația</string>
|
||||
<string name="audio">Audio</string>
|
||||
</resources>
|
||||
@@ -21,16 +21,16 @@
|
||||
<string name="other_file">Diğer dosya</string>
|
||||
<string name="compress">Sıkıştır</string>
|
||||
<string name="decompress">Çöz</string>
|
||||
<string name="compress_as">Sıkıştır:</string>
|
||||
<string name="compress_as">Sıkıştır</string>
|
||||
<string name="compressing">Sıkıştırılıyor…</string>
|
||||
<string name="decompressing">Çözülüyor…</string>
|
||||
<string name="compression_successful">Sıkıştırma başarılı</string>
|
||||
<string name="decompression_successful">Çözme başarılı</string>
|
||||
<string name="compressing_failed">Sıkıştırma başarısız</string>
|
||||
<string name="decompressing_failed">Çözme başarısız</string>
|
||||
<string name="manage_favorites">Favorileri yönet</string>
|
||||
<string name="go_to_favorite">Favoriye git</string>
|
||||
<string name="favorites_activity_placeholder">Sık kullanılan klasörleri her yerden kolay erişmek için favorilere ekleyebilirsiniz.</string>
|
||||
<string name="manage_favorites">Gözdeleri yönet</string>
|
||||
<string name="go_to_favorite">Gözdeye git</string>
|
||||
<string name="favorites_activity_placeholder">Sık kullanılan klasörleri her yerden kolay erişmek için gözdelere ekleyebilirsiniz.</string>
|
||||
<string name="file_editor">Dosya Düzenleyici</string>
|
||||
<string name="storage_analysis">Depolama analizi</string>
|
||||
<string name="images">Resimler</string>
|
||||
@@ -44,4 +44,4 @@
|
||||
<string name="total_storage">Toplam depolama: %s</string>
|
||||
<string name="enable_root_access">Root erişimini etkinleştir</string>
|
||||
<string name="press_back_twice">Uygulamadan çıkmak için Geri tuşuna iki kez basmayı gerektir</string>
|
||||
</resources>
|
||||
</resources>
|
||||
@@ -3,8 +3,8 @@
|
||||
<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="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>
|
||||
|
||||
@@ -5,43 +5,43 @@
|
||||
<string name="app_launcher_name">Quản lý tập tin</string>
|
||||
<string name="recents">Gần đây</string>
|
||||
<string name="path_copied">Đã sao chép đường dẫn</string>
|
||||
<string name="rooted_device_only">Thao tác này chỉ hoạt động trên các thiết bị đã root</string>
|
||||
<string name="other_file">Tập tin khác</string>
|
||||
<string name="text_file">Tập tin văn bản</string>
|
||||
<string name="image_file">Tập tin hình ảnh</string>
|
||||
<string name="audio_file">Tập tin âm thanh</string>
|
||||
<string name="rooted_device_only">Thao tác này chỉ hiệu quả trên các thiết bị đã root</string>
|
||||
<string name="other_file">Khác</string>
|
||||
<string name="text_file">Văn bản</string>
|
||||
<string name="image_file">Hình ảnh</string>
|
||||
<string name="audio_file">Âm thanh</string>
|
||||
<string name="compress">Nén</string>
|
||||
<string name="decompression_successful">Giải nén thành công</string>
|
||||
<string name="compressing_failed">Nén không thành công</string>
|
||||
<string name="decompressing_failed">Giải nén không thành công</string>
|
||||
<string name="manage_favorites">Quản lí các mục yêu thích</string>
|
||||
<string name="go_to_favorite">Chuyển đến mục yêu thích</string>
|
||||
<string name="go_to_home_folder">Chuyển đến thư mục chính</string>
|
||||
<string name="compressing_failed">Không thể nén</string>
|
||||
<string name="decompressing_failed">Không thể giải nén</string>
|
||||
<string name="manage_favorites">Quản lý mục yêu thích</string>
|
||||
<string name="go_to_favorite">Đến mục yêu thích</string>
|
||||
<string name="go_to_home_folder">Đến thư mục chính</string>
|
||||
<string name="set_as_home_folder">Đặt làm thư mục chính</string>
|
||||
<string name="audio">Âm thanh</string>
|
||||
<string name="storage_analysis">Thống kê bộ nhớ</string>
|
||||
<string name="documents">Tài liệu</string>
|
||||
<string name="downloads">Tải xuống</string>
|
||||
<string name="videos">Video</string>
|
||||
<string name="archives">Lưu trữ</string>
|
||||
<string name="archives">File nén</string>
|
||||
<string name="others">Khác</string>
|
||||
<string name="press_back_again">Nhấn quay lại lần nữa để thoát</string>
|
||||
<string name="press_back_again">Nhấn quay lại để thoát</string>
|
||||
<string name="search_folder">Tìm kiếm thư mục</string>
|
||||
<string name="select_audio_file">Vui lòng chọn một tập tin âm thanh</string>
|
||||
<string name="copy_path">Sao chép đường dẫn vào bộ nhớ tạm</string>
|
||||
<string name="select_audio_file">Hãy chọn một file âm thanh</string>
|
||||
<string name="copy_path">Sao chép đường dẫn</string>
|
||||
<string name="invert_colors">Đảo màu</string>
|
||||
<string name="show_recents">Hiển thị gần đây</string>
|
||||
<string name="open_as">Mở dưới dạng</string>
|
||||
<string name="video_file">Tập tin video</string>
|
||||
<string name="video_file">Video</string>
|
||||
<string name="decompress">Giải nén</string>
|
||||
<string name="compress_as">Nén dưới dạng</string>
|
||||
<string name="compressing">Đang nén…</string>
|
||||
<string name="decompressing">Đang giải nén…</string>
|
||||
<string name="compression_successful">Nén thành công</string>
|
||||
<string name="favorites_activity_placeholder">Bạn có thể thêm các thư mục được sử dụng thường xuyên vào mục yêu thích để dễ dàng truy cập từ mọi nơi.</string>
|
||||
<string name="file_editor">Trình chỉnh sửa tập tin</string>
|
||||
<string name="favorites_activity_placeholder">Bạn có thể thêm các thư mục thường xuyên sử dụng vào mục yêu thích để truy cập nhanh hơn.</string>
|
||||
<string name="file_editor">Trình chỉnh sửa file</string>
|
||||
<string name="storage_free">trống</string>
|
||||
<string name="total_storage">Tổng bộ nhớ: %s</string>
|
||||
<string name="enable_root_access">Cho phép truy cập root</string>
|
||||
<string name="press_back_twice">Yêu cầu nhấn Quay lại hai lần để thoát ứng dụng</string>
|
||||
</resources>
|
||||
<string name="press_back_twice">Nhấn Quay lại hai lần để thoát ứng dụng</string>
|
||||
</resources>
|
||||
@@ -1,21 +1,21 @@
|
||||
<?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="set_as_home_folder">设为主文件夹</string>
|
||||
<string name="home_folder_updated">主文件夹已更新</string>
|
||||
<string name="copy_path">复制路径至剪贴板</string>
|
||||
<string name="path_copied">路径已复制</string>
|
||||
<string name="select_audio_file">请选择一个音频文件</string>
|
||||
<string name="search_folder">搜索文件夹</string>
|
||||
<string name="rooted_device_only">该选项仅在 root 后的设备上工作</string>
|
||||
<string name="recents">最近</string>
|
||||
<string name="show_recents">显示最近</string>
|
||||
<string name="rooted_device_only">仅在拥有 Root 权限时生效</string>
|
||||
<string name="recents">最近文件</string>
|
||||
<string name="show_recents">显示最近文件</string>
|
||||
<string name="invert_colors">恢复颜色</string>
|
||||
<string name="open_as">打开为</string>
|
||||
<string name="text_file">文本文件</string>
|
||||
<string name="image_file">图像文件</string>
|
||||
<string name="image_file">图片文件</string>
|
||||
<string name="audio_file">音频文件</string>
|
||||
<string name="video_file">视频文件</string>
|
||||
<string name="other_file">其他文件</string>
|
||||
@@ -38,10 +38,10 @@
|
||||
<string name="audio">音频</string>
|
||||
<string name="documents">文档</string>
|
||||
<string name="downloads">下载</string>
|
||||
<string name="archives">存档</string>
|
||||
<string name="archives">归档</string>
|
||||
<string name="others">其他</string>
|
||||
<string name="storage_free">空闲</string>
|
||||
<string name="total_storage">总存储: %s</string>
|
||||
<string name="storage_free">可用</string>
|
||||
<string name="total_storage">总存储:%s</string>
|
||||
<string name="enable_root_access">启用 root 访问</string>
|
||||
<string name="press_back_twice">需要按两次返回键才能离开应用程序</string>
|
||||
</resources>
|
||||
@@ -1,2 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
<resources>
|
||||
<string name="images">圖片</string>
|
||||
</resources>
|
||||
@@ -35,6 +35,13 @@
|
||||
<string name="videos">影片</string>
|
||||
<string name="others">其他</string>
|
||||
<string name="total_storage">總儲存空間:%s</string>
|
||||
<string name="enable_root_access">啟用root權限</string>
|
||||
<string name="enable_root_access">啟用 root 權限</string>
|
||||
<string name="press_back_twice">需按兩次返回鍵才能離開 app</string>
|
||||
</resources>
|
||||
<string name="audio">音訊</string>
|
||||
<string name="downloads">下載</string>
|
||||
<string name="archives">封存</string>
|
||||
<string name="recents">最近造訪</string>
|
||||
<string name="show_recents">顯示最近造訪</string>
|
||||
<string name="documents">文件</string>
|
||||
<string name="storage_free">可用空間</string>
|
||||
</resources>
|
||||
@@ -1,4 +1,5 @@
|
||||
plugins {
|
||||
alias(libs.plugins.android).apply(false)
|
||||
alias(libs.plugins.kotlinAndroid).apply(false)
|
||||
alias(libs.plugins.detekt).apply(false)
|
||||
}
|
||||
+6
-32
@@ -1,38 +1,12 @@
|
||||
# This file contains the fastlane.tools configuration
|
||||
# You can find the documentation at https://docs.fastlane.tools
|
||||
#
|
||||
# For a list of all available actions, check out
|
||||
#
|
||||
# https://docs.fastlane.tools/actions
|
||||
#
|
||||
# For a list of all available plugins, check out
|
||||
#
|
||||
# https://docs.fastlane.tools/plugins/available-plugins
|
||||
#
|
||||
|
||||
# Uncomment the line if you want fastlane to automatically update itself
|
||||
# update_fastlane
|
||||
|
||||
default_platform(:android)
|
||||
|
||||
platform :android do
|
||||
desc "Runs all the tests"
|
||||
lane :test do
|
||||
gradle(task: "test")
|
||||
end
|
||||
desc 'Run unit & instrumentation tests'
|
||||
lane(:test) { test_android }
|
||||
|
||||
desc "Submit a new Beta Build to Crashlytics Beta"
|
||||
lane :beta do
|
||||
gradle(task: "clean assembleRelease")
|
||||
crashlytics
|
||||
|
||||
# sh "your_script.sh"
|
||||
# You can also use other beta testing services here
|
||||
end
|
||||
desc 'Build & deploy AAB to Google Play (includes metadata)'
|
||||
lane(:deploy) { deploy_android }
|
||||
|
||||
desc "Deploy a new version to the Google Play"
|
||||
lane :deploy do
|
||||
gradle(task: "clean assembleRelease")
|
||||
upload_to_play_store
|
||||
end
|
||||
desc 'Push Play Store metadata'
|
||||
lane(:metadata) { metadata_android }
|
||||
end
|
||||
@@ -0,0 +1,48 @@
|
||||
fastlane documentation
|
||||
----
|
||||
|
||||
# Installation
|
||||
|
||||
Make sure you have the latest version of the Xcode command line tools installed:
|
||||
|
||||
```sh
|
||||
xcode-select --install
|
||||
```
|
||||
|
||||
For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane)
|
||||
|
||||
# Available Actions
|
||||
|
||||
## Android
|
||||
|
||||
### android test
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android test
|
||||
```
|
||||
|
||||
Run unit & instrumentation tests
|
||||
|
||||
### android deploy
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android deploy
|
||||
```
|
||||
|
||||
Build & deploy AAB to Google Play (includes metadata)
|
||||
|
||||
### android metadata
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android metadata
|
||||
```
|
||||
|
||||
Push Play Store metadata
|
||||
|
||||
----
|
||||
|
||||
This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.
|
||||
|
||||
More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools).
|
||||
|
||||
The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools).
|
||||
@@ -1 +0,0 @@
|
||||
Фосифай Файлов Мениджър
|
||||
@@ -1 +0,0 @@
|
||||
* Initial release
|
||||
@@ -1 +0,0 @@
|
||||
Správce souborů Fossify
|
||||
@@ -1 +0,0 @@
|
||||
* Erste Veröffentlichung
|
||||
@@ -5,7 +5,7 @@ Hast du genug von Dateimanagern, die dich ausbremsen und deine Privatsphäre ver
|
||||
• Greife schnell auf deine meistgenutzten Ordner zu - mit anpassbaren Startordnern und Lieblingsverknüpfungen.
|
||||
• Finde in Sekundenschnelle, was du brauchst, mit intuitiven Navigations-, Such- und Sortieroptionen.
|
||||
|
||||
🔐 SCHÜTZE DEINE DATEN MIT UNVERGLEICHLICHER PRIVATSPHÄRE UND SICHERHEIT:
|
||||
🔐 SCHÜTZE DEINE DATEN MIT BEISPIELLOSEM DATENSCHUTZ UND SICHERHEIT:
|
||||
• Schütze sensible Dateien mit Passwort-, Muster- oder Fingerabdruck-Sperren für versteckte Elemente oder die gesamte App.
|
||||
• Kein Internetzugang erforderlich - deine Dateien bleiben privat und sicher auf deinem Gerät.
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
Fossify File Manager
|
||||
@@ -0,0 +1,20 @@
|
||||
Added:
|
||||
|
||||
• Added SHA-1 and SHA-256 hashes to file properties
|
||||
|
||||
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
|
||||
• Decompressed folders are now named properly
|
||||
• Text editor no longer resets on device rotation
|
||||
• Fixed accidental rendering of pull-to-refresh indicator
|
||||
• Pull-to-refresh setting is now applied as expected
|
||||
@@ -0,0 +1 @@
|
||||
Utila, malpeza malfermitkoda dosieresplorilo kun esencaj funkcioj.
|
||||
@@ -1 +0,0 @@
|
||||
* Versión inicial
|
||||
@@ -1 +0,0 @@
|
||||
Fossify File Manager
|
||||
@@ -1 +0,0 @@
|
||||
* Esmane versioon
|
||||
@@ -1 +0,0 @@
|
||||
Fossify Failihaldur
|
||||
@@ -0,0 +1,30 @@
|
||||
Nekatuta zaude motelak diren eta zure pribatutasuna inbaditzen dizuten fitxategi-arakatzaileekin? Desblokeatu esperientzia bizkorra, segurua eta guztiz pertsonalizagarria Fossify File Manager-ekin.
|
||||
|
||||
🚀 DOMINATU ZURE MUNDU DIGITALA NABIGAZIO AZKAR BATEKIN:
|
||||
• Kudeatu azkar zure fitxategiak konpresio eta transferentzia gaitasun errazekin, zure bizitza digitala antolatuta mantenduz.
|
||||
• Sartu azkar gehien erabiltzen dituzun karpetekin, pertsonaliza daitekeen hasierako karpetarekin eta gogoko lasterbideekin.
|
||||
• Aurkitu behar duzuna segundotan nabigazio, bilaketa eta ordenatze aukera intuitiboekin.
|
||||
|
||||
🔐 SENDOTU ZURE DATUAK PRIBATUTASUN ETA SEGURTASUN PAREGABEAZ:
|
||||
• Babestu fitxategi sentikorrak pasahitz, eredu edo hatz-marken blokeoekin ezkutuko elementuetarako edo aplikazio osorako.
|
||||
• Ez da Interneteko sarbidea behar: zure fitxategiak pribatuak eta seguruak dira zure gailuan.
|
||||
|
||||
💾 MENPERATU ZURE BILTEGIA PROFESIONAL BAT BEZALA:
|
||||
• Garbitu espazioa fitxategi eta karpeten konpresio errazarekin zure gailuaren potentziala maximizatzeko.
|
||||
• Identifikatu eta garbitu espazioa pilatzen duten fitxategiak integratutako biltegiratze-analisi tresnarekin.
|
||||
• Nabigatu root fitxategiak, SD txartelak eta USB gailuak antolakuntza osoa lortzeko.
|
||||
|
||||
📁 OPTIMIZATU ZURE LAN FLUXUA TRESNA ESKURAGARRIEKIN:
|
||||
• Sortu mahaigaineko lasterbideak zure fitxategi eta karpetetara berehalako sarbidea izateko.
|
||||
• Editatu, inprimatu edo irakurri dokumentuak erraz fitxategi-editore argiarekin, zoom-keinuekin hobetuta.
|
||||
|
||||
🌈 EGIN ZURE PERTSONALIZAZIOA:
|
||||
• Gozatu iragarkirik gabeko eta kode irekiko esperientziaz, kontrolpean jartzen zaituena, ez korporazio erraldoiak.
|
||||
• Pertsonalizatu koloreak, gaiak eta ikonoak zure estilo eta lehentasun bereziak islatzeko.
|
||||
|
||||
Utzi pribatutasuna inbaditzen duten fitxategi arakatzaile puztuak eta disfruta ezazu benetako askatasuna Fossify File Manager-ekin. Deskargatu orain eta berreskuratu zure bizitza digitalaren kontrola!
|
||||
|
||||
Arakatu Fossify-ren aplikazio gehiago: https://www.fossify.org
|
||||
Iturburu kodea: https://www.github.com/FossifyOrg
|
||||
Sartu komunitatean Reddit-en: https://www.reddit.com/r/Fossify
|
||||
Konektatu Telegram-en: https://t.me/Fossify
|
||||
@@ -0,0 +1 @@
|
||||
Fitxategien arakatzaile arina, kode irekikoa funtsezko ezaugarriekin.
|
||||
@@ -1 +0,0 @@
|
||||
* Version initiale
|
||||
@@ -1 +0,0 @@
|
||||
Fossify Gestionnaire de fichiers
|
||||
@@ -1 +0,0 @@
|
||||
* Versión inicial
|
||||
@@ -1 +1 @@
|
||||
Lixeiro e acaído, xestor de código libre de ficheiros cos útiles esenciais.
|
||||
Lixeiro e acaído, xestor de ficheiros de código aberto e cos útiles esenciais.
|
||||
@@ -1 +0,0 @@
|
||||
Ficheiros Fossify
|
||||
@@ -1 +0,0 @@
|
||||
* प्रारंभिक रिलीज
|
||||
@@ -1 +0,0 @@
|
||||
Fossify File Manager
|
||||
@@ -1 +0,0 @@
|
||||
* Prvo izdanje
|
||||
@@ -1 +0,0 @@
|
||||
Fossify upravljač datoteka
|
||||
@@ -1 +0,0 @@
|
||||
Gestore File Fossify
|
||||
@@ -0,0 +1 @@
|
||||
סייר קבצים שימושי, קל משקל ובקוד פתוח עם תכונות חיוניות.
|
||||
Loaded 100 of 126 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user