108
CHANGELOG.md
|
@ -1,6 +1,114 @@
|
|||
Changelog
|
||||
==========
|
||||
|
||||
Version 6.17.1 *(2020-11-03)*
|
||||
----------------------------
|
||||
|
||||
* Reverting to the previous UI of the main screen, but keep rounded corners at list view
|
||||
* Some UI and stability improvements
|
||||
|
||||
Version 6.17.0 *(2020-11-02)*
|
||||
----------------------------
|
||||
|
||||
* Redesigning the main folders screen, try making it moderner (!)
|
||||
* Fix some glitches with deep zoomable fullscreen images not loading in well
|
||||
* Couple other UX, stability and translation improvements
|
||||
|
||||
Version 6.16.5 *(2020-10-28)*
|
||||
----------------------------
|
||||
|
||||
* Added some hidden folder handling related improvements
|
||||
* Fixed saving files on the SD card after editing
|
||||
* Couple other UX, translation and performance improvements
|
||||
|
||||
Version 6.16.4 *(2020-10-24)*
|
||||
----------------------------
|
||||
|
||||
* Fixed an editor glitch occurring if the file path contained spaces
|
||||
* Added some stability improvements
|
||||
|
||||
Version 6.16.3 *(2020-10-16)*
|
||||
----------------------------
|
||||
|
||||
* Updated the photo editor to fix some issues, mostly related to Android 11
|
||||
* Make sure file moving doesn't block the UI in any case
|
||||
|
||||
Version 6.16.2 *(2020-10-10)*
|
||||
----------------------------
|
||||
|
||||
* Fix sorting by Date Taken
|
||||
* Properly display some wrongly named WebP files
|
||||
|
||||
Version 6.16.1 *(2020-09-27)*
|
||||
----------------------------
|
||||
|
||||
* Fixed a bug with some folders not being recognized
|
||||
* Improved thumbnail loading performance in some cases
|
||||
|
||||
Version 6.16.0 *(2020-09-25)*
|
||||
----------------------------
|
||||
|
||||
* Adding support for animated WebP files
|
||||
* Fixed a permissions glitch after upgrading to Android 11
|
||||
* Added many performance related improvements
|
||||
|
||||
Version 6.15.6 *(2020-09-22)*
|
||||
----------------------------
|
||||
|
||||
* Fixed the file loading performance in some cases
|
||||
* Fixed some photo editor related glitches
|
||||
* Fixed the Use English language settings toggle
|
||||
|
||||
Version 6.15.5 *(2020-09-16)*
|
||||
----------------------------
|
||||
|
||||
* Properly fetch the latest available Last Modified of files
|
||||
|
||||
Version 6.15.4 *(2020-09-16)*
|
||||
----------------------------
|
||||
|
||||
* Improved file loading performance
|
||||
|
||||
Version 6.15.3 *(2020-09-09)*
|
||||
----------------------------
|
||||
|
||||
* Improved file loading performance in some cases
|
||||
* Some UX, translation and stability improvements
|
||||
|
||||
Version 6.15.2 *(2020-06-17)*
|
||||
----------------------------
|
||||
|
||||
* Fixed a glitch at caching fullscreen images
|
||||
* Properly recognize a new type of panoramic images
|
||||
|
||||
Version 6.15.1 *(2020-06-12)*
|
||||
----------------------------
|
||||
|
||||
* Fixed a glitch at caching fullscreen images
|
||||
* Improved batch renaming with patterns
|
||||
|
||||
Version 6.15.0 *(2020-06-07)*
|
||||
----------------------------
|
||||
|
||||
* Rescan the internal storage from time to time, look for new folders containing media
|
||||
* Improve the Search user experience, do not reset it at opening an item
|
||||
* Fixed some editor glitches
|
||||
* Speed up fullscreen image loading
|
||||
|
||||
Version 6.14.10 *(2020-05-29)*
|
||||
----------------------------
|
||||
|
||||
* Updated the image editor, fix a glitch with black preview
|
||||
* Show Portrait images by default on Android 10
|
||||
* Use a nicer icon on older devices
|
||||
* Some translation and stability improvements
|
||||
|
||||
Version 6.14.9 *(2020-05-18)*
|
||||
----------------------------
|
||||
|
||||
* Fixing some glitches with hidden folders not being shown when appropriate
|
||||
* Added some stability and translation improvements
|
||||
|
||||
Version 6.14.8 *(2020-05-05)*
|
||||
----------------------------
|
||||
|
||||
|
|
|
@ -17,9 +17,8 @@ android {
|
|||
applicationId "com.simplemobiletools.gallery.pro"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 29
|
||||
versionCode 309
|
||||
versionName "6.14.8"
|
||||
multiDexEnabled true
|
||||
versionCode 326
|
||||
versionName "6.17.1"
|
||||
setProperty("archivesBaseName", "gallery-$versionCode")
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
}
|
||||
|
@ -78,12 +77,11 @@ android {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.simplemobiletools:commons:5.28.4'
|
||||
implementation 'com.simplemobiletools:commons:5.31.19'
|
||||
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'
|
||||
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.19'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
|
||||
implementation 'com.google.android.exoplayer:exoplayer-core:2.9.6'
|
||||
implementation 'com.google.vr:sdk-panowidget:1.180.0'
|
||||
implementation 'com.google.vr:sdk-videowidget:1.180.0'
|
||||
|
@ -92,7 +90,9 @@ dependencies {
|
|||
implementation 'com.squareup.picasso:picasso:2.71828'
|
||||
implementation 'com.caverock:androidsvg-aar:1.3'
|
||||
implementation 'com.github.tibbi:gestureviews:512f929d82'
|
||||
implementation 'com.github.tibbi:subsampling-scale-image-view:381878c078'
|
||||
implementation 'com.github.tibbi:subsampling-scale-image-view:81c021514c'
|
||||
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
|
||||
implementation 'com.github.penfeizhou.android.animation:awebp:2.5.1'
|
||||
|
||||
kapt 'com.github.bumptech.glide:compiler:4.10.0'
|
||||
|
||||
|
|
|
@ -5,7 +5,12 @@
|
|||
package="com.simplemobiletools.gallery.pro"
|
||||
android:installLocation="auto">
|
||||
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
<!-- override the android:maxSdkVersion="28" from PhotoEditorSDK with some higher number -->
|
||||
<uses-permission
|
||||
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||
android:maxSdkVersion="40"
|
||||
tools:replace="android:maxSdkVersion" />
|
||||
|
||||
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||
<uses-permission
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
package com.simplemobiletools.gallery.pro
|
||||
|
||||
import androidx.multidex.MultiDexApplication
|
||||
import android.app.Application
|
||||
import com.github.ajalt.reprint.core.Reprint
|
||||
import com.simplemobiletools.commons.extensions.checkUseEnglish
|
||||
|
||||
class App : MultiDexApplication() {
|
||||
class App : Application() {
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
checkUseEnglish()
|
||||
|
|
|
@ -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.copyNonDimensionAttributesTo
|
||||
import com.simplemobiletools.gallery.pro.extensions.fixDateTaken
|
||||
import com.simplemobiletools.gallery.pro.extensions.openEditor
|
||||
import com.simplemobiletools.gallery.pro.helpers.*
|
||||
|
@ -196,47 +197,47 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
editor_draw_canvas.beGone()
|
||||
|
||||
val options = RequestOptions()
|
||||
.skipMemoryCache(true)
|
||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
.skipMemoryCache(true)
|
||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
|
||||
Glide.with(this)
|
||||
.asBitmap()
|
||||
.load(uri)
|
||||
.apply(options)
|
||||
.listener(object : RequestListener<Bitmap> {
|
||||
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Bitmap>?, isFirstResource: Boolean): Boolean {
|
||||
if (uri != originalUri) {
|
||||
uri = originalUri
|
||||
Handler().post {
|
||||
loadDefaultImageView()
|
||||
}
|
||||
.asBitmap()
|
||||
.load(uri)
|
||||
.apply(options)
|
||||
.listener(object : RequestListener<Bitmap> {
|
||||
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Bitmap>?, isFirstResource: Boolean): Boolean {
|
||||
if (uri != originalUri) {
|
||||
uri = originalUri
|
||||
Handler().post {
|
||||
loadDefaultImageView()
|
||||
}
|
||||
return false
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
override fun onResourceReady(bitmap: Bitmap?, model: Any?, target: Target<Bitmap>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
|
||||
val currentFilter = getFiltersAdapter()?.getCurrentFilter()
|
||||
if (filterInitialBitmap == null) {
|
||||
loadCropImageView()
|
||||
bottomCropRotateClicked()
|
||||
}
|
||||
|
||||
override fun onResourceReady(bitmap: Bitmap?, model: Any?, target: Target<Bitmap>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
|
||||
val currentFilter = getFiltersAdapter()?.getCurrentFilter()
|
||||
if (filterInitialBitmap == null) {
|
||||
loadCropImageView()
|
||||
bottomCropRotateClicked()
|
||||
if (filterInitialBitmap != null && currentFilter != null && currentFilter.filter.name != getString(R.string.none)) {
|
||||
default_image_view.onGlobalLayout {
|
||||
applyFilter(currentFilter)
|
||||
}
|
||||
|
||||
if (filterInitialBitmap != null && currentFilter != null && currentFilter.filter.name != getString(R.string.none)) {
|
||||
default_image_view.onGlobalLayout {
|
||||
applyFilter(currentFilter)
|
||||
}
|
||||
} else {
|
||||
filterInitialBitmap = bitmap
|
||||
}
|
||||
|
||||
if (isCropIntent) {
|
||||
bottom_primary_filter.beGone()
|
||||
bottom_primary_draw.beGone()
|
||||
}
|
||||
|
||||
return false
|
||||
} else {
|
||||
filterInitialBitmap = bitmap
|
||||
}
|
||||
}).into(default_image_view)
|
||||
|
||||
if (isCropIntent) {
|
||||
bottom_primary_filter.beGone()
|
||||
bottom_primary_draw.beGone()
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
}).into(default_image_view)
|
||||
}
|
||||
|
||||
private fun loadCropImageView() {
|
||||
|
@ -275,17 +276,17 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
val size = Point()
|
||||
windowManager.defaultDisplay.getSize(size)
|
||||
val options = RequestOptions()
|
||||
.format(DecodeFormat.PREFER_ARGB_8888)
|
||||
.skipMemoryCache(true)
|
||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
.fitCenter()
|
||||
.format(DecodeFormat.PREFER_ARGB_8888)
|
||||
.skipMemoryCache(true)
|
||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
.fitCenter()
|
||||
|
||||
try {
|
||||
val builder = Glide.with(applicationContext)
|
||||
.asBitmap()
|
||||
.load(uri)
|
||||
.apply(options)
|
||||
.into(editor_draw_canvas.width, editor_draw_canvas.height)
|
||||
.asBitmap()
|
||||
.load(uri)
|
||||
.apply(options)
|
||||
.into(editor_draw_canvas.width, editor_draw_canvas.height)
|
||||
|
||||
val bitmap = builder.get()
|
||||
runOnUiThread {
|
||||
|
@ -304,16 +305,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
|
||||
@TargetApi(Build.VERSION_CODES.N)
|
||||
private fun saveImage() {
|
||||
var inputStream: InputStream? = null
|
||||
try {
|
||||
if (isNougatPlus()) {
|
||||
inputStream = contentResolver.openInputStream(uri!!)
|
||||
oldExif = ExifInterface(inputStream!!)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
} finally {
|
||||
inputStream?.close()
|
||||
}
|
||||
setOldExif()
|
||||
|
||||
if (crop_image_view.isVisible()) {
|
||||
crop_image_view.getCroppedImageAsync()
|
||||
|
@ -354,6 +346,20 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
}
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.N)
|
||||
private fun setOldExif() {
|
||||
var inputStream: InputStream? = null
|
||||
try {
|
||||
if (isNougatPlus()) {
|
||||
inputStream = contentResolver.openInputStream(uri!!)
|
||||
oldExif = ExifInterface(inputStream!!)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
} finally {
|
||||
inputStream?.close()
|
||||
}
|
||||
}
|
||||
|
||||
private fun shareImage() {
|
||||
ensureBackgroundThread {
|
||||
when {
|
||||
|
@ -591,17 +597,17 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
|
||||
val bitmap = try {
|
||||
Glide.with(this)
|
||||
.asBitmap()
|
||||
.load(uri).listener(object : RequestListener<Bitmap> {
|
||||
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Bitmap>?, isFirstResource: Boolean): Boolean {
|
||||
showErrorToast(e.toString())
|
||||
return false
|
||||
}
|
||||
.asBitmap()
|
||||
.load(uri).listener(object : RequestListener<Bitmap> {
|
||||
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Bitmap>?, isFirstResource: Boolean): Boolean {
|
||||
showErrorToast(e.toString())
|
||||
return false
|
||||
}
|
||||
|
||||
override fun onResourceReady(resource: Bitmap?, model: Any?, target: Target<Bitmap>?, dataSource: DataSource?, isFirstResource: Boolean) = false
|
||||
})
|
||||
.submit(thumbnailSize, thumbnailSize)
|
||||
.get()
|
||||
override fun onResourceReady(resource: Bitmap?, model: Any?, target: Target<Bitmap>?, dataSource: DataSource?, isFirstResource: Boolean) = false
|
||||
})
|
||||
.submit(thumbnailSize, thumbnailSize)
|
||||
.get()
|
||||
} catch (e: GlideException) {
|
||||
showErrorToast(e)
|
||||
finish()
|
||||
|
@ -742,6 +748,8 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
|
||||
override fun onCropImageComplete(view: CropImageView, result: CropImageView.CropResult) {
|
||||
if (result.error == null) {
|
||||
setOldExif()
|
||||
|
||||
val bitmap = result.bitmap
|
||||
if (isSharingBitmap) {
|
||||
isSharingBitmap = false
|
||||
|
@ -862,7 +870,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
try {
|
||||
if (isNougatPlus()) {
|
||||
val newExif = ExifInterface(file.absolutePath)
|
||||
oldExif?.copyTo(newExif, false)
|
||||
oldExif?.copyNonDimensionAttributesTo(newExif)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
|
|
|
@ -23,7 +23,6 @@ import androidx.recyclerview.widget.RecyclerView
|
|||
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
||||
import com.simplemobiletools.commons.dialogs.CreateNewFolderDialog
|
||||
import com.simplemobiletools.commons.dialogs.FilePickerDialog
|
||||
import com.simplemobiletools.commons.dialogs.NewAppsIconsDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.*
|
||||
import com.simplemobiletools.commons.models.FileDirItem
|
||||
|
@ -84,7 +83,6 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
private var mStoredCropThumbnails = true
|
||||
private var mStoredScrollHorizontally = true
|
||||
private var mStoredShowMediaCount = true
|
||||
private var mStoredShowInfoBubble = true
|
||||
private var mStoredTextColor = 0
|
||||
private var mStoredPrimaryColor = 0
|
||||
|
||||
|
@ -155,12 +153,6 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
finish()
|
||||
}
|
||||
}
|
||||
|
||||
// notify some users about the Dialer, SMS Messenger and Voice Recorder apps
|
||||
if (!config.wasMessengerRecorderShown && config.appRunCount > 35) {
|
||||
NewAppsIconsDialog(this)
|
||||
config.wasMessengerRecorderShown = true
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
|
@ -204,28 +196,28 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
|
||||
directories_horizontal_fastscroller.updateBubbleColors()
|
||||
directories_vertical_fastscroller.updateBubbleColors()
|
||||
directories_horizontal_fastscroller.allowBubbleDisplay = config.showInfoBubble
|
||||
directories_vertical_fastscroller.allowBubbleDisplay = config.showInfoBubble
|
||||
directories_refresh_layout.isEnabled = config.enablePullToRefresh
|
||||
invalidateOptionsMenu()
|
||||
|
||||
directories_empty_placeholder.setTextColor(config.textColor)
|
||||
directories_empty_placeholder_2.setTextColor(getAdjustedPrimaryColor())
|
||||
directories_switch_searching.setTextColor(getAdjustedPrimaryColor())
|
||||
directories_switch_searching.underlineText()
|
||||
|
||||
if (mIsPasswordProtectionPending && !mWasProtectionHandled) {
|
||||
handleAppPasswordProtection {
|
||||
mWasProtectionHandled = it
|
||||
if (it) {
|
||||
mIsPasswordProtectionPending = false
|
||||
tryLoadGallery()
|
||||
} else {
|
||||
finish()
|
||||
if (!mIsSearchOpen) {
|
||||
invalidateOptionsMenu()
|
||||
if (mIsPasswordProtectionPending && !mWasProtectionHandled) {
|
||||
handleAppPasswordProtection {
|
||||
mWasProtectionHandled = it
|
||||
if (it) {
|
||||
mIsPasswordProtectionPending = false
|
||||
tryLoadGallery()
|
||||
} else {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
tryLoadGallery()
|
||||
}
|
||||
} else {
|
||||
tryLoadGallery()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -239,7 +231,6 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
|
||||
override fun onStop() {
|
||||
super.onStop()
|
||||
mSearchMenuItem?.collapseActionView()
|
||||
|
||||
if (config.temporarilyShowHidden || config.tempSkipDeleteConfirmation) {
|
||||
mTempShowHiddenHandler.postDelayed({
|
||||
|
@ -342,7 +333,6 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
mStoredCropThumbnails = cropThumbnails
|
||||
mStoredScrollHorizontally = scrollHorizontally
|
||||
mStoredShowMediaCount = showMediaCount
|
||||
mStoredShowInfoBubble = showInfoBubble
|
||||
mStoredTextColor = textColor
|
||||
mStoredPrimaryColor = primaryColor
|
||||
}
|
||||
|
@ -439,22 +429,27 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
}
|
||||
|
||||
private fun tryLoadGallery() {
|
||||
if (hasPermission(PERMISSION_WRITE_STORAGE)) {
|
||||
if (!config.wasUpgradedFromFreeShown && isPackageInstalled("com.simplemobiletools.gallery")) {
|
||||
ConfirmationDialog(this, "", R.string.upgraded_from_free, R.string.ok, 0) {}
|
||||
config.wasUpgradedFromFreeShown = true
|
||||
}
|
||||
handlePermission(PERMISSION_WRITE_STORAGE) {
|
||||
if (it) {
|
||||
if (!config.wasUpgradedFromFreeShown && isPackageInstalled("com.simplemobiletools.gallery")) {
|
||||
ConfirmationDialog(this, "", R.string.upgraded_from_free, R.string.ok, 0) {}
|
||||
config.wasUpgradedFromFreeShown = true
|
||||
}
|
||||
|
||||
checkOTGPath()
|
||||
checkDefaultSpamFolders()
|
||||
checkOTGPath()
|
||||
checkDefaultSpamFolders()
|
||||
|
||||
if (config.showAll) {
|
||||
showAllMedia()
|
||||
if (config.showAll) {
|
||||
showAllMedia()
|
||||
} else {
|
||||
getDirectories()
|
||||
}
|
||||
|
||||
setupLayoutManager()
|
||||
} else {
|
||||
getDirectories()
|
||||
toast(R.string.no_storage_permissions)
|
||||
finish()
|
||||
}
|
||||
|
||||
setupLayoutManager()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -638,6 +633,21 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
layoutManager.spanCount = config.dirColumnCnt
|
||||
}
|
||||
|
||||
private fun setupListLayoutManager() {
|
||||
val layoutManager = directories_grid.layoutManager as MyGridLayoutManager
|
||||
layoutManager.spanCount = 1
|
||||
layoutManager.orientation = RecyclerView.VERTICAL
|
||||
directories_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||
|
||||
val smallMargin = resources.getDimension(R.dimen.small_margin).toInt()
|
||||
(directories_grid.layoutParams as RelativeLayout.LayoutParams).apply {
|
||||
topMargin = smallMargin
|
||||
bottomMargin = smallMargin
|
||||
}
|
||||
|
||||
mZoomListener = null
|
||||
}
|
||||
|
||||
private fun measureRecyclerViewContent(directories: ArrayList<Directory>) {
|
||||
directories_grid.onGlobalLayout {
|
||||
if (config.scrollHorizontally) {
|
||||
|
@ -687,21 +697,6 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
}
|
||||
}
|
||||
|
||||
private fun setupListLayoutManager() {
|
||||
val layoutManager = directories_grid.layoutManager as MyGridLayoutManager
|
||||
layoutManager.spanCount = 1
|
||||
layoutManager.orientation = RecyclerView.VERTICAL
|
||||
directories_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||
|
||||
val smallMargin = resources.getDimension(R.dimen.small_margin).toInt()
|
||||
(directories_grid.layoutParams as RelativeLayout.LayoutParams).apply {
|
||||
topMargin = smallMargin
|
||||
bottomMargin = smallMargin
|
||||
}
|
||||
|
||||
mZoomListener = null
|
||||
}
|
||||
|
||||
private fun toggleRecycleBin(show: Boolean) {
|
||||
config.showRecycleBinAtFolders = show
|
||||
invalidateOptionsMenu()
|
||||
|
@ -907,10 +902,13 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
val hiddenString = getString(R.string.hidden)
|
||||
val albumCovers = config.parseAlbumCovers()
|
||||
val includedFolders = config.includedFolders
|
||||
val noMediaFolders = getNoMediaFoldersSync()
|
||||
val tempFolderPath = config.tempFolderPath
|
||||
val getProperFileSize = config.directorySorting and SORT_BY_SIZE != 0
|
||||
val favoritePaths = getFavoritePaths()
|
||||
val dirPathsToRemove = ArrayList<String>()
|
||||
val lastModifieds = if (isRPlus()) mLastMediaFetcher!!.getLastModifieds() else HashMap()
|
||||
val dateTakens = mLastMediaFetcher!!.getDateTakens()
|
||||
|
||||
try {
|
||||
for (directory in dirs) {
|
||||
|
@ -930,14 +928,16 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
grouping and GROUP_BY_LAST_MODIFIED_DAILY != 0 ||
|
||||
grouping and GROUP_BY_LAST_MODIFIED_MONTHLY != 0
|
||||
|
||||
val curMedia = mLastMediaFetcher!!.getFilesFrom(directory.path, getImagesOnly, getVideosOnly, getProperDateTaken, getProperLastModified, getProperFileSize, favoritePaths, false)
|
||||
val curMedia = mLastMediaFetcher!!.getFilesFrom(directory.path, getImagesOnly, getVideosOnly, getProperDateTaken, getProperLastModified,
|
||||
getProperFileSize, favoritePaths, false, lastModifieds, dateTakens)
|
||||
|
||||
val newDir = if (curMedia.isEmpty()) {
|
||||
if (directory.path != tempFolderPath) {
|
||||
dirPathsToRemove.add(directory.path)
|
||||
}
|
||||
directory
|
||||
} else {
|
||||
createDirectoryFromMedia(directory.path, curMedia, albumCovers, hiddenString, includedFolders, getProperFileSize)
|
||||
createDirectoryFromMedia(directory.path, curMedia, albumCovers, hiddenString, includedFolders, getProperFileSize, noMediaFolders)
|
||||
}
|
||||
|
||||
// we are looping through the already displayed folders looking for changes, do not do anything if nothing changed
|
||||
|
@ -969,14 +969,19 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
}.start()
|
||||
}
|
||||
|
||||
getCachedMedia(directory.path, getVideosOnly, getImagesOnly) {
|
||||
it.forEach {
|
||||
if (!curMedia.contains(it)) {
|
||||
val path = (it as? Medium)?.path
|
||||
if (path != null) {
|
||||
deleteDBPath(path)
|
||||
if (!directory.isRecycleBin()) {
|
||||
getCachedMedia(directory.path, getVideosOnly, getImagesOnly) {
|
||||
val mediaToDelete = ArrayList<Medium>()
|
||||
it.forEach {
|
||||
if (!curMedia.contains(it)) {
|
||||
val medium = it as? Medium
|
||||
val path = medium?.path
|
||||
if (path != null) {
|
||||
mediaToDelete.add(medium)
|
||||
}
|
||||
}
|
||||
}
|
||||
mediaDB.deleteMedia(*mediaToDelete.toTypedArray())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1022,7 +1027,9 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
grouping and GROUP_BY_LAST_MODIFIED_DAILY != 0 ||
|
||||
grouping and GROUP_BY_LAST_MODIFIED_MONTHLY != 0
|
||||
|
||||
val newMedia = mLastMediaFetcher!!.getFilesFrom(folder, getImagesOnly, getVideosOnly, getProperDateTaken, getProperLastModified, getProperFileSize, favoritePaths, false)
|
||||
val newMedia = mLastMediaFetcher!!.getFilesFrom(folder, getImagesOnly, getVideosOnly, getProperDateTaken, getProperLastModified,
|
||||
getProperFileSize, favoritePaths, false, lastModifieds, dateTakens)
|
||||
|
||||
if (newMedia.isEmpty()) {
|
||||
continue
|
||||
}
|
||||
|
@ -1036,7 +1043,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
}
|
||||
}
|
||||
|
||||
val newDir = createDirectoryFromMedia(folder, newMedia, albumCovers, hiddenString, includedFolders, getProperFileSize)
|
||||
val newDir = createDirectoryFromMedia(folder, newMedia, albumCovers, hiddenString, includedFolders, getProperFileSize, noMediaFolders)
|
||||
dirs.add(newDir)
|
||||
setupAdapter(dirs)
|
||||
|
||||
|
@ -1077,6 +1084,11 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
}.mapTo(everShownFolders) { it.path }
|
||||
|
||||
try {
|
||||
// scan the internal storage from time to time for new folders
|
||||
if (config.appRunCount == 1 || config.appRunCount % 30 == 0) {
|
||||
everShownFolders.addAll(getFoldersWithMedia(config.internalStoragePath))
|
||||
}
|
||||
|
||||
// catch some extreme exceptions like too many everShownFolders for storing, shouldnt really happen
|
||||
config.everShownFolders = everShownFolders
|
||||
} catch (e: Exception) {
|
||||
|
@ -1171,12 +1183,10 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
directories_horizontal_fastscroller.beVisibleIf(allowHorizontalScroll)
|
||||
|
||||
if (allowHorizontalScroll) {
|
||||
directories_horizontal_fastscroller.allowBubbleDisplay = config.showInfoBubble
|
||||
directories_horizontal_fastscroller.setViews(directories_grid, directories_refresh_layout) {
|
||||
directories_horizontal_fastscroller.updateBubbleText(getBubbleTextItem(it))
|
||||
}
|
||||
} else {
|
||||
directories_vertical_fastscroller.allowBubbleDisplay = config.showInfoBubble
|
||||
directories_vertical_fastscroller.setViews(directories_grid, directories_refresh_layout) {
|
||||
directories_vertical_fastscroller.updateBubbleText(getBubbleTextItem(it))
|
||||
}
|
||||
|
@ -1326,6 +1336,27 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
}
|
||||
}
|
||||
|
||||
private fun getFoldersWithMedia(path: String): HashSet<String> {
|
||||
val folders = HashSet<String>()
|
||||
try {
|
||||
val files = File(path).listFiles()
|
||||
if (files != null) {
|
||||
files.sortBy { !it.isDirectory }
|
||||
for (file in files) {
|
||||
if (file.isDirectory && !file.startsWith("${config.internalStoragePath}/Android")) {
|
||||
folders.addAll(getFoldersWithMedia(file.absolutePath))
|
||||
} else if (file.isFile && file.isMediaFile()) {
|
||||
folders.add(file.parent ?: "")
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (ignored: Exception) {
|
||||
}
|
||||
|
||||
return folders
|
||||
}
|
||||
|
||||
override fun refreshItems() {
|
||||
getDirectories()
|
||||
}
|
||||
|
|
|
@ -24,10 +24,7 @@ import com.bumptech.glide.request.target.SimpleTarget
|
|||
import com.bumptech.glide.request.transition.Transition
|
||||
import com.simplemobiletools.commons.dialogs.CreateNewFolderDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE
|
||||
import com.simplemobiletools.commons.helpers.REQUEST_EDIT_IMAGE
|
||||
import com.simplemobiletools.commons.helpers.SORT_BY_RANDOM
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
import com.simplemobiletools.commons.helpers.*
|
||||
import com.simplemobiletools.commons.models.FileDirItem
|
||||
import com.simplemobiletools.commons.views.MyGridLayoutManager
|
||||
import com.simplemobiletools.commons.views.MyRecyclerView
|
||||
|
@ -76,7 +73,6 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
|
|||
private var mStoredAnimateGifs = true
|
||||
private var mStoredCropThumbnails = true
|
||||
private var mStoredScrollHorizontally = true
|
||||
private var mStoredShowInfoBubble = true
|
||||
private var mStoredShowFileTypes = true
|
||||
private var mStoredTextColor = 0
|
||||
private var mStoredPrimaryColor = 0
|
||||
|
@ -159,13 +155,14 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
|
|||
|
||||
media_horizontal_fastscroller.updateBubbleColors()
|
||||
media_vertical_fastscroller.updateBubbleColors()
|
||||
media_horizontal_fastscroller.allowBubbleDisplay = config.showInfoBubble
|
||||
media_vertical_fastscroller.allowBubbleDisplay = config.showInfoBubble
|
||||
media_refresh_layout.isEnabled = config.enablePullToRefresh
|
||||
invalidateOptionsMenu()
|
||||
media_empty_text_placeholder.setTextColor(config.textColor)
|
||||
media_empty_text_placeholder_2.setTextColor(getAdjustedPrimaryColor())
|
||||
|
||||
if (!mIsSearchOpen) {
|
||||
invalidateOptionsMenu()
|
||||
}
|
||||
|
||||
if (mMedia.isEmpty() || config.getFolderSorting(mPath) and SORT_BY_RANDOM == 0) {
|
||||
if (shouldSkipAuthentication()) {
|
||||
tryLoadGallery()
|
||||
|
@ -195,7 +192,6 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
|
|||
|
||||
override fun onStop() {
|
||||
super.onStop()
|
||||
mSearchMenuItem?.collapseActionView()
|
||||
|
||||
if (config.temporarilyShowHidden || config.tempSkipDeleteConfirmation) {
|
||||
mTempShowHiddenHandler.postDelayed({
|
||||
|
@ -292,7 +288,6 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
|
|||
mStoredAnimateGifs = animateGifs
|
||||
mStoredCropThumbnails = cropThumbnails
|
||||
mStoredScrollHorizontally = scrollHorizontally
|
||||
mStoredShowInfoBubble = showInfoBubble
|
||||
mStoredShowFileTypes = showThumbnailFileTypes
|
||||
mStoredTextColor = textColor
|
||||
mStoredPrimaryColor = primaryColor
|
||||
|
@ -393,7 +388,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
|
|||
initZoomListener()
|
||||
val fastscroller = if (config.scrollHorizontally) media_horizontal_fastscroller else media_vertical_fastscroller
|
||||
MediaAdapter(this, mMedia.clone() as ArrayList<ThumbnailItem>, this, mIsGetImageIntent || mIsGetVideoIntent || mIsGetAnyIntent,
|
||||
mAllowPickingMultiple, mPath, media_grid, fastscroller) {
|
||||
mAllowPickingMultiple, mPath, media_grid, fastscroller) {
|
||||
if (it is Medium && !isFinishing) {
|
||||
itemClicked(it.path)
|
||||
}
|
||||
|
@ -424,12 +419,10 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
|
|||
|
||||
val sorting = config.getFolderSorting(if (mShowAll) SHOW_ALL else mPath)
|
||||
if (allowHorizontalScroll) {
|
||||
media_horizontal_fastscroller.allowBubbleDisplay = config.showInfoBubble
|
||||
media_horizontal_fastscroller.setViews(media_grid, media_refresh_layout) {
|
||||
media_horizontal_fastscroller.updateBubbleText(getBubbleTextItem(it, sorting))
|
||||
}
|
||||
} else {
|
||||
media_vertical_fastscroller.allowBubbleDisplay = config.showInfoBubble
|
||||
media_vertical_fastscroller.setViews(media_grid, media_refresh_layout) {
|
||||
media_vertical_fastscroller.updateBubbleText(getBubbleTextItem(it, sorting))
|
||||
}
|
||||
|
@ -799,24 +792,24 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
|
|||
val ratio = wantedWidth.toFloat() / wantedHeight
|
||||
|
||||
val options = RequestOptions()
|
||||
.override((wantedWidth * ratio).toInt(), wantedHeight)
|
||||
.fitCenter()
|
||||
.override((wantedWidth * ratio).toInt(), wantedHeight)
|
||||
.fitCenter()
|
||||
|
||||
Glide.with(this)
|
||||
.asBitmap()
|
||||
.load(File(path))
|
||||
.apply(options)
|
||||
.into(object : SimpleTarget<Bitmap>() {
|
||||
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
|
||||
try {
|
||||
WallpaperManager.getInstance(applicationContext).setBitmap(resource)
|
||||
setResult(Activity.RESULT_OK)
|
||||
} catch (ignored: IOException) {
|
||||
}
|
||||
|
||||
finish()
|
||||
.asBitmap()
|
||||
.load(File(path))
|
||||
.apply(options)
|
||||
.into(object : SimpleTarget<Bitmap>() {
|
||||
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
|
||||
try {
|
||||
WallpaperManager.getInstance(applicationContext).setBitmap(resource)
|
||||
setResult(Activity.RESULT_OK)
|
||||
} catch (ignored: IOException) {
|
||||
}
|
||||
})
|
||||
|
||||
finish()
|
||||
}
|
||||
})
|
||||
} else if (mIsGetImageIntent || mIsGetVideoIntent || mIsGetAnyIntent) {
|
||||
Intent().apply {
|
||||
data = Uri.parse(path)
|
||||
|
@ -872,12 +865,12 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
|
|||
mLatestMediaDateId = getLatestMediaByDateId()
|
||||
if (!isFromCache) {
|
||||
val mediaToInsert = (mMedia).filter { it is Medium && it.deletedTS == 0L }.map { it as Medium }
|
||||
try {
|
||||
Thread {
|
||||
Thread {
|
||||
try {
|
||||
mediaDB.insertAll(mediaToInsert)
|
||||
}.start()
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ import androidx.core.view.MenuItemCompat
|
|||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.VIEW_TYPE_GRID
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
import com.simplemobiletools.commons.models.FileDirItem
|
||||
import com.simplemobiletools.commons.views.MyGridLayoutManager
|
||||
|
@ -218,12 +219,10 @@ class SearchActivity : SimpleActivity(), MediaOperationsListener {
|
|||
|
||||
val sorting = config.getFolderSorting(SHOW_ALL)
|
||||
if (allowHorizontalScroll) {
|
||||
media_horizontal_fastscroller.allowBubbleDisplay = config.showInfoBubble
|
||||
media_horizontal_fastscroller.setViews(media_grid) {
|
||||
media_horizontal_fastscroller.updateBubbleText(getBubbleTextItem(it, sorting))
|
||||
}
|
||||
} else {
|
||||
media_vertical_fastscroller.allowBubbleDisplay = config.showInfoBubble
|
||||
media_vertical_fastscroller.setViews(media_grid) {
|
||||
media_vertical_fastscroller.updateBubbleText(getBubbleTextItem(it, sorting))
|
||||
}
|
||||
|
|
|
@ -70,7 +70,6 @@ class SettingsActivity : SimpleActivity() {
|
|||
setupThumbnailFileTypes()
|
||||
setupShowMediaCount()
|
||||
setupKeepLastModified()
|
||||
setupShowInfoBubble()
|
||||
setupEnablePullToRefresh()
|
||||
setupAllowZoomingImages()
|
||||
setupShowHighestQuality()
|
||||
|
@ -428,14 +427,6 @@ class SettingsActivity : SimpleActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
private fun setupShowInfoBubble() {
|
||||
settings_show_info_bubble.isChecked = config.showInfoBubble
|
||||
settings_show_info_bubble_holder.setOnClickListener {
|
||||
settings_show_info_bubble.toggle()
|
||||
config.showInfoBubble = settings_show_info_bubble.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupEnablePullToRefresh() {
|
||||
settings_enable_pull_to_refresh.isChecked = config.enablePullToRefresh
|
||||
settings_enable_pull_to_refresh_holder.setOnClickListener {
|
||||
|
@ -650,7 +641,6 @@ class SettingsActivity : SimpleActivity() {
|
|||
put(CROP_THUMBNAILS, config.cropThumbnails)
|
||||
put(SHOW_THUMBNAIL_VIDEO_DURATION, config.showThumbnailVideoDuration)
|
||||
put(SHOW_MEDIA_COUNT, config.showMediaCount)
|
||||
put(SHOW_INFO_BUBBLE, config.showInfoBubble)
|
||||
put(SCROLL_HORIZONTALLY, config.scrollHorizontally)
|
||||
put(ENABLE_PULL_TO_REFRESH, config.enablePullToRefresh)
|
||||
put(MAX_BRIGHTNESS, config.maxBrightness)
|
||||
|
@ -786,7 +776,6 @@ class SettingsActivity : SimpleActivity() {
|
|||
CROP_THUMBNAILS -> config.cropThumbnails = value.toBoolean()
|
||||
SHOW_THUMBNAIL_VIDEO_DURATION -> config.showThumbnailVideoDuration = value.toBoolean()
|
||||
SHOW_MEDIA_COUNT -> config.showMediaCount = value.toBoolean()
|
||||
SHOW_INFO_BUBBLE -> config.showInfoBubble = value.toBoolean()
|
||||
SCROLL_HORIZONTALLY -> config.scrollHorizontally = value.toBoolean()
|
||||
ENABLE_PULL_TO_REFRESH -> config.enablePullToRefresh = value.toBoolean()
|
||||
MAX_BRIGHTNESS -> config.maxBrightness = value.toBoolean()
|
||||
|
|
|
@ -187,11 +187,11 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
findItem(R.id.menu_change_orientation).isVisible = rotationDegrees == 0 && visibleBottomActions and BOTTOM_ACTION_CHANGE_ORIENTATION == 0
|
||||
findItem(R.id.menu_change_orientation).icon = resources.getDrawable(getChangeOrientationIcon())
|
||||
findItem(R.id.menu_rotate).setShowAsAction(
|
||||
if (rotationDegrees != 0) {
|
||||
MenuItem.SHOW_AS_ACTION_ALWAYS
|
||||
} else {
|
||||
MenuItem.SHOW_AS_ACTION_IF_ROOM
|
||||
})
|
||||
if (rotationDegrees != 0) {
|
||||
MenuItem.SHOW_AS_ACTION_ALWAYS
|
||||
} else {
|
||||
MenuItem.SHOW_AS_ACTION_IF_ROOM
|
||||
})
|
||||
}
|
||||
|
||||
if (visibleBottomActions != 0) {
|
||||
|
@ -718,10 +718,10 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
}
|
||||
|
||||
val shortcut = ShortcutInfo.Builder(this, path)
|
||||
.setShortLabel(medium.name)
|
||||
.setIcon(Icon.createWithBitmap(drawable.convertToBitmap()))
|
||||
.setIntent(intent)
|
||||
.build()
|
||||
.setShortLabel(medium.name)
|
||||
.setIcon(Icon.createWithBitmap(drawable.convertToBitmap()))
|
||||
.setIntent(intent)
|
||||
.build()
|
||||
|
||||
manager.requestPinShortcut(shortcut, null)
|
||||
}
|
||||
|
@ -915,27 +915,27 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
}
|
||||
|
||||
val options = RequestOptions()
|
||||
.skipMemoryCache(true)
|
||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
.skipMemoryCache(true)
|
||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
|
||||
Glide.with(this)
|
||||
.asBitmap()
|
||||
.load(path)
|
||||
.apply(options)
|
||||
.listener(object : RequestListener<Bitmap> {
|
||||
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Bitmap>?, isFirstResource: Boolean): Boolean {
|
||||
showErrorToast(e?.localizedMessage ?: "")
|
||||
return false
|
||||
.asBitmap()
|
||||
.load(path)
|
||||
.apply(options)
|
||||
.listener(object : RequestListener<Bitmap> {
|
||||
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Bitmap>?, isFirstResource: Boolean): Boolean {
|
||||
showErrorToast(e?.localizedMessage ?: "")
|
||||
return false
|
||||
}
|
||||
|
||||
override fun onResourceReady(bitmap: Bitmap?, model: Any?, target: Target<Bitmap>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
|
||||
if (bitmap != null) {
|
||||
printHelper.printBitmap(path.getFilenameFromPath(), bitmap)
|
||||
}
|
||||
|
||||
override fun onResourceReady(bitmap: Bitmap?, model: Any?, target: Target<Bitmap>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
|
||||
if (bitmap != null) {
|
||||
printHelper.printBitmap(path.getFilenameFromPath(), bitmap)
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
}).submit(requestedWidth, requestedHeight)
|
||||
return false
|
||||
}
|
||||
}).submit(requestedWidth, requestedHeight)
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
}
|
||||
|
@ -986,7 +986,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
|
||||
if (isNougatPlus()) {
|
||||
val newExif = ExifInterface(file.absolutePath)
|
||||
oldExif?.copyTo(newExif, false)
|
||||
oldExif?.copyNonDimensionAttributesTo(newExif)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
|
@ -1261,8 +1261,8 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
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, bottom_set_as, bottom_copy, bottom_move,
|
||||
bottom_resize).forEach {
|
||||
bottom_slideshow, bottom_show_on_map, bottom_toggle_file_visibility, bottom_rename, bottom_set_as, bottom_copy, bottom_move,
|
||||
bottom_resize).forEach {
|
||||
it.isClickable = !mIsFullScreen
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@ import com.simplemobiletools.gallery.pro.R
|
|||
import com.simplemobiletools.gallery.pro.dialogs.PickDirectoryDialog
|
||||
import com.simplemobiletools.gallery.pro.extensions.*
|
||||
import com.simplemobiletools.gallery.pro.helpers.MyWidgetProvider
|
||||
import com.simplemobiletools.gallery.pro.helpers.ROUNDED_CORNERS_NONE
|
||||
import com.simplemobiletools.gallery.pro.models.Directory
|
||||
import com.simplemobiletools.gallery.pro.models.Widget
|
||||
import kotlinx.android.synthetic.main.activity_widget_config.*
|
||||
|
@ -166,7 +167,7 @@ class WidgetConfigureActivity : SimpleActivity() {
|
|||
val path = directoryDao.getDirectoryThumbnail(folderPath)
|
||||
if (path != null) {
|
||||
runOnUiThread {
|
||||
loadJpg(path, config_image, config.cropThumbnails)
|
||||
loadJpg(path, config_image, config.cropThumbnails, ROUNDED_CORNERS_NONE)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,9 +15,7 @@ import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
|||
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
|
||||
import com.simplemobiletools.commons.dialogs.*
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.SHOW_ALL_TABS
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
import com.simplemobiletools.commons.helpers.isOreoPlus
|
||||
import com.simplemobiletools.commons.helpers.*
|
||||
import com.simplemobiletools.commons.models.FileDirItem
|
||||
import com.simplemobiletools.commons.views.FastScroller
|
||||
import com.simplemobiletools.commons.views.MyRecyclerView
|
||||
|
@ -37,7 +35,6 @@ import kotlinx.android.synthetic.main.directory_item_grid.view.dir_lock
|
|||
import kotlinx.android.synthetic.main.directory_item_grid.view.dir_name
|
||||
import kotlinx.android.synthetic.main.directory_item_grid.view.dir_pin
|
||||
import kotlinx.android.synthetic.main.directory_item_grid.view.dir_thumbnail
|
||||
import kotlinx.android.synthetic.main.directory_item_grid.view.photo_cnt
|
||||
import kotlinx.android.synthetic.main.directory_item_list.view.*
|
||||
import java.io.File
|
||||
|
||||
|
@ -304,7 +301,7 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList<Directo
|
|||
val includedFolders = activity.config.includedFolders
|
||||
val hidden = activity.getString(R.string.hidden)
|
||||
dirs.forEach {
|
||||
it.name = activity.checkAppendingHidden(it.path, hidden, includedFolders)
|
||||
it.name = activity.checkAppendingHidden(it.path, hidden, includedFolders, ArrayList())
|
||||
}
|
||||
listener?.updateDirectories(dirs.toMutableList() as ArrayList)
|
||||
activity.runOnUiThread {
|
||||
|
@ -478,10 +475,10 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList<Directo
|
|||
intent.putExtra(DIRECTORY, path)
|
||||
|
||||
val shortcut = ShortcutInfo.Builder(activity, path)
|
||||
.setShortLabel(dir.name)
|
||||
.setIcon(Icon.createWithBitmap(drawable.convertToBitmap()))
|
||||
.setIntent(intent)
|
||||
.build()
|
||||
.setShortLabel(dir.name)
|
||||
.setIcon(Icon.createWithBitmap(drawable.convertToBitmap()))
|
||||
.setIntent(intent)
|
||||
.build()
|
||||
|
||||
manager.requestPinShortcut(shortcut, null)
|
||||
}
|
||||
|
@ -686,7 +683,8 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList<Directo
|
|||
dir_lock.applyColorFilter(config.backgroundColor.getContrastColor())
|
||||
} else {
|
||||
dir_lock.beGone()
|
||||
activity.loadImage(thumbnailType, directory.tmb, dir_thumbnail, scrollHorizontally, animateGifs, cropThumbnails)
|
||||
val roundedCorners = if (isListViewType) ROUNDED_CORNERS_SMALL else ROUNDED_CORNERS_NONE
|
||||
activity.loadImage(thumbnailType, directory.tmb, dir_thumbnail, scrollHorizontally, animateGifs, cropThumbnails, roundedCorners)
|
||||
}
|
||||
|
||||
dir_pin.beVisibleIf(pinnedFolders.contains(directory.path))
|
||||
|
|
|
@ -18,6 +18,8 @@ import com.simplemobiletools.commons.dialogs.PropertiesDialog
|
|||
import com.simplemobiletools.commons.dialogs.RenameDialog
|
||||
import com.simplemobiletools.commons.dialogs.RenameItemDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.FAVORITES
|
||||
import com.simplemobiletools.commons.helpers.VIEW_TYPE_LIST
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
import com.simplemobiletools.commons.helpers.isOreoPlus
|
||||
import com.simplemobiletools.commons.models.FileDirItem
|
||||
|
@ -229,7 +231,7 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList<Thumbnai
|
|||
}
|
||||
}
|
||||
} else {
|
||||
RenameDialog(activity, getSelectedPaths()) {
|
||||
RenameDialog(activity, getSelectedPaths(), true) {
|
||||
enableInstantLoad()
|
||||
listener?.refreshItems()
|
||||
finishActMode()
|
||||
|
@ -369,10 +371,10 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList<Thumbnai
|
|||
}
|
||||
|
||||
val shortcut = ShortcutInfo.Builder(activity, path)
|
||||
.setShortLabel(path.getFilenameFromPath())
|
||||
.setIcon(Icon.createWithBitmap(drawable.convertToBitmap()))
|
||||
.setIntent(intent)
|
||||
.build()
|
||||
.setShortLabel(path.getFilenameFromPath())
|
||||
.setIcon(Icon.createWithBitmap(drawable.convertToBitmap()))
|
||||
.setIntent(intent)
|
||||
.build()
|
||||
|
||||
manager.requestPinShortcut(shortcut, null)
|
||||
}
|
||||
|
@ -540,15 +542,16 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList<Thumbnai
|
|||
path = path.getOTGPublicPath(context)
|
||||
}
|
||||
|
||||
val roundedCorners = if (isListViewType) ROUNDED_CORNERS_SMALL else ROUNDED_CORNERS_NONE
|
||||
if (loadImageInstantly) {
|
||||
activity.loadImage(medium.type, path, medium_thumbnail, scrollHorizontally, animateGifs, cropThumbnails, rotatedImagePaths)
|
||||
activity.loadImage(medium.type, path, medium_thumbnail, scrollHorizontally, animateGifs, cropThumbnails, roundedCorners, rotatedImagePaths)
|
||||
} else {
|
||||
medium_thumbnail.setImageDrawable(null)
|
||||
medium_thumbnail.isHorizontalScrolling = scrollHorizontally
|
||||
delayHandler.postDelayed({
|
||||
val isVisible = visibleItemPaths.contains(medium.path)
|
||||
if (isVisible) {
|
||||
activity.loadImage(medium.type, path, medium_thumbnail, scrollHorizontally, animateGifs, cropThumbnails, rotatedImagePaths)
|
||||
activity.loadImage(medium.type, path, medium_thumbnail, scrollHorizontally, animateGifs, cropThumbnails, roundedCorners, rotatedImagePaths)
|
||||
}
|
||||
}, IMAGE_LOAD_DELAY)
|
||||
}
|
||||
|
|
|
@ -2,9 +2,7 @@ package com.simplemobiletools.gallery.pro.asynctasks
|
|||
|
||||
import android.content.Context
|
||||
import android.os.AsyncTask
|
||||
import com.simplemobiletools.commons.helpers.SORT_BY_DATE_MODIFIED
|
||||
import com.simplemobiletools.commons.helpers.SORT_BY_DATE_TAKEN
|
||||
import com.simplemobiletools.commons.helpers.SORT_BY_SIZE
|
||||
import com.simplemobiletools.commons.helpers.*
|
||||
import com.simplemobiletools.gallery.pro.extensions.config
|
||||
import com.simplemobiletools.gallery.pro.extensions.getFavoritePaths
|
||||
import com.simplemobiletools.gallery.pro.helpers.*
|
||||
|
@ -32,19 +30,25 @@ class GetMediaAsynctask(val context: Context, val mPath: String, val isPickImage
|
|||
val getProperFileSize = fileSorting and SORT_BY_SIZE != 0
|
||||
val favoritePaths = context.getFavoritePaths()
|
||||
val getVideoDurations = context.config.showThumbnailVideoDuration
|
||||
val lastModifieds = if (isRPlus() && getProperLastModified) mediaFetcher.getLastModifieds() else HashMap()
|
||||
val dateTakens = if (getProperDateTaken) mediaFetcher.getDateTakens() else HashMap()
|
||||
|
||||
val media = if (showAll) {
|
||||
val foldersToScan = mediaFetcher.getFoldersToScan().filter { it != RECYCLE_BIN && it != FAVORITES && !context.config.isFolderProtected(it) }
|
||||
val media = ArrayList<Medium>()
|
||||
foldersToScan.forEach {
|
||||
val newMedia = mediaFetcher.getFilesFrom(it, isPickImage, isPickVideo, getProperDateTaken, getProperLastModified, getProperFileSize, favoritePaths, getVideoDurations)
|
||||
val newMedia = mediaFetcher.getFilesFrom(it, isPickImage, isPickVideo, getProperDateTaken, getProperLastModified, getProperFileSize,
|
||||
favoritePaths, getVideoDurations, lastModifieds, dateTakens)
|
||||
media.addAll(newMedia)
|
||||
}
|
||||
|
||||
mediaFetcher.sortMedia(media, context.config.getFolderSorting(SHOW_ALL))
|
||||
media
|
||||
} else {
|
||||
mediaFetcher.getFilesFrom(mPath, isPickImage, isPickVideo, getProperDateTaken, getProperLastModified, getProperFileSize, favoritePaths, getVideoDurations)
|
||||
mediaFetcher.getFilesFrom(mPath, isPickImage, isPickVideo, getProperDateTaken, getProperLastModified, getProperFileSize, favoritePaths,
|
||||
getVideoDurations, lastModifieds, dateTakens)
|
||||
}
|
||||
|
||||
return mediaFetcher.groupMedia(media, pathToUse)
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||
import com.simplemobiletools.gallery.pro.interfaces.*
|
||||
import com.simplemobiletools.gallery.pro.models.*
|
||||
|
||||
@Database(entities = [Directory::class, Medium::class, Widget::class, DateTaken::class, Favorite::class], version = 8)
|
||||
@Database(entities = [Directory::class, Medium::class, Widget::class, DateTaken::class, Favorite::class], version = 9)
|
||||
abstract class GalleryDatabase : RoomDatabase() {
|
||||
|
||||
abstract fun DirectoryDao(): DirectoryDao
|
||||
|
@ -30,12 +30,13 @@ abstract class GalleryDatabase : RoomDatabase() {
|
|||
synchronized(GalleryDatabase::class) {
|
||||
if (db == null) {
|
||||
db = Room.databaseBuilder(context.applicationContext, GalleryDatabase::class.java, "gallery.db")
|
||||
.fallbackToDestructiveMigration()
|
||||
.addMigrations(MIGRATION_4_5)
|
||||
.addMigrations(MIGRATION_5_6)
|
||||
.addMigrations(MIGRATION_6_7)
|
||||
.addMigrations(MIGRATION_7_8)
|
||||
.build()
|
||||
.fallbackToDestructiveMigration()
|
||||
.addMigrations(MIGRATION_4_5)
|
||||
.addMigrations(MIGRATION_5_6)
|
||||
.addMigrations(MIGRATION_6_7)
|
||||
.addMigrations(MIGRATION_7_8)
|
||||
.addMigrations(MIGRATION_8_9)
|
||||
.build()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -74,5 +75,11 @@ abstract class GalleryDatabase : RoomDatabase() {
|
|||
database.execSQL("ALTER TABLE directories ADD COLUMN sort_value TEXT default '' NOT NULL")
|
||||
}
|
||||
}
|
||||
|
||||
private val MIGRATION_8_9 = object : Migration(8, 9) {
|
||||
override fun migrate(database: SupportSQLiteDatabase) {
|
||||
database.execSQL("ALTER TABLE date_takens ADD COLUMN last_modified INTEGER default 0 NOT NULL")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,11 +5,11 @@ import androidx.appcompat.app.AlertDialog
|
|||
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
||||
import com.simplemobiletools.commons.extensions.beVisibleIf
|
||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
import com.simplemobiletools.commons.helpers.VIEW_TYPE_GRID
|
||||
import com.simplemobiletools.commons.helpers.VIEW_TYPE_LIST
|
||||
import com.simplemobiletools.gallery.pro.R
|
||||
import com.simplemobiletools.gallery.pro.extensions.config
|
||||
import com.simplemobiletools.gallery.pro.helpers.SHOW_ALL
|
||||
import com.simplemobiletools.gallery.pro.helpers.VIEW_TYPE_GRID
|
||||
import com.simplemobiletools.gallery.pro.helpers.VIEW_TYPE_LIST
|
||||
import kotlinx.android.synthetic.main.dialog_change_view_type.view.*
|
||||
|
||||
class ChangeViewTypeDialog(val activity: BaseSimpleActivity, val fromFoldersView: Boolean, val path: String = "", val callback: () -> Unit) {
|
||||
|
|
|
@ -6,11 +6,11 @@ import androidx.recyclerview.widget.RecyclerView
|
|||
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
||||
import com.simplemobiletools.commons.dialogs.FilePickerDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.VIEW_TYPE_GRID
|
||||
import com.simplemobiletools.commons.views.MyGridLayoutManager
|
||||
import com.simplemobiletools.gallery.pro.R
|
||||
import com.simplemobiletools.gallery.pro.adapters.DirectoryAdapter
|
||||
import com.simplemobiletools.gallery.pro.extensions.*
|
||||
import com.simplemobiletools.gallery.pro.helpers.VIEW_TYPE_GRID
|
||||
import com.simplemobiletools.gallery.pro.models.Directory
|
||||
import kotlinx.android.synthetic.main.dialog_directory_picker.view.*
|
||||
|
||||
|
@ -134,12 +134,10 @@ class PickDirectoryDialog(val activity: BaseSimpleActivity, val sourcePath: Stri
|
|||
directories_horizontal_fastscroller.beVisibleIf(scrollHorizontally)
|
||||
|
||||
if (scrollHorizontally) {
|
||||
directories_horizontal_fastscroller.allowBubbleDisplay = activity.config.showInfoBubble
|
||||
directories_horizontal_fastscroller.setViews(directories_grid) {
|
||||
directories_horizontal_fastscroller.updateBubbleText(dirs[it].getBubbleText(sorting, activity, dateFormat, timeFormat))
|
||||
}
|
||||
} else {
|
||||
directories_vertical_fastscroller.allowBubbleDisplay = activity.config.showInfoBubble
|
||||
directories_vertical_fastscroller.setViews(directories_grid) {
|
||||
directories_vertical_fastscroller.updateBubbleText(dirs[it].getBubbleText(sorting, activity, dateFormat, timeFormat))
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import com.simplemobiletools.commons.extensions.beGoneIf
|
|||
import com.simplemobiletools.commons.extensions.beVisibleIf
|
||||
import com.simplemobiletools.commons.extensions.getTimeFormat
|
||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
import com.simplemobiletools.commons.helpers.VIEW_TYPE_GRID
|
||||
import com.simplemobiletools.commons.views.MyGridLayoutManager
|
||||
import com.simplemobiletools.gallery.pro.R
|
||||
import com.simplemobiletools.gallery.pro.adapters.MediaAdapter
|
||||
|
@ -14,7 +15,6 @@ import com.simplemobiletools.gallery.pro.asynctasks.GetMediaAsynctask
|
|||
import com.simplemobiletools.gallery.pro.extensions.config
|
||||
import com.simplemobiletools.gallery.pro.extensions.getCachedMedia
|
||||
import com.simplemobiletools.gallery.pro.helpers.SHOW_ALL
|
||||
import com.simplemobiletools.gallery.pro.helpers.VIEW_TYPE_GRID
|
||||
import com.simplemobiletools.gallery.pro.models.Medium
|
||||
import com.simplemobiletools.gallery.pro.models.ThumbnailItem
|
||||
import kotlinx.android.synthetic.main.dialog_medium_picker.view.*
|
||||
|
@ -33,12 +33,12 @@ class PickMediumDialog(val activity: BaseSimpleActivity, val path: String, val c
|
|||
}
|
||||
|
||||
dialog = AlertDialog.Builder(activity)
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setNeutralButton(R.string.other_folder) { dialogInterface, i -> showOtherFolder() }
|
||||
.create().apply {
|
||||
activity.setupDialogStuff(view, this, R.string.select_photo)
|
||||
}
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setNeutralButton(R.string.other_folder) { dialogInterface, i -> showOtherFolder() }
|
||||
.create().apply {
|
||||
activity.setupDialogStuff(view, this, R.string.select_photo)
|
||||
}
|
||||
|
||||
activity.getCachedMedia(path) {
|
||||
val media = it.filter { it is Medium } as ArrayList
|
||||
|
@ -87,13 +87,11 @@ class PickMediumDialog(val activity: BaseSimpleActivity, val path: String, val c
|
|||
media_horizontal_fastscroller.beVisibleIf(scrollHorizontally)
|
||||
|
||||
if (scrollHorizontally) {
|
||||
media_horizontal_fastscroller.allowBubbleDisplay = activity.config.showInfoBubble
|
||||
media_horizontal_fastscroller.setViews(media_grid) {
|
||||
val medium = (media[it] as? Medium)
|
||||
media_horizontal_fastscroller.updateBubbleText(medium?.getBubbleText(sorting, activity, dateFormat, timeFormat) ?: "")
|
||||
}
|
||||
} else {
|
||||
media_vertical_fastscroller.allowBubbleDisplay = activity.config.showInfoBubble
|
||||
media_vertical_fastscroller.setViews(media_grid) {
|
||||
val medium = (media[it] as? Medium)
|
||||
media_vertical_fastscroller.updateBubbleText(medium?.getBubbleText(sorting, activity, dateFormat, timeFormat) ?: "")
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.simplemobiletools.gallery.pro.extensions
|
|||
import android.annotation.TargetApi
|
||||
import android.app.Activity
|
||||
import android.content.ContentProviderOperation
|
||||
import android.content.ContentValues
|
||||
import android.content.Intent
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
||||
|
@ -13,6 +14,7 @@ import android.media.ExifInterface
|
|||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.provider.MediaStore
|
||||
import android.provider.MediaStore.Files
|
||||
import android.provider.MediaStore.Images
|
||||
import android.util.DisplayMetrics
|
||||
import android.view.View
|
||||
|
@ -81,7 +83,8 @@ fun Activity.launchCamera() {
|
|||
|
||||
fun SimpleActivity.launchAbout() {
|
||||
val licenses = LICENSE_GLIDE or LICENSE_CROPPER or LICENSE_RTL or LICENSE_SUBSAMPLING or LICENSE_PATTERN or LICENSE_REPRINT or LICENSE_GIF_DRAWABLE or
|
||||
LICENSE_PICASSO or LICENSE_EXOPLAYER or LICENSE_PANORAMA_VIEW or LICENSE_SANSELAN or LICENSE_FILTERS or LICENSE_GESTURE_VIEWS
|
||||
LICENSE_PICASSO or LICENSE_EXOPLAYER or LICENSE_PANORAMA_VIEW or LICENSE_SANSELAN or LICENSE_FILTERS or LICENSE_GESTURE_VIEWS or
|
||||
LICENSE_APNG
|
||||
|
||||
val faqItems = arrayListOf(
|
||||
FAQItem(R.string.faq_5_title_commons, R.string.faq_5_text_commons),
|
||||
|
@ -101,7 +104,8 @@ fun SimpleActivity.launchAbout() {
|
|||
FAQItem(R.string.faq_15_title, R.string.faq_15_text),
|
||||
FAQItem(R.string.faq_2_title_commons, R.string.faq_2_text_commons),
|
||||
FAQItem(R.string.faq_6_title_commons, R.string.faq_6_text_commons),
|
||||
FAQItem(R.string.faq_7_title_commons, R.string.faq_7_text_commons))
|
||||
FAQItem(R.string.faq_7_title_commons, R.string.faq_7_text_commons),
|
||||
FAQItem(R.string.faq_9_title_commons, R.string.faq_9_text_commons))
|
||||
|
||||
startAboutActivity(R.string.app_name, licenses, BuildConfig.VERSION_NAME, faqItems, true)
|
||||
}
|
||||
|
@ -146,9 +150,8 @@ fun BaseSimpleActivity.addNoMedia(path: String, callback: () -> Unit) {
|
|||
val fileDocument = getDocumentFile(path)
|
||||
if (fileDocument?.exists() == true && fileDocument.isDirectory) {
|
||||
fileDocument.createFile("", NOMEDIA)
|
||||
applicationContext.scanPathRecursively(file.absolutePath) {
|
||||
callback()
|
||||
}
|
||||
addNoMediaIntoMediaStore(file.absolutePath)
|
||||
callback()
|
||||
} else {
|
||||
toast(R.string.unknown_error_occurred)
|
||||
callback()
|
||||
|
@ -157,7 +160,7 @@ fun BaseSimpleActivity.addNoMedia(path: String, callback: () -> Unit) {
|
|||
} else {
|
||||
try {
|
||||
if (file.createNewFile()) {
|
||||
rescanFolderMedia(file.absolutePath)
|
||||
addNoMediaIntoMediaStore(file.absolutePath)
|
||||
} else {
|
||||
toast(R.string.unknown_error_occurred)
|
||||
}
|
||||
|
@ -168,6 +171,19 @@ fun BaseSimpleActivity.addNoMedia(path: String, callback: () -> Unit) {
|
|||
}
|
||||
}
|
||||
|
||||
fun BaseSimpleActivity.addNoMediaIntoMediaStore(path: String) {
|
||||
try {
|
||||
val content = ContentValues().apply {
|
||||
put(Files.FileColumns.TITLE, NOMEDIA)
|
||||
put(Files.FileColumns.DATA, path)
|
||||
put(Files.FileColumns.MEDIA_TYPE, Files.FileColumns.MEDIA_TYPE_NONE)
|
||||
}
|
||||
contentResolver.insert(Files.getContentUri("external"), content)
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
}
|
||||
}
|
||||
|
||||
fun BaseSimpleActivity.removeNoMedia(path: String, callback: (() -> Unit)? = null) {
|
||||
val file = File(path, NOMEDIA)
|
||||
if (!getDoesFilePathExist(file.absolutePath)) {
|
||||
|
@ -450,7 +466,7 @@ fun Activity.fixDateTaken(paths: ArrayList<String>, showToasts: Boolean, hasResc
|
|||
mediaDB.updateFavoriteDateTaken(path, timestamp)
|
||||
didUpdateFile = true
|
||||
|
||||
val dateTaken = DateTaken(null, path, path.getFilenameFromPath(), path.getParentPath(), timestamp, (System.currentTimeMillis() / 1000).toInt())
|
||||
val dateTaken = DateTaken(null, path, path.getFilenameFromPath(), path.getParentPath(), timestamp, (System.currentTimeMillis() / 1000).toInt(), File(path).lastModified())
|
||||
dateTakens.add(dateTaken)
|
||||
if (!hasRescanned && getFileDateTaken(path) == 0L) {
|
||||
pathsToRescan.add(path)
|
||||
|
|
|
@ -14,6 +14,8 @@ import com.bumptech.glide.Glide
|
|||
import com.bumptech.glide.Priority
|
||||
import com.bumptech.glide.load.DecodeFormat
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop
|
||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
|
||||
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
|
||||
import com.bumptech.glide.request.RequestOptions
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
|
@ -36,6 +38,8 @@ import java.util.HashSet
|
|||
import java.util.LinkedHashSet
|
||||
import kotlin.Comparator
|
||||
import kotlin.collections.ArrayList
|
||||
import kotlin.collections.HashMap
|
||||
import kotlin.collections.set
|
||||
|
||||
val Context.audioManager get() = getSystemService(Context.AUDIO_SERVICE) as AudioManager
|
||||
|
||||
|
@ -302,35 +306,40 @@ fun Context.updateSubfolderCounts(children: ArrayList<Directory>, parentDirs: Ar
|
|||
|
||||
fun Context.getNoMediaFolders(callback: (folders: ArrayList<String>) -> Unit) {
|
||||
ensureBackgroundThread {
|
||||
val folders = ArrayList<String>()
|
||||
|
||||
val uri = Files.getContentUri("external")
|
||||
val projection = arrayOf(Files.FileColumns.DATA)
|
||||
val selection = "${Files.FileColumns.MEDIA_TYPE} = ? AND ${Files.FileColumns.TITLE} LIKE ?"
|
||||
val selectionArgs = arrayOf(Files.FileColumns.MEDIA_TYPE_NONE.toString(), "%$NOMEDIA%")
|
||||
val sortOrder = "${Files.FileColumns.DATE_MODIFIED} DESC"
|
||||
val OTGPath = config.OTGPath
|
||||
|
||||
var cursor: Cursor? = null
|
||||
try {
|
||||
cursor = contentResolver.query(uri, projection, selection, selectionArgs, sortOrder)
|
||||
if (cursor?.moveToFirst() == true) {
|
||||
do {
|
||||
val path = cursor.getStringValue(Files.FileColumns.DATA) ?: continue
|
||||
val noMediaFile = File(path)
|
||||
if (getDoesFilePathExist(noMediaFile.absolutePath, OTGPath) && noMediaFile.name == NOMEDIA) {
|
||||
folders.add("${noMediaFile.parent}/")
|
||||
}
|
||||
} while (cursor.moveToNext())
|
||||
}
|
||||
} finally {
|
||||
cursor?.close()
|
||||
}
|
||||
|
||||
callback(folders)
|
||||
callback(getNoMediaFoldersSync())
|
||||
}
|
||||
}
|
||||
|
||||
fun Context.getNoMediaFoldersSync(): ArrayList<String> {
|
||||
val folders = ArrayList<String>()
|
||||
|
||||
val uri = Files.getContentUri("external")
|
||||
val projection = arrayOf(Files.FileColumns.DATA)
|
||||
val selection = "${Files.FileColumns.MEDIA_TYPE} = ? AND ${Files.FileColumns.TITLE} LIKE ?"
|
||||
val selectionArgs = arrayOf(Files.FileColumns.MEDIA_TYPE_NONE.toString(), "%$NOMEDIA%")
|
||||
val sortOrder = "${Files.FileColumns.DATE_MODIFIED} DESC"
|
||||
val OTGPath = config.OTGPath
|
||||
|
||||
var cursor: Cursor? = null
|
||||
try {
|
||||
cursor = contentResolver.query(uri, projection, selection, selectionArgs, sortOrder)
|
||||
if (cursor?.moveToFirst() == true) {
|
||||
do {
|
||||
val path = cursor.getStringValue(Files.FileColumns.DATA) ?: continue
|
||||
val noMediaFile = File(path)
|
||||
if (getDoesFilePathExist(noMediaFile.absolutePath, OTGPath) && noMediaFile.name == NOMEDIA) {
|
||||
folders.add(noMediaFile.parent)
|
||||
}
|
||||
} while (cursor.moveToNext())
|
||||
}
|
||||
} catch (ignored: Exception) {
|
||||
} finally {
|
||||
cursor?.close()
|
||||
}
|
||||
|
||||
return folders
|
||||
}
|
||||
|
||||
fun Context.rescanFolderMedia(path: String) {
|
||||
ensureBackgroundThread {
|
||||
rescanFolderMediaSync(path)
|
||||
|
@ -368,9 +377,9 @@ fun Context.storeDirectoryItems(items: ArrayList<Directory>) {
|
|||
}
|
||||
}
|
||||
|
||||
fun Context.checkAppendingHidden(path: String, hidden: String, includedFolders: MutableSet<String>): String {
|
||||
fun Context.checkAppendingHidden(path: String, hidden: String, includedFolders: MutableSet<String>, noMediaFolders: ArrayList<String>): String {
|
||||
val dirName = getFolderNameFromPath(path)
|
||||
return if (path.doesThisOrParentHaveNoMedia() && !path.isThisOrParentIncluded(includedFolders)) {
|
||||
return if (path.doesThisOrParentHaveNoMedia(noMediaFolders) && !path.isThisOrParentIncluded(includedFolders)) {
|
||||
"$dirName $hidden"
|
||||
} else {
|
||||
dirName
|
||||
|
@ -389,17 +398,17 @@ fun Context.getFolderNameFromPath(path: String): String {
|
|||
}
|
||||
|
||||
fun Context.loadImage(type: Int, path: String, target: MySquareImageView, horizontalScroll: Boolean, animateGifs: Boolean, cropThumbnails: Boolean,
|
||||
skipMemoryCacheAtPaths: ArrayList<String>? = null) {
|
||||
roundCorners: Int, skipMemoryCacheAtPaths: ArrayList<String>? = null) {
|
||||
target.isHorizontalScrolling = horizontalScroll
|
||||
if (type == TYPE_IMAGES || type == TYPE_VIDEOS || type == TYPE_RAWS || type == TYPE_PORTRAITS) {
|
||||
if (type == TYPE_IMAGES && path.isPng()) {
|
||||
loadPng(path, target, cropThumbnails, skipMemoryCacheAtPaths)
|
||||
loadPng(path, target, cropThumbnails, roundCorners, skipMemoryCacheAtPaths)
|
||||
} else {
|
||||
loadJpg(path, target, cropThumbnails, skipMemoryCacheAtPaths)
|
||||
loadJpg(path, target, cropThumbnails, roundCorners, skipMemoryCacheAtPaths)
|
||||
}
|
||||
} else if (type == TYPE_GIFS) {
|
||||
if (!animateGifs) {
|
||||
loadStaticGIF(path, target, cropThumbnails, skipMemoryCacheAtPaths)
|
||||
loadStaticGIF(path, target, cropThumbnails, roundCorners, skipMemoryCacheAtPaths)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -410,12 +419,12 @@ fun Context.loadImage(type: Int, path: String, target: MySquareImageView, horizo
|
|||
|
||||
target.scaleType = if (cropThumbnails) ImageView.ScaleType.CENTER_CROP else ImageView.ScaleType.FIT_CENTER
|
||||
} catch (e: Exception) {
|
||||
loadStaticGIF(path, target, cropThumbnails, skipMemoryCacheAtPaths)
|
||||
loadStaticGIF(path, target, cropThumbnails, roundCorners, skipMemoryCacheAtPaths)
|
||||
} catch (e: OutOfMemoryError) {
|
||||
loadStaticGIF(path, target, cropThumbnails, skipMemoryCacheAtPaths)
|
||||
loadStaticGIF(path, target, cropThumbnails, roundCorners, skipMemoryCacheAtPaths)
|
||||
}
|
||||
} else if (type == TYPE_SVGS) {
|
||||
loadSVG(path, target, cropThumbnails)
|
||||
loadSVG(path, target, cropThumbnails, roundCorners)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -440,7 +449,7 @@ fun Context.getPathLocation(path: String): Int {
|
|||
}
|
||||
}
|
||||
|
||||
fun Context.loadPng(path: String, target: MySquareImageView, cropThumbnails: Boolean, skipMemoryCacheAtPaths: ArrayList<String>? = null) {
|
||||
fun Context.loadPng(path: String, target: MySquareImageView, cropThumbnails: Boolean, roundCorners: Int, skipMemoryCacheAtPaths: ArrayList<String>? = null) {
|
||||
val options = RequestOptions()
|
||||
.signature(path.getFileSignature())
|
||||
.skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true)
|
||||
|
@ -448,57 +457,83 @@ fun Context.loadPng(path: String, target: MySquareImageView, cropThumbnails: Boo
|
|||
.priority(Priority.LOW)
|
||||
.format(DecodeFormat.PREFER_ARGB_8888)
|
||||
|
||||
val builder = Glide.with(applicationContext)
|
||||
if (cropThumbnails) options.centerCrop() else options.fitCenter()
|
||||
var builder = Glide.with(applicationContext)
|
||||
.asBitmap()
|
||||
.load(path)
|
||||
.apply(options)
|
||||
|
||||
if (cropThumbnails) options.centerCrop() else options.fitCenter()
|
||||
builder.apply(options).into(target)
|
||||
if (roundCorners != ROUNDED_CORNERS_NONE) {
|
||||
val cornerSize = if (roundCorners == ROUNDED_CORNERS_SMALL) R.dimen.rounded_corner_radius_small else R.dimen.rounded_corner_radius_big
|
||||
val cornerRadius = resources.getDimension(cornerSize).toInt()
|
||||
builder = builder.transform(CenterCrop(), RoundedCorners(cornerRadius))
|
||||
}
|
||||
|
||||
builder.into(target)
|
||||
}
|
||||
|
||||
fun Context.loadJpg(path: String, target: MySquareImageView, cropThumbnails: Boolean, skipMemoryCacheAtPaths: ArrayList<String>? = null) {
|
||||
fun Context.loadJpg(path: String, target: MySquareImageView, cropThumbnails: Boolean, roundCorners: Int, skipMemoryCacheAtPaths: ArrayList<String>? = null) {
|
||||
val options = RequestOptions()
|
||||
.signature(path.getFileSignature())
|
||||
.skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true)
|
||||
.priority(Priority.LOW)
|
||||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||
|
||||
val builder = Glide.with(applicationContext)
|
||||
if (cropThumbnails) options.centerCrop() else options.fitCenter()
|
||||
var builder = Glide.with(applicationContext)
|
||||
.load(path)
|
||||
|
||||
if (cropThumbnails) options.centerCrop() else options.fitCenter()
|
||||
builder.apply(options)
|
||||
.apply(options)
|
||||
.transition(DrawableTransitionOptions.withCrossFade())
|
||||
.into(target)
|
||||
|
||||
if (roundCorners != ROUNDED_CORNERS_NONE) {
|
||||
val cornerSize = if (roundCorners == ROUNDED_CORNERS_SMALL) R.dimen.rounded_corner_radius_small else R.dimen.rounded_corner_radius_big
|
||||
val cornerRadius = resources.getDimension(cornerSize).toInt()
|
||||
builder = builder.transform(CenterCrop(), RoundedCorners(cornerRadius))
|
||||
}
|
||||
|
||||
builder.into(target)
|
||||
}
|
||||
|
||||
fun Context.loadStaticGIF(path: String, target: MySquareImageView, cropThumbnails: Boolean, skipMemoryCacheAtPaths: ArrayList<String>? = null) {
|
||||
fun Context.loadStaticGIF(path: String, target: MySquareImageView, cropThumbnails: Boolean, roundCorners: Int, skipMemoryCacheAtPaths: ArrayList<String>? = null) {
|
||||
val options = RequestOptions()
|
||||
.signature(path.getFileSignature())
|
||||
.skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true)
|
||||
.priority(Priority.LOW)
|
||||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||
|
||||
val builder = Glide.with(applicationContext)
|
||||
if (cropThumbnails) options.centerCrop() else options.fitCenter()
|
||||
var builder = Glide.with(applicationContext)
|
||||
.asBitmap() // make sure the GIF wont animate
|
||||
.load(path)
|
||||
.apply(options)
|
||||
|
||||
if (cropThumbnails) options.centerCrop() else options.fitCenter()
|
||||
builder.apply(options)
|
||||
.into(target)
|
||||
if (roundCorners != ROUNDED_CORNERS_NONE) {
|
||||
val cornerSize = if (roundCorners == ROUNDED_CORNERS_SMALL) R.dimen.rounded_corner_radius_small else R.dimen.rounded_corner_radius_big
|
||||
val cornerRadius = resources.getDimension(cornerSize).toInt()
|
||||
builder = builder.transform(CenterCrop(), RoundedCorners(cornerRadius))
|
||||
}
|
||||
|
||||
builder.into(target)
|
||||
}
|
||||
|
||||
fun Context.loadSVG(path: String, target: MySquareImageView, cropThumbnails: Boolean) {
|
||||
fun Context.loadSVG(path: String, target: MySquareImageView, cropThumbnails: Boolean, roundCorners: Int) {
|
||||
target.scaleType = if (cropThumbnails) ImageView.ScaleType.CENTER_CROP else ImageView.ScaleType.FIT_CENTER
|
||||
|
||||
val options = RequestOptions().signature(path.getFileSignature())
|
||||
Glide.with(applicationContext)
|
||||
var builder = Glide.with(applicationContext)
|
||||
.`as`(PictureDrawable::class.java)
|
||||
.listener(SvgSoftwareLayerSetter())
|
||||
.load(path)
|
||||
.apply(options)
|
||||
.transition(DrawableTransitionOptions.withCrossFade())
|
||||
.into(target)
|
||||
|
||||
if (roundCorners != ROUNDED_CORNERS_NONE) {
|
||||
val cornerSize = if (roundCorners == ROUNDED_CORNERS_SMALL) R.dimen.rounded_corner_radius_small else R.dimen.rounded_corner_radius_big
|
||||
val cornerRadius = resources.getDimension(cornerSize).toInt()
|
||||
builder = builder.transform(CenterCrop(), RoundedCorners(cornerRadius))
|
||||
}
|
||||
|
||||
builder.into(target)
|
||||
}
|
||||
|
||||
fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly: Boolean = false, forceShowHidden: Boolean = false, callback: (ArrayList<Directory>) -> Unit) {
|
||||
|
@ -516,7 +551,14 @@ fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly:
|
|||
val shouldShowHidden = config.shouldShowHidden || forceShowHidden
|
||||
val excludedPaths = config.excludedFolders
|
||||
val includedPaths = config.includedFolders
|
||||
var filteredDirectories = directories.filter { it.path.shouldFolderBeVisible(excludedPaths, includedPaths, shouldShowHidden, this) } as ArrayList<Directory>
|
||||
|
||||
val noMediaFolders = getNoMediaFoldersSync()
|
||||
val folderNoMediaStatuses = HashMap<String, Boolean>()
|
||||
var filteredDirectories = directories.filter {
|
||||
it.path.shouldFolderBeVisible(excludedPaths, includedPaths, shouldShowHidden, folderNoMediaStatuses, noMediaFolders) { path, hasNoMedia ->
|
||||
folderNoMediaStatuses[path] = hasNoMedia
|
||||
}
|
||||
} as ArrayList<Directory>
|
||||
val filterMedia = config.filterMedia
|
||||
|
||||
filteredDirectories = (when {
|
||||
|
@ -534,7 +576,7 @@ fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly:
|
|||
|
||||
val hiddenString = resources.getString(R.string.hidden)
|
||||
filteredDirectories.forEach {
|
||||
it.name = if (it.path.doesThisOrParentHaveNoMedia() && !it.path.isThisOrParentIncluded(includedPaths)) {
|
||||
it.name = if (it.path.doesThisOrParentHaveNoMedia(noMediaFolders) && !it.path.isThisOrParentIncluded(includedPaths)) {
|
||||
"${it.name.removeSuffix(hiddenString).trim()} $hiddenString"
|
||||
} else {
|
||||
it.name.removeSuffix(hiddenString).trim()
|
||||
|
@ -800,7 +842,7 @@ fun Context.addPathToDB(path: String) {
|
|||
}
|
||||
|
||||
fun Context.createDirectoryFromMedia(path: String, curMedia: ArrayList<Medium>, albumCovers: ArrayList<AlbumCover>, hiddenString: String,
|
||||
includedFolders: MutableSet<String>, getProperFileSize: Boolean): Directory {
|
||||
includedFolders: MutableSet<String>, getProperFileSize: Boolean, noMediaFolders: ArrayList<String>): Directory {
|
||||
val OTGPath = config.OTGPath
|
||||
val grouped = MediaFetcher(this).groupMedia(curMedia, path)
|
||||
var thumbnail: String? = null
|
||||
|
@ -824,7 +866,7 @@ fun Context.createDirectoryFromMedia(path: String, curMedia: ArrayList<Medium>,
|
|||
val defaultMedium = Medium(0, "", "", "", 0L, 0L, 0L, 0, 0, false, 0L)
|
||||
val firstItem = curMedia.firstOrNull() ?: defaultMedium
|
||||
val lastItem = curMedia.lastOrNull() ?: defaultMedium
|
||||
val dirName = checkAppendingHidden(path, hiddenString, includedFolders)
|
||||
val dirName = checkAppendingHidden(path, hiddenString, includedFolders, noMediaFolders)
|
||||
val lastModified = if (isSortingAscending) Math.min(firstItem.modified, lastItem.modified) else Math.max(firstItem.modified, lastItem.modified)
|
||||
val dateTaken = if (isSortingAscending) Math.min(firstItem.taken, lastItem.taken) else Math.max(firstItem.taken, lastItem.taken)
|
||||
val size = if (getProperFileSize) curMedia.sumByLong { it.size } else 0L
|
||||
|
@ -866,6 +908,7 @@ fun Context.updateDirectoryPath(path: String) {
|
|||
val hiddenString = getString(R.string.hidden)
|
||||
val albumCovers = config.parseAlbumCovers()
|
||||
val includedFolders = config.includedFolders
|
||||
val noMediaFolders = getNoMediaFoldersSync()
|
||||
|
||||
val sorting = config.getFolderSorting(path)
|
||||
val grouping = config.getFolderGrouping(path)
|
||||
|
@ -880,9 +923,13 @@ fun Context.updateDirectoryPath(path: String) {
|
|||
grouping and GROUP_BY_LAST_MODIFIED_MONTHLY != 0
|
||||
|
||||
val getProperFileSize = config.directorySorting and SORT_BY_SIZE != 0
|
||||
|
||||
val lastModifieds = if (isRPlus() && getProperLastModified) mediaFetcher.getFolderLastModifieds(path) else HashMap()
|
||||
val dateTakens = mediaFetcher.getFolderDateTakens(path)
|
||||
val favoritePaths = getFavoritePaths()
|
||||
val curMedia = mediaFetcher.getFilesFrom(path, getImagesOnly, getVideosOnly, getProperDateTaken, getProperLastModified, getProperFileSize, favoritePaths, false)
|
||||
val directory = createDirectoryFromMedia(path, curMedia, albumCovers, hiddenString, includedFolders, getProperFileSize)
|
||||
val curMedia = mediaFetcher.getFilesFrom(path, getImagesOnly, getVideosOnly, getProperDateTaken, getProperLastModified, getProperFileSize,
|
||||
favoritePaths, false, lastModifieds, dateTakens)
|
||||
val directory = createDirectoryFromMedia(path, curMedia, albumCovers, hiddenString, includedFolders, getProperFileSize, noMediaFolders)
|
||||
updateDBDirectory(directory)
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
package com.simplemobiletools.gallery.pro.extensions
|
||||
|
||||
import android.media.ExifInterface
|
||||
import java.lang.reflect.Field
|
||||
import java.lang.reflect.Modifier
|
||||
|
||||
fun ExifInterface.copyNonDimensionAttributesTo(destination: ExifInterface) {
|
||||
val attributes = ExifInterfaceAttributes.AllNonDimensionAttributes
|
||||
|
||||
attributes.forEach {
|
||||
val value = getAttribute(it)
|
||||
if (value != null) {
|
||||
destination.setAttribute(it, value)
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
destination.saveAttributes()
|
||||
} catch (ignored: Exception) {
|
||||
}
|
||||
}
|
||||
|
||||
private class ExifInterfaceAttributes {
|
||||
companion object {
|
||||
val AllNonDimensionAttributes = getAllNonDimensionExifAttributes()
|
||||
|
||||
private fun getAllNonDimensionExifAttributes(): List<String> {
|
||||
val tagFields = ExifInterface::class.java.fields.filter { field -> isExif(field) }
|
||||
|
||||
val excludeAttributes = arrayListOf(
|
||||
ExifInterface.TAG_IMAGE_LENGTH,
|
||||
ExifInterface.TAG_IMAGE_WIDTH,
|
||||
ExifInterface.TAG_PIXEL_X_DIMENSION,
|
||||
ExifInterface.TAG_PIXEL_Y_DIMENSION,
|
||||
ExifInterface.TAG_THUMBNAIL_IMAGE_LENGTH,
|
||||
ExifInterface.TAG_THUMBNAIL_IMAGE_WIDTH,
|
||||
ExifInterface.TAG_ORIENTATION)
|
||||
|
||||
return tagFields
|
||||
.map { tagField -> tagField.get(null) as String }
|
||||
.filter { x -> !excludeAttributes.contains(x) }
|
||||
.distinct()
|
||||
}
|
||||
|
||||
private fun isExif(field: Field): Boolean {
|
||||
return field.type == String::class.java &&
|
||||
isPublicStaticFinal(field.modifiers) &&
|
||||
field.name.startsWith("TAG_")
|
||||
}
|
||||
|
||||
private const val publicStaticFinal = Modifier.PUBLIC or Modifier.STATIC or Modifier.FINAL
|
||||
|
||||
private fun isPublicStaticFinal(modifiers: Int): Boolean {
|
||||
return modifiers and publicStaticFinal > 0
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,9 +1,7 @@
|
|||
package com.simplemobiletools.gallery.pro.extensions
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Environment
|
||||
import com.simplemobiletools.commons.extensions.containsNoMedia
|
||||
import com.simplemobiletools.commons.extensions.doesParentHaveNoMedia
|
||||
import com.simplemobiletools.commons.helpers.NOMEDIA
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
|
||||
|
@ -11,13 +9,17 @@ fun String.isThisOrParentIncluded(includedPaths: MutableSet<String>) = includedP
|
|||
|
||||
fun String.isThisOrParentExcluded(excludedPaths: MutableSet<String>) = excludedPaths.any { equals(it, true) } || excludedPaths.any { "$this/".startsWith("$it/", true) }
|
||||
|
||||
fun String.shouldFolderBeVisible(excludedPaths: MutableSet<String>, includedPaths: MutableSet<String>, showHidden: Boolean, context: Context): Boolean {
|
||||
// cache which folders contain .nomedia files to avoid checking them over and over again
|
||||
fun String.shouldFolderBeVisible(excludedPaths: MutableSet<String>, includedPaths: MutableSet<String>, showHidden: Boolean,
|
||||
folderNoMediaStatuses: HashMap<String, Boolean>, noMediaFolders: ArrayList<String> = ArrayList(),
|
||||
callback: (path: String, hasNoMedia: Boolean) -> Unit): Boolean {
|
||||
if (isEmpty()) {
|
||||
return false
|
||||
}
|
||||
|
||||
val file = File(this)
|
||||
if (file.name.startsWith("img_", true)) {
|
||||
val filename = file.name
|
||||
if (filename.startsWith("img_", true) && file.isDirectory) {
|
||||
val files = file.list()
|
||||
if (files != null) {
|
||||
if (files.any { it.contains("burst", true) }) {
|
||||
|
@ -26,7 +28,7 @@ fun String.shouldFolderBeVisible(excludedPaths: MutableSet<String>, includedPath
|
|||
}
|
||||
}
|
||||
|
||||
if (!showHidden && file.isHidden) {
|
||||
if (!showHidden && filename.startsWith('.')) {
|
||||
return false
|
||||
} else if (includedPaths.contains(this)) {
|
||||
return true
|
||||
|
@ -35,7 +37,7 @@ fun String.shouldFolderBeVisible(excludedPaths: MutableSet<String>, includedPath
|
|||
val containsNoMedia = if (showHidden) {
|
||||
false
|
||||
} else {
|
||||
file.containsNoMedia()
|
||||
noMediaFolders.contains(this) || File(this, NOMEDIA).exists()
|
||||
}
|
||||
|
||||
return if (!showHidden && containsNoMedia) {
|
||||
|
@ -46,10 +48,27 @@ fun String.shouldFolderBeVisible(excludedPaths: MutableSet<String>, includedPath
|
|||
true
|
||||
} else if (isThisOrParentExcluded(excludedPaths)) {
|
||||
false
|
||||
} else if (!showHidden && file.isDirectory && file.canonicalFile == file.absoluteFile) {
|
||||
} else if (!showHidden) {
|
||||
var containsNoMediaOrDot = containsNoMedia || contains("/.")
|
||||
if (!containsNoMediaOrDot) {
|
||||
containsNoMediaOrDot = file.doesParentHaveNoMedia()
|
||||
var curPath = this
|
||||
for (i in 0 until count { it == '/' } - 1) {
|
||||
curPath = curPath.substringBeforeLast('/')
|
||||
val pathToCheck = "$curPath/${NOMEDIA}"
|
||||
if (folderNoMediaStatuses.contains(pathToCheck)) {
|
||||
if (folderNoMediaStatuses[pathToCheck] == true) {
|
||||
containsNoMediaOrDot = true
|
||||
break
|
||||
}
|
||||
} else {
|
||||
val noMediaExists = noMediaFolders.contains(pathToCheck) || File(pathToCheck).exists()
|
||||
callback(pathToCheck, noMediaExists)
|
||||
if (noMediaExists) {
|
||||
containsNoMediaOrDot = true
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
!containsNoMediaOrDot
|
||||
} else {
|
||||
|
|
|
@ -36,6 +36,7 @@ import com.davemorrissey.labs.subscaleview.DecoderFactory
|
|||
import com.davemorrissey.labs.subscaleview.ImageDecoder
|
||||
import com.davemorrissey.labs.subscaleview.ImageRegionDecoder
|
||||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
||||
import com.github.penfeizhou.animation.webp.WebPDrawable
|
||||
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
|
@ -43,7 +44,9 @@ import com.simplemobiletools.gallery.pro.R
|
|||
import com.simplemobiletools.gallery.pro.activities.PanoramaPhotoActivity
|
||||
import com.simplemobiletools.gallery.pro.activities.PhotoActivity
|
||||
import com.simplemobiletools.gallery.pro.adapters.PortraitPhotosAdapter
|
||||
import com.simplemobiletools.gallery.pro.extensions.*
|
||||
import com.simplemobiletools.gallery.pro.extensions.config
|
||||
import com.simplemobiletools.gallery.pro.extensions.saveRotatedImageToFile
|
||||
import com.simplemobiletools.gallery.pro.extensions.sendFakeClick
|
||||
import com.simplemobiletools.gallery.pro.helpers.*
|
||||
import com.simplemobiletools.gallery.pro.models.Medium
|
||||
import com.simplemobiletools.gallery.pro.svg.SvgSoftwareLayerSetter
|
||||
|
@ -66,8 +69,8 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
|
||||
// devices with good displays, but the rest of the hardware not good enough for them
|
||||
private val WEIRD_DEVICES = arrayListOf(
|
||||
"motorola xt1685",
|
||||
"google nexus 5x"
|
||||
"motorola xt1685",
|
||||
"google nexus 5x"
|
||||
)
|
||||
|
||||
var mCurrentRotationDegrees = 0
|
||||
|
@ -286,7 +289,7 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
super.setMenuVisibility(menuVisible)
|
||||
mIsFragmentVisible = menuVisible
|
||||
if (mWasInit) {
|
||||
if (!mMedium.isGIF()) {
|
||||
if (!mMedium.isGIF() && !mMedium.isWebP()) {
|
||||
photoFragmentVisibilityChanged(menuVisible)
|
||||
}
|
||||
}
|
||||
|
@ -379,49 +382,64 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
|
||||
private fun loadSVG() {
|
||||
Glide.with(context!!)
|
||||
.`as`(PictureDrawable::class.java)
|
||||
.listener(SvgSoftwareLayerSetter())
|
||||
.load(mMedium.path)
|
||||
.into(mView.gestures_view)
|
||||
.`as`(PictureDrawable::class.java)
|
||||
.listener(SvgSoftwareLayerSetter())
|
||||
.load(mMedium.path)
|
||||
.into(mView.gestures_view)
|
||||
}
|
||||
|
||||
private fun loadBitmap(addZoomableView: Boolean = true) {
|
||||
if (context == null) {
|
||||
return
|
||||
}
|
||||
|
||||
val path = getFilePathToShow()
|
||||
if (path.isWebP()) {
|
||||
val drawable = WebPDrawable.fromFile(path)
|
||||
if (drawable.intrinsicWidth == 0) {
|
||||
loadWithGlide(path, addZoomableView)
|
||||
} else {
|
||||
drawable.setLoopLimit(0)
|
||||
mView.gestures_view.setImageDrawable(drawable)
|
||||
}
|
||||
} else {
|
||||
loadWithGlide(path, addZoomableView)
|
||||
}
|
||||
}
|
||||
|
||||
private fun loadWithGlide(path: String, addZoomableView: Boolean) {
|
||||
val priority = if (mIsFragmentVisible) Priority.IMMEDIATE else Priority.NORMAL
|
||||
val options = RequestOptions()
|
||||
.signature(getFilePathToShow().getFileSignature())
|
||||
.format(DecodeFormat.PREFER_ARGB_8888)
|
||||
.priority(priority)
|
||||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||
.fitCenter()
|
||||
.signature(getFilePathToShow().getFileSignature())
|
||||
.format(DecodeFormat.PREFER_ARGB_8888)
|
||||
.priority(priority)
|
||||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||
.fitCenter()
|
||||
|
||||
if (mCurrentRotationDegrees != 0) {
|
||||
options.transform(Rotate(mCurrentRotationDegrees))
|
||||
options.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
}
|
||||
|
||||
if (context == null) {
|
||||
return
|
||||
}
|
||||
|
||||
Glide.with(context!!)
|
||||
.load(getFilePathToShow())
|
||||
.apply(options)
|
||||
.listener(object : RequestListener<Drawable> {
|
||||
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean {
|
||||
if (activity != null && !activity!!.isDestroyed && !activity!!.isFinishing) {
|
||||
tryLoadingWithPicasso(addZoomableView)
|
||||
}
|
||||
return false
|
||||
.load(path)
|
||||
.apply(options)
|
||||
.listener(object : RequestListener<Drawable> {
|
||||
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean {
|
||||
if (activity != null && !activity!!.isDestroyed && !activity!!.isFinishing) {
|
||||
tryLoadingWithPicasso(addZoomableView)
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
|
||||
mView.gestures_view.controller.settings.isZoomEnabled = mMedium.isRaw() || mCurrentRotationDegrees != 0 || context?.config?.allowZoomingImages == false
|
||||
if (mIsFragmentVisible && addZoomableView) {
|
||||
scheduleZoomableView()
|
||||
}
|
||||
return false
|
||||
override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
|
||||
mView.gestures_view.controller.settings.isZoomEnabled = mMedium.isRaw() || mCurrentRotationDegrees != 0 || context?.config?.allowZoomingImages == false
|
||||
if (mIsFragmentVisible && addZoomableView) {
|
||||
scheduleZoomableView()
|
||||
}
|
||||
}).into(mView.gestures_view)
|
||||
return false
|
||||
}
|
||||
}).into(mView.gestures_view)
|
||||
}
|
||||
|
||||
private fun tryLoadingWithPicasso(addZoomableView: Boolean) {
|
||||
|
@ -430,10 +448,10 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
|
||||
try {
|
||||
val picasso = Picasso.get()
|
||||
.load(pathToLoad)
|
||||
.centerInside()
|
||||
.stableKey(mMedium.path.getFileKey())
|
||||
.resize(mScreenWidth, mScreenHeight)
|
||||
.load(pathToLoad)
|
||||
.centerInside()
|
||||
.stableKey(mMedium.path.getFileKey())
|
||||
.resize(mScreenWidth, mScreenHeight)
|
||||
|
||||
if (mCurrentRotationDegrees != 0) {
|
||||
picasso.rotate(mCurrentRotationDegrees.toFloat())
|
||||
|
@ -599,7 +617,7 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
val minTileDpi = if (showHighestQuality) -1 else getMinTileDpi()
|
||||
|
||||
val bitmapDecoder = object : DecoderFactory<ImageDecoder> {
|
||||
override fun make() = MyGlideImageDecoder(rotation)
|
||||
override fun make() = MyGlideImageDecoder(rotation, mMedium.getSignature())
|
||||
}
|
||||
|
||||
val regionDecoder = object : DecoderFactory<ImageRegionDecoder> {
|
||||
|
@ -670,7 +688,8 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
val imageParser = JpegImageParser().getXmpXml(ByteSourceInputStream(inputStream, mMedium.name), HashMap<String, Any>())
|
||||
imageParser.contains("GPano:UsePanoramaViewer=\"True\"", true) ||
|
||||
imageParser.contains("<GPano:UsePanoramaViewer>True</GPano:UsePanoramaViewer>", true) ||
|
||||
imageParser.contains("GPano:FullPanoWidthPixels=")
|
||||
imageParser.contains("GPano:FullPanoWidthPixels=") ||
|
||||
imageParser.contains("GPano:ProjectionType>Equirectangular")
|
||||
} catch (e: Exception) {
|
||||
false
|
||||
} catch (e: OutOfMemoryError) {
|
||||
|
|
|
@ -8,6 +8,7 @@ import com.google.gson.reflect.TypeToken
|
|||
import com.simplemobiletools.commons.helpers.BaseConfig
|
||||
import com.simplemobiletools.commons.helpers.SORT_BY_DATE_MODIFIED
|
||||
import com.simplemobiletools.commons.helpers.SORT_DESCENDING
|
||||
import com.simplemobiletools.commons.helpers.VIEW_TYPE_GRID
|
||||
import com.simplemobiletools.gallery.pro.R
|
||||
import com.simplemobiletools.gallery.pro.models.AlbumCover
|
||||
import java.util.*
|
||||
|
@ -405,8 +406,10 @@ class Config(context: Context) : BaseConfig(context) {
|
|||
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath,
|
||||
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).absolutePath,
|
||||
"${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).absolutePath}/Screenshots",
|
||||
"internalStoragePath/WhatsApp/Media/WhatsApp Images",
|
||||
"internalStoragePath/WhatsApp/Media/WhatsApp Video"
|
||||
"$internalStoragePath/WhatsApp/Media/WhatsApp Images",
|
||||
"$internalStoragePath/WhatsApp/Media/WhatsApp Images/Sent",
|
||||
"$internalStoragePath/WhatsApp/Media/WhatsApp Video",
|
||||
"$internalStoragePath/WhatsApp/Media/WhatsApp Video/Sent",
|
||||
)
|
||||
|
||||
var showRecycleBinAtFolders: Boolean
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package com.simplemobiletools.gallery.pro.helpers
|
||||
|
||||
import com.simplemobiletools.commons.helpers.MONTH_SECONDS
|
||||
import com.simplemobiletools.commons.helpers.isPiePlus
|
||||
import com.simplemobiletools.commons.helpers.isQPlus
|
||||
|
||||
// shared preferences
|
||||
const val DIRECTORY_SORT_ORDER = "directory_sort_order"
|
||||
|
@ -102,7 +102,6 @@ const val SLIDESHOW_ANIMATION_NONE = 0
|
|||
const val SLIDESHOW_ANIMATION_SLIDE = 1
|
||||
const val SLIDESHOW_ANIMATION_FADE = 2
|
||||
|
||||
const val FAVORITES = "favorites"
|
||||
const val RECYCLE_BIN = "recycle_bin"
|
||||
const val SHOW_FAVORITES = "show_favorites"
|
||||
const val SHOW_RECYCLE_BIN = "show_recycle_bin"
|
||||
|
@ -145,10 +144,6 @@ const val PRIORITY_SPEED = 0
|
|||
const val PRIORITY_COMPROMISE = 1
|
||||
const val PRIORITY_VALIDITY = 2
|
||||
|
||||
// view types
|
||||
const val VIEW_TYPE_GRID = 1
|
||||
const val VIEW_TYPE_LIST = 2
|
||||
|
||||
// extended details values
|
||||
const val EXT_NAME = 1
|
||||
const val EXT_PATH = 2
|
||||
|
@ -225,3 +220,7 @@ const val LOW_TILE_DPI = 160
|
|||
const val NORMAL_TILE_DPI = 220
|
||||
const val WEIRD_TILE_DPI = 240
|
||||
const val HIGH_TILE_DPI = 280
|
||||
|
||||
const val ROUNDED_CORNERS_NONE = 1
|
||||
const val ROUNDED_CORNERS_SMALL = 2
|
||||
const val ROUNDED_CORNERS_BIG = 3
|
||||
|
|
|
@ -22,7 +22,8 @@ class MediaFetcher(val context: Context) {
|
|||
var shouldStop = false
|
||||
|
||||
fun getFilesFrom(curPath: String, isPickImage: Boolean, isPickVideo: Boolean, getProperDateTaken: Boolean, getProperLastModified: Boolean,
|
||||
getProperFileSize: Boolean, favoritePaths: ArrayList<String>, getVideoDurations: Boolean): ArrayList<Medium> {
|
||||
getProperFileSize: Boolean, favoritePaths: ArrayList<String>, getVideoDurations: Boolean,
|
||||
lastModifieds: HashMap<String, Long>, dateTakens: HashMap<String, Long>): ArrayList<Medium> {
|
||||
val filterMedia = context.config.filterMedia
|
||||
if (filterMedia == 0) {
|
||||
return ArrayList()
|
||||
|
@ -35,7 +36,8 @@ class MediaFetcher(val context: Context) {
|
|||
curMedia.addAll(newMedia)
|
||||
}
|
||||
} else {
|
||||
val newMedia = getMediaInFolder(curPath, isPickImage, isPickVideo, filterMedia, getProperDateTaken, getProperLastModified, getProperFileSize, favoritePaths, getVideoDurations)
|
||||
val newMedia = getMediaInFolder(curPath, isPickImage, isPickVideo, filterMedia, getProperDateTaken, getProperLastModified, getProperFileSize,
|
||||
favoritePaths, getVideoDurations, lastModifieds, dateTakens)
|
||||
curMedia.addAll(newMedia)
|
||||
}
|
||||
|
||||
|
@ -66,7 +68,26 @@ class MediaFetcher(val context: Context) {
|
|||
val shouldShowHidden = config.shouldShowHidden
|
||||
val excludedPaths = config.excludedFolders
|
||||
val includedPaths = config.includedFolders
|
||||
folders.filter { it.shouldFolderBeVisible(excludedPaths, includedPaths, shouldShowHidden, context) }.toMutableList() as ArrayList<String>
|
||||
|
||||
val folderNomediaStatuses = HashMap<String, Boolean>()
|
||||
val distinctPathsMap = HashMap<String, String>()
|
||||
val distinctPaths = folders.distinctBy {
|
||||
when {
|
||||
distinctPathsMap.containsKey(it) -> distinctPathsMap[it]
|
||||
else -> {
|
||||
val distinct = it.getDistinctPath()
|
||||
distinctPathsMap[it.getParentPath()] = distinct.getParentPath()
|
||||
distinct
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val noMediaFolders = context.getNoMediaFoldersSync()
|
||||
distinctPaths.filter {
|
||||
it.shouldFolderBeVisible(excludedPaths, includedPaths, shouldShowHidden, folderNomediaStatuses, noMediaFolders) { path, hasNoMedia ->
|
||||
folderNomediaStatuses[path] = hasNoMedia
|
||||
}
|
||||
}.toMutableList() as ArrayList<String>
|
||||
} catch (e: Exception) {
|
||||
ArrayList()
|
||||
}
|
||||
|
@ -190,10 +211,7 @@ class MediaFetcher(val context: Context) {
|
|||
addFolder(foldersToScan, it)
|
||||
}
|
||||
|
||||
val showHidden = config.shouldShowHidden
|
||||
val excludedFolders = config.excludedFolders
|
||||
return foldersToScan.distinctBy { it.getDistinctPath() }
|
||||
.filter { it.shouldFolderBeVisible(excludedFolders, includedFolders, showHidden, context) }.toMutableSet() as LinkedHashSet<String>
|
||||
return foldersToScan.toMutableSet() as LinkedHashSet<String>
|
||||
}
|
||||
|
||||
private fun addFolder(curFolders: HashSet<String>, folder: String) {
|
||||
|
@ -207,7 +225,8 @@ class MediaFetcher(val context: Context) {
|
|||
}
|
||||
|
||||
private fun getMediaInFolder(folder: String, isPickImage: Boolean, isPickVideo: Boolean, filterMedia: Int, getProperDateTaken: Boolean,
|
||||
getProperLastModified: Boolean, getProperFileSize: Boolean, favoritePaths: ArrayList<String>, getVideoDurations: Boolean): ArrayList<Medium> {
|
||||
getProperLastModified: Boolean, getProperFileSize: Boolean, favoritePaths: ArrayList<String>,
|
||||
getVideoDurations: Boolean, lastModifieds: HashMap<String, Long>, dateTakens: HashMap<String, Long>): ArrayList<Medium> {
|
||||
val media = ArrayList<Medium>()
|
||||
val isRecycleBin = folder == RECYCLE_BIN
|
||||
val deletedMedia = if (isRecycleBin) {
|
||||
|
@ -221,7 +240,7 @@ class MediaFetcher(val context: Context) {
|
|||
val checkFileExistence = config.fileLoadingPriority == PRIORITY_VALIDITY
|
||||
val showHidden = config.shouldShowHidden
|
||||
val showPortraits = filterMedia and TYPE_PORTRAITS != 0
|
||||
val dateTakens = if (getProperDateTaken && !isRecycleBin) getFolderDateTakens(folder) else HashMap()
|
||||
val fileSizes = if (checkProperFileSize || checkFileExistence) getFolderSizes(folder) else HashMap()
|
||||
|
||||
val files = when (folder) {
|
||||
FAVORITES -> favoritePaths.filter { showHidden || !it.contains("/.") }.map { File(it) }.toMutableList() as ArrayList<File>
|
||||
|
@ -278,7 +297,15 @@ class MediaFetcher(val context: Context) {
|
|||
if (!showHidden && filename.startsWith('.'))
|
||||
continue
|
||||
|
||||
val size = if (checkProperFileSize || checkFileExistence) file.length() else 1L
|
||||
var size = 0L
|
||||
if (checkProperFileSize || checkFileExistence) {
|
||||
var newSize = fileSizes.remove(path)
|
||||
if (newSize == null) {
|
||||
newSize = file.length()
|
||||
}
|
||||
size = newSize
|
||||
}
|
||||
|
||||
if ((checkProperFileSize || checkFileExistence) && size <= 0L) {
|
||||
continue
|
||||
}
|
||||
|
@ -292,7 +319,19 @@ class MediaFetcher(val context: Context) {
|
|||
media.add(this)
|
||||
}
|
||||
} else {
|
||||
val lastModified = if (getProperLastModified) file.lastModified() else 0L
|
||||
var lastModified = 0L
|
||||
if (getProperLastModified) {
|
||||
if (isRPlus()) {
|
||||
var newLastModified = lastModifieds.remove(path)
|
||||
if (newLastModified == null) {
|
||||
newLastModified = file.lastModified()
|
||||
}
|
||||
lastModified = newLastModified
|
||||
} else {
|
||||
lastModified = file.lastModified()
|
||||
}
|
||||
}
|
||||
|
||||
var dateTaken = lastModified
|
||||
val videoDuration = if (getVideoDurations && isVideo) context.getDuration(path) ?: 0 else 0
|
||||
|
||||
|
@ -392,7 +431,7 @@ class MediaFetcher(val context: Context) {
|
|||
return media
|
||||
}
|
||||
|
||||
private fun getFolderDateTakens(folder: String): HashMap<String, Long> {
|
||||
fun getFolderDateTakens(folder: String): HashMap<String, Long> {
|
||||
val dateTakens = HashMap<String, Long>()
|
||||
if (folder != FAVORITES) {
|
||||
val projection = arrayOf(
|
||||
|
@ -404,19 +443,14 @@ class MediaFetcher(val context: Context) {
|
|||
val selection = "${Images.Media.DATA} LIKE ? AND ${Images.Media.DATA} NOT LIKE ?"
|
||||
val selectionArgs = arrayOf("$folder/%", "$folder/%/%")
|
||||
|
||||
val cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||
cursor?.use {
|
||||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
try {
|
||||
val dateTaken = cursor.getLongValue(Images.Media.DATE_TAKEN)
|
||||
if (dateTaken != 0L) {
|
||||
val name = cursor.getStringValue(Images.Media.DISPLAY_NAME)
|
||||
dateTakens["$folder/$name"] = dateTaken
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
} while (cursor.moveToNext())
|
||||
context.queryCursor(uri, projection, selection, selectionArgs) { cursor ->
|
||||
try {
|
||||
val dateTaken = cursor.getLongValue(Images.Media.DATE_TAKEN)
|
||||
if (dateTaken != 0L) {
|
||||
val name = cursor.getStringValue(Images.Media.DISPLAY_NAME)
|
||||
dateTakens["$folder/$name"] = dateTaken
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -434,6 +468,118 @@ class MediaFetcher(val context: Context) {
|
|||
return dateTakens
|
||||
}
|
||||
|
||||
fun getDateTakens(): HashMap<String, Long> {
|
||||
val dateTakens = HashMap<String, Long>()
|
||||
val projection = arrayOf(
|
||||
Images.Media.DATA,
|
||||
Images.Media.DATE_TAKEN
|
||||
)
|
||||
|
||||
val uri = Files.getContentUri("external")
|
||||
|
||||
try {
|
||||
context.queryCursor(uri, projection) { cursor ->
|
||||
try {
|
||||
val dateTaken = cursor.getLongValue(Images.Media.DATE_TAKEN)
|
||||
if (dateTaken != 0L) {
|
||||
val path = cursor.getStringValue(Images.Media.DATA)
|
||||
dateTakens[path] = dateTaken
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
}
|
||||
|
||||
val dateTakenValues = context.dateTakensDB.getAllDateTakens()
|
||||
|
||||
dateTakenValues.forEach {
|
||||
dateTakens[it.fullPath] = it.taken
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
|
||||
return dateTakens
|
||||
}
|
||||
|
||||
fun getFolderLastModifieds(folder: String): HashMap<String, Long> {
|
||||
val lastModifieds = HashMap<String, Long>()
|
||||
if (folder != FAVORITES) {
|
||||
val projection = arrayOf(
|
||||
Images.Media.DISPLAY_NAME,
|
||||
Images.Media.DATE_MODIFIED
|
||||
)
|
||||
|
||||
val uri = Files.getContentUri("external")
|
||||
val selection = "${Images.Media.DATA} LIKE ? AND ${Images.Media.DATA} NOT LIKE ?"
|
||||
val selectionArgs = arrayOf("$folder/%", "$folder/%/%")
|
||||
|
||||
context.queryCursor(uri, projection, selection, selectionArgs) { cursor ->
|
||||
try {
|
||||
val lastModified = cursor.getLongValue(Images.Media.DATE_MODIFIED) * 1000
|
||||
if (lastModified != 0L) {
|
||||
val name = cursor.getStringValue(Images.Media.DISPLAY_NAME)
|
||||
lastModifieds["$folder/$name"] = lastModified
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return lastModifieds
|
||||
}
|
||||
|
||||
fun getLastModifieds(): HashMap<String, Long> {
|
||||
val lastModifieds = HashMap<String, Long>()
|
||||
val projection = arrayOf(
|
||||
Images.Media.DATA,
|
||||
Images.Media.DATE_MODIFIED
|
||||
)
|
||||
|
||||
val uri = Files.getContentUri("external")
|
||||
|
||||
try {
|
||||
context.queryCursor(uri, projection) { cursor ->
|
||||
try {
|
||||
val lastModified = cursor.getLongValue(Images.Media.DATE_MODIFIED) * 1000
|
||||
if (lastModified != 0L) {
|
||||
val path = cursor.getStringValue(Images.Media.DATA)
|
||||
lastModifieds[path] = lastModified
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
|
||||
return lastModifieds
|
||||
}
|
||||
|
||||
private fun getFolderSizes(folder: String): HashMap<String, Long> {
|
||||
val sizes = HashMap<String, Long>()
|
||||
if (folder != FAVORITES) {
|
||||
val projection = arrayOf(
|
||||
Images.Media.DISPLAY_NAME,
|
||||
Images.Media.SIZE
|
||||
)
|
||||
|
||||
val uri = Files.getContentUri("external")
|
||||
val selection = "${Images.Media.DATA} LIKE ? AND ${Images.Media.DATA} NOT LIKE ?"
|
||||
val selectionArgs = arrayOf("$folder/%", "$folder/%/%")
|
||||
|
||||
context.queryCursor(uri, projection, selection, selectionArgs) { cursor ->
|
||||
try {
|
||||
val size = cursor.getLongValue(Images.Media.SIZE)
|
||||
if (size != 0L) {
|
||||
val name = cursor.getStringValue(Images.Media.DISPLAY_NAME)
|
||||
sizes["$folder/$name"] = size
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sizes
|
||||
}
|
||||
|
||||
fun sortMedia(media: ArrayList<Medium>, sorting: Int) {
|
||||
if (sorting and SORT_BY_RANDOM != 0) {
|
||||
media.shuffle()
|
||||
|
|
|
@ -5,25 +5,25 @@ import android.graphics.Bitmap
|
|||
import android.net.Uri
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.load.DecodeFormat
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||
import com.bumptech.glide.request.RequestOptions
|
||||
import com.bumptech.glide.request.target.Target
|
||||
import com.bumptech.glide.signature.ObjectKey
|
||||
import com.davemorrissey.labs.subscaleview.ImageDecoder
|
||||
|
||||
class MyGlideImageDecoder(val degrees: Int) : ImageDecoder {
|
||||
class MyGlideImageDecoder(val degrees: Int, val signature: ObjectKey) : ImageDecoder {
|
||||
|
||||
override fun decode(context: Context, uri: Uri): Bitmap {
|
||||
val options = RequestOptions()
|
||||
.format(DecodeFormat.PREFER_ARGB_8888)
|
||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
.fitCenter()
|
||||
.format(DecodeFormat.PREFER_ARGB_8888)
|
||||
.signature(signature)
|
||||
.fitCenter()
|
||||
|
||||
val builder = Glide.with(context)
|
||||
.asBitmap()
|
||||
.load(uri)
|
||||
.apply(options)
|
||||
.transform(RotateTransformation(-degrees))
|
||||
.into(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
|
||||
.asBitmap()
|
||||
.load(uri.toString().substringAfter("file://"))
|
||||
.apply(options)
|
||||
.transform(RotateTransformation(-degrees))
|
||||
.into(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
|
||||
|
||||
return builder.get()
|
||||
}
|
||||
|
|
|
@ -11,9 +11,9 @@ interface DateTakensDao {
|
|||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
fun insertAll(dateTakens: List<DateTaken>)
|
||||
|
||||
@Query("SELECT full_path, filename, parent_path, date_taken, last_fixed FROM date_takens WHERE parent_path = :path COLLATE NOCASE")
|
||||
@Query("SELECT full_path, filename, parent_path, date_taken, last_fixed, last_modified FROM date_takens WHERE parent_path = :path COLLATE NOCASE")
|
||||
fun getDateTakensFromPath(path: String): List<DateTaken>
|
||||
|
||||
@Query("SELECT full_path, filename, parent_path, date_taken, last_fixed FROM date_takens")
|
||||
@Query("SELECT full_path, filename, parent_path, date_taken, last_fixed, last_modified FROM date_takens")
|
||||
fun getAllDateTakens(): List<DateTaken>
|
||||
}
|
||||
|
|
|
@ -9,9 +9,10 @@ import androidx.room.PrimaryKey
|
|||
// It is used at sorting files by date taken, checking EXIF file by file would be way too slow
|
||||
@Entity(tableName = "date_takens", indices = [Index(value = ["full_path"], unique = true)])
|
||||
data class DateTaken(
|
||||
@PrimaryKey(autoGenerate = true) var id: Int?,
|
||||
@ColumnInfo(name = "full_path") var fullPath: String,
|
||||
@ColumnInfo(name = "filename") var filename: String,
|
||||
@ColumnInfo(name = "parent_path") var parentPath: String,
|
||||
@ColumnInfo(name = "date_taken") var taken: Long,
|
||||
@ColumnInfo(name = "last_fixed") var lastFixed: Int)
|
||||
@PrimaryKey(autoGenerate = true) var id: Int?,
|
||||
@ColumnInfo(name = "full_path") var fullPath: String,
|
||||
@ColumnInfo(name = "filename") var filename: String,
|
||||
@ColumnInfo(name = "parent_path") var parentPath: String,
|
||||
@ColumnInfo(name = "date_taken") var taken: Long,
|
||||
@ColumnInfo(name = "last_fixed") var lastFixed: Int,
|
||||
@ColumnInfo(name = "last_modified") var lastModified: Long)
|
||||
|
|
|
@ -4,11 +4,7 @@ import android.content.Context
|
|||
import androidx.room.*
|
||||
import com.simplemobiletools.commons.extensions.formatDate
|
||||
import com.simplemobiletools.commons.extensions.formatSize
|
||||
import com.simplemobiletools.commons.helpers.SORT_BY_DATE_MODIFIED
|
||||
import com.simplemobiletools.commons.helpers.SORT_BY_NAME
|
||||
import com.simplemobiletools.commons.helpers.SORT_BY_PATH
|
||||
import com.simplemobiletools.commons.helpers.SORT_BY_SIZE
|
||||
import com.simplemobiletools.gallery.pro.helpers.FAVORITES
|
||||
import com.simplemobiletools.commons.helpers.*
|
||||
import com.simplemobiletools.gallery.pro.helpers.RECYCLE_BIN
|
||||
|
||||
@Entity(tableName = "directories", indices = [Index(value = ["path"], unique = true)])
|
||||
|
|
|
@ -5,9 +5,11 @@ import androidx.room.ColumnInfo
|
|||
import androidx.room.Entity
|
||||
import androidx.room.Index
|
||||
import androidx.room.PrimaryKey
|
||||
import com.bumptech.glide.signature.ObjectKey
|
||||
import com.simplemobiletools.commons.extensions.formatDate
|
||||
import com.simplemobiletools.commons.extensions.formatSize
|
||||
import com.simplemobiletools.commons.extensions.getFilenameExtension
|
||||
import com.simplemobiletools.commons.extensions.isWebP
|
||||
import com.simplemobiletools.commons.helpers.SORT_BY_DATE_MODIFIED
|
||||
import com.simplemobiletools.commons.helpers.SORT_BY_NAME
|
||||
import com.simplemobiletools.commons.helpers.SORT_BY_PATH
|
||||
|
@ -18,22 +20,24 @@ import java.util.*
|
|||
|
||||
@Entity(tableName = "media", indices = [(Index(value = ["full_path"], unique = true))])
|
||||
data class Medium(
|
||||
@PrimaryKey(autoGenerate = true) var id: Long?,
|
||||
@ColumnInfo(name = "filename") var name: String,
|
||||
@ColumnInfo(name = "full_path") var path: String,
|
||||
@ColumnInfo(name = "parent_path") var parentPath: String,
|
||||
@ColumnInfo(name = "last_modified") val modified: Long,
|
||||
@ColumnInfo(name = "date_taken") var taken: Long,
|
||||
@ColumnInfo(name = "size") val size: Long,
|
||||
@ColumnInfo(name = "type") val type: Int,
|
||||
@ColumnInfo(name = "video_duration") val videoDuration: Int,
|
||||
@ColumnInfo(name = "is_favorite") var isFavorite: Boolean,
|
||||
@ColumnInfo(name = "deleted_ts") var deletedTS: Long) : Serializable, ThumbnailItem() {
|
||||
@PrimaryKey(autoGenerate = true) var id: Long?,
|
||||
@ColumnInfo(name = "filename") var name: String,
|
||||
@ColumnInfo(name = "full_path") var path: String,
|
||||
@ColumnInfo(name = "parent_path") var parentPath: String,
|
||||
@ColumnInfo(name = "last_modified") val modified: Long,
|
||||
@ColumnInfo(name = "date_taken") var taken: Long,
|
||||
@ColumnInfo(name = "size") val size: Long,
|
||||
@ColumnInfo(name = "type") val type: Int,
|
||||
@ColumnInfo(name = "video_duration") val videoDuration: Int,
|
||||
@ColumnInfo(name = "is_favorite") var isFavorite: Boolean,
|
||||
@ColumnInfo(name = "deleted_ts") var deletedTS: Long) : Serializable, ThumbnailItem() {
|
||||
|
||||
companion object {
|
||||
private const val serialVersionUID = -6553149366975655L
|
||||
}
|
||||
|
||||
fun isWebP() = name.isWebP()
|
||||
|
||||
fun isGIF() = type == TYPE_GIFS
|
||||
|
||||
fun isImage() = type == TYPE_IMAGES
|
||||
|
@ -86,4 +90,6 @@ data class Medium(
|
|||
|
||||
return calendar.timeInMillis.toString()
|
||||
}
|
||||
|
||||
fun getSignature() = ObjectKey("$path-$modified-$size")
|
||||
}
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
|
||||
<corners android:radius="@dimen/small_margin" />
|
||||
|
||||
<solid android:color="@color/gradient_grey_start" />
|
||||
|
||||
</shape>
|
|
@ -1,6 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/directories_refresh_layout"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -19,22 +18,22 @@
|
|||
android:gravity="center"
|
||||
android:padding="@dimen/activity_margin"
|
||||
android:text="@string/switch_to_file_search"
|
||||
android:visibility="gone"/>
|
||||
android:visibility="gone" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/directories_empty_placeholder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/directories_switch_searching"
|
||||
android:gravity="center_horizontal"
|
||||
android:alpha="0.8"
|
||||
android:textStyle="italic"
|
||||
android:gravity="center_horizontal"
|
||||
android:paddingStart="@dimen/activity_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingEnd="@dimen/activity_margin"
|
||||
android:text="@string/no_media_with_filters"
|
||||
android:textSize="@dimen/bigger_text_size"
|
||||
android:visibility="gone"/>
|
||||
android:textStyle="italic"
|
||||
android:visibility="gone" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/directories_empty_placeholder_2"
|
||||
|
@ -46,7 +45,7 @@
|
|||
android:padding="@dimen/activity_margin"
|
||||
android:text="@string/change_filters_underlined"
|
||||
android:textSize="@dimen/bigger_text_size"
|
||||
android:visibility="gone"/>
|
||||
android:visibility="gone" />
|
||||
|
||||
<com.simplemobiletools.commons.views.MyRecyclerView
|
||||
android:id="@+id/directories_grid"
|
||||
|
@ -55,7 +54,7 @@
|
|||
android:layout_below="@+id/directories_switch_searching"
|
||||
android:scrollbars="none"
|
||||
app:layoutManager="com.simplemobiletools.commons.views.MyGridLayoutManager"
|
||||
app:spanCount="@integer/directory_columns_vertical_scroll"/>
|
||||
app:spanCount="@integer/directory_columns_vertical_scroll" />
|
||||
|
||||
<com.simplemobiletools.commons.views.FastScroller
|
||||
android:id="@+id/directories_vertical_fastscroller"
|
||||
|
@ -66,7 +65,7 @@
|
|||
android:paddingStart="@dimen/normal_margin"
|
||||
android:visibility="gone">
|
||||
|
||||
<include layout="@layout/fastscroller_handle_vertical"/>
|
||||
<include layout="@layout/fastscroller_handle_vertical" />
|
||||
|
||||
</com.simplemobiletools.commons.views.FastScroller>
|
||||
|
||||
|
@ -79,7 +78,7 @@
|
|||
android:paddingTop="@dimen/normal_margin"
|
||||
android:visibility="gone">
|
||||
|
||||
<include layout="@layout/fastscroller_handle_horizontal"/>
|
||||
<include layout="@layout/fastscroller_handle_horizontal" />
|
||||
|
||||
</com.simplemobiletools.commons.views.FastScroller>
|
||||
</RelativeLayout>
|
||||
|
|
|
@ -468,29 +468,6 @@
|
|||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/smaller_text_size" />
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_show_info_bubble_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingStart="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingEnd="@dimen/normal_margin"
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_show_info_bubble"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:text="@string/show_info_bubble"
|
||||
app:switchPadding="@dimen/medium_margin" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_scroll_horizontally_holder"
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/dir_holder"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -11,7 +10,7 @@
|
|||
<com.simplemobiletools.gallery.pro.views.MySquareImageView
|
||||
android:id="@+id/dir_thumbnail"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/dir_lock"
|
||||
|
@ -26,7 +25,7 @@
|
|||
android:contentDescription="@string/lock_folder"
|
||||
android:padding="@dimen/lock_padding"
|
||||
android:src="@drawable/ic_lock_vector"
|
||||
android:visibility="gone"/>
|
||||
android:visibility="gone" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/dir_check"
|
||||
|
@ -40,7 +39,7 @@
|
|||
android:contentDescription="@null"
|
||||
android:padding="@dimen/tiny_margin"
|
||||
android:src="@drawable/ic_check_vector"
|
||||
android:visibility="gone"/>
|
||||
android:visibility="gone" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/dir_pin"
|
||||
|
@ -53,7 +52,7 @@
|
|||
android:contentDescription="@string/pin"
|
||||
android:padding="@dimen/small_margin"
|
||||
android:src="@drawable/ic_pin"
|
||||
android:visibility="gone"/>
|
||||
android:visibility="gone" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/dir_shadow_holder"
|
||||
|
@ -63,7 +62,7 @@
|
|||
android:layout_alignEnd="@+id/dir_bottom_holder"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:background="@drawable/gradient_background"
|
||||
android:contentDescription="@null"/>
|
||||
android:contentDescription="@null" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/dir_bottom_holder"
|
||||
|
@ -89,14 +88,14 @@
|
|||
android:shadowColor="@color/default_background_color"
|
||||
android:shadowRadius="4"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/photo_cnt"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="@dimen/normal_text_size"/>
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
@ -111,6 +110,6 @@
|
|||
android:paddingEnd="@dimen/small_margin"
|
||||
android:paddingBottom="@dimen/small_margin"
|
||||
android:src="@drawable/ic_sd_card_vector"
|
||||
android:visibility="gone"/>
|
||||
android:visibility="gone" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/photo_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
@ -9,7 +9,7 @@
|
|||
<com.alexvasilkov.gestures.GestureImageView
|
||||
android:id="@+id/gestures_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
<com.alexvasilkov.gestures.GestureFrameLayout
|
||||
android:id="@+id/gif_view_frame"
|
||||
|
@ -22,7 +22,7 @@
|
|||
android:id="@+id/gif_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scaleType="fitCenter"/>
|
||||
android:scaleType="fitCenter" />
|
||||
|
||||
</com.alexvasilkov.gestures.GestureFrameLayout>
|
||||
|
||||
|
@ -30,17 +30,17 @@
|
|||
android:id="@+id/subsampling_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="gone"/>
|
||||
android:visibility="gone" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/panorama_outline"
|
||||
android:layout_width="@dimen/play_outline_size_big"
|
||||
android:layout_height="@dimen/play_outline_size_big"
|
||||
android:layout_centerInParent="true"
|
||||
android:padding="20dp"
|
||||
android:contentDescription="@null"
|
||||
android:padding="20dp"
|
||||
android:src="@drawable/ic_panorama_outline"
|
||||
android:visibility="gone"/>
|
||||
android:visibility="gone" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/photo_details"
|
||||
|
@ -49,18 +49,18 @@
|
|||
android:layout_alignParentStart="true"
|
||||
android:layout_marginLeft="@dimen/small_margin"
|
||||
android:layout_marginRight="@dimen/small_margin"
|
||||
android:background="@color/gradient_grey_start"
|
||||
android:background="@drawable/extended_details_background"
|
||||
android:padding="@dimen/small_margin"
|
||||
android:textColor="@color/theme_dark_text_color"
|
||||
android:textSize="@dimen/smaller_text_size"
|
||||
android:visibility="gone"
|
||||
tools:text="My image\nAnother line"/>
|
||||
tools:text="My image\nAnother line" />
|
||||
|
||||
<com.simplemobiletools.gallery.pro.views.MediaSideScroll
|
||||
android:id="@+id/photo_brightness_controller"
|
||||
android:layout_width="@dimen/media_side_slider_width"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentStart="true"/>
|
||||
android:layout_alignParentStart="true" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/slide_info"
|
||||
|
@ -77,7 +77,7 @@
|
|||
android:paddingRight="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/medium_margin"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="@dimen/extra_big_text_size"/>
|
||||
android:textSize="@dimen/extra_big_text_size" />
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/photo_portrait_stripe_wrapper"
|
||||
|
@ -99,12 +99,12 @@
|
|||
<com.simplemobiletools.gallery.pro.views.InstantItemSwitch
|
||||
android:id="@+id/instant_prev_item"
|
||||
android:layout_width="1dp"
|
||||
android:layout_height="match_parent"/>
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
<com.simplemobiletools.gallery.pro.views.InstantItemSwitch
|
||||
android:id="@+id/instant_next_item"
|
||||
android:layout_width="1dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentEnd="true"/>
|
||||
android:layout_alignParentEnd="true" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/video_holder"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -9,7 +8,7 @@
|
|||
<ImageView
|
||||
android:id="@+id/video_preview"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
<com.alexvasilkov.gestures.GestureFrameLayout
|
||||
android:id="@+id/video_surface_frame"
|
||||
|
@ -20,7 +19,7 @@
|
|||
android:id="@+id/video_surface"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"/>
|
||||
android:layout_centerInParent="true" />
|
||||
|
||||
</com.alexvasilkov.gestures.GestureFrameLayout>
|
||||
|
||||
|
@ -28,12 +27,12 @@
|
|||
android:id="@+id/video_volume_controller"
|
||||
android:layout_width="@dimen/media_side_slider_width"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentEnd="true"/>
|
||||
android:layout_alignParentEnd="true" />
|
||||
|
||||
<com.simplemobiletools.gallery.pro.views.MediaSideScroll
|
||||
android:id="@+id/video_brightness_controller"
|
||||
android:layout_width="@dimen/media_side_slider_width"
|
||||
android:layout_height="match_parent"/>
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/video_play_outline"
|
||||
|
@ -41,7 +40,7 @@
|
|||
android:layout_height="@dimen/play_outline_size_big"
|
||||
android:layout_centerInParent="true"
|
||||
android:padding="20dp"
|
||||
android:src="@drawable/ic_play_outline_vector"/>
|
||||
android:src="@drawable/ic_play_outline_vector" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/panorama_outline"
|
||||
|
@ -50,7 +49,7 @@
|
|||
android:layout_centerInParent="true"
|
||||
android:padding="20dp"
|
||||
android:src="@drawable/ic_panorama_outline"
|
||||
android:visibility="gone"/>
|
||||
android:visibility="gone" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/video_details"
|
||||
|
@ -59,14 +58,14 @@
|
|||
android:layout_alignParentStart="true"
|
||||
android:layout_marginLeft="@dimen/small_margin"
|
||||
android:layout_marginRight="@dimen/small_margin"
|
||||
android:background="@color/gradient_grey_start"
|
||||
android:background="@drawable/extended_details_background"
|
||||
android:padding="@dimen/small_margin"
|
||||
android:textColor="@color/theme_dark_text_color"
|
||||
android:textSize="@dimen/smaller_text_size"
|
||||
android:visibility="gone"
|
||||
tools:text="My video\nAnother line"/>
|
||||
tools:text="My video\nAnother line" />
|
||||
|
||||
<include layout="@layout/bottom_video_time_holder"/>
|
||||
<include layout="@layout/bottom_video_time_holder" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/slide_info"
|
||||
|
@ -83,6 +82,6 @@
|
|||
android:paddingRight="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/medium_margin"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="@dimen/extra_big_text_size"/>
|
||||
android:textSize="@dimen/extra_big_text_size" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 8.5 KiB |
|
@ -15,10 +15,6 @@
|
|||
<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="select_photo">تحديد صورة</string>
|
||||
<string name="volume">الصوت</string>
|
||||
<string name="brightness">السطوع</string>
|
||||
<string name="lock_orientation">قفل الاتجاه</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">لم يتم العثور علي أي وسائط لعرض الشرائح</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">تغيير نوع العرض</string>
|
||||
<string name="grid">الشبكة</string>
|
||||
<string name="list">القائمة</string>
|
||||
<string name="group_direct_subfolders">تجميع المجلدات الفرعية مباشرة</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">تجنب إظهار الملفات غير الصالحة</string>
|
||||
<string name="show_image_file_types">إظهار أنواع ملفات الصور</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">الصور المصغرة</string>
|
||||
|
@ -315,7 +315,7 @@
|
|||
|
||||
<!-- 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">المعرض البسيط الـ Pro - محرر ومدير الصور</string>
|
||||
<string name="app_title">المعرض البسيط (Pro) - محرر ومدير الصور</string>
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
<string name="app_short_description">أستعرض ذكرياتك دون أي انقطاع مع معرض الصور والفيديو هذا</string>
|
||||
<string name="app_long_description">
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Other folder</string>
|
||||
<string name="show_on_map">Show on map</string>
|
||||
<string name="unknown_location">Unknown location</string>
|
||||
<string name="increase_column_count">Increase column count</string>
|
||||
<string name="reduce_column_count">Reduce column count</string>
|
||||
<string name="change_cover_image">Change cover image</string>
|
||||
<string name="select_photo">Select photo</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Brightness</string>
|
||||
<string name="lock_orientation">Lock orientation</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">No media for the slideshow have been found</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Change view type</string>
|
||||
<string name="grid">Grid</string>
|
||||
<string name="list">List</string>
|
||||
<string name="group_direct_subfolders">Group direct subfolders</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">Avoid showing invalid files</string>
|
||||
<string name="show_image_file_types">Show image file types</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Un altre carpeta</string>
|
||||
<string name="show_on_map">Mostrar al mapa</string>
|
||||
<string name="unknown_location">Ubicació desconeguda</string>
|
||||
<string name="increase_column_count">Augmentar el número de columnes</string>
|
||||
<string name="reduce_column_count">Reduir el número de columnes</string>
|
||||
<string name="change_cover_image">Canviar imatge de portada</string>
|
||||
<string name="select_photo">Sel·leccionar imatge</string>
|
||||
<string name="volume">Volum</string>
|
||||
<string name="brightness">Brillantor</string>
|
||||
<string name="lock_orientation">Bloquejar orientació</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">No s’han trobat mitjans per a la presentació de diapositives</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Canviar el tipus de vista</string>
|
||||
<string name="grid">Reixeta</string>
|
||||
<string name="list">Llista</string>
|
||||
<string name="group_direct_subfolders">Agrupar carpetes directes</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -189,7 +182,14 @@
|
|||
<string name="compromise">Compromès</string>
|
||||
<string name="avoid_showing_invalid_files">Eviteu mostrar fitxers no vàlids</string>
|
||||
<string name="show_image_file_types">Mostra els tipus de fitxers d\’imatges</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="allow_zooming_videos">Permet fer zoom als vídeos amb dos cops</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniatures</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Jiná složka</string>
|
||||
<string name="show_on_map">Zobrazit na mapě</string>
|
||||
<string name="unknown_location">Neznámá poloha</string>
|
||||
<string name="increase_column_count">Zvýšit počet sloupců</string>
|
||||
<string name="reduce_column_count">Snížit počet sloupců</string>
|
||||
<string name="change_cover_image">Změnit obal alba</string>
|
||||
<string name="select_photo">Vybrat fotografii</string>
|
||||
<string name="volume">Hlasitost</string>
|
||||
<string name="brightness">Jas</string>
|
||||
<string name="lock_orientation">Uzamknout orientaci</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Nebyla nalezena žádná média pro prezentaci</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Změnit typ zobrazení</string>
|
||||
<string name="grid">Mřížka</string>
|
||||
<string name="list">Seznam</string>
|
||||
<string name="group_direct_subfolders">Sloučit přímé podsložky</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">Nezobrazovat neplatné soubory</string>
|
||||
<string name="show_image_file_types">Zobrazit typ obrázkových souborů</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Náhledy</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Anden mappe</string>
|
||||
<string name="show_on_map">Vis på kort</string>
|
||||
<string name="unknown_location">Ukendt placering</string>
|
||||
<string name="increase_column_count">Flere kolonner</string>
|
||||
<string name="reduce_column_count">Færre kolonner</string>
|
||||
<string name="change_cover_image">Skift cover-billede</string>
|
||||
<string name="select_photo">Vælg billede</string>
|
||||
<string name="volume">Lydstyrke</string>
|
||||
<string name="brightness">Lysstyrke</string>
|
||||
<string name="lock_orientation">Lås orientering</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Der blev ikke funket nogen mediefiler til slideshowet</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Skift visning</string>
|
||||
<string name="grid">Gitter</string>
|
||||
<string name="list">Liste</string>
|
||||
<string name="group_direct_subfolders">Gruppér direkte undermapper</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">Undgå at vise ugyldige filer</string>
|
||||
<string name="show_image_file_types">Vis billeders filtyper</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniaturer</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Ordner wählen</string>
|
||||
<string name="show_on_map">Auf Karte zeigen</string>
|
||||
<string name="unknown_location">Unbekannter Pfad</string>
|
||||
<string name="increase_column_count">Kacheln verkleinern</string>
|
||||
<string name="reduce_column_count">Kacheln vergrößern</string>
|
||||
<string name="change_cover_image">Coverbild ändern</string>
|
||||
<string name="select_photo">Auswählen</string>
|
||||
<string name="volume">Lautstärke</string>
|
||||
<string name="brightness">Helligkeit</string>
|
||||
<string name="lock_orientation">Bildausrichtung sperren</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Keine Medien für Diashow gefunden</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Darstellung ändern</string>
|
||||
<string name="grid">Gitternetz</string>
|
||||
<string name="list">Liste</string>
|
||||
<string name="group_direct_subfolders">Direkte Unterordner gruppieren</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">Das Anzeigen von ungültigen Dateien vermeiden</string>
|
||||
<string name="show_image_file_types">Bilddateitypen anzeigen</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
|
@ -318,7 +318,7 @@
|
|||
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
|
||||
<string name="app_title">Schlichte Galerie Pro - Foto Manager & Editor</string>
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
<string name="app_short_description">Bewahre deine Andenken ohne Unterbrechungen mit dieser Foto- und Videogalerie</string>
|
||||
<string name="app_short_description">Einfache und übersichtliche Galerie zur Verwaltung von Alben, Fotos, Videos</string>
|
||||
<string name="app_long_description">
|
||||
Schlichte Galerie Pro ist eine stark individualisierbare Offline Galerie. Ordne & bearbeite deine Fotos, stelle gelöschte Fotos mit Hilfe des Papierkorbs wieder her, schütze & verstecke Dateien und zeige eine Vielzahl von Bilder- & Videoformaten an, unter anderem RAW, SVG und viele mehr.
|
||||
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<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="select_photo">Επιλογή φωτογραφίας</string>
|
||||
<string name="volume">Ένταση</string>
|
||||
<string name="brightness">Φωτεινότητα</string>
|
||||
<string name="lock_orientation">Κλείδωμα προσανατολισμού</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Δεν βρέθηκαν πολυμέσα για την εμφάνιση διαφανειών</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Αλλαγή τύπου εμφάνισης</string>
|
||||
<string name="grid">Πλέγμα</string>
|
||||
<string name="list">Λίστα</string>
|
||||
<string name="group_direct_subfolders">Ομαδοποίηση υποφακέλων</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -189,7 +182,14 @@
|
|||
<string name="compromise">Συμβιβασμός</string>
|
||||
<string name="avoid_showing_invalid_files">Αποφυγή εμφάνισης μη έγκυρων αρχείων</string>
|
||||
<string name="show_image_file_types">Εμφάνιση τύπου αρχείου εικόνας</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="allow_zooming_videos">Επιτρέπει την μεγέθυνση βίντεο με διπλό πάτημα</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Εικονίδια</string>
|
||||
|
@ -318,9 +318,9 @@
|
|||
|
||||
<!-- 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">ΑΠΛΗ ΣΥΛΛΟΓΗ Pro - Διαχείριση & Επεξεργασία</string>
|
||||
<string name="app_title">Απλή Συλλογή Pro - Διαχείριση & Επεξεργασία</string>
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
<string name="app_short_description">Περιηγηθείτε στις αναμνήσεις σας χωρίς διακοπές με αυτήν τη συλλογή φωτό & βίντεο</string>
|
||||
<string name="app_short_description">Μια premium εφαρμογή διαχείρισης/επεξεργασίας φωτο βίντεο GIF χωρίς διαφημήσεις</string>
|
||||
<string name="app_long_description">
|
||||
Η Απλή Συλλογή Pro είναι χωρίς σύνδεση και εξαιρετικά προσαρμόσιμη. Οργανώστε και επεξεργαστείτε τις φωτογραφίες σας, ανακτήσετε διαγραμμένα αρχεία απο τον κάδο ανακύκλωσης, προστατεύσετε και αποκρύψτε αρχεία, προβάλετε πλήθος διαφορετικών φωτογραφιών και μορφών βίντεο, συμπεριλαμβανομένων των RAW, SVG και πολλών άλλων.
|
||||
|
||||
|
@ -356,7 +356,7 @@
|
|||
<b>ΥΠΟΣΤΗΡΙΞΗ ΠΟΛΛΩΝ ΤΥΠΩΝ ΑΡΧΕΙΩΝ</b>
|
||||
Σε αντίθεση με κάποιες άλλες εφαρμογές η Απλή Συλλογή Pro υποστηρίζει ένα τεράστιο φάσμα διαφορετικών τύπων αρχείων, όπως JPEG, PNG, MP4, MKV, RAW, SVG, Πανοραμικές φωτογραφίες, βίντεο πανοραμικών και πολλά άλλα.
|
||||
|
||||
<b>ΠΟΛΥ ΠΡΟΣΑΡΜΟΣΙΜΟΣ ΔΙΑΧΕΙΡΙΣΤΗΣ ΣΥΛΛΟΓΗΣ</b>
|
||||
<b>ΠΟΛΥ ΠΡΟΣΑΡΜΟΣΙΜΟΣ ΔΙΑΧΕΙΡΙΣΤΗΣ</b>
|
||||
Από το UI στα κουμπιά λειτουργιών στην κάτω γραμμή εργαλείων, η Απλή Συλλογή Pro είναι ιδιαίτερα προσαρμόσιμη και λειτουργεί όπως εσείς θέλετε. Καμιά άλλη εφαρμογή δεν έχει τέτοια ευελιξία! Χάρη στον ανοιχτό κώδικα, είναι επίσης διαθέσιμη σε 32 γλώσσες!
|
||||
|
||||
<b>ΕΠΑΝΑΦΟΡΑ ΔΙΑΓΡΑΜΜΕΝΩΝ ΦΩΤΟ ΚΑΙ ΒΙΝΤΕΟ</b>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Otra carpeta</string>
|
||||
<string name="show_on_map">Mostrar en el mapa</string>
|
||||
<string name="unknown_location">Ubicación desconocida</string>
|
||||
<string name="increase_column_count">Aumentar el número de columnas</string>
|
||||
<string name="reduce_column_count">Reducir el número de columnas</string>
|
||||
<string name="change_cover_image">Cambiar imagen de portada</string>
|
||||
<string name="select_photo">Seleccionar imagen</string>
|
||||
<string name="volume">Volumen</string>
|
||||
<string name="brightness">Brillo</string>
|
||||
<string name="lock_orientation">Bloquear orientación</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">No se han encontrado medios para la presentación de diapositivas</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Cambiar tipo de vista</string>
|
||||
<string name="grid">Cuadrícula</string>
|
||||
<string name="list">Lista</string>
|
||||
<string name="group_direct_subfolders">Agrupar subcarpetas directas</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -189,7 +182,14 @@
|
|||
<string name="compromise">Compromiso</string>
|
||||
<string name="avoid_showing_invalid_files">Evita mostrar archivos inválidos</string>
|
||||
<string name="show_image_file_types">Mostrar tipos de archivo de imagen</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="allow_zooming_videos">Permitir hacer zoom en videos con doble toque</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniaturas</string>
|
||||
|
@ -319,7 +319,7 @@
|
|||
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
|
||||
<string name="app_title">Simple Gallery Pro - Gestor y editor de fotos</string>
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
<string name="app_short_description">Explore sus recuerdos sin interrupciones con esta galeria de foto y vídeo</string>
|
||||
<string name="app_short_description">Galería rápida y segura para gestión profesional de fotos, vídeos y los GIFs</string>
|
||||
<string name="app_long_description">
|
||||
Simple Gallery Pro es una galería altamente personalizable disponible sin conexión. Organiza y edita tus fotos, recupera archivos eliminados con la papelera de reciclaje, protege y oculta archivos y mira una gran variedad de diferentes formatos de fotos y videos incluyendo RAW, SVG y muchos más.
|
||||
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Muu kansio</string>
|
||||
<string name="show_on_map">Näytä kartalla</string>
|
||||
<string name="unknown_location">Tuntematon sijainti</string>
|
||||
<string name="increase_column_count">Lisää sarakkeita</string>
|
||||
<string name="reduce_column_count">Vähennä sarakkeita</string>
|
||||
<string name="change_cover_image">Vaihda kansikuva</string>
|
||||
<string name="select_photo">Valitse kuva</string>
|
||||
<string name="volume">Äänenvoimakkuus</string>
|
||||
<string name="brightness">Kirkkaus</string>
|
||||
<string name="lock_orientation">Lukitse näytönkierto</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Mediaa diaesitykseen ei löytynyt</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Vaihda näkymää</string>
|
||||
<string name="grid">Ruudukko</string>
|
||||
<string name="list">Lista</string>
|
||||
<string name="group_direct_subfolders">Group direct subfolders</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">Avoid showing invalid files</string>
|
||||
<string name="show_image_file_types">Show image file types</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Esikatselukuvat</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Autre dossier</string>
|
||||
<string name="show_on_map">Afficher sur la carte</string>
|
||||
<string name="unknown_location">Position inconnue</string>
|
||||
<string name="increase_column_count">Ajouter une colonne</string>
|
||||
<string name="reduce_column_count">Supprimer une colonne</string>
|
||||
<string name="change_cover_image">Changer l\'image du dossier</string>
|
||||
<string name="select_photo">Choisir une image</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Luminosité</string>
|
||||
<string name="lock_orientation">Verrouiller la rotation</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Aucun média trouvé pour le diaporama</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Changer de mode d\'affichage</string>
|
||||
<string name="grid">Grille</string>
|
||||
<string name="list">Liste</string>
|
||||
<string name="group_direct_subfolders">Mode sous-dossiers</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -189,7 +182,14 @@
|
|||
<string name="compromise">Compromis</string>
|
||||
<string name="avoid_showing_invalid_files">Éviter l\'affichage de fichiers invalides</string>
|
||||
<string name="show_image_file_types">Afficher les types d\'image</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="allow_zooming_videos">Zoomer les vidéos par un double appui</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniatures</string>
|
||||
|
|
|
@ -11,18 +11,14 @@
|
|||
<string name="pin_to_the_top">Fixar arriba</string>
|
||||
<string name="show_all">Mostrar o contido de todos os cartafoles</string>
|
||||
<string name="all_folders">Todos os cartafoles</string>
|
||||
<string name="folder_view">Mudar a vista por cartafol</string>
|
||||
<string name="folder_view">Mudar á vista por cartafol</string>
|
||||
<string name="other_folder">Outro cartafol</string>
|
||||
<string name="show_on_map">Mostrar no mapa</string>
|
||||
<string name="unknown_location">Localización descoñecida</string>
|
||||
<string name="increase_column_count">Aumente o número de columnas</string>
|
||||
<string name="reduce_column_count">Reduza o número de columnas</string>
|
||||
<string name="change_cover_image">Cambiar a imaxe de portada</string>
|
||||
<string name="select_photo">Escolla foto</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Brillo</string>
|
||||
<string name="lock_orientation">Fixar orientación</string>
|
||||
<string name="unlock_orientation">Desbloquear orientación</string>
|
||||
<string name="unlock_orientation"> Non fixar orientación</string>
|
||||
<string name="change_orientation">Cambiar orientación</string>
|
||||
<string name="force_portrait">Forzar retrato</string>
|
||||
<string name="force_landscape">Forzar paisaxe</string>
|
||||
|
@ -31,9 +27,9 @@
|
|||
<string name="fixing">Arranxando…</string>
|
||||
<string name="dates_fixed_successfully">Datas arranxadas con éxito</string>
|
||||
<string name="no_date_takens_found">Non se atoparon valores de Datas de Captura</string>
|
||||
<string name="share_resized">Comparta unha versión reducida</string>
|
||||
<string name="upgraded_from_free">Ola,\n\nsemella que actualizou desde a vella aplicación gratuita. Pode desinstalar a versión vella, que ten un botón \'Upgrade to Pro\' enriba da pantalla de configuración.\n\nSo terá os elementos borrados da Papeleira de reciclaxe, os elementos favoritos sen marcar e tamén terá que reiniciar os Axustes.\n\nGrazas!</string>
|
||||
<string name="switch_to_file_search">Cambiar á procura de ficheiros en todolos cartafoles visibles.</string>
|
||||
<string name="share_resized">Comparte unha versión reducida</string>
|
||||
<string name="upgraded_from_free">Ola,\n\nsemella que actualizaches desde o vello aplicativo gratuito. Podes desinstalar a versión vella, que ten un botón \'Mellorar a Pro\' enriba da pantalla de configuración.\n\nSo terás os elementos borrados da Papeleira de reciclaxe, os elementos favoritos sen marcar e tamén terás que reiniciar os Axustes.\n\nGrazas!</string>
|
||||
<string name="switch_to_file_search">Cambiar á procura de ficheiros en todos os cartafoles visibles.</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filtrar medios</string>
|
||||
|
@ -43,29 +39,29 @@
|
|||
<string name="raw_images">Imaxes RAW</string>
|
||||
<string name="svgs">SVGs</string>
|
||||
<string name="portraits">Retratos</string>
|
||||
<string name="no_media_with_filters">Non se atoparon medios dos indicados polo filtro.</string>
|
||||
<string name="no_media_with_filters">Non se atopou multimedia do tipo indicado polo filtro.</string>
|
||||
<string name="change_filters_underlined"><u>Cambiar filtro</u></string>
|
||||
|
||||
<!-- Hide / Exclude -->
|
||||
<string name="hide_folder_description">Esta función oculta o cartafol engadindolle ficheiro \'.nomedia\', tamén ocultará os subcartafoles. Pode velos pulsando a opción \'Mostrar elementos ocultos\' nos Axustes. Continuar?</string>
|
||||
<string name="hide_folder_description">Esta función oculta o cartafol engadíndolle ficheiro \'.nomedia\', tamén ocultará os subcartafoles. Podes velos pulsando a opción \'Mostrar elementos ocultos\' nos Axustes. Continuar?</string>
|
||||
<string name="exclude">Excluír</string>
|
||||
<string name="excluded_folders">Cartafoles excluídos</string>
|
||||
<string name="manage_excluded_folders">Xestionar cartafoles excluídos</string>
|
||||
<string name="exclude_folder_description">Esto ocultará a selección xunto cos seus subcartafoles son en Simple Gallery. Pode xestionar os cartafoles ocultos en Axustes.</string>
|
||||
<string name="exclude_folder_description">Isto ocultará a selección xunto cos seus subcartafoles só en Simple Gallery. Podes xestionar os cartafoles ocultos en Axustes.</string>
|
||||
<string name="exclude_folder_parent">Excluír o cartafol pai no seu lugar?</string>
|
||||
<string name="excluded_activity_placeholder">Excluír un cartafol xunto cos subcartafoles só terá efecto en Simple Gallery, seguirán sendo visibles en outros aplicativos.\n\nSi tamén quere excluílos en outros aplicativos, utilice a opción Agochar.</string>
|
||||
<string name="excluded_activity_placeholder">Excluír un cartafol xunto cos subcartafoles só terá efecto en Simple Gallery, seguirán sendo visibles noutros aplicativos.\n\nSe tamén queres excluílos noutros aplicativos, utiliza a opción Agochar.</string>
|
||||
<string name="remove_all">Eliminar todos</string>
|
||||
<string name="remove_all_description">Eliminar todos os cartafoles da lista de excluídos? Esto non borrará os cartafoles.</string>
|
||||
<string name="remove_all_description">Eliminar todos os cartafoles da lista de excluídos? Isto non borrará os cartafoles.</string>
|
||||
<string name="hidden_folders">Cartafoles ocultos</string>
|
||||
<string name="manage_hidden_folders">Xestionar cartafoles ocultos</string>
|
||||
<string name="hidden_folders_placeholder">Semella que non ten ningún cartafol oculto con un ficheiro \".nomedia\".</string>
|
||||
<string name="hidden_folders_placeholder">Semella que non tes ningún cartafol oculto cun ficheiro \".nomedia\".</string>
|
||||
|
||||
<!-- Include folders -->
|
||||
<string name="include_folders">Cartafoles incluídos</string>
|
||||
<string name="manage_included_folders">Xestionar cartafoles incluídos</string>
|
||||
<string name="add_folder">Engadir cartafol</string>
|
||||
<string name="included_activity_placeholder">Si ten algún cartafol con medios, mais non foi recoñecido polo aplicativo, pódeo engadir manualmente.\n\nEngadindo aquí elementos non eliminará outros.</string>
|
||||
<string name="no_media_add_included">Non se atopou ningún ficheiro audiovisual. Pode solucionalo engadindo manualmente algúns cartafoles con eses ficheiros.</string>
|
||||
<string name="included_activity_placeholder">Se tes algún cartafol con medios, mais non foi recoñecido polo aplicativo, pódelo engadir manualmente.\n\nEngadindo aquí elementos non eliminarás outros.</string>
|
||||
<string name="no_media_add_included">Non se atopou ningún ficheiro multimedia. Podes solucionalo engadindo manualmente algúns cartafoles con eses ficheiros.</string>
|
||||
|
||||
<!-- Resizing -->
|
||||
<string name="resize">Redimensionar</string>
|
||||
|
@ -73,19 +69,19 @@
|
|||
<string name="width">Ancho</string>
|
||||
<string name="height">Alto</string>
|
||||
<string name="keep_aspect_ratio">Manter proporcións</string>
|
||||
<string name="invalid_values">Por favor introduza unha resolución válida</string>
|
||||
<string name="invalid_values">Por favor escribe unha resolución válida</string>
|
||||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Editor</string>
|
||||
<string name="rotate">Rotar</string>
|
||||
<string name="invalid_image_path">Ruta a imaxe non válida</string>
|
||||
<string name="invalid_image_path">Ruta á imaxe non válida</string>
|
||||
<string name="image_editing_failed">Fallo na edición da imaxe</string>
|
||||
<string name="image_editing_cancelled">Cancelouse a edición da imaxe</string>
|
||||
<string name="file_edited_successfully">Ficheiro editado con éxito</string>
|
||||
<string name="file_edited_successfully">Ficheiro editado correctamente</string>
|
||||
<string name="edit_image_with">Editar imaxe con:</string>
|
||||
<string name="no_editor_found">Non se atopou ningún editor</string>
|
||||
<string name="unknown_file_location">Localización do ficheiro descoñecida</string>
|
||||
<string name="error_saving_file">Non se puido sobreescribir o ficheiro</string>
|
||||
<string name="error_saving_file">Non se puido sobrescribir o ficheiro</string>
|
||||
<string name="rotate_left">Rotar a esquerda</string>
|
||||
<string name="rotate_right">Rotar a dereita</string>
|
||||
<string name="rotate_one_eighty">Rotar 180º</string>
|
||||
|
@ -118,16 +114,13 @@
|
|||
<string name="move_backwards">Mover atrás</string>
|
||||
<string name="loop_slideshow">Reproducir en bucle</string>
|
||||
<string name="animation">Animación</string>
|
||||
<string name="no_animation">Nengún</string>
|
||||
<string name="no_animation">Ningún</string>
|
||||
<string name="fade">Esvaecemento</string>
|
||||
<string name="slide">Deslizamento</string>
|
||||
<string name="slideshow_ended">Rematou a presentación</string>
|
||||
<string name="no_media_for_slideshow">Non se atoparon medios para a presentación</string>
|
||||
<string name="no_media_for_slideshow">Non se atopou multimedia para a presentación</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Cambiar o tipo de vista</string>
|
||||
<string name="grid">Grella</string>
|
||||
<string name="list">Lista</string>
|
||||
<string name="group_direct_subfolders">Agrupar subcartafoles directos</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -142,60 +135,67 @@
|
|||
<string name="by_date_taken_monthly">Data de captura (mensual)</string>
|
||||
<string name="by_file_type">Tipo de ficheiro</string>
|
||||
<string name="by_extension">Extensión</string>
|
||||
<string name="grouping_and_sorting">Por favor, teña en conta que agrupar e ordenar son dous campos diferentes</string>
|
||||
<string name="grouping_and_sorting">Por favor, ten en conta que agrupar e ordenar son dous campos diferentes</string>
|
||||
|
||||
<!-- Widgets -->
|
||||
<string name="folder_on_widget">Cartafol a mostrar no widget:</string>
|
||||
<string name="show_folder_name">Amosar nome de cartafol</string>
|
||||
<string name="show_folder_name">Mostrar nome de cartafol</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="autoplay_videos">Reproducir vídeos automticamente</string>
|
||||
<string name="autoplay_videos">Reproducir vídeos automáticamente</string>
|
||||
<string name="remember_last_video_position">Lembrar a posición do vídeo na última vez</string>
|
||||
<string name="toggle_filename">Mudar a visibilidade do ficheiro</string>
|
||||
<string name="loop_videos">videos en bucle</string>
|
||||
<string name="loop_videos">Víeos en bucle</string>
|
||||
<string name="animate_gifs">Animar os GIFs na icona</string>
|
||||
<string name="max_brightness">Brillo ao máximo cando mire medios</string>
|
||||
<string name="crop_thumbnails">Recortar iconas a cadrados</string>
|
||||
<string name="show_thumbnail_video_duration">Amosar a duración dos vídeos</string>
|
||||
<string name="show_thumbnail_video_duration">Mostrar a duración dos vídeos</string>
|
||||
<string name="screen_rotation_by">Rotar medios a pantalla completa a</string>
|
||||
<string name="screen_rotation_system_setting">Axuste do sistema</string>
|
||||
<string name="screen_rotation_system_setting">Axuste ao sistema</string>
|
||||
<string name="screen_rotation_device_rotation">Rotación do dispositivo</string>
|
||||
<string name="screen_rotation_aspect_ratio">Relación de aspecto</string>
|
||||
<string name="black_background_at_fullscreen">Fondo negro e barra de estado en reprodución a pantalla completa</string>
|
||||
<string name="scroll_thumbnails_horizontally">Desplazar iconas horizontalmente</string>
|
||||
<string name="scroll_thumbnails_horizontally">Desprazar iconas horizontalmente</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Agochar controis do sistema cando visualice a pantalla completa</string>
|
||||
<string name="delete_empty_folders">Borrar cartafoles baldeiros cando elmine o seu contido</string>
|
||||
<string name="delete_empty_folders">Borrar cartafoles baleiros cando elmine oseu contido</string>
|
||||
<string name="allow_photo_gestures">Permitir controlar o brillo da foto con xestos verticais</string>
|
||||
<string name="allow_video_gestures">Permitir controlar o volume do vídeo e o brillo con xestos verticáis</string>
|
||||
<string name="allow_video_gestures">Permitir controlar o volume do vídeo e o brillo con xestos verticais</string>
|
||||
<string name="show_media_count">Mostrar a conta de medios do cartafol na vista principal</string>
|
||||
<string name="show_extended_details">Mostrar información pormenorizada sobre medios a pantalla completa</string>
|
||||
<string name="manage_extended_details">Xestionar información polo miúdo</string>
|
||||
<string name="one_finger_zoom">Permitir zoom con un dedo a pantalla completa</string>
|
||||
<string name="allow_instant_change">Permitir o cambio instantáneo de medios pulsando nos lados da pantalla</string>
|
||||
<string name="one_finger_zoom">Permitir zoom cun dedo a pantalla completa</string>
|
||||
<string name="allow_instant_change">Permitir o cambio instantáneo de medios premendo os lados da pantalla</string>
|
||||
<string name="allow_deep_zooming_images">Permitir ampliar moito as imaxes</string>
|
||||
<string name="hide_extended_details">Agochar detalles extendidos cando a barra de estado está oculta</string>
|
||||
<string name="show_at_bottom">Mostrar botóns para accións na parte baixa da pantalla</string>
|
||||
<string name="show_recycle_bin">Mostrar a Papeleira de Reciclaxe na pantalla de cartafoles</string>
|
||||
<string name="show_recycle_bin">Mostrar a Papeleira na pantalla de cartafoles</string>
|
||||
<string name="deep_zoomable_images">Imaxes con moita ampliación</string>
|
||||
<string name="show_highest_quality">Mostrar imaxes na súa máxima calidade</string>
|
||||
<string name="show_recycle_bin_last">Mostrar a Papeleira de Reciclaxe como no derradeiro posto da pantalla principal</string>
|
||||
<string name="show_recycle_bin_last">Mostrar a Papeleira no derradeiro posto da pantalla principal</string>
|
||||
<string name="allow_down_gesture">Permitir pechar a visualización en pantalla completa deslizando cara abaixo</string>
|
||||
<string name="allow_one_to_one_zoom">Permitir ampliar a 1:1 con dous toques</string>
|
||||
<string name="open_videos_on_separate_screen">Abrir sempre os vídeos nunha pantalla diferente con novos xestos horizontais</string>
|
||||
<string name="show_notch">Mostrar unha marca se a houbera</string>
|
||||
<string name="show_notch">Mostrar unha marca se a houbese</string>
|
||||
<string name="allow_rotating_gestures">Permitir rotar unha imaxe con xestos</string>
|
||||
<string name="file_loading_priority">Prioridade de carga de ficheiro</string>
|
||||
<string name="speed">Velocidade</string>
|
||||
<string name="compromise">Compromiso</string>
|
||||
<string name="avoid_showing_invalid_files">Non mostrar ficheiros inválidos</string>
|
||||
<string name="avoid_showing_invalid_files">Non mostrar ficheiros non válidos</string>
|
||||
<string name="show_image_file_types">Mostrar tipos de ficheiros de imaxe</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="allow_zooming_videos">Permitir zoom nos vídeos co dobre-toque sobre eles</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Iconas</string>
|
||||
<string name="fullscreen_media">Medios a pantalla completa</string>
|
||||
<string name="extended_details">Detalles ampliados</string>
|
||||
<string name="bottom_actions">Actions do fondo</string>
|
||||
<string name="bottom_actions">Accións do fondo</string>
|
||||
|
||||
<!-- Bottom actions -->
|
||||
<string name="manage_bottom_actions">Xestionar accións visibles do fondo</string>
|
||||
|
@ -208,7 +208,7 @@
|
|||
<string name="pesdk_transform_button_squareCrop">Cadrado</string>
|
||||
<string name="pesdk_transform_title_name">Transformar</string>
|
||||
<string name="pesdk_filter_title_name">Filtrar</string>
|
||||
<string name="pesdk_filter_asset_none">Nengún</string>
|
||||
<string name="pesdk_filter_asset_none">Ningún</string>
|
||||
<string name="pesdk_adjustments_title_name">Axustar</string>
|
||||
<string name="pesdk_adjustments_button_shadowTool">Sombras</string>
|
||||
<string name="pesdk_adjustments_button_exposureTool">Exposición</string>
|
||||
|
@ -223,8 +223,8 @@
|
|||
<string name="pesdk_adjustments_button_temperatureTool">Temperatura</string>
|
||||
<string name="pesdk_adjustments_button_sharpnessTool">Nitidez</string>
|
||||
<string name="pesdk_adjustments_button_reset">Reiniciar</string>
|
||||
<string name="pesdk_focus_title_name">Foco</string>
|
||||
<string name="pesdk_focus_title_disabled">Nengún</string>
|
||||
<string name="pesdk_focus_title_name">Enfoque</string>
|
||||
<string name="pesdk_focus_title_disabled">Ningún</string>
|
||||
<string name="pesdk_focus_button_radial">Radial</string>
|
||||
<string name="pesdk_focus_button_linear">Lineal</string>
|
||||
<string name="pesdk_focus_button_mirrored">Reflectir</string>
|
||||
|
@ -238,21 +238,21 @@
|
|||
<string name="pesdk_text_button_straighten">Endereitar</string>
|
||||
<string name="pesdk_text_button_font">Fonte</string>
|
||||
<string name="pesdk_text_button_color">Cor</string>
|
||||
<string name="pesdk_text_button_backgroundColor">Color Fondo</string>
|
||||
<string name="pesdk_text_button_alignment">Aliñamento</string>
|
||||
<string name="pesdk_text_button_bringToFront">Á Front</string>
|
||||
<string name="pesdk_text_button_backgroundColor">Cor Fondo</string>
|
||||
<string name="pesdk_text_button_alignment">Alineamento</string>
|
||||
<string name="pesdk_text_button_bringToFront">Á Fronte</string>
|
||||
<string name="pesdk_text_button_delete">Borrar</string>
|
||||
<string name="pesdk_text_text_editTextPlaceholder">Seu texto</string>
|
||||
<string name="pesdk_text_text_editTextPlaceholder">O teu texto</string>
|
||||
<string name="pesdk_brush_title_name">Pincel</string>
|
||||
<string name="pesdk_brush_button_color">Cor</string>
|
||||
<string name="pesdk_brush_button_size">Tamaño</string>
|
||||
<string name="pesdk_brush_button_hardness">Dureza</string>
|
||||
<string name="pesdk_brush_button_bringToFront">Á Front</string>
|
||||
<string name="pesdk_brush_button_bringToFront">Á Fronte</string>
|
||||
<string name="pesdk_brush_button_delete">Borrar</string>
|
||||
<string name="pesdk_brush_title_brushColor">Cor do Pincel</string>
|
||||
<string name="pesdk_editor_title_name">Editor</string>
|
||||
<string name="pesdk_editor_title_closeEditorAlert">Pechar o Editor?</string>
|
||||
<string name="pesdk_editor_text_closeEditorAlert">Ten a certeza de desbotar a imaxe?</string>
|
||||
<string name="pesdk_editor_text_closeEditorAlert">Tes a certeza de desbotar a imaxe?</string>
|
||||
<string name="pesdk_editor_button_closeEditorAlertConfirmation">Si</string>
|
||||
<string name="pesdk_editor_button_closeEditorAlertCancelation">Non</string>
|
||||
<string name="pesdk_editor_cancel">Cancelar</string>
|
||||
|
@ -280,94 +280,93 @@
|
|||
<string name="pesdk_common_title_yellowColor">Amarelo</string>
|
||||
<string name="pesdk_common_title_oliveColor">Verde oliva</string>
|
||||
<string name="pesdk_common_title_greenColor">Verde</string>
|
||||
<string name="pesdk_common_title_aquamarinColor">Aquamarin</string>
|
||||
<string name="pesdk_common_title_pipettableColor">Pipettable color</string>
|
||||
<string name="pesdk_common_title_aquamarinColor">Augamariña</string>
|
||||
<string name="pesdk_common_title_pipettableColor">Escoller coa pipeta</string>
|
||||
|
||||
<!-- FAQ -->
|
||||
<string name="faq_1_title">Cómo podo facer que Simple Gallery sexa a galería por omisión no dispositivo?</string>
|
||||
<string name="faq_1_text">Primeiro debe atopar a galería por omsión actual na sección de App nos axustes do dispositivo, buscar un botón que diga algo como \"Abrir por omisión\", pulsalo e despois seleccionar \"Limpar por omisión\".
|
||||
A próxima vez que intente abrir unha imaxe ou vídeo aparecerá un selector de aplicativos onde pode escoller Simple Gallery e facela o aplicativo por omisión.</string>
|
||||
<string name="faq_2_title">Asegurei o aplicativo con un contrasinal, pero esquecino. Qué podo facer?</string>
|
||||
<string name="faq_2_text">Pode solucionado de dous xeitos. Ou ben reinstalar o aplicativo ou buscar o aplicativo nos axustes do dispositivo e escoller \"Limpar datos\". Restablecerá todos os seus axustes, mais non eliminará ficheiros de medios.</string>
|
||||
<string name="faq_3_title">Cómo podo facer que un álbume apareza sempre arriba de todo?</string>
|
||||
<string name="faq_3_text">Pode manter premido o álbume e escoller a icona de Fixar no menú de accións, esto fixarao arriba. Pode fixar varios cartafoles tambén, os elementos fixados estarán ordenados polo criterio por omisión.</string>
|
||||
<string name="faq_4_title">Cómo podo aumentar a velocidade de reprodución de vídeo?</string>
|
||||
<string name="faq_1_title">Como podo facer que Simple Gallery sexa a galería por defecto no meu dispositivo?</string>
|
||||
<string name="faq_1_text">Primeiro debes atopar a galería por omisión actual na sección de App nos axustes do dispositivo, buscar un botón que diga algo como \"Abrir por omisión\", pulsalo e despois seleccionar \"Limpar por omisión\".
|
||||
A próxima vez que intentes abrir unha imaxe ou vídeo aparecerá un selector de aplicativos onde podes escoller Simple Gallery e facela a aplicativo por defecto/n.</string>
|
||||
<string name="faq_2_title">Asegurei o aplicativo cun contrasinal, pero esquecino. Que podo facer?</string>
|
||||
<string name="faq_2_text">Pode solucionado de dous xeitos. Ou ben reinstalar o aplicativo ou buscar o aplicativo os axustes do dispositivo e escoller \"Limpar datos\". Restablecerá todos os seus axustes, mais non eliminará ficheiros de medios.</string>
|
||||
<string name="faq_3_title">Como podo facer que un álbum apareza sempre arriba de todo?</string>
|
||||
<string name="faq_3_text">Pode manter premido o álbum e escoller a icona de Fixar no menú de accións, isto fixarao arriba. Pode fixar varios cartafoles tamén, os elementos fixados estarán ordenados polo criterio por omisión.</string>
|
||||
<string name="faq_4_title">Como podo aumentar a velocidade de reprodución do vídeo?</string>
|
||||
<string name="faq_4_text">Pode facelo tocando dúas veces o lateral da pantalla, ou tocando os textos de duración máxima ou actual preto da barra de avance. Se activa abrir os vídeos nunha pantalla separada, tamén pode usar xestos horizontais.</string>
|
||||
<string name="faq_5_title">Cal é a diferenza entre agochar e excluír un cartafol?</string>
|
||||
<string name="faq_5_text">A Exclusión prevén que se mostre o cartafol só en Simple Gallery, mentras Agochar funciona para todo o sistema e agocha o cartafol para outras galerías tamén. Esto funciona creando un ficheiro baldeiro de nome \".nomedia\" no cartafol, que tamén pode quitar con calquer xestor de ficheiros. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads.</string>
|
||||
<string name="faq_6_title">Por qué aparecen cartafoles de música con portadas ou pegatinas?</string>
|
||||
<string name="faq_5_text">A exclusión prevén que se mostre o cartafol só en Simple Gallery, mentras Agochar funciona para todo o sistema e agocha o cartafol para outras galerías tamén. Esto funciona creando un ficheiro baldeiro de nome \".nomedia\" no cartafol, que tamén pode quitar con calquera xestor de ficheiros.Teña en conta que algúns dispositivos non permiten cartafoles agochados como Cámara, Capturas de pantalla e Descargas.</string>
|
||||
<string name="faq_6_title">Por que aparecen cartafoles de música con portadas ou pegatinas?</string>
|
||||
<string name="faq_6_text">Pode acontecer que vexa que aparecen álbumes raros. Pode excluílos con facilidade mantendo premidos e escollendo Excluír. No seguinte diálogo pode escoller o cartafol pai, esto probablemente agoche outros álbumes relacionados.</string>
|
||||
<string name="faq_7_title">Un cartafol con imaxes non aparece, qué podo facer? </string>
|
||||
<string name="faq_7_text">Esto pode acontecer por varias razóns, pero é doado resolvelo. Vaia a Axustes -> xestionar cartafoles incluídos, escolle o Máis e navegar ate o cartafol requerido.</string>
|
||||
<string name="faq_8_title">E qué pasa si só quero que sexan visibles certos cartafoles</string>
|
||||
<string name="faq_8_text">Engadir un cartafol a Cartafoles incluídos non exclúe nada de xeito automático. O que pode facer é ir a Axustes -> Xestionar cartafoles incluídos, excluír o cartafol root \"/\", e despóis engadir os cartafoles desexados con Axustes -> Xestionar Cartafoles Incluídos.
|
||||
Esto fará visibles só aos cartafoles escollidos, como tanto excluír e incluír son recursivos e si está excluído e logo incluído, será mostrado.</string>
|
||||
<string name="faq_10_title">Podo recortar imaxes con esta aplicación?</string>
|
||||
<string name="faq_7_title">Un cartafol con imaxes non aparece, que podo facer? </string>
|
||||
<string name="faq_7_text">Isto pode acontecer por varias razóns, pero é doado resolvelo. Vaia a Axustes -> xestionar cartafoles incluídos, escolle o Máis e navegar ate o cartafol requerido.</string>
|
||||
<string name="faq_8_title">E que pasa se só quero que sexan visibles certos cartafoles</string>
|
||||
<string name="faq_8_text">Engadir un cartafol a Cartafoles incluídos non exclúe nada de xeito automático. O que pode facer é ir a Axustes -> Xestionar cartafoles incluídos, excluír o cartafol root \"/\", e despois engadir os cartafoles desexados con Axustes -> Xestionar Cartafoles Incluídos.
|
||||
Isto fará visibles só aos cartafoles escollidos, como tanto excluír e incluír son recursivos e si está excluído e logo incluído, será mostrado.</string>
|
||||
<string name="faq_10_title">Podo recortar imaxes con este aplciativo?</string>
|
||||
<string name="faq_10_text">Si, pode recortar imaxes no editor, arrastrando as esquinas das imaxes. Pode chegar ao editor tanto presionando na imaxe durante un anaco e seleccionando Editar, ou seleccionando Editar dende a vista de pantalla completa.</string>
|
||||
<string name="faq_11_title">Podo agrupar as iconas de algún xeito?</string>
|
||||
<string name="faq_11_title">Podo agrupar as iconas dalgún xeito?</string>
|
||||
<string name="faq_11_text">Claro, use no menu \"Agrupar por\" na vista de iconas. Pode facelo por múltiples criterios, incluindo a data de captura. Se usa a función \"Mostrar o contido dos cartafoles\", tamén pode agruparlos por cartafoles.</string>
|
||||
<string name="faq_12_title">Semella que Ordenar por Data non está a funcionar, como o amaño?</string>
|
||||
<string name="faq_12_text">Seguramente foi causa de copiar os ficheiros de algures. Pode amañalo seleccionando as iconas e \"Arranxar o valor da Data de Captura\".</string>
|
||||
<string name="faq_12_text">Seguramente foi causa de copiar os ficheiros de algures. Podes amañalo seleccionando as iconas e \"Arranxar o valor da Data de Captura\".</string>
|
||||
<string name="faq_13_title">Vexo bandas de cor nas imaxes. Como podo mellorar a súa calidade?</string>
|
||||
<string name="faq_13_text">A solución actual de mostra das imaxes funciona ben na maioría dos casos, pero se desexa unha calidade maior, active \"Mostrar imaxes na máxima calidade posible\" na configuración, na sección \"Imaxes con moita ampliación\".</string>
|
||||
<string name="faq_14_title">Teño un ficheiro ou cartafol oculto. Como o amoso?</string>
|
||||
<string name="faq_14_title">Teño un ficheiro ou cartafol oculto. Como o amoso?</string>
|
||||
<string name="faq_14_text">Pode ou ben activar \"Mostrar temporalmente ficheiros agochados\" no menu principal, ou activar \"Amosar obxectos ocultos\" na configuración. Se quere amosalo sempre, pode presionar uns intres e seleccionar \"Amosar\". Os cartafoles agóchanse engadindo un ficheiro oculto \".nomedia\" no seu interior; tamén pode borrar ese ficheiro con calquera xestor de ficheiros.</string>
|
||||
<string name="faq_15_title">Por que consume tanto espacio esta aplicación?</string>
|
||||
<string name="faq_15_text">Os ficheiros temporais poden chegar aos 250MB e server para cargar máis rápido. Se a aplicación está a consumir máis espazo, o máis probable é que teña ficheiros nam Papeleira de Reciclaxe. Estes ficheiros contan no tamaño da aplicación. Pode baleirala abríndoa e borrando os ficheiros, ou dende a configuración. Cada ficheiro da Papeleira bórrase automáticamente tras 30 días.</string>
|
||||
|
||||
<string name="faq_15_title">Por que consume tanto espacio este aplicativo?</string>
|
||||
<string name="faq_15_text">Os ficheiros temporais poden chegar aos 250MB e server para cargar máis rápido. Se o aplicativo está a a consumir máis espazo, o máis probable é que teña ficheiros na Papeleira de Reciclaxe.Estes ficheiros contan no tamaño da aplicación.Podes baleirala abríndoa e borrando os ficheiros, ou desde a configuración.Cada ficheiro da Papeleira bórrase automáticamente tras 30 días.</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">Simple Gallery Pro - Photo Manager & Editor</string>
|
||||
<string name="app_title">Simple Gallery Pro - Xestor e Editor de fotos</string>
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
<string name="app_short_description">Browse your memories without any interruptions with this photo and video gallery</string>
|
||||
<string name="app_short_description">Busca nos recordos sen interrupcións na galería de fotos e vídeo</string>
|
||||
<string name="app_long_description">
|
||||
Simple Gallery Pro is a highly customizable offline gallery. Organize & edit your photos, recover deleted files with the recycle bin, protect & hide files and view a huge variety of different photo & video formats including RAW, SVG and much more.
|
||||
Simple Gallery Pro unha galería altamente personalizable. Organiza & edita as túas fotos, recupera ficheiros borrados desde a papeleira, protexe & oculta ficheiros e visualiza gran número de formatos de fotos & vídeo incluíndo RAW, SVG e moitos máis.
|
||||
|
||||
The app contains no ads and unnecessary permissions. As the app doesn’t require internet access either, your privacy is protected.
|
||||
O app non ten publicidade nin permisos innesarios. Como tampouco require acceso a internet, a túa privacidade está protexida.
|
||||
|
||||
-------------------------------------------------
|
||||
<b>SIMPLE GALLERY PRO – FEATURES</b>
|
||||
<b>SIMPLE GALLERY PRO – Características</b>
|
||||
-------------------------------------------------
|
||||
|
||||
• Offline gallery with no ads or popups
|
||||
• Simple gallery photo editor – crop, rotate, resize, draw, filters & more
|
||||
• No internet access needed, giving you more privacy and security
|
||||
• No unnecessary permissions required
|
||||
• Quickly search images, videos & files
|
||||
• Open & view many different photo and video types (RAW, SVG, panoramic etc)
|
||||
• A variety of intuitive gestures to easily edit & organize files
|
||||
• Lots of ways to filter, group & sort files
|
||||
• Customize the appearance of Simple Gallery Pro
|
||||
• Available in 32 languages
|
||||
• Mark files as favorites for quick access
|
||||
• Protect your photos & videos with a pattern, pin or fingerprint
|
||||
• Use pin, pattern & fingerprint to protect the app launch or specific functions too
|
||||
• Recover deleted photos & videos from the recycle bin
|
||||
• Toggle visibility of files to hide photos & videos
|
||||
• Create a customizable slideshow of your files
|
||||
• View detailed information of your files (resolution, EXIF values etc)
|
||||
• Simple Gallery Pro is open source
|
||||
… and much much more!
|
||||
• Galería sen conexión a internet, publicidade nin ventás emerxentes
|
||||
• Editor de fotos Simple gallery – recorta, rota, cambia tamaño, debuxa, fitros, e máis
|
||||
• Non precisa acceso a internet, dándoche máis seguridade e privacidade
|
||||
• Non pide permisos innecesarios
|
||||
• Busca rápida de ficheiros de foto e vídeo
|
||||
• Abre e visualiza gran cantidade de formatos (RAW, SVG, panoramic etc)
|
||||
• Xestos intuitivos para editar e organizar os ficheiros
|
||||
• Múltiples filtros, agrupamento e orde dos ficheiros
|
||||
• Personaliza o aspecto de Simple Gallery Pro
|
||||
• Dispoñible en 32 idiomas
|
||||
• Marca ficheiros como favoritos para acceso rápido
|
||||
• Protexe fotos e vídeos cun patrón, PIN ou impresión dixital
|
||||
• Usa PIN, patrón e impresión dixital para protexer a apertura do app ou indicar funcións específicas
|
||||
• Recupera fotos e vídeos borrados desde a papeleira
|
||||
• Cambia a visibilidade dos ficheiros para ocultar fotos e vídeos
|
||||
• Crea presentacións personalizadas cos teus ficheiros
|
||||
• Mira a información detalladas dos ficheiros (resolución, valores EXIF etc)
|
||||
• Simple Gallery Pro é código aberto
|
||||
… e moito máis!
|
||||
|
||||
<b>PHOTO GALLERY EDITOR</b>
|
||||
Simple Gallery Pro makes it easy to edit your pictures on the fly. Crop, flip, rotate and resize your pictures. If you’re feeling a little more creative you can add filters and draw on your pictures!
|
||||
Simple Gallery Pro permite editar as fotos no momento. Recorta, voltea, rota e redimensiona as túas fotos. Se te sintes inspirado tamén pode engadir filtros e debuxar nas imaxes!
|
||||
|
||||
<b>SUPPORT FOR MANY FILE TYPES</b>
|
||||
Unlike some other gallery viewers & photo organizers, Simple Gallery Pro supports a huge range of different file types including JPEG, PNG, MP4, MKV, RAW, SVG, Panoramic photos, Panoramic videos and many more.
|
||||
<b>SOPORTA MOITOS TIPOS DE FICHEIROS</b>
|
||||
Simple Gallery Pro soporta gran variedade de formatos como JPEG, PNG, MP4, MKV, RAW, SVG, Panoramicas, Vídeos panorámicos e moito máis. Non como outros.
|
||||
|
||||
<b>HIGHLY CUSTOMIZABLE GALLERY MANAGER</b>
|
||||
From the UI to the function buttons on the bottom toolbar, Simple Gallery Pro is highly customizable and works the way you want it to. No other gallery manager has this kind of flexibility! Thanks to being open source, we’re also available in 32 languages!
|
||||
<b>XESTOR DE FOTOS MOI PERSONALIZABLE</b>
|
||||
Desde a interface ata a función dos botóns da barra de ferramentas, Simply Gallery Pro é moi personalizable e funciona do xeito que ti queres. Ningún outro xestor de galerías ten esta flexibilidade! Ao ser código aberto, está dipoñible en 32 idiomas!
|
||||
|
||||
<b>RECOVER DELETED PHOTOS & VIDEOS</b>
|
||||
Accidentally deleted a precious photo or video? Don’t worry! Simple Gallery Pro features a handy recycle bin where you can recover deleted photos & videos easily.
|
||||
<b>RECUPERA FOTOS & VIDEOS ELIMINADOS</b>
|
||||
Borraches sen querer unha foto ou vídeo? Non te apenes! Simple Gallery Pro ten unha función para recuperar facilmente vídeos e fotos borrados.
|
||||
|
||||
<b>PROTECT & HIDE PHOTOS, VIDEOS & FILES</b>
|
||||
Using pin, pattern or your device’s fingerprint scanner you can protect and hide photos, videos & entire albums. You can protect the app itself or place locks on specific functions of the app. For example, you can’t delete a file without a fingerprint scan, helping to protect your files from accidental deletion.
|
||||
<b>PROTEXE & OCULTA FOTOS, VIDEOS & FICHEIROS</b>
|
||||
Usando un prendedor, patrón ou a impresión dixital no escáner do dispositivo podes protexer e agochar fotos, vídeos e álbumes enteiros. Podes protexer a app ou establecer funcións específicas no app. Por exemplo, que non poidas eliminar un ficheiro sen o escáner da impresión dixital, axudándoche a protexer o borrado accidental.
|
||||
|
||||
<b>Check out the full suite of Simple Tools here:</b>
|
||||
<b>Aquí tes todas as Simple Tools:</b>
|
||||
https://www.simplemobiletools.com
|
||||
|
||||
<b>Standalone website of Simple Gallery Pro:</b>
|
||||
<b>Sitio web de Simple Gallery Pro:</b>
|
||||
https://www.simplemobiletools.com/gallery
|
||||
|
||||
<b>Facebook:</b>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Ostale mape</string>
|
||||
<string name="show_on_map">Prikaži na karti</string>
|
||||
<string name="unknown_location">Nepoznata lokacija</string>
|
||||
<string name="increase_column_count">Povećaj broj stupaca</string>
|
||||
<string name="reduce_column_count">Smanji broj stupaca</string>
|
||||
<string name="change_cover_image">Promjeni naslovnu sliku</string>
|
||||
<string name="select_photo">Odaberi sliku</string>
|
||||
<string name="volume">Glasnoća</string>
|
||||
<string name="brightness">Svjetlina</string>
|
||||
<string name="lock_orientation">Zaključaj orijentaciju slike</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Nema datoteka za dijaprojekciju</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Promijeni vrstu prikaza</string>
|
||||
<string name="grid">Mreža</string>
|
||||
<string name="list">Lista</string>
|
||||
<string name="group_direct_subfolders">Group direct subfolders</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">Avoid showing invalid files</string>
|
||||
<string name="show_image_file_types">Show image file types</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Sličice</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Egyéb mappa</string>
|
||||
<string name="show_on_map">Mutassa a térképen</string>
|
||||
<string name="unknown_location">Ismeretlen helyszín</string>
|
||||
<string name="increase_column_count">Növelje az oszlopok számát</string>
|
||||
<string name="reduce_column_count">Csökkentse az oszlopok számát</string>
|
||||
<string name="change_cover_image">Borítókép változtatása</string>
|
||||
<string name="select_photo">Válasszon fotót</string>
|
||||
<string name="volume">Hangerő</string>
|
||||
<string name="brightness">Fényesség</string>
|
||||
<string name="lock_orientation">Tájolás zárolása</string>
|
||||
|
@ -30,7 +26,7 @@
|
|||
<string name="fix_date_taken">Dátum javítása</string>
|
||||
<string name="fixing">Javítás...</string>
|
||||
<string name="dates_fixed_successfully">Sikeres dátum javítás</string>
|
||||
<string name="no_date_takens_found">No Date Taken values have been found</string>
|
||||
<string name="no_date_takens_found">Nem találhatók Dátum értékek</string>
|
||||
<string name="share_resized">Átméretezett verzió megosztása</string>
|
||||
<string name="upgraded_from_free">Hey,\n\nseems like you upgraded from the old free app. You can now uninstall the old version, which has an \'Upgrade to Pro\' button at the top of the app settings.\n\nYou will only have the Recycle bin items deleted, favorite items unmarked and you will also have to reset your app settings.\n\nThanks!</string>
|
||||
<string name="switch_to_file_search">Váltás a fájlkeresésre az összes látható mappában</string>
|
||||
|
@ -42,7 +38,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="portraits">Portrék</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>
|
||||
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">A diavetítéshez nem található média</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Nézet típus változtatása</string>
|
||||
<string name="grid">Rács</string>
|
||||
<string name="list">Lista</string>
|
||||
<string name="group_direct_subfolders">Közvetlen almappa csoport</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -189,7 +182,14 @@
|
|||
<string name="compromise">Kiegyensúlyozott</string>
|
||||
<string name="avoid_showing_invalid_files">Kerülje az érvénytelen fájlok mutatását</string>
|
||||
<string name="show_image_file_types">Mutassa a kép fájl típusokat</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="allow_zooming_videos">A videók nagyításának engedélyezése dupla koppintással</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniatűrök</string>
|
||||
|
@ -206,27 +206,27 @@
|
|||
<string name="pesdk_transform_button_freeCrop">Egyéni</string>
|
||||
<string name="pesdk_transform_button_resetCrop">Alaphelyzetbe</string>
|
||||
<string name="pesdk_transform_button_squareCrop">Négyzet</string>
|
||||
<string name="pesdk_transform_title_name">Transform</string>
|
||||
<string name="pesdk_transform_title_name">Átalakítás</string>
|
||||
<string name="pesdk_filter_title_name">Szűrő</string>
|
||||
<string name="pesdk_filter_asset_none">Nincs</string>
|
||||
<string name="pesdk_adjustments_title_name">Beállít</string>
|
||||
<string name="pesdk_adjustments_button_shadowTool">Árnyékok</string>
|
||||
<string name="pesdk_adjustments_button_exposureTool">Exposure</string>
|
||||
<string name="pesdk_adjustments_button_highlightTool">Highlights</string>
|
||||
<string name="pesdk_adjustments_button_exposureTool">Kitettség</string>
|
||||
<string name="pesdk_adjustments_button_highlightTool">Kiemelések</string>
|
||||
<string name="pesdk_adjustments_button_brightnessTool">Fényerő</string>
|
||||
<string name="pesdk_adjustments_button_contrastTool">Kontraszt</string>
|
||||
<string name="pesdk_adjustments_button_saturationTool">Színtelítettség</string>
|
||||
<string name="pesdk_adjustments_button_clarityTool">Világosság</string>
|
||||
<string name="pesdk_adjustments_button_gammaTool">Gamma</string>
|
||||
<string name="pesdk_adjustments_button_blacksTool">Blacks</string>
|
||||
<string name="pesdk_adjustments_button_whitesTool">Whites</string>
|
||||
<string name="pesdk_adjustments_button_blacksTool">Feketék</string>
|
||||
<string name="pesdk_adjustments_button_whitesTool">Fehérek</string>
|
||||
<string name="pesdk_adjustments_button_temperatureTool">Színhőmérséklet</string>
|
||||
<string name="pesdk_adjustments_button_sharpnessTool">Élesség</string>
|
||||
<string name="pesdk_adjustments_button_reset">Alaphelyzetbe</string>
|
||||
<string name="pesdk_focus_title_name">Fókusz</string>
|
||||
<string name="pesdk_focus_title_disabled">Nincs</string>
|
||||
<string name="pesdk_focus_button_radial">Radial</string>
|
||||
<string name="pesdk_focus_button_linear">Linear</string>
|
||||
<string name="pesdk_focus_button_radial">Sugárirányú</string>
|
||||
<string name="pesdk_focus_button_linear">Lineáris</string>
|
||||
<string name="pesdk_focus_button_mirrored">Tükrözött</string>
|
||||
<string name="pesdk_focus_button_gaussian">Gaussian</string>
|
||||
<string name="pesdk_text_title_name">Szöveg</string>
|
||||
|
@ -235,7 +235,7 @@
|
|||
<string name="pesdk_text_title_font">Betűtípus</string>
|
||||
<string name="pesdk_text_button_add">Hozzáadás</string>
|
||||
<string name="pesdk_text_button_edit">Szerkesztés</string>
|
||||
<string name="pesdk_text_button_straighten">Straighten</string>
|
||||
<string name="pesdk_text_button_straighten">Egyenesített</string>
|
||||
<string name="pesdk_text_button_font">Betűtípus</string>
|
||||
<string name="pesdk_text_button_color">Szín</string>
|
||||
<string name="pesdk_text_button_backgroundColor">Háttérszín</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Folder lainnya</string>
|
||||
<string name="show_on_map">Tampilkan di peta</string>
|
||||
<string name="unknown_location">Lokasi tidak diketahui</string>
|
||||
<string name="increase_column_count">Tambah jumlah kolom</string>
|
||||
<string name="reduce_column_count">Kurangi jumlah kolom</string>
|
||||
<string name="change_cover_image">Ubah gambar kover</string>
|
||||
<string name="select_photo">Pilih foto</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Kecerahan</string>
|
||||
<string name="lock_orientation">Kunci orientasi</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Tidak ditemukan media untuk slideshow</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Ubah tampilan</string>
|
||||
<string name="grid">Kotak</string>
|
||||
<string name="list">Daftar</string>
|
||||
<string name="group_direct_subfolders">Kelompokkan subfolder langsung</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">Hindari menampilkan berkas yang tidak valid</string>
|
||||
<string name="show_image_file_types">Tampilkan tipe berkas gambar</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnail</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Folder lainnya</string>
|
||||
<string name="show_on_map">Tampilkan di peta</string>
|
||||
<string name="unknown_location">Lokasi tidak diketahui</string>
|
||||
<string name="increase_column_count">Tambah jumlah kolom</string>
|
||||
<string name="reduce_column_count">Kurangi jumlah kolom</string>
|
||||
<string name="change_cover_image">Ubah gambar kover</string>
|
||||
<string name="select_photo">Pilih foto</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Kecerahan</string>
|
||||
<string name="lock_orientation">Kunci orientasi</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Tidak ditemukan media untuk slideshow</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Ubah tampilan</string>
|
||||
<string name="grid">Kotak</string>
|
||||
<string name="list">Daftar</string>
|
||||
<string name="group_direct_subfolders">Kelompokkan subfolder langsung</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">Hindari menampilkan berkas yang tidak valid</string>
|
||||
<string name="show_image_file_types">Tampilkan tipe berkas gambar</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnail</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Altra cartella</string>
|
||||
<string name="show_on_map">Mostra sulla mappa</string>
|
||||
<string name="unknown_location">Posizione sconosciuta</string>
|
||||
<string name="increase_column_count">Aumenta numero colonne</string>
|
||||
<string name="reduce_column_count">Riduci numero colonne</string>
|
||||
<string name="change_cover_image">Cambia immagine copertina</string>
|
||||
<string name="select_photo">Seleziona foto</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Luminosità</string>
|
||||
<string name="lock_orientation">Blocca orientamento</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Nessun file trovato per la presentazione</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Cambia modalità visualizzazione</string>
|
||||
<string name="grid">Griglia</string>
|
||||
<string name="list">Elenco</string>
|
||||
<string name="group_direct_subfolders">Raggruppa sottocartelle dirette</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -189,7 +182,14 @@
|
|||
<string name="compromise">Compromesso</string>
|
||||
<string name="avoid_showing_invalid_files">Evita di mostrare file non validi</string>
|
||||
<string name="show_image_file_types">Mostra i tipi di file immagine</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="allow_zooming_videos">Permetti l\'ingrandimento dei video con un doppio tocco</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Anteprime</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<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="select_photo">写真を選択</string>
|
||||
<string name="volume">音量</string>
|
||||
<string name="brightness">明るさ</string>
|
||||
<string name="lock_orientation">画面の向きを固定する</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">スライドショーに表示するメディアがありません</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">表示形式の変更</string>
|
||||
<string name="grid">グリッド</string>
|
||||
<string name="list">リスト</string>
|
||||
<string name="group_direct_subfolders">サブフォルダでグループ化</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">Avoid showing invalid files</string>
|
||||
<string name="show_image_file_types">Show image file types</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">サムネイル設定</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<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="select_photo">사진 선택</string>
|
||||
<string name="volume">볼륨</string>
|
||||
<string name="brightness">밝기</string>
|
||||
<string name="lock_orientation">화면 회전 잠금</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">슬라이드 쇼를 표시할 사진이 없습니다.</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">보기 방식 변경</string>
|
||||
<string name="grid">타일</string>
|
||||
<string name="list">목록</string>
|
||||
<string name="group_direct_subfolders">상위 폴더 표시</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">잘못된 파일 보이지 않기</string>
|
||||
<string name="show_image_file_types">사진 파일 종류 표시</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">섬네일</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Kitas aplankas</string>
|
||||
<string name="show_on_map">Rodyti žemėlapyje</string>
|
||||
<string name="unknown_location">Nežinoma vieta</string>
|
||||
<string name="increase_column_count">Padidinti stulpelių skaičių</string>
|
||||
<string name="reduce_column_count">Sumažinti stulpelių skaičių</string>
|
||||
<string name="change_cover_image">Pakeisti viršelio atvaizdą</string>
|
||||
<string name="select_photo">Pasirinkti nuotrauką</string>
|
||||
<string name="volume">Garsas</string>
|
||||
<string name="brightness">Ryškumas</string>
|
||||
<string name="lock_orientation">Užrakinti orientaciją</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Nerasta medijos skaidrių demonstracijai</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Keisti peržiūros tipą</string>
|
||||
<string name="grid">Tinklelis</string>
|
||||
<string name="list">Sąrašas</string>
|
||||
<string name="group_direct_subfolders">Group direct subfolders</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">Avoid showing invalid files</string>
|
||||
<string name="show_image_file_types">Show image file types</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniatiūros</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Annen mappe</string>
|
||||
<string name="show_on_map">Vis på kart</string>
|
||||
<string name="unknown_location">Ukjent plassering</string>
|
||||
<string name="increase_column_count">Øk antall kolonner</string>
|
||||
<string name="reduce_column_count">Reduser antall kolonner</string>
|
||||
<string name="change_cover_image">Endre omslagsbilde</string>
|
||||
<string name="select_photo">Velg foto</string>
|
||||
<string name="volume">Volum</string>
|
||||
<string name="brightness">Lysstyrke</string>
|
||||
<string name="lock_orientation">Lås skjermorientering</string>
|
||||
|
@ -30,7 +26,7 @@
|
|||
<string name="fix_date_taken">Korriger Dato tatt-verdi</string>
|
||||
<string name="fixing">Korrigerer…</string>
|
||||
<string name="dates_fixed_successfully">Datoer er korrigerte</string>
|
||||
<string name="no_date_takens_found">No Date Taken values have been found</string>
|
||||
<string name="no_date_takens_found">Ingen verdier for Dato tatt er funnet</string>
|
||||
<string name="share_resized">Del versjon med endret størrelse</string>
|
||||
<string name="upgraded_from_free">Hey,\n\nseems like you upgraded from the old free app. You can now uninstall the old version, which has an \'Upgrade to Pro\' button at the top of the app settings.\n\nYou will only have the Recycle bin items deleted, favorite items unmarked and you will also have to reset your app settings.\n\nThanks!</string>
|
||||
<string name="switch_to_file_search">Skift til filsøk i alle synlige mapper</string>
|
||||
|
@ -80,7 +76,7 @@
|
|||
<string name="rotate">Roter</string>
|
||||
<string name="invalid_image_path">Ugyldig bildebane</string>
|
||||
<string name="image_editing_failed">Bilderedigering feilet</string>
|
||||
<string name="image_editing_cancelled">Image editing cancelled</string>
|
||||
<string name="image_editing_cancelled">Bilderedigering avbrutt</string>
|
||||
<string name="file_edited_successfully">Fil vellykket redigert</string>
|
||||
<string name="edit_image_with">Rediger bilde med:</string>
|
||||
<string name="no_editor_found">Ingen bilderedigeringsapp funnet</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Ingen media for lysbildeshowet er funnet</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Endre visningstype</string>
|
||||
<string name="grid">Rutenett</string>
|
||||
<string name="list">Liste</string>
|
||||
<string name="group_direct_subfolders">Grupper direkte undermapper</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -189,7 +182,14 @@
|
|||
<string name="compromise">Kompromiss</string>
|
||||
<string name="avoid_showing_invalid_files">Unngå visning av ugyldige filer</string>
|
||||
<string name="show_image_file_types">Vis bildefiltyper</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="allow_zooming_videos">Tillat zooming av videoer ved å dobbelttrykke dem</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Minibilder</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<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="select_photo">फोटो चयन गर्नुहोस</string>
|
||||
<string name="volume">भोलुम</string>
|
||||
<string name="brightness">उज्यालोपन</string>
|
||||
<string name="lock_orientation">Lock orientation</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">No media for the slideshow have been found</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">भ्यू प्रकार परिवर्तन गर्नुहोस</string>
|
||||
<string name="grid">कोठे</string>
|
||||
<string name="list">सुची</string>
|
||||
<string name="group_direct_subfolders">Group direct subfolders</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">Avoid showing invalid files</string>
|
||||
<string name="show_image_file_types">तस्बिरको फाईल किसिम देखाउनुहोस</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Andere map</string>
|
||||
<string name="show_on_map">Op kaart tonen</string>
|
||||
<string name="unknown_location">Locatie onbekend</string>
|
||||
<string name="increase_column_count">Meer kolommen</string>
|
||||
<string name="reduce_column_count">Minder kolommen</string>
|
||||
<string name="change_cover_image">Afbeelding omslag wijzigen</string>
|
||||
<string name="select_photo">Foto selecteren</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Helderheid</string>
|
||||
<string name="lock_orientation">Schermoriëntatie vergrendelen</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Geen media gevonden voor diavoorstelling</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Weergave</string>
|
||||
<string name="grid">Raster</string>
|
||||
<string name="list">Lijst</string>
|
||||
<string name="group_direct_subfolders">Directe submappen groeperen</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -189,7 +182,14 @@
|
|||
<string name="compromise">Compromis</string>
|
||||
<string name="avoid_showing_invalid_files">Ongeldige bestanden verbergen</string>
|
||||
<string name="show_image_file_types">Bestandstypen tonen</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="allow_zooming_videos">Bij video\'s inzoomen met dubbelklikken</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniatuurvoorbeelden</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Inny folder</string>
|
||||
<string name="show_on_map">Pokaż na mapie</string>
|
||||
<string name="unknown_location">Nieznana lokalizacja</string>
|
||||
<string name="increase_column_count">Zwiększ liczbę kolumn</string>
|
||||
<string name="reduce_column_count">Zmniejsz liczbę kolumn</string>
|
||||
<string name="change_cover_image">Zmień okładkę</string>
|
||||
<string name="select_photo">Wybierz obraz</string>
|
||||
<string name="volume">Głośność</string>
|
||||
<string name="brightness">Jasność</string>
|
||||
<string name="lock_orientation">Zablokuj orientację ekranu</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Nie znalazłem multimediów do pokazu slajdów</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Zmień typ widoku</string>
|
||||
<string name="grid">Siatka</string>
|
||||
<string name="list">Lista</string>
|
||||
<string name="group_direct_subfolders">Grupuj bezpośrednie podfoldery</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">Unikaj pokazywania niewłaściwych plików</string>
|
||||
<string name="show_image_file_types">Pokazuj rozszerzenia zdjęć</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniatury</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Outra pasta</string>
|
||||
<string name="show_on_map">Exibir no mapa</string>
|
||||
<string name="unknown_location">Localização desconhecida</string>
|
||||
<string name="increase_column_count">Aumentar número de colunas</string>
|
||||
<string name="reduce_column_count">Reduzir número de colunas</string>
|
||||
<string name="change_cover_image">Trocar imagem de capa</string>
|
||||
<string name="select_photo">Selecionar foto</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Brilho</string>
|
||||
<string name="lock_orientation">Travar orientação</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Nenhuma mídia encontrada para a apresentação</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Alterar modo de visualização</string>
|
||||
<string name="grid">Grade</string>
|
||||
<string name="list">Lista</string>
|
||||
<string name="group_direct_subfolders">Agrupar subpastas diretas</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -189,7 +182,14 @@
|
|||
<string name="compromise">Meio termo</string>
|
||||
<string name="avoid_showing_invalid_files">Evitar a exibição de arquivos inválidos</string>
|
||||
<string name="show_image_file_types">Exibir tipos de arquivo de imagem</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="allow_zooming_videos">Permitir zoom de vídeos com um toque duplo neles</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniaturas</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Outra pasta</string>
|
||||
<string name="show_on_map">Mostrar no mapa</string>
|
||||
<string name="unknown_location">Localização desconhecida</string>
|
||||
<string name="increase_column_count">Aumentar número de colunas</string>
|
||||
<string name="reduce_column_count">Diminuir número de colunas</string>
|
||||
<string name="change_cover_image">Alterar imagem de capa</string>
|
||||
<string name="select_photo">Selecionar foto</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Brilho</string>
|
||||
<string name="lock_orientation">Bloquear orientação</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Não foram encontrados ficheiros para a apresentação</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Tipo de exibição</string>
|
||||
<string name="grid">Grelha</string>
|
||||
<string name="list">Lista</string>
|
||||
<string name="group_direct_subfolders">Agrupar sub-pastas</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -189,7 +182,14 @@
|
|||
<string name="compromise">Qualidade</string>
|
||||
<string name="avoid_showing_invalid_files">Não mostrar ficheiros inválidos</string>
|
||||
<string name="show_image_file_types">Mostrar o tipo de imagem</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="allow_zooming_videos">Permitir ampliação de vídeos com dois toques</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniaturas</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<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="select_photo">Выбрать изображение</string>
|
||||
<string name="volume">Громкость</string>
|
||||
<string name="brightness">Яркость</string>
|
||||
<string name="lock_orientation">Заблокировать ориентацию</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Не найдено медиафайлов для слайдшоу</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Вид</string>
|
||||
<string name="grid">Сетка</string>
|
||||
<string name="list">Список</string>
|
||||
<string name="group_direct_subfolders">Объединять вложенные папки</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">Пропускать файлы с ошибками</string>
|
||||
<string name="show_image_file_types">Показывать типы файлов изображений</string>
|
||||
<string name="allow_zooming_videos">Масштабировать видео двойным нажатием по нему</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Миниатюры</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Iný priečinok</string>
|
||||
<string name="show_on_map">Zobraziť na mape</string>
|
||||
<string name="unknown_location">Neznáma poloha</string>
|
||||
<string name="increase_column_count">Zvýšiť počet stĺpcov</string>
|
||||
<string name="reduce_column_count">Znížiť počet stĺpcov</string>
|
||||
<string name="change_cover_image">Zmeniť obal albumu</string>
|
||||
<string name="select_photo">Zvoliť foto</string>
|
||||
<string name="volume">Hlasitosť</string>
|
||||
<string name="brightness">Jas</string>
|
||||
<string name="lock_orientation">Uzamknúť otočenie obrazovky</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Pre prezentáciu sa nenašli žiadne vhodné súbory</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Zmeniť typ zobrazenia</string>
|
||||
<string name="grid">Mriežka</string>
|
||||
<string name="list">Zoznam</string>
|
||||
<string name="group_direct_subfolders">Zlúčiť priame podpriečinky</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">Nezobrazovať neplatné súbory</string>
|
||||
<string name="show_image_file_types">Zobraziť typ obrázkových súborov</string>
|
||||
<string name="allow_zooming_videos">Povoliť približovanie videí dvojitým ťuknutím</string>
|
||||
<string name="folder_thumbnail_style">Štýl miniatúr priečinkov</string>
|
||||
<string name="show_file_count_line">Zobraziť počet súborov na samostatnom riadku</string>
|
||||
<string name="show_file_count_brackets">Zobraziť počet súborov v zátvorkách</string>
|
||||
<string name="show_file_count_none">Nezobrazovať počet súborov</string>
|
||||
<string name="limit_folder_title">Obmedziť názov priečinka na 1 riadok</string>
|
||||
<string name="square">Štvorec</string>
|
||||
<string name="rounded_corners">Zaoblené rohy</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Náhľady</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Druga mapa</string>
|
||||
<string name="show_on_map">Prikaži na zemljevidu</string>
|
||||
<string name="unknown_location">Neznana lokacija</string>
|
||||
<string name="increase_column_count">Povečaj število stolpcev</string>
|
||||
<string name="reduce_column_count">Zmanjšaj število stolpcev</string>
|
||||
<string name="change_cover_image">Spremeni naslovno fotografijo</string>
|
||||
<string name="select_photo">Izberi fotografijo</string>
|
||||
<string name="volume">Glasnost</string>
|
||||
<string name="brightness">Svetlost</string>
|
||||
<string name="lock_orientation">Zakleni usmerjenost</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Ne najdem datotek za diaprojekcijo</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Spremeni tip pogleda</string>
|
||||
<string name="grid">Mreža</string>
|
||||
<string name="list">Seznam</string>
|
||||
<string name="group_direct_subfolders">Združi neposredne podmape</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">Izogni se prikazovanju napačnih datotek</string>
|
||||
<string name="show_image_file_types">Show image file types</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Sličice</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<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="select_photo">Изабери фотографију</string>
|
||||
<string name="volume">Јачина звука</string>
|
||||
<string name="brightness">Осветљење</string>
|
||||
<string name="lock_orientation">Закључај оријентацију</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Нису пронађени медији за слајдшоу</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Промени тип прегледа</string>
|
||||
<string name="grid">Мрежа</string>
|
||||
<string name="list">Листа</string>
|
||||
<string name="group_direct_subfolders">Групирај директне подфасцикле</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">Не приказуј оштећене датотеке</string>
|
||||
<string name="show_image_file_types">Show image file types</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Сличице</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Annan mapp</string>
|
||||
<string name="show_on_map">Visa på karta</string>
|
||||
<string name="unknown_location">Okänd plats</string>
|
||||
<string name="increase_column_count">Öka antalet kolumner</string>
|
||||
<string name="reduce_column_count">Minska antalet kolumner</string>
|
||||
<string name="change_cover_image">Byt omslagsbild</string>
|
||||
<string name="select_photo">Välj foto</string>
|
||||
<string name="volume">Volym</string>
|
||||
<string name="brightness">Ljusstyrka</string>
|
||||
<string name="lock_orientation">Aktivera rotationslås</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Ingen media hittades för bildspelet</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Ändra vy</string>
|
||||
<string name="grid">Rutnät</string>
|
||||
<string name="list">Lista</string>
|
||||
<string name="group_direct_subfolders">Gruppera direkta undermappar</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">Avoid showing invalid files</string>
|
||||
<string name="show_image_file_types">Show image file types</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniatyrer</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Diğer klasör</string>
|
||||
<string name="show_on_map">Haritada göster</string>
|
||||
<string name="unknown_location">Bilinmeyen konum</string>
|
||||
<string name="increase_column_count">Sütun sayısını artır</string>
|
||||
<string name="reduce_column_count">Sütun sayısını azalt</string>
|
||||
<string name="change_cover_image">Kapak resmini değiştir</string>
|
||||
<string name="select_photo">Fotoğraf seç</string>
|
||||
<string name="volume">Ses</string>
|
||||
<string name="brightness">Parlaklık</string>
|
||||
<string name="lock_orientation">Yönü kilitle</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Slayt gösterisi için medya bulunamadı</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Görünüm türünü değiştir</string>
|
||||
<string name="grid">Izgara</string>
|
||||
<string name="list">Liste</string>
|
||||
<string name="group_direct_subfolders">Doğrudan alt klasörleri gruplandır</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -189,7 +182,14 @@
|
|||
<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>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="allow_zooming_videos">Videoları iki kez dokunarak yakınlaştırmaya izin ver</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Küçük resimler</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<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="select_photo">Вибрати фото</string>
|
||||
<string name="volume">Об\'єм</string>
|
||||
<string name="brightness">Яскравість</string>
|
||||
<string name="lock_orientation">Закріпити орієнтацію</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Не знайдено медіафайлів для показу у слайдшоу</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Змінити тип перегляду</string>
|
||||
<string name="grid">Сітка</string>
|
||||
<string name="list">Список</string>
|
||||
<string name="group_direct_subfolders">Групувати безпосередні підтеки</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">Запобігати показу пошкоджених файлів</string>
|
||||
<string name="show_image_file_types">Показувати типи файлів зображень</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Ескізи</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Thư mục khác</string>
|
||||
<string name="show_on_map">Hiển thị trên bản đồ</string>
|
||||
<string name="unknown_location">Vị trí không xác định</string>
|
||||
<string name="increase_column_count">Tăng số lượng cột</string>
|
||||
<string name="reduce_column_count">Giảm số lượng cột</string>
|
||||
<string name="change_cover_image">Thay đổi ảnh bìa</string>
|
||||
<string name="select_photo">Chọn ảnh</string>
|
||||
<string name="volume">Âm lượng</string>
|
||||
<string name="brightness">Độ sáng</string>
|
||||
<string name="lock_orientation">Khóa xoay màn hình</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">Không có tập tin phương tiện cho trình chiếu được tìm thấy</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Thay đổi kiểu xem</string>
|
||||
<string name="grid">Lưới</string>
|
||||
<string name="list">Danh sách</string>
|
||||
<string name="group_direct_subfolders">Nhóm thư mục con trực tiếp</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">Tránh hiển thị các tệp không hợp lệ</string>
|
||||
<string name="show_image_file_types">Hiển thị các loại tệp hình ảnh</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Hình thu nhỏ</string>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">简约图库</string>
|
||||
<string name="app_name">简易图库</string>
|
||||
<string name="app_launcher_name">图库</string>
|
||||
<string name="edit">编辑</string>
|
||||
<string name="open_camera">打开相机</string>
|
||||
|
@ -15,10 +15,6 @@
|
|||
<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="select_photo">选择图片</string>
|
||||
<string name="volume">音量</string>
|
||||
<string name="brightness">亮度</string>
|
||||
<string name="lock_orientation">锁定屏幕方向</string>
|
||||
|
@ -32,7 +28,7 @@
|
|||
<string name="dates_fixed_successfully">日期修复成功</string>
|
||||
<string name="no_date_takens_found">没有找到拍摄日期</string>
|
||||
<string name="share_resized">调整尺寸并分享</string>
|
||||
<string name="upgraded_from_free">嘿,\n\n你似乎已经从旧的免费版应用升级。你现在可以卸载旧版本,在该版本的应用设置顶部有一个“升级到专业版”按钮。\n\n此操作会删除回收站项目,取消标记收藏项目,并重置应用设置。\n\n谢谢!</string>
|
||||
<string name="upgraded_from_free">嘿,\n\n您似乎已经从旧的免费版应用升级。您现在可以卸载旧版本,在该版本的应用设置顶部有一个“升级到专业版”按钮。\n\n此操作会删除回收站项目,取消标记收藏项目,并重置应用设置。\n\n谢谢!</string>
|
||||
<string name="switch_to_file_search">切换文件搜索范围为所有可见的文件夹</string>
|
||||
|
||||
<!-- Filter -->
|
||||
|
@ -51,14 +47,14 @@
|
|||
<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_description">该操作仅会在“简易图库”中排除显示选定的文件夹及其子文件夹。您可以在设置中管理排除的文件夹。</string>
|
||||
<string name="exclude_folder_parent">是否排除父文件夹?</string>
|
||||
<string name="excluded_activity_placeholder">此目录及其子目录中的媒体将不会在“简约图库”中显示,但是其它应用可以访问。如果您想对其它应用隐藏,请使用隐藏功能。</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="hidden_folders_placeholder">看起来你没有任何使用“.nomedia”文件隐藏的目录。</string>
|
||||
<string name="hidden_folders_placeholder">看起来您没有任何使用“.nomedia”文件隐藏的目录。</string>
|
||||
|
||||
<!-- Include folders -->
|
||||
<string name="include_folders">包含的文件夹</string>
|
||||
|
@ -96,7 +92,7 @@
|
|||
<string name="other_aspect_ratio">其他</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
<!-- Set wallpaper -->
|
||||
<string name="simple_wallpaper">简约壁纸</string>
|
||||
<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>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">没有找到可播放幻灯片媒体文件</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">更改视图类型</string>
|
||||
<string name="grid">网格</string>
|
||||
<string name="list">列表</string>
|
||||
<string name="group_direct_subfolders">直接分组文件夹</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -189,7 +182,14 @@
|
|||
<string name="compromise">折中</string>
|
||||
<string name="avoid_showing_invalid_files">避免显示无效的文件</string>
|
||||
<string name="show_image_file_types">显示图片文件类型</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="allow_zooming_videos">允许双击来放大视频</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">缩略图</string>
|
||||
|
@ -242,7 +242,7 @@
|
|||
<string name="pesdk_text_button_alignment">对齐</string>
|
||||
<string name="pesdk_text_button_bringToFront">移到最上层</string>
|
||||
<string name="pesdk_text_button_delete">删除</string>
|
||||
<string name="pesdk_text_text_editTextPlaceholder">你的文字</string>
|
||||
<string name="pesdk_text_text_editTextPlaceholder">您的文字</string>
|
||||
<string name="pesdk_brush_title_name">笔刷</string>
|
||||
<string name="pesdk_brush_button_color">颜色</string>
|
||||
<string name="pesdk_brush_button_size">尺寸</string>
|
||||
|
@ -284,24 +284,24 @@
|
|||
<string name="pesdk_common_title_pipettableColor">取色器</string>
|
||||
|
||||
<!-- FAQ -->
|
||||
<string name="faq_1_title">如何把简约图库设置为设备的默认图库?</string>
|
||||
<string name="faq_1_text">首先,你需要在设备设置的“应用”菜单中找到你当前的默认图库,找到并点击“默认打开”按钮,然后点击“清除默认值”。下次当你再次打开图片或视频时,你应该会看到一个应用程序选择器,请在这里选择“简约图库”并将其设为默认应用程序。</string>
|
||||
<string name="faq_1_title">如何把简易图库设置为设备的默认图库?</string>
|
||||
<string name="faq_1_text">首先,您需要在设备设置的“应用”菜单中找到您当前的默认图库,找到并点击“默认打开”按钮,然后点击“清除默认值”。下次当您再次打开图片或视频时,您应该会看到一个应用程序选择器,请在这里选择“简易图库”并将其设为默认应用程序。</string>
|
||||
<string name="faq_2_title">我用密码锁定了本应用,但我忘记了密码。该怎么办?</string>
|
||||
<string name="faq_2_text">有两种方法。你可以重新安装本应用,也可以在设置中清除此应用的数据,这将会会重置你的所有设置,但不会删除任何媒体文件。</string>
|
||||
<string name="faq_2_text">有两种方法。您可以重新安装本应用,也可以在设置中清除此应用的数据,这将会会重置您的所有设置,但不会删除任何媒体文件。</string>
|
||||
<string name="faq_3_title">如何让某个相册始终显示在最上面?</string>
|
||||
<string name="faq_3_text">你可以长按该相册并在操作栏中点击图钉图标,这样 就可以将其固定在顶部了。你也可以固定多个文件夹,固定项目将按照默认排序方法排序。</string>
|
||||
<string name="faq_3_text">您可以长按该相册并在操作栏中点击图钉图标,这样 就可以将其固定在顶部了。您也可以固定多个文件夹,固定项目将按照默认排序方法排序。</string>
|
||||
<string name="faq_4_title">如何快进/快退视频?</string>
|
||||
<string name="faq_4_text">您可以双击屏幕边缘或点击搜索栏附近的当前或总时长的文字。 如果您在应用设置中启用了在独立页面播放视频,则也可以使用水平手势。</string>
|
||||
<string name="faq_5_title">文件夹的隐藏和排除有什么区别?</string>
|
||||
<string name="faq_5_text">排除功能只是防止其在简约图库中显示,而隐藏功能则使用的是系统的方法,这样做也会在其他图库中隐藏。它的工作原理是在给定的文件夹中创建一个空的.nomedia文件,你可以使用任何文件管理器删除它。请注意,某些设备不允许隐藏\"Camera\",\"Screenshots\"和\"Downloads\"等文件夹。</string>
|
||||
<string name="faq_5_text">排除功能只是防止其在简易图库中显示,而隐藏功能则使用的是系统的方法,这样做也会在其他图库中隐藏。它的工作原理是在给定的文件夹中创建一个空的.nomedia文件,您可以使用任何文件管理器删除它。请注意,某些设备不允许隐藏\"Camera\",\"Screenshots\"和\"Downloads\"等文件夹。</string>
|
||||
<string name="faq_6_title">为什么会出现音乐艺术家封面或贴纸文件夹?</string>
|
||||
<string name="faq_6_text">你可能会看到一些不寻常的相册出现。你可以通过长按它们并选择“排除”来排除它们。在之后的对话框中,你可以选择父文件夹,这样也许就会阻止其他相关的相册出现。</string>
|
||||
<string name="faq_6_text">您可能会看到一些不寻常的相册出现。您可以通过长按它们并选择“排除”来排除它们。在之后的对话框中,您可以选择父文件夹,这样也许就会阻止其他相关的相册出现。</string>
|
||||
<string name="faq_7_title">有的图片文件夹没有显示,怎么回事?</string>
|
||||
<string name="faq_7_text">原因可能有很多,但解决方法很简单。只需进入设置 -> 管理包含目录,点击+号并选择到所需的文件夹。</string>
|
||||
<string name="faq_8_title">如果我只想显示几个特定的文件夹,该如何操作?</string>
|
||||
<string name="faq_8_text">在包含目录中添加文件夹不会自动排除其他的内容。你可以做的:进入设置 -> 管理排除目录,排除根目录\"/\",然后在设置 -> 管理包含目录中添加所需的文件夹。这样就只显示选定的文件夹了,由于排除和包含都是递归的,所以排除并包含的文件夹是会显示的。</string>
|
||||
<string name="faq_8_text">在包含目录中添加文件夹不会自动排除其他的内容。您可以做的:进入设置 -> 管理排除目录,排除根目录\"/\",然后在设置 -> 管理包含目录中添加所需的文件夹。这样就只显示选定的文件夹了,由于排除和包含都是递归的,所以排除并包含的文件夹是会显示的。</string>
|
||||
<string name="faq_10_title">可以裁剪图片吗?</string>
|
||||
<string name="faq_10_text">当然,通过长按图片缩略图并选择编辑,或在全屏视图中选择编辑来打开编辑器。你可以通过拖动图片边角来剪裁图像。</string>
|
||||
<string name="faq_10_text">当然,通过长按图片缩略图并选择编辑,或在全屏视图中选择编辑来打开编辑器。您可以通过拖动图片边角来剪裁图像。</string>
|
||||
<string name="faq_11_title">我能将媒体文件缩略图分组吗?</string>
|
||||
<string name="faq_11_text">当然,只需在缩略图视图中使用\"分组依据\"菜单项即可。您可以依据多个条件对文件进行分组,包括拍摄日期。如果您使用了\"显示所有文件夹内容\"功能,则可以按文件夹对它们进行分组。</string>
|
||||
<string name="faq_12_title">按拍摄日期排序似乎有异常,我该如何解决?</string>
|
||||
|
@ -309,26 +309,26 @@
|
|||
<string name="faq_13_title">我看到图像上有一些色带。如何提高提高质量?</string>
|
||||
<string name="faq_13_text">目前显示图像的方案在绝大多数情况下都能正常工作,如果您想要更好的图像质量,您可以在设置中启用\"以最高质量显示图像\"。</string>
|
||||
<string name="faq_14_title">我隐藏了某个文件/文件夹。如何取消隐藏?</string>
|
||||
<string name="faq_14_text">您可以点击主界面上的\"暂时显示隐藏的项目\"选项,或在设置中开启\"显示隐藏的项目\"。 如果你想取消隐藏它,长按它并选择\"取消隐藏\"即可。 我们是通过向文件夹中添加\".nomedia\"文件来隐藏文件夹的,使用文件管理器删除该文件也可以取消隐藏。</string>
|
||||
<string name="faq_14_text">您可以点击主界面上的\"暂时显示隐藏的项目\"选项,或在设置中开启\"显示隐藏的项目\"。 如果您想取消隐藏它,长按它并选择\"取消隐藏\"即可。 我们是通过向文件夹中添加\".nomedia\"文件来隐藏文件夹的,使用文件管理器删除该文件也可以取消隐藏。</string>
|
||||
<string name="faq_15_title">为什么应用占用了这么多的空间?</string>
|
||||
<string name="faq_15_text">应用缓存最多可达250MB,这样可以使图像加载更快。如果应用占用了更多空间,则很可能是因为回收站中有项目。这些文件被计入应用程序大小。您可以打开回收站并删除所有文件,或从应用设置中清除回收站。回收站中的内容会在30天后自动删除。</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">简约图库 Pro - 图片管理 & 编辑</string>
|
||||
<string name="app_title">简易图库 Pro - 图片管理 & 编辑</string>
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
<string name="app_short_description">使用此照片和视频库来毫无阻碍地浏览您的回忆</string>
|
||||
<string name="app_long_description">
|
||||
简约图库 Pro 是一个高度可定制的图库。管理并编辑你的照片,从回收站中恢复已删除的照片,保护并隐藏文件,查看RAW,SVG等等多种照片和视频格式。
|
||||
简易图库 Pro 是一个高度可定制的图库。管理并编辑您的照片,从回收站中恢复已删除的照片,保护并隐藏文件,查看RAW,SVG等等多种照片和视频格式。
|
||||
|
||||
该应用不包含广告和不必要的权限。我们保护您的隐私,因为该应用不需要联网权限。
|
||||
|
||||
-------------------------------------------------
|
||||
<b>简约图库 Pro – 特性</b>
|
||||
<b>简易图库 Pro – 特性</b>
|
||||
-------------------------------------------------
|
||||
|
||||
• 完全离线,没有广告或弹出窗口
|
||||
• 简约图库图片编辑器 – 裁剪,旋转,调整大小,绘制,滤镜等等
|
||||
• 简易图库图片编辑器 – 裁剪,旋转,调整大小,绘制,滤镜等等
|
||||
• 无需联网权限,为您提供更多的隐私和安全
|
||||
• 没有不必要的权限
|
||||
• 快速搜索图像,视频和文件
|
||||
|
@ -343,29 +343,29 @@
|
|||
• 从回收站中恢复已删除的照片和视频
|
||||
• 支持隐藏照片和视频
|
||||
• 为您的文件创建一个可自定义的幻灯片
|
||||
• 查看文件的详细信息(分辨率,EXIF值等等)
|
||||
• 查看文件的详细信息(分辨率,EXIF 值等等)
|
||||
• 该应用是开源的
|
||||
… 还有很多很多!
|
||||
|
||||
<b>图库照片编辑</b>
|
||||
简约图库 Pro 可以轻松地动态编辑图片。支持裁剪、翻转、旋转、或是调整图片大小。如果您希望更有创意的话,可以添加滤镜,或是直接在图片上绘制!
|
||||
简易图库 Pro 可以轻松地动态编辑图片。支持裁剪、翻转、旋转、或是调整图片大小。如果您希望更有创意的话,可以添加滤镜,或是直接在图片上绘制!
|
||||
|
||||
<b>支持多种文件类型</b>
|
||||
与其他一些图库应用不同,简约图库 Pro 支持多种文件类型,包括JPEG,PNG,MP4,MKV,RAW,SVG,全景照片,全景视频等等。
|
||||
与其他一些图库应用不同,简易图库 Pro 支持多种文件类型,包括JPEG,PNG,MP4,MKV,RAW,SVG,全景照片,全景视频等等。
|
||||
|
||||
<b>高度可定制的图库</b>
|
||||
从UI到底部工具栏上的功能按钮,简约图库 Pro 可高度自定义并按您的要求工作。其他图库应用可没有这种灵活性!由于该应用是开源的,所以我们还提供 32 种语言!
|
||||
从UI到底部工具栏上的功能按钮,简易图库 Pro 可高度自定义并按您的要求工作。其他图库应用可没有这种灵活性!由于该应用是开源的,所以我们还提供 32 种语言!
|
||||
|
||||
<b>恢复已删除的照片和视频</b>
|
||||
意外删除了珍贵的照片或视频?别担心!简约图库 Pro 具有方便的回收站,您可以方便地恢复已删除的照片和视频。
|
||||
意外删除了珍贵的照片或视频?别担心!简易图库 Pro 具有方便的回收站,您可以方便地恢复已删除的照片和视频。
|
||||
|
||||
<b>保护并隐藏照片、视频和文件</b>
|
||||
使用密码、图案或指纹保护和隐藏照片、视频、或是整个相册。您也可以保护应用自身或禁用一些特定功能。 例如,只有指纹验证通过才可以删除文件,从而有效地防止您的文件被意外删除。
|
||||
|
||||
<b>查看简约系列的所有应用:</b>
|
||||
<b>于此查看简易工具系列全套:</b>
|
||||
https://www.simplemobiletools.com
|
||||
|
||||
<b>简约图库 Pro 的独立网站:</b>
|
||||
<b>简易图库 Pro 的独立网站:</b>
|
||||
https://www.simplemobiletools.com/gallery
|
||||
|
||||
<b>Facebook:</b>
|
||||
|
|
|
@ -190,6 +190,13 @@
|
|||
<string name="avoid_showing_invalid_files">避免顯示無效的檔案</string>
|
||||
<string name="show_image_file_types">Show image file types</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">縮圖</string>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<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="select_photo">選擇相片</string>
|
||||
<string name="volume">音量</string>
|
||||
<string name="brightness">亮度</string>
|
||||
<string name="lock_orientation">鎖定方向</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">找不到投影片的媒體檔案</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">改變瀏覽類型</string>
|
||||
<string name="grid">格狀</string>
|
||||
<string name="list">列表</string>
|
||||
<string name="group_direct_subfolders">歸類子資料夾</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">避免顯示無效的檔案</string>
|
||||
<string name="show_image_file_types">顯示圖片檔案類型</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">縮圖</string>
|
||||
|
|
|
@ -22,5 +22,5 @@
|
|||
<dimen name="default_status_action_height">86dp</dimen>
|
||||
<dimen name="widget_initial_size">110dp</dimen>
|
||||
<dimen name="full_brush_size">40dp</dimen>
|
||||
<dimen name="lock_padding">40dp</dimen>
|
||||
<dimen name="lock_padding">30dp</dimen>
|
||||
</resources>
|
||||
|
|
|
@ -15,10 +15,6 @@
|
|||
<string name="other_folder">Other folder</string>
|
||||
<string name="show_on_map">Show on map</string>
|
||||
<string name="unknown_location">Unknown location</string>
|
||||
<string name="increase_column_count">Increase column count</string>
|
||||
<string name="reduce_column_count">Reduce column count</string>
|
||||
<string name="change_cover_image">Change cover image</string>
|
||||
<string name="select_photo">Select photo</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Brightness</string>
|
||||
<string name="lock_orientation">Lock orientation</string>
|
||||
|
@ -125,9 +121,6 @@
|
|||
<string name="no_media_for_slideshow">No media for the slideshow have been found</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Change view type</string>
|
||||
<string name="grid">Grid</string>
|
||||
<string name="list">List</string>
|
||||
<string name="group_direct_subfolders">Group direct subfolders</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
|
@ -190,6 +183,13 @@
|
|||
<string name="avoid_showing_invalid_files">Avoid showing invalid files</string>
|
||||
<string name="show_image_file_types">Show image file types</string>
|
||||
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
|
||||
<string name="folder_thumbnail_style">Folder thumbnail style</string>
|
||||
<string name="show_file_count_line">Show file count on a separate line</string>
|
||||
<string name="show_file_count_brackets">Show file count in brackets</string>
|
||||
<string name="show_file_count_none">Do not show file count</string>
|
||||
<string name="limit_folder_title">Limit folder title to 1 line</string>
|
||||
<string name="square">Square</string>
|
||||
<string name="rounded_corners">Rounded corners</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
|
@ -319,7 +319,7 @@
|
|||
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
|
||||
<string name="app_title">Simple Gallery Pro - Photo Manager & Editor</string>
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
<string name="app_short_description">Browse your memories without any interruptions with this photo and video gallery</string>
|
||||
<string name="app_short_description">A premium app for managing and editing your photos, videos, GIFs without ads</string>
|
||||
<string name="app_long_description">
|
||||
Simple Gallery Pro is a highly customizable offline gallery. Organize & edit your photos, recover deleted files with the recycle bin, protect & hide files and view a huge variety of different photo & video formats including RAW, SVG and much more.
|
||||
|
||||
|
|
|
@ -8,27 +8,26 @@ import android.net.Uri
|
|||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.provider.MediaStore
|
||||
import androidx.core.util.Pair
|
||||
import com.simplemobiletools.commons.asynctasks.CopyMoveTask
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.CONFLICT_OVERWRITE
|
||||
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE
|
||||
import com.simplemobiletools.commons.helpers.REAL_FILE_PATH
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
import com.simplemobiletools.commons.helpers.isNougatPlus
|
||||
import com.simplemobiletools.commons.interfaces.CopyMoveListener
|
||||
import com.simplemobiletools.commons.models.FileDirItem
|
||||
import com.simplemobiletools.gallery.pro.R
|
||||
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.tryDeleteFileDirItem
|
||||
import ly.img.android.pesdk.PhotoEditorSettingsList
|
||||
import ly.img.android.pesdk.assets.filter.basic.FilterPackBasic
|
||||
import ly.img.android.pesdk.assets.font.basic.FontPackBasic
|
||||
import ly.img.android.pesdk.backend.model.config.CropAspectAsset
|
||||
import ly.img.android.pesdk.backend.model.constant.ImageExportFormat
|
||||
import ly.img.android.pesdk.backend.model.constant.OutputMode
|
||||
import ly.img.android.pesdk.backend.model.state.BrushSettings
|
||||
import ly.img.android.pesdk.backend.model.state.LoadSettings
|
||||
import ly.img.android.pesdk.backend.model.state.PhotoEditorSaveSettings
|
||||
import ly.img.android.pesdk.backend.model.state.SaveSettings
|
||||
import ly.img.android.pesdk.backend.model.state.manager.SettingsList
|
||||
import ly.img.android.pesdk.ui.activity.PhotoEditorBuilder
|
||||
import ly.img.android.pesdk.ui.model.state.*
|
||||
|
@ -37,16 +36,14 @@ import ly.img.android.pesdk.ui.panels.item.ToggleAspectItem
|
|||
import ly.img.android.pesdk.ui.panels.item.ToolItem
|
||||
import java.io.File
|
||||
import java.io.InputStream
|
||||
import kotlin.collections.set
|
||||
import java.io.OutputStream
|
||||
|
||||
class NewEditActivity : SimpleActivity() {
|
||||
private val PESDK_EDIT_IMAGE = 1
|
||||
private val SETTINGS_LIST = "SETTINGS_LIST"
|
||||
private val RESULT_IMAGE_PATH = "RESULT_IMAGE_PATH"
|
||||
private val SOURCE_URI = "SOURCE_URI"
|
||||
private val RESULT_URI = "RESULT_URI"
|
||||
private var sourceFileLastModified = 0L
|
||||
private var destinationFilePath = ""
|
||||
private var cacheImagePathFromEditor = "" // delete the file stored at the internal app cache storage (the editor saves it there) in case moving to the selected location fails
|
||||
private var sourceImageUri: Uri? = null
|
||||
private var oldExif: ExifInterface? = null
|
||||
|
||||
private lateinit var uri: Uri
|
||||
|
@ -108,8 +105,8 @@ class NewEditActivity : SimpleActivity() {
|
|||
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
|
||||
if (requestCode == PESDK_EDIT_IMAGE) {
|
||||
val extras = resultData?.extras
|
||||
cacheImagePathFromEditor = extras?.getString(RESULT_IMAGE_PATH, "") ?: ""
|
||||
|
||||
val resultPath = extras?.get(RESULT_URI)?.toString() ?: ""
|
||||
val sourcePath = Uri.decode(extras?.get(SOURCE_URI)?.toString() ?: "")
|
||||
val settings = extras?.getParcelable<SettingsList>(SETTINGS_LIST)
|
||||
if (settings != null) {
|
||||
val brush = settings.getSettingsModel(BrushSettings::class.java)
|
||||
|
@ -118,45 +115,69 @@ class NewEditActivity : SimpleActivity() {
|
|||
config.editorBrushSize = brush.brushSize
|
||||
}
|
||||
|
||||
if (resultCode != Activity.RESULT_OK || sourceImageUri == null || sourceImageUri.toString().isEmpty() || cacheImagePathFromEditor.isEmpty() || sourceImageUri.toString() == cacheImagePathFromEditor) {
|
||||
if (resultCode != Activity.RESULT_OK || resultPath.isEmpty()) {
|
||||
toast(R.string.image_editing_cancelled)
|
||||
finish()
|
||||
} else {
|
||||
// the image is stored at the internal app storage first, for example /data/user/0/com.simplemobiletools.gallery.pro/cache/editor/IMG_20191207_183023.jpg
|
||||
// first we rename it to the desired name, then move
|
||||
val sourceString = Uri.decode(sourceImageUri.toString())?.toString() ?: ""
|
||||
val source = if (sourceString.isEmpty() || sourceString.startsWith("content")) {
|
||||
val source = if (sourcePath.isEmpty() || sourcePath.startsWith("content")) {
|
||||
internalStoragePath
|
||||
} else {
|
||||
sourceString.substringAfter("file://")
|
||||
}
|
||||
|
||||
if (source == cacheImagePathFromEditor) {
|
||||
finish()
|
||||
return
|
||||
sourcePath.substringAfter("file://")
|
||||
}
|
||||
|
||||
SaveAsDialog(this, source, true, cancelCallback = {
|
||||
toast(R.string.image_editing_failed)
|
||||
finish()
|
||||
}, callback = {
|
||||
destinationFilePath = it
|
||||
val destinationFilePath = it
|
||||
handleSAFDialog(destinationFilePath) {
|
||||
if (it) {
|
||||
storeOldExif(source)
|
||||
sourceFileLastModified = File(source).lastModified()
|
||||
val newFile = File("${cacheImagePathFromEditor.getParentPath()}/${destinationFilePath.getFilenameFromPath()}")
|
||||
File(cacheImagePathFromEditor).renameTo(newFile)
|
||||
val sourceFile = FileDirItem(newFile.absolutePath, newFile.name)
|
||||
ensureBackgroundThread {
|
||||
storeOldExif(source)
|
||||
sourceFileLastModified = File(source).lastModified()
|
||||
|
||||
val conflictResolutions = LinkedHashMap<String, Int>()
|
||||
conflictResolutions[destinationFilePath] = CONFLICT_OVERWRITE
|
||||
handleFileOverwriting(destinationFilePath) {
|
||||
var inputStream: InputStream? = null
|
||||
var outputStream: OutputStream? = null
|
||||
try {
|
||||
inputStream = contentResolver.openInputStream(Uri.parse(resultPath))
|
||||
outputStream = getFileOutputStreamSync(destinationFilePath, destinationFilePath.getMimeType())
|
||||
inputStream!!.copyTo(outputStream!!)
|
||||
outputStream.flush()
|
||||
inputStream.close()
|
||||
outputStream.close()
|
||||
|
||||
val pair = Pair(arrayListOf(sourceFile), destinationFilePath.getParentPath())
|
||||
CopyMoveTask(this, false, true, conflictResolutions, editCopyMoveListener, true).execute(pair)
|
||||
try {
|
||||
if (isNougatPlus()) {
|
||||
val newExif = ExifInterface(destinationFilePath)
|
||||
oldExif?.copyTo(newExif, false)
|
||||
}
|
||||
} catch (ignored: Exception) {
|
||||
}
|
||||
|
||||
if (config.keepLastModified) {
|
||||
// add 1 s to the last modified time to properly update the thumbnail
|
||||
updateLastModified(destinationFilePath, sourceFileLastModified + 1000)
|
||||
}
|
||||
|
||||
val paths = arrayListOf(destinationFilePath)
|
||||
rescanPaths(arrayListOf(destinationFilePath)) {
|
||||
fixDateTaken(paths, false)
|
||||
}
|
||||
|
||||
setResult(Activity.RESULT_OK, intent)
|
||||
toast(R.string.file_edited_successfully)
|
||||
finish()
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
} finally {
|
||||
inputStream?.close()
|
||||
outputStream?.close()
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
toast(R.string.image_editing_failed)
|
||||
File(cacheImagePathFromEditor).delete()
|
||||
finish()
|
||||
}
|
||||
}
|
||||
|
@ -180,43 +201,25 @@ class NewEditActivity : SimpleActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
private val editCopyMoveListener = object : CopyMoveListener {
|
||||
override fun copySucceeded(copyOnly: Boolean, copiedAll: Boolean, destinationPath: String) {
|
||||
try {
|
||||
if (isNougatPlus()) {
|
||||
val newExif = ExifInterface(destinationFilePath)
|
||||
oldExif?.copyTo(newExif, false)
|
||||
// in case the user wants to overwrite the original file and it is on an SD card, delete it manually. Else the system just appends (1)
|
||||
private fun handleFileOverwriting(path: String, callback: () -> Unit) {
|
||||
if (getDoesFilePathExist(path) && isPathOnSD(path)) {
|
||||
val fileDirItem = FileDirItem(path, path.getFilenameFromPath())
|
||||
tryDeleteFileDirItem(fileDirItem, false, true) { success ->
|
||||
if (success) {
|
||||
callback()
|
||||
} else {
|
||||
toast(R.string.unknown_error_occurred)
|
||||
finish()
|
||||
}
|
||||
} catch (ignored: Exception) {
|
||||
}
|
||||
|
||||
if (config.keepLastModified) {
|
||||
// add 1 s to the last modified time to properly update the thumbnail
|
||||
updateLastModified(destinationFilePath, sourceFileLastModified + 1000)
|
||||
}
|
||||
|
||||
val paths = arrayListOf(destinationFilePath)
|
||||
rescanPaths(paths) {
|
||||
fixDateTaken(paths, false)
|
||||
}
|
||||
|
||||
setResult(Activity.RESULT_OK, intent)
|
||||
toast(R.string.file_edited_successfully)
|
||||
finish()
|
||||
}
|
||||
|
||||
override fun copyFailed() {
|
||||
toast(R.string.unknown_error_occurred)
|
||||
File(cacheImagePathFromEditor).delete()
|
||||
finish()
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
}
|
||||
|
||||
private fun openEditor(inputImage: Uri) {
|
||||
sourceImageUri = inputImage
|
||||
val filename = inputImage.toString().getFilenameFromPath()
|
||||
|
||||
val settingsList = createPesdkSettingsList(filename)
|
||||
val settingsList = createPesdkSettingsList()
|
||||
|
||||
settingsList.configure<LoadSettings> {
|
||||
it.source = inputImage
|
||||
|
@ -225,11 +228,11 @@ class NewEditActivity : SimpleActivity() {
|
|||
settingsList[LoadSettings::class].source = inputImage
|
||||
|
||||
PhotoEditorBuilder(this)
|
||||
.setSettingsList(settingsList)
|
||||
.startActivityForResult(this, PESDK_EDIT_IMAGE)
|
||||
.setSettingsList(settingsList)
|
||||
.startActivityForResult(this, PESDK_EDIT_IMAGE)
|
||||
}
|
||||
|
||||
private fun createPesdkSettingsList(filename: String): PhotoEditorSettingsList {
|
||||
private fun createPesdkSettingsList(): PhotoEditorSettingsList {
|
||||
val settingsList = PhotoEditorSettingsList().apply {
|
||||
configure<UiConfigFilter> {
|
||||
it.setFilterList(FilterPackBasic.getFilterPack())
|
||||
|
@ -285,9 +288,9 @@ class NewEditActivity : SimpleActivity() {
|
|||
getSettingsModel(UiConfigTheme::class.java).theme = R.style.Imgly_Theme_NoFullscreen
|
||||
|
||||
configure<PhotoEditorSaveSettings> {
|
||||
it.exportFormat = SaveSettings.FORMAT.AUTO
|
||||
it.setOutputFilePath("$cacheDir/editor/$filename")
|
||||
it.savePolicy = SaveSettings.SavePolicy.RETURN_SOURCE_OR_CREATE_OUTPUT_IF_NECESSARY
|
||||
it.setExportFormat(ImageExportFormat.AUTO)
|
||||
it.setOutputToTemp()
|
||||
it.outputMode = OutputMode.EXPORT_IF_NECESSARY
|
||||
}
|
||||
}
|
||||
|
||||
|
|