Merge branch 'master' into fix/android-data-dir-access
# Conflicts: # app/build.gradle # app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/MainActivity.kt # app/src/main/kotlin/com/simplemobiletools/filemanager/pro/adapters/ItemsAdapter.kt
This commit is contained in:
commit
ed2bf87dc9
15
CHANGELOG.md
15
CHANGELOG.md
|
@ -1,7 +1,20 @@
|
|||
Changelog
|
||||
==========
|
||||
|
||||
Version 6.10.0 *(2021-08-27)*
|
||||
Version 6.10.1 *(2021-10-16)*
|
||||
----------------------------
|
||||
|
||||
* Added some stability and translation improvements
|
||||
|
||||
Version 6.10.0 *(2021-10-14)*
|
||||
----------------------------
|
||||
|
||||
* Added a Storage Analyzer tab on Android 8+
|
||||
* Allow saving any file type with the Save as action
|
||||
* Some Android 11 related file operation improvements
|
||||
* Couple stability, translation and UX improvements
|
||||
|
||||
Version 6.9.4 *(2021-08-27)*
|
||||
----------------------------
|
||||
|
||||
* Rewrote the current folder path into a 1 liner
|
||||
|
|
|
@ -10,8 +10,8 @@ Contains no ads or unnecessary permissions. It is fully opensource, provides cus
|
|||
|
||||
This app is just one piece of a bigger series of apps. You can find the rest of them at https://www.simplemobiletools.com
|
||||
|
||||
<a href='https://play.google.com/store/apps/details?id=com.simplemobiletools.filemanager.pro'><img src='https://simplemobiletools.com/assets/images/google-play.png' alt='Get it on Google Play' height='45' /></a>
|
||||
<a href='https://f-droid.org/packages/com.simplemobiletools.filemanager.pro'><img src='https://simplemobiletools.com/assets/images/f-droid.png' alt='Get it on F-Droid' height='45' /></a>
|
||||
<a href='https://play.google.com/store/apps/details?id=com.simplemobiletools.filemanager.pro'><img src='https://simplemobiletools.com/images/button-google-play.svg' alt='Get it on Google Play' height='45' /></a>
|
||||
<a href='https://f-droid.org/packages/com.simplemobiletools.filemanager.pro'><img src='https://simplemobiletools.com/images/button-f-droid.png' alt='Get it on F-Droid' height='45' /></a>
|
||||
|
||||
<div style="display:flex;">
|
||||
<img alt="App image" src="fastlane/metadata/android/en-US/images/phoneScreenshots/english/1.jpg" width="30%">
|
||||
|
|
|
@ -16,8 +16,8 @@ android {
|
|||
applicationId "com.simplemobiletools.filemanager.pro"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 30
|
||||
versionCode 108
|
||||
versionName "6.9.4"
|
||||
versionCode 110
|
||||
versionName "6.10.1"
|
||||
multiDexEnabled true
|
||||
setProperty("archivesBaseName", "file-manager")
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
|
|
|
@ -55,6 +55,10 @@
|
|||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name=".activities.MimeTypesActivity"
|
||||
android:parentActivityName=".activities.MainActivity" />
|
||||
|
||||
<activity
|
||||
android:name=".activities.ReadTextActivity"
|
||||
android:label="@string/file_editor">
|
||||
|
@ -91,9 +95,7 @@
|
|||
<action android:name="android.intent.action.SEND" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
|
||||
<data android:mimeType="text/plain" />
|
||||
<data android:mimeType="image/*" />
|
||||
<data android:mimeType="video/*" />
|
||||
<data android:mimeType="*/*" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
|
|
@ -34,14 +34,17 @@ import com.simplemobiletools.filemanager.pro.extensions.config
|
|||
import com.simplemobiletools.filemanager.pro.extensions.tryOpenPathIntent
|
||||
import com.simplemobiletools.filemanager.pro.fragments.ItemsFragment
|
||||
import com.simplemobiletools.filemanager.pro.fragments.MyViewPagerFragment
|
||||
import com.simplemobiletools.filemanager.pro.fragments.StorageFragment
|
||||
import com.simplemobiletools.filemanager.pro.helpers.MAX_COLUMN_COUNT
|
||||
import com.simplemobiletools.filemanager.pro.helpers.RootHelpers
|
||||
import com.simplemobiletools.filemanager.pro.helpers.tabsList
|
||||
import com.simplemobiletools.filemanager.pro.interfaces.ItemOperationsListener
|
||||
import com.stericson.RootTools.RootTools
|
||||
import kotlinx.android.synthetic.main.activity_main.*
|
||||
import kotlinx.android.synthetic.main.items_fragment.*
|
||||
import kotlinx.android.synthetic.main.items_fragment.view.*
|
||||
import kotlinx.android.synthetic.main.recents_fragment.*
|
||||
import kotlinx.android.synthetic.main.storage_fragment.*
|
||||
import java.io.File
|
||||
import java.lang.Exception
|
||||
import java.util.*
|
||||
|
@ -65,6 +68,14 @@ class MainActivity : SimpleActivity() {
|
|||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_main)
|
||||
appLaunched(BuildConfig.APPLICATION_ID)
|
||||
|
||||
if (!config.wasStorageAnalysisTabAdded && isOreoPlus()) {
|
||||
config.wasStorageAnalysisTabAdded = true
|
||||
if (config.showTabs and TAB_STORAGE_ANALYSIS == 0) {
|
||||
config.showTabs += TAB_STORAGE_ANALYSIS
|
||||
}
|
||||
}
|
||||
|
||||
setupTabColors(config.lastUsedViewPagerPage)
|
||||
storeStateVariables()
|
||||
mIsPasswordProtectionPending = config.isAppPasswordProtectionOn
|
||||
|
@ -95,18 +106,18 @@ class MainActivity : SimpleActivity() {
|
|||
}
|
||||
|
||||
getAllFragments().forEach {
|
||||
it?.setupColors(config.textColor, config.primaryColor)
|
||||
it?.onResume(config.textColor, config.primaryColor)
|
||||
}
|
||||
|
||||
if (storedFontSize != config.fontSize) {
|
||||
getAllFragments().forEach {
|
||||
it?.setupFontSize()
|
||||
(it as? ItemOperationsListener)?.setupFontSize()
|
||||
}
|
||||
}
|
||||
|
||||
if (storedDateFormat != config.dateFormat || storedTimeFormat != getTimeFormat()) {
|
||||
getAllFragments().forEach {
|
||||
it?.setupDateTimeFormat()
|
||||
(it as? ItemOperationsListener)?.setupDateTimeFormat()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -144,26 +155,28 @@ class MainActivity : SimpleActivity() {
|
|||
|
||||
override fun onPrepareOptionsMenu(menu: Menu?): Boolean {
|
||||
val currentFragment = getCurrentFragment() ?: return true
|
||||
val currentViewType = config.getFolderViewType(currentFragment.currentPath)
|
||||
val favorites = config.favorites
|
||||
|
||||
menu!!.apply {
|
||||
findItem(R.id.search).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.add_favorite).isVisible = currentFragment is ItemsFragment && !favorites.contains(currentFragment.currentPath)
|
||||
findItem(R.id.remove_favorite).isVisible = currentFragment is ItemsFragment && favorites.contains(currentFragment.currentPath)
|
||||
findItem(R.id.go_to_favorite).isVisible = currentFragment is ItemsFragment && favorites.isNotEmpty()
|
||||
|
||||
findItem(R.id.toggle_filename).isVisible = config.getFolderViewType(currentFragment.currentPath) == VIEW_TYPE_GRID
|
||||
findItem(R.id.toggle_filename).isVisible = currentViewType == VIEW_TYPE_GRID
|
||||
findItem(R.id.go_home).isVisible = currentFragment is ItemsFragment && currentFragment.currentPath != config.homeFolder
|
||||
findItem(R.id.set_as_home).isVisible = currentFragment is ItemsFragment && currentFragment.currentPath != config.homeFolder
|
||||
|
||||
findItem(R.id.temporarily_show_hidden).isVisible = !config.shouldShowHidden
|
||||
findItem(R.id.stop_showing_hidden).isVisible = config.temporarilyShowHidden
|
||||
findItem(R.id.temporarily_show_hidden).isVisible = !config.shouldShowHidden && currentFragment !is StorageFragment
|
||||
findItem(R.id.stop_showing_hidden).isVisible = config.temporarilyShowHidden && currentFragment !is StorageFragment
|
||||
|
||||
findItem(R.id.increase_column_count).isVisible =
|
||||
config.getFolderViewType(currentFragment.currentPath) == VIEW_TYPE_GRID && config.fileColumnCnt < MAX_COLUMN_COUNT
|
||||
findItem(R.id.reduce_column_count).isVisible = config.getFolderViewType(currentFragment.currentPath) == VIEW_TYPE_GRID && config.fileColumnCnt > 1
|
||||
currentViewType == VIEW_TYPE_GRID && config.fileColumnCnt < MAX_COLUMN_COUNT && currentFragment !is StorageFragment
|
||||
findItem(R.id.reduce_column_count).isVisible = currentViewType == VIEW_TYPE_GRID && config.fileColumnCnt > 1 && currentFragment !is StorageFragment
|
||||
}
|
||||
|
||||
return true
|
||||
|
@ -243,7 +256,7 @@ class MainActivity : SimpleActivity() {
|
|||
|
||||
override fun onQueryTextChange(newText: String): Boolean {
|
||||
if (isSearchOpen) {
|
||||
getCurrentFragment()?.searchQueryChanged(newText)
|
||||
(getCurrentFragment() as? ItemOperationsListener)?.searchQueryChanged(newText)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
@ -358,12 +371,13 @@ class MainActivity : SimpleActivity() {
|
|||
}
|
||||
|
||||
if (refreshRecents) {
|
||||
recents_fragment?.refreshItems()
|
||||
recents_fragment?.refreshFragment()
|
||||
}
|
||||
}
|
||||
|
||||
private fun initFragments() {
|
||||
main_view_pager.adapter = ViewPagerAdapter(this)
|
||||
main_view_pager.offscreenPageLimit = 2
|
||||
main_view_pager.currentItem = config.lastUsedViewPagerPage
|
||||
main_view_pager.onPageChangeListener {
|
||||
main_tabs_holder.getTabAt(it)?.select()
|
||||
|
@ -385,7 +399,7 @@ class MainActivity : SimpleActivity() {
|
|||
main_view_pager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
|
||||
override fun onPageScrollStateChanged(state: Int) {
|
||||
if (isSearchOpen) {
|
||||
getCurrentFragment()?.searchQueryChanged("")
|
||||
(getCurrentFragment() as? ItemOperationsListener)?.searchQueryChanged("")
|
||||
searchMenuItem?.collapseActionView()
|
||||
}
|
||||
}
|
||||
|
@ -395,7 +409,7 @@ class MainActivity : SimpleActivity() {
|
|||
override fun onPageSelected(position: Int) {
|
||||
main_tabs_holder.getTabAt(position)?.select()
|
||||
getAllFragments().forEach {
|
||||
it?.finishActMode()
|
||||
(it as? ItemOperationsListener)?.finishActMode()
|
||||
}
|
||||
invalidateOptionsMenu()
|
||||
}
|
||||
|
@ -448,7 +462,8 @@ class MainActivity : SimpleActivity() {
|
|||
private fun getTabIcon(position: Int): Drawable {
|
||||
val drawableId = when (position) {
|
||||
0 -> R.drawable.ic_folder_vector
|
||||
else -> R.drawable.ic_clock_vector
|
||||
1 -> R.drawable.ic_clock_vector
|
||||
else -> R.drawable.ic_storage_vector
|
||||
}
|
||||
|
||||
return resources.getColoredDrawableWithColor(drawableId, config.textColor)
|
||||
|
@ -491,7 +506,7 @@ class MainActivity : SimpleActivity() {
|
|||
|
||||
private fun showSortingDialog() {
|
||||
ChangeSortingDialog(this, getCurrentFragment()!!.currentPath) {
|
||||
(getCurrentFragment() as? ItemsFragment)?.refreshItems()
|
||||
(getCurrentFragment() as? ItemsFragment)?.refreshFragment()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -506,19 +521,19 @@ class MainActivity : SimpleActivity() {
|
|||
private fun toggleFilenameVisibility() {
|
||||
config.displayFilenames = !config.displayFilenames
|
||||
getAllFragments().forEach {
|
||||
it?.toggleFilenameVisibility()
|
||||
(it as? ItemOperationsListener)?.toggleFilenameVisibility()
|
||||
}
|
||||
}
|
||||
|
||||
private fun increaseColumnCount() {
|
||||
getAllFragments().forEach {
|
||||
it?.increaseColumnCount()
|
||||
(it as? ItemOperationsListener)?.increaseColumnCount()
|
||||
}
|
||||
}
|
||||
|
||||
private fun reduceColumnCount() {
|
||||
getAllFragments().forEach {
|
||||
it?.reduceColumnCount()
|
||||
(it as? ItemOperationsListener)?.reduceColumnCount()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -548,7 +563,7 @@ class MainActivity : SimpleActivity() {
|
|||
private fun changeViewType() {
|
||||
ChangeViewTypeDialog(this, getCurrentFragment()!!.currentPath, getCurrentFragment() is ItemsFragment) {
|
||||
getAllFragments().forEach {
|
||||
it?.refreshItems()
|
||||
it?.refreshFragment()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -566,7 +581,7 @@ class MainActivity : SimpleActivity() {
|
|||
private fun toggleTemporarilyShowHidden(show: Boolean) {
|
||||
config.temporarilyShowHidden = show
|
||||
getAllFragments().forEach {
|
||||
it?.refreshItems()
|
||||
it?.refreshFragment()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -674,7 +689,7 @@ class MainActivity : SimpleActivity() {
|
|||
|
||||
private fun getInactiveTabIndexes(activeIndex: Int) = (0 until tabsList.size).filter { it != activeIndex }
|
||||
|
||||
private fun getAllFragments(): ArrayList<MyViewPagerFragment?> = arrayListOf(items_fragment, recents_fragment)
|
||||
private fun getAllFragments(): ArrayList<MyViewPagerFragment?> = arrayListOf(items_fragment, recents_fragment, storage_fragment)
|
||||
|
||||
private fun getCurrentFragment(): MyViewPagerFragment? {
|
||||
val showTabs = config.showTabs
|
||||
|
@ -687,6 +702,10 @@ class MainActivity : SimpleActivity() {
|
|||
fragments.add(recents_fragment)
|
||||
}
|
||||
|
||||
if (showTabs and TAB_STORAGE_ANALYSIS != 0) {
|
||||
fragments.add(storage_fragment)
|
||||
}
|
||||
|
||||
return fragments.getOrNull(main_view_pager.currentItem)
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,479 @@
|
|||
package com.simplemobiletools.filemanager.pro.activities
|
||||
|
||||
import android.app.SearchManager
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.provider.MediaStore
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.widget.SearchView
|
||||
import androidx.core.view.MenuItemCompat
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.VIEW_TYPE_GRID
|
||||
import com.simplemobiletools.commons.helpers.VIEW_TYPE_LIST
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
import com.simplemobiletools.commons.models.FileDirItem
|
||||
import com.simplemobiletools.commons.views.MyGridLayoutManager
|
||||
import com.simplemobiletools.commons.views.MyRecyclerView
|
||||
import com.simplemobiletools.filemanager.pro.R
|
||||
import com.simplemobiletools.filemanager.pro.adapters.ItemsAdapter
|
||||
import com.simplemobiletools.filemanager.pro.dialogs.ChangeSortingDialog
|
||||
import com.simplemobiletools.filemanager.pro.dialogs.ChangeViewTypeDialog
|
||||
import com.simplemobiletools.filemanager.pro.extensions.config
|
||||
import com.simplemobiletools.filemanager.pro.extensions.tryOpenPathIntent
|
||||
import com.simplemobiletools.filemanager.pro.helpers.*
|
||||
import com.simplemobiletools.filemanager.pro.interfaces.ItemOperationsListener
|
||||
import com.simplemobiletools.filemanager.pro.models.ListItem
|
||||
import kotlinx.android.synthetic.main.activity_mimetypes.*
|
||||
import kotlinx.android.synthetic.main.items_fragment.view.*
|
||||
import java.util.*
|
||||
|
||||
class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
|
||||
private var isSearchOpen = false
|
||||
private var currentMimeType = ""
|
||||
private var lastSearchedText = ""
|
||||
private var searchMenuItem: MenuItem? = null
|
||||
private var zoomListener: MyRecyclerView.MyZoomListener? = null
|
||||
private var storedItems = ArrayList<ListItem>()
|
||||
private var currentViewType = VIEW_TYPE_LIST
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_mimetypes)
|
||||
currentMimeType = intent.getStringExtra(SHOW_MIMETYPE) ?: return
|
||||
title = getString(
|
||||
when (currentMimeType) {
|
||||
IMAGES -> R.string.images
|
||||
VIDEOS -> R.string.videos
|
||||
AUDIO -> R.string.audio
|
||||
DOCUMENTS -> R.string.documents
|
||||
ARCHIVES -> R.string.archives
|
||||
OTHERS -> R.string.others
|
||||
else -> {
|
||||
toast(R.string.unknown_error_occurred)
|
||||
finish()
|
||||
return
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
ensureBackgroundThread {
|
||||
reFetchItems()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
menuInflater.inflate(R.menu.menu, menu)
|
||||
setupSearch(menu)
|
||||
updateMenuItemColors(menu)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onPrepareOptionsMenu(menu: Menu?): Boolean {
|
||||
val currentViewType = config.getFolderViewType(currentMimeType)
|
||||
|
||||
menu!!.apply {
|
||||
findItem(R.id.add_favorite).isVisible = false
|
||||
findItem(R.id.remove_favorite).isVisible = false
|
||||
findItem(R.id.go_to_favorite).isVisible = false
|
||||
|
||||
findItem(R.id.toggle_filename).isVisible = currentViewType == VIEW_TYPE_GRID
|
||||
findItem(R.id.go_home).isVisible = false
|
||||
findItem(R.id.set_as_home).isVisible = false
|
||||
findItem(R.id.settings).isVisible = false
|
||||
findItem(R.id.about).isVisible = false
|
||||
|
||||
findItem(R.id.temporarily_show_hidden).isVisible = !config.shouldShowHidden
|
||||
findItem(R.id.stop_showing_hidden).isVisible = config.temporarilyShowHidden
|
||||
|
||||
findItem(R.id.increase_column_count).isVisible = currentViewType == VIEW_TYPE_GRID && config.fileColumnCnt < MAX_COLUMN_COUNT
|
||||
findItem(R.id.reduce_column_count).isVisible = currentViewType == VIEW_TYPE_GRID && config.fileColumnCnt > 1
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
when (item.itemId) {
|
||||
R.id.sort -> showSortingDialog()
|
||||
R.id.toggle_filename -> toggleFilenameVisibility()
|
||||
R.id.change_view_type -> changeViewType()
|
||||
R.id.temporarily_show_hidden -> tryToggleTemporarilyShowHidden()
|
||||
R.id.stop_showing_hidden -> tryToggleTemporarilyShowHidden()
|
||||
R.id.increase_column_count -> increaseColumnCount()
|
||||
R.id.reduce_column_count -> reduceColumnCount()
|
||||
else -> return super.onOptionsItemSelected(item)
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun refreshFragment() {
|
||||
reFetchItems()
|
||||
}
|
||||
|
||||
override fun deleteFiles(files: ArrayList<FileDirItem>) {
|
||||
deleteFiles(files, false) {
|
||||
if (!it) {
|
||||
runOnUiThread {
|
||||
toast(R.string.unknown_error_occurred)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun selectedPaths(paths: ArrayList<String>) {}
|
||||
|
||||
override fun searchQueryChanged(text: String) {
|
||||
val searchText = text.trim()
|
||||
lastSearchedText = searchText
|
||||
when {
|
||||
searchText.isEmpty() -> {
|
||||
mimetypes_list.beVisible()
|
||||
getRecyclerAdapter()?.updateItems(storedItems)
|
||||
mimetypes_placeholder.beGoneIf(storedItems.isNotEmpty())
|
||||
mimetypes_placeholder_2.beGone()
|
||||
}
|
||||
searchText.length == 1 -> {
|
||||
mimetypes_list.beGone()
|
||||
mimetypes_placeholder.beVisible()
|
||||
mimetypes_placeholder_2.beVisible()
|
||||
}
|
||||
else -> {
|
||||
ensureBackgroundThread {
|
||||
if (lastSearchedText != searchText) {
|
||||
return@ensureBackgroundThread
|
||||
}
|
||||
|
||||
val listItems = storedItems.filter { it.name.contains(searchText, true) } as ArrayList<ListItem>
|
||||
|
||||
runOnUiThread {
|
||||
getRecyclerAdapter()?.updateItems(listItems, text)
|
||||
mimetypes_list.beVisibleIf(listItems.isNotEmpty())
|
||||
mimetypes_placeholder.beVisibleIf(listItems.isEmpty())
|
||||
mimetypes_placeholder_2.beGone()
|
||||
|
||||
mimetypes_list.onGlobalLayout {
|
||||
items_fastscroller.setScrollToY(mimetypes_list.computeVerticalScrollOffset())
|
||||
calculateContentHeight(listItems)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun setupDateTimeFormat() {}
|
||||
|
||||
override fun setupFontSize() {}
|
||||
|
||||
override fun toggleFilenameVisibility() {
|
||||
config.displayFilenames = !config.displayFilenames
|
||||
getRecyclerAdapter()?.updateDisplayFilenamesInGrid()
|
||||
}
|
||||
|
||||
override fun increaseColumnCount() {
|
||||
if (currentViewType == VIEW_TYPE_GRID) {
|
||||
config.fileColumnCnt = ++(mimetypes_list.layoutManager as MyGridLayoutManager).spanCount
|
||||
columnCountChanged()
|
||||
}
|
||||
}
|
||||
|
||||
override fun reduceColumnCount() {
|
||||
if (currentViewType == VIEW_TYPE_GRID) {
|
||||
config.fileColumnCnt = --(mimetypes_list.layoutManager as MyGridLayoutManager).spanCount
|
||||
columnCountChanged()
|
||||
}
|
||||
}
|
||||
|
||||
override fun finishActMode() {}
|
||||
|
||||
private fun setupSearch(menu: Menu) {
|
||||
val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
|
||||
searchMenuItem = menu.findItem(R.id.search)
|
||||
(searchMenuItem!!.actionView as SearchView).apply {
|
||||
setSearchableInfo(searchManager.getSearchableInfo(componentName))
|
||||
isSubmitButtonEnabled = false
|
||||
queryHint = getString(R.string.search)
|
||||
setOnQueryTextListener(object : SearchView.OnQueryTextListener {
|
||||
override fun onQueryTextSubmit(query: String) = false
|
||||
|
||||
override fun onQueryTextChange(newText: String): Boolean {
|
||||
if (isSearchOpen) {
|
||||
searchQueryChanged(newText)
|
||||
}
|
||||
return true
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
MenuItemCompat.setOnActionExpandListener(searchMenuItem, object : MenuItemCompat.OnActionExpandListener {
|
||||
override fun onMenuItemActionExpand(item: MenuItem?): Boolean {
|
||||
isSearchOpen = true
|
||||
searchOpened()
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onMenuItemActionCollapse(item: MenuItem?): Boolean {
|
||||
isSearchOpen = false
|
||||
searchClosed()
|
||||
return true
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fun searchOpened() {
|
||||
isSearchOpen = true
|
||||
lastSearchedText = ""
|
||||
}
|
||||
|
||||
fun searchClosed() {
|
||||
isSearchOpen = false
|
||||
lastSearchedText = ""
|
||||
|
||||
mimetypes_list.beVisible()
|
||||
mimetypes_placeholder.beGoneIf(storedItems.isNotEmpty())
|
||||
mimetypes_placeholder_2.beGone()
|
||||
}
|
||||
|
||||
private fun getProperFileDirItems(callback: (ArrayList<FileDirItem>) -> Unit) {
|
||||
val fileDirItems = ArrayList<FileDirItem>()
|
||||
val showHidden = config.shouldShowHidden
|
||||
val uri = MediaStore.Files.getContentUri("external")
|
||||
val projection = arrayOf(
|
||||
MediaStore.Files.FileColumns.MIME_TYPE,
|
||||
MediaStore.Files.FileColumns.DATA,
|
||||
MediaStore.Files.FileColumns.DISPLAY_NAME,
|
||||
MediaStore.Files.FileColumns.SIZE,
|
||||
MediaStore.Files.FileColumns.DATE_MODIFIED
|
||||
)
|
||||
|
||||
try {
|
||||
queryCursor(uri, projection) { cursor ->
|
||||
try {
|
||||
val fullMimetype = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault()) ?: return@queryCursor
|
||||
val name = cursor.getStringValue(MediaStore.Files.FileColumns.DISPLAY_NAME)
|
||||
if (!showHidden && name.startsWith(".")) {
|
||||
return@queryCursor
|
||||
}
|
||||
|
||||
val size = cursor.getLongValue(MediaStore.Files.FileColumns.SIZE)
|
||||
if (size == 0L) {
|
||||
return@queryCursor
|
||||
}
|
||||
|
||||
val path = cursor.getStringValue(MediaStore.Files.FileColumns.DATA)
|
||||
val lastModified = cursor.getLongValue(MediaStore.Files.FileColumns.DATE_MODIFIED) * 1000
|
||||
|
||||
val mimetype = fullMimetype.substringBefore("/")
|
||||
when (currentMimeType) {
|
||||
IMAGES -> {
|
||||
if (mimetype == "image") {
|
||||
fileDirItems.add(FileDirItem(path, name, false, 0, size, lastModified))
|
||||
}
|
||||
}
|
||||
VIDEOS -> {
|
||||
if (mimetype == "video") {
|
||||
fileDirItems.add(FileDirItem(path, name, false, 0, size, lastModified))
|
||||
}
|
||||
}
|
||||
AUDIO -> {
|
||||
if (mimetype == "audio" || extraAudioMimeTypes.contains(fullMimetype)) {
|
||||
fileDirItems.add(FileDirItem(path, name, false, 0, size, lastModified))
|
||||
}
|
||||
}
|
||||
DOCUMENTS -> {
|
||||
if (mimetype == "text" || extraDocumentMimeTypes.contains(fullMimetype)) {
|
||||
fileDirItems.add(FileDirItem(path, name, false, 0, size, lastModified))
|
||||
}
|
||||
}
|
||||
ARCHIVES -> {
|
||||
if (archiveMimeTypes.contains(fullMimetype)) {
|
||||
fileDirItems.add(FileDirItem(path, name, false, 0, size, lastModified))
|
||||
}
|
||||
}
|
||||
OTHERS -> {
|
||||
if (mimetype != "image" && mimetype != "video" && mimetype != "audio" && mimetype != "text" &&
|
||||
!extraAudioMimeTypes.contains(fullMimetype) && !extraDocumentMimeTypes.contains(fullMimetype) &&
|
||||
!archiveMimeTypes.contains(fullMimetype)
|
||||
) {
|
||||
fileDirItems.add(FileDirItem(path, name, false, 0, size, lastModified))
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
}
|
||||
|
||||
callback(fileDirItems)
|
||||
}
|
||||
|
||||
private fun addItems(items: ArrayList<ListItem>) {
|
||||
FileDirItem.sorting = config.getFolderSorting(currentMimeType)
|
||||
items.sort()
|
||||
|
||||
if (isDestroyed || isFinishing) {
|
||||
return
|
||||
}
|
||||
|
||||
storedItems = items
|
||||
ItemsAdapter(this as SimpleActivity, storedItems, this, mimetypes_list, false, items_fastscroller, null) {
|
||||
tryOpenPathIntent((it as ListItem).path, false)
|
||||
}.apply {
|
||||
setupZoomListener(zoomListener)
|
||||
mimetypes_list.adapter = this
|
||||
}
|
||||
|
||||
if (areSystemAnimationsEnabled) {
|
||||
mimetypes_list.scheduleLayoutAnimation()
|
||||
}
|
||||
|
||||
val dateFormat = config.dateFormat
|
||||
val timeFormat = getTimeFormat()
|
||||
items_fastscroller.setViews(mimetypes_list) {
|
||||
val listItem = getRecyclerAdapter()?.listItems?.getOrNull(it)
|
||||
items_fastscroller.updateBubbleText(listItem?.getBubbleText(this, dateFormat, timeFormat) ?: "")
|
||||
}
|
||||
|
||||
mimetypes_placeholder.beVisibleIf(items.isEmpty())
|
||||
}
|
||||
|
||||
private fun getListItemsFromFileDirItems(fileDirItems: ArrayList<FileDirItem>): ArrayList<ListItem> {
|
||||
val listItems = ArrayList<ListItem>()
|
||||
fileDirItems.forEach {
|
||||
val listItem = ListItem(it.path, it.name, false, 0, it.size, it.modified, false)
|
||||
listItems.add(listItem)
|
||||
}
|
||||
return listItems
|
||||
}
|
||||
|
||||
private fun getRecyclerAdapter() = mimetypes_list.adapter as? ItemsAdapter
|
||||
|
||||
private fun showSortingDialog() {
|
||||
ChangeSortingDialog(this, currentMimeType) {
|
||||
recreateList()
|
||||
}
|
||||
}
|
||||
|
||||
private fun changeViewType() {
|
||||
ChangeViewTypeDialog(this, currentMimeType, true) {
|
||||
recreateList()
|
||||
setupLayoutManager()
|
||||
}
|
||||
}
|
||||
|
||||
private fun reFetchItems() {
|
||||
getProperFileDirItems { fileDirItems ->
|
||||
val listItems = getListItemsFromFileDirItems(fileDirItems)
|
||||
|
||||
runOnUiThread {
|
||||
addItems(listItems)
|
||||
if (currentViewType != config.getFolderViewType(currentMimeType)) {
|
||||
setupLayoutManager()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun recreateList() {
|
||||
val listItems = getRecyclerAdapter()?.listItems
|
||||
if (listItems != null) {
|
||||
addItems(listItems as ArrayList<ListItem>)
|
||||
}
|
||||
}
|
||||
|
||||
private fun columnCountChanged() {
|
||||
invalidateOptionsMenu()
|
||||
getRecyclerAdapter()?.apply {
|
||||
notifyItemRangeChanged(0, listItems.size)
|
||||
calculateContentHeight(listItems)
|
||||
}
|
||||
}
|
||||
|
||||
private fun calculateContentHeight(items: MutableList<ListItem>) {
|
||||
val layoutManager = mimetypes_list.layoutManager as MyGridLayoutManager
|
||||
val thumbnailHeight = layoutManager.getChildAt(0)?.height ?: 0
|
||||
val fullHeight = ((items.size - 1) / layoutManager.spanCount + 1) * thumbnailHeight
|
||||
items_fastscroller.setContentHeight(fullHeight)
|
||||
items_fastscroller.setScrollToY(mimetypes_list.computeVerticalScrollOffset())
|
||||
}
|
||||
|
||||
private fun setupLayoutManager() {
|
||||
if (config.getFolderViewType(currentMimeType) == VIEW_TYPE_GRID) {
|
||||
currentViewType = VIEW_TYPE_GRID
|
||||
setupGridLayoutManager()
|
||||
} else {
|
||||
currentViewType = VIEW_TYPE_LIST
|
||||
setupListLayoutManager()
|
||||
}
|
||||
|
||||
mimetypes_list.adapter = null
|
||||
initZoomListener()
|
||||
addItems(storedItems)
|
||||
}
|
||||
|
||||
private fun setupGridLayoutManager() {
|
||||
val layoutManager = mimetypes_list.layoutManager as MyGridLayoutManager
|
||||
layoutManager.spanCount = config.fileColumnCnt ?: 3
|
||||
|
||||
layoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
|
||||
override fun getSpanSize(position: Int): Int {
|
||||
return if (getRecyclerAdapter()?.isASectionTitle(position) == true) {
|
||||
layoutManager.spanCount
|
||||
} else {
|
||||
1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupListLayoutManager() {
|
||||
val layoutManager = mimetypes_list.layoutManager as MyGridLayoutManager
|
||||
layoutManager.spanCount = 1
|
||||
zoomListener = null
|
||||
}
|
||||
|
||||
private fun initZoomListener() {
|
||||
if (config.getFolderViewType(currentMimeType) == VIEW_TYPE_GRID) {
|
||||
val layoutManager = mimetypes_list.layoutManager as MyGridLayoutManager
|
||||
zoomListener = object : MyRecyclerView.MyZoomListener {
|
||||
override fun zoomIn() {
|
||||
if (layoutManager.spanCount > 1) {
|
||||
reduceColumnCount()
|
||||
getRecyclerAdapter()?.finishActMode()
|
||||
}
|
||||
}
|
||||
|
||||
override fun zoomOut() {
|
||||
if (layoutManager.spanCount < MAX_COLUMN_COUNT) {
|
||||
increaseColumnCount()
|
||||
getRecyclerAdapter()?.finishActMode()
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
zoomListener = null
|
||||
}
|
||||
}
|
||||
|
||||
private fun tryToggleTemporarilyShowHidden() {
|
||||
if (config.temporarilyShowHidden) {
|
||||
toggleTemporarilyShowHidden(false)
|
||||
} else {
|
||||
handleHiddenFolderPasswordProtection {
|
||||
toggleTemporarilyShowHidden(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun toggleTemporarilyShowHidden(show: Boolean) {
|
||||
config.temporarilyShowHidden = show
|
||||
ensureBackgroundThread {
|
||||
reFetchItems()
|
||||
}
|
||||
}
|
||||
}
|
|
@ -231,7 +231,12 @@ class ReadTextActivity : SimpleActivity() {
|
|||
filePath = uri.path!!
|
||||
val file = File(filePath)
|
||||
if (file.exists()) {
|
||||
file.readText()
|
||||
try {
|
||||
file.readText()
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
""
|
||||
}
|
||||
} else {
|
||||
toast(R.string.unknown_error_occurred)
|
||||
""
|
||||
|
|
|
@ -57,7 +57,7 @@ import java.util.zip.ZipOutputStream
|
|||
|
||||
class ItemsAdapter(
|
||||
activity: SimpleActivity, var listItems: MutableList<ListItem>, val listener: ItemOperationsListener?, recyclerView: MyRecyclerView,
|
||||
val isPickMultipleIntent: Boolean, fastScroller: FastScroller?, val swipeRefreshLayout: SwipeRefreshLayout, itemClick: (Any) -> Unit
|
||||
val isPickMultipleIntent: Boolean, fastScroller: FastScroller?, val swipeRefreshLayout: SwipeRefreshLayout?, itemClick: (Any) -> Unit
|
||||
) :
|
||||
MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) {
|
||||
|
||||
|
@ -138,12 +138,12 @@ class ItemsAdapter(
|
|||
override fun getItemKeyPosition(key: Int) = listItems.indexOfFirst { it.path.hashCode() == key }
|
||||
|
||||
override fun onActionModeCreated() {
|
||||
swipeRefreshLayout.isRefreshing = false
|
||||
swipeRefreshLayout.isEnabled = false
|
||||
swipeRefreshLayout?.isRefreshing = false
|
||||
swipeRefreshLayout?.isEnabled = false
|
||||
}
|
||||
|
||||
override fun onActionModeDestroyed() {
|
||||
swipeRefreshLayout.isEnabled = true
|
||||
swipeRefreshLayout?.isEnabled = true
|
||||
}
|
||||
|
||||
override fun getItemViewType(position: Int): Int {
|
||||
|
@ -216,20 +216,20 @@ class ItemsAdapter(
|
|||
RenameItemDialog(activity, oldPath) {
|
||||
activity.config.moveFavorite(oldPath, it)
|
||||
activity.runOnUiThread {
|
||||
listener?.refreshItems()
|
||||
listener?.refreshFragment()
|
||||
finishActMode()
|
||||
}
|
||||
}
|
||||
}
|
||||
fileDirItems.any { it.isDirectory } -> RenameItemsDialog(activity, paths) {
|
||||
activity.runOnUiThread {
|
||||
listener?.refreshItems()
|
||||
listener?.refreshFragment()
|
||||
finishActMode()
|
||||
}
|
||||
}
|
||||
else -> RenameDialog(activity, paths, false) {
|
||||
activity.runOnUiThread {
|
||||
listener?.refreshItems()
|
||||
listener?.refreshFragment()
|
||||
finishActMode()
|
||||
}
|
||||
}
|
||||
|
@ -260,7 +260,7 @@ class ItemsAdapter(
|
|||
activity.toggleItemVisibility(it.path, hide)
|
||||
}
|
||||
activity.runOnUiThread {
|
||||
listener?.refreshItems()
|
||||
listener?.refreshFragment()
|
||||
finishActMode()
|
||||
}
|
||||
}
|
||||
|
@ -405,7 +405,7 @@ class ItemsAdapter(
|
|||
val sourcePath = sourceFileDir.path
|
||||
if (activity.isRestrictedAndroidDir(sourcePath) && activity.getDoesFilePathExist(sourcePath)) {
|
||||
activity.deleteFile(sourceFileDir, true) {
|
||||
listener?.refreshItems()
|
||||
listener?.refreshFragment()
|
||||
activity.runOnUiThread {
|
||||
finishActMode()
|
||||
}
|
||||
|
@ -417,19 +417,19 @@ class ItemsAdapter(
|
|||
) {
|
||||
val sourceFolder = sourceFile.toFileDirItem(activity)
|
||||
activity.deleteFile(sourceFolder, true) {
|
||||
listener?.refreshItems()
|
||||
listener?.refreshFragment()
|
||||
activity.runOnUiThread {
|
||||
finishActMode()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
listener?.refreshItems()
|
||||
listener?.refreshFragment()
|
||||
finishActMode()
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
listener?.refreshItems()
|
||||
listener?.refreshFragment()
|
||||
finishActMode()
|
||||
}
|
||||
}
|
||||
|
@ -449,7 +449,7 @@ class ItemsAdapter(
|
|||
}
|
||||
|
||||
activity.runOnUiThread {
|
||||
listener?.refreshItems()
|
||||
listener?.refreshFragment()
|
||||
finishActMode()
|
||||
}
|
||||
}
|
||||
|
@ -480,7 +480,7 @@ class ItemsAdapter(
|
|||
if (compressPaths(paths, destination)) {
|
||||
activity.runOnUiThread {
|
||||
activity.toast(R.string.compression_successful)
|
||||
listener?.refreshItems()
|
||||
listener?.refreshFragment()
|
||||
finishActMode()
|
||||
}
|
||||
} else {
|
||||
|
@ -509,7 +509,7 @@ class ItemsAdapter(
|
|||
if (it) {
|
||||
activity.toast(R.string.decompression_successful)
|
||||
activity.runOnUiThread {
|
||||
listener?.refreshItems()
|
||||
listener?.refreshFragment()
|
||||
finishActMode()
|
||||
}
|
||||
} else {
|
||||
|
@ -541,7 +541,6 @@ class ItemsAdapter(
|
|||
}
|
||||
}
|
||||
} catch (exception: Exception) {
|
||||
exception.printStackTrace()
|
||||
activity.showErrorToast(exception)
|
||||
}
|
||||
}
|
||||
|
@ -684,7 +683,6 @@ class ItemsAdapter(
|
|||
}
|
||||
}
|
||||
} catch (exception: Exception) {
|
||||
exception.printStackTrace()
|
||||
activity.showErrorToast(exception)
|
||||
return false
|
||||
} finally {
|
||||
|
@ -892,7 +890,6 @@ class ItemsAdapter(
|
|||
itemToLoad = getOTGPublicPath(itemToLoad)
|
||||
}
|
||||
|
||||
|
||||
return itemToLoad
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import android.view.ViewGroup
|
|||
import androidx.viewpager.widget.PagerAdapter
|
||||
import com.simplemobiletools.commons.helpers.TAB_FILES
|
||||
import com.simplemobiletools.commons.helpers.TAB_RECENT_FILES
|
||||
import com.simplemobiletools.commons.helpers.TAB_STORAGE_ANALYSIS
|
||||
import com.simplemobiletools.filemanager.pro.R
|
||||
import com.simplemobiletools.filemanager.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.filemanager.pro.extensions.config
|
||||
|
@ -19,7 +20,7 @@ class ViewPagerAdapter(val activity: SimpleActivity) : PagerAdapter() {
|
|||
|
||||
(view as MyViewPagerFragment).apply {
|
||||
setupFragment(activity)
|
||||
setupColors(activity.config.textColor, activity.config.primaryColor)
|
||||
onResume(activity.config.textColor, activity.config.primaryColor)
|
||||
}
|
||||
|
||||
return view
|
||||
|
@ -44,6 +45,10 @@ class ViewPagerAdapter(val activity: SimpleActivity) : PagerAdapter() {
|
|||
fragments.add(R.layout.recents_fragment)
|
||||
}
|
||||
|
||||
if (showTabs and TAB_STORAGE_ANALYSIS != 0) {
|
||||
fragments.add(R.layout.storage_fragment)
|
||||
}
|
||||
|
||||
return fragments[position]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,13 +2,17 @@ package com.simplemobiletools.filemanager.pro.dialogs
|
|||
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
||||
import com.simplemobiletools.commons.extensions.beGone
|
||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
import com.simplemobiletools.commons.helpers.TAB_FILES
|
||||
import com.simplemobiletools.commons.helpers.TAB_RECENT_FILES
|
||||
import com.simplemobiletools.commons.helpers.TAB_STORAGE_ANALYSIS
|
||||
import com.simplemobiletools.commons.helpers.isOreoPlus
|
||||
import com.simplemobiletools.commons.views.MyAppCompatCheckbox
|
||||
import com.simplemobiletools.filemanager.pro.R
|
||||
import com.simplemobiletools.filemanager.pro.extensions.config
|
||||
import com.simplemobiletools.filemanager.pro.helpers.ALL_TABS_MASK
|
||||
import kotlinx.android.synthetic.main.dialog_manage_visible_tabs.view.*
|
||||
|
||||
class ManageVisibleTabsDialog(val activity: BaseSimpleActivity) {
|
||||
private var view = activity.layoutInflater.inflate(R.layout.dialog_manage_visible_tabs, null)
|
||||
|
@ -18,6 +22,11 @@ class ManageVisibleTabsDialog(val activity: BaseSimpleActivity) {
|
|||
tabs.apply {
|
||||
put(TAB_FILES, R.id.manage_visible_tabs_files)
|
||||
put(TAB_RECENT_FILES, R.id.manage_visible_tabs_recent_files)
|
||||
put(TAB_STORAGE_ANALYSIS, R.id.manage_visible_tabs_storage_analysis)
|
||||
}
|
||||
|
||||
if (!isOreoPlus()) {
|
||||
view.manage_visible_tabs_storage_analysis.beGone()
|
||||
}
|
||||
|
||||
val showTabs = activity.config.showTabs
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
package com.simplemobiletools.filemanager.pro.extensions
|
||||
|
||||
import java.text.DecimalFormat
|
||||
|
||||
// use 1000 instead of 1024 at dividing
|
||||
fun Long.formatSizeThousand(): String {
|
||||
if (this <= 0) {
|
||||
return "0 B"
|
||||
}
|
||||
|
||||
val units = arrayOf("B", "kB", "MB", "GB", "TB")
|
||||
val digitGroups = (Math.log10(toDouble()) / Math.log10(1000.0)).toInt()
|
||||
return "${DecimalFormat("#,##0.#").format(this / Math.pow(1000.0, digitGroups.toDouble()))} ${units[digitGroups]}"
|
||||
}
|
|
@ -42,13 +42,13 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF
|
|||
override fun setupFragment(activity: SimpleActivity) {
|
||||
if (this.activity == null) {
|
||||
this.activity = activity
|
||||
items_swipe_refresh.setOnRefreshListener { refreshItems() }
|
||||
items_swipe_refresh.setOnRefreshListener { refreshFragment() }
|
||||
items_fab.setOnClickListener { createNewItem() }
|
||||
breadcrumbs.listener = this@ItemsFragment
|
||||
}
|
||||
}
|
||||
|
||||
override fun setupColors(textColor: Int, primaryColor: Int) {
|
||||
override fun onResume(textColor: Int, primaryColor: Int) {
|
||||
context!!.updateTextColors(this)
|
||||
items_fastscroller.updatePrimaryColor()
|
||||
storedItems = ArrayList()
|
||||
|
@ -286,24 +286,24 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF
|
|||
override fun searchQueryChanged(text: String) {
|
||||
val searchText = text.trim()
|
||||
lastSearchedText = searchText
|
||||
ensureBackgroundThread {
|
||||
if (context == null) {
|
||||
return@ensureBackgroundThread
|
||||
}
|
||||
if (context == null) {
|
||||
return
|
||||
}
|
||||
|
||||
when {
|
||||
searchText.isEmpty() -> activity?.runOnUiThread {
|
||||
items_list.beVisible()
|
||||
getRecyclerAdapter()?.updateItems(storedItems)
|
||||
items_placeholder.beGone()
|
||||
items_placeholder_2.beGone()
|
||||
}
|
||||
searchText.length == 1 -> activity?.runOnUiThread {
|
||||
items_list.beGone()
|
||||
items_placeholder.beVisible()
|
||||
items_placeholder_2.beVisible()
|
||||
}
|
||||
else -> {
|
||||
when {
|
||||
searchText.isEmpty() -> {
|
||||
items_list.beVisible()
|
||||
getRecyclerAdapter()?.updateItems(storedItems)
|
||||
items_placeholder.beGone()
|
||||
items_placeholder_2.beGone()
|
||||
}
|
||||
searchText.length == 1 -> {
|
||||
items_list.beGone()
|
||||
items_placeholder.beVisible()
|
||||
items_placeholder_2.beVisible()
|
||||
}
|
||||
else -> {
|
||||
ensureBackgroundThread {
|
||||
val files = searchFiles(searchText, currentPath)
|
||||
files.sortBy { it.getParentPath() }
|
||||
|
||||
|
@ -408,7 +408,7 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF
|
|||
private fun createNewItem() {
|
||||
CreateNewItemDialog(activity as SimpleActivity, currentPath) {
|
||||
if (it) {
|
||||
refreshItems()
|
||||
refreshFragment()
|
||||
} else {
|
||||
activity?.toast(R.string.unknown_error_occurred)
|
||||
}
|
||||
|
@ -521,7 +521,7 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF
|
|||
}
|
||||
}
|
||||
|
||||
override fun refreshItems() {
|
||||
override fun refreshFragment() {
|
||||
openPath(currentPath)
|
||||
}
|
||||
|
||||
|
|
|
@ -36,21 +36,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
|
|||
|
||||
abstract fun setupFragment(activity: SimpleActivity)
|
||||
|
||||
abstract fun setupColors(textColor: Int, primaryColor: Int)
|
||||
abstract fun onResume(textColor: Int, primaryColor: Int)
|
||||
|
||||
abstract fun setupFontSize()
|
||||
|
||||
abstract fun setupDateTimeFormat()
|
||||
|
||||
abstract fun searchQueryChanged(text: String)
|
||||
|
||||
abstract fun finishActMode()
|
||||
|
||||
abstract fun toggleFilenameVisibility()
|
||||
|
||||
abstract fun increaseColumnCount()
|
||||
|
||||
abstract fun reduceColumnCount()
|
||||
|
||||
abstract fun refreshItems()
|
||||
abstract fun refreshFragment()
|
||||
}
|
||||
|
|
|
@ -29,13 +29,13 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
|||
override fun setupFragment(activity: SimpleActivity) {
|
||||
if (this.activity == null) {
|
||||
this.activity = activity
|
||||
recents_swipe_refresh.setOnRefreshListener { refreshItems() }
|
||||
recents_swipe_refresh.setOnRefreshListener { refreshFragment() }
|
||||
}
|
||||
|
||||
refreshItems()
|
||||
refreshFragment()
|
||||
}
|
||||
|
||||
override fun refreshItems() {
|
||||
override fun refreshFragment() {
|
||||
ensureBackgroundThread {
|
||||
getRecents { recents ->
|
||||
recents_swipe_refresh?.isRefreshing = false
|
||||
|
@ -66,7 +66,7 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
|||
}
|
||||
}
|
||||
|
||||
override fun setupColors(textColor: Int, primaryColor: Int) {
|
||||
override fun onResume(textColor: Int, primaryColor: Int) {
|
||||
recents_placeholder.setTextColor(textColor)
|
||||
|
||||
getRecyclerAdapter()?.apply {
|
||||
|
|
|
@ -0,0 +1,224 @@
|
|||
package com.simplemobiletools.filemanager.pro.fragments
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.usage.StorageStatsManager
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.storage.StorageManager
|
||||
import android.provider.MediaStore
|
||||
import android.provider.Settings
|
||||
import android.util.AttributeSet
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
import com.simplemobiletools.commons.helpers.isOreoPlus
|
||||
import com.simplemobiletools.filemanager.pro.R
|
||||
import com.simplemobiletools.filemanager.pro.activities.MimeTypesActivity
|
||||
import com.simplemobiletools.filemanager.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.filemanager.pro.extensions.formatSizeThousand
|
||||
import com.simplemobiletools.filemanager.pro.helpers.*
|
||||
import kotlinx.android.synthetic.main.storage_fragment.view.*
|
||||
import java.util.*
|
||||
import kotlin.collections.HashMap
|
||||
|
||||
class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet) {
|
||||
private val SIZE_DIVIDER = 100000
|
||||
|
||||
override fun setupFragment(activity: SimpleActivity) {
|
||||
total_space.text = String.format(context.getString(R.string.total_storage), "…")
|
||||
getSizes()
|
||||
|
||||
free_space_holder.setOnClickListener {
|
||||
try {
|
||||
val storageSettingsIntent = Intent(Settings.ACTION_INTERNAL_STORAGE_SETTINGS)
|
||||
activity.startActivity(storageSettingsIntent)
|
||||
} catch (e: Exception) {
|
||||
activity.showErrorToast(e)
|
||||
}
|
||||
}
|
||||
|
||||
images_holder.setOnClickListener { launchMimetypeActivity(IMAGES) }
|
||||
videos_holder.setOnClickListener { launchMimetypeActivity(VIDEOS) }
|
||||
audio_holder.setOnClickListener { launchMimetypeActivity(AUDIO) }
|
||||
documents_holder.setOnClickListener { launchMimetypeActivity(DOCUMENTS) }
|
||||
archives_holder.setOnClickListener { launchMimetypeActivity(ARCHIVES) }
|
||||
others_holder.setOnClickListener { launchMimetypeActivity(OTHERS) }
|
||||
}
|
||||
|
||||
override fun refreshFragment() {}
|
||||
|
||||
override fun onResume(textColor: Int, primaryColor: Int) {
|
||||
getSizes()
|
||||
context.updateTextColors(storage_fragment)
|
||||
|
||||
main_storage_usage_progressbar.setIndicatorColor(primaryColor)
|
||||
main_storage_usage_progressbar.trackColor = primaryColor.adjustAlpha(0.3f)
|
||||
|
||||
val redColor = context.resources.getColor(R.color.md_red_700)
|
||||
images_progressbar.setIndicatorColor(redColor)
|
||||
images_progressbar.trackColor = redColor.adjustAlpha(0.3f)
|
||||
|
||||
val greenColor = context.resources.getColor(R.color.md_green_700)
|
||||
videos_progressbar.setIndicatorColor(greenColor)
|
||||
videos_progressbar.trackColor = greenColor.adjustAlpha(0.3f)
|
||||
|
||||
val lightBlueColor = context.resources.getColor(R.color.md_light_blue_700)
|
||||
audio_progressbar.setIndicatorColor(lightBlueColor)
|
||||
audio_progressbar.trackColor = lightBlueColor.adjustAlpha(0.3f)
|
||||
|
||||
val yellowColor = context.resources.getColor(R.color.md_yellow_700)
|
||||
documents_progressbar.setIndicatorColor(yellowColor)
|
||||
documents_progressbar.trackColor = yellowColor.adjustAlpha(0.3f)
|
||||
|
||||
val tealColor = context.resources.getColor(R.color.md_teal_700)
|
||||
archives_progressbar.setIndicatorColor(tealColor)
|
||||
archives_progressbar.trackColor = tealColor.adjustAlpha(0.3f)
|
||||
|
||||
val pinkColor = context.resources.getColor(R.color.md_pink_700)
|
||||
others_progressbar.setIndicatorColor(pinkColor)
|
||||
others_progressbar.trackColor = pinkColor.adjustAlpha(0.3f)
|
||||
}
|
||||
|
||||
private fun launchMimetypeActivity(mimetype: String) {
|
||||
Intent(context, MimeTypesActivity::class.java).apply {
|
||||
putExtra(SHOW_MIMETYPE, mimetype)
|
||||
context.startActivity(this)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getSizes() {
|
||||
if (!isOreoPlus()) {
|
||||
return
|
||||
}
|
||||
|
||||
ensureBackgroundThread {
|
||||
getMainStorageStats(context)
|
||||
|
||||
val filesSize = getSizesByMimeType()
|
||||
val imagesSize = filesSize[IMAGES]!!
|
||||
val videosSize = filesSize[VIDEOS]!!
|
||||
val audioSize = filesSize[AUDIO]!!
|
||||
val documentsSize = filesSize[DOCUMENTS]!!
|
||||
val archivesSize = filesSize[ARCHIVES]!!
|
||||
val othersSize = filesSize[OTHERS]!!
|
||||
|
||||
post {
|
||||
images_size.text = imagesSize.formatSize()
|
||||
images_progressbar.progress = (imagesSize / SIZE_DIVIDER).toInt()
|
||||
|
||||
videos_size.text = videosSize.formatSize()
|
||||
videos_progressbar.progress = (videosSize / SIZE_DIVIDER).toInt()
|
||||
|
||||
audio_size.text = audioSize.formatSize()
|
||||
audio_progressbar.progress = (audioSize / SIZE_DIVIDER).toInt()
|
||||
|
||||
documents_size.text = documentsSize.formatSize()
|
||||
documents_progressbar.progress = (documentsSize / SIZE_DIVIDER).toInt()
|
||||
|
||||
archives_size.text = archivesSize.formatSize()
|
||||
archives_progressbar.progress = (archivesSize / SIZE_DIVIDER).toInt()
|
||||
|
||||
others_size.text = othersSize.formatSize()
|
||||
others_progressbar.progress = (othersSize / SIZE_DIVIDER).toInt()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getSizesByMimeType(): HashMap<String, Long> {
|
||||
val uri = MediaStore.Files.getContentUri("external")
|
||||
val projection = arrayOf(
|
||||
MediaStore.Files.FileColumns.SIZE,
|
||||
MediaStore.Files.FileColumns.MIME_TYPE,
|
||||
MediaStore.Files.FileColumns.DATA
|
||||
)
|
||||
|
||||
var imagesSize = 0L
|
||||
var videosSize = 0L
|
||||
var audioSize = 0L
|
||||
var documentsSize = 0L
|
||||
var archivesSize = 0L
|
||||
var othersSize = 0L
|
||||
try {
|
||||
context.queryCursor(uri, projection) { cursor ->
|
||||
try {
|
||||
val mimeType = cursor.getStringValue(MediaStore.Files.FileColumns.MIME_TYPE)?.lowercase(Locale.getDefault())
|
||||
val size = cursor.getLongValue(MediaStore.Files.FileColumns.SIZE)
|
||||
if (mimeType == null) {
|
||||
if (size > 0 && size != 4096L) {
|
||||
val path = cursor.getStringValue(MediaStore.Files.FileColumns.DATA)
|
||||
if (!context.getIsPathDirectory(path)) {
|
||||
othersSize += size
|
||||
}
|
||||
}
|
||||
return@queryCursor
|
||||
}
|
||||
|
||||
when (mimeType.substringBefore("/")) {
|
||||
"image" -> imagesSize += size
|
||||
"video" -> videosSize += size
|
||||
"audio" -> audioSize += size
|
||||
"text" -> documentsSize += size
|
||||
else -> {
|
||||
when {
|
||||
extraDocumentMimeTypes.contains(mimeType) -> documentsSize += size
|
||||
extraAudioMimeTypes.contains(mimeType) -> audioSize += size
|
||||
archiveMimeTypes.contains(mimeType) -> archivesSize += size
|
||||
else -> othersSize += size
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
|
||||
val mimeTypeSizes = HashMap<String, Long>().apply {
|
||||
put(IMAGES, imagesSize)
|
||||
put(VIDEOS, videosSize)
|
||||
put(AUDIO, audioSize)
|
||||
put(DOCUMENTS, documentsSize)
|
||||
put(ARCHIVES, archivesSize)
|
||||
put(OTHERS, othersSize)
|
||||
}
|
||||
|
||||
return mimeTypeSizes
|
||||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
private fun getMainStorageStats(context: Context) {
|
||||
val externalDirs = context.getExternalFilesDirs(null)
|
||||
val storageManager = context.getSystemService(AppCompatActivity.STORAGE_SERVICE) as StorageManager
|
||||
|
||||
externalDirs.forEach { file ->
|
||||
val storageVolume = storageManager.getStorageVolume(file) ?: return
|
||||
if (storageVolume.isPrimary) {
|
||||
// internal storage
|
||||
val storageStatsManager = context.getSystemService(AppCompatActivity.STORAGE_STATS_SERVICE) as StorageStatsManager
|
||||
val uuid = StorageManager.UUID_DEFAULT
|
||||
val totalSpace = storageStatsManager.getTotalBytes(uuid)
|
||||
val freeSpace = storageStatsManager.getFreeBytes(uuid)
|
||||
|
||||
post {
|
||||
arrayOf(
|
||||
main_storage_usage_progressbar, images_progressbar, videos_progressbar, audio_progressbar, documents_progressbar,
|
||||
archives_progressbar, others_progressbar
|
||||
).forEach {
|
||||
it.max = (totalSpace / SIZE_DIVIDER).toInt()
|
||||
}
|
||||
|
||||
main_storage_usage_progressbar.progress = ((totalSpace - freeSpace) / SIZE_DIVIDER).toInt()
|
||||
|
||||
main_storage_usage_progressbar.beVisible()
|
||||
free_space_value.text = freeSpace.formatSizeThousand()
|
||||
total_space.text = String.format(context.getString(R.string.total_storage), totalSpace.formatSizeThousand())
|
||||
free_space_label.beVisible()
|
||||
}
|
||||
} else {
|
||||
// sd card
|
||||
val totalSpace = file.totalSpace
|
||||
val freeSpace = file.freeSpace
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -121,4 +121,8 @@ class Config(context: Context) : BaseConfig(context) {
|
|||
var showTabs: Int
|
||||
get() = prefs.getInt(SHOW_TABS, ALL_TABS_MASK)
|
||||
set(showTabs) = prefs.edit().putInt(SHOW_TABS, showTabs).apply()
|
||||
|
||||
var wasStorageAnalysisTabAdded: Boolean
|
||||
get() = prefs.getBoolean(WAS_STORAGE_ANALYSIS_TAB_ADDED, false)
|
||||
set(wasStorageAnalysisTabAdded) = prefs.edit().putBoolean(WAS_STORAGE_ANALYSIS_TAB_ADDED, wasStorageAnalysisTabAdded).apply()
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.simplemobiletools.filemanager.pro.helpers
|
|||
|
||||
import com.simplemobiletools.commons.helpers.TAB_FILES
|
||||
import com.simplemobiletools.commons.helpers.TAB_RECENT_FILES
|
||||
import com.simplemobiletools.commons.helpers.TAB_STORAGE_ANALYSIS
|
||||
|
||||
const val PATH = "path"
|
||||
const val MAX_COLUMN_COUNT = 20
|
||||
|
@ -20,6 +21,7 @@ const val FILE_COLUMN_CNT = "file_column_cnt"
|
|||
const val FILE_LANDSCAPE_COLUMN_CNT = "file_landscape_column_cnt"
|
||||
const val DISPLAY_FILE_NAMES = "display_file_names"
|
||||
const val SHOW_TABS = "show_tabs"
|
||||
const val WAS_STORAGE_ANALYSIS_TAB_ADDED = "was_storage_analysis_tab_added"
|
||||
|
||||
// open as
|
||||
const val OPEN_AS_DEFAULT = 0
|
||||
|
@ -29,5 +31,37 @@ const val OPEN_AS_AUDIO = 3
|
|||
const val OPEN_AS_VIDEO = 4
|
||||
const val OPEN_AS_OTHER = 5
|
||||
|
||||
const val ALL_TABS_MASK = TAB_FILES or TAB_RECENT_FILES
|
||||
val tabsList = arrayListOf(TAB_FILES, TAB_RECENT_FILES)
|
||||
const val ALL_TABS_MASK = TAB_FILES or TAB_RECENT_FILES or TAB_STORAGE_ANALYSIS
|
||||
val tabsList = arrayListOf(TAB_FILES, TAB_RECENT_FILES, TAB_STORAGE_ANALYSIS)
|
||||
|
||||
const val IMAGES = "images"
|
||||
const val VIDEOS = "videos"
|
||||
const val AUDIO = "audio"
|
||||
const val DOCUMENTS = "documents"
|
||||
const val ARCHIVES = "archives"
|
||||
const val OTHERS = "others"
|
||||
const val SHOW_MIMETYPE = "show_mimetype"
|
||||
|
||||
// what else should we count as an audio except "audio/*" mimetype
|
||||
val extraAudioMimeTypes = arrayListOf("application/ogg")
|
||||
val extraDocumentMimeTypes = arrayListOf(
|
||||
"application/pdf",
|
||||
"application/msword",
|
||||
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
||||
"application/javascript"
|
||||
)
|
||||
|
||||
val archiveMimeTypes = arrayListOf(
|
||||
"application/zip",
|
||||
"application/octet-stream",
|
||||
"application/json",
|
||||
"application/x-tar",
|
||||
"application/x-rar-compressed",
|
||||
"application/x-zip-compressed",
|
||||
"application/x-7z-compressed",
|
||||
"application/x-compressed",
|
||||
"application/x-gzip",
|
||||
"application/java-archive",
|
||||
"multipart/x-zip"
|
||||
)
|
||||
|
|
|
@ -4,9 +4,23 @@ import com.simplemobiletools.commons.models.FileDirItem
|
|||
import java.util.*
|
||||
|
||||
interface ItemOperationsListener {
|
||||
fun refreshItems()
|
||||
fun refreshFragment()
|
||||
|
||||
fun deleteFiles(files: ArrayList<FileDirItem>)
|
||||
|
||||
fun selectedPaths(paths: ArrayList<String>)
|
||||
|
||||
fun searchQueryChanged(text: String)
|
||||
|
||||
fun setupDateTimeFormat()
|
||||
|
||||
fun setupFontSize()
|
||||
|
||||
fun toggleFilenameVisibility()
|
||||
|
||||
fun increaseColumnCount()
|
||||
|
||||
fun reduceColumnCount()
|
||||
|
||||
fun finishActMode()
|
||||
}
|
||||
|
|
|
@ -2,5 +2,6 @@ package com.simplemobiletools.filemanager.pro.models
|
|||
|
||||
import com.simplemobiletools.commons.models.FileDirItem
|
||||
|
||||
// isSectionTitle is used only at search results for showing the current folders path
|
||||
data class ListItem(val mPath: String, val mName: String = "", var mIsDirectory: Boolean = false, var mChildren: Int = 0, var mSize: Long = 0L, var mModified: Long = 0L,
|
||||
var isSectionTitle: Boolean) : FileDirItem(mPath, mName, mIsDirectory, mChildren, mSize, mModified)
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:pathData="M2,20h20v-4L2,16v4zM4,17h2v2L4,19v-2zM2,4v4h20L22,4L2,4zM6,7L4,7L4,5h2v2zM2,14h20v-4L2,10v4zM4,11h2v2L4,13v-2z" />
|
||||
</vector>
|
|
@ -0,0 +1,58 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/mimetypes_holder"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/mimetypes_placeholder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:alpha="0.8"
|
||||
android:gravity="center"
|
||||
android:paddingStart="@dimen/activity_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingEnd="@dimen/activity_margin"
|
||||
android:text="@string/no_items_found"
|
||||
android:textSize="@dimen/bigger_text_size"
|
||||
android:textStyle="italic"
|
||||
android:visibility="gone" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/mimetypes_placeholder_2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/mimetypes_placeholder"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:alpha="0.8"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:gravity="center"
|
||||
android:padding="@dimen/activity_margin"
|
||||
android:text="@string/type_2_characters"
|
||||
android:textSize="@dimen/bigger_text_size"
|
||||
android:textStyle="italic"
|
||||
android:visibility="gone" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyRecyclerView
|
||||
android:id="@+id/mimetypes_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:clipToPadding="false"
|
||||
android:layoutAnimation="@anim/layout_animation"
|
||||
android:paddingTop="@dimen/small_margin"
|
||||
android:scrollbars="none"
|
||||
app:layoutManager="com.simplemobiletools.commons.views.MyGridLayoutManager" />
|
||||
|
||||
<com.simplemobiletools.commons.views.FastScroller
|
||||
android:id="@+id/items_fastscroller"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:paddingStart="@dimen/normal_margin">
|
||||
|
||||
<include layout="@layout/fastscroller_handle_vertical" />
|
||||
|
||||
</com.simplemobiletools.commons.views.FastScroller>
|
||||
</RelativeLayout>
|
|
@ -29,5 +29,13 @@
|
|||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:text="@string/recent_files_tab" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
|
||||
android:id="@+id/manage_visible_tabs_storage_analysis"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:text="@string/storage_analysis" />
|
||||
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
|
|
|
@ -0,0 +1,305 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.simplemobiletools.filemanager.pro.fragments.StorageFragment xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/storage_fragment"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ScrollView
|
||||
android:id="@+id/storage_scrollview"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/storage_holder"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:ignore="HardcodedText,RelativeOverlap">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/free_space_holder"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingStart="@dimen/activity_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingEnd="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/free_space_value"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="…"
|
||||
android:textSize="@dimen/storage_free_space_text_size"
|
||||
tools:text="23 GB" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/free_space_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_above="@+id/total_space"
|
||||
android:layout_alignBaseline="@+id/free_space_value"
|
||||
android:layout_alignBottom="@+id/free_space_value"
|
||||
android:layout_marginStart="@dimen/medium_margin"
|
||||
android:layout_toEndOf="@+id/free_space_value"
|
||||
android:text="@string/storage_free"
|
||||
android:textSize="@dimen/big_text_size"
|
||||
android:visibility="invisible" />
|
||||
|
||||
<com.google.android.material.progressindicator.LinearProgressIndicator
|
||||
android:id="@+id/main_storage_usage_progressbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/free_space_value"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:layout_marginBottom="@dimen/medium_margin"
|
||||
android:max="100"
|
||||
app:trackThickness="4dp" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/total_space"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/main_storage_usage_progressbar"
|
||||
android:layout_marginBottom="@dimen/big_margin"
|
||||
android:textSize="@dimen/big_text_size"
|
||||
tools:text="Total storage: 64 GB" />
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/images_holder"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/free_space_holder"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingStart="@dimen/activity_margin"
|
||||
android:paddingTop="@dimen/normal_margin"
|
||||
android:paddingEnd="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/normal_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/images_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/images"
|
||||
android:textSize="@dimen/bigger_text_size" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/images_size"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:alpha="0.7"
|
||||
android:text="…"
|
||||
android:textSize="@dimen/normal_text_size"
|
||||
tools:text="20 GB" />
|
||||
|
||||
<com.google.android.material.progressindicator.LinearProgressIndicator
|
||||
android:id="@+id/images_progressbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/images_label"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:layout_marginBottom="@dimen/medium_margin"
|
||||
android:max="100"
|
||||
app:trackThickness="2dp" />
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/videos_holder"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/images_holder"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingStart="@dimen/activity_margin"
|
||||
android:paddingTop="@dimen/normal_margin"
|
||||
android:paddingEnd="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/normal_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/videos_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/videos"
|
||||
android:textSize="@dimen/bigger_text_size" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/videos_size"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:alpha="0.7"
|
||||
android:text="…"
|
||||
android:textSize="@dimen/normal_text_size"
|
||||
tools:text="20 GB" />
|
||||
|
||||
<com.google.android.material.progressindicator.LinearProgressIndicator
|
||||
android:id="@+id/videos_progressbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/videos_label"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:layout_marginBottom="@dimen/medium_margin"
|
||||
android:max="100"
|
||||
app:trackThickness="2dp" />
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/audio_holder"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/videos_holder"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingStart="@dimen/activity_margin"
|
||||
android:paddingTop="@dimen/normal_margin"
|
||||
android:paddingEnd="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/normal_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/audio_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/audio"
|
||||
android:textSize="@dimen/bigger_text_size" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/audio_size"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:alpha="0.7"
|
||||
android:text="…"
|
||||
android:textSize="@dimen/normal_text_size"
|
||||
tools:text="20 GB" />
|
||||
|
||||
<com.google.android.material.progressindicator.LinearProgressIndicator
|
||||
android:id="@+id/audio_progressbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/audio_label"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:layout_marginBottom="@dimen/medium_margin"
|
||||
android:max="100"
|
||||
app:trackThickness="2dp" />
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/documents_holder"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/audio_holder"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingStart="@dimen/activity_margin"
|
||||
android:paddingTop="@dimen/normal_margin"
|
||||
android:paddingEnd="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/normal_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/documents_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/documents"
|
||||
android:textSize="@dimen/bigger_text_size" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/documents_size"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:alpha="0.7"
|
||||
android:text="…"
|
||||
android:textSize="@dimen/normal_text_size"
|
||||
tools:text="20 GB" />
|
||||
|
||||
<com.google.android.material.progressindicator.LinearProgressIndicator
|
||||
android:id="@+id/documents_progressbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/documents_label"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:layout_marginBottom="@dimen/medium_margin"
|
||||
android:max="100"
|
||||
app:trackThickness="2dp" />
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/archives_holder"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/documents_holder"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingStart="@dimen/activity_margin"
|
||||
android:paddingTop="@dimen/normal_margin"
|
||||
android:paddingEnd="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/normal_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/archives_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/archives"
|
||||
android:textSize="@dimen/bigger_text_size" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/archives_size"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:alpha="0.7"
|
||||
android:text="…"
|
||||
android:textSize="@dimen/normal_text_size"
|
||||
tools:text="20 GB" />
|
||||
|
||||
<com.google.android.material.progressindicator.LinearProgressIndicator
|
||||
android:id="@+id/archives_progressbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/archives_label"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:layout_marginBottom="@dimen/medium_margin"
|
||||
android:max="100"
|
||||
app:trackThickness="2dp" />
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/others_holder"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/archives_holder"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingStart="@dimen/activity_margin"
|
||||
android:paddingTop="@dimen/normal_margin"
|
||||
android:paddingEnd="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/normal_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/others_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/others"
|
||||
android:textSize="@dimen/bigger_text_size" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/others_size"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:alpha="0.7"
|
||||
android:text="…"
|
||||
android:textSize="@dimen/normal_text_size"
|
||||
tools:text="20 GB" />
|
||||
|
||||
<com.google.android.material.progressindicator.LinearProgressIndicator
|
||||
android:id="@+id/others_progressbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/others_label"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:layout_marginBottom="@dimen/medium_margin"
|
||||
android:max="100"
|
||||
app:trackThickness="2dp" />
|
||||
</RelativeLayout>
|
||||
</RelativeLayout>
|
||||
</ScrollView>
|
||||
</com.simplemobiletools.filemanager.pro.fragments.StorageFragment>
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">محرر الملفات</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">تفعيل الدخول الى مسار الروت</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Fayl Redaktəsi</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Root icazəsini aktivləşdir</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Editor souborů</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Povolit přístup ke kořenovým souborům</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Golygydd Ffeiliau</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Galluogi mynediad craidd</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Fileditor</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Aktiver root-adgang</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Dateieditor</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Root-Zugriff erlauben</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Επεξεργαστής αρχείων</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Ανάλυση Αποθήκευσης</string>
|
||||
<string name="images">Εικόνες</string>
|
||||
<string name="videos">Βίντεο</string>
|
||||
<string name="audio">Ήχοι</string>
|
||||
<string name="documents">Έγγραφα</string>
|
||||
<string name="downloads">Λήψεις</string>
|
||||
<string name="archives">Αρχεία</string>
|
||||
<string name="others">Άλλα</string>
|
||||
<string name="storage_free">ελεύθερα</string>
|
||||
<string name="total_storage">Σύνολο: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Ενεργοποιήστε την πρόσβαση ριζικού καταλόγου</string>
|
||||
<string name="press_back_twice">Απαιτείται διπλό πάτημα του πλήκτρου \"Πίσω\" για κλείσιμο εφαρμογής</string>
|
||||
|
|
|
@ -11,8 +11,8 @@
|
|||
<string name="select_audio_file">Por favor, seleccione un archivo de audio</string>
|
||||
<string name="search_folder">Buscar carpeta</string>
|
||||
<string name="rooted_device_only">Esta operación solo funciona en dispositivos rooteados</string>
|
||||
<string name="recents">Recents</string>
|
||||
<string name="show_recents">Show recents</string>
|
||||
<string name="recents">Recientes</string>
|
||||
<string name="show_recents">Mostrar recientes</string>
|
||||
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Abrir como</string>
|
||||
|
@ -41,9 +41,21 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Editor de archivos</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Análisis de almacenamiento</string>
|
||||
<string name="images">Imágenes</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documentos</string>
|
||||
<string name="downloads">Descargas</string>
|
||||
<string name="archives">Archivos</string>
|
||||
<string name="others">Otros</string>
|
||||
<string name="storage_free">libre</string>
|
||||
<string name="total_storage">Almacenamiento total: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Activar acceso root</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
<string name="press_back_twice">Se requiere presionar el botón atras dos veces para salir de la app</string>
|
||||
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Tiedostoeditori</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Ota käyttöön root-ominaisuudet</string>
|
||||
<string name="press_back_twice">Ota käyttöön sovelluksesta poistuminen kahdella takaisin-painikkeen painalluksella</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Éditeur de fichier</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Activer les droits root</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -65,11 +65,11 @@
|
|||
Podes crear accesos directos nas pantallas para acceder rapidamente aos teus elementos favoritos.
|
||||
|
||||
Contén un editor de ficheiros lixeiro que pode empregar para imprimir documentos, editalos ou lelos facilmente usando xestos de zoom, sempre que sexa necesario.
|
||||
|
||||
|
||||
E, por último, vén cun deseño material e un tema escuro de xeito predeterminado, fornece unha excelente experiencia de usuario cun uso sinxelo. Ao non requirir acceso a Internet, tes máis privacidade, seguridade e estabilidade
|
||||
|
||||
Non contén anuncios nin permisos innecesarios. Dispón dun tema escuro e é totalmente de código aberto.
|
||||
|
||||
|
||||
<b>Visita a páxina nesta ligazón:</b>
|
||||
https://www.simplemobiletools.com
|
||||
|
|
@ -40,6 +40,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">फ़ाइल संपादक</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">रूट एक्सेस</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Uređivač datoteka</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Omogući root pristup</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">File Editor</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Enable root access</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Penyunting Berkas</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Aktifkan akses root</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Penyunting Berkas</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Aktifkan akses root</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Editor dei file</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Abilita accesso root</string>
|
||||
<string name="press_back_twice">Richiedi di premere Indietro due volte per uscire dall\'app</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">ファイル エディター</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">ルートアクセスを有効にする</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">텍스트 편집기</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">루트 접근 활성화</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Bylų redaktorius</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Įgalinti šakninę prieigą</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Filredigerer</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Aktiver root-tilgang</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Bewerken</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Opslaganalyse</string>
|
||||
<string name="images">Afbeeldingen</string>
|
||||
<string name="videos">Video</string>
|
||||
<string name="audio">Geluid</string>
|
||||
<string name="documents">Documenten</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archieven</string>
|
||||
<string name="others">Overig</string>
|
||||
<string name="storage_free">vrij</string>
|
||||
<string name="total_storage">Totale opslag: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Root-toegang inschakelen</string>
|
||||
<string name="press_back_twice">Twee keer op de terugknop drukken om af te sluiten</string>
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Prosty Menedżer Plików</string>
|
||||
<string name="app_launcher_name">Menedżer Plików</string>
|
||||
<string name="press_back_again">Naciśnij jeszcze raz, aby wyjść</string>
|
||||
<string name="go_to_home_folder">Przejdź do folderu głównego</string>
|
||||
<string name="set_as_home_folder">Ustaw jako folder główny</string>
|
||||
<string name="home_folder_updated">Folder główny zaktualizowany</string>
|
||||
<string name="app_name">Prosty menedżer plików</string>
|
||||
<string name="app_launcher_name">Menedżer plików</string>
|
||||
<string name="press_back_again">Naciśnij ponownie przycisk wstecz, aby wyjść</string>
|
||||
<string name="go_to_home_folder">Przejdź do folderu domowego</string>
|
||||
<string name="set_as_home_folder">Ustaw jako folder domowy</string>
|
||||
<string name="home_folder_updated">Folder domowy zaktualizowany</string>
|
||||
<string name="copy_path">Kopiuj ścieżkę do schowka</string>
|
||||
<string name="path_copied">Ścieżka skopiowana</string>
|
||||
<string name="select_audio_file">Proszę wybrać plik audio</string>
|
||||
<string name="search_folder">Przeszukaj folder</string>
|
||||
<string name="select_audio_file">Wybierz plik audio</string>
|
||||
<string name="search_folder">Przeszukaj folder</string>
|
||||
<string name="rooted_device_only">Ta operacja działa tylko na zrootowanych urządzeniach</string>
|
||||
<string name="recents">Recents</string>
|
||||
<string name="show_recents">Show recents</string>
|
||||
<string name="recents">Ostatnie</string>
|
||||
<string name="show_recents">Pokaż ostatnie</string>
|
||||
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Otwórz jako</string>
|
||||
|
@ -23,14 +23,14 @@
|
|||
<string name="other_file">Inny plik</string>
|
||||
|
||||
<!-- Compression -->
|
||||
<string name="compress">Skompresuj</string>
|
||||
<string name="compress">Spakuj</string>
|
||||
<string name="decompress">Rozpakuj</string>
|
||||
<string name="compress_as">Skompresuj jako</string>
|
||||
<string name="compressing">Kompresowanie…</string>
|
||||
<string name="compress_as">Spakuj jako</string>
|
||||
<string name="compressing">Pakowanie…</string>
|
||||
<string name="decompressing">Rozpakowywanie…</string>
|
||||
<string name="compression_successful">Kompresja udana</string>
|
||||
<string name="decompression_successful">Rozpakowywanie udane</string>
|
||||
<string name="compressing_failed">Kompresja nie powiodła się</string>
|
||||
<string name="compression_successful">Pakowanie powiodło się</string>
|
||||
<string name="decompression_successful">Rozpakowywanie powiodło się</string>
|
||||
<string name="compressing_failed">Pakowanie nie powiodło się</string>
|
||||
<string name="decompressing_failed">Rozpakowywanie nie powiodło się</string>
|
||||
|
||||
<!-- Favorites -->
|
||||
|
@ -39,44 +39,56 @@
|
|||
<string name="favorites_activity_placeholder">Możesz dodać często używane foldery do ulubionych, aby mieć do nich łatwy dostęp z dowolnego miejsca.</string>
|
||||
|
||||
<!-- File Editor -->
|
||||
<string name="file_editor">Edytor Plików</string>
|
||||
<string name="file_editor">Edytor plików</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Analiza pamięci</string>
|
||||
<string name="images">Obrazy</string>
|
||||
<string name="videos">Wideo</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Dokumenty</string>
|
||||
<string name="downloads">Pobrane</string>
|
||||
<string name="archives">Archiwa</string>
|
||||
<string name="others">Inne</string>
|
||||
<string name="storage_free">wolne</string>
|
||||
<string name="total_storage">Całkowita pamięć: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Zezwól na dostęp do uprawnień roota</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
<string name="enable_root_access">Włącz dostęp do roota</string>
|
||||
<string name="press_back_twice">Wymagaj dwukrotnego naciśnięcia przycisku Wstecz, aby wyjść z aplikacji</string>
|
||||
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
|
||||
<string name="app_title">Prosty Menedżer Plików Pro - Zarządzaj plikami</string>
|
||||
<string name="app_title">Prosty menedżer plików Pro - Zarządzaj plikami</string>
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
<string name="app_short_description">Easy app for managing your files without ads, respecting your privacy & security</string>
|
||||
<string name="app_short_description">Prosta aplikacja do zarządzania plikami bez reklam, szanująca Twoją prywatność</string>
|
||||
<string name="app_long_description">
|
||||
A lightweight quick file manager for everyday use. It offers a userful search functionality, you can also customize the home folder and select favorite folders for quick access.
|
||||
Lekki, szybki menedżer plików do codziennego użytku. Oferuje użyteczną funkcję wyszukiwania, możesz także dostosować folder domowy i wybrać ulubione foldery, aby uzyskać szybki dostęp.
|
||||
|
||||
The app contains multiple powerful security related functions, like password protecting hidden items, deleting files, or the whole app. You can choose between using a pattern, pin, or a fingerprint to keep your data private.
|
||||
Aplikacja zawiera wiele zaawansowanych funkcji związanych z bezpieczeństwem, takich jak ochrona hasłem ukrytych elementów lub całej aplikacji. Aby zachować prywatność danych, możesz wybrać wzór, PIN lub odcisk palca.
|
||||
|
||||
This modern file organizer supports fast browsing of root files, SD cards and USB devices.
|
||||
Ten nowoczesny organizer plików obsługuje szybkie przeglądanie plików w folderze głównym, kart SD i urządzeń USB.
|
||||
|
||||
To keep your productive, it obviously has all the standard file operations like rename, copy, move, delete, share etc. It can also be used for saving up some storage, since it allows compressing and decompressing too. You can easily create new files or folders if you wish so.
|
||||
Aby utrzymać Twoją produktywność, oczywiście ma wszystkie standardowe operacje na plikach, takie jak zmiana nazwy, kopiowanie, przenoszenie, usuwanie, udostępnianie itp. Może być też używany do oszczędzania miejsca, ponieważ umożliwia również pakowanie i rozpakowywanie. Jeśli chcesz, możesz łatwo tworzyć nowe pliki lub foldery.
|
||||
|
||||
You can obviously select sorting by multiple different values, toggle between ascending and descending, or use a folder specific sorting.
|
||||
Możesz oczywiście wybrać sortowanie według wielu różnych wartości, przełączać się między rosnącym i malejącym lub użyć sortowania specyficznego dla folderu.
|
||||
|
||||
By just a few clicks you can also check file or folder properties, which shows various fields like the file size, date of the last modification, or EXIF values like the creation date, camera model at photos etc.
|
||||
Za pomocą kilku naciśnięć możesz również sprawdzić właściwości pliku lub folderu, które pokazują różne pola, takie jak rozmiar pliku, data ostatniej modyfikacji lub wartości EXIF (data utworzenia, model aparatu itp.).
|
||||
|
||||
To get a file or folders path quickly, you can easily select it by long pressing and copying it in the clipboard.
|
||||
Aby szybko uzyskać ścieżkę do pliku lub folderów, możesz ją łatwo wybrać, naciskając i kopiując ją do schowka.
|
||||
|
||||
You can create handy desktop shortcuts for accessing your favorite items quickly.
|
||||
Możesz tworzyć przydatne skróty na pulpicie, aby szybko uzyskać dostęp do ulubionych elementów.
|
||||
|
||||
It contains a light file editor that you can use either for printing documents, editing them, or read easily with using zoom gestures, whenever needed.
|
||||
Zawiera lekki edytor plików, którego można używać do drukowania dokumentów, ich edycji lub łatwego czytania za pomocą gestów powiększania, gdy jest to konieczne.
|
||||
|
||||
It comes with material design and dark theme by default, provides great user experience for easy usage. The lack of internet access gives you more privacy, security and stability than other apps.
|
||||
Domyślnie jest wyposażony w Material Design i ciemny motyw, zapewniając doskonałe doświadczenie użytkownika dla łatwego użytkowania. Brak dostępu do Internetu zapewnia większą prywatność, bezpieczeństwo i stabilność niż inne aplikacje.
|
||||
|
||||
Aplikacja nie zawiera żadnych żadnych reklam, nie potrzebuje masy uprawnień, jest w pełni otwartoźródłowa, posiada ciemny motyw dla osób z wrażliwymi oczami.
|
||||
Nie zawiera reklam ani niepotrzebnych uprawnień. Jest w pełni otwartoźródłowy, zapewnia konfigurowalną kolorystykę.
|
||||
|
||||
<b>Check out the full suite of Simple Tools here:</b>
|
||||
<b>Sprawdź pełen zestaw od Simple Tools tutaj:</b>
|
||||
https://www.simplemobiletools.com
|
||||
|
||||
<b>Standalone website of Simple File Manager Pro:</b>
|
||||
<b>Strona internetowa Prostego menedżera plików Pro:</b>
|
||||
https://www.simplemobiletools.com/filemanager
|
||||
|
||||
<b>Facebook:</b>
|
||||
|
|
|
@ -11,8 +11,8 @@
|
|||
<string name="select_audio_file">Por favor, selecione um arquivo de áudio</string>
|
||||
<string name="search_folder">Procurar pasta</string>
|
||||
<string name="rooted_device_only">Esta operação só funciona em dispositivos rooteados</string>
|
||||
<string name="recents">Recents</string>
|
||||
<string name="show_recents">Show recents</string>
|
||||
<string name="recents">Recentes</string>
|
||||
<string name="show_recents">Mostrar recentes</string>
|
||||
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Abrir como</string>
|
||||
|
@ -30,8 +30,8 @@
|
|||
<string name="decompressing">Descompactando…</string>
|
||||
<string name="compression_successful">Compactado com sucesso</string>
|
||||
<string name="decompression_successful">Descompactado com sucesso</string>
|
||||
<string name="compressing_failed">Compactação falhou</string>
|
||||
<string name="decompressing_failed">Descompactação falhou</string>
|
||||
<string name="compressing_failed">A compactação falhou</string>
|
||||
<string name="decompressing_failed">A descompactação falhou</string>
|
||||
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Gerenciar favoritos</string>
|
||||
|
@ -41,9 +41,21 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Editor de Arquivos</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Ativar o acesso root</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
<string name="press_back_twice">Requira o duplo pressionamento do botão "voltar" para sair do app</string>
|
||||
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<string name="select_audio_file">Selecione um ficheiro de áudio</string>
|
||||
<string name="search_folder">Pesquisar pasta</string>
|
||||
<string name="rooted_device_only">Esta operação apenas funciona em dispositivos com root</string>
|
||||
<string name="recents">Recents</string>
|
||||
<string name="recents">Recentes</string>
|
||||
<string name="show_recents">Mostrar recentes</string>
|
||||
|
||||
<!-- Open as -->
|
||||
|
@ -23,15 +23,15 @@
|
|||
<string name="other_file">Outro tipo</string>
|
||||
|
||||
<!-- Compression -->
|
||||
<string name="compress">Comprimir</string>
|
||||
<string name="decompress">Descomprimir</string>
|
||||
<string name="compress_as">Comprimir como</string>
|
||||
<string name="compressing">A comprimir…</string>
|
||||
<string name="decompressing">A descomprimir…</string>
|
||||
<string name="compression_successful">Compressão terminada</string>
|
||||
<string name="decompression_successful">Descompressão terminada</string>
|
||||
<string name="compressing_failed">Falha ao comprimir</string>
|
||||
<string name="decompressing_failed">Falha ao descomprimir</string>
|
||||
<string name="compress">Compactar</string>
|
||||
<string name="decompress">Descompactar</string>
|
||||
<string name="compress_as">Compactar como</string>
|
||||
<string name="compressing">A compactar…</string>
|
||||
<string name="decompressing">A descompactar…</string>
|
||||
<string name="compression_successful">Compactação terminada</string>
|
||||
<string name="decompression_successful">Descompactação terminada</string>
|
||||
<string name="compressing_failed">Falha ao compactar</string>
|
||||
<string name="decompressing_failed">Falha ao descompactar</string>
|
||||
|
||||
<!-- Favorites -->
|
||||
<string name="manage_favorites">Gerir favoritos</string>
|
||||
|
@ -41,9 +41,21 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Editor de ficheiros</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Análise ao armazenamento</string>
|
||||
<string name="images">Imagens</string>
|
||||
<string name="videos">Vídeos</string>
|
||||
<string name="audio">Áudio</string>
|
||||
<string name="documents">Documentos</string>
|
||||
<string name="downloads">Descargas</string>
|
||||
<string name="archives">Arquivos</string>
|
||||
<string name="others">Outros</string>
|
||||
<string name="storage_free">livre</string>
|
||||
<string name="total_storage">Armazenamento total: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Ativar acesso root</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
<string name="press_back_twice">Premir duas vezes a tecla Back para sair da aplicação</string>
|
||||
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
|
||||
|
@ -73,10 +85,10 @@
|
|||
|
||||
Não contém anúncios nem permissões desnecessárias. Disponibiliza um tema escuro e é totalmente \'open source\'.
|
||||
|
||||
<b>Consulte o conjunto completo das aplicações Simple Tools aqui:</b>
|
||||
<b>Consulte o conjunto completo de aplicações Simple Tools aqui:</b>
|
||||
https://www.simplemobiletools.com
|
||||
|
||||
<b>Site específico da aplicação Simple File Manager Pro:</b>
|
||||
<b>Site da aplicação Simple File Manager Pro:</b>
|
||||
https://www.simplemobiletools.com/filemanager
|
||||
|
||||
<b>Facebook:</b>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Редактор файлов</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Включить root-доступ</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Editor súborov</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Analýza úložiska</string>
|
||||
<string name="images">Obrázky</string>
|
||||
<string name="videos">Videá</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Dokumenty</string>
|
||||
<string name="downloads">Stiahnuté</string>
|
||||
<string name="archives">Archívy</string>
|
||||
<string name="others">Iné</string>
|
||||
<string name="storage_free">využitých</string>
|
||||
<string name="total_storage">Úložisko celkom: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Povoliť prístup ku koreňovým súborom</string>
|
||||
<string name="press_back_twice">Vyžadovať stlačenie Späť na opustenie apky dvakrát</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Filredigerare</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Aktivera rotåtkomst</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -11,8 +11,8 @@
|
|||
<string name="select_audio_file">Lütfen bir ses dosyası seçin</string>
|
||||
<string name="search_folder">Klasör ara</string>
|
||||
<string name="rooted_device_only">Bu işlem sadece rootlu cihazlarda çalışır</string>
|
||||
<string name="recents">Recents</string>
|
||||
<string name="show_recents">Show recents</string>
|
||||
<string name="recents">Son dosyalar</string>
|
||||
<string name="show_recents">Son dosyaları göster</string>
|
||||
|
||||
<!-- Open as -->
|
||||
<string name="open_as">Farklı aç</string>
|
||||
|
@ -41,9 +41,21 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Dosya Düzenleyici</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Depolama analizi</string>
|
||||
<string name="images">Resimler</string>
|
||||
<string name="videos">Videolar</string>
|
||||
<string name="audio">Sesler</string>
|
||||
<string name="documents">Belgeler</string>
|
||||
<string name="downloads">İndirilenler</string>
|
||||
<string name="archives">Arşivler</string>
|
||||
<string name="others">Diğerleri</string>
|
||||
<string name="storage_free">boş</string>
|
||||
<string name="total_storage">Toplam depolama: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Root erişimini etkinleştir</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
<string name="press_back_twice">Uygulamadan çıkmak için Geri tuşuna iki kez basmayı gerektir</string>
|
||||
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
|
||||
|
@ -53,7 +65,7 @@
|
|||
<string name="app_long_description">
|
||||
Günlük kullanım için hafif ve hızlı bir dosya yöneticisi. Kullanıcı dostu bir arama işlevi sunar, ayrıca ana klasörü özelleştirebilir ve hızlı erişim için favori klasörleri seçebilirsiniz.
|
||||
|
||||
Uygulama, gizli öğeleri parolayla koruma, dosyaları silme veya tüm uygulama gibi güvenlikle ilgili çok sayıda güçlü işlev içerir. Verilerinizi gizli tutmak için desen, pin veya parmak izi kullanmayı seçebilirsiniz.
|
||||
Uygulama, gizli ögeleri parolayla koruma, dosyaları silme veya tüm uygulama gibi güvenlikle ilgili çok sayıda güçlü işlev içerir. Verilerinizi gizli tutmak için desen, pin veya parmak izi kullanmayı seçebilirsiniz.
|
||||
|
||||
Bu modern dosya düzenleyici, root dosyalarının, SD kartların ve USB cihazlarının hızlı taranmasını destekler.
|
||||
|
||||
|
@ -65,11 +77,11 @@
|
|||
|
||||
Bir dosya veya klasör yolunu hızlı bir şekilde almak için, uzun basıp panoya kopyalayarak onu kolayca seçebilirsiniz.
|
||||
|
||||
Favori öğelerinize hızlı bir şekilde erişmek için kullanışlı masaüstü kısayolları oluşturabilirsiniz.
|
||||
Favori ögelerinize hızlı bir şekilde erişmek için kullanışlı masaüstü kısayolları oluşturabilirsiniz.
|
||||
|
||||
Belgeleri yazdırmak, düzenlemek veya gerektiğinde yakınlaştırma hareketlerini kullanarak kolayca okumak için kullanabileceğiniz hafif bir dosya düzenleyici içerir.
|
||||
Belgeleri yazdırmak, düzenlemek veya gerektiğinde yakınlaştırma hareketlerini kullanarak kolayca okumak için kullanabileceğiniz hafif bir dosya düzenleyici içerir.
|
||||
|
||||
Varsayılan olarak materyal tasarım ve koyu tema ile birlikte gelir, kolay kullanım için harika bir kullanıcı deneyimi sağlar. İnternet erişiminin olmaması size diğer uygulamalardan daha fazla gizlilik, güvenlik ve istikrar sağlar.
|
||||
Varsayılan olarak materyal tasarım ve koyu tema ile birlikte gelir, kolay kullanım için harika bir kullanıcı deneyimi sağlar. İnternet erişiminin olmaması size diğer uygulamalardan daha fazla gizlilik, güvenlik ve istikrar sağlar.
|
||||
|
||||
Reklam veya gereksiz izinler içermez. Tamamen açık kaynaktır, özelleştirilebilir renkler sunar.
|
||||
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">Редактор файлів</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Активувати root-доступ</string>
|
||||
<string name="press_back_twice">Натисніть Назад двічі, щоб вийти з додатка</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">文件编辑器</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">启用 root 访问</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">檔案編輯器</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">啟用root權限</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
<resources>
|
||||
<dimen name="grid_view_icon_size">60dp</dimen>
|
||||
<dimen name="storage_free_space_text_size">46sp</dimen>
|
||||
</resources>
|
||||
|
|
|
@ -41,6 +41,18 @@
|
|||
<!-- File Editor -->
|
||||
<string name="file_editor">File Editor</string>
|
||||
|
||||
<!-- Storage analysis -->
|
||||
<string name="storage_analysis">Storage analysis</string>
|
||||
<string name="images">Images</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="documents">Documents</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="archives">Archives</string>
|
||||
<string name="others">Others</string>
|
||||
<string name="storage_free">free</string>
|
||||
<string name="total_storage">Total storage: %s</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="enable_root_access">Enable root access</string>
|
||||
<string name="press_back_twice">Require pressing Back twice to leave the app</string>
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
* Added a Storage Analyzer tab on Android 8+
|
||||
* Allow saving any file type with the Save as action
|
||||
* Some Android 11 related file operation improvements
|
||||
* Couple stability, translation and UX improvements
|
|
@ -0,0 +1 @@
|
|||
* Added some stability and translation improvements
|
|
@ -1,7 +1,33 @@
|
|||
Może być używany także do przeglądania systemowych zakamarków i zewnętrznych kart pamięci. Z łatwością możesz zmieniać nazwy, przenosić, kopiować, usuwać i udostępniać pliki.
|
||||
Lekki, szybki menedżer plików do codziennego użytku. Oferuje użyteczną funkcję wyszukiwania, możesz także dostosować folder domowy i wybrać ulubione foldery, aby uzyskać szybki dostęp.
|
||||
|
||||
Uprawnienie odnośnie linii papilarnych potrzebne jest do blokowania widoczności plików i folderów lub też dostępu do aplikacji.
|
||||
Aplikacja zawiera wiele zaawansowanych funkcji związanych z bezpieczeństwem, takich jak ochrona hasłem ukrytych elementów lub całej aplikacji. Aby zachować prywatność danych, możesz wybrać wzór, PIN lub odcisk palca.
|
||||
|
||||
Aplikacja nie zawiera żadnych żadnych reklam, nie potrzebuje masy uprawnień, jest w pełni otwartoźródłowa, posiada ciemny motyw dla osób z wrażliwymi oczami.
|
||||
Ten nowoczesny organizer plików obsługuje szybkie przeglądanie plików w folderze głównym, kart SD i urządzeń USB.
|
||||
|
||||
Niniejsza aplikacja jest tylko częścią naszej kolekcji prostych narzędzi. Ta, jak i pozostałe, dostępne są na stronie https://www.simplemobiletools.com
|
||||
Aby utrzymać Twoją produktywność, oczywiście ma wszystkie standardowe operacje na plikach, takie jak zmiana nazwy, kopiowanie, przenoszenie, usuwanie, udostępnianie itp. Może być też używany do oszczędzania miejsca, ponieważ umożliwia również pakowanie i rozpakowywanie. Jeśli chcesz, możesz łatwo tworzyć nowe pliki lub foldery.
|
||||
|
||||
Możesz oczywiście wybrać sortowanie według wielu różnych wartości, przełączać się między rosnącym i malejącym lub użyć sortowania specyficznego dla folderu.
|
||||
|
||||
Za pomocą kilku naciśnięć możesz również sprawdzić właściwości pliku lub folderu, które pokazują różne pola, takie jak rozmiar pliku, data ostatniej modyfikacji lub wartości EXIF (data utworzenia, model aparatu itp.).
|
||||
|
||||
Aby szybko uzyskać ścieżkę do pliku lub folderów, możesz ją łatwo wybrać, naciskając i kopiując ją do schowka.
|
||||
|
||||
Możesz tworzyć przydatne skróty na pulpicie, aby szybko uzyskać dostęp do ulubionych elementów.
|
||||
|
||||
Zawiera lekki edytor plików, którego można używać do drukowania dokumentów, ich edycji lub łatwego czytania za pomocą gestów powiększania, gdy jest to konieczne.
|
||||
|
||||
Domyślnie jest wyposażony w Material Design i ciemny motyw, zapewniając doskonałe doświadczenie użytkownika dla łatwego użytkowania. Brak dostępu do Internetu zapewnia większą prywatność, bezpieczeństwo i stabilność niż inne aplikacje.
|
||||
|
||||
Nie zawiera reklam ani niepotrzebnych uprawnień. Jest w pełni otwartoźródłowy, zapewnia konfigurowalną kolorystykę.
|
||||
|
||||
<b>Sprawdź pełen zestaw od Simple Tools tutaj:</b>
|
||||
https://www.simplemobiletools.com
|
||||
|
||||
<b>Strona internetowa Prostego menedżera plików Pro:</b>
|
||||
https://www.simplemobiletools.com/filemanager
|
||||
|
||||
<b>Facebook:</b>
|
||||
https://www.facebook.com/simplemobiletools
|
||||
|
||||
<b>Reddit:</b>
|
||||
https://www.reddit.com/r/SimpleMobileTools
|
|
@ -1 +1 @@
|
|||
A simple file manager for browsing and editing files and directories.
|
||||
Prosta aplikacja do zarządzania plikami bez reklam, szanująca Twoją prywatność
|
||||
|
|
|
@ -1 +1 @@
|
|||
Prosty menedżer plików
|
||||
Prosty menedżer plików Pro - Zarządzaj plikami
|
||||
|
|
Loading…
Reference in New Issue