mirror of
https://github.com/FossifyOrg/File-Manager.git
synced 2026-11-04 12:03:02 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7a4adb8783 | ||
|
|
044ac49a9c | ||
|
|
5921c27328 | ||
|
|
c12d1d7631 | ||
|
|
0c9892a9e5 | ||
|
|
57fbcea742 | ||
|
|
7ae71a5d22 | ||
|
|
00b21b8b0f | ||
|
|
18ae5f3229 | ||
|
|
b1b1599cc5 | ||
|
|
97791feaed | ||
|
|
a4c8da6c31 | ||
|
|
e6c465d9d0 | ||
|
|
ee20fa406f | ||
|
|
c55d685022 | ||
|
|
1e2e304f70 | ||
|
|
e0b1e884ce | ||
|
|
dfd73bddd0 | ||
|
|
a88355c9ad | ||
|
|
e6593a5c6b | ||
|
|
880f383e76 | ||
|
|
ab31c828a1 | ||
|
|
f71a4b7f55 | ||
|
|
c2482ee5dc | ||
|
|
de5b6da9d5 | ||
|
|
4812bc8d4b | ||
|
|
3ec4591b58 | ||
|
|
d11a710106 | ||
|
|
2cf0fdf7d1 | ||
|
|
25fe232c27 | ||
|
|
f733553ff3 | ||
|
|
5b278f6e4a | ||
|
|
fec28af74f | ||
|
|
eb4d38d25a | ||
|
|
8647071c66 | ||
|
|
630d7b2cea | ||
|
|
223e644f36 | ||
|
|
055bfbd3b8 | ||
|
|
ceb7a5f2a2 | ||
|
|
20aee9162d | ||
|
|
7a5f797a2a | ||
|
|
10a83a18b1 | ||
|
|
fb3384fb08 | ||
|
|
666c8d8c53 |
No files matched your search
@@ -1,2 +1,2 @@
|
|||||||
# Auto-generated file. DO NOT EDIT.
|
# Auto-generated file. DO NOT EDIT.
|
||||||
1.2.2
|
1.4.0
|
||||||
@@ -18,7 +18,7 @@ body:
|
|||||||
required: true
|
required: true
|
||||||
- label: "I made sure that there are **no existing issues** - [open](https://github.com/FossifyOrg/File-Manager/issues) or [closed](https://github.com/FossifyOrg/File-Manager/issues?q=is%3Aissue+is%3Aclosed) - to which I could contribute my information."
|
- label: "I made sure that there are **no existing issues** - [open](https://github.com/FossifyOrg/File-Manager/issues) or [closed](https://github.com/FossifyOrg/File-Manager/issues?q=is%3Aissue+is%3Aclosed) - to which I could contribute my information."
|
||||||
required: true
|
required: true
|
||||||
- label: "I made sure that there are **no existing discussions** - [open](https://github.com/FossifyOrg/File-Manager/discussions) or [closed](https://github.com/FossifyOrg/File-Manager/discussions?discussions_q=is%3Aclosed) - to which I could contribute my information."
|
- label: "I made sure that there are **no existing discussions** - [open](https://github.com/orgs/FossifyOrg/discussions?discussions_q=is:open+label:filemanager) or [closed](https://github.com/orgs/FossifyOrg/discussions?discussions_q=is:closed+label:filemanager) - to which I could contribute my information."
|
||||||
required: true
|
required: true
|
||||||
- label: "I have read the FAQs inside the app (Menu -> About -> FAQs) and my problem isn't listed."
|
- label: "I have read the FAQs inside the app (Menu -> About -> FAQs) and my problem isn't listed."
|
||||||
required: true
|
required: true
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ body:
|
|||||||
options:
|
options:
|
||||||
- label: "I made sure that there are **no existing issues** - [open](https://github.com/FossifyOrg/File-Manager/issues) or [closed](https://github.com/FossifyOrg/File-Manager/issues?q=is%3Aissue+is%3Aclosed) - to which I could contribute my information."
|
- label: "I made sure that there are **no existing issues** - [open](https://github.com/FossifyOrg/File-Manager/issues) or [closed](https://github.com/FossifyOrg/File-Manager/issues?q=is%3Aissue+is%3Aclosed) - to which I could contribute my information."
|
||||||
required: true
|
required: true
|
||||||
- label: "I made sure that there are **no existing discussions** - [open](https://github.com/FossifyOrg/File-Manager/discussions) or [closed](https://github.com/FossifyOrg/File-Manager/discussions?discussions_q=is%3Aclosed) - to which I could contribute my information."
|
- label: "I made sure that there are **no existing discussions** - [open](https://github.com/orgs/FossifyOrg/discussions?discussions_q=is:open+label:filemanager) or [closed](https://github.com/orgs/FossifyOrg/discussions?discussions_q=is:closed+label:filemanager) - to which I could contribute my information."
|
||||||
required: true
|
required: true
|
||||||
- label: "I have read the FAQs inside the app (Menu -> About -> FAQs) and my problem isn't listed."
|
- label: "I have read the FAQs inside the app (Menu -> About -> FAQs) and my problem isn't listed."
|
||||||
required: true
|
required: true
|
||||||
|
|||||||
+49
-1
@@ -6,6 +6,41 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [1.4.0] - 2025-10-29
|
||||||
|
### Changed
|
||||||
|
- Compatibility updates for Android 15 & 16
|
||||||
|
- Updated translations
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fixed duplicated entries when viewing protected ZIP files ([#76])
|
||||||
|
|
||||||
|
## [1.3.1] - 2025-10-02
|
||||||
|
### Changed
|
||||||
|
- Updated translations
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fixed files from hidden folders showing up in storage tab browser ([#217])
|
||||||
|
|
||||||
|
## [1.3.0] - 2025-09-30
|
||||||
|
### Added
|
||||||
|
- Added a separate "Save as" option in the text editor ([#224])
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Save button now overwrites files directly in the text editor ([#224])
|
||||||
|
- Search now ignores accents and diacritics ([#95])
|
||||||
|
- Updated translations
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fixed folders showing up incorrectly as files in copy/move dialog ([#267])
|
||||||
|
- Fixed error when saving files with unsupported characters ([#250])
|
||||||
|
- Fixed missing permission prompt on initial "Save as" launch ([#85])
|
||||||
|
- Fixed printing text files containing a "#" ([#104])
|
||||||
|
- Fixed files in hidden folders showing up in recent tab ([#217])
|
||||||
|
|
||||||
|
## [1.2.3] - 2025-09-15
|
||||||
|
### Fixed
|
||||||
|
- Fixed folders showing up incorrectly as files in some cases ([#80])
|
||||||
|
|
||||||
## [1.2.2] - 2025-09-01
|
## [1.2.2] - 2025-09-01
|
||||||
### Changed
|
### Changed
|
||||||
- Updated translations
|
- Updated translations
|
||||||
@@ -58,6 +93,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
[#27]: https://github.com/FossifyOrg/File-Manager/issues/27
|
[#27]: https://github.com/FossifyOrg/File-Manager/issues/27
|
||||||
[#37]: https://github.com/FossifyOrg/File-Manager/issues/37
|
[#37]: https://github.com/FossifyOrg/File-Manager/issues/37
|
||||||
|
[#76]: https://github.com/FossifyOrg/File-Manager/issues/76
|
||||||
|
[#80]: https://github.com/FossifyOrg/File-Manager/issues/80
|
||||||
|
[#85]: https://github.com/FossifyOrg/File-Manager/issues/85
|
||||||
|
[#95]: https://github.com/FossifyOrg/File-Manager/issues/95
|
||||||
|
[#104]: https://github.com/FossifyOrg/File-Manager/issues/104
|
||||||
[#105]: https://github.com/FossifyOrg/File-Manager/issues/105
|
[#105]: https://github.com/FossifyOrg/File-Manager/issues/105
|
||||||
[#106]: https://github.com/FossifyOrg/File-Manager/issues/106
|
[#106]: https://github.com/FossifyOrg/File-Manager/issues/106
|
||||||
[#120]: https://github.com/FossifyOrg/File-Manager/issues/120
|
[#120]: https://github.com/FossifyOrg/File-Manager/issues/120
|
||||||
@@ -65,9 +105,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
[#149]: https://github.com/FossifyOrg/File-Manager/issues/149
|
[#149]: https://github.com/FossifyOrg/File-Manager/issues/149
|
||||||
[#150]: https://github.com/FossifyOrg/File-Manager/issues/150
|
[#150]: https://github.com/FossifyOrg/File-Manager/issues/150
|
||||||
[#176]: https://github.com/FossifyOrg/File-Manager/issues/176
|
[#176]: https://github.com/FossifyOrg/File-Manager/issues/176
|
||||||
|
[#217]: https://github.com/FossifyOrg/File-Manager/issues/217
|
||||||
|
[#224]: https://github.com/FossifyOrg/File-Manager/issues/224
|
||||||
|
[#250]: https://github.com/FossifyOrg/File-Manager/issues/250
|
||||||
[#251]: https://github.com/FossifyOrg/File-Manager/issues/251
|
[#251]: https://github.com/FossifyOrg/File-Manager/issues/251
|
||||||
|
[#267]: https://github.com/FossifyOrg/File-Manager/issues/267
|
||||||
|
|
||||||
[Unreleased]: https://github.com/FossifyOrg/File-Manager/compare/1.2.2...HEAD
|
[Unreleased]: https://github.com/FossifyOrg/File-Manager/compare/1.4.0...HEAD
|
||||||
|
[1.4.0]: https://github.com/FossifyOrg/File-Manager/compare/1.3.1...1.4.0
|
||||||
|
[1.3.1]: https://github.com/FossifyOrg/File-Manager/compare/1.3.0...1.3.1
|
||||||
|
[1.3.0]: https://github.com/FossifyOrg/File-Manager/compare/1.2.3...1.3.0
|
||||||
|
[1.2.3]: https://github.com/FossifyOrg/File-Manager/compare/1.2.2...1.2.3
|
||||||
[1.2.2]: https://github.com/FossifyOrg/File-Manager/compare/1.2.0...1.2.2
|
[1.2.2]: https://github.com/FossifyOrg/File-Manager/compare/1.2.0...1.2.2
|
||||||
[1.2.0]: https://github.com/FossifyOrg/File-Manager/compare/1.1.0...1.2.0
|
[1.2.0]: https://github.com/FossifyOrg/File-Manager/compare/1.1.0...1.2.0
|
||||||
[1.1.0]: https://github.com/FossifyOrg/File-Manager/compare/1.0.1...1.1.0
|
[1.1.0]: https://github.com/FossifyOrg/File-Manager/compare/1.0.1...1.1.0
|
||||||
|
|||||||
+1
-1
@@ -182,7 +182,7 @@ GEM
|
|||||||
trailblazer-option (>= 0.1.1, < 0.2.0)
|
trailblazer-option (>= 0.1.1, < 0.2.0)
|
||||||
uber (< 0.2.0)
|
uber (< 0.2.0)
|
||||||
retriable (3.1.2)
|
retriable (3.1.2)
|
||||||
rexml (3.4.1)
|
rexml (3.4.2)
|
||||||
rouge (3.28.0)
|
rouge (3.28.0)
|
||||||
ruby2_keywords (0.0.5)
|
ruby2_keywords (0.0.5)
|
||||||
rubyzip (2.4.1)
|
rubyzip (2.4.1)
|
||||||
|
|||||||
+1
-10
@@ -52,12 +52,10 @@
|
|||||||
<ID>MaxLineLength:CompressAsDialog.kt$CompressAsDialog$val indexOfDot = if (filename.contains('.') && !activity.getIsPathDirectory(path)) filename.lastIndexOf(".") else filename.length</ID>
|
<ID>MaxLineLength:CompressAsDialog.kt$CompressAsDialog$val indexOfDot = if (filename.contains('.') && !activity.getIsPathDirectory(path)) filename.lastIndexOf(".") else filename.length</ID>
|
||||||
<ID>MaxLineLength:Config.kt$Config$set(wasStorageAnalysisTabAdded) = prefs.edit().putBoolean(WAS_STORAGE_ANALYSIS_TAB_ADDED, wasStorageAnalysisTabAdded).apply()</ID>
|
<ID>MaxLineLength:Config.kt$Config$set(wasStorageAnalysisTabAdded) = prefs.edit().putBoolean(WAS_STORAGE_ANALYSIS_TAB_ADDED, wasStorageAnalysisTabAdded).apply()</ID>
|
||||||
<ID>MaxLineLength:Context.kt$fun Context.isPathOnRoot(path: String)</ID>
|
<ID>MaxLineLength:Context.kt$fun Context.isPathOnRoot(path: String)</ID>
|
||||||
<ID>MaxLineLength:DecompressActivity.kt$DecompressActivity$updateMaterialActivityViews(decompressCoordinator, decompressList, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
|
|
||||||
<ID>MaxLineLength:DecompressItemsAdapter.kt$DecompressItemsAdapter$class</ID>
|
<ID>MaxLineLength:DecompressItemsAdapter.kt$DecompressItemsAdapter$class</ID>
|
||||||
<ID>MaxLineLength:DecompressItemsAdapter.kt$DecompressItemsAdapter$val drawable = fileDrawables.getOrElse(fileName.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable })</ID>
|
<ID>MaxLineLength:DecompressItemsAdapter.kt$DecompressItemsAdapter$val drawable = fileDrawables.getOrElse(fileName.substringAfterLast(".").lowercase(Locale.getDefault()), { fileDrawable })</ID>
|
||||||
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$FilePickerDialog</ID>
|
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$FilePickerDialog</ID>
|
||||||
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$ManageFavoritesAdapter(this@FavoritesActivity, favorites, this@FavoritesActivity, manageFavoritesList) { }</ID>
|
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$ManageFavoritesAdapter(this@FavoritesActivity, favorites, this@FavoritesActivity, manageFavoritesList) { }</ID>
|
||||||
<ID>MaxLineLength:FavoritesActivity.kt$FavoritesActivity$updateMaterialActivityViews(manageFavoritesCoordinator, manageFavoritesList, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
|
|
||||||
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$}</ID>
|
<ID>MaxLineLength:ItemsAdapter.kt$ItemsAdapter$}</ID>
|
||||||
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$ItemsAdapter</ID>
|
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$ItemsAdapter</ID>
|
||||||
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$class</ID>
|
<ID>MaxLineLength:ItemsFragment.kt$ItemsFragment$class</ID>
|
||||||
@@ -81,33 +79,27 @@
|
|||||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$if</ID>
|
<ID>MaxLineLength:MainActivity.kt$MainActivity$if</ID>
|
||||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$private fun getInactiveTabIndexes(activeIndex: Int)</ID>
|
<ID>MaxLineLength:MainActivity.kt$MainActivity$private fun getInactiveTabIndexes(activeIndex: Int)</ID>
|
||||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$resultIntent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION</ID>
|
<ID>MaxLineLength:MainActivity.kt$MainActivity$resultIntent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION</ID>
|
||||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$updateMaterialActivityViews(binding.mainCoordinator, null, useTransparentNavigation = false, useTopSearchMenu = true)</ID>
|
|
||||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$val licenses = LICENSE_GLIDE or LICENSE_PATTERN or LICENSE_REPRINT or LICENSE_GESTURE_VIEWS or LICENSE_AUTOFITTEXTVIEW or LICENSE_ZIP4J</ID>
|
<ID>MaxLineLength:MainActivity.kt$MainActivity$val licenses = LICENSE_GLIDE or LICENSE_PATTERN or LICENSE_REPRINT or LICENSE_GESTURE_VIEWS or LICENSE_AUTOFITTEXTVIEW or LICENSE_ZIP4J</ID>
|
||||||
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$!extraAudioMimeTypes.contains(fullMimetype)</ID>
|
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$!extraAudioMimeTypes.contains(fullMimetype)</ID>
|
||||||
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$if</ID>
|
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$if</ID>
|
||||||
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$updateMaterialActivityViews(mimetypesCoordinator, mimetypesList, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
|
|
||||||
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$val fullMimetype = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault()) ?: return@queryCursor</ID>
|
<ID>MaxLineLength:MimeTypesActivity.kt$MimeTypesActivity$val fullMimetype = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault()) ?: return@queryCursor</ID>
|
||||||
<ID>MaxLineLength:MyViewPagerFragment.kt$MyViewPagerFragment$abstract</ID>
|
<ID>MaxLineLength:MyViewPagerFragment.kt$MyViewPagerFragment$abstract</ID>
|
||||||
<ID>MaxLineLength:MyViewPagerFragment.kt$MyViewPagerFragment$val fabIcon = context.resources.getColoredDrawableWithColor(iconId, context.getProperPrimaryColor().getContrastColor())</ID>
|
<ID>MaxLineLength:MyViewPagerFragment.kt$MyViewPagerFragment$val fabIcon = context.resources.getColoredDrawableWithColor(iconId, context.getProperPrimaryColor().getContrastColor())</ID>
|
||||||
<ID>MaxLineLength:ReadTextActivity.kt$ReadTextActivity$if</ID>
|
<ID>MaxLineLength:ReadTextActivity.kt$ReadTextActivity$if</ID>
|
||||||
<ID>MaxLineLength:ReadTextActivity.kt$ReadTextActivity$private</ID>
|
<ID>MaxLineLength:ReadTextActivity.kt$ReadTextActivity$private</ID>
|
||||||
<ID>MaxLineLength:ReadTextActivity.kt$ReadTextActivity$updateMaterialActivityViews(readTextCoordinator, readTextView, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
|
|
||||||
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$ItemsAdapter</ID>
|
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$ItemsAdapter</ID>
|
||||||
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$binding.recentsSwipeRefresh.isEnabled = lastSearchedText.isEmpty() && activity?.config?.enablePullToRefresh != false</ID>
|
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$binding.recentsSwipeRefresh.isEnabled = lastSearchedText.isEmpty() && activity?.config?.enablePullToRefresh != false</ID>
|
||||||
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$class</ID>
|
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$class</ID>
|
||||||
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$if</ID>
|
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$if</ID>
|
||||||
<ID>MaxLineLength:RecentsFragment.kt$RecentsFragment$val filtered = filesIgnoringSearch.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList<ListItem></ID>
|
|
||||||
<ID>MaxLineLength:RootHelpers.kt$RootHelpers$fun</ID>
|
<ID>MaxLineLength:RootHelpers.kt$RootHelpers$fun</ID>
|
||||||
<ID>MaxLineLength:RootHelpers.kt$RootHelpers$private</ID>
|
<ID>MaxLineLength:RootHelpers.kt$RootHelpers$private</ID>
|
||||||
<ID>MaxLineLength:SaveAsActivity.kt$SaveAsActivity$FilePickerDialog</ID>
|
<ID>MaxLineLength:SaveAsActivity.kt$SaveAsActivity$FilePickerDialog</ID>
|
||||||
<ID>MaxLineLength:SaveAsDialog.kt$SaveAsDialog$val title = String.format(activity.getString(R.string.file_already_exists_overwrite), newFilename)</ID>
|
<ID>MaxLineLength:SaveAsDialog.kt$SaveAsDialog$val title = String.format(activity.getString(R.string.file_already_exists_overwrite), newFilename)</ID>
|
||||||
<ID>MaxLineLength:SettingsActivity.kt$SettingsActivity$settingsUseEnglishHolder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") && !isTiramisuPlus())</ID>
|
<ID>MaxLineLength:SettingsActivity.kt$SettingsActivity$settingsUseEnglishHolder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") && !isTiramisuPlus())</ID>
|
||||||
<ID>MaxLineLength:SettingsActivity.kt$SettingsActivity$updateMaterialActivityViews(settingsCoordinator, settingsHolder, useTransparentNavigation = true, useTopSearchMenu = false)</ID>
|
|
||||||
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$class</ID>
|
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$class</ID>
|
||||||
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$mainStorageUsageProgressbar</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$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$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 mimeType = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault())</ID>
|
||||||
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$val storageStatsManager = context.getSystemService(AppCompatActivity.STORAGE_STATS_SERVICE) as StorageStatsManager</ID>
|
<ID>MaxLineLength:StorageFragment.kt$StorageFragment$val storageStatsManager = context.getSystemService(AppCompatActivity.STORAGE_STATS_SERVICE) as StorageStatsManager</ID>
|
||||||
<ID>NestedBlockDepth:DecompressActivity.kt$DecompressActivity$private fun decompressTo(destination: String)</ID>
|
<ID>NestedBlockDepth:DecompressActivity.kt$DecompressActivity$private fun decompressTo(destination: String)</ID>
|
||||||
@@ -120,14 +112,13 @@
|
|||||||
<ID>NestedBlockDepth:RecentsFragment.kt$RecentsFragment$private fun getRecents(callback: (recents: ArrayList<ListItem>) -> Unit)</ID>
|
<ID>NestedBlockDepth:RecentsFragment.kt$RecentsFragment$private fun getRecents(callback: (recents: ArrayList<ListItem>) -> Unit)</ID>
|
||||||
<ID>NestedBlockDepth:StorageFragment.kt$StorageFragment$override fun setupFragment(activity: SimpleActivity)</ID>
|
<ID>NestedBlockDepth:StorageFragment.kt$StorageFragment$override fun setupFragment(activity: SimpleActivity)</ID>
|
||||||
<ID>NestedBlockDepth:StorageFragment.kt$StorageFragment$private fun getAllFiles(volumeName: String): ArrayList<FileDirItem></ID>
|
<ID>NestedBlockDepth:StorageFragment.kt$StorageFragment$private fun getAllFiles(volumeName: String): ArrayList<FileDirItem></ID>
|
||||||
<ID>ReturnCount:ItemsAdapter.kt$ItemsAdapter$@SuppressLint("NewApi") private fun compressPaths( sourcePaths: List<String>, targetPath: String, password: String? = null ): Boolean</ID>
|
<ID>ReturnCount:MainActivity.kt$MainActivity$override fun onBackPressedCompat(): Boolean</ID>
|
||||||
<ID>SwallowedException:ItemsAdapter.kt$ItemsAdapter$e: Exception</ID>
|
<ID>SwallowedException:ItemsAdapter.kt$ItemsAdapter$e: Exception</ID>
|
||||||
<ID>SwallowedException:MimeTypesActivity.kt$MimeTypesActivity$e: Exception</ID>
|
<ID>SwallowedException:MimeTypesActivity.kt$MimeTypesActivity$e: Exception</ID>
|
||||||
<ID>SwallowedException:StorageFragment.kt$StorageFragment$e: Exception</ID>
|
<ID>SwallowedException:StorageFragment.kt$StorageFragment$e: Exception</ID>
|
||||||
<ID>TooGenericExceptionCaught:DecompressActivity.kt$DecompressActivity$e: Exception</ID>
|
<ID>TooGenericExceptionCaught:DecompressActivity.kt$DecompressActivity$e: Exception</ID>
|
||||||
<ID>TooGenericExceptionCaught:ItemsAdapter.kt$ItemsAdapter$e: Exception</ID>
|
<ID>TooGenericExceptionCaught:ItemsAdapter.kt$ItemsAdapter$e: Exception</ID>
|
||||||
<ID>TooGenericExceptionCaught:ItemsAdapter.kt$ItemsAdapter$exception: Exception</ID>
|
<ID>TooGenericExceptionCaught:ItemsAdapter.kt$ItemsAdapter$exception: Exception</ID>
|
||||||
<ID>TooGenericExceptionCaught:MainActivity.kt$MainActivity$e: Exception</ID>
|
|
||||||
<ID>TooGenericExceptionCaught:MimeTypesActivity.kt$MimeTypesActivity$e: Exception</ID>
|
<ID>TooGenericExceptionCaught:MimeTypesActivity.kt$MimeTypesActivity$e: Exception</ID>
|
||||||
<ID>TooGenericExceptionCaught:ReadTextActivity.kt$ReadTextActivity$e: Exception</ID>
|
<ID>TooGenericExceptionCaught:ReadTextActivity.kt$ReadTextActivity$e: Exception</ID>
|
||||||
<ID>TooGenericExceptionCaught:RecentsFragment.kt$RecentsFragment$e: Exception</ID>
|
<ID>TooGenericExceptionCaught:RecentsFragment.kt$RecentsFragment$e: Exception</ID>
|
||||||
|
|||||||
+57
-68
@@ -19,21 +19,10 @@
|
|||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
file="src/main/kotlin/org/fossify/filemanager/activities/SettingsActivity.kt"
|
file="src/main/kotlin/org/fossify/filemanager/activities/SettingsActivity.kt"
|
||||||
line="92"
|
line="91"
|
||||||
column="17"/>
|
column="17"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
<issue
|
|
||||||
id="OldTargetApi"
|
|
||||||
message="Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the `android.os.Build.VERSION_CODES` javadoc for details."
|
|
||||||
errorLine1="app-build-targetSDK = "34""
|
|
||||||
errorLine2=" ~~~~">
|
|
||||||
<location
|
|
||||||
file="$HOME/work/File-Manager/File-Manager/gradle/libs.versions.toml"
|
|
||||||
line="22"
|
|
||||||
column="23"/>
|
|
||||||
</issue>
|
|
||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="CustomSplashScreen"
|
id="CustomSplashScreen"
|
||||||
message="The application should not provide its own launch screen"
|
message="The application should not provide its own launch screen"
|
||||||
@@ -51,31 +40,31 @@
|
|||||||
errorLine1="distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip"
|
errorLine1="distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
file="$HOME/work/File-Manager/File-Manager/gradle/wrapper/gradle-wrapper.properties"
|
file="$HOME/Projects/Fossify/FossifyOrg/File-Manager/gradle/wrapper/gradle-wrapper.properties"
|
||||||
line="3"
|
line="3"
|
||||||
column="17"/>
|
column="17"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="AndroidGradlePluginVersion"
|
id="AndroidGradlePluginVersion"
|
||||||
message="A newer version of com.android.application than 8.11.1 is available: 8.12.2"
|
message="A newer version of com.android.application than 8.11.1 is available: 8.13.0. (There is also a newer version of 8.11.𝑥 available, if upgrading to 8.13.0 is difficult: 8.11.2)"
|
||||||
errorLine1="gradlePlugins-agp = "8.11.1""
|
errorLine1="gradlePlugins-agp = "8.11.1""
|
||||||
errorLine2=" ~~~~~~~~">
|
errorLine2=" ~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
file="$HOME/work/File-Manager/File-Manager/gradle/libs.versions.toml"
|
file="$HOME/Projects/Fossify/FossifyOrg/File-Manager/gradle/libs.versions.toml"
|
||||||
line="19"
|
line="19"
|
||||||
column="21"/>
|
column="21"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="GradleDependency"
|
id="NewerVersionAvailable"
|
||||||
message="A newer version of `compileSdkVersion` than 34 is available: 36"
|
message="A newer version of org.jetbrains.kotlin.android than 2.2.20 is available: 2.2.21"
|
||||||
errorLine1="app-build-compileSDKVersion = "34""
|
errorLine1="kotlin = "2.2.20""
|
||||||
errorLine2=" ~~~~">
|
errorLine2=" ~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
file="$HOME/work/File-Manager/File-Manager/gradle/libs.versions.toml"
|
file="$HOME/Projects/Fossify/FossifyOrg/File-Manager/gradle/libs.versions.toml"
|
||||||
line="21"
|
line="3"
|
||||||
column="31"/>
|
column="10"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
<issue
|
<issue
|
||||||
@@ -113,7 +102,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""app_launcher_name" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ml" (Malayalam), "ms" (Malay), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai)"
|
message=""app_launcher_name" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ml" (Malayalam), "ms" (Malay), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi""
|
||||||
errorLine1=" <string name="app_launcher_name">File Manager_debug</string>"
|
errorLine1=" <string name="app_launcher_name">File Manager_debug</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -124,7 +113,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""app_launcher_name" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ml" (Malayalam), "ms" (Malay), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai)"
|
message=""app_launcher_name" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ml" (Malayalam), "ms" (Malay), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi""
|
||||||
errorLine1=" <string name="app_launcher_name">File Manager</string>"
|
errorLine1=" <string name="app_launcher_name">File Manager</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -135,7 +124,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""press_back_again" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""press_back_again" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="press_back_again">Press back again to exit</string>"
|
errorLine1=" <string name="press_back_again">Press back again to exit</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -168,7 +157,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""home_folder_updated" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""home_folder_updated" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="home_folder_updated">Home folder updated</string>"
|
errorLine1=" <string name="home_folder_updated">Home folder updated</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -190,7 +179,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""path_copied" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""path_copied" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="path_copied">Path copied</string>"
|
errorLine1=" <string name="path_copied">Path copied</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -201,7 +190,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""select_audio_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""select_audio_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="select_audio_file">Please select an audio file</string>"
|
errorLine1=" <string name="select_audio_file">Please select an audio file</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -212,7 +201,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""search_folder" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""search_folder" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="search_folder">Search folder</string>"
|
errorLine1=" <string name="search_folder">Search folder</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -223,7 +212,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""rooted_device_only" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""rooted_device_only" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="rooted_device_only">This operation works only on rooted devices</string>"
|
errorLine1=" <string name="rooted_device_only">This operation works only on rooted devices</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -234,7 +223,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""recents" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
message=""recents" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "bqi", "ckb""
|
||||||
errorLine1=" <string name="recents">Recents</string>"
|
errorLine1=" <string name="recents">Recents</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -245,7 +234,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""show_recents" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
message=""show_recents" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "bqi", "ckb""
|
||||||
errorLine1=" <string name="show_recents">Show recents</string>"
|
errorLine1=" <string name="show_recents">Show recents</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -256,7 +245,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""invert_colors" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "nb" (Norwegian Bokmål), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
message=""invert_colors" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "bqi", "ckb""
|
||||||
errorLine1=" <string name="invert_colors">Invert colors</string>"
|
errorLine1=" <string name="invert_colors">Invert colors</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -267,7 +256,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""open_as" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""open_as" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="open_as">Open as</string>"
|
errorLine1=" <string name="open_as">Open as</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -278,7 +267,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""text_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""text_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="text_file">Text file</string>"
|
errorLine1=" <string name="text_file">Text file</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -289,7 +278,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""image_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""image_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="image_file">Image file</string>"
|
errorLine1=" <string name="image_file">Image file</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -300,7 +289,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""audio_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""audio_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="audio_file">Audio file</string>"
|
errorLine1=" <string name="audio_file">Audio file</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -311,7 +300,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""video_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""video_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="video_file">Video file</string>"
|
errorLine1=" <string name="video_file">Video file</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -322,7 +311,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""other_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""other_file" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="other_file">Other file</string>"
|
errorLine1=" <string name="other_file">Other file</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -333,7 +322,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""compress" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""compress" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="compress">Compress</string>"
|
errorLine1=" <string name="compress">Compress</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -344,7 +333,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""decompress" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""decompress" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="decompress">Decompress</string>"
|
errorLine1=" <string name="decompress">Decompress</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -355,7 +344,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""compress_as" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""compress_as" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="compress_as">Compress as</string>"
|
errorLine1=" <string name="compress_as">Compress as</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -366,7 +355,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""compressing" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""compressing" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="compressing">Compressing…</string>"
|
errorLine1=" <string name="compressing">Compressing…</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -377,7 +366,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""decompressing" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""decompressing" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="decompressing">Decompressing…</string>"
|
errorLine1=" <string name="decompressing">Decompressing…</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -388,7 +377,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""compression_successful" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""compression_successful" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="compression_successful">Compression successful</string>"
|
errorLine1=" <string name="compression_successful">Compression successful</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -399,7 +388,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""decompression_successful" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""decompression_successful" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="decompression_successful">Decompression successful</string>"
|
errorLine1=" <string name="decompression_successful">Decompression successful</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -410,7 +399,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""compressing_failed" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""compressing_failed" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="compressing_failed">Compressing failed</string>"
|
errorLine1=" <string name="compressing_failed">Compressing failed</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -421,7 +410,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""decompressing_failed" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""decompressing_failed" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="decompressing_failed">Decompressing failed</string>"
|
errorLine1=" <string name="decompressing_failed">Decompressing failed</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -432,7 +421,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""manage_favorites" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""manage_favorites" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="manage_favorites">Manage favorites</string>"
|
errorLine1=" <string name="manage_favorites">Manage favorites</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -443,7 +432,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""go_to_favorite" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""go_to_favorite" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="go_to_favorite">Go to favorite</string>"
|
errorLine1=" <string name="go_to_favorite">Go to favorite</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -454,7 +443,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""favorites_activity_placeholder" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""favorites_activity_placeholder" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="favorites_activity_placeholder">You can add frequently used folders to favorites for easy access from anywhere.</string>"
|
errorLine1=" <string name="favorites_activity_placeholder">You can add frequently used folders to favorites for easy access from anywhere.</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -465,7 +454,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""file_editor" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""file_editor" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="file_editor">File Editor</string>"
|
errorLine1=" <string name="file_editor">File Editor</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -476,7 +465,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""storage_analysis" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "nb" (Norwegian Bokmål), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
message=""storage_analysis" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "bqi", "ckb""
|
||||||
errorLine1=" <string name="storage_analysis">Storage analysis</string>"
|
errorLine1=" <string name="storage_analysis">Storage analysis</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -487,7 +476,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""images" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""images" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="images">Images</string>"
|
errorLine1=" <string name="images">Images</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -498,7 +487,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""videos" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""videos" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="videos">Videos</string>"
|
errorLine1=" <string name="videos">Videos</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -509,7 +498,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""audio" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "sk" (Slovak), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
message=""audio" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "bqi", "ckb""
|
||||||
errorLine1=" <string name="audio">Audio</string>"
|
errorLine1=" <string name="audio">Audio</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -520,7 +509,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""documents" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
message=""documents" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "bqi", "ckb""
|
||||||
errorLine1=" <string name="documents">Documents</string>"
|
errorLine1=" <string name="documents">Documents</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -531,7 +520,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""downloads" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
message=""downloads" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "bqi", "ckb""
|
||||||
errorLine1=" <string name="downloads">Downloads</string>"
|
errorLine1=" <string name="downloads">Downloads</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -542,7 +531,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""archives" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
message=""archives" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "bqi", "ckb""
|
||||||
errorLine1=" <string name="archives">Archives</string>"
|
errorLine1=" <string name="archives">Archives</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -553,7 +542,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""others" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "nb" (Norwegian Bokmål), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
message=""others" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "bqi", "ckb""
|
||||||
errorLine1=" <string name="others">Others</string>"
|
errorLine1=" <string name="others">Others</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -564,7 +553,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""storage_free" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
message=""storage_free" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "ko" (Korean), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "bqi", "ckb""
|
||||||
errorLine1=" <string name="storage_free">free</string>"
|
errorLine1=" <string name="storage_free">free</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -575,7 +564,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""total_storage" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
message=""total_storage" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "bqi", "ckb""
|
||||||
errorLine1=" <string name="total_storage">Total storage: %s</string>"
|
errorLine1=" <string name="total_storage">Total storage: %s</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -586,7 +575,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""enable_root_access" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb""
|
message=""enable_root_access" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "bqi", "ckb""
|
||||||
errorLine1=" <string name="enable_root_access">Enable root access</string>"
|
errorLine1=" <string name="enable_root_access">Enable root access</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -597,7 +586,7 @@
|
|||||||
|
|
||||||
<issue
|
<issue
|
||||||
id="MissingTranslation"
|
id="MissingTranslation"
|
||||||
message=""press_back_twice" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "nb" (Norwegian Bokmål), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb""
|
message=""press_back_twice" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "nn" (Norwegian Nynorsk), "bn" (Bangla), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "bqi", "ckb""
|
||||||
errorLine1=" <string name="press_back_twice">Require pressing Back twice to leave the app</string>"
|
errorLine1=" <string name="press_back_twice">Require pressing Back twice to leave the app</string>"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
@@ -993,8 +982,8 @@
|
|||||||
errorLine1=" intent.data = Uri.parse("package:$packageName")"
|
errorLine1=" intent.data = Uri.parse("package:$packageName")"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
file="src/main/kotlin/org/fossify/filemanager/activities/MainActivity.kt"
|
file="src/main/kotlin/org/fossify/filemanager/activities/SimpleActivity.kt"
|
||||||
line="340"
|
line="80"
|
||||||
column="43"/>
|
column="43"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
@@ -1004,8 +993,8 @@
|
|||||||
errorLine1=" intent.data = Uri.parse("package:$packageName")"
|
errorLine1=" intent.data = Uri.parse("package:$packageName")"
|
||||||
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
|
||||||
<location
|
<location
|
||||||
file="src/main/kotlin/org/fossify/filemanager/activities/MainActivity.kt"
|
file="src/main/kotlin/org/fossify/filemanager/activities/SimpleActivity.kt"
|
||||||
line="340"
|
line="80"
|
||||||
column="43"/>
|
column="43"/>
|
||||||
</issue>
|
</issue>
|
||||||
|
|
||||||
|
|||||||
@@ -60,14 +60,6 @@
|
|||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.OPEN_DOCUMENT" />
|
|
||||||
<data android:mimeType="*/*" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.OPENABLE" />
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
</intent-filter>
|
|
||||||
|
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.RINGTONE_PICKER" />
|
<action android:name="android.intent.action.RINGTONE_PICKER" />
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
|||||||
@@ -45,13 +45,12 @@ class DecompressActivity : SimpleActivity() {
|
|||||||
private var filename = ""
|
private var filename = ""
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
isMaterialActivity = true
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
setupOptionsMenu()
|
setupOptionsMenu()
|
||||||
binding.apply {
|
binding.apply {
|
||||||
updateMaterialActivityViews(decompressCoordinator, decompressList, useTransparentNavigation = true, useTopSearchMenu = false)
|
setupEdgeToEdge(padBottomSystem = listOf(decompressList))
|
||||||
setupMaterialScrollListener(decompressList, decompressToolbar)
|
setupMaterialScrollListener(binding.decompressList, binding.decompressAppbar)
|
||||||
}
|
}
|
||||||
|
|
||||||
uri = intent.data
|
uri = intent.data
|
||||||
@@ -70,7 +69,7 @@ class DecompressActivity : SimpleActivity() {
|
|||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
setupToolbar(binding.decompressToolbar, NavigationIcon.Arrow)
|
setupTopAppBar(binding.decompressAppbar, NavigationIcon.Arrow)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSaveInstanceState(outState: Bundle) {
|
override fun onSaveInstanceState(outState: Bundle) {
|
||||||
@@ -88,16 +87,18 @@ class DecompressActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBackPressed() {
|
override fun onBackPressedCompat(): Boolean {
|
||||||
if (currentPath.isEmpty()) {
|
return if (currentPath.isEmpty()) {
|
||||||
super.onBackPressed()
|
false
|
||||||
} else {
|
} else {
|
||||||
val newPath = if (currentPath.contains("/")) currentPath.getParentPath() else ""
|
val newPath = if (currentPath.contains("/")) currentPath.getParentPath() else ""
|
||||||
updateCurrentPath(newPath)
|
updateCurrentPath(newPath)
|
||||||
|
true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupFilesList() {
|
private fun setupFilesList() {
|
||||||
|
allFiles.clear()
|
||||||
fillAllListItems(uri!!) {
|
fillAllListItems(uri!!) {
|
||||||
updateCurrentPath("")
|
updateCurrentPath("")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,20 +18,19 @@ class FavoritesActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
|||||||
private val binding by viewBinding(ActivityFavoritesBinding::inflate)
|
private val binding by viewBinding(ActivityFavoritesBinding::inflate)
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
isMaterialActivity = true
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
setupOptionsMenu()
|
setupOptionsMenu()
|
||||||
updateFavorites()
|
updateFavorites()
|
||||||
binding.apply {
|
binding.apply {
|
||||||
updateMaterialActivityViews(manageFavoritesCoordinator, manageFavoritesList, useTransparentNavigation = true, useTopSearchMenu = false)
|
setupEdgeToEdge(padBottomSystem = listOf(manageFavoritesList))
|
||||||
setupMaterialScrollListener(manageFavoritesList, manageFavoritesToolbar)
|
setupMaterialScrollListener(binding.manageFavoritesList, binding.manageFavoritesAppbar)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
setupToolbar(binding.manageFavoritesToolbar, NavigationIcon.Arrow)
|
setupTopAppBar(binding.manageFavoritesAppbar, NavigationIcon.Arrow)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupOptionsMenu() {
|
private fun setupOptionsMenu() {
|
||||||
|
|||||||
@@ -1,22 +1,17 @@
|
|||||||
package org.fossify.filemanager.activities
|
package org.fossify.filemanager.activities
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.ClipData
|
import android.content.ClipData
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.media.RingtoneManager
|
import android.media.RingtoneManager
|
||||||
import android.net.Uri
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Environment
|
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.provider.Settings
|
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.viewpager.widget.ViewPager
|
import androidx.viewpager.widget.ViewPager
|
||||||
import com.stericson.RootTools.RootTools
|
import com.stericson.RootTools.RootTools
|
||||||
import me.grantland.widget.AutofitHelper
|
import me.grantland.widget.AutofitHelper
|
||||||
import org.fossify.commons.dialogs.ConfirmationAdvancedDialog
|
|
||||||
import org.fossify.commons.dialogs.RadioGroupDialog
|
import org.fossify.commons.dialogs.RadioGroupDialog
|
||||||
import org.fossify.commons.extensions.appLaunched
|
import org.fossify.commons.extensions.appLaunched
|
||||||
import org.fossify.commons.extensions.appLockManager
|
import org.fossify.commons.extensions.appLockManager
|
||||||
@@ -43,7 +38,6 @@ import org.fossify.commons.extensions.launchMoreAppsFromUsIntent
|
|||||||
import org.fossify.commons.extensions.onGlobalLayout
|
import org.fossify.commons.extensions.onGlobalLayout
|
||||||
import org.fossify.commons.extensions.onTabSelectionChanged
|
import org.fossify.commons.extensions.onTabSelectionChanged
|
||||||
import org.fossify.commons.extensions.sdCardPath
|
import org.fossify.commons.extensions.sdCardPath
|
||||||
import org.fossify.commons.extensions.showErrorToast
|
|
||||||
import org.fossify.commons.extensions.toast
|
import org.fossify.commons.extensions.toast
|
||||||
import org.fossify.commons.extensions.updateBottomTabItemColors
|
import org.fossify.commons.extensions.updateBottomTabItemColors
|
||||||
import org.fossify.commons.extensions.viewBinding
|
import org.fossify.commons.extensions.viewBinding
|
||||||
@@ -59,7 +53,6 @@ import org.fossify.commons.helpers.TAB_RECENT_FILES
|
|||||||
import org.fossify.commons.helpers.TAB_STORAGE_ANALYSIS
|
import org.fossify.commons.helpers.TAB_STORAGE_ANALYSIS
|
||||||
import org.fossify.commons.helpers.VIEW_TYPE_GRID
|
import org.fossify.commons.helpers.VIEW_TYPE_GRID
|
||||||
import org.fossify.commons.helpers.ensureBackgroundThread
|
import org.fossify.commons.helpers.ensureBackgroundThread
|
||||||
import org.fossify.commons.helpers.isRPlus
|
|
||||||
import org.fossify.commons.models.FAQItem
|
import org.fossify.commons.models.FAQItem
|
||||||
import org.fossify.commons.models.RadioItem
|
import org.fossify.commons.models.RadioItem
|
||||||
import org.fossify.commons.models.Release
|
import org.fossify.commons.models.Release
|
||||||
@@ -82,9 +75,10 @@ import org.fossify.filemanager.interfaces.ItemOperationsListener
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class MainActivity : SimpleActivity() {
|
class MainActivity : SimpleActivity() {
|
||||||
|
override var isSearchBarEnabled = true
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val BACK_PRESS_TIMEOUT = 5000
|
private const val BACK_PRESS_TIMEOUT = 5000
|
||||||
private const val MANAGE_STORAGE_RC = 201
|
|
||||||
private const val PICKED_PATH = "picked_path"
|
private const val PICKED_PATH = "picked_path"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,7 +93,6 @@ class MainActivity : SimpleActivity() {
|
|||||||
private var mStoredShowTabs = 0
|
private var mStoredShowTabs = 0
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
isMaterialActivity = true
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
appLaunched(BuildConfig.APPLICATION_ID)
|
appLaunched(BuildConfig.APPLICATION_ID)
|
||||||
@@ -117,7 +110,7 @@ class MainActivity : SimpleActivity() {
|
|||||||
storeStateVariables()
|
storeStateVariables()
|
||||||
setupTabs()
|
setupTabs()
|
||||||
|
|
||||||
updateMaterialActivityViews(binding.mainCoordinator, null, useTransparentNavigation = false, useTopSearchMenu = true)
|
setupEdgeToEdge(padBottomImeAndSystem = listOf(binding.mainTabsHolder))
|
||||||
|
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
config.temporarilyShowHidden = false
|
config.temporarilyShowHidden = false
|
||||||
@@ -168,12 +161,13 @@ class MainActivity : SimpleActivity() {
|
|||||||
config.lastUsedViewPagerPage = binding.mainViewPager.currentItem
|
config.lastUsedViewPagerPage = binding.mainViewPager.currentItem
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBackPressed() {
|
override fun onBackPressedCompat(): Boolean {
|
||||||
val currentFragment = getCurrentFragment()
|
val currentFragment = getCurrentFragment()
|
||||||
if (binding.mainMenu.isSearchOpen) {
|
if (binding.mainMenu.isSearchOpen) {
|
||||||
binding.mainMenu.closeSearch()
|
binding.mainMenu.closeSearch()
|
||||||
|
return true
|
||||||
} else if (currentFragment is RecentsFragment || currentFragment is StorageFragment) {
|
} else if (currentFragment is RecentsFragment || currentFragment is StorageFragment) {
|
||||||
super.onBackPressed()
|
return false
|
||||||
} else if ((currentFragment as ItemsFragment).getBreadcrumbs().getItemCount() <= 1) {
|
} else if ((currentFragment as ItemsFragment).getBreadcrumbs().getItemCount() <= 1) {
|
||||||
if (!wasBackJustPressed && config.pressBackTwice) {
|
if (!wasBackJustPressed && config.pressBackTwice) {
|
||||||
wasBackJustPressed = true
|
wasBackJustPressed = true
|
||||||
@@ -181,13 +175,16 @@ class MainActivity : SimpleActivity() {
|
|||||||
Handler().postDelayed({
|
Handler().postDelayed({
|
||||||
wasBackJustPressed = false
|
wasBackJustPressed = false
|
||||||
}, BACK_PRESS_TIMEOUT.toLong())
|
}, BACK_PRESS_TIMEOUT.toLong())
|
||||||
|
return true
|
||||||
} else {
|
} else {
|
||||||
appLockManager.lock()
|
appLockManager.lock()
|
||||||
finish()
|
finish()
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
currentFragment.getBreadcrumbs().removeBreadcrumb()
|
currentFragment.getBreadcrumbs().removeBreadcrumb()
|
||||||
openPath(currentFragment.getBreadcrumbs().getLastItem().path)
|
openPath(currentFragment.getBreadcrumbs().getLastItem().path)
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -197,7 +194,7 @@ class MainActivity : SimpleActivity() {
|
|||||||
val currentViewType = config.getFolderViewType(currentFragment.currentPath)
|
val currentViewType = config.getFolderViewType(currentFragment.currentPath)
|
||||||
val favorites = config.favorites
|
val favorites = config.favorites
|
||||||
|
|
||||||
binding.mainMenu.getToolbar().menu.apply {
|
binding.mainMenu.requireToolbar().menu.apply {
|
||||||
findItem(R.id.sort).isVisible = currentFragment is ItemsFragment
|
findItem(R.id.sort).isVisible = currentFragment is ItemsFragment
|
||||||
findItem(R.id.change_view_type).isVisible = currentFragment !is StorageFragment
|
findItem(R.id.change_view_type).isVisible = currentFragment !is StorageFragment
|
||||||
|
|
||||||
@@ -222,7 +219,7 @@ class MainActivity : SimpleActivity() {
|
|||||||
|
|
||||||
private fun setupOptionsMenu() {
|
private fun setupOptionsMenu() {
|
||||||
binding.mainMenu.apply {
|
binding.mainMenu.apply {
|
||||||
getToolbar().inflateMenu(R.menu.menu)
|
requireToolbar().inflateMenu(R.menu.menu)
|
||||||
toggleHideOnScroll(false)
|
toggleHideOnScroll(false)
|
||||||
setupMenu()
|
setupMenu()
|
||||||
|
|
||||||
@@ -236,7 +233,7 @@ class MainActivity : SimpleActivity() {
|
|||||||
getCurrentFragment()?.searchQueryChanged(text)
|
getCurrentFragment()?.searchQueryChanged(text)
|
||||||
}
|
}
|
||||||
|
|
||||||
getToolbar().setOnMenuItemClickListener { menuItem ->
|
requireToolbar().setOnMenuItemClickListener { menuItem ->
|
||||||
if (getCurrentFragment() == null) {
|
if (getCurrentFragment() == null) {
|
||||||
return@setOnMenuItemClickListener true
|
return@setOnMenuItemClickListener true
|
||||||
}
|
}
|
||||||
@@ -281,17 +278,7 @@ class MainActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("NewApi")
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
|
|
||||||
super.onActivityResult(requestCode, resultCode, resultData)
|
|
||||||
isAskingPermissions = false
|
|
||||||
if (requestCode == MANAGE_STORAGE_RC && isRPlus()) {
|
|
||||||
actionOnPermission?.invoke(Environment.isExternalStorageManager())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updateMenuColors() {
|
private fun updateMenuColors() {
|
||||||
updateStatusbarColor(getProperBackgroundColor())
|
|
||||||
binding.mainMenu.updateColors()
|
binding.mainMenu.updateColors()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -323,38 +310,6 @@ class MainActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("InlinedApi")
|
|
||||||
private fun handleStoragePermission(callback: (granted: Boolean) -> Unit) {
|
|
||||||
actionOnPermission = null
|
|
||||||
if (hasStoragePermission()) {
|
|
||||||
callback(true)
|
|
||||||
} else {
|
|
||||||
if (isRPlus()) {
|
|
||||||
ConfirmationAdvancedDialog(this, "", R.string.access_storage_prompt, R.string.ok, 0, false) { success ->
|
|
||||||
if (success) {
|
|
||||||
isAskingPermissions = true
|
|
||||||
actionOnPermission = callback
|
|
||||||
try {
|
|
||||||
val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
|
|
||||||
intent.addCategory("android.intent.category.DEFAULT")
|
|
||||||
intent.data = Uri.parse("package:$packageName")
|
|
||||||
startActivityForResult(intent, MANAGE_STORAGE_RC)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
showErrorToast(e)
|
|
||||||
val intent = Intent()
|
|
||||||
intent.action = Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
|
|
||||||
startActivityForResult(intent, MANAGE_STORAGE_RC)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
finish()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
handlePermission(PERMISSION_WRITE_STORAGE, callback)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun initFileManager(refreshRecents: Boolean) {
|
private fun initFileManager(refreshRecents: Boolean) {
|
||||||
if (intent.action == Intent.ACTION_VIEW && intent.data != null) {
|
if (intent.action == Intent.ACTION_VIEW && intent.data != null) {
|
||||||
val data = intent.data
|
val data = intent.data
|
||||||
@@ -414,7 +369,6 @@ class MainActivity : SimpleActivity() {
|
|||||||
val isPickFileIntent = action == RingtoneManager.ACTION_RINGTONE_PICKER
|
val isPickFileIntent = action == RingtoneManager.ACTION_RINGTONE_PICKER
|
||||||
|| action == Intent.ACTION_GET_CONTENT
|
|| action == Intent.ACTION_GET_CONTENT
|
||||||
|| action == Intent.ACTION_PICK
|
|| action == Intent.ACTION_PICK
|
||||||
|| action == Intent.ACTION_OPEN_DOCUMENT
|
|
||||||
val isCreateDocumentIntent = action == Intent.ACTION_CREATE_DOCUMENT
|
val isCreateDocumentIntent = action == Intent.ACTION_CREATE_DOCUMENT
|
||||||
|
|
||||||
if (isPickFileIntent) {
|
if (isPickFileIntent) {
|
||||||
@@ -467,7 +421,6 @@ class MainActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val bottomBarColor = getBottomNavigationBackgroundColor()
|
val bottomBarColor = getBottomNavigationBackgroundColor()
|
||||||
updateNavigationBarColor(bottomBarColor)
|
|
||||||
mainTabsHolder.setBackgroundColor(bottomBarColor)
|
mainTabsHolder.setBackgroundColor(bottomBarColor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import org.fossify.filemanager.databinding.ActivityMimetypesBinding
|
|||||||
import org.fossify.filemanager.dialogs.ChangeSortingDialog
|
import org.fossify.filemanager.dialogs.ChangeSortingDialog
|
||||||
import org.fossify.filemanager.dialogs.ChangeViewTypeDialog
|
import org.fossify.filemanager.dialogs.ChangeViewTypeDialog
|
||||||
import org.fossify.filemanager.extensions.config
|
import org.fossify.filemanager.extensions.config
|
||||||
|
import org.fossify.filemanager.extensions.isPathInHiddenFolder
|
||||||
import org.fossify.filemanager.extensions.tryOpenPathIntent
|
import org.fossify.filemanager.extensions.tryOpenPathIntent
|
||||||
import org.fossify.filemanager.helpers.*
|
import org.fossify.filemanager.helpers.*
|
||||||
import org.fossify.filemanager.interfaces.ItemOperationsListener
|
import org.fossify.filemanager.interfaces.ItemOperationsListener
|
||||||
@@ -43,14 +44,13 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
|||||||
private var currentVolume = PRIMARY_VOLUME_NAME
|
private var currentVolume = PRIMARY_VOLUME_NAME
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
isMaterialActivity = true
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
setupOptionsMenu()
|
setupOptionsMenu()
|
||||||
refreshMenuItems()
|
refreshMenuItems()
|
||||||
binding.apply {
|
binding.apply {
|
||||||
updateMaterialActivityViews(mimetypesCoordinator, mimetypesList, useTransparentNavigation = true, useTopSearchMenu = false)
|
setupEdgeToEdge(padBottomImeAndSystem = listOf(mimetypesList))
|
||||||
setupMaterialScrollListener(mimetypesList, mimetypesToolbar)
|
setupMaterialScrollListener(binding.mimetypesList, binding.mimetypesAppbar)
|
||||||
}
|
}
|
||||||
|
|
||||||
currentMimeType = intent.getStringExtra(SHOW_MIMETYPE) ?: return
|
currentMimeType = intent.getStringExtra(SHOW_MIMETYPE) ?: return
|
||||||
@@ -84,7 +84,7 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
|||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
setupToolbar(binding.mimetypesToolbar, NavigationIcon.Arrow, searchMenuItem = searchMenuItem)
|
setupTopAppBar(binding.mimetypesAppbar, NavigationIcon.Arrow, searchMenuItem = searchMenuItem)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun refreshMenuItems() {
|
private fun refreshMenuItems() {
|
||||||
@@ -133,10 +133,11 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
|||||||
override fun selectedPaths(paths: ArrayList<String>) {}
|
override fun selectedPaths(paths: ArrayList<String>) {}
|
||||||
|
|
||||||
fun searchQueryChanged(text: String) {
|
fun searchQueryChanged(text: String) {
|
||||||
val searchText = text.trim()
|
val normalizedText = text.normalizeString()
|
||||||
lastSearchedText = searchText
|
val searchNormalizedText = normalizedText.trim()
|
||||||
|
lastSearchedText = searchNormalizedText
|
||||||
when {
|
when {
|
||||||
searchText.isEmpty() -> {
|
searchNormalizedText.isEmpty() -> {
|
||||||
binding.apply {
|
binding.apply {
|
||||||
mimetypesFastscroller.beVisible()
|
mimetypesFastscroller.beVisible()
|
||||||
getRecyclerAdapter()?.updateItems(storedItems)
|
getRecyclerAdapter()?.updateItems(storedItems)
|
||||||
@@ -145,7 +146,7 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
searchText.length == 1 -> {
|
searchNormalizedText.length == 1 -> {
|
||||||
binding.apply {
|
binding.apply {
|
||||||
mimetypesFastscroller.beGone()
|
mimetypesFastscroller.beGone()
|
||||||
mimetypesPlaceholder.beVisible()
|
mimetypesPlaceholder.beVisible()
|
||||||
@@ -155,11 +156,13 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
|||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
ensureBackgroundThread {
|
ensureBackgroundThread {
|
||||||
if (lastSearchedText != searchText) {
|
if (lastSearchedText != searchNormalizedText) {
|
||||||
return@ensureBackgroundThread
|
return@ensureBackgroundThread
|
||||||
}
|
}
|
||||||
|
|
||||||
val listItems = storedItems.filter { it.name.contains(searchText, true) } as ArrayList<ListItem>
|
val listItems = storedItems.filter {
|
||||||
|
it.name.normalizeString().contains(searchNormalizedText, true)
|
||||||
|
} as ArrayList<ListItem>
|
||||||
|
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
getRecyclerAdapter()?.updateItems(listItems, text)
|
getRecyclerAdapter()?.updateItems(listItems, text)
|
||||||
@@ -285,7 +288,10 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
|||||||
try {
|
try {
|
||||||
val fullMimetype = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault()) ?: return@queryCursor
|
val fullMimetype = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault()) ?: return@queryCursor
|
||||||
val name = cursor.getStringValue(MediaStore.Files.FileColumns.DISPLAY_NAME)
|
val name = cursor.getStringValue(MediaStore.Files.FileColumns.DISPLAY_NAME)
|
||||||
if (!showHidden && name.startsWith(".")) {
|
val path = cursor.getStringValue(MediaStore.Files.FileColumns.DATA)
|
||||||
|
|
||||||
|
val isHiddenFile = name.startsWith(".")
|
||||||
|
if (!showHidden && (isHiddenFile || path.isPathInHiddenFolder())) {
|
||||||
return@queryCursor
|
return@queryCursor
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -294,7 +300,6 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
|||||||
return@queryCursor
|
return@queryCursor
|
||||||
}
|
}
|
||||||
|
|
||||||
val path = cursor.getStringValue(MediaStore.Files.FileColumns.DATA)
|
|
||||||
val lastModified = cursor.getLongValue(MediaStore.Files.FileColumns.DATE_MODIFIED) * 1000
|
val lastModified = cursor.getLongValue(MediaStore.Files.FileColumns.DATE_MODIFIED) * 1000
|
||||||
|
|
||||||
val mimetype = fullMimetype.substringBefore("/")
|
val mimetype = fullMimetype.substringBefore("/")
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import android.net.Uri
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.print.PrintAttributes
|
import android.print.PrintAttributes
|
||||||
import android.print.PrintManager
|
import android.print.PrintManager
|
||||||
|
import android.util.Base64
|
||||||
import android.view.inputmethod.EditorInfo
|
import android.view.inputmethod.EditorInfo
|
||||||
import android.webkit.WebResourceRequest
|
import android.webkit.WebResourceRequest
|
||||||
import android.webkit.WebView
|
import android.webkit.WebView
|
||||||
@@ -50,13 +51,12 @@ class ReadTextActivity : SimpleActivity() {
|
|||||||
private lateinit var searchClearBtn: ImageView
|
private lateinit var searchClearBtn: ImageView
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
isMaterialActivity = true
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
setupOptionsMenu()
|
setupOptionsMenu()
|
||||||
binding.apply {
|
binding.apply {
|
||||||
updateMaterialActivityViews(readTextCoordinator, readTextView, useTransparentNavigation = true, useTopSearchMenu = false)
|
setupEdgeToEdge(padBottomImeAndSystem = listOf(readTextView))
|
||||||
setupMaterialScrollListener(readTextHolder, readTextToolbar)
|
setupMaterialScrollListener(binding.readTextHolder, binding.readTextAppbar)
|
||||||
}
|
}
|
||||||
|
|
||||||
searchQueryET = findViewById(R.id.search_query)
|
searchQueryET = findViewById(R.id.search_query)
|
||||||
@@ -95,7 +95,7 @@ class ReadTextActivity : SimpleActivity() {
|
|||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
setupToolbar(binding.readTextToolbar, NavigationIcon.Arrow)
|
setupTopAppBar(binding.readTextAppbar, NavigationIcon.Arrow)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSaveInstanceState(outState: Bundle) {
|
override fun onSaveInstanceState(outState: Bundle) {
|
||||||
@@ -119,22 +119,26 @@ class ReadTextActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBackPressed() {
|
override fun onBackPressedCompat(): Boolean {
|
||||||
val hasUnsavedChanges = originalText != binding.readTextView.text.toString()
|
val hasUnsavedChanges = originalText != binding.readTextView.text.toString()
|
||||||
when {
|
return when {
|
||||||
isSearchActive -> closeSearch()
|
isSearchActive -> {
|
||||||
|
closeSearch()
|
||||||
|
true
|
||||||
|
}
|
||||||
hasUnsavedChanges && System.currentTimeMillis() - lastSavePromptTS > SAVE_DISCARD_PROMPT_INTERVAL -> {
|
hasUnsavedChanges && System.currentTimeMillis() - lastSavePromptTS > SAVE_DISCARD_PROMPT_INTERVAL -> {
|
||||||
lastSavePromptTS = System.currentTimeMillis()
|
lastSavePromptTS = System.currentTimeMillis()
|
||||||
ConfirmationAdvancedDialog(this, "", R.string.save_before_closing, R.string.save, R.string.discard) {
|
ConfirmationAdvancedDialog(this, "", R.string.save_before_closing, R.string.save, R.string.discard) {
|
||||||
if (it) {
|
if (it) {
|
||||||
saveText(true)
|
saveText(true)
|
||||||
} else {
|
} else {
|
||||||
super.onBackPressed()
|
performDefaultBack()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> super.onBackPressed()
|
else -> false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,6 +147,7 @@ class ReadTextActivity : SimpleActivity() {
|
|||||||
when (menuItem.itemId) {
|
when (menuItem.itemId) {
|
||||||
R.id.menu_search -> openSearch()
|
R.id.menu_search -> openSearch()
|
||||||
R.id.menu_save -> saveText()
|
R.id.menu_save -> saveText()
|
||||||
|
R.id.menu_save_as -> saveAsText()
|
||||||
R.id.menu_open_with -> openPath(intent.dataString!!, true)
|
R.id.menu_open_with -> openPath(intent.dataString!!, true)
|
||||||
R.id.menu_print -> printText()
|
R.id.menu_print -> printText()
|
||||||
else -> return@setOnMenuItemClickListener false
|
else -> return@setOnMenuItemClickListener false
|
||||||
@@ -164,10 +169,14 @@ class ReadTextActivity : SimpleActivity() {
|
|||||||
}, 250)
|
}, 250)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun saveText(shouldExitAfterSaving: Boolean = false) {
|
private fun updateFilePath() {
|
||||||
if (filePath.isEmpty()) {
|
if (filePath.isEmpty()) {
|
||||||
filePath = getRealPathFromURI(intent.data!!) ?: ""
|
filePath = getRealPathFromURI(intent.data!!) ?: ""
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun saveAsText(shouldExitAfterSaving: Boolean = false) {
|
||||||
|
updateFilePath()
|
||||||
|
|
||||||
if (filePath.isEmpty()) {
|
if (filePath.isEmpty()) {
|
||||||
SaveAsDialog(this, filePath, true) { _, filename ->
|
SaveAsDialog(this, filePath, true) { _, filename ->
|
||||||
@@ -181,6 +190,7 @@ class ReadTextActivity : SimpleActivity() {
|
|||||||
} else {
|
} else {
|
||||||
SELECT_SAVE_FILE_INTENT
|
SELECT_SAVE_FILE_INTENT
|
||||||
}
|
}
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
startActivityForResult(this, requestCode)
|
startActivityForResult(this, requestCode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -199,6 +209,21 @@ class ReadTextActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun saveText(shouldExitAfterSaving: Boolean = false) {
|
||||||
|
updateFilePath()
|
||||||
|
|
||||||
|
if (filePath.isEmpty()) {
|
||||||
|
saveAsText(shouldExitAfterSaving)
|
||||||
|
} else if (hasStoragePermission()) {
|
||||||
|
val file = File(filePath)
|
||||||
|
getFileOutputStream(file.toFileDirItem(this), true) {
|
||||||
|
saveTextContent(it, shouldExitAfterSaving, true)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
toast(R.string.no_storage_permissions)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun saveTextContent(outputStream: OutputStream?, shouldExitAfterSaving: Boolean, shouldOverwriteOriginalText: Boolean) {
|
private fun saveTextContent(outputStream: OutputStream?, shouldExitAfterSaving: Boolean, shouldOverwriteOriginalText: Boolean) {
|
||||||
if (outputStream != null) {
|
if (outputStream != null) {
|
||||||
val currentText = binding.readTextView.text.toString()
|
val currentText = binding.readTextView.text.toString()
|
||||||
@@ -211,7 +236,7 @@ class ReadTextActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (shouldExitAfterSaving) {
|
if (shouldExitAfterSaving) {
|
||||||
super.onBackPressed()
|
performDefaultBack()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
toast(R.string.unknown_error_occurred)
|
toast(R.string.unknown_error_occurred)
|
||||||
@@ -229,7 +254,17 @@ class ReadTextActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
webView.loadData(binding.readTextView.text.toString(), "text/plain", "UTF-8")
|
val text = binding.readTextView.text.toString()
|
||||||
|
ensureBackgroundThread {
|
||||||
|
try {
|
||||||
|
val base64 = Base64.encodeToString(text.toByteArray(), Base64.DEFAULT)
|
||||||
|
runOnUiThread {
|
||||||
|
webView.loadData(base64, "text/plain", "base64")
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
showErrorToast(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
showErrorToast(e)
|
showErrorToast(e)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,21 @@ class SaveAsActivity : SimpleActivity() {
|
|||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
|
tryInitFileManager()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun tryInitFileManager() {
|
||||||
|
handleStoragePermission { granted ->
|
||||||
|
if (granted) {
|
||||||
|
saveAsDialog()
|
||||||
|
} else {
|
||||||
|
toast(R.string.no_storage_permissions)
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun saveAsDialog() {
|
||||||
if (intent.action == Intent.ACTION_SEND && intent.extras?.containsKey(Intent.EXTRA_STREAM) == true) {
|
if (intent.action == Intent.ACTION_SEND && intent.extras?.containsKey(Intent.EXTRA_STREAM) == true) {
|
||||||
FilePickerDialog(this, pickFile = false, showHidden = config.shouldShowHidden(), showFAB = true, showFavoritesButton = true) {
|
FilePickerDialog(this, pickFile = false, showHidden = config.shouldShowHidden(), showFAB = true, showFavoritesButton = true) {
|
||||||
val destination = it
|
val destination = it
|
||||||
@@ -36,8 +50,9 @@ class SaveAsActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val source = intent.getParcelableExtra<Uri>(Intent.EXTRA_STREAM)!!
|
val source = intent.getParcelableExtra<Uri>(Intent.EXTRA_STREAM)!!
|
||||||
val filename = getFilenameFromContentUri(source)
|
val originalFilename = getFilenameFromContentUri(source)
|
||||||
?: source.toString().getFilenameFromPath()
|
?: source.toString().getFilenameFromPath()
|
||||||
|
val filename = sanitizeFilename(originalFilename)
|
||||||
val mimeType = contentResolver.getType(source)
|
val mimeType = contentResolver.getType(source)
|
||||||
?: intent.type?.takeIf { it != "*/*" }
|
?: intent.type?.takeIf { it != "*/*" }
|
||||||
?: filename.getMimeType()
|
?: filename.getMimeType()
|
||||||
@@ -64,6 +79,11 @@ class SaveAsActivity : SimpleActivity() {
|
|||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
setupToolbar(binding.activitySaveAsToolbar, NavigationIcon.Arrow)
|
setupTopAppBar(binding.activitySaveAsAppbar, NavigationIcon.Arrow)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun sanitizeFilename(filename: String): String {
|
||||||
|
return filename.replace("[/\\\\<>:\"|?*\u0000-\u001F]".toRegex(), "_")
|
||||||
|
.takeIf { it.isNotBlank() } ?: "unnamed_file"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -21,18 +21,17 @@ class SettingsActivity : SimpleActivity() {
|
|||||||
private val binding by viewBinding(ActivitySettingsBinding::inflate)
|
private val binding by viewBinding(ActivitySettingsBinding::inflate)
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
isMaterialActivity = true
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
binding.apply {
|
binding.apply {
|
||||||
updateMaterialActivityViews(settingsCoordinator, settingsHolder, useTransparentNavigation = true, useTopSearchMenu = false)
|
setupEdgeToEdge(padBottomSystem = listOf(settingsNestedScrollview))
|
||||||
setupMaterialScrollListener(settingsNestedScrollview, settingsToolbar)
|
setupMaterialScrollListener(binding.settingsNestedScrollview, binding.settingsAppbar)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
setupToolbar(binding.settingsToolbar, NavigationIcon.Arrow)
|
setupTopAppBar(binding.settingsAppbar, NavigationIcon.Arrow)
|
||||||
|
|
||||||
setupCustomizeColors()
|
setupCustomizeColors()
|
||||||
setupUseEnglish()
|
setupUseEnglish()
|
||||||
|
|||||||
@@ -1,9 +1,15 @@
|
|||||||
package org.fossify.filemanager.activities
|
package org.fossify.filemanager.activities
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.Intent
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
|
import android.provider.Settings
|
||||||
import org.fossify.commons.activities.BaseSimpleActivity
|
import org.fossify.commons.activities.BaseSimpleActivity
|
||||||
|
import org.fossify.commons.dialogs.ConfirmationAdvancedDialog
|
||||||
import org.fossify.commons.extensions.hasPermission
|
import org.fossify.commons.extensions.hasPermission
|
||||||
|
import android.net.Uri
|
||||||
|
import org.fossify.commons.extensions.showErrorToast
|
||||||
|
import org.fossify.commons.extensions.toast
|
||||||
import org.fossify.commons.helpers.PERMISSION_WRITE_STORAGE
|
import org.fossify.commons.helpers.PERMISSION_WRITE_STORAGE
|
||||||
import org.fossify.commons.helpers.isRPlus
|
import org.fossify.commons.helpers.isRPlus
|
||||||
import org.fossify.filemanager.R
|
import org.fossify.filemanager.R
|
||||||
@@ -31,10 +37,23 @@ open class SimpleActivity : BaseSimpleActivity() {
|
|||||||
R.mipmap.ic_launcher_grey_black
|
R.mipmap.ic_launcher_grey_black
|
||||||
)
|
)
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private const val MANAGE_STORAGE_RC = 201
|
||||||
|
}
|
||||||
|
|
||||||
override fun getAppLauncherName() = getString(R.string.app_launcher_name)
|
override fun getAppLauncherName() = getString(R.string.app_launcher_name)
|
||||||
|
|
||||||
override fun getRepositoryName() = "File-Manager"
|
override fun getRepositoryName() = "File-Manager"
|
||||||
|
|
||||||
|
@SuppressLint("NewApi")
|
||||||
|
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
|
||||||
|
super.onActivityResult(requestCode, resultCode, resultData)
|
||||||
|
isAskingPermissions = false
|
||||||
|
if (requestCode == MANAGE_STORAGE_RC && isRPlus()) {
|
||||||
|
actionOnPermission?.invoke(Environment.isExternalStorageManager())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressLint("NewApi")
|
@SuppressLint("NewApi")
|
||||||
fun hasStoragePermission(): Boolean {
|
fun hasStoragePermission(): Boolean {
|
||||||
return if (isRPlus()) {
|
return if (isRPlus()) {
|
||||||
@@ -43,4 +62,39 @@ open class SimpleActivity : BaseSimpleActivity() {
|
|||||||
hasPermission(PERMISSION_WRITE_STORAGE)
|
hasPermission(PERMISSION_WRITE_STORAGE)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("InlinedApi")
|
||||||
|
fun handleStoragePermission(callback: (granted: Boolean) -> Unit) {
|
||||||
|
actionOnPermission = null
|
||||||
|
if (hasStoragePermission()) {
|
||||||
|
callback(true)
|
||||||
|
} else {
|
||||||
|
if (isRPlus()) {
|
||||||
|
ConfirmationAdvancedDialog(this, "", R.string.access_storage_prompt, R.string.ok, 0, false) { success ->
|
||||||
|
if (success) {
|
||||||
|
isAskingPermissions = true
|
||||||
|
actionOnPermission = callback
|
||||||
|
try {
|
||||||
|
val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
|
||||||
|
intent.addCategory("android.intent.category.DEFAULT")
|
||||||
|
intent.data = Uri.parse("package:$packageName")
|
||||||
|
startActivityForResult(intent, MANAGE_STORAGE_RC)
|
||||||
|
} catch (e: android.content.ActivityNotFoundException) {
|
||||||
|
showErrorToast(e)
|
||||||
|
val intent = Intent()
|
||||||
|
intent.action = Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
|
||||||
|
startActivityForResult(intent, MANAGE_STORAGE_RC)
|
||||||
|
} catch (e: SecurityException) {
|
||||||
|
showErrorToast(e)
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
handlePermission(PERMISSION_WRITE_STORAGE, callback)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -117,8 +117,8 @@ class DecompressItemsAdapter(activity: SimpleActivity, var listItems: MutableLis
|
|||||||
private fun getImagePathToLoad(path: String): Any {
|
private fun getImagePathToLoad(path: String): Any {
|
||||||
return if (path.endsWith(".apk", true)) {
|
return if (path.endsWith(".apk", true)) {
|
||||||
val packageInfo = activity.packageManager.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES)
|
val packageInfo = activity.packageManager.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES)
|
||||||
if (packageInfo != null) {
|
val appInfo = packageInfo?.applicationInfo
|
||||||
val appInfo = packageInfo.applicationInfo
|
if (appInfo != null) {
|
||||||
appInfo.sourceDir = path
|
appInfo.sourceDir = path
|
||||||
appInfo.publicSourceDir = path
|
appInfo.publicSourceDir = path
|
||||||
appInfo.loadIcon(activity.packageManager)
|
appInfo.loadIcon(activity.packageManager)
|
||||||
|
|||||||
@@ -1116,8 +1116,8 @@ class ItemsAdapter(
|
|||||||
var itemToLoad = if (path.endsWith(".apk", true)) {
|
var itemToLoad = if (path.endsWith(".apk", true)) {
|
||||||
val packageInfo =
|
val packageInfo =
|
||||||
activity.packageManager.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES)
|
activity.packageManager.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES)
|
||||||
if (packageInfo != null) {
|
val appInfo = packageInfo?.applicationInfo
|
||||||
val appInfo = packageInfo.applicationInfo
|
if (appInfo != null) {
|
||||||
appInfo.sourceDir = path
|
appInfo.sourceDir = path
|
||||||
appInfo.publicSourceDir = path
|
appInfo.publicSourceDir = path
|
||||||
appInfo.loadIcon(activity.packageManager)
|
appInfo.loadIcon(activity.packageManager)
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ class ViewPagerAdapter(val activity: SimpleActivity, val tabsToShow: ArrayList<I
|
|||||||
val isPickRingtoneIntent = activity.intent.action == RingtoneManager.ACTION_RINGTONE_PICKER
|
val isPickRingtoneIntent = activity.intent.action == RingtoneManager.ACTION_RINGTONE_PICKER
|
||||||
val isGetContentIntent = activity.intent.action == Intent.ACTION_GET_CONTENT
|
val isGetContentIntent = activity.intent.action == Intent.ACTION_GET_CONTENT
|
||||||
|| activity.intent.action == Intent.ACTION_PICK
|
|| activity.intent.action == Intent.ACTION_PICK
|
||||||
|| activity.intent.action == Intent.ACTION_OPEN_DOCUMENT
|
|
||||||
val isCreateDocumentIntent = activity.intent.action == Intent.ACTION_CREATE_DOCUMENT
|
val isCreateDocumentIntent = activity.intent.action == Intent.ACTION_CREATE_DOCUMENT
|
||||||
val allowPickingMultipleIntent = activity.intent.getBooleanExtra(Intent.EXTRA_ALLOW_MULTIPLE, false)
|
val allowPickingMultipleIntent = activity.intent.getBooleanExtra(Intent.EXTRA_ALLOW_MULTIPLE, false)
|
||||||
val getContentMimeType = if (isGetContentIntent) {
|
val getContentMimeType = if (isGetContentIntent) {
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ package org.fossify.filemanager.extensions
|
|||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.view.View
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
|
||||||
import androidx.core.content.FileProvider
|
import androidx.core.content.FileProvider
|
||||||
import org.fossify.commons.activities.BaseSimpleActivity
|
import org.fossify.commons.activities.BaseSimpleActivity
|
||||||
import org.fossify.commons.extensions.getFilenameFromPath
|
import org.fossify.commons.extensions.getFilenameFromPath
|
||||||
@@ -85,27 +83,3 @@ fun BaseSimpleActivity.toggleItemVisibility(oldPath: String, hide: Boolean, call
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun AppCompatActivity.showSystemUI(toggleActionBarVisibility: Boolean) {
|
|
||||||
if (toggleActionBarVisibility) {
|
|
||||||
supportActionBar?.show()
|
|
||||||
}
|
|
||||||
|
|
||||||
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
|
|
||||||
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
|
|
||||||
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
|
||||||
}
|
|
||||||
|
|
||||||
fun AppCompatActivity.hideSystemUI(toggleActionBarVisibility: Boolean) {
|
|
||||||
if (toggleActionBarVisibility) {
|
|
||||||
supportActionBar?.hide()
|
|
||||||
}
|
|
||||||
|
|
||||||
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
|
|
||||||
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
|
|
||||||
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
|
|
||||||
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
|
|
||||||
View.SYSTEM_UI_FLAG_LOW_PROFILE or
|
|
||||||
View.SYSTEM_UI_FLAG_FULLSCREEN or
|
|
||||||
View.SYSTEM_UI_FLAG_IMMERSIVE
|
|
||||||
}
|
|
||||||
@@ -1,3 +1,15 @@
|
|||||||
package org.fossify.filemanager.extensions
|
package org.fossify.filemanager.extensions
|
||||||
|
|
||||||
fun String.isZipFile() = endsWith(".zip", true)
|
fun String.isZipFile() = endsWith(".zip", true)
|
||||||
|
|
||||||
|
fun String.isPathInHiddenFolder(): Boolean {
|
||||||
|
val parts = split("/")
|
||||||
|
for (i in 1 until parts.size - 1) {
|
||||||
|
val part = parts[i]
|
||||||
|
val isHidden = part.startsWith(".") && part != "." && part != ".." && part.isNotEmpty()
|
||||||
|
if (isHidden) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
@@ -257,7 +257,7 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF
|
|||||||
}
|
}
|
||||||
|
|
||||||
var lastModified = lastModifieds.remove(curPath)
|
var lastModified = lastModifieds.remove(curPath)
|
||||||
val isDirectory = if (lastModified != null) false else file.isDirectory
|
val isDirectory = file.isDirectory
|
||||||
val children = if (isDirectory && getProperChildCount) file.getDirectChildrenCount(context, showHidden) else 0
|
val children = if (isDirectory && getProperChildCount) file.getDirectChildrenCount(context, showHidden) else 0
|
||||||
val size = if (isDirectory) {
|
val size = if (isDirectory) {
|
||||||
if (isSortingBySize) {
|
if (isSortingBySize) {
|
||||||
@@ -377,6 +377,7 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF
|
|||||||
return files
|
return files
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val normalizedText = text.normalizeString()
|
||||||
val sorting = context!!.config.getFolderSorting(path)
|
val sorting = context!!.config.getFolderSorting(path)
|
||||||
FileDirItem.sorting = context!!.config.getFolderSorting(currentPath)
|
FileDirItem.sorting = context!!.config.getFolderSorting(currentPath)
|
||||||
val isSortingBySize = sorting and SORT_BY_SIZE != 0
|
val isSortingBySize = sorting and SORT_BY_SIZE != 0
|
||||||
@@ -386,7 +387,7 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (it.isDirectory) {
|
if (it.isDirectory) {
|
||||||
if (it.name.contains(text, true)) {
|
if (it.name.normalizeString().contains(normalizedText, true)) {
|
||||||
val fileDirItem = getListItemFromFile(it, isSortingBySize, HashMap(), false)
|
val fileDirItem = getListItemFromFile(it, isSortingBySize, HashMap(), false)
|
||||||
if (fileDirItem != null) {
|
if (fileDirItem != null) {
|
||||||
files.add(fileDirItem)
|
files.add(fileDirItem)
|
||||||
@@ -395,7 +396,7 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF
|
|||||||
|
|
||||||
files.addAll(searchFiles(text, it.absolutePath))
|
files.addAll(searchFiles(text, it.absolutePath))
|
||||||
} else {
|
} else {
|
||||||
if (it.name.contains(text, true)) {
|
if (it.name.normalizeString().contains(normalizedText, true)) {
|
||||||
val fileDirItem = getListItemFromFile(it, isSortingBySize, HashMap(), false)
|
val fileDirItem = getListItemFromFile(it, isSortingBySize, HashMap(), false)
|
||||||
if (fileDirItem != null) {
|
if (fileDirItem != null) {
|
||||||
files.add(fileDirItem)
|
files.add(fileDirItem)
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import org.fossify.commons.extensions.getDoesFilePathExist
|
|||||||
import org.fossify.commons.extensions.getFilenameFromPath
|
import org.fossify.commons.extensions.getFilenameFromPath
|
||||||
import org.fossify.commons.extensions.getLongValue
|
import org.fossify.commons.extensions.getLongValue
|
||||||
import org.fossify.commons.extensions.getStringValue
|
import org.fossify.commons.extensions.getStringValue
|
||||||
|
import org.fossify.commons.extensions.normalizeString
|
||||||
import org.fossify.commons.extensions.showErrorToast
|
import org.fossify.commons.extensions.showErrorToast
|
||||||
import org.fossify.commons.helpers.VIEW_TYPE_GRID
|
import org.fossify.commons.helpers.VIEW_TYPE_GRID
|
||||||
import org.fossify.commons.helpers.VIEW_TYPE_LIST
|
import org.fossify.commons.helpers.VIEW_TYPE_LIST
|
||||||
@@ -24,6 +25,7 @@ import org.fossify.filemanager.activities.SimpleActivity
|
|||||||
import org.fossify.filemanager.adapters.ItemsAdapter
|
import org.fossify.filemanager.adapters.ItemsAdapter
|
||||||
import org.fossify.filemanager.databinding.RecentsFragmentBinding
|
import org.fossify.filemanager.databinding.RecentsFragmentBinding
|
||||||
import org.fossify.filemanager.extensions.config
|
import org.fossify.filemanager.extensions.config
|
||||||
|
import org.fossify.filemanager.extensions.isPathInHiddenFolder
|
||||||
import org.fossify.filemanager.helpers.MAX_COLUMN_COUNT
|
import org.fossify.filemanager.helpers.MAX_COLUMN_COUNT
|
||||||
import org.fossify.filemanager.interfaces.ItemOperationsListener
|
import org.fossify.filemanager.interfaces.ItemOperationsListener
|
||||||
import org.fossify.filemanager.models.ListItem
|
import org.fossify.filemanager.models.ListItem
|
||||||
@@ -178,9 +180,11 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
|||||||
val name = cursor.getStringValue(FileColumns.DISPLAY_NAME) ?: path.getFilenameFromPath()
|
val name = cursor.getStringValue(FileColumns.DISPLAY_NAME) ?: path.getFilenameFromPath()
|
||||||
val size = cursor.getLongValue(FileColumns.SIZE)
|
val size = cursor.getLongValue(FileColumns.SIZE)
|
||||||
val modified = cursor.getLongValue(FileColumns.DATE_MODIFIED) * 1000
|
val modified = cursor.getLongValue(FileColumns.DATE_MODIFIED) * 1000
|
||||||
val fileDirItem = ListItem(path, name, false, 0, size, modified, false, false)
|
val isHiddenFile = name.startsWith(".")
|
||||||
if ((showHidden || !name.startsWith(".")) && activity?.getDoesFilePathExist(path) == true) {
|
val shouldShow = showHidden || (!isHiddenFile && !path.isPathInHiddenFolder())
|
||||||
|
if (shouldShow && activity?.getDoesFilePathExist(path) == true) {
|
||||||
if (wantedMimeTypes.any { isProperMimeType(it, path, false) }) {
|
if (wantedMimeTypes.any { isProperMimeType(it, path, false) }) {
|
||||||
|
val fileDirItem = ListItem(path, name, false, 0, size, modified, false, false)
|
||||||
listItems.add(fileDirItem)
|
listItems.add(fileDirItem)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -242,7 +246,11 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
|||||||
|
|
||||||
override fun searchQueryChanged(text: String) {
|
override fun searchQueryChanged(text: String) {
|
||||||
lastSearchedText = text
|
lastSearchedText = text
|
||||||
val filtered = filesIgnoringSearch.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList<ListItem>
|
val normalizedText = text.normalizeString()
|
||||||
|
val filtered = filesIgnoringSearch.filter {
|
||||||
|
it.mName.normalizeString().contains(normalizedText, true)
|
||||||
|
}.toMutableList() as ArrayList<ListItem>
|
||||||
|
|
||||||
binding.apply {
|
binding.apply {
|
||||||
(recentsList.adapter as? ItemsAdapter)?.updateItems(filtered, text)
|
(recentsList.adapter as? ItemsAdapter)?.updateItems(filtered, text)
|
||||||
recentsPlaceholder.beVisibleIf(filtered.isEmpty())
|
recentsPlaceholder.beVisibleIf(filtered.isEmpty())
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import org.fossify.commons.extensions.getLongValue
|
|||||||
import org.fossify.commons.extensions.getProperBackgroundColor
|
import org.fossify.commons.extensions.getProperBackgroundColor
|
||||||
import org.fossify.commons.extensions.getProperPrimaryColor
|
import org.fossify.commons.extensions.getProperPrimaryColor
|
||||||
import org.fossify.commons.extensions.getStringValue
|
import org.fossify.commons.extensions.getStringValue
|
||||||
|
import org.fossify.commons.extensions.normalizeString
|
||||||
import org.fossify.commons.extensions.queryCursor
|
import org.fossify.commons.extensions.queryCursor
|
||||||
import org.fossify.commons.extensions.showErrorToast
|
import org.fossify.commons.extensions.showErrorToast
|
||||||
import org.fossify.commons.extensions.updateTextColors
|
import org.fossify.commons.extensions.updateTextColors
|
||||||
@@ -340,6 +341,7 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun searchQueryChanged(text: String) {
|
override fun searchQueryChanged(text: String) {
|
||||||
|
val normalizedText = text.normalizeString()
|
||||||
lastSearchedText = text
|
lastSearchedText = text
|
||||||
binding.apply {
|
binding.apply {
|
||||||
if (text.isNotEmpty()) {
|
if (text.isNotEmpty()) {
|
||||||
@@ -364,7 +366,10 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
|||||||
} else {
|
} else {
|
||||||
showProgressBar()
|
showProgressBar()
|
||||||
ensureBackgroundThread {
|
ensureBackgroundThread {
|
||||||
val filtered = allDeviceListItems.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList<ListItem>
|
val filtered = allDeviceListItems.filter {
|
||||||
|
it.mName.normalizeString().contains(normalizedText, true)
|
||||||
|
}.toMutableList() as ArrayList<ListItem>
|
||||||
|
|
||||||
if (lastSearchedText != text) {
|
if (lastSearchedText != text) {
|
||||||
return@ensureBackgroundThread
|
return@ensureBackgroundThread
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,22 +5,29 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
<org.fossify.commons.views.MyAppBarLayout
|
||||||
android:id="@+id/decompress_toolbar"
|
android:id="@+id/decompress_appbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="wrap_content">
|
||||||
android:background="@color/color_primary"
|
|
||||||
app:menu="@menu/menu_decompress"
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
app:title="@string/decompress"
|
android:id="@+id/decompress_toolbar"
|
||||||
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
android:background="@color/color_primary"
|
||||||
|
app:menu="@menu/menu_decompress"
|
||||||
|
app:title="@string/decompress"
|
||||||
|
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
||||||
|
|
||||||
|
</org.fossify.commons.views.MyAppBarLayout>
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/decompress_wrapper"
|
android:id="@+id/decompress_wrapper"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="?attr/actionBarSize"
|
|
||||||
android:fillViewport="true"
|
android:fillViewport="true"
|
||||||
android:scrollbars="none">
|
android:scrollbars="none"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||||
|
|
||||||
<org.fossify.commons.views.MyRecyclerView
|
<org.fossify.commons.views.MyRecyclerView
|
||||||
android:id="@+id/decompress_list"
|
android:id="@+id/decompress_list"
|
||||||
|
|||||||
@@ -6,22 +6,29 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
<org.fossify.commons.views.MyAppBarLayout
|
||||||
android:id="@+id/manage_favorites_toolbar"
|
android:id="@+id/manage_favorites_appbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="wrap_content">
|
||||||
android:background="@color/color_primary"
|
|
||||||
app:menu="@menu/menu_favorites"
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
app:title="@string/manage_favorites"
|
android:id="@+id/manage_favorites_toolbar"
|
||||||
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
android:background="@color/color_primary"
|
||||||
|
app:menu="@menu/menu_favorites"
|
||||||
|
app:title="@string/manage_favorites"
|
||||||
|
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
||||||
|
|
||||||
|
</org.fossify.commons.views.MyAppBarLayout>
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/manage_favorites_holder"
|
android:id="@+id/manage_favorites_holder"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="?attr/actionBarSize"
|
|
||||||
android:fillViewport="true"
|
android:fillViewport="true"
|
||||||
android:scrollbars="none">
|
android:scrollbars="none"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||||
|
|
||||||
<org.fossify.commons.views.MyRecyclerView
|
<org.fossify.commons.views.MyRecyclerView
|
||||||
android:id="@+id/manage_favorites_list"
|
android:id="@+id/manage_favorites_list"
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
android:id="@+id/main_holder"
|
android:id="@+id/main_holder"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginTop="?attr/actionBarSize">
|
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||||
|
|
||||||
<org.fossify.commons.views.MyViewPager
|
<org.fossify.commons.views.MyViewPager
|
||||||
android:id="@+id/main_view_pager"
|
android:id="@+id/main_view_pager"
|
||||||
|
|||||||
@@ -5,21 +5,28 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
<org.fossify.commons.views.MyAppBarLayout
|
||||||
android:id="@+id/mimetypes_toolbar"
|
android:id="@+id/mimetypes_appbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="wrap_content">
|
||||||
android:background="@color/color_primary"
|
|
||||||
app:menu="@menu/menu_mimetypes"
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
android:id="@+id/mimetypes_toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
android:background="@color/color_primary"
|
||||||
|
app:menu="@menu/menu_mimetypes"
|
||||||
|
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
||||||
|
|
||||||
|
</org.fossify.commons.views.MyAppBarLayout>
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/mimetypes_holder"
|
android:id="@+id/mimetypes_holder"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="?attr/actionBarSize"
|
|
||||||
android:fillViewport="true"
|
android:fillViewport="true"
|
||||||
android:scrollbars="none">
|
android:scrollbars="none"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||||
|
|
||||||
<org.fossify.commons.views.MyTextView
|
<org.fossify.commons.views.MyTextView
|
||||||
android:id="@+id/mimetypes_placeholder"
|
android:id="@+id/mimetypes_placeholder"
|
||||||
|
|||||||
@@ -5,23 +5,30 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
<org.fossify.commons.views.MyAppBarLayout
|
||||||
android:id="@+id/read_text_toolbar"
|
android:id="@+id/read_text_appbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="wrap_content">
|
||||||
android:background="@color/color_primary"
|
|
||||||
app:menu="@menu/menu_editor"
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
app:title="@string/file_editor"
|
android:id="@+id/read_text_toolbar"
|
||||||
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
android:background="@color/color_primary"
|
||||||
|
app:menu="@menu/menu_editor"
|
||||||
|
app:title="@string/file_editor"
|
||||||
|
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
||||||
|
|
||||||
|
</org.fossify.commons.views.MyAppBarLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/read_text_wrapper"
|
android:id="@+id/read_text_wrapper"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="?attr/actionBarSize"
|
|
||||||
android:fillViewport="true"
|
android:fillViewport="true"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:scrollbars="none">
|
android:scrollbars="none"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||||
|
|
||||||
<include
|
<include
|
||||||
android:id="@+id/search_wrapper"
|
android:id="@+id/search_wrapper"
|
||||||
|
|||||||
@@ -5,18 +5,25 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
<org.fossify.commons.views.MyAppBarLayout
|
||||||
android:id="@+id/activity_save_as_toolbar"
|
android:id="@+id/activity_save_as_appbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="wrap_content">
|
||||||
android:background="@color/color_primary"
|
|
||||||
app:title="@string/save_as"
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
android:id="@+id/activity_save_as_toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
android:background="@color/color_primary"
|
||||||
|
app:title="@string/save_as"
|
||||||
|
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
||||||
|
|
||||||
|
</org.fossify.commons.views.MyAppBarLayout>
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/activity_save_as_holder"
|
android:id="@+id/activity_save_as_holder"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginTop="?attr/actionBarSize" />
|
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
||||||
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
@@ -6,21 +6,28 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
<org.fossify.commons.views.MyAppBarLayout
|
||||||
android:id="@+id/settings_toolbar"
|
android:id="@+id/settings_appbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="wrap_content">
|
||||||
android:background="@color/color_primary"
|
|
||||||
app:title="@string/settings"
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
android:id="@+id/settings_toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
android:background="@color/color_primary"
|
||||||
|
app:title="@string/settings"
|
||||||
|
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
|
||||||
|
|
||||||
|
</org.fossify.commons.views.MyAppBarLayout>
|
||||||
|
|
||||||
<androidx.core.widget.NestedScrollView
|
<androidx.core.widget.NestedScrollView
|
||||||
android:id="@+id/settings_nested_scrollview"
|
android:id="@+id/settings_nested_scrollview"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginTop="?attr/actionBarSize"
|
|
||||||
android:fillViewport="true"
|
android:fillViewport="true"
|
||||||
android:scrollbars="none">
|
android:scrollbars="none"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/settings_holder"
|
android:id="@+id/settings_holder"
|
||||||
|
|||||||
@@ -11,8 +11,13 @@
|
|||||||
<item
|
<item
|
||||||
android:id="@+id/menu_save"
|
android:id="@+id/menu_save"
|
||||||
android:icon="@drawable/ic_save_vector"
|
android:icon="@drawable/ic_save_vector"
|
||||||
android:title="@string/save_as"
|
android:title="@string/save"
|
||||||
app:showAsAction="always" />
|
app:showAsAction="always" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/menu_save_as"
|
||||||
|
android:showAsAction="never"
|
||||||
|
android:title="@string/save_as"
|
||||||
|
app:showAsAction="never" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/menu_print"
|
android:id="@+id/menu_print"
|
||||||
android:icon="@drawable/ic_print_vector"
|
android:icon="@drawable/ic_print_vector"
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string name="go_to_home_folder">راو و دوبلگه هووه</string>
|
||||||
|
<string name="set_as_home_folder">سامووݩ و عونوان دوبلگه هووه</string>
|
||||||
|
<string name="copy_path">لف گیری تور منه کیلیپ بورد</string>
|
||||||
|
<string name="app_launcher_name">دؽوۉداری فایل</string>
|
||||||
|
<string name="path_copied">تور لف گیری وابی</string>
|
||||||
|
<string name="select_audio_file">فایل آرنگی ن پسند کۊنین</string>
|
||||||
|
<string name="search_folder">پیتینیڌن دوبلگه</string>
|
||||||
|
<string name="recents">دیندا</string>
|
||||||
|
<string name="show_recents">نشووݩ داڌن مووردا دیندایی</string>
|
||||||
|
<string name="invert_colors">چواسه کردن رنگا</string>
|
||||||
|
<string name="open_as">گۊشیڌن و عونوان</string>
|
||||||
|
<string name="text_file">فایل هؽلی</string>
|
||||||
|
<string name="image_file">فایل شؽواتی</string>
|
||||||
|
<string name="audio_file">فایل آرنگی</string>
|
||||||
|
<string name="video_file">فایل ویدیویی</string>
|
||||||
|
<string name="other_file">فایل دیری</string>
|
||||||
|
<string name="press_back_again">سی و در زیڌن، ز نۊ دویمه وورگشتن ن بزنین</string>
|
||||||
|
<string name="home_folder_updated">دوبلگه هووه ورۊ رسۊوی وابی</string>
|
||||||
|
<string name="audio">دونگ</string>
|
||||||
|
</resources>
|
||||||
@@ -28,11 +28,11 @@
|
|||||||
<string name="decompression_successful">Dekomprimeret</string>
|
<string name="decompression_successful">Dekomprimeret</string>
|
||||||
<string name="compressing_failed">Komprimering mislykkedes</string>
|
<string name="compressing_failed">Komprimering mislykkedes</string>
|
||||||
<string name="decompressing_failed">Dekomprimering mislykkedes</string>
|
<string name="decompressing_failed">Dekomprimering mislykkedes</string>
|
||||||
<string name="manage_favorites">Håndter favoritter</string>
|
<string name="manage_favorites">Administrer favoritter</string>
|
||||||
<string name="go_to_favorite">Gå til favorit</string>
|
<string name="go_to_favorite">Gå til favorit</string>
|
||||||
<string name="favorites_activity_placeholder">Du kan føje ofte brugte mapper til favoritter, så du hurtigt kan finde dem igen.</string>
|
<string name="favorites_activity_placeholder">Du kan føje ofte brugte mapper til favoritter for nem adgang overalt.</string>
|
||||||
<string name="file_editor">Fileditor</string>
|
<string name="file_editor">Fileditor</string>
|
||||||
<string name="storage_analysis">Lagersanalyse</string>
|
<string name="storage_analysis">Lagringsanalyse</string>
|
||||||
<string name="images">Billeder</string>
|
<string name="images">Billeder</string>
|
||||||
<string name="videos">Videoer</string>
|
<string name="videos">Videoer</string>
|
||||||
<string name="audio">Lyd</string>
|
<string name="audio">Lyd</string>
|
||||||
@@ -42,6 +42,6 @@
|
|||||||
<string name="others">Andre</string>
|
<string name="others">Andre</string>
|
||||||
<string name="storage_free">fri</string>
|
<string name="storage_free">fri</string>
|
||||||
<string name="total_storage">Samlet lagerplads: %s</string>
|
<string name="total_storage">Samlet lagerplads: %s</string>
|
||||||
<string name="enable_root_access">Aktiver root-adgang</string>
|
<string name="enable_root_access">Aktivér root-adgang</string>
|
||||||
<string name="press_back_twice">Kræv to tryk på tilbage for at forlade appen</string>
|
<string name="press_back_twice">Dobbelttryk på Tilbage for at afslutte appen</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
<string name="path_copied">Bane kopiert</string>
|
<string name="path_copied">Bane kopiert</string>
|
||||||
<string name="select_audio_file">Vennligst velg en lydfil</string>
|
<string name="select_audio_file">Vennligst velg en lydfil</string>
|
||||||
<string name="search_folder">Søk etter mappe</string>
|
<string name="search_folder">Søk etter mappe</string>
|
||||||
<string name="rooted_device_only">Denne handlingen fungerer bare på rootede enheter.</string>
|
<string name="rooted_device_only">Denne handlingen fungerer bare på enheter med rot-tilgang</string>
|
||||||
<string name="recents">Nylige</string>
|
<string name="recents">Nylige</string>
|
||||||
<string name="show_recents">Vis nylige</string>
|
<string name="show_recents">Vis nylige</string>
|
||||||
<string name="open_as">Åpne som</string>
|
<string name="open_as">Åpne som</string>
|
||||||
@@ -40,4 +40,8 @@
|
|||||||
<string name="storage_free">ledig</string>
|
<string name="storage_free">ledig</string>
|
||||||
<string name="total_storage">Total lagring: %s</string>
|
<string name="total_storage">Total lagring: %s</string>
|
||||||
<string name="enable_root_access">Aktiver root-tilgang</string>
|
<string name="enable_root_access">Aktiver root-tilgang</string>
|
||||||
|
<string name="invert_colors">Inverter farger</string>
|
||||||
|
<string name="storage_analysis">Lagringsanalyse</string>
|
||||||
|
<string name="others">Andre</string>
|
||||||
|
<string name="press_back_twice">Trykk Tilbake to ganger for å avslutte appen</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_launcher_name">Филе Манагер</string>
|
<string name="app_launcher_name">Менаџер фајлова</string>
|
||||||
<string name="press_back_again">Притисните поново да бисте изашли</string>
|
<string name="press_back_again">Притисните поново да бисте изашли</string>
|
||||||
<string name="go_to_home_folder">Идите у почетни фолдер</string>
|
<string name="go_to_home_folder">Идите у почетни фолдер</string>
|
||||||
<string name="set_as_home_folder">Постави као почетни фолдер</string>
|
<string name="set_as_home_folder">Постави као почетни фолдер</string>
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_launcher_name">Менеджер Файлів</string>
|
<string name="app_launcher_name">Менеджер файлів</string>
|
||||||
<string name="press_back_again">Для виходу натисніть Назад ще раз</string>
|
<string name="press_back_again">Для виходу натисніть «Назад» ще раз</string>
|
||||||
<string name="go_to_home_folder">Перейти у домашню теку</string>
|
<string name="go_to_home_folder">Перейти у домашню теку</string>
|
||||||
<string name="set_as_home_folder">Встановити як головну теку</string>
|
<string name="set_as_home_folder">Встановити як головну теку</string>
|
||||||
<string name="home_folder_updated">Головну теку оновлено</string>
|
<string name="home_folder_updated">Головну теку оновлено</string>
|
||||||
<string name="copy_path">Скопіювати шлях у буфер обміну</string>
|
<string name="copy_path">Скопіювати шлях у буфер обміну</string>
|
||||||
<string name="path_copied">Шлях скопійовано</string>
|
<string name="path_copied">Шлях скопійовано</string>
|
||||||
<string name="select_audio_file">Будь ласка, оберіть аудіо файл</string>
|
<string name="select_audio_file">Оберіть аудіофайл</string>
|
||||||
<string name="search_folder">Шукати теку</string>
|
<string name="search_folder">Шукати теку</string>
|
||||||
<string name="rooted_device_only">Ця команда працює лише на пристроях з root-доступом</string>
|
<string name="rooted_device_only">Ця команда працює лише на пристроях з root-доступом</string>
|
||||||
<string name="recents">Останні</string>
|
<string name="recents">Останні</string>
|
||||||
@@ -44,4 +44,4 @@
|
|||||||
<string name="total_storage">Всього пам\'яті: %s</string>
|
<string name="total_storage">Всього пам\'яті: %s</string>
|
||||||
<string name="enable_root_access">Активувати root-доступ</string>
|
<string name="enable_root_access">Активувати root-доступ</string>
|
||||||
<string name="press_back_twice">Натисніть «Назад» двічі, щоб вийти зі застосунку</string>
|
<string name="press_back_twice">Натисніть «Назад» двічі, щоб вийти зі застосунку</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,4 +1,47 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="images">圖片</string>
|
<string name="images">圖片</string>
|
||||||
</resources>
|
<string name="videos">影片</string>
|
||||||
|
<string name="app_launcher_name">檔案管理器</string>
|
||||||
|
<string name="press_back_again">再按一次返回以離開</string>
|
||||||
|
<string name="go_to_home_folder">前往主資料夾</string>
|
||||||
|
<string name="set_as_home_folder">設為主資料夾</string>
|
||||||
|
<string name="home_folder_updated">主資料夾已更新</string>
|
||||||
|
<string name="copy_path">路徑複製到剪貼簿</string>
|
||||||
|
<string name="path_copied">路徑已複製</string>
|
||||||
|
<string name="select_audio_file">請選擇一個音訊檔案</string>
|
||||||
|
<string name="search_folder">搜尋資料夾</string>
|
||||||
|
<string name="rooted_device_only">這個操作只對已 root 的裝置有用</string>
|
||||||
|
<string name="recents">最近瀏覽</string>
|
||||||
|
<string name="show_recents">顯示最近瀏覽</string>
|
||||||
|
<string name="invert_colors">顏色反轉</string>
|
||||||
|
<string name="open_as">開啟為</string>
|
||||||
|
<string name="text_file">文字檔案</string>
|
||||||
|
<string name="image_file">圖片檔案</string>
|
||||||
|
<string name="audio_file">音源檔案</string>
|
||||||
|
<string name="video_file">影片檔案</string>
|
||||||
|
<string name="other_file">其他檔案</string>
|
||||||
|
<string name="compress">壓縮</string>
|
||||||
|
<string name="decompress">解壓縮</string>
|
||||||
|
<string name="compress_as">壓縮為</string>
|
||||||
|
<string name="compressing">壓縮中…</string>
|
||||||
|
<string name="decompressing">解壓縮中…</string>
|
||||||
|
<string name="compression_successful">壓縮成功</string>
|
||||||
|
<string name="decompression_successful">解壓縮成功</string>
|
||||||
|
<string name="compressing_failed">壓縮失敗</string>
|
||||||
|
<string name="decompressing_failed">解壓縮失敗</string>
|
||||||
|
<string name="manage_favorites">管理我的最愛</string>
|
||||||
|
<string name="go_to_favorite">前往我的最愛</string>
|
||||||
|
<string name="favorites_activity_placeholder">你可將常用資料夾加入我的最愛,方便從任何地方開啟。</string>
|
||||||
|
<string name="file_editor">檔案編輯器</string>
|
||||||
|
<string name="storage_analysis">儲存空間分析</string>
|
||||||
|
<string name="audio">音訊</string>
|
||||||
|
<string name="documents">文件</string>
|
||||||
|
<string name="downloads">下載</string>
|
||||||
|
<string name="archives">封存</string>
|
||||||
|
<string name="others">其他</string>
|
||||||
|
<string name="storage_free">可用空間</string>
|
||||||
|
<string name="total_storage">總儲存空間:%s</string>
|
||||||
|
<string name="enable_root_access">啟用 root 權限</string>
|
||||||
|
<string name="press_back_twice">需按兩次返回鍵才能離開 app</string>
|
||||||
|
</resources>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_launcher_name">簡易檔案管理器</string>
|
<string name="app_launcher_name">檔案管理器</string>
|
||||||
<string name="press_back_again">再按一次返回以離開</string>
|
<string name="press_back_again">再按一次返回以離開</string>
|
||||||
<string name="go_to_home_folder">前往主資料夾</string>
|
<string name="go_to_home_folder">前往主資料夾</string>
|
||||||
<string name="set_as_home_folder">設為主資料夾</string>
|
<string name="set_as_home_folder">設為主資料夾</string>
|
||||||
@@ -44,4 +44,4 @@
|
|||||||
<string name="show_recents">顯示最近造訪</string>
|
<string name="show_recents">顯示最近造訪</string>
|
||||||
<string name="documents">文件</string>
|
<string name="documents">文件</string>
|
||||||
<string name="storage_free">可用空間</string>
|
<string name="storage_free">可用空間</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -40,6 +40,11 @@ style:
|
|||||||
maxLineLength: 120
|
maxLineLength: 120
|
||||||
excludePackageStatements: true
|
excludePackageStatements: true
|
||||||
excludeImportStatements: true
|
excludeImportStatements: true
|
||||||
|
ReturnCount:
|
||||||
|
active: true
|
||||||
|
max: 4
|
||||||
|
excludeGuardClauses: true
|
||||||
|
excludes: ["**/test/**", "**/androidTest/**"]
|
||||||
|
|
||||||
naming:
|
naming:
|
||||||
FunctionNaming:
|
FunctionNaming:
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
Changed:
|
||||||
|
|
||||||
|
• Compatibility updates for Android 15 & 16
|
||||||
|
• Updated translations
|
||||||
|
|
||||||
|
Fixed:
|
||||||
|
|
||||||
|
• Fixed duplicated entries when viewing protected ZIP files
|
||||||
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
Fixed:
|
||||||
|
|
||||||
|
• Fixed folders showing up incorrectly as files in some cases
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
Added:
|
||||||
|
|
||||||
|
• Added a separate "Save as" option in the text editor
|
||||||
|
|
||||||
|
Changed:
|
||||||
|
|
||||||
|
• Save button now overwrites files directly in the text editor
|
||||||
|
• Search now ignores accents and diacritics
|
||||||
|
• Updated translations
|
||||||
|
|
||||||
|
Fixed:
|
||||||
|
|
||||||
|
• Fixed folders showing up incorrectly as files in the copy/move dialog
|
||||||
|
• Fixed error when saving files with unsupported characters
|
||||||
|
• Fixed printing text files containing a "#"
|
||||||
|
• Fixed files in hidden folders showing up in the recent tab
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
Changed:
|
||||||
|
|
||||||
|
• Updated translations
|
||||||
|
|
||||||
|
Fixed:
|
||||||
|
|
||||||
|
• Fixed files from hidden folders showing up in storage tab browser
|
||||||
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
厭倦了檔案管理器會拖慢您的速度並侵犯您的私私嗎?使用 Fossify File Manager 解鎖閃電般快速、安全且完全可自訂的體驗。 ⚡
|
||||||
|
|
||||||
|
🚀 以極快的導航統治您的數位世界:
|
||||||
|
• 透過簡單的壓縮和傳輸功能快速管理您的檔案,讓您的數位生活井然有序。
|
||||||
|
• 使用可自訂的主資料夾和我的最愛捷徑快速存取最常用的資料夾。
|
||||||
|
• 透過直觀的導航、搜尋和排序選項,在幾秒鐘內找到您需要的內容。
|
||||||
|
|
||||||
|
🔐 以無與倫比的私隱和安全性強化您的資料:
|
||||||
|
• 使用密碼、圖案或指紋鎖定保護敏感檔案的隱藏項目或整個應用程式。
|
||||||
|
• 無需網絡連線-您的檔案在您的裝置上保持私密且安全。
|
||||||
|
|
||||||
|
💾 像專業人士一樣掌控您的儲存:
|
||||||
|
• 透過輕鬆的檔案和資料夾壓縮來清理空間,以最大限度地發揮設備的潛力。
|
||||||
|
• 使用內建儲存分析工具辨識並清理佔用空間的檔案。
|
||||||
|
• 無縫導航根檔案、SD 卡和 USB 裝置以實現整體組織。
|
||||||
|
|
||||||
|
📁 使用便利工具優化您的工作流程:
|
||||||
|
• 建立桌面捷徑以即時存取最常用的檔案和資料夾。
|
||||||
|
• 使用輕量級檔案編輯器輕鬆編輯、列印或閱讀文件,並透過縮放手勢進行增強。
|
||||||
|
|
||||||
|
🌈 透過無限的客製化打造您自己的:
|
||||||
|
• 享受無廣告、開源體驗,讓您而非企業巨頭掌控一切。
|
||||||
|
• 個人化顏色、主題和圖示以反映您獨特的風格和偏好。
|
||||||
|
|
||||||
|
拋棄臃腫、侵犯私隱的檔案管理器,使用 Fossify File Manager 體驗真正的自由。立即下載並重新掌控您的數位生活!
|
||||||
|
|
||||||
|
探索 Fossify 的更多應用程式:https://www.fossify.org
|
||||||
|
原始碼:https://www.github.com/FossifyOrg
|
||||||
|
加入 Reddit 社群:https://www.reddit.com/r/Fossify
|
||||||
|
在 Telegram 上連接:https://t.me/Fossify
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
具備基本功能的輕便好用開源檔案管理器。
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
厭倦了檔案管理器會拖慢您的速度並侵犯您的隱私嗎?使用 Fossify File Manager 解鎖閃電般快速、安全且完全可自訂的體驗。 ⚡
|
||||||
|
|
||||||
|
🚀 以極快的導航統治您的數位世界:
|
||||||
|
• 透過簡單的壓縮和傳輸功能快速管理您的檔案,讓您的數位生活井井有條。
|
||||||
|
• 使用可自訂的主資料夾和最喜愛的捷徑快速存取最常用的資料夾。
|
||||||
|
• 透過直覺的導航、搜尋和排序選項,在幾秒鐘內找到您需要的內容。
|
||||||
|
|
||||||
|
🔐 以無與倫比的隱私和安全性強化您的資料:
|
||||||
|
• 使用密碼、圖案或指紋鎖定保護敏感檔案的隱藏項目或整個應用程式。
|
||||||
|
• 無需上網-您的檔案在您的裝置上保持私密且安全。
|
||||||
|
|
||||||
|
💾 像專業人士一樣掌控您的儲存:
|
||||||
|
• 透過輕鬆的檔案和資料夾壓縮來清理空間,以最大限度地發揮設備的潛力。
|
||||||
|
• 使用內建儲存分析工具辨識並清理佔用空間的檔案。
|
||||||
|
• 無縫導航根檔案、SD 卡和 USB 裝置以實現整體組織。
|
||||||
|
|
||||||
|
📁 使用便利工具優化您的工作流程:
|
||||||
|
• 建立桌面捷徑以即時存取最常用的檔案和資料夾。
|
||||||
|
• 使用輕量級檔案編輯器輕鬆編輯、列印或閱讀文檔,並透過縮放手勢進行增強。
|
||||||
|
|
||||||
|
🌈 透過無限的客製化打造您自己的:
|
||||||
|
• 享受無廣告、開源體驗,讓您而非企業巨頭掌控一切。
|
||||||
|
• 個人化顏色、主題和圖示以反映您獨特的風格和偏好。
|
||||||
|
|
||||||
|
拋棄臃腫、侵犯隱私的檔案管理器,使用 Fossify File Manager 體驗真正的自由。立即下載並重新掌控您的數位生活!
|
||||||
|
|
||||||
|
探索 Fossify 的更多應用程式:https://www.fossify.org
|
||||||
|
原始碼:https://www.github.com/FossifyOrg
|
||||||
|
加入 Reddit 社群:https://www.reddit.com/r/Fossify
|
||||||
|
在 Telegram 上連接:https://t.me/Fossify
|
||||||
+2
-2
@@ -20,6 +20,6 @@ org.gradle.jvmargs=-Xmx4g
|
|||||||
# org.gradle.parallel=true
|
# org.gradle.parallel=true
|
||||||
|
|
||||||
# Versioning
|
# Versioning
|
||||||
VERSION_NAME=1.2.2
|
VERSION_NAME=1.4.0
|
||||||
VERSION_CODE=6
|
VERSION_CODE=10
|
||||||
APP_ID=org.fossify.filemanager
|
APP_ID=org.fossify.filemanager
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
[versions]
|
[versions]
|
||||||
#jetbrains
|
#jetbrains
|
||||||
kotlin = "2.2.10"
|
kotlin = "2.2.21"
|
||||||
#Detekt
|
#Detekt
|
||||||
detekt = "1.23.8"
|
detekt = "1.23.8"
|
||||||
detektCompose = "0.4.27"
|
detektCompose = "0.4.27"
|
||||||
@@ -8,7 +8,7 @@ detektCompose = "0.4.27"
|
|||||||
androidx-swiperefreshlayout = "1.1.0"
|
androidx-swiperefreshlayout = "1.1.0"
|
||||||
androidx-documentfile = "1.1.0"
|
androidx-documentfile = "1.1.0"
|
||||||
#Fossify
|
#Fossify
|
||||||
commons = "5.0.2"
|
commons = "5.7.1"
|
||||||
#Other
|
#Other
|
||||||
autofittextview = "0.2.1"
|
autofittextview = "0.2.1"
|
||||||
gestureviews = "2.8.3"
|
gestureviews = "2.8.3"
|
||||||
@@ -18,8 +18,8 @@ zip4j = "2.11.5"
|
|||||||
#Gradle
|
#Gradle
|
||||||
gradlePlugins-agp = "8.11.1"
|
gradlePlugins-agp = "8.11.1"
|
||||||
#build
|
#build
|
||||||
app-build-compileSDKVersion = "34"
|
app-build-compileSDKVersion = "36"
|
||||||
app-build-targetSDK = "34"
|
app-build-targetSDK = "36"
|
||||||
app-build-minimumSDK = "26"
|
app-build-minimumSDK = "26"
|
||||||
app-build-javaVersion = "VERSION_17"
|
app-build-javaVersion = "VERSION_17"
|
||||||
app-build-kotlinJVMTarget = "17"
|
app-build-kotlinJVMTarget = "17"
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ dependencyResolutionManagement {
|
|||||||
google()
|
google()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
maven { setUrl("https://jitpack.io") }
|
maven { setUrl("https://jitpack.io") }
|
||||||
|
mavenLocal()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
include(":app")
|
include(":app")
|
||||||
Reference in new issue
Block a user