mirror of
https://github.com/FossifyOrg/Gallery.git
synced 2024-11-26 14:37:59 +01:00
commit
2614affa9f
55 changed files with 324 additions and 146 deletions
15
CHANGELOG.md
15
CHANGELOG.md
|
@ -1,6 +1,21 @@
|
|||
Changelog
|
||||
==========
|
||||
|
||||
Version 6.9.6 *(2019-09-12)*
|
||||
----------------------------
|
||||
|
||||
* Improved the performance of loading fullscreen images in some cases
|
||||
* Properly handle some specific SD cards
|
||||
* Properly fetch Date Taken value on Android 10
|
||||
|
||||
Version 6.9.5 *(2019-09-08)*
|
||||
----------------------------
|
||||
|
||||
* Added optional thumbnail icons for showing GIF/SVG/RAW file types
|
||||
* Properly handle Date Taken value at copy/move/edit
|
||||
* Fixed a glitch with white top actionmenu at selecting items
|
||||
* Fixed fullscreen mode toggling on Chromebooks
|
||||
|
||||
Version 6.9.4 *(2019-08-21)*
|
||||
----------------------------
|
||||
|
||||
|
|
|
@ -15,8 +15,8 @@ android {
|
|||
applicationId "com.simplemobiletools.gallery.pro"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 28
|
||||
versionCode 264
|
||||
versionName "6.9.4"
|
||||
versionCode 266
|
||||
versionName "6.9.6"
|
||||
multiDexEnabled true
|
||||
setProperty("archivesBaseName", "gallery")
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
|
@ -62,7 +62,7 @@ android {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.simplemobiletools:commons:5.17.3'
|
||||
implementation 'com.simplemobiletools:commons:5.17.17'
|
||||
implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0'
|
||||
implementation 'androidx.multidex:multidex:2.0.1'
|
||||
implementation 'it.sephiroth.android.exif:library:1.0.1'
|
||||
|
@ -75,8 +75,8 @@ dependencies {
|
|||
implementation 'info.androidhive:imagefilters:1.0.7'
|
||||
implementation 'com.squareup.picasso:picasso:2.71828'
|
||||
implementation 'com.caverock:androidsvg-aar:1.3'
|
||||
implementation 'com.github.tibbi:gestureviews:4444214285'
|
||||
implementation 'com.github.tibbi:subsampling-scale-image-view:8341253173'
|
||||
implementation 'com.github.tibbi:gestureviews:a2208ce9d9'
|
||||
implementation 'com.github.tibbi:subsampling-scale-image-view:7810989016'
|
||||
kapt 'com.github.bumptech.glide:compiler:4.9.0' // keep it here too, not just in Commons, else loading SVGs wont work
|
||||
|
||||
kapt 'androidx.room:room-compiler:2.1.0'
|
||||
|
|
|
@ -39,6 +39,7 @@ import com.simplemobiletools.gallery.pro.dialogs.OtherAspectRatioDialog
|
|||
import com.simplemobiletools.gallery.pro.dialogs.ResizeDialog
|
||||
import com.simplemobiletools.gallery.pro.dialogs.SaveAsDialog
|
||||
import com.simplemobiletools.gallery.pro.extensions.config
|
||||
import com.simplemobiletools.gallery.pro.extensions.fixDateTaken
|
||||
import com.simplemobiletools.gallery.pro.extensions.openEditor
|
||||
import com.simplemobiletools.gallery.pro.helpers.*
|
||||
import com.simplemobiletools.gallery.pro.models.FilterItem
|
||||
|
@ -874,7 +875,9 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
}
|
||||
|
||||
private fun scanFinalPath(path: String) {
|
||||
rescanPaths(arrayListOf(path)) {
|
||||
val paths = arrayListOf(path)
|
||||
rescanPaths(paths) {
|
||||
fixDateTaken(paths, false)
|
||||
setResult(Activity.RESULT_OK, intent)
|
||||
toast(R.string.file_saved)
|
||||
finish()
|
||||
|
|
|
@ -409,14 +409,15 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
config.addIncludedFolder(otgPath)
|
||||
}
|
||||
|
||||
if (config.OTGPath.isEmpty()) {
|
||||
// OTG handling has been changed again in SDK version 28, the old method no longer works
|
||||
/*if (config.OTGPath.isEmpty()) {
|
||||
runOnUiThread {
|
||||
ConfirmationDialog(this, getString(R.string.usb_detected), positive = R.string.ok, negative = 0) {
|
||||
config.wasOTGHandled = true
|
||||
showOTGPermissionDialog()
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -949,7 +950,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
|
||||
val foldersToScan = mediaFetcher.getFoldersToScan()
|
||||
foldersToScan.add(FAVORITES)
|
||||
if (config.useRecycleBin && config.showRecycleBinAtFolders) {
|
||||
if (config.showRecycleBinAtFolders) {
|
||||
foldersToScan.add(RECYCLE_BIN)
|
||||
} else {
|
||||
foldersToScan.remove(RECYCLE_BIN)
|
||||
|
|
|
@ -323,19 +323,8 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
visibility and View.SYSTEM_UI_FLAG_FULLSCREEN != 0
|
||||
}
|
||||
|
||||
view_pager.adapter?.let {
|
||||
(it as MyPagerAdapter).toggleFullscreen(mIsFullScreen)
|
||||
checkSystemUI()
|
||||
val newAlpha = if (mIsFullScreen) 0f else 1f
|
||||
top_shadow.animate().alpha(newAlpha).start()
|
||||
if (bottom_actions.isVisible()) {
|
||||
bottom_actions.animate().alpha(newAlpha).start()
|
||||
arrayOf(bottom_favorite, bottom_edit, bottom_share, bottom_delete, bottom_rotate, bottom_properties, bottom_change_orientation,
|
||||
bottom_slideshow, bottom_show_on_map, bottom_toggle_file_visibility, bottom_rename).forEach {
|
||||
it.isClickable = !mIsFullScreen
|
||||
}
|
||||
}
|
||||
}
|
||||
checkSystemUI()
|
||||
fullscreenToggled()
|
||||
}
|
||||
|
||||
if (intent.action == "com.android.camera.action.REVIEW") {
|
||||
|
@ -576,7 +565,11 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
|
||||
val fileDirItems = arrayListOf(FileDirItem(currPath, currPath.getFilenameFromPath()))
|
||||
tryCopyMoveFilesTo(fileDirItems, isCopyOperation) {
|
||||
fixDateTaken(arrayListOf(currPath), false)
|
||||
val newPath = "$it/${currPath.getFilenameFromPath()}"
|
||||
rescanPaths(arrayListOf(newPath)) {
|
||||
fixDateTaken(arrayListOf(newPath), false)
|
||||
}
|
||||
|
||||
config.tempFolderPath = ""
|
||||
if (!isCopyOperation) {
|
||||
refreshViewPager()
|
||||
|
@ -1078,6 +1071,9 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
override fun fragmentClicked() {
|
||||
mIsFullScreen = !mIsFullScreen
|
||||
checkSystemUI()
|
||||
if (isChromebook()) {
|
||||
fullscreenToggled()
|
||||
}
|
||||
}
|
||||
|
||||
override fun videoEnded(): Boolean {
|
||||
|
@ -1134,6 +1130,21 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
}
|
||||
}
|
||||
|
||||
private fun fullscreenToggled() {
|
||||
view_pager.adapter?.let {
|
||||
(it as MyPagerAdapter).toggleFullscreen(mIsFullScreen)
|
||||
val newAlpha = if (mIsFullScreen) 0f else 1f
|
||||
top_shadow.animate().alpha(newAlpha).start()
|
||||
if (bottom_actions.isVisible()) {
|
||||
bottom_actions.animate().alpha(newAlpha).start()
|
||||
arrayOf(bottom_favorite, bottom_edit, bottom_share, bottom_delete, bottom_rotate, bottom_properties, bottom_change_orientation,
|
||||
bottom_slideshow, bottom_show_on_map, bottom_toggle_file_visibility, bottom_rename).forEach {
|
||||
it.isClickable = !mIsFullScreen
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateActionbarTitle() {
|
||||
runOnUiThread {
|
||||
if (mPos < getCurrentMedia().size) {
|
||||
|
|
|
@ -442,7 +442,12 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList<Directo
|
|||
|
||||
val fileDirItems = paths.map { FileDirItem(it, it.getFilenameFromPath()) } as ArrayList<FileDirItem>
|
||||
activity.tryCopyMoveFilesTo(fileDirItems, isCopyOperation) {
|
||||
activity.fixDateTaken(paths, false)
|
||||
val destinationPath = it
|
||||
val newPaths = fileDirItems.map { "$destinationPath/${it.name}" }.toMutableList() as java.util.ArrayList<String>
|
||||
activity.rescanPaths(newPaths) {
|
||||
activity.fixDateTaken(newPaths, false)
|
||||
}
|
||||
|
||||
config.tempFolderPath = ""
|
||||
listener?.refreshItems()
|
||||
finishActMode()
|
||||
|
|
|
@ -326,13 +326,18 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList<Thumbnai
|
|||
}
|
||||
|
||||
activity.tryCopyMoveFilesTo(fileDirItems, isCopyOperation) {
|
||||
val destinationPath = it
|
||||
config.tempFolderPath = ""
|
||||
activity.applicationContext.rescanFolderMedia(it)
|
||||
activity.applicationContext.rescanFolderMedia(destinationPath)
|
||||
activity.applicationContext.rescanFolderMedia(fileDirItems.first().getParentPath())
|
||||
activity.fixDateTaken(paths, false)
|
||||
|
||||
val newPaths = fileDirItems.map { "$destinationPath/${it.name}" }.toMutableList() as ArrayList<String>
|
||||
activity.rescanPaths(newPaths) {
|
||||
activity.fixDateTaken(newPaths, false)
|
||||
}
|
||||
if (!isCopyOperation) {
|
||||
listener?.refreshItems()
|
||||
activity.updateFavoritePaths(fileDirItems, it)
|
||||
activity.updateFavoritePaths(fileDirItems, destinationPath)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ class FilterMediaDialog(val activity: BaseSimpleActivity, val callback: (result:
|
|||
filter_media_gifs.isChecked = filterMedia and TYPE_GIFS != 0
|
||||
filter_media_raws.isChecked = filterMedia and TYPE_RAWS != 0
|
||||
filter_media_svgs.isChecked = filterMedia and TYPE_SVGS != 0
|
||||
filter_media_portraits.isChecked = filterMedia and TYPE_PORTRAITS != 0
|
||||
}
|
||||
|
||||
AlertDialog.Builder(activity)
|
||||
|
@ -41,6 +42,8 @@ class FilterMediaDialog(val activity: BaseSimpleActivity, val callback: (result:
|
|||
result += TYPE_RAWS
|
||||
if (view.filter_media_svgs.isChecked)
|
||||
result += TYPE_SVGS
|
||||
if (view.filter_media_portraits.isChecked)
|
||||
result += TYPE_PORTRAITS
|
||||
|
||||
activity.config.filterMedia = result
|
||||
callback(result)
|
||||
|
|
|
@ -292,7 +292,9 @@ fun BaseSimpleActivity.restoreRecycleBinPaths(paths: ArrayList<String>, mediumDa
|
|||
callback()
|
||||
}
|
||||
|
||||
fixDateTaken(newPaths, false)
|
||||
rescanPaths(newPaths) {
|
||||
fixDateTaken(newPaths, false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -346,17 +348,19 @@ fun Activity.hasNavBar(): Boolean {
|
|||
return (realDisplayMetrics.widthPixels - displayMetrics.widthPixels > 0) || (realDisplayMetrics.heightPixels - displayMetrics.heightPixels > 0)
|
||||
}
|
||||
|
||||
fun Activity.fixDateTaken(paths: ArrayList<String>, showToasts: Boolean, callback: (() -> Unit)? = null) {
|
||||
fun Activity.fixDateTaken(paths: ArrayList<String>, showToasts: Boolean, hasRescanned: Boolean = false, callback: (() -> Unit)? = null) {
|
||||
val BATCH_SIZE = 50
|
||||
if (showToasts) {
|
||||
toast(R.string.fixing)
|
||||
}
|
||||
|
||||
val pathsToRescan = ArrayList<String>()
|
||||
try {
|
||||
var didUpdateFile = false
|
||||
val operations = ArrayList<ContentProviderOperation>()
|
||||
val mediumDao = galleryDB.MediumDao()
|
||||
rescanPaths(paths) {
|
||||
|
||||
ensureBackgroundThread {
|
||||
for (path in paths) {
|
||||
val dateTime = ExifInterface(path).getAttribute(ExifInterface.TAG_DATETIME_ORIGINAL)
|
||||
?: ExifInterface(path).getAttribute(ExifInterface.TAG_DATETIME) ?: continue
|
||||
|
@ -385,6 +389,10 @@ fun Activity.fixDateTaken(paths: ArrayList<String>, showToasts: Boolean, callbac
|
|||
|
||||
mediumDao.updateFavoriteDateTaken(path, timestamp)
|
||||
didUpdateFile = true
|
||||
|
||||
if (!hasRescanned && getFileDateTaken(path) == 0L) {
|
||||
pathsToRescan.add(path)
|
||||
}
|
||||
}
|
||||
|
||||
val resultSize = contentResolver.applyBatch(MediaStore.AUTHORITY, operations).size
|
||||
|
@ -392,12 +400,18 @@ fun Activity.fixDateTaken(paths: ArrayList<String>, showToasts: Boolean, callbac
|
|||
didUpdateFile = false
|
||||
}
|
||||
|
||||
runOnUiThread {
|
||||
if (showToasts) {
|
||||
toast(if (didUpdateFile) R.string.dates_fixed_successfully else R.string.unknown_error_occurred)
|
||||
}
|
||||
if (hasRescanned || pathsToRescan.isEmpty()) {
|
||||
runOnUiThread {
|
||||
if (showToasts) {
|
||||
toast(if (didUpdateFile) R.string.dates_fixed_successfully else R.string.unknown_error_occurred)
|
||||
}
|
||||
|
||||
callback?.invoke()
|
||||
callback?.invoke()
|
||||
}
|
||||
} else {
|
||||
rescanPaths(pathsToRescan) {
|
||||
fixDateTaken(paths, showToasts, true)
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
|
|
|
@ -25,5 +25,9 @@ fun ArrayList<Medium>.getDirMediaTypes(): Int {
|
|||
types += TYPE_SVGS
|
||||
}
|
||||
|
||||
if (any { it.isPortrait() }) {
|
||||
types += TYPE_PORTRAITS
|
||||
}
|
||||
|
||||
return types
|
||||
}
|
||||
|
|
|
@ -143,7 +143,7 @@ fun Context.movePinnedDirectoriesToFront(dirs: ArrayList<Directory>): ArrayList<
|
|||
}
|
||||
}
|
||||
|
||||
if (config.useRecycleBin && config.showRecycleBinAtFolders && config.showRecycleBinLast) {
|
||||
if (config.showRecycleBinAtFolders && config.showRecycleBinLast) {
|
||||
val binIndex = dirs.indexOfFirst { it.isRecycleBin() }
|
||||
if (binIndex != -1) {
|
||||
val bin = dirs.removeAt(binIndex)
|
||||
|
@ -566,7 +566,7 @@ fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly:
|
|||
ArrayList<Directory>()
|
||||
}
|
||||
|
||||
if (!config.showRecycleBinAtFolders || !config.useRecycleBin) {
|
||||
if (!config.showRecycleBinAtFolders) {
|
||||
directories.removeAll { it.isRecycleBin() }
|
||||
}
|
||||
|
||||
|
@ -584,7 +584,8 @@ fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly:
|
|||
(filterMedia and TYPE_VIDEOS != 0 && it.types and TYPE_VIDEOS != 0) ||
|
||||
(filterMedia and TYPE_GIFS != 0 && it.types and TYPE_GIFS != 0) ||
|
||||
(filterMedia and TYPE_RAWS != 0 && it.types and TYPE_RAWS != 0) ||
|
||||
(filterMedia and TYPE_SVGS != 0 && it.types and TYPE_SVGS != 0)
|
||||
(filterMedia and TYPE_SVGS != 0 && it.types and TYPE_SVGS != 0) ||
|
||||
(filterMedia and TYPE_PORTRAITS != 0 && it.types and TYPE_PORTRAITS != 0)
|
||||
}
|
||||
}) as ArrayList<Directory>
|
||||
|
||||
|
@ -640,7 +641,8 @@ fun Context.getCachedMedia(path: String, getVideosOnly: Boolean = false, getImag
|
|||
(filterMedia and TYPE_VIDEOS != 0 && it.type == TYPE_VIDEOS) ||
|
||||
(filterMedia and TYPE_GIFS != 0 && it.type == TYPE_GIFS) ||
|
||||
(filterMedia and TYPE_RAWS != 0 && it.type == TYPE_RAWS) ||
|
||||
(filterMedia and TYPE_SVGS != 0 && it.type == TYPE_SVGS)
|
||||
(filterMedia and TYPE_SVGS != 0 && it.type == TYPE_SVGS) ||
|
||||
(filterMedia and TYPE_PORTRAITS != 0 && it.type == TYPE_PORTRAITS)
|
||||
}
|
||||
}) as ArrayList<Medium>
|
||||
|
||||
|
@ -852,3 +854,29 @@ fun Context.updateDirectoryPath(path: String) {
|
|||
val directory = createDirectoryFromMedia(path, curMedia, albumCovers, hiddenString, includedFolders, isSortingAscending, getProperFileSize)
|
||||
updateDBDirectory(directory, galleryDB.DirectoryDao())
|
||||
}
|
||||
|
||||
fun Context.getFileDateTaken(path: String): Long {
|
||||
val projection = arrayOf(
|
||||
MediaStore.Images.Media.DATE_TAKEN
|
||||
)
|
||||
|
||||
val uri = MediaStore.Files.getContentUri("external")
|
||||
val selection = "${MediaStore.Images.Media.DATA} = ?"
|
||||
val selectionArgs = arrayOf(path)
|
||||
|
||||
val cursor = contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||
cursor?.use {
|
||||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
try {
|
||||
return cursor.getLongValue(MediaStore.Images.Media.DATE_TAKEN)
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
} while (cursor.moveToNext())
|
||||
}
|
||||
}
|
||||
|
||||
return 0L
|
||||
}
|
||||
|
||||
fun Context.isChromebook() = packageManager.hasSystemFeature("org.chromium.arc.device_management")
|
||||
|
|
|
@ -16,6 +16,15 @@ fun String.shouldFolderBeVisible(excludedPaths: MutableSet<String>, includedPath
|
|||
}
|
||||
|
||||
val file = File(this)
|
||||
if (file.name.startsWith("img_", true)) {
|
||||
val files = file.list()
|
||||
if (files != null) {
|
||||
if (files.any { it.contains("portrait", true) && it.contains("burst", true) }) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!showHidden && file.isHidden) {
|
||||
return false
|
||||
} else if (includedPaths.contains(this)) {
|
||||
|
|
|
@ -57,7 +57,7 @@ import java.util.*
|
|||
|
||||
class PhotoFragment : ViewPagerFragment() {
|
||||
private val DEFAULT_DOUBLE_TAP_ZOOM = 2f
|
||||
private val ZOOMABLE_VIEW_LOAD_DELAY = 150L
|
||||
private val ZOOMABLE_VIEW_LOAD_DELAY = 100L
|
||||
private val SAME_ASPECT_RATIO_THRESHOLD = 0.01
|
||||
|
||||
// devices with good displays, but the rest of the hardware not good enough for them
|
||||
|
|
|
@ -162,7 +162,8 @@ const val TYPE_VIDEOS = 2
|
|||
const val TYPE_GIFS = 4
|
||||
const val TYPE_RAWS = 8
|
||||
const val TYPE_SVGS = 16
|
||||
const val TYPE_DEFAULT_FILTER = TYPE_IMAGES or TYPE_VIDEOS or TYPE_GIFS or TYPE_RAWS or TYPE_SVGS
|
||||
const val TYPE_PORTRAITS = 32
|
||||
const val TYPE_DEFAULT_FILTER = TYPE_IMAGES or TYPE_VIDEOS or TYPE_GIFS or TYPE_RAWS or TYPE_SVGS or TYPE_PORTRAITS
|
||||
|
||||
const val LOCATION_INTERNAL = 1
|
||||
const val LOCATION_SD = 2
|
||||
|
|
|
@ -178,7 +178,7 @@ class MediaFetcher(val context: Context) {
|
|||
val showHidden = config.shouldShowHidden
|
||||
val excludedFolders = config.excludedFolders
|
||||
foldersToScan = foldersToScan.filter { it.shouldFolderBeVisible(excludedFolders, includedFolders, showHidden) } as ArrayList<String>
|
||||
return foldersToScan.distinctBy { it.getDistinctPath() }.toSet() as LinkedHashSet<String>
|
||||
return foldersToScan.distinctBy { it.getDistinctPath() }.toMutableSet() as LinkedHashSet<String>
|
||||
}
|
||||
|
||||
private fun addFolder(curFolders: ArrayList<String>, folder: String) {
|
||||
|
@ -206,12 +206,34 @@ class MediaFetcher(val context: Context) {
|
|||
val checkProperFileSize = getProperFileSize || config.fileLoadingPriority == PRIORITY_COMPROMISE
|
||||
val checkFileExistence = config.fileLoadingPriority == PRIORITY_VALIDITY
|
||||
val showHidden = config.shouldShowHidden
|
||||
val showPortraits = filterMedia and TYPE_PORTRAITS != 0
|
||||
val dateTakens = if (getProperDateTaken && folder != FAVORITES && !isRecycleBin) getFolderDateTakens(folder) else HashMap()
|
||||
val subdirs = ArrayList<File>() // used only for Portrait photos starting with "IMG_" for now
|
||||
|
||||
val files = when (folder) {
|
||||
FAVORITES -> favoritePaths.filter { showHidden || !it.contains("/.") }.map { File(it) }.toTypedArray()
|
||||
RECYCLE_BIN -> deletedMedia.map { File(it.path) }.toTypedArray()
|
||||
else -> File(folder).listFiles() ?: return media
|
||||
FAVORITES -> favoritePaths.filter { showHidden || !it.contains("/.") }.map { File(it) }.toMutableList() as ArrayList<File>
|
||||
RECYCLE_BIN -> deletedMedia.map { File(it.path) }.toMutableList() as ArrayList<File>
|
||||
else -> {
|
||||
val allFiles = File(folder).listFiles() ?: return media
|
||||
val notDirs = ArrayList<File>()
|
||||
allFiles.forEach {
|
||||
if (it.isDirectory) {
|
||||
if (showPortraits && it.name.startsWith("img_", true)) {
|
||||
subdirs.add(it)
|
||||
}
|
||||
} else {
|
||||
notDirs.add(it)
|
||||
}
|
||||
}
|
||||
|
||||
notDirs
|
||||
}
|
||||
}
|
||||
|
||||
for (subdir in subdirs) {
|
||||
val portraitFiles = subdir.listFiles() ?: continue
|
||||
val cover = portraitFiles.firstOrNull { it.name.contains("cover", true) } ?: portraitFiles.first()
|
||||
files.add(cover)
|
||||
}
|
||||
|
||||
for (file in files) {
|
||||
|
@ -283,6 +305,7 @@ class MediaFetcher(val context: Context) {
|
|||
media.add(medium)
|
||||
}
|
||||
}
|
||||
|
||||
return media
|
||||
}
|
||||
|
||||
|
@ -302,9 +325,11 @@ class MediaFetcher(val context: Context) {
|
|||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
try {
|
||||
val path = cursor.getStringValue(MediaStore.Images.Media.DISPLAY_NAME)
|
||||
val dateTaken = cursor.getLongValue(MediaStore.Images.Media.DATE_TAKEN)
|
||||
dateTakens[path] = dateTaken
|
||||
if (dateTaken != 0L) {
|
||||
val path = cursor.getStringValue(MediaStore.Images.Media.DISPLAY_NAME)
|
||||
dateTakens[path] = dateTaken
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
} while (cursor.moveToNext())
|
||||
|
|
|
@ -44,6 +44,8 @@ data class Medium(
|
|||
|
||||
fun isSVG() = type == TYPE_SVGS
|
||||
|
||||
fun isPortrait() = type == TYPE_PORTRAITS
|
||||
|
||||
fun isHidden() = name.startsWith('.')
|
||||
|
||||
fun getBubbleText(sorting: Int, context: Context) = when {
|
||||
|
|
9
app/src/main/res/drawable/ic_portrait_photo_vector.xml
Normal file
9
app/src/main/res/drawable/ic_portrait_photo_vector.xml
Normal file
|
@ -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="#FFFFFFFF"
|
||||
android:pathData="M12,12.25c1.24,0 2.25,-1.01 2.25,-2.25S13.24,7.75 12,7.75 9.75,8.76 9.75,10s1.01,2.25 2.25,2.25zM16.5,16.25c0,-1.5 -3,-2.25 -4.5,-2.25s-4.5,0.75 -4.5,2.25L7.5,17h9v-0.75zM19,3L5,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM19,19L5,19L5,5h14v14z"/>
|
||||
</vector>
|
|
@ -38,6 +38,10 @@
|
|||
android:layout_alignParentBottom="true"
|
||||
android:background="@drawable/gradient_background"/>
|
||||
|
||||
<include
|
||||
android:id="@+id/bottom_editor_primary_actions"
|
||||
layout="@layout/bottom_editor_primary_actions"/>
|
||||
|
||||
<include
|
||||
android:id="@+id/bottom_aspect_ratios"
|
||||
layout="@layout/bottom_actions_aspect_ratio"
|
||||
|
@ -70,8 +74,4 @@
|
|||
android:layout_above="@+id/bottom_editor_primary_actions"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<include
|
||||
android:id="@+id/bottom_editor_primary_actions"
|
||||
layout="@layout/bottom_editor_primary_actions"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
|
|
@ -49,4 +49,12 @@
|
|||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:text="@string/svgs"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
|
||||
android:id="@+id/filter_media_portraits"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:text="@string/portraits"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">الصور المتحركة</string>
|
||||
<string name="raw_images">RAW images</string>
|
||||
<string name="svgs">SVGs</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">لم يتم العثور على ملفات وسائط مع الفلاتر المحددة</string>
|
||||
<string name="change_filters_underlined"><u >تغيير الفلاتر</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIFs</string>
|
||||
<string name="raw_images">RAW images</string>
|
||||
<string name="svgs">SVGs</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">No media files have been found with the selected filters.</string>
|
||||
<string name="change_filters_underlined"><u>Change filters</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIFs</string>
|
||||
<string name="raw_images">Imatges RAW</string>
|
||||
<string name="svgs">SVGs</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">No s’han tronat arxius amb els filtres seleccionats.</string>
|
||||
<string name="change_filters_underlined"><u>Canviar filtres</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIFy</string>
|
||||
<string name="raw_images">RAW obrázky</string>
|
||||
<string name="svgs">SVGčka</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Se zvolenými filtry nebyly nalezeny žádné médiální soubory.</string>
|
||||
<string name="change_filters_underlined"><u>Změnit filtry</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIF\'er</string>
|
||||
<string name="raw_images">RAW-billeder</string>
|
||||
<string name="svgs">SVG\'er</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Der blev ikke fundet nogen filer med det valgte filter.</string>
|
||||
<string name="change_filters_underlined"><u>Skift filter</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIFs</string>
|
||||
<string name="raw_images">RAW-Bilder</string>
|
||||
<string name="svgs">SVGs</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Keine Medien für die ausgewählten Filter gefunden.</string>
|
||||
<string name="change_filters_underlined"><u>Filter ändern</u></string>
|
||||
|
||||
|
@ -180,7 +181,7 @@
|
|||
<string name="show_recycle_bin_last">Zeige den Papierkorb als letztes Element auf dem Hauptbildschirm</string>
|
||||
<string name="allow_down_gesture">Erlaube das Schließen der Vollbildansicht mit einer Abwärtsgeste</string>
|
||||
<string name="allow_one_to_one_zoom">Erlaube 1:1 Zoom mit zweimaligem, doppeltem Antippen</string>
|
||||
<string name="open_videos_on_separate_screen">Öffne Videos immer auf einem speraten Bildschirm mit neuen horizontalen Gesten</string>
|
||||
<string name="open_videos_on_separate_screen">Öffne Videos immer auf einem seperaten Bildschirm mit neuen horizontalen Gesten</string>
|
||||
<string name="show_notch">Show a notch if available</string>
|
||||
<string name="allow_rotating_gestures">Rotieren von Bildern mit Gesten zulassen</string>
|
||||
<string name="file_loading_priority">Priorität beim Laden von Dateien</string>
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIFs</string>
|
||||
<string name="raw_images">RAW Εικόνες</string>
|
||||
<string name="svgs">SVGs</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Δεν βρέθηκε κανένα αρχείο πολυμέσων με τα επιλεγμένα φίλτρα.</string>
|
||||
<string name="change_filters_underlined"><u>Αλλαγή φίλτρων</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIFs</string>
|
||||
<string name="raw_images">Imagenes RAW</string>
|
||||
<string name="svgs">SVGs</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">No se han encontrado ficheros con los filtros seleccionados.</string>
|
||||
<string name="change_filters_underlined"><u>Cambiar filtros</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIFit</string>
|
||||
<string name="raw_images">RAW images</string>
|
||||
<string name="svgs">SVGs</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Mediaa ei löytynyt valituilla suotimilla.</string>
|
||||
<string name="change_filters_underlined"><u>Muuta suotimia</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIFs</string>
|
||||
<string name="raw_images">Images RAW</string>
|
||||
<string name="svgs">SVGs</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Aucun fichier média trouvé avec les filtres sélectionnés</string>
|
||||
<string name="change_filters_underlined"><u>Modifier les filtres</u></string>
|
||||
|
||||
|
@ -187,7 +188,7 @@
|
|||
<string name="speed">Rapide</string>
|
||||
<string name="compromise">Compromis</string>
|
||||
<string name="avoid_showing_invalid_files">Eviter l\'affichage de fichiers invalides</string>
|
||||
<string name="show_image_file_types">Show image file types</string>
|
||||
<string name="show_image_file_types">Afficher les types d\'image</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniatures</string>
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIFs</string>
|
||||
<string name="raw_images">RAW images</string>
|
||||
<string name="svgs">SVGs</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Non se atoparon medios dos indicados polo filtro.</string>
|
||||
<string name="change_filters_underlined"><u>Cambiar filtro</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIF-ovi</string>
|
||||
<string name="raw_images">RAW slike</string>
|
||||
<string name="svgs">SVG-ovi</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Nije pronađena nijedna datoteka s odabranim filtrom.</string>
|
||||
<string name="change_filters_underlined"><u>Promijeni filter</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIF</string>
|
||||
<string name="raw_images">RAW kép</string>
|
||||
<string name="svgs">SVG</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">A kiválasztott szűrők nem találtak médiafájlokat.</string>
|
||||
<string name="change_filters_underlined"><u>Szűrők változtatása</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIF</string>
|
||||
<string name="raw_images">Gambar RAW</string>
|
||||
<string name="svgs">SVG</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Tidak ditemukan berkas media yang sesuai dengan filter ini.</string>
|
||||
<string name="change_filters_underlined"><u>Ubah filter</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIF</string>
|
||||
<string name="raw_images">Gambar RAW</string>
|
||||
<string name="svgs">SVG</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Tidak ditemukan berkas media yang sesuai dengan filter ini.</string>
|
||||
<string name="change_filters_underlined"><u>Ubah filter</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIF</string>
|
||||
<string name="raw_images">Immagini RAW</string>
|
||||
<string name="svgs">SVG</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Nessun file trovato con il filtro selezionato.</string>
|
||||
<string name="change_filters_underlined"><u>Cambia filtro</u></string>
|
||||
|
||||
|
@ -187,7 +188,7 @@
|
|||
<string name="speed">Veloce</string>
|
||||
<string name="compromise">Compromesso</string>
|
||||
<string name="avoid_showing_invalid_files">Evita di mostrare file non validi</string>
|
||||
<string name="show_image_file_types">Show image file types</string>
|
||||
<string name="show_image_file_types">Mostra i tipi di file immagine</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Anteprime</string>
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIF</string>
|
||||
<string name="raw_images">RAW</string>
|
||||
<string name="svgs">SVG</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">条件に該当するメディアがありません。</string>
|
||||
<string name="change_filters_underlined"><u>絞り込み条件を変更</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIFs</string>
|
||||
<string name="raw_images">RAW images</string>
|
||||
<string name="svgs">SVGs</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">설정된 필터와 일치하는 컨텐츠가 존재하지 않습니다.</string>
|
||||
<string name="change_filters_underlined"><u>필터 변경</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIF\'ai</string>
|
||||
<string name="raw_images">RAW images</string>
|
||||
<string name="svgs">SVGs</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Su pasirinktais filtrais nerasta medijos bylų.</string>
|
||||
<string name="change_filters_underlined"><u>Pakeisti filtrus</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIF-bilder</string>
|
||||
<string name="raw_images">RAW-format-bilder</string>
|
||||
<string name="svgs">SVG-bilder</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Ingen media-filer er funnet med de valgte filtrene.</string>
|
||||
<string name="change_filters_underlined"><u>Endre filtere</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIF-bestanden</string>
|
||||
<string name="raw_images">RAW-afbeeldingen</string>
|
||||
<string name="svgs">SVG-vectorafbeeldingen</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Er zijn geen bestanden gevonden met de huidige filters.</string>
|
||||
<string name="change_filters_underlined"><u>Filters aanpassen</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIFy</string>
|
||||
<string name="raw_images">Obrazy RAW</string>
|
||||
<string name="svgs">Obrazy SVG</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Nie znaleziono multimediów zgodnych z zastosowanymi filtrami.</string>
|
||||
<string name="change_filters_underlined"><u>Zmień filtry</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIFs</string>
|
||||
<string name="raw_images">Imagens RAW</string>
|
||||
<string name="svgs">SVGs</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Nenhum arquivo de mídia encontrado a partir dos filtros selecionados.</string>
|
||||
<string name="change_filters_underlined"><u>Alterar filtros</u></string>
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
<string name="dates_fixed_successfully">Dados corrigidos com sucesso</string>
|
||||
<string name="share_resized">Partilhar foto redimensionada</string>
|
||||
<string name="upgraded_from_free">Olá,\n\nparece que você utilizou a opção de atualização existente na versão antiga. Agora já pode desinstalar essa versão antiga.\n\nApenas perderá os itens existentes na reciclagem e os favoritos não assinalados mas também terá que repor as predefinições da aplicação.\n\nObrigado!</string>
|
||||
<string name="switch_to_file_search">Switch to file search across all visible folders</string>
|
||||
<string name="switch_to_file_search">Trocar para pesquisa de ficheiros em todas as pastas visíveis</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filtrar multimédia</string>
|
||||
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIF</string>
|
||||
<string name="raw_images">Imagens RAW</string>
|
||||
<string name="svgs">SVG</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Não foram encontrados ficheiros que cumpram os requisitos.</string>
|
||||
<string name="change_filters_underlined"><u>Alterar filtros</u></string>
|
||||
|
||||
|
@ -187,7 +188,7 @@
|
|||
<string name="speed">Velocidade</string>
|
||||
<string name="compromise">Compromisso</string>
|
||||
<string name="avoid_showing_invalid_files">Não mostrar ficheiros inválidos</string>
|
||||
<string name="show_image_file_types">Show image file types</string>
|
||||
<string name="show_image_file_types">Mostrar o tipo de imagem</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniaturas</string>
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIF</string>
|
||||
<string name="raw_images">RAW</string>
|
||||
<string name="svgs">SVG</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">При заданных фильтрах медиафайлы не найдены</string>
|
||||
<string name="change_filters_underlined"><u>Изменить фильтры</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIFká</string>
|
||||
<string name="raw_images">RAW obrázky</string>
|
||||
<string name="svgs">SVGčká</string>
|
||||
<string name="portraits">Portréty</string>
|
||||
<string name="no_media_with_filters">So zvolenými filtrami sa nenašli žiadne média súbory.</string>
|
||||
<string name="change_filters_underlined"><u>Zmeniť filtre</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIFi</string>
|
||||
<string name="raw_images">RAW slike</string>
|
||||
<string name="svgs">SVGji</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Na podlagi izbranih filtrov ne najdem nobenih medijskih datotek.</string>
|
||||
<string name="change_filters_underlined"><u>Spremeni filtre</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">ГИФови</string>
|
||||
<string name="raw_images">Сирове слике</string>
|
||||
<string name="svgs">СВГови</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Нема пронађених медија датотека са изабраним филтерима.</string>
|
||||
<string name="change_filters_underlined"><u>Измени филтере</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIF-bilder</string>
|
||||
<string name="raw_images">RAW-bilder</string>
|
||||
<string name="svgs">SVG-bilder</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Inga mediefiler hittades med valda filter.</string>
|
||||
<string name="change_filters_underlined"><u>Ändra filter</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIF\'ler</string>
|
||||
<string name="raw_images">RAW resimler</string>
|
||||
<string name="svgs">SVG\'ler</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">Seçilen filtrelerle hiçbir medya dosyası bulunamadı.</string>
|
||||
<string name="change_filters_underlined"><u>Filtreleri değiştir</u></string>
|
||||
|
||||
|
@ -64,7 +65,7 @@
|
|||
<string name="manage_included_folders">Dahil edilen klasörleri yönet</string>
|
||||
<string name="add_folder">Klasör ekle</string>
|
||||
<string name="included_activity_placeholder">Medya içeren, ancak uygulama tarafından tanınmayan bazı klasörleriniz varsa, bunları elle ekleyebilirsiniz.\n\nBuraya bazı öğeler eklemek başka bir klasörü hariç tutmaz.</string>
|
||||
<string name="no_media_add_included">No media files have been found. You can solve it by adding the folders containing media files manually.</string>
|
||||
<string name="no_media_add_included">Hiçbir medya dosyası bulunamadı. Medya dosyalarını içeren klasörleri elle ekleyerek çözebilirsiniz.</string>
|
||||
|
||||
<!-- Resizing -->
|
||||
<string name="resize">Yeniden boyutlandır</string>
|
||||
|
@ -116,8 +117,8 @@
|
|||
<string name="random_order">Rastgele sırala</string>
|
||||
<string name="move_backwards">Geriye doğru git</string>
|
||||
<string name="loop_slideshow">Slayt gösterisini tekrarla</string>
|
||||
<string name="animation">Animation</string>
|
||||
<string name="no_animation">None</string>
|
||||
<string name="animation">Animasyon</string>
|
||||
<string name="no_animation">Hiçbiri</string>
|
||||
<string name="fade">Fade</string>
|
||||
<string name="slide">Slide</string>
|
||||
<string name="slideshow_ended">Slayt gösterisi sona erdi</string>
|
||||
|
@ -134,14 +135,14 @@
|
|||
<string name="do_not_group_files">Dosyaları gruplandırma</string>
|
||||
<string name="by_folder">Klasör</string>
|
||||
<string name="by_last_modified">Son değiştirilme</string>
|
||||
<string name="by_last_modified_daily">Last modified (daily)</string>
|
||||
<string name="by_last_modified_monthly">Last modified (monthly)</string>
|
||||
<string name="by_last_modified_daily">Son değiştirilme (günlük)</string>
|
||||
<string name="by_last_modified_monthly">Son değiştirilme (aylık)</string>
|
||||
<string name="by_date_taken">Çekildiği tarih</string>
|
||||
<string name="by_date_taken_daily">Date taken (daily)</string>
|
||||
<string name="by_date_taken_monthly">Date taken (monthly)</string>
|
||||
<string name="by_date_taken_daily">Çekildiği tarih (günlük)</string>
|
||||
<string name="by_date_taken_monthly">Çekildiği tarih (aylık)</string>
|
||||
<string name="by_file_type">Dosya türü</string>
|
||||
<string name="by_extension">Uzantı</string>
|
||||
<string name="grouping_and_sorting">Please note that grouping and sorting are 2 independent fields</string>
|
||||
<string name="grouping_and_sorting">Lütfen gruplandırmanın ve sıralamanın 2 bağımsız alan olduğunu unutmayın</string>
|
||||
|
||||
<!-- Widgets -->
|
||||
<string name="folder_on_widget">Widget\'ta gösterilen klasör:</string>
|
||||
|
@ -183,11 +184,11 @@
|
|||
<string name="open_videos_on_separate_screen">Videoları yeni yatay hareketlerle daima ayrı bir ekranda aç</string>
|
||||
<string name="show_notch">Varsa bir çentik göster</string>
|
||||
<string name="allow_rotating_gestures">Hareketlerle resimlerin döndürülmesine izin ver</string>
|
||||
<string name="file_loading_priority">File loading priority</string>
|
||||
<string name="speed">Speed</string>
|
||||
<string name="compromise">Compromise</string>
|
||||
<string name="avoid_showing_invalid_files">Avoid showing invalid files</string>
|
||||
<string name="show_image_file_types">Show image file types</string>
|
||||
<string name="file_loading_priority">Dosya yükleme önceliği</string>
|
||||
<string name="speed">Hız</string>
|
||||
<string name="compromise">Ödünsüz</string>
|
||||
<string name="avoid_showing_invalid_files">Geçersiz dosyaları göstermekten kaçın</string>
|
||||
<string name="show_image_file_types">Resim dosyası türlerini göster</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Küçük resimler</string>
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIF-зображення</string>
|
||||
<string name="raw_images">RAW-зображення</string>
|
||||
<string name="svgs">SVG-зображення</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">З вибраними фільтрами мультимедійні файли не знайдено.</string>
|
||||
<string name="change_filters_underlined"><u>Змінити фільтри</u></string>
|
||||
|
||||
|
@ -187,7 +188,7 @@
|
|||
<string name="speed">Швидкість</string>
|
||||
<string name="compromise">Компроміс</string>
|
||||
<string name="avoid_showing_invalid_files">Запобігати показу пошкоджених файлів</string>
|
||||
<string name="show_image_file_types">Show image file types</string>
|
||||
<string name="show_image_file_types">Показувати типи файлів зображень</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Ескізи</string>
|
||||
|
|
|
@ -1,78 +1,79 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">简约图库</string>
|
||||
<string name="app_launcher_name">简约图库</string>
|
||||
<string name="app_launcher_name">图库</string>
|
||||
<string name="edit">编辑</string>
|
||||
<string name="open_camera">打开相机</string>
|
||||
<string name="hidden">(隐藏)</string>
|
||||
<string name="excluded">(排除)</string>
|
||||
<string name="pin_folder">锁定目录</string>
|
||||
<string name="unpin_folder">解除锁定目录</string>
|
||||
<string name="pin_to_the_top">固定到顶部</string>
|
||||
<string name="hidden">(已隐藏)</string>
|
||||
<string name="excluded">(已排除)</string>
|
||||
<string name="pin_folder">固定文件夹</string>
|
||||
<string name="unpin_folder">取消固定文件夹</string>
|
||||
<string name="pin_to_the_top">置顶固定</string>
|
||||
<string name="show_all">文件视图</string>
|
||||
<string name="all_folders">所有目录</string>
|
||||
<string name="folder_view">目录视图</string>
|
||||
<string name="other_folder">其他目录</string>
|
||||
<string name="show_on_map">在地图中显示</string>
|
||||
<string name="all_folders">所有文件夹</string>
|
||||
<string name="folder_view">文件夹视图</string>
|
||||
<string name="other_folder">其他文件夹</string>
|
||||
<string name="show_on_map">在地图上显示</string>
|
||||
<string name="unknown_location">未知位置</string>
|
||||
<string name="increase_column_count">增加一栏</string>
|
||||
<string name="reduce_column_count">减少一栏</string>
|
||||
<string name="change_cover_image">更改封面图片</string>
|
||||
<string name="increase_column_count">显示更多项目</string>
|
||||
<string name="reduce_column_count">显示更少项目</string>
|
||||
<string name="change_cover_image">更换封面图片</string>
|
||||
<string name="select_photo">选择图片</string>
|
||||
<string name="use_default">使用默认</string>
|
||||
<string name="volume">音量</string>
|
||||
<string name="brightness">亮度</string>
|
||||
<string name="lock_orientation">锁定方向</string>
|
||||
<string name="unlock_orientation">解锁方向</string>
|
||||
<string name="change_orientation">改变方向</string>
|
||||
<string name="lock_orientation">锁定屏幕方向</string>
|
||||
<string name="unlock_orientation">解锁屏幕方向</string>
|
||||
<string name="change_orientation">更改屏幕方向</string>
|
||||
<string name="force_portrait">强制竖屏</string>
|
||||
<string name="force_landscape">强制横屏</string>
|
||||
<string name="use_default_orientation">默认</string>
|
||||
<string name="use_default_orientation">使用默认屏幕方向</string>
|
||||
<string name="fix_date_taken">修复拍摄日期</string>
|
||||
<string name="fixing">正在修复…</string>
|
||||
<string name="dates_fixed_successfully">日期修复成功</string>
|
||||
<string name="share_resized">调整图像尺寸并分享</string>
|
||||
<string name="upgraded_from_free">嘿,\n\n看起来您是从旧的免费版应用程序升级的。您现在可以卸载旧版本,在该版本应用的设置菜单顶部有一个“升级到专业版”按钮。\n\n此操作将会删除回收站项目,并取消收藏已收藏的项目,你的应用设置也将会重置。\n\n谢谢!</string>
|
||||
<string name="switch_to_file_search">切换文件搜索目标为所有可见的文件夹</string>
|
||||
<string name="share_resized">调整尺寸并分享</string>
|
||||
<string name="upgraded_from_free">嘿,\n\n你似乎已经从旧的免费版应用升级。你现在可以卸载旧版本,在该版本的应用设置顶部有一个“升级到专业版”按钮。\n\n此操作会删除回收站项目,取消标记收藏项目,并重置应用设置。\n\n谢谢!</string>
|
||||
<string name="switch_to_file_search">切换文件搜索范围为所有可见的文件夹</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">要显示的媒体文件</string>
|
||||
<string name="filter_media">筛选媒体文件</string>
|
||||
<string name="images">图片</string>
|
||||
<string name="videos">视频</string>
|
||||
<string name="gifs">GIFs</string>
|
||||
<string name="gifs">GIF</string>
|
||||
<string name="raw_images">RAW 图片</string>
|
||||
<string name="svgs">SVGs</string>
|
||||
<string name="no_media_with_filters">所选的过滤器没有找到媒体文件。</string>
|
||||
<string name="change_filters_underlined"><u>更改过滤器</u></string>
|
||||
<string name="svgs">SVG</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">没有媒体文件匹配选定的筛选条件。</string>
|
||||
<string name="change_filters_underlined"><u>更改筛选条件</u></string>
|
||||
|
||||
<!-- Hide / Exclude -->
|
||||
<string name="hide_folder_description">通过添加文件 \'.nomedia\' 到目录,可以防止目录及其子目录下的所有媒体被扫描。您可以通过设置中的 \'显示隐藏目录\' 选项改变设置,是否继续?</string>
|
||||
<string name="hide_folder_description">该功能通过添加“.nomedia”文件到文件夹来隐藏它,这也会隐藏其所有子文件夹。您可以通过启用设置中的“显示隐藏的项目”选项来查看它们,是否继续?</string>
|
||||
<string name="exclude">排除</string>
|
||||
<string name="excluded_folders">排除目录</string>
|
||||
<string name="manage_excluded_folders">管理排除目录</string>
|
||||
<string name="exclude_folder_description">目录及其子目录中的媒体将不会在“简约图库”中显示,您可以在设置更改。</string>
|
||||
<string name="exclude_folder_parent">是否排除父目录?</string>
|
||||
<string name="excluded_folders">排除的文件夹</string>
|
||||
<string name="manage_excluded_folders">管理排除的文件夹</string>
|
||||
<string name="exclude_folder_description">该操作仅会在“简约图库”中排除显示选定的文件夹及其子文件夹。您可以在设置中管理排除的文件夹。</string>
|
||||
<string name="exclude_folder_parent">是否排除父文件夹?</string>
|
||||
<string name="excluded_activity_placeholder">此目录及其子目录中的媒体将不会在“简约图库”中显示,但是其它应用可以访问。如果您想对其它应用隐藏,请使用隐藏功能。</string>
|
||||
<string name="remove_all">移除全部</string>
|
||||
<string name="remove_all_description">是否删除排除列表中的所有项目?此操作不会删除文件夹本身。</string>
|
||||
<string name="hidden_folders">隐藏目录</string>
|
||||
<string name="manage_hidden_folders">管理隐藏目录</string>
|
||||
<string name="remove_all">全部移除</string>
|
||||
<string name="remove_all_description">是否移除排除列表中的所有项目?此操作不会删除文件夹本身。</string>
|
||||
<string name="hidden_folders">隐藏的文件夹</string>
|
||||
<string name="manage_hidden_folders">管理隐藏的文件夹</string>
|
||||
<string name="hidden_folders_placeholder">看起来你没有任何使用“.nomedia”文件隐藏的目录。</string>
|
||||
|
||||
<!-- Include folders -->
|
||||
<string name="include_folders">包含目录</string>
|
||||
<string name="manage_included_folders">管理包含目录</string>
|
||||
<string name="add_folder">添加目录</string>
|
||||
<string name="include_folders">包含的文件夹</string>
|
||||
<string name="manage_included_folders">管理包含的文件夹</string>
|
||||
<string name="add_folder">添加文件夹</string>
|
||||
<string name="included_activity_placeholder">如果您还有应用未扫描到的媒体文件,请添加所在目录路径。</string>
|
||||
<string name="no_media_add_included">没有找到媒体文件。请手动添加包含媒体文件的文件夹。</string>
|
||||
|
||||
<!-- Resizing -->
|
||||
<string name="resize">缩放</string>
|
||||
<string name="resize_and_save">缩放选定区域并保存</string>
|
||||
<string name="resize">调整尺寸</string>
|
||||
<string name="resize_and_save">调整选定项目的尺寸并保存</string>
|
||||
<string name="width">宽度</string>
|
||||
<string name="height">高度</string>
|
||||
<string name="keep_aspect_ratio">保持纵横比</string>
|
||||
<string name="invalid_values">请输入有效分辨率</string>
|
||||
<string name="keep_aspect_ratio">保持高宽比</string>
|
||||
<string name="invalid_values">请输入有效的分辨率</string>
|
||||
|
||||
<!-- Editor -->
|
||||
<string name="editor">编辑器</string>
|
||||
|
@ -82,8 +83,8 @@
|
|||
<string name="invalid_image_path">无效的图片路径</string>
|
||||
<string name="image_editing_failed">图片编辑失败</string>
|
||||
<string name="edit_image_with">编辑方式:</string>
|
||||
<string name="no_editor_found">未找到可用图片编辑器</string>
|
||||
<string name="unknown_file_location">未知的文件路径</string>
|
||||
<string name="no_editor_found">没有找到图片编辑器</string>
|
||||
<string name="unknown_file_location">未知文件位置</string>
|
||||
<string name="error_saving_file">无法覆盖源文件</string>
|
||||
<string name="rotate_left">向左旋转</string>
|
||||
<string name="rotate_right">向右旋转</string>
|
||||
|
@ -96,32 +97,32 @@
|
|||
|
||||
<!-- Set wallpaper -->
|
||||
<string name="simple_wallpaper">简约壁纸</string>
|
||||
<string name="set_as_wallpaper">设为壁纸</string>
|
||||
<string name="set_as_wallpaper_failed">壁纸设置失败</string>
|
||||
<string name="set_as_wallpaper_with">设为壁纸...</string>
|
||||
<string name="set_as_wallpaper">设置为壁纸</string>
|
||||
<string name="set_as_wallpaper_failed">设置壁纸失败</string>
|
||||
<string name="set_as_wallpaper_with">设置壁纸方式:</string>
|
||||
<string name="setting_wallpaper">正在设置壁纸…</string>
|
||||
<string name="wallpaper_set_successfully">壁纸设置成功</string>
|
||||
<string name="portrait_aspect_ratio">纵向长宽比</string>
|
||||
<string name="landscape_aspect_ratio">横向长宽比</string>
|
||||
<string name="home_screen">主屏幕壁纸</string>
|
||||
<string name="lock_screen">锁屏壁纸</string>
|
||||
<string name="home_and_lock_screen">主屏幕和锁屏壁纸</string>
|
||||
<string name="wallpaper_set_successfully">设置壁纸成功</string>
|
||||
<string name="portrait_aspect_ratio">纵向高宽比</string>
|
||||
<string name="landscape_aspect_ratio">横向高宽比</string>
|
||||
<string name="home_screen">主屏幕</string>
|
||||
<string name="lock_screen">锁定屏幕</string>
|
||||
<string name="home_and_lock_screen">主屏幕和锁定屏幕</string>
|
||||
|
||||
<!-- Slideshow -->
|
||||
<string name="slideshow">幻灯片</string>
|
||||
<string name="interval">间隔(秒):</string>
|
||||
<string name="include_photos">包括照片</string>
|
||||
<string name="include_videos">包括视频</string>
|
||||
<string name="include_gifs">包括 GIFs</string>
|
||||
<string name="include_photos">包含照片</string>
|
||||
<string name="include_videos">包含视频</string>
|
||||
<string name="include_gifs">包含GIF</string>
|
||||
<string name="random_order">随机顺序</string>
|
||||
<string name="move_backwards">倒播</string>
|
||||
<string name="loop_slideshow">循环幻灯片</string>
|
||||
<string name="move_backwards">倒序播放</string>
|
||||
<string name="loop_slideshow">循环播放</string>
|
||||
<string name="animation">动画</string>
|
||||
<string name="no_animation">无</string>
|
||||
<string name="fade">渐变</string>
|
||||
<string name="fade">渐隐</string>
|
||||
<string name="slide">滑动</string>
|
||||
<string name="slideshow_ended">幻灯片结束</string>
|
||||
<string name="no_media_for_slideshow">未发现可用媒体</string>
|
||||
<string name="no_media_for_slideshow">没有找到可播放幻灯片媒体文件</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">更改视图类型</string>
|
||||
|
@ -131,35 +132,35 @@
|
|||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
<string name="group_by">分组依据</string>
|
||||
<string name="do_not_group_files">禁用文件分组</string>
|
||||
<string name="by_folder">目录</string>
|
||||
<string name="by_last_modified">最近修改</string>
|
||||
<string name="by_last_modified_daily">最后修改(按日)</string>
|
||||
<string name="by_last_modified_monthly">最后修改(按月)</string>
|
||||
<string name="do_not_group_files">不分组文件</string>
|
||||
<string name="by_folder">文件夹</string>
|
||||
<string name="by_last_modified">最后修改时间</string>
|
||||
<string name="by_last_modified_daily">最后修改时间(按日)</string>
|
||||
<string name="by_last_modified_monthly">最后修改时间(按月)</string>
|
||||
<string name="by_date_taken">拍摄时间</string>
|
||||
<string name="by_date_taken_daily">拍摄日期(按日)</string>
|
||||
<string name="by_date_taken_monthly">拍摄日期(按月)</string>
|
||||
<string name="by_date_taken_daily">拍摄时间(按日)</string>
|
||||
<string name="by_date_taken_monthly">拍摄时间(按月)</string>
|
||||
<string name="by_file_type">文件类型</string>
|
||||
<string name="by_extension">扩展名</string>
|
||||
<string name="grouping_and_sorting">请注意,分组和排序是相互独立的</string>
|
||||
<string name="grouping_and_sorting">请注意,分组和排序是两种独立的组织方式</string>
|
||||
|
||||
<!-- Widgets -->
|
||||
<string name="folder_on_widget">要在小部件上显示的文件夹:</string>
|
||||
<string name="folder_on_widget">在小工具上显示的文件夹:</string>
|
||||
<string name="show_folder_name">显示文件夹名称</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="autoplay_videos">自动播放</string>
|
||||
<string name="autoplay_videos">自动播放视频</string>
|
||||
<string name="remember_last_video_position">记住上次视频播放位置</string>
|
||||
<string name="toggle_filename">显示文件名</string>
|
||||
<string name="loop_videos">循环播放视频</string>
|
||||
<string name="animate_gifs">GIF 缩略图</string>
|
||||
<string name="max_brightness">浏览时最大亮度</string>
|
||||
<string name="crop_thumbnails">裁剪缩略图</string>
|
||||
<string name="max_brightness">全屏查看媒体文件时最大亮度</string>
|
||||
<string name="crop_thumbnails">裁剪缩略图为正方形</string>
|
||||
<string name="show_thumbnail_video_duration">显示视频时长</string>
|
||||
<string name="screen_rotation_by">全屏方向</string>
|
||||
<string name="screen_rotation_by">旋转全屏媒体文件依据</string>
|
||||
<string name="screen_rotation_system_setting">系统设置</string>
|
||||
<string name="screen_rotation_device_rotation">设备方向</string>
|
||||
<string name="screen_rotation_aspect_ratio">根据长宽比</string>
|
||||
<string name="screen_rotation_device_rotation">设备旋转</string>
|
||||
<string name="screen_rotation_aspect_ratio">高宽比</string>
|
||||
<string name="black_background_at_fullscreen">全屏时使用黑色背景和状态栏</string>
|
||||
<string name="scroll_thumbnails_horizontally">水平滚动缩略图</string>
|
||||
<string name="hide_system_ui_at_fullscreen">全屏时自动隐藏状态栏</string>
|
||||
|
@ -184,10 +185,10 @@
|
|||
<string name="show_notch">显示留海(如果可用)</string>
|
||||
<string name="allow_rotating_gestures">允许使用手势旋转图像</string>
|
||||
<string name="file_loading_priority">文件加载优先级</string>
|
||||
<string name="speed">速度</string>
|
||||
<string name="speed">快速</string>
|
||||
<string name="compromise">折中</string>
|
||||
<string name="avoid_showing_invalid_files">避免显示无效的文件</string>
|
||||
<string name="show_image_file_types">Show image file types</string>
|
||||
<string name="show_image_file_types">显示图片文件类型</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">缩略图</string>
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIF</string>
|
||||
<string name="raw_images">RAW圖檔</string>
|
||||
<string name="svgs">SVG</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">選擇的篩選條件未發現媒體檔案。</string>
|
||||
<string name="change_filters_underlined"><u>更改篩選條件</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIF</string>
|
||||
<string name="raw_images">RAW圖檔</string>
|
||||
<string name="svgs">SVG</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">選擇的篩選條件未發現媒體檔案。</string>
|
||||
<string name="change_filters_underlined"><u>更改篩選條件</u></string>
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
<string name="gifs">GIFs</string>
|
||||
<string name="raw_images">RAW images</string>
|
||||
<string name="svgs">SVGs</string>
|
||||
<string name="portraits">Portraits</string>
|
||||
<string name="no_media_with_filters">No media files have been found with the selected filters.</string>
|
||||
<string name="change_filters_underlined"><u>Change filters</u></string>
|
||||
|
||||
|
|
0
gradlew
vendored
Executable file → Normal file
0
gradlew
vendored
Executable file → Normal file
Loading…
Reference in a new issue