Merge pull request #35 from SimpleMobileTools/master

upd
This commit is contained in:
solokot 2018-08-24 22:31:02 +03:00 committed by GitHub
commit 5cb9235bd6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
62 changed files with 882 additions and 504 deletions

View file

@ -1,6 +1,60 @@
Changelog
==========
Version 4.6.1 *(2018-08-21)*
----------------------------
* Added a crashfix at loading fullscreen images
Version 4.6.0 *(2018-08-20)*
----------------------------
* Added support for SVGs
* Improved fullscreen image quality and performance
* Properly show files with hastags and percentage signs in their paths
* Many other smaller UX improvements
Version 4.5.2 *(2018-08-08)*
----------------------------
* Adding a toggle for disabling deep zoomable images
* Fix displaying third party images
* Couple smaller UX fixes
Version 4.5.1 *(2018-08-07)*
----------------------------
* Adding a crashfix
Version 4.5.0 *(2018-08-07)*
----------------------------
* Use real Move instead of the old copy/delete if both source and destination are on the internal storage
* Remake the fullscreen view, always use deep zoomable images with good quality
* Couple stability improvements
Version 4.4.4 *(2018-08-02)*
----------------------------
* Adding a crashfix
Version 4.4.3 *(2018-08-01)*
----------------------------
* Removed the More Donating Options from the Purchase Thank You dialog
Version 4.4.2 *(2018-08-01)*
----------------------------
* Removed the homepage from About section
Version 4.4.1 *(2018-07-30)*
----------------------------
* Hide both Play and Pause video buttons after 2 secs
* Improved Immersive mode fullscreen behaviour
* Some other stability improvements
Version 4.4.0 *(2018-07-26)*
----------------------------

View file

@ -11,8 +11,8 @@ android {
applicationId "com.simplemobiletools.gallery"
minSdkVersion 16
targetSdkVersion 27
versionCode 188
versionName "4.4.0"
versionCode 197
versionName "4.6.1"
multiDexEnabled true
setProperty("archivesBaseName", "gallery")
}
@ -47,17 +47,19 @@ ext {
}
dependencies {
implementation 'com.simplemobiletools:commons:4.5.10'
implementation 'com.simplemobiletools:commons:4.6.14'
implementation 'com.theartofdev.edmodo:android-image-cropper:2.7.0'
implementation 'com.android.support:multidex:1.0.3'
implementation 'it.sephiroth.android.exif:library:1.0.1'
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.12'
implementation 'com.github.chrisbanes:PhotoView:2.1.3'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
implementation 'com.google.android.exoplayer:exoplayer-core:2.8.2'
implementation 'com.google.vr:sdk-panowidget:1.150.0'
implementation 'org.apache.sanselan:sanselan:0.97-incubator'
implementation 'info.androidhive:imagefilters:1.0.7'
implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'com.caverock:androidsvg-aar:1.3'
kapt 'com.github.bumptech.glide:compiler:4.8.0' // keep it here too, not just in Commons, else loading SVGs wont work
kapt "android.arch.persistence.room:compiler:1.1.1"
implementation "android.arch.persistence.room:runtime:1.1.1"
@ -66,6 +68,9 @@ dependencies {
//implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.9.0'
implementation 'com.github.tibbi:subsampling-scale-image-view:v3.10.0-fork'
// implementation 'com.github.chrisbanes:PhotoView:2.1.4'
implementation 'com.github.tibbi:PhotoView:2.1.4-fork'
debugImplementation "com.squareup.leakcanary:leakcanary-android:$leakCanaryVersion"
releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$leakCanaryVersion"
}

View file

@ -1,3 +1,9 @@
-keep class com.simplemobiletools.** { *; }
-dontwarn com.simplemobiletools.**
-dontwarn org.apache.**
# Picasso
-dontwarn javax.annotation.**
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
-dontwarn org.codehaus.mojo.animal_sniffer.*
-dontwarn okhttp3.internal.platform.ConscryptPlatform

View file

@ -33,6 +33,7 @@ import com.simplemobiletools.gallery.extensions.*
import com.simplemobiletools.gallery.helpers.*
import com.simplemobiletools.gallery.interfaces.DirectoryDao
import com.simplemobiletools.gallery.interfaces.DirectoryOperationsListener
import com.simplemobiletools.gallery.interfaces.MediumDao
import com.simplemobiletools.gallery.models.AlbumCover
import com.simplemobiletools.gallery.models.Directory
import com.simplemobiletools.gallery.models.Medium
@ -73,13 +74,23 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
private var mStoredTextColor = 0
private var mStoredPrimaryColor = 0
private lateinit var mMediumDao: MediumDao
private lateinit var mDirectoryDao: DirectoryDao
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
appLaunched(BuildConfig.APPLICATION_ID)
config.temporarilyShowHidden = false
config.tempSkipDeleteConfirmation = false
mMediumDao = galleryDB.MediumDao()
mDirectoryDao = galleryDB.DirectoryDao()
if (savedInstanceState == null) {
config.temporarilyShowHidden = false
config.tempSkipDeleteConfirmation = false
removeTempFolder()
}
mIsPickImageIntent = isPickImageIntent(intent)
mIsPickVideoIntent = isPickVideoIntent(intent)
mIsGetImageContentIntent = isGetImageContentIntent(intent)
@ -90,7 +101,6 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
mIsThirdPartyIntent = mIsPickImageIntent || mIsPickVideoIntent || mIsGetImageContentIntent || mIsGetVideoContentIntent ||
mIsGetAnyContentIntent || mIsSetWallpaperIntent
removeTempFolder()
directories_refresh_layout.setOnRefreshListener { getDirectories() }
storeStateVariables()
checkWhatsNewDialog()
@ -123,6 +133,13 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
config.saveFolderGrouping(SHOW_ALL, GROUP_BY_DATE_TAKEN or GROUP_DESCENDING)
}
if (!config.wasSVGShowingHandled) {
config.wasSVGShowingHandled = true
if (config.filterMedia and TYPE_SVGS == 0) {
config.filterMedia += TYPE_SVGS
}
}
checkRecycleBinItems()
}
@ -209,11 +226,11 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
override fun onDestroy() {
super.onDestroy()
config.temporarilyShowHidden = false
config.tempSkipDeleteConfirmation = false
mTempShowHiddenHandler.removeCallbacksAndMessages(null)
removeTempFolder()
if (!isChangingConfigurations) {
config.temporarilyShowHidden = false
config.tempSkipDeleteConfirmation = false
mTempShowHiddenHandler.removeCallbacksAndMessages(null)
removeTempFolder()
GalleryDatabase.destroyInstance()
}
}
@ -329,7 +346,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
val getImagesOnly = mIsPickImageIntent || mIsGetImageContentIntent
val getVideosOnly = mIsPickVideoIntent || mIsGetVideoContentIntent
getCachedDirectories(getVideosOnly, getImagesOnly) {
getCachedDirectories(getVideosOnly, getImagesOnly, mDirectoryDao) {
gotDirectories(addTempFolderIfNeeded(it))
}
}
@ -413,10 +430,10 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
val pathsToDelete = ArrayList<String>()
fileDirItems.filter { it.isDirectory }.forEach {
val files = File(it.path).listFiles()
files?.filter { it.absolutePath.isImageVideoGif() }?.mapTo(pathsToDelete) { it.absolutePath }
files?.filter { it.absolutePath.isMediaFile() }?.mapTo(pathsToDelete) { it.absolutePath }
}
movePathsInRecycleBin(pathsToDelete) {
movePathsInRecycleBin(pathsToDelete, mMediumDao) {
if (it) {
deleteFilteredFolders(fileDirItems, folders)
} else {
@ -435,9 +452,8 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
}
Thread {
val directoryDao = galleryDB.DirectoryDao()
folders.filter { !it.exists() }.forEach {
directoryDao.deleteDirPath(it.absolutePath)
mDirectoryDao.deleteDirPath(it.absolutePath)
}
}.start()
}
@ -693,8 +709,6 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
val albumCovers = config.parseAlbumCovers()
val includedFolders = config.includedFolders
val isSortingAscending = config.directorySorting and SORT_DESCENDING == 0
val mediumDao = galleryDB.MediumDao()
val directoryDao = galleryDB.DirectoryDao()
val getProperDateTaken = config.directorySorting and SORT_BY_DATE_TAKEN != 0
val favoritePaths = getFavoritePaths()
@ -729,16 +743,16 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
showSortedDirs(dirs)
// update directories and media files in the local db, delete invalid items
updateDBDirectory(directory)
updateDBDirectory(directory, mDirectoryDao)
if (!directory.isRecycleBin()) {
mediumDao.insertAll(curMedia)
mMediumDao.insertAll(curMedia)
}
getCachedMedia(directory.path, getVideosOnly, getImagesOnly) {
getCachedMedia(directory.path, getVideosOnly, getImagesOnly, mMediumDao) {
it.forEach {
if (!curMedia.contains(it)) {
val path = (it as? Medium)?.path
if (path != null) {
mediumDao.deleteMediumPath(path)
mMediumDao.deleteMediumPath(path)
}
}
}
@ -782,9 +796,9 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
val newDir = createDirectoryFromMedia(folder, newMedia, albumCovers, hiddenString, includedFolders, isSortingAscending)
dirs.add(newDir)
showSortedDirs(dirs)
directoryDao.insert(newDir)
mDirectoryDao.insert(newDir)
if (folder != RECYCLE_BIN) {
mediumDao.insertAll(newMedia)
mMediumDao.insertAll(newMedia)
}
}
@ -795,7 +809,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
directories_refresh_layout.isRefreshing = false
checkPlaceholderVisibility(dirs)
}
checkInvalidDirectories(dirs, directoryDao)
checkInvalidDirectories(dirs)
val everShownFolders = config.everShownFolders as HashSet
dirs.mapTo(everShownFolders) { it.path }
@ -895,14 +909,14 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
}
}
private fun checkInvalidDirectories(dirs: ArrayList<Directory>, directoryDao: DirectoryDao) {
private fun checkInvalidDirectories(dirs: ArrayList<Directory>) {
val invalidDirs = ArrayList<Directory>()
dirs.filter { !it.areFavorites() && !it.isRecycleBin() }.forEach {
if (!getDoesFilePathExist(it.path)) {
invalidDirs.add(it)
} else if (it.path != config.tempFolderPath) {
val children = if (it.path.startsWith(OTG_PATH)) getOTGFolderChildrenNames(it.path) else File(it.path).list()?.asList()
val hasMediaFile = children?.any { it.isImageVideoGif() } ?: false
val hasMediaFile = children?.any { it.isMediaFile() } ?: false
if (!hasMediaFile) {
invalidDirs.add(it)
}
@ -918,7 +932,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
if (config.useRecycleBin) {
val binFolder = dirs.firstOrNull { it.path == RECYCLE_BIN }
if (binFolder != null && galleryDB.MediumDao().getDeletedMedia().isEmpty()) {
if (binFolder != null && mMediumDao.getDeletedMedia().isEmpty()) {
invalidDirs.add(binFolder)
}
}
@ -927,7 +941,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
dirs.removeAll(invalidDirs)
showSortedDirs(dirs)
invalidDirs.forEach {
directoryDao.deleteDirPath(it.path)
mDirectoryDao.deleteDirPath(it.path)
}
}
}
@ -971,11 +985,10 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
private fun checkRecycleBinItems() {
if (config.useRecycleBin) {
Thread {
val mediumDao = galleryDB.MediumDao()
val deletedMedia = mediumDao.getDeletedMedia()
val deletedMedia = mMediumDao.getDeletedMedia()
deletedMedia.forEach {
if (System.currentTimeMillis() > it.deletedTS + MONTH_MILLISECONDS) {
mediumDao.deleteMediumPath(it.path)
mMediumDao.deleteMediumPath(it.path)
}
}
}.start()
@ -994,7 +1007,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
override fun updateDirectories(directories: ArrayList<Directory>) {
Thread {
storeDirectoryItems(directories)
storeDirectoryItems(directories, mDirectoryDao)
removeInvalidDBDirectories()
}.start()
}

View file

@ -39,7 +39,9 @@ import com.simplemobiletools.gallery.dialogs.ExcludeFolderDialog
import com.simplemobiletools.gallery.dialogs.FilterMediaDialog
import com.simplemobiletools.gallery.extensions.*
import com.simplemobiletools.gallery.helpers.*
import com.simplemobiletools.gallery.interfaces.DirectoryDao
import com.simplemobiletools.gallery.interfaces.MediaOperationsListener
import com.simplemobiletools.gallery.interfaces.MediumDao
import com.simplemobiletools.gallery.models.Medium
import com.simplemobiletools.gallery.models.ThumbnailItem
import com.simplemobiletools.gallery.models.ThumbnailSection
@ -75,6 +77,9 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
private var mStoredTextColor = 0
private var mStoredPrimaryColor = 0
private lateinit var mMediumDao: MediumDao
private lateinit var mDirectoryDao: DirectoryDao
companion object {
var mMedia = ArrayList<ThumbnailItem>()
}
@ -82,6 +87,10 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_media)
mMediumDao = galleryDB.MediumDao()
mDirectoryDao = galleryDB.DirectoryDao()
intent.apply {
mIsGetImageIntent = getBooleanExtra(GET_IMAGE_INTENT, false)
mIsGetVideoIntent = getBooleanExtra(GET_VIDEO_INTENT, false)
@ -179,7 +188,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
override fun onDestroy() {
super.onDestroy()
if (config.showAll) {
if (config.showAll && !isChangingConfigurations) {
config.temporarilyShowHidden = false
config.tempSkipDeleteConfirmation = false
}
@ -445,9 +454,9 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
private fun restoreAllFiles() {
val paths = mMedia.filter { it is Medium }.map { (it as Medium).path } as ArrayList<String>
restoreRecycleBinPaths(paths) {
restoreRecycleBinPaths(paths, mMediumDao) {
Thread {
galleryDB.DirectoryDao().deleteDirPath(RECYCLE_BIN)
mDirectoryDao.deleteDirPath(RECYCLE_BIN)
}.start()
finish()
}
@ -524,7 +533,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
}
private fun deleteDirectoryIfEmpty() {
val fileDirItem = FileDirItem(mPath, mPath.getFilenameFromPath())
val fileDirItem = FileDirItem(mPath, mPath.getFilenameFromPath(), true)
if (config.deleteEmptyFolders && !fileDirItem.isDownloadsFolder() && fileDirItem.isDirectory && fileDirItem.getProperFileCount(applicationContext, true) == 0) {
tryDeleteFileDirItem(fileDirItem, true, true)
}
@ -537,7 +546,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
mIsGettingMedia = true
if (!mLoadedInitialPhotos) {
getCachedMedia(mPath, mIsGetVideoIntent, mIsGetImageIntent) {
getCachedMedia(mPath, mIsGetVideoIntent, mIsGetImageIntent, mMediumDao) {
if (it.isEmpty()) {
runOnUiThread {
media_refresh_layout.isRefreshing = true
@ -575,7 +584,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
if (mPath == FAVORITES) {
Thread {
galleryDB.DirectoryDao().deleteDirPath(FAVORITES)
mDirectoryDao.deleteDirPath(FAVORITES)
}.start()
}
@ -588,7 +597,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
private fun deleteDBDirectory() {
Thread {
galleryDB.DirectoryDao().deleteDirPath(mPath)
mDirectoryDao.deleteDirPath(mPath)
}.start()
}
@ -815,17 +824,20 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
mLatestMediaDateId = getLatestMediaByDateId()
if (!isFromCache) {
val mediaToInsert = (mMedia).filter { it is Medium && it.deletedTS == 0L }.map { it as Medium }
galleryDB.MediumDao().insertAll(mediaToInsert)
try {
mMediumDao.insertAll(mediaToInsert)
} catch (e: Exception) {
}
}
}
override fun tryDeleteFiles(fileDirItems: ArrayList<FileDirItem>) {
val filtered = fileDirItems.filter { it.path.isImageVideoGif() } as ArrayList
val filtered = fileDirItems.filter { it.path.isMediaFile() } as ArrayList
val deletingItems = resources.getQuantityString(R.plurals.deleting_items, filtered.size, filtered.size)
toast(deletingItems)
if (config.useRecycleBin && !filtered.first().path.startsWith(filesDir.absolutePath)) {
movePathsInRecycleBin(filtered.map { it.path } as ArrayList<String>) {
movePathsInRecycleBin(filtered.map { it.path } as ArrayList<String>, mMediumDao) {
if (it) {
deleteFilteredFiles(filtered)
} else {
@ -847,11 +859,10 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
mMedia.removeAll { filtered.map { it.path }.contains((it as? Medium)?.path) }
Thread {
val mediumDao = galleryDB.MediumDao()
val useRecycleBin = config.useRecycleBin
filtered.forEach {
if (!useRecycleBin) {
mediumDao.deleteMediumPath(it.path)
mMediumDao.deleteMediumPath(it.path)
}
}
}.start()

View file

@ -91,7 +91,8 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
filename.isImageFast() -> TYPE_IMAGES
filename.isVideoFast() -> TYPE_VIDEOS
filename.isGif() -> TYPE_GIFS
else -> TYPE_RAWS
filename.isRawFast() -> TYPE_RAWS
else -> TYPE_SVGS
}
mMedium = Medium(null, filename, mUri.toString(), mUri!!.path.getParentPath(), 0, 0, file.length(), type, false, 0L)

View file

@ -66,9 +66,9 @@ class SettingsActivity : SimpleActivity() {
setupKeepLastModified()
setupShowInfoBubble()
setupEnablePullToRefresh()
setupAllowZoomingImages()
setupOneFingerZoom()
setupAllowInstantChange()
setupReplaceZoomableImages()
setupShowExtendedDetails()
setupHideExtendedDetails()
setupManageExtendedDetails()
@ -335,6 +335,15 @@ class SettingsActivity : SimpleActivity() {
}
}
private fun setupAllowZoomingImages() {
settings_allow_zooming_images.isChecked = config.allowZoomingImages
settings_allow_zooming_images_holder.setOnClickListener {
settings_allow_zooming_images.toggle()
config.allowZoomingImages = settings_allow_zooming_images.isChecked
settings_one_finger_zoom_holder.beVisibleIf(config.allowZoomingImages)
}
}
private fun setupOneFingerZoom() {
settings_one_finger_zoom.isChecked = config.oneFingerZoom
settings_one_finger_zoom_holder.setOnClickListener {
@ -351,14 +360,6 @@ class SettingsActivity : SimpleActivity() {
}
}
private fun setupReplaceZoomableImages() {
settings_replace_zoomable_images.isChecked = config.replaceZoomableImages
settings_replace_zoomable_images_holder.setOnClickListener {
settings_replace_zoomable_images.toggle()
config.replaceZoomableImages = settings_replace_zoomable_images.isChecked
}
}
private fun setupShowExtendedDetails() {
settings_show_extended_details.isChecked = config.showExtendedDetails
settings_show_extended_details_holder.setOnClickListener {

View file

@ -2,6 +2,7 @@ package com.simplemobiletools.gallery.activities
import android.animation.Animator
import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.annotation.TargetApi
import android.app.Activity
import android.content.Intent
@ -70,14 +71,12 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
private var mAreSlideShowMediaVisible = false
private var mIsOrientationLocked = false
private var mStoredReplaceZoomableImages = false
private var mMediaFiles = ArrayList<Medium>()
private var mFavoritePaths = ArrayList<String>()
companion object {
var screenWidth = 0
var screenHeight = 0
var wasDecodedByGlide = false
}
override fun onCreate(savedInstanceState: Bundle?) {
@ -94,7 +93,6 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
}
}
storeStateVariables()
initFavorites()
}
@ -114,11 +112,6 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
setTranslucentNavigation()
}
if (mStoredReplaceZoomableImages != config.replaceZoomableImages) {
mPrevHashcode = 0
refreshViewPager()
}
initBottomActions()
supportActionBar?.setBackgroundDrawable(resources.getDrawable(R.drawable.actionbar_gradient_background))
@ -139,7 +132,6 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
override fun onPause() {
super.onPause()
stopSlideshow()
storeStateVariables()
}
override fun onDestroy() {
@ -245,7 +237,12 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
}
window.decorView.setOnSystemUiVisibilityChangeListener { visibility ->
mIsFullScreen = visibility and View.SYSTEM_UI_FLAG_FULLSCREEN != 0
mIsFullScreen = if (visibility and View.SYSTEM_UI_FLAG_LOW_PROFILE == 0) {
false
} else {
visibility and View.SYSTEM_UI_FLAG_FULLSCREEN != 0
}
view_pager.adapter?.let {
(it as MyPagerAdapter).toggleFullscreen(mIsFullScreen)
checkSystemUI()
@ -293,13 +290,13 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
findItem(R.id.menu_properties).isVisible = visibleBottomActions and BOTTOM_ACTION_PROPERTIES == 0
findItem(R.id.menu_delete).isVisible = visibleBottomActions and BOTTOM_ACTION_DELETE == 0
findItem(R.id.menu_share).isVisible = visibleBottomActions and BOTTOM_ACTION_SHARE == 0
findItem(R.id.menu_edit).isVisible = visibleBottomActions and BOTTOM_ACTION_EDIT == 0
findItem(R.id.menu_rename).isVisible = visibleBottomActions and BOTTOM_ACTION_RENAME == 0
findItem(R.id.menu_edit).isVisible = visibleBottomActions and BOTTOM_ACTION_EDIT == 0 && !currentMedium.isSVG()
findItem(R.id.menu_rename).isVisible = visibleBottomActions and BOTTOM_ACTION_RENAME == 0 && !currentMedium.getIsInRecycleBin()
findItem(R.id.menu_rotate).isVisible = currentMedium.isImage() && visibleBottomActions and BOTTOM_ACTION_ROTATE == 0
findItem(R.id.menu_set_as).isVisible = visibleBottomActions and BOTTOM_ACTION_SET_AS == 0
findItem(R.id.menu_save_as).isVisible = mRotationDegrees != 0
findItem(R.id.menu_hide).isVisible = !currentMedium.isHidden() && visibleBottomActions and BOTTOM_ACTION_TOGGLE_VISIBILITY == 0
findItem(R.id.menu_unhide).isVisible = currentMedium.isHidden() && visibleBottomActions and BOTTOM_ACTION_TOGGLE_VISIBILITY == 0
findItem(R.id.menu_hide).isVisible = !currentMedium.isHidden() && visibleBottomActions and BOTTOM_ACTION_TOGGLE_VISIBILITY == 0 && !currentMedium.getIsInRecycleBin()
findItem(R.id.menu_unhide).isVisible = currentMedium.isHidden() && visibleBottomActions and BOTTOM_ACTION_TOGGLE_VISIBILITY == 0 && !currentMedium.getIsInRecycleBin()
findItem(R.id.menu_add_to_favorites).isVisible = !currentMedium.isFavorite && visibleBottomActions and BOTTOM_ACTION_TOGGLE_FAVORITE == 0
findItem(R.id.menu_remove_from_favorites).isVisible = currentMedium.isFavorite && visibleBottomActions and BOTTOM_ACTION_TOGGLE_FAVORITE == 0
findItem(R.id.menu_restore_file).isVisible = currentMedium.path.startsWith(filesDir.absolutePath)
@ -353,12 +350,6 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
return true
}
private fun storeStateVariables() {
config.apply {
mStoredReplaceZoomableImages = replaceZoomableImages
}
}
private fun updatePagerItems(media: MutableList<Medium>) {
val pagerAdapter = MyPagerAdapter(this, supportFragmentManager, media)
if (!isActivityDestroyed()) {
@ -468,7 +459,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
private fun scheduleSwipe() {
mSlideshowHandler.removeCallbacksAndMessages(null)
if (mIsSlideshowActive) {
if (getCurrentMedium()!!.isImage() || getCurrentMedium()!!.isGif()) {
if (getCurrentMedium()!!.isImage() || getCurrentMedium()!!.isGIF()) {
mSlideshowHandler.postDelayed({
if (mIsSlideshowActive && !isActivityDestroyed()) {
swipeToNextMedium()
@ -491,11 +482,11 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
}
if (!config.slideshowIncludeVideos) {
mSlideshowMedia = mSlideshowMedia.filter { it.isImage() || it.isGif() } as MutableList
mSlideshowMedia = mSlideshowMedia.filter { it.isImage() || it.isGIF() } as MutableList
}
if (!config.slideshowIncludeGIFs) {
mSlideshowMedia = mSlideshowMedia.filter { !it.isGif() } as MutableList
mSlideshowMedia = mSlideshowMedia.filter { !it.isGIF() } as MutableList
}
if (config.slideshowRandomOrder) {
@ -785,7 +776,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
toggleFavorite()
}
bottom_edit.beVisibleIf(visibleBottomActions and BOTTOM_ACTION_EDIT != 0)
bottom_edit.beVisibleIf(visibleBottomActions and BOTTOM_ACTION_EDIT != 0 && getCurrentMedium()?.isSVG() == false)
bottom_edit.setOnClickListener {
openEditor(getCurrentPath())
}
@ -839,7 +830,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
}
}
bottom_rename.beVisibleIf(visibleBottomActions and BOTTOM_ACTION_RENAME != 0)
bottom_rename.beVisibleIf(visibleBottomActions and BOTTOM_ACTION_RENAME != 0 && getCurrentMedium()?.getIsInRecycleBin() == false)
bottom_rename.setOnClickListener {
renameFile()
}
@ -922,7 +913,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
private fun deleteConfirmed() {
val path = getCurrentMedia().getOrNull(mPos)?.path ?: return
if (getIsPathDirectory(path) || !path.isImageVideoGif()) {
if (getIsPathDirectory(path) || !path.isMediaFile()) {
return
}
@ -975,9 +966,10 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
initBottomActionsLayout()
}
@SuppressLint("NewApi")
private fun measureScreen() {
val metrics = DisplayMetrics()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
if (isJellyBean1Plus()) {
windowManager.defaultDisplay.getRealMetrics(metrics)
screenWidth = metrics.widthPixels
screenHeight = metrics.heightPixels
@ -1104,7 +1096,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
private fun getCurrentMedia() = if (mAreSlideShowMediaVisible) mSlideshowMedia else mMediaFiles
private fun getCurrentPath() = getCurrentMedium()!!.path
private fun getCurrentPath() = getCurrentMedium()?.path ?: ""
private fun getCurrentFile() = File(getCurrentPath())

View file

@ -350,7 +350,7 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList<Directo
paths.addAll(getOTGFilePaths(path, showHidden))
} else if (path != FAVORITES) {
File(path).listFiles()?.filter {
!activity.getIsPathDirectory(it.absolutePath) && it.isImageVideoGif() && (showHidden || !it.name.startsWith('.'))
!activity.getIsPathDirectory(it.absolutePath) && it.isMediaFile() && (showHidden || !it.name.startsWith('.'))
}?.mapTo(paths) { it.absolutePath }
}
}
@ -366,7 +366,7 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList<Directo
private fun getOTGFilePaths(path: String, showHidden: Boolean): ArrayList<String> {
val paths = ArrayList<String>()
activity.getOTGFolderChildren(path)?.forEach {
if (!it.isDirectory && it.name.isImageVideoGif() && (showHidden || !it.name.startsWith('.'))) {
if (!it.isDirectory && it.name.isMediaFile() && (showHidden || !it.name.startsWith('.'))) {
val relativePath = it.uri.path.substringAfterLast("${activity.config.OTGPartition}:")
paths.add("$OTG_PATH$relativePath")
}
@ -524,7 +524,8 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList<Directo
directory.tmb.isImageFast() -> TYPE_IMAGES
directory.tmb.isVideoFast() -> TYPE_VIDEOS
directory.tmb.isGif() -> TYPE_GIFS
else -> TYPE_RAWS
directory.tmb.isRawFast() -> TYPE_RAWS
else -> TYPE_SVGS
}
activity.loadImage(thumbnailType, directory.tmb, dir_thumbnail, scrollHorizontally, animateGifs, cropThumbnails)

View file

@ -113,7 +113,7 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList<Thumbnai
override fun prepareActionMode(menu: Menu) {
menu.apply {
findItem(R.id.cab_rename).isVisible = isOneItemSelected()
findItem(R.id.cab_rename).isVisible = isOneItemSelected() && getSelectedMedia().firstOrNull()?.getIsInRecycleBin() == false
findItem(R.id.cab_open_with).isVisible = isOneItemSelected()
findItem(R.id.cab_confirm_selection).isVisible = isAGetIntent && allowMultiplePicks && selectedPositions.size > 0
findItem(R.id.cab_restore_recycle_bin_files).isVisible = getSelectedPaths().all { it.startsWith(activity.filesDir.absolutePath) }
@ -292,9 +292,11 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList<Thumbnai
Thread {
try {
val operations = ArrayList<ContentProviderOperation>()
val mediumDao = activity.galleryDB.MediumDao()
val paths = getSelectedPaths()
for (path in paths) {
val dateTime = ExifInterface(path).getAttribute(ExifInterface.TAG_DATETIME) ?: continue
val dateTime = ExifInterface(path).getAttribute(ExifInterface.TAG_DATETIME_ORIGINAL)
?: ExifInterface(path).getAttribute(ExifInterface.TAG_DATETIME)
val format = "yyyy:MM:dd kk:mm:ss"
val formatter = SimpleDateFormat(format, Locale.getDefault())
val timestamp = formatter.parse(dateTime).time
@ -312,6 +314,8 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList<Thumbnai
activity.contentResolver.applyBatch(MediaStore.AUTHORITY, operations)
operations.clear()
}
mediumDao.updateFavoriteDateTaken(path, timestamp)
}
activity.contentResolver.applyBatch(MediaStore.AUTHORITY, operations)

View file

@ -5,10 +5,7 @@ import com.simplemobiletools.commons.activities.BaseSimpleActivity
import com.simplemobiletools.commons.extensions.setupDialogStuff
import com.simplemobiletools.gallery.R
import com.simplemobiletools.gallery.extensions.config
import com.simplemobiletools.gallery.helpers.TYPE_GIFS
import com.simplemobiletools.gallery.helpers.TYPE_IMAGES
import com.simplemobiletools.gallery.helpers.TYPE_RAWS
import com.simplemobiletools.gallery.helpers.TYPE_VIDEOS
import com.simplemobiletools.gallery.helpers.*
import kotlinx.android.synthetic.main.dialog_filter_media.view.*
class FilterMediaDialog(val activity: BaseSimpleActivity, val callback: (result: Int) -> Unit) {
@ -21,6 +18,7 @@ class FilterMediaDialog(val activity: BaseSimpleActivity, val callback: (result:
filter_media_videos.isChecked = filterMedia and TYPE_VIDEOS != 0
filter_media_gifs.isChecked = filterMedia and TYPE_GIFS != 0
filter_media_raws.isChecked = filterMedia and TYPE_RAWS != 0
filter_media_svgs.isChecked = filterMedia and TYPE_SVGS != 0
}
AlertDialog.Builder(activity)
@ -41,6 +39,8 @@ class FilterMediaDialog(val activity: BaseSimpleActivity, val callback: (result:
result += TYPE_GIFS
if (view.filter_media_raws.isChecked)
result += TYPE_RAWS
if (view.filter_media_svgs.isChecked)
result += TYPE_SVGS
activity.config.filterMedia = result
callback(result)

View file

@ -21,7 +21,7 @@ class ManageBottomActionsDialog(val activity: BaseSimpleActivity, val callback:
manage_bottom_actions_rotate.isChecked = actions and BOTTOM_ACTION_ROTATE != 0
manage_bottom_actions_properties.isChecked = actions and BOTTOM_ACTION_PROPERTIES != 0
manage_bottom_actions_change_orientation.isChecked = actions and BOTTOM_ACTION_CHANGE_ORIENTATION != 0
manage_bottom_actions_slideshow.isChecked = actions and BOTTOM_ACTION_PROPERTIES != 0
manage_bottom_actions_slideshow.isChecked = actions and BOTTOM_ACTION_SLIDESHOW != 0
manage_bottom_actions_show_on_map.isChecked = actions and BOTTOM_ACTION_SHOW_ON_MAP != 0
manage_bottom_actions_toggle_visibility.isChecked = actions and BOTTOM_ACTION_TOGGLE_VISIBILITY != 0
manage_bottom_actions_rename.isChecked = actions and BOTTOM_ACTION_RENAME != 0

View file

@ -16,6 +16,7 @@ import com.simplemobiletools.gallery.R
import com.simplemobiletools.gallery.activities.SimpleActivity
import com.simplemobiletools.gallery.dialogs.PickDirectoryDialog
import com.simplemobiletools.gallery.helpers.NOMEDIA
import com.simplemobiletools.gallery.interfaces.MediumDao
import java.io.File
import java.io.InputStream
import java.io.OutputStream
@ -59,6 +60,9 @@ fun Activity.launchCamera() {
}
fun SimpleActivity.launchAbout() {
val licenses = LICENSE_GLIDE or LICENSE_CROPPER or LICENSE_MULTISELECT or LICENSE_RTL or LICENSE_SUBSAMPLING or LICENSE_PATTERN or
LICENSE_REPRINT or LICENSE_GIF_DRAWABLE or LICENSE_PHOTOVIEW or LICENSE_PICASSO or LICENSE_EXOPLAYER or LICENSE_PANORAMA_VIEW or LICENSE_SANSELAN or LICENSE_FILTERS
val faqItems = arrayListOf(
FAQItem(R.string.faq_5_title_commons, R.string.faq_5_text_commons),
FAQItem(R.string.faq_1_title, R.string.faq_1_text),
@ -69,15 +73,12 @@ fun SimpleActivity.launchAbout() {
FAQItem(R.string.faq_6_title, R.string.faq_6_text),
FAQItem(R.string.faq_7_title, R.string.faq_7_text),
FAQItem(R.string.faq_8_title, R.string.faq_8_text),
FAQItem(R.string.faq_9_title, R.string.faq_9_text),
FAQItem(R.string.faq_10_title, R.string.faq_10_text),
FAQItem(R.string.faq_11_title, R.string.faq_11_text),
FAQItem(R.string.faq_12_title, R.string.faq_12_text),
FAQItem(R.string.faq_2_title_commons, R.string.faq_2_text_commons))
startAboutActivity(R.string.app_name, LICENSE_GLIDE or LICENSE_CROPPER or LICENSE_MULTISELECT or LICENSE_RTL
or LICENSE_SUBSAMPLING or LICENSE_PATTERN or LICENSE_REPRINT or LICENSE_GIF_DRAWABLE or LICENSE_PHOTOVIEW or LICENSE_EXOPLAYER or
LICENSE_PANORAMA_VIEW or LICENSE_SANSELAN or LICENSE_FILTERS, BuildConfig.VERSION_NAME, faqItems)
startAboutActivity(R.string.app_name, licenses, BuildConfig.VERSION_NAME, faqItems, true)
}
fun AppCompatActivity.showSystemUI(toggleActionBarVisibility: Boolean) {
@ -200,9 +201,8 @@ fun BaseSimpleActivity.tryDeleteFileDirItem(fileDirItem: FileDirItem, allowDelet
}
}
fun BaseSimpleActivity.movePathsInRecycleBin(paths: ArrayList<String>, callback: ((wasSuccess: Boolean) -> Unit)?) {
fun BaseSimpleActivity.movePathsInRecycleBin(paths: ArrayList<String>, mediumDao: MediumDao = galleryDB.MediumDao(), callback: ((wasSuccess: Boolean) -> Unit)?) {
Thread {
val mediumDao = galleryDB.MediumDao()
var pathsCnt = paths.size
paths.forEach {
val file = File(it)
@ -220,12 +220,11 @@ fun BaseSimpleActivity.movePathsInRecycleBin(paths: ArrayList<String>, callback:
}
fun BaseSimpleActivity.restoreRecycleBinPath(path: String, callback: () -> Unit) {
restoreRecycleBinPaths(arrayListOf(path), callback)
restoreRecycleBinPaths(arrayListOf(path), galleryDB.MediumDao(), callback)
}
fun BaseSimpleActivity.restoreRecycleBinPaths(paths: ArrayList<String>, callback: () -> Unit) {
fun BaseSimpleActivity.restoreRecycleBinPaths(paths: ArrayList<String>, mediumDao: MediumDao = galleryDB.MediumDao(), callback: () -> Unit) {
Thread {
val mediumDao = galleryDB.MediumDao()
paths.forEach {
val source = it
val destination = it.removePrefix(filesDir.absolutePath)

View file

@ -1,9 +1,6 @@
package com.simplemobiletools.gallery.extensions
import com.simplemobiletools.gallery.helpers.TYPE_GIFS
import com.simplemobiletools.gallery.helpers.TYPE_IMAGES
import com.simplemobiletools.gallery.helpers.TYPE_RAWS
import com.simplemobiletools.gallery.helpers.TYPE_VIDEOS
import com.simplemobiletools.gallery.helpers.*
import com.simplemobiletools.gallery.models.Medium
fun ArrayList<Medium>.getDirMediaTypes(): Int {
@ -16,7 +13,7 @@ fun ArrayList<Medium>.getDirMediaTypes(): Int {
types += TYPE_VIDEOS
}
if (any { it.isGif() }) {
if (any { it.isGIF() }) {
types += TYPE_GIFS
}
@ -24,5 +21,9 @@ fun ArrayList<Medium>.getDirMediaTypes(): Int {
types += TYPE_RAWS
}
if (any { it.isSVG() }) {
types += TYPE_SVGS
}
return types
}

View file

@ -6,6 +6,7 @@ import android.content.res.Configuration
import android.database.Cursor
import android.database.sqlite.SQLiteException
import android.graphics.Point
import android.graphics.drawable.PictureDrawable
import android.media.AudioManager
import android.os.Build
import android.provider.MediaStore
@ -28,6 +29,7 @@ import com.simplemobiletools.gallery.interfaces.MediumDao
import com.simplemobiletools.gallery.models.Directory
import com.simplemobiletools.gallery.models.Medium
import com.simplemobiletools.gallery.models.ThumbnailItem
import com.simplemobiletools.gallery.svg.SvgSoftwareLayerSetter
import com.simplemobiletools.gallery.views.MySquareImageView
import pl.droidsonroids.gif.GifDrawable
import java.io.File
@ -181,9 +183,9 @@ fun Context.rescanFolderMediaSync(path: String) {
}
}
fun Context.storeDirectoryItems(items: ArrayList<Directory>) {
fun Context.storeDirectoryItems(items: ArrayList<Directory>, directoryDao: DirectoryDao) {
Thread {
galleryDB.DirectoryDao().insertAll(items)
directoryDao.insertAll(items)
}.start()
}
@ -232,6 +234,8 @@ fun Context.loadImage(type: Int, path: String, target: MySquareImageView, horizo
} catch (e: OutOfMemoryError) {
loadJpg(path, target, cropThumbnails)
}
} else if (type == TYPE_SVGS) {
loadSVG(path, target, cropThumbnails)
}
}
@ -277,12 +281,26 @@ fun Context.loadJpg(path: String, target: MySquareImageView, cropThumbnails: Boo
.load(path)
if (cropThumbnails) options.centerCrop() else options.fitCenter()
builder.apply(options).transition(DrawableTransitionOptions.withCrossFade()).into(target)
builder.apply(options)
.transition(DrawableTransitionOptions.withCrossFade())
.into(target)
}
fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly: Boolean = false, callback: (ArrayList<Directory>) -> Unit) {
fun Context.loadSVG(path: String, target: MySquareImageView, cropThumbnails: Boolean) {
target.scaleType = if (cropThumbnails) ImageView.ScaleType.CENTER_CROP else ImageView.ScaleType.FIT_CENTER
val options = RequestOptions().signature(path.getFileSignature())
Glide.with(applicationContext)
.`as`(PictureDrawable::class.java)
.listener(SvgSoftwareLayerSetter())
.load(path)
.apply(options)
.transition(DrawableTransitionOptions.withCrossFade())
.into(target)
}
fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly: Boolean = false, directoryDao: DirectoryDao = galleryDB.DirectoryDao(), callback: (ArrayList<Directory>) -> Unit) {
Thread {
val directoryDao = galleryDB.DirectoryDao()
val directories = try {
directoryDao.getAll() as ArrayList<Directory>
} catch (e: SQLiteException) {
@ -306,7 +324,8 @@ fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly:
(filterMedia and TYPE_IMAGES != 0 && it.types and TYPE_IMAGES != 0) ||
(filterMedia and TYPE_VIDEOS != 0 && it.types and TYPE_VIDEOS != 0) ||
(filterMedia and TYPE_GIFS != 0 && it.types and TYPE_GIFS != 0) ||
(filterMedia and TYPE_RAWS != 0 && it.types and TYPE_RAWS != 0)
(filterMedia and TYPE_RAWS != 0 && it.types and TYPE_RAWS != 0) ||
(filterMedia and TYPE_SVGS != 0 && it.types and TYPE_SVGS != 0)
}
}) as ArrayList<Directory>
@ -326,10 +345,10 @@ fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly:
}.start()
}
fun Context.getCachedMedia(path: String, getVideosOnly: Boolean = false, getImagesOnly: Boolean = false, callback: (ArrayList<ThumbnailItem>) -> Unit) {
fun Context.getCachedMedia(path: String, getVideosOnly: Boolean = false, getImagesOnly: Boolean = false, mediumDao: MediumDao = galleryDB.MediumDao(),
callback: (ArrayList<ThumbnailItem>) -> Unit) {
Thread {
val mediaFetcher = MediaFetcher(this)
val mediumDao = galleryDB.MediumDao()
val foldersToScan = if (path.isEmpty()) mediaFetcher.getFoldersToScan() else arrayListOf(path)
var media = ArrayList<Medium>()
if (path == FAVORITES) {
@ -361,7 +380,8 @@ fun Context.getCachedMedia(path: String, getVideosOnly: Boolean = false, getImag
(filterMedia and TYPE_IMAGES != 0 && it.type == TYPE_IMAGES) ||
(filterMedia and TYPE_VIDEOS != 0 && it.type == TYPE_VIDEOS) ||
(filterMedia and TYPE_GIFS != 0 && it.type == TYPE_GIFS) ||
(filterMedia and TYPE_RAWS != 0 && it.type == TYPE_RAWS)
(filterMedia and TYPE_RAWS != 0 && it.type == TYPE_RAWS) ||
(filterMedia and TYPE_SVGS != 0 && it.type == TYPE_SVGS)
}
}) as ArrayList<Medium>
@ -394,8 +414,8 @@ fun Context.updateDBMediaPath(oldPath: String, newPath: String) {
galleryDB.MediumDao().updateMedium(oldPath, newParentPath, newFilename, newPath)
}
fun Context.updateDBDirectory(directory: Directory) {
galleryDB.DirectoryDao().updateDirectory(directory.path, directory.tmb, directory.mediaCnt, directory.modified, directory.taken, directory.size, directory.types)
fun Context.updateDBDirectory(directory: Directory, directoryDao: DirectoryDao) {
directoryDao.updateDirectory(directory.path, directory.tmb, directory.mediaCnt, directory.modified, directory.taken, directory.size, directory.types)
}
fun Context.getOTGFolderChildren(path: String) = getDocumentFile(path)?.listFiles()

View file

@ -1,5 +1,6 @@
package com.simplemobiletools.gallery.fragments
import android.annotation.SuppressLint
import android.content.Intent
import android.content.res.Configuration
import android.graphics.Bitmap
@ -7,11 +8,12 @@ import android.graphics.BitmapFactory
import android.graphics.Color
import android.graphics.Matrix
import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.PictureDrawable
import android.media.ExifInterface.*
import android.net.Uri
import android.os.AsyncTask
import android.os.Bundle
import android.os.Handler
import android.util.DisplayMetrics
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@ -22,22 +24,22 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.RequestOptions
import com.bumptech.glide.request.target.Target
import com.davemorrissey.labs.subscaleview.ImageSource
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.OTG_PATH
import com.simplemobiletools.commons.helpers.isJellyBean1Plus
import com.simplemobiletools.commons.helpers.isLollipopPlus
import com.simplemobiletools.gallery.R
import com.simplemobiletools.gallery.activities.PanoramaActivity
import com.simplemobiletools.gallery.activities.PhotoActivity
import com.simplemobiletools.gallery.activities.ViewPagerActivity
import com.simplemobiletools.gallery.extensions.*
import com.simplemobiletools.gallery.helpers.GlideRotateTransformation
import com.simplemobiletools.gallery.helpers.MEDIUM
import com.simplemobiletools.gallery.helpers.PATH
import com.simplemobiletools.gallery.helpers.ROTATE_BY_ASPECT_RATIO
import com.simplemobiletools.gallery.helpers.*
import com.simplemobiletools.gallery.models.Medium
import com.simplemobiletools.gallery.svg.SvgSoftwareLayerSetter
import com.squareup.picasso.Callback
import com.squareup.picasso.Picasso
import it.sephiroth.android.library.exif2.ExifInterface
import kotlinx.android.synthetic.main.pager_photo_item.view.*
import org.apache.sanselan.common.byteSources.ByteSourceInputStream
@ -48,12 +50,11 @@ import java.io.FileOutputStream
class PhotoFragment : ViewPagerFragment() {
private val DEFAULT_DOUBLE_TAP_ZOOM = 2f
private val ZOOMABLE_VIEW_LOAD_DELAY = 1500L
private val ZOOMABLE_VIEW_LOAD_DELAY = 300L
private var isFragmentVisible = false
private var isFullscreen = false
private var wasInit = false
private var useHalfResolution = false
private var isPanorama = false
private var imageOrientation = -1
private var gifDrawable: GifDrawable? = null
@ -88,6 +89,10 @@ class PhotoFragment : ViewPagerFragment() {
}
}
if (ViewPagerActivity.screenWidth == 0 || ViewPagerActivity.screenHeight == 0) {
measureScreen()
}
storeStateVariables()
if (!isFragmentVisible && activity is PhotoActivity) {
isFragmentVisible = true
@ -152,6 +157,7 @@ class PhotoFragment : ViewPagerFragment() {
photo_brightness_controller.beVisibleIf(allowPhotoGestures)
instant_prev_item.beVisibleIf(allowInstantChange)
instant_next_item.beVisibleIf(allowInstantChange)
photo_view.setAllowFingerDragZoom(activity!!.config.oneFingerZoom)
}
storeStateVariables()
@ -161,7 +167,7 @@ class PhotoFragment : ViewPagerFragment() {
super.setMenuVisibility(menuVisible)
isFragmentVisible = menuVisible
if (wasInit) {
if (medium.isGif()) {
if (medium.isGIF()) {
gifFragmentVisibilityChanged(menuVisible)
} else {
photoFragmentVisibilityChanged(menuVisible)
@ -177,6 +183,20 @@ class PhotoFragment : ViewPagerFragment() {
}
}
@SuppressLint("NewApi")
private fun measureScreen() {
val metrics = DisplayMetrics()
if (isJellyBean1Plus()) {
activity!!.windowManager.defaultDisplay.getRealMetrics(metrics)
ViewPagerActivity.screenWidth = metrics.widthPixels
ViewPagerActivity.screenHeight = metrics.heightPixels
} else {
activity!!.windowManager.defaultDisplay.getMetrics(metrics)
ViewPagerActivity.screenWidth = metrics.widthPixels
ViewPagerActivity.screenHeight = metrics.heightPixels
}
}
private fun gifFragmentVisibilityChanged(isVisible: Boolean) {
if (isVisible) {
gifDrawable?.start()
@ -189,6 +209,8 @@ class PhotoFragment : ViewPagerFragment() {
if (isVisible) {
scheduleZoomableView()
} else {
view.subsampling_view.recycle()
view.subsampling_view.beGone()
loadZoomableViewHandler.removeCallbacksAndMessages(null)
}
}
@ -213,10 +235,10 @@ class PhotoFragment : ViewPagerFragment() {
private fun loadImage() {
imageOrientation = getImageOrientation()
if (medium.isGif()) {
loadGif()
} else {
loadBitmap()
when {
medium.isGIF() -> loadGif()
medium.isSVG() -> loadSVG()
else -> loadBitmap()
}
}
@ -243,64 +265,77 @@ class PhotoFragment : ViewPagerFragment() {
}
}
private fun loadSVG() {
Glide.with(this)
.`as`(PictureDrawable::class.java)
.listener(SvgSoftwareLayerSetter())
.load(medium.path)
.into(view.photo_view)
}
private fun loadBitmap(degrees: Int = 0) {
if (degrees == 0) {
var targetWidth = if (ViewPagerActivity.screenWidth == 0) Target.SIZE_ORIGINAL else ViewPagerActivity.screenWidth
var targetHeight = if (ViewPagerActivity.screenHeight == 0) Target.SIZE_ORIGINAL else ViewPagerActivity.screenHeight
if (useHalfResolution) {
targetWidth /= 2
targetHeight /= 2
var pathToLoad = if (medium.path.startsWith("content://")) medium.path else "file://${medium.path}"
pathToLoad = pathToLoad.replace("%", "%25").replace("#", "%23")
try {
val picasso = Picasso.get()
.load(pathToLoad)
.centerInside()
.resize(ViewPagerActivity.screenWidth, ViewPagerActivity.screenHeight)
if (degrees != 0) {
picasso.rotate(degrees.toFloat())
}
if (imageOrientation == ORIENTATION_ROTATE_90) {
targetWidth = targetHeight
targetHeight = Target.SIZE_ORIGINAL
}
picasso.into(view.photo_view, object : Callback {
override fun onSuccess() {
view.photo_view.isZoomable = degrees != 0 || context?.config?.allowZoomingImages == false
if (isFragmentVisible && degrees == 0) {
scheduleZoomableView()
}
}
val options = RequestOptions()
.signature(medium.path.getFileSignature())
.format(DecodeFormat.PREFER_ARGB_8888)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.override(targetWidth, targetHeight)
Glide.with(this)
.asBitmap()
.load(getPathToLoad(medium))
.apply(options)
.listener(object : RequestListener<Bitmap> {
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Bitmap>?, isFirstResource: Boolean): Boolean {
if (!useHalfResolution && e?.rootCauses?.firstOrNull() is OutOfMemoryError) {
useHalfResolution = true
Handler().post {
if (activity?.isActivityDestroyed() == false) {
loadBitmap(degrees)
}
}
}
return false
}
override fun onResourceReady(resource: Bitmap?, model: Any?, target: Target<Bitmap>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
if (isFragmentVisible) {
scheduleZoomableView()
}
return false
}
}).into(view.photo_view)
} else {
val options = RequestOptions()
.diskCacheStrategy(DiskCacheStrategy.NONE)
.transform(GlideRotateTransformation(degrees))
Glide.with(this)
.asBitmap()
.load(getPathToLoad(medium))
.thumbnail(0.2f)
.apply(options)
.into(view.photo_view)
override fun onError(e: Exception) {
if (context != null) {
tryLoadingWithGlide()
}
}
})
} catch (ignored: Exception) {
}
}
private fun tryLoadingWithGlide() {
var targetWidth = if (ViewPagerActivity.screenWidth == 0) com.bumptech.glide.request.target.Target.SIZE_ORIGINAL else ViewPagerActivity.screenWidth
var targetHeight = if (ViewPagerActivity.screenHeight == 0) com.bumptech.glide.request.target.Target.SIZE_ORIGINAL else ViewPagerActivity.screenHeight
if (imageOrientation == ORIENTATION_ROTATE_90) {
targetWidth = targetHeight
targetHeight = com.bumptech.glide.request.target.Target.SIZE_ORIGINAL
}
val options = RequestOptions()
.signature(medium.path.getFileSignature())
.format(DecodeFormat.PREFER_ARGB_8888)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.override(targetWidth, targetHeight)
Glide.with(context!!)
.asBitmap()
.load(getPathToLoad(medium))
.apply(options)
.listener(object : RequestListener<Bitmap> {
override fun onLoadFailed(e: GlideException?, model: Any?, target: com.bumptech.glide.request.target.Target<Bitmap>?, isFirstResource: Boolean): Boolean = false
override fun onResourceReady(resource: Bitmap?, model: Any?, target: com.bumptech.glide.request.target.Target<Bitmap>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
if (isFragmentVisible) {
scheduleZoomableView()
}
return false
}
}).into(view.photo_view)
}
private fun openPanorama() {
Intent(context, PanoramaActivity::class.java).apply {
putExtra(PATH, medium.path)
@ -311,23 +346,25 @@ class PhotoFragment : ViewPagerFragment() {
private fun scheduleZoomableView() {
loadZoomableViewHandler.removeCallbacksAndMessages(null)
loadZoomableViewHandler.postDelayed({
if (isFragmentVisible && !context!!.config.replaceZoomableImages && medium.isImage() && view.subsampling_view.isGone()) {
if (isFragmentVisible && context?.config?.allowZoomingImages == true && medium.isImage() && view.subsampling_view.isGone()) {
addZoomableView()
}
}, ZOOMABLE_VIEW_LOAD_DELAY)
}
private fun addZoomableView() {
ViewPagerActivity.wasDecodedByGlide = false
val rotation = degreesForRotation(imageOrientation)
view.subsampling_view.apply {
background = ColorDrawable(Color.TRANSPARENT)
setBitmapDecoderFactory { PicassoDecoder(medium.path, Picasso.get(), rotation) }
setRegionDecoderFactory { PicassoRegionDecoder() }
maxScale = 10f
beVisible()
isQuickScaleEnabled = context.config.oneFingerZoom
setResetScaleOnSizeChange(context.config.screenRotation != ROTATE_BY_ASPECT_RATIO)
setImage(ImageSource.uri(getPathToLoad(medium)))
orientation = if (imageOrientation == -1) SubsamplingScaleImageView.ORIENTATION_USE_EXIF else degreesForRotation(imageOrientation)
orientation = rotation
setEagerLoadingEnabled(false)
setExecutor(AsyncTask.SERIAL_EXECUTOR)
setOnImageEventListener(object : SubsamplingScaleImageView.OnImageEventListener {
override fun onImageLoaded() {
}
@ -346,6 +383,7 @@ class PhotoFragment : ViewPagerFragment() {
}
override fun onImageLoadError(e: Exception) {
view.photo_view.isZoomable = true
background = ColorDrawable(Color.TRANSPARENT)
beGone()
}
@ -400,8 +438,6 @@ class PhotoFragment : ViewPagerFragment() {
return if (context == null || bitmapAspectRatio == screenAspectRatio) {
DEFAULT_DOUBLE_TAP_ZOOM
} else if (ViewPagerActivity.wasDecodedByGlide) {
1f
} else if (context!!.portrait && bitmapAspectRatio <= screenAspectRatio) {
ViewPagerActivity.screenHeight / height.toFloat()
} else if (context!!.portrait && bitmapAspectRatio > screenAspectRatio) {
@ -416,6 +452,7 @@ class PhotoFragment : ViewPagerFragment() {
}
fun rotateImageViewBy(degrees: Int) {
loadZoomableViewHandler.removeCallbacksAndMessages(null)
view.subsampling_view.beGone()
loadBitmap(degrees)
}
@ -444,7 +481,6 @@ class PhotoFragment : ViewPagerFragment() {
override fun onDestroyView() {
super.onDestroyView()
if (activity?.isActivityDestroyed() == false) {
Glide.with(context!!).clear(view.photo_view)
view.subsampling_view.recycle()
}
loadZoomableViewHandler.removeCallbacksAndMessages(null)

View file

@ -89,7 +89,6 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S
}
mIsFullscreen = activity!!.window.decorView.systemUiVisibility and View.SYSTEM_UI_FLAG_FULLSCREEN == View.SYSTEM_UI_FLAG_FULLSCREEN
mView!!.video_play_outline.alpha = if (mIsFullscreen) 0f else PLAY_PAUSE_VISIBLE_ALPHA
setupPlayer()
if (savedInstanceState != null) {
@ -411,9 +410,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S
mExoPlayer?.playWhenReady = true
mView!!.video_play_outline.setImageResource(R.drawable.ic_pause)
activity!!.window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
mHidePauseHandler.postDelayed({
mView!!.video_play_outline.animate().alpha(0f).start()
}, HIDE_PAUSE_DELAY)
schedulePlayPauseFadeOut()
}
private fun pauseVideo() {
@ -429,6 +426,14 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S
mView?.video_play_outline?.setImageResource(R.drawable.ic_play)
mView?.video_play_outline?.alpha = PLAY_PAUSE_VISIBLE_ALPHA
activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
schedulePlayPauseFadeOut()
}
private fun schedulePlayPauseFadeOut() {
mHidePauseHandler.removeCallbacksAndMessages(null)
mHidePauseHandler.postDelayed({
mView!!.video_play_outline.animate().alpha(0f).start()
}, HIDE_PAUSE_DELAY)
}
private fun videoEnded() = mExoPlayer?.currentPosition ?: 0 >= mExoPlayer?.duration ?: 0
@ -618,17 +623,6 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S
}
}
}
mView!!.video_play_outline.animate().alpha(if (isFullscreen && mIsPlaying) 0f else PLAY_PAUSE_VISIBLE_ALPHA).start()
if (isFullscreen) {
mHidePauseHandler.removeCallbacksAndMessages(null)
} else {
mHidePauseHandler.postDelayed({
if (mExoPlayer?.currentPosition ?: 0 > 0) {
mView!!.video_play_outline.animate().alpha(0f).start()
}
}, HIDE_PAUSE_DELAY)
}
}
private fun getExtendedDetailsY(height: Int): Float {

View file

@ -174,7 +174,7 @@ class Config(context: Context) : BaseConfig(context) {
set(darkBackground) = prefs.edit().putBoolean(DARK_BACKGROUND, darkBackground).apply()
var filterMedia: Int
get() = prefs.getInt(FILTER_MEDIA, TYPE_IMAGES or TYPE_VIDEOS or TYPE_GIFS or TYPE_RAWS)
get() = prefs.getInt(FILTER_MEDIA, TYPE_IMAGES or TYPE_VIDEOS or TYPE_GIFS or TYPE_RAWS or TYPE_SVGS)
set(filterMedia) = prefs.edit().putInt(FILTER_MEDIA, filterMedia).apply()
var dirColumnCnt: Int
@ -189,10 +189,6 @@ class Config(context: Context) : BaseConfig(context) {
get() = prefs.getBoolean(ALLOW_INSTANT_CHANGE, false)
set(allowInstantChange) = prefs.edit().putBoolean(ALLOW_INSTANT_CHANGE, allowInstantChange).apply()
var replaceZoomableImages: Boolean
get() = prefs.getBoolean(REPLACE_ZOOMABLE_IMAGES, false)
set(replaceZoomableImages) = prefs.edit().putBoolean(REPLACE_ZOOMABLE_IMAGES, replaceZoomableImages).apply()
private fun getDirectoryColumnsField(): String {
val isPortrait = context.resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT
return if (isPortrait) {
@ -350,6 +346,10 @@ class Config(context: Context) : BaseConfig(context) {
get() = prefs.getBoolean(WAS_RECYCLE_BIN_PINNED, false)
set(wasRecycleBinPinned) = prefs.edit().putBoolean(WAS_RECYCLE_BIN_PINNED, wasRecycleBinPinned).apply()
var wasSVGShowingHandled: Boolean
get() = prefs.getBoolean(WAS_SVG_SHOWING_HANDLED, false)
set(wasSVGShowingHandled) = prefs.edit().putBoolean(WAS_SVG_SHOWING_HANDLED, wasSVGShowingHandled).apply()
var groupBy: Int
get() = prefs.getInt(GROUP_BY, GROUP_BY_NONE)
set(groupBy) = prefs.edit().putInt(GROUP_BY, groupBy).apply()
@ -380,4 +380,8 @@ class Config(context: Context) : BaseConfig(context) {
var showRecycleBinAtFolders: Boolean
get() = prefs.getBoolean(SHOW_RECYCLE_BIN_AT_FOLDERS, true)
set(showRecycleBinAtFolders) = prefs.edit().putBoolean(SHOW_RECYCLE_BIN_AT_FOLDERS, showRecycleBinAtFolders).apply()
var allowZoomingImages: Boolean
get() = prefs.getBoolean(ALLOW_ZOOMING_IMAGES, true)
set(allowZoomingImages) = prefs.edit().putBoolean(ALLOW_ZOOMING_IMAGES, allowZoomingImages).apply()
}

View file

@ -45,7 +45,6 @@ const val EXTENDED_DETAILS = "extended_details"
const val HIDE_EXTENDED_DETAILS = "hide_extended_details"
const val ONE_FINGER_ZOOM = "one_finger_zoom"
const val ALLOW_INSTANT_CHANGE = "allow_instant_change"
const val REPLACE_ZOOMABLE_IMAGES = "replace_zoomable_images"
const val DO_EXTRA_CHECK = "do_extra_check"
const val WAS_NEW_APP_SHOWN = "was_new_app_shown_clock"
const val LAST_FILEPICKER_PATH = "last_filepicker_path"
@ -59,6 +58,8 @@ const val USE_RECYCLE_BIN = "use_recycle_bin"
const val GROUP_BY = "group_by"
const val EVER_SHOWN_FOLDERS = "ever_shown_folders"
const val SHOW_RECYCLE_BIN_AT_FOLDERS = "show_recycle_bin_at_folders"
const val ALLOW_ZOOMING_IMAGES = "allow_zooming_images"
const val WAS_SVG_SHOWING_HANDLED = "was_svg_showing_handled"
// slideshow
const val SLIDESHOW_INTERVAL = "slideshow_interval"
@ -120,6 +121,7 @@ const val TYPE_IMAGES = 1
const val TYPE_VIDEOS = 2
const val TYPE_GIFS = 4
const val TYPE_RAWS = 8
const val TYPE_SVGS = 16
const val LOCAITON_INTERNAL = 1
const val LOCATION_SD = 2

View file

@ -78,6 +78,10 @@ class MediaFetcher(val context: Context) {
}
}
if (filterMedia and TYPE_SVGS != 0) {
query.append("${MediaStore.Images.Media.DATA} LIKE ? OR ")
}
var selectionQuery = query.toString().trim().removeSuffix("OR")
selectionQuery += ") AND "
return selectionQuery
@ -107,6 +111,10 @@ class MediaFetcher(val context: Context) {
}
}
if (filterMedia and TYPE_SVGS != 0) {
args.add("%.svg")
}
return args
}
@ -188,8 +196,9 @@ class MediaFetcher(val context: Context) {
val isVideo = if (isImage) false else filename.isVideoFast()
val isGif = if (isImage || isVideo) false else filename.isGif()
val isRaw = if (isImage || isVideo || isGif) false else filename.isRawFast()
val isSvg = if (isImage || isVideo || isGif || isRaw) false else filename.isSvg()
if (!isImage && !isVideo && !isGif && !isRaw)
if (!isImage && !isVideo && !isGif && !isRaw && !isSvg)
continue
if (isVideo && (isPickImage || filterMedia and TYPE_VIDEOS == 0))
@ -204,6 +213,9 @@ class MediaFetcher(val context: Context) {
if (isRaw && filterMedia and TYPE_RAWS == 0)
continue
if (isSvg && filterMedia and TYPE_SVGS == 0)
continue
if (!showHidden && filename.startsWith('.'))
continue
@ -228,7 +240,8 @@ class MediaFetcher(val context: Context) {
isImage -> TYPE_IMAGES
isVideo -> TYPE_VIDEOS
isGif -> TYPE_GIFS
else -> TYPE_RAWS
isRaw -> TYPE_RAWS
else -> TYPE_SVGS
}
val isFavorite = favoritePaths.contains(path)
@ -255,8 +268,9 @@ class MediaFetcher(val context: Context) {
val isVideo = if (isImage) false else filename.isVideoFast()
val isGif = if (isImage || isVideo) false else filename.isGif()
val isRaw = if (isImage || isVideo || isGif) false else filename.isRawFast()
val isSvg = if (isImage || isVideo || isGif || isRaw) false else filename.isSvg()
if (!isImage && !isVideo && !isGif || !isRaw)
if (!isImage && !isVideo && !isGif && !isRaw && !isSvg)
continue
if (isVideo && (isPickImage || filterMedia and TYPE_VIDEOS == 0))
@ -271,6 +285,9 @@ class MediaFetcher(val context: Context) {
if (isRaw && filterMedia and TYPE_RAWS == 0)
continue
if (isSvg && filterMedia and TYPE_SVGS == 0)
continue
if (!showHidden && filename.startsWith('.'))
continue
@ -285,7 +302,8 @@ class MediaFetcher(val context: Context) {
isImage -> TYPE_IMAGES
isVideo -> TYPE_VIDEOS
isGif -> TYPE_GIFS
else -> TYPE_RAWS
isRaw -> TYPE_RAWS
else -> TYPE_SVGS
}
val path = Uri.decode(file.uri.toString().replaceFirst("${context.config.OTGTreeUri}/document/${context.config.OTGPartition}%3A", OTG_PATH))
@ -417,7 +435,8 @@ class MediaFetcher(val context: Context) {
TYPE_IMAGES -> R.string.images
TYPE_VIDEOS -> R.string.videos
TYPE_GIFS -> R.string.gifs
else -> R.string.raw_images
TYPE_RAWS -> R.string.raw_images
else -> R.string.svgs
}
return context.getString(stringId)
}

View file

@ -0,0 +1,21 @@
package com.simplemobiletools.gallery.helpers
import android.content.Context
import android.graphics.Bitmap
import android.net.Uri
import com.davemorrissey.labs.subscaleview.decoder.ImageDecoder
import com.squareup.picasso.MemoryPolicy
import com.squareup.picasso.Picasso
class PicassoDecoder(val tag: String, val picasso: Picasso, val degrees: Int) : ImageDecoder {
override fun decode(context: Context, uri: Uri): Bitmap {
return picasso
.load(uri)
.tag(tag)
.config(Bitmap.Config.ARGB_8888)
.memoryPolicy(MemoryPolicy.NO_CACHE)
.rotate(-degrees.toFloat())
.get()
}
}

View file

@ -0,0 +1,33 @@
package com.simplemobiletools.gallery.helpers
import android.content.Context
import android.graphics.*
import android.net.Uri
import com.davemorrissey.labs.subscaleview.decoder.ImageRegionDecoder
class PicassoRegionDecoder : ImageRegionDecoder {
private var decoder: BitmapRegionDecoder? = null
private val decoderLock = Any()
override fun init(context: Context, uri: Uri): Point {
val inputStream = context.contentResolver.openInputStream(uri)
decoder = BitmapRegionDecoder.newInstance(inputStream, false)
return Point(decoder!!.width, decoder!!.height)
}
override fun decodeRegion(rect: Rect, sampleSize: Int): Bitmap {
synchronized(decoderLock) {
val options = BitmapFactory.Options()
options.inSampleSize = sampleSize
options.inPreferredConfig = Bitmap.Config.ARGB_8888
val bitmap = decoder!!.decodeRegion(rect, options)
return bitmap ?: throw RuntimeException("Region decoder returned null bitmap - image format may not be supported")
}
}
override fun isReady() = decoder != null && !decoder!!.isRecycled
override fun recycle() {
decoder!!.recycle()
}
}

View file

@ -38,6 +38,9 @@ interface MediumDao {
@Query("UPDATE media SET deleted_ts = :deletedTS WHERE full_path = :path COLLATE NOCASE")
fun updateDeleted(path: String, deletedTS: Long)
@Query("UPDATE media SET date_taken = :dateTaken WHERE full_path = :path COLLATE NOCASE")
fun updateFavoriteDateTaken(path: String, dateTaken: Long)
@Query("DELETE FROM media WHERE deleted_ts != 0")
fun clearRecycleBin()

View file

@ -32,7 +32,7 @@ data class Medium(
private const val serialVersionUID = -6553149366975655L
}
fun isGif() = type == TYPE_GIFS
fun isGIF() = type == TYPE_GIFS
fun isImage() = type == TYPE_IMAGES
@ -40,6 +40,8 @@ data class Medium(
fun isRaw() = type == TYPE_RAWS
fun isSVG() = type == TYPE_SVGS
fun isHidden() = name.startsWith('.')
fun getBubbleText(sorting: Int) = when {

View file

@ -6,10 +6,7 @@ import android.content.Intent
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.REFRESH_PATH
import com.simplemobiletools.gallery.extensions.galleryDB
import com.simplemobiletools.gallery.helpers.TYPE_GIFS
import com.simplemobiletools.gallery.helpers.TYPE_IMAGES
import com.simplemobiletools.gallery.helpers.TYPE_RAWS
import com.simplemobiletools.gallery.helpers.TYPE_VIDEOS
import com.simplemobiletools.gallery.helpers.*
import com.simplemobiletools.gallery.models.Medium
import java.io.File
@ -28,6 +25,7 @@ class RefreshMediaReceiver : BroadcastReceiver() {
path.isImageFast() -> TYPE_IMAGES
path.isVideoFast() -> TYPE_VIDEOS
path.isGif() -> TYPE_GIFS
else -> TYPE_RAWS
path.isRawFast() -> TYPE_RAWS
else -> TYPE_SVGS
}
}

View file

@ -0,0 +1,26 @@
package com.simplemobiletools.gallery.svg
import com.bumptech.glide.load.Options
import com.bumptech.glide.load.ResourceDecoder
import com.bumptech.glide.load.engine.Resource
import com.bumptech.glide.load.resource.SimpleResource
import com.caverock.androidsvg.SVG
import com.caverock.androidsvg.SVGParseException
import java.io.IOException
import java.io.InputStream
class SvgDecoder : ResourceDecoder<InputStream, SVG> {
override fun handles(source: InputStream, options: Options) = true
@Throws(IOException::class)
override fun decode(source: InputStream, width: Int, height: Int, options: Options): Resource<SVG>? {
try {
val svg = SVG.getFromInputStream(source)
return SimpleResource(svg)
} catch (ex: SVGParseException) {
throw IOException("Cannot load SVG from stream", ex)
}
}
}

View file

@ -0,0 +1,17 @@
package com.simplemobiletools.gallery.svg
import android.graphics.drawable.PictureDrawable
import com.bumptech.glide.load.Options
import com.bumptech.glide.load.engine.Resource
import com.bumptech.glide.load.resource.SimpleResource
import com.bumptech.glide.load.resource.transcode.ResourceTranscoder
import com.caverock.androidsvg.SVG
class SvgDrawableTranscoder : ResourceTranscoder<SVG, PictureDrawable> {
override fun transcode(toTranscode: Resource<SVG>, options: Options): Resource<PictureDrawable>? {
val svg = toTranscode.get()
val picture = svg.renderToPicture()
val drawable = PictureDrawable(picture)
return SimpleResource(drawable)
}
}

View file

@ -0,0 +1,21 @@
package com.simplemobiletools.gallery.svg
import android.content.Context
import android.graphics.drawable.PictureDrawable
import com.bumptech.glide.Glide
import com.bumptech.glide.Registry
import com.bumptech.glide.annotation.GlideModule
import com.bumptech.glide.module.AppGlideModule
import com.caverock.androidsvg.SVG
import java.io.InputStream
@GlideModule
class SvgModule : AppGlideModule() {
override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
registry.register(SVG::class.java, PictureDrawable::class.java, SvgDrawableTranscoder()).append(InputStream::class.java, SVG::class.java, SvgDecoder())
}
override fun isManifestParsingEnabled() = false
}

View file

@ -0,0 +1,25 @@
package com.simplemobiletools.gallery.svg
import android.graphics.drawable.PictureDrawable
import android.widget.ImageView
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.ImageViewTarget
import com.bumptech.glide.request.target.Target
class SvgSoftwareLayerSetter : RequestListener<PictureDrawable> {
override fun onLoadFailed(e: GlideException?, model: Any, target: Target<PictureDrawable>, isFirstResource: Boolean): Boolean {
val view = (target as ImageViewTarget<*>).view
view.setLayerType(ImageView.LAYER_TYPE_NONE, null)
return false
}
override fun onResourceReady(resource: PictureDrawable, model: Any, target: Target<PictureDrawable>, dataSource: DataSource, isFirstResource: Boolean): Boolean {
val view = (target as ImageViewTarget<*>).view
view.setLayerType(ImageView.LAYER_TYPE_SOFTWARE, null)
return false
}
}

View file

@ -10,13 +10,15 @@
android:id="@+id/default_image_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="@dimen/bottom_filters_thumbnail_size"/>
android:layout_above="@+id/bottom_editor_crop_rotate_actions"
android:layout_marginBottom="@dimen/activity_margin"/>
<com.theartofdev.edmodo.cropper.CropImageView
android:id="@+id/crop_image_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="@dimen/bottom_filters_thumbnail_size"
android:layout_above="@+id/bottom_editor_crop_rotate_actions"
android:layout_marginBottom="@dimen/activity_margin"
android:visibility="gone"
app:cropBackgroundColor="@color/crop_image_view_background"
app:cropInitialCropWindowPaddingRatio="0"/>

View file

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/settings_scrollview"
android:layout_width="match_parent"
android:layout_height="wrap_content">
@ -74,7 +75,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/use_english_language"/>
android:text="@string/use_english_language"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -97,7 +99,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/avoid_whats_new"/>
android:text="@string/avoid_whats_new"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -204,7 +207,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/show_hidden_items"/>
android:text="@string/show_hidden_items"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -227,7 +231,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/do_extra_check"/>
android:text="@string/do_extra_check"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -268,7 +273,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/autoplay_videos"/>
android:text="@string/autoplay_videos"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -291,7 +297,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/loop_videos"/>
android:text="@string/loop_videos"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -314,7 +321,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/allow_video_gestures"/>
android:text="@string/allow_video_gestures"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -355,7 +363,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/animate_gifs"/>
android:text="@string/animate_gifs"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -378,7 +387,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/crop_thumbnails"/>
android:text="@string/crop_thumbnails"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -401,7 +411,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/show_media_count"/>
android:text="@string/show_media_count"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -442,7 +453,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/show_info_bubble"/>
android:text="@string/show_info_bubble"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -465,7 +477,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/scroll_thumbnails_horizontally"/>
android:text="@string/scroll_thumbnails_horizontally"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -488,7 +501,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/enable_pull_to_refresh"/>
android:text="@string/enable_pull_to_refresh"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -529,7 +543,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/max_brightness"/>
android:text="@string/max_brightness"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -552,7 +567,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/black_background_at_fullscreen"/>
android:text="@string/black_background_at_fullscreen"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -575,7 +591,32 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/hide_system_ui_at_fullscreen"/>
android:text="@string/hide_system_ui_at_fullscreen"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_allow_zooming_images_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin"
android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_allow_zooming_images"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/allow_deep_zooming_images"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -598,7 +639,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/one_finger_zoom"/>
android:text="@string/one_finger_zoom"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -621,30 +663,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/allow_instant_change"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_replace_zoomable_images_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
android:paddingBottom="@dimen/activity_margin"
android:paddingLeft="@dimen/normal_margin"
android:paddingRight="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_replace_zoomable_images"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/replace_zoomable_images"/>
android:text="@string/allow_instant_change"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -667,7 +687,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/allow_photo_gestures"/>
android:text="@string/allow_photo_gestures"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -743,7 +764,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/show_extended_details"/>
android:text="@string/show_extended_details"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
<RelativeLayout
@ -765,7 +787,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/hide_extended_details"/>
android:text="@string/hide_extended_details"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
<RelativeLayout
@ -827,7 +850,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/password_protect_hidden_items"/>
android:text="@string/password_protect_hidden_items"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -850,7 +874,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/password_protect_whole_app"/>
android:text="@string/password_protect_whole_app"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -891,7 +916,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/delete_empty_folders"/>
android:text="@string/delete_empty_folders"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -914,7 +940,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/keep_last_modified"/>
android:text="@string/keep_last_modified"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -937,7 +964,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/skip_delete_confirmation"/>
android:text="@string/skip_delete_confirmation"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -978,7 +1006,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/show_at_bottom"/>
android:text="@string/show_at_bottom"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -1041,7 +1070,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/move_items_into_recycle_bin"/>
android:text="@string/move_items_into_recycle_bin"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
@ -1064,7 +1094,8 @@
android:clickable="false"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:text="@string/show_recycle_bin"/>
android:text="@string/show_recycle_bin"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>

View file

@ -41,4 +41,12 @@
android:paddingTop="@dimen/activity_margin"
android:text="@string/raw_images"/>
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/filter_media_svgs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin"
android:text="@string/svgs"/>
</LinearLayout>

View file

@ -9,8 +9,7 @@
<com.github.chrisbanes.photoview.PhotoView
android:id="@+id/photo_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitCenter"/>
android:layout_height="match_parent"/>
<com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
android:id="@+id/subsampling_view"

View file

@ -38,6 +38,7 @@
<string name="videos">الفديوهات</string>
<string name="gifs">الصور المتحركة</string>
<string name="raw_images">RAW images</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">لم يتم العثور على ملفات وسائط مع الفلاتر المحددة</string>
<string name="change_filters_underlined"><u >تغيير الفلاتر</u></string>
@ -157,7 +158,7 @@
<string name="manage_extended_details">إدارة المجلدات المستبعدة</string>
<string name="one_finger_zoom">السماح بتكبير الوسائط بأصبع واحد في وضع ملء الشاشة</string>
<string name="allow_instant_change">السماح بتغيير الوسائط على الفور من خلال النقر على جوانب الشاشة</string>
<string name="replace_zoomable_images">استبدل الصور التي يمكن تكبيرها بعمق باستخدام صور ذات جودة أفضل</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="hide_extended_details">إخفاء التفاصيل الموسعة عند إخفاء شريط الحالة</string>
<string name="do_extra_check">قم بإجراء فحص إضافي لتجنب إظهار الملفات التالفة</string>
<string name="show_at_bottom">Show some action buttons at the bottom of the screen</string>

View file

@ -38,6 +38,7 @@
<string name="videos">Vídeos</string>
<string name="gifs">GIFs</string>
<string name="raw_images">Imatges RAW</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">No s\'han tronat arxius amb els filtres seleccionats.</string>
<string name="change_filters_underlined"><u>Canviar filtres</u></string>
@ -153,7 +154,7 @@
<string name="manage_extended_details">Gestioneu els detalls ampliats</string>
<string name="one_finger_zoom">Permet fer zoom amb un sol dit a pantalla complerta</string>
<string name="allow_instant_change">Permet canviar els mitjans de manera instantània fent clic als costats de la pantalla</string>
<string name="replace_zoomable_images">Substituïr imatges ampliades per les de millor quialitat</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="hide_extended_details">Amaga els detalls estesos quan la barra d\'estat està amagada</string>
<string name="do_extra_check">Fer una verificació addicional per evitar que es mostrin fitxers no vàlids</string>
<string name="show_at_bottom">Mostra alguns botons d\'acció a la part inferior de la pantalla</string>

View file

@ -38,6 +38,7 @@
<string name="videos">Videos</string>
<string name="gifs">GIFs</string>
<string name="raw_images">RAW images</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">No media files have been found with the selected filters.</string>
<string name="change_filters_underlined"><u>Change filters</u></string>
@ -153,7 +154,7 @@
<string name="manage_extended_details">Manage extended details</string>
<string name="one_finger_zoom">Allow one finger zoom at fullscreen media</string>
<string name="allow_instant_change">Allow instantly changing media by clicking on screen sides</string>
<string name="replace_zoomable_images">Replace deep zoomable images with better quality ones</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="hide_extended_details">Hide extended details when status bar is hidden</string>
<string name="do_extra_check">Do an extra check to avoid showing invalid files</string>
<string name="show_at_bottom">Show some action buttons at the bottom of the screen</string>

View file

@ -38,6 +38,7 @@
<string name="videos">Videoer</string>
<string name="gifs">GIF\'er</string>
<string name="raw_images">RAW images</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">Der blev ikke fundet nogen filer med det valgte filter.</string>
<string name="change_filters_underlined"><u>Skift filter</u></string>
@ -153,7 +154,7 @@
<string name="manage_extended_details">Manage extended details</string>
<string name="one_finger_zoom">Tillad zoom med en finger når medier er i fuldskærm</string>
<string name="allow_instant_change">Tillad skift af medie ved klik på skærmens sider</string>
<string name="replace_zoomable_images">Erstat stærkt zoombare billeder med nogle i bedre kvalitet</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="hide_extended_details">Skjul udvidede oplysninger når statuslinjen er skjult</string>
<string name="do_extra_check">Tjek en ekstra gang for at undgå visning af ugyldige filer</string>
<string name="show_at_bottom">Show some action buttons at the bottom of the screen</string>

View file

@ -22,15 +22,15 @@
<string name="use_default">Standard</string>
<string name="volume">Lautstärke</string>
<string name="brightness">Helligkeit</string>
<string name="lock_orientation">Bildschirmausrichtung sperren</string>
<string name="unlock_orientation">Bildschirmausrichtung entsperren</string>
<string name="change_orientation">Bildschirmausrichtung ändern</string>
<string name="force_portrait">Hochkant erzwingen</string>
<string name="force_landscape">Breitbild erzwingen</string>
<string name="use_default_orientation">Standard Ausrichtung benutzen</string>
<string name="fix_date_taken">Fix Date Taken value</string>
<string name="fixing">Fixing</string>
<string name="dates_fixed_successfully">Dates fixed successfully</string>
<string name="lock_orientation">Bildausrichtung sperren</string>
<string name="unlock_orientation">Bildausrichtung entsperren</string>
<string name="change_orientation">Bildausrichtung ändern</string>
<string name="force_portrait">Bildausrichtung im Hochformat</string>
<string name="force_landscape">Bildausrichtung im Querformat</string>
<string name="use_default_orientation">automatische Bildausrichtung</string>
<string name="fix_date_taken">Aufnahmedatum korrigieren</string>
<string name="fixing">Korrigiere</string>
<string name="dates_fixed_successfully">Datum erfolgreich korrigiert.</string>
<!-- Filter -->
<string name="filter_media">Filter</string>
@ -38,11 +38,12 @@
<string name="videos">Videos</string>
<string name="gifs">GIFs</string>
<string name="raw_images">RAW images</string>
<string name="no_media_with_filters">Keine Medien für die ausgewählten Filter gefunden</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">Keine Medien für die ausgewählten Filter gefunden.</string>
<string name="change_filters_underlined"><u>Filter ändern</u></string>
<!-- Hide / Exclude -->
<string name="hide_folder_description">Diese Funktion versteckt die ausgewählten Ordner (auch für andere Apps), indem dort im Dateisystem eine \'.nomedia\'-Datei abgelegt wird. Dadurch werden auch deren Unterordner versteckt. Solche Ordner werden nur gezeigt, wenn die Einstellung \'Versteckte Elemente anzeigen\' aktiv ist (auch andere Apps bieten üblicherweise eine solche Option). Fortfahren?</string>
<string name="hide_folder_description">Diese Funktion versteckt die ausgewählten Ordner, indem im Dateisystem eine \'.nomedia\'-Datei abgelegt wird. Dadurch werden die ausgewählten Ordner und alle Unterverzeichnisse auch in anderen Apps nicht angezeigt. Solche Ordner werden nur gezeigt, wenn die Einstellung \'Versteckte Elemente anzeigen\' aktiv ist (auch andere Apps bieten üblicherweise eine solche Option).\\nFortfahren?</string>
<string name="exclude">Ordner ausschließen</string>
<string name="excluded_folders">Ausgeschlossene Ordner</string>
<string name="manage_excluded_folders">Ausgeschlossene Ordner verwalten</string>
@ -50,7 +51,7 @@
<string name="exclude_folder_parent">Möchtest du stattdessen einen höherliegenden Ordner ausschließen?</string>
<string name="excluded_activity_placeholder">\'Ordner ausschließen\' wird ausgewählte Ordner und deren Unterordner nur in dieser App ausblenden. Andere Apps werden solche Ordner weiterhin anzeigen.\\n\\nWenn du Ordner auch für andere Apps verstecken willst, verwende dafür die Funktion \'Ordner verstecken\'.</string>
<string name="remove_all">Alle entfernen</string>
<string name="remove_all_description">Alle Ordner aus der Ausgeblendet-Liste entfernen? Die Ordner selbst werden nicht gelöscht.</string>
<string name="remove_all_description">Alle Ordner aus der Liste ausgeblendeter Ordner entfernen? Die Ordner selbst werden nicht gelöscht.</string>
<string name="hidden_folders">Versteckte Ordner</string>
<string name="manage_hidden_folders">Versteckte Ordner verwalten</string>
<string name="hidden_folders_placeholder">Keinen mit einer \".nomedia\"-Datei versteckten Ordner gefunden.</string>
@ -67,40 +68,40 @@
<string name="width">Breite</string>
<string name="height">Höhe</string>
<string name="keep_aspect_ratio">Seitenverhältnis beibehalten</string>
<string name="invalid_values">Bitte eine gültige Auflösung eingeben</string>
<string name="invalid_values">Bitte eine gültige Auflösung eingeben.</string>
<!-- Editor -->
<string name="editor">Editor</string>
<string name="save">Speichern</string>
<string name="rotate">Drehen</string>
<string name="path">Pfad</string>
<string name="invalid_image_path">Ungültiger Dateipfad</string>
<string name="image_editing_failed">Bildbearbeitung fehlgeschlagen</string>
<string name="edit_image_with">Bild bearbeiten mit</string>
<string name="no_editor_found">Keine Bildeditor-App gefunden</string>
<string name="unknown_file_location">Unbekannter Dateipfad</string>
<string name="error_saving_file">Konnte Quelldatei nicht überschreiben</string>
<string name="invalid_image_path">Ungültiger Dateipfad.</string>
<string name="image_editing_failed">Bildbearbeitung fehlgeschlagen.</string>
<string name="edit_image_with">Bild bearbeiten mit:</string>
<string name="no_editor_found">Keine Bildeditor-App gefunden.</string>
<string name="unknown_file_location">Unbekannter Dateipfad.</string>
<string name="error_saving_file">Konnte Quelldatei nicht überschreiben.</string>
<string name="rotate_left">Nach links drehen</string>
<string name="rotate_right">Nach rechts drehen</string>
<string name="rotate_one_eighty">Um 180° drehen</string>
<string name="flip">Spiegeln</string>
<string name="flip_horizontally">Horizontal spiegeln</string>
<string name="flip_vertically">Vertikal spiegeln</string>
<string name="edit_with">Bearbeiten mit</string>
<string name="free_aspect_ratio">Frei</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
<string name="edit_with">Bearbeiten mit:</string>
<string name="free_aspect_ratio">Beliebiges Seitenverhältnis</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
<!-- Set wallpaper -->
<string name="simple_wallpaper">Schlichter Hintergrund</string>
<string name="set_as_wallpaper">Als Hintergrund festlegen</string>
<string name="set_as_wallpaper_failed">Hintergrundbild festlegen fehlgeschlagen</string>
<string name="set_as_wallpaper_failed">Hintergrundbild festlegen fehlgeschlagen.</string>
<string name="set_as_wallpaper_with">Als Hintergrund festlegen mit</string>
<string name="setting_wallpaper">Hintergrund festlegen&#8230;</string>
<string name="wallpaper_set_successfully">Hintergrundbild erfolgreich festgelegt</string>
<string name="wallpaper_set_successfully">Hintergrundbild erfolgreich festgelegt.</string>
<string name="portrait_aspect_ratio">Hochformat</string>
<string name="landscape_aspect_ratio">Querformat</string>
<string name="home_screen">Homescreen</string>
<string name="home_screen">Startbildschirm</string>
<string name="lock_screen">Sperrbildschirm</string>
<string name="home_and_lock_screen">Home- und Sperrbildschirm</string>
<string name="home_and_lock_screen">Start- und Sperrbildschirm</string>
<!-- Slideshow -->
<string name="slideshow">Diashow</string>
@ -112,91 +113,90 @@
<string name="use_fade">Übergänge animieren</string>
<string name="move_backwards">Rückwärts abspielen</string>
<string name="loop_slideshow">Endlos abspielen</string>
<string name="slideshow_ended">Diashow beendet</string>
<string name="no_media_for_slideshow">Keine Medien für Diashow gefunden</string>
<string name="slideshow_ended">Diashow beendet.</string>
<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">Gitter</string>
<string name="grid">Gitternetz</string>
<string name="list">Liste</string>
<string name="group_direct_subfolders">Direkte Unterordner gruppieren</string>
<!-- Grouping at media thumbnails -->
<string name="group_by">Gruppieren bei</string>
<string name="group_by">Gruppieren nach</string>
<string name="do_not_group_files">Dateien nicht gruppieren</string>
<string name="by_folder">Ordner</string>
<string name="by_last_modified">Zuletzt geändert</string>
<string name="by_date_taken">Erstelldatum</string>
<string name="by_file_type">Dateityp</string>
<string name="by_extension">Extension</string>
<string name="by_last_modified">Datum der letzten Änderung</string>
<string name="by_date_taken">Aufnahmedatum</string>
<string name="by_file_type">Dateityp (Bilder/Videos)</string>
<string name="by_extension">Dateierweiterung</string>
<!-- Settings -->
<string name="autoplay_videos">Videos automatisch abspielen</string>
<string name="toggle_filename">Beschriftungen ein/aus</string>
<string name="loop_videos">Videos in Endlosschleife spielen</string>
<string name="loop_videos">Videos in Endlosschleife abspielen</string>
<string name="animate_gifs">Kacheln von GIFs animieren</string>
<string name="max_brightness">Helligkeit beim Betrachten maximieren</string>
<string name="crop_thumbnails">Kacheln quadratisch zuschneiden</string>
<string name="screen_rotation_by">Im Vollbild ausrichten nach</string>
<string name="screen_rotation_by">Im Vollbild ausrichten nach:</string>
<string name="screen_rotation_system_setting">Systemeinstellung</string>
<string name="screen_rotation_device_rotation">Gerätedrehung</string>
<string name="screen_rotation_aspect_ratio">Seitenverhältnis</string>
<string name="black_background_at_fullscreen">Schwarzer Hintergrund &amp; schwarze Systemleiste im Vollbild</string>
<string name="scroll_thumbnails_horizontally">Kacheln horizontal scrollen</string>
<string name="hide_system_ui_at_fullscreen">Systemleiste im Vollbild ausblenden</string>
<string name="delete_empty_folders">Nach Löschen leere Ordner löschen</string>
<string name="delete_empty_folders">Leere Ordner automatisch löschen</string>
<string name="allow_photo_gestures">Fotohelligkeit mit vertikalen Gesten ändern</string>
<string name="allow_video_gestures">Gesten für Videolautstärke/Helligkeit zulassen</string>
<string name="show_media_count">Medienanzahl bei Ordnern anzeigen</string>
<string name="replace_share_with_rotate">Teilen/Drehen im Vollbild-Menü vertauschen</string>
<string name="show_extended_details">Eigenschaften im Vollbild anzeigen</string>
<string name="show_extended_details">Dateieigenschaften in Vollbild-Anzeige einblenden</string>
<string name="manage_extended_details">Eigenschaften auswählen</string>
<string name="one_finger_zoom">Ein-Finger-Zoom im Vollbild zulassen</string>
<string name="allow_instant_change">Beim Tippen auf eine Bildschirmseite sofort zwischen Medien wechseln</string>
<string name="replace_zoomable_images">Stark zoombare Bilder durch Bilder mit hoher Qualität ersetzen</string>
<string name="hide_extended_details">Erweiterte Details nicht anzeigen, wenn die Systemleiste versteckt ist</string>
<string name="allow_deep_zooming_images">Starkes Zoomen zulassen</string>
<string name="hide_extended_details">Dateieigenschaften im Vollbild nicht anzeigen, wenn die Systemleiste versteckt ist</string>
<string name="do_extra_check">Zusätzliche Überprüfung, um ungültige Dateien nicht anzuzeigen</string>
<string name="show_at_bottom">Einige Aktionstasten am unteren Bildschirmrand anzeigen</string>
<string name="show_at_bottom">Ausgewählte Funktionen am unteren Bildschirmrand anzeigen</string>
<string name="show_recycle_bin">Papierkorb auf dem Ordnerbildschirm anzeigen</string>
<!-- Setting sections -->
<string name="thumbnails">Thumbnails</string>
<string name="fullscreen_media">Vollbild-Medien</string>
<string name="fullscreen_media">Vollbild-Anzeige von Medien</string>
<string name="extended_details">Erweiterte Details</string>
<string name="bottom_actions">Untere Aktionen</string>
<string name="bottom_actions">Funktionen am unteren Bildschirmrand</string>
<!-- Bottom actions -->
<string name="manage_bottom_actions">Sichtbare untere Aktionen verwalten</string>
<string name="manage_bottom_actions">Funktionen auswählen</string>
<string name="toggle_favorite">Favoriten umschalten</string>
<string name="toggle_file_visibility">Schaltet die Sichtbarkeit von Dateien um</string>
<!-- FAQ -->
<string name="faq_1_title">Wie kann ich Schlichte Galerie als Standardanwendung auswählen?</string>
<string name="faq_1_text">Zunächst musst du unter \"Apps\" in den Geräteeinstellungen die aktuelle Standardgalerie finden. Suche nach einer Bedienfläche wie \"Standardmässig öffnen\", betätige diese und wähle \"Standardeinstellungen löschen\".
Das nächste Mal, wenn du ein Bild oder ein Video öffnest, sollte ein Appwähler erscheinen und Schlichte Gallerie als Standard ausgewählt werden können.</string>
<string name="faq_2_title">Ich habe die App mit einem Passwort geschützt, aber ich habe es vergessen. Was kann ich tun?</string>
<string name="faq_2_text">Es gibt zwei Möglichkeiten: Entweder du installierst die App erneut oder du gehst unter Apps in den Geräteeinstellungen und wählst \"Daten löschen\". Alle Einstellungen werden zurückgesetzt, alle Mediendateien bleiben unberührt.</string>
Das nächste Mal, wenn du ein Bild oder ein Video öffnest, sollte ein Auswahlfenster erscheinen und es möglich sein, Schlichte Gallerie als Standard-App auszuwählen.</string>
<string name="faq_2_title">Ich habe die App mit einem Passwort geschützt und es vergessen. Was kann ich tun?</string>
<string name="faq_2_text">Es gibt zwei Möglichkeiten: Entweder du installierst die App erneut oder du wählst in den Geräteeinstellungen \'Apps\' aus und dann \"Daten löschen\". Alle Einstellungen werden zurückgesetzt, alle Mediendateien bleiben unberührt.</string>
<string name="faq_3_title">Wie kann ich ein Album immer zuoberst erscheinen lassen?</string>
<string name="faq_3_text">Du kannst lange auf das gewünschte Album drücken und im Aktionsmenü das Stecknadelsymbol auswählen; es wird nun zuoberst angepinnt. Ebenso kannst du mehrere Ordner anpinnen. Angepinnte Objekte werden nach der Standardmethode sortiert.</string>
<string name="faq_4_title">Wie kann ich Videos vorspulen?</string>
<string name="faq_4_text">Du kannst auf den Text der aktuellen oder der maximalen Dauer nahe der Suchleiste drücken, um das Video zurück- oder vorzuspulen.</string>
<string name="faq_5_title">Was ist der Unterschied zwischen Verstecken und Ausschliessen eines Ordners?</string>
<string name="faq_5_text">Ausschliessen verhindert lediglich, dass der Ordner in Schlichte Galerie angezeigt, Verstecken hingegen funktioniert systemweit und versteckt den Ordner auch vor anderen Gallerieapps. Dies funktioniert durch das Erstellen einer leeren \".nomedia\"-Datei im betroffenen Ordner, welche du mit jedem Dateimanager löschen kannst.</string>
<string name="faq_4_title">Wie kann ich in Videos vor- oder zurückspringen?</string>
<string name="faq_4_text">Du kannst auf den Text der aktuellen oder der maximalen Dauer nahe der Suchleiste drücken, um im Video vor- oder zurück zu springen.</string>
<string name="faq_5_title">Was ist der Unterschied zwischen \'Verstecken\' und \'Ausschließen\' eines Ordners?</string>
<string name="faq_5_text">\'Ausschließen\' verhindert lediglich, dass der Ordner in Schlichte Galerie angezeigt wird. \'Verstecken\' hingegen versteckt den Ordner auch vor anderen Apps. Dies funktioniert durch das Erstellen einer leeren \".nomedia\"-Datei im betroffenen Ordner, welche du mit jedem Dateimanager wieder löschen kannst.</string>
<string name="faq_6_title">Wieso erscheinen Ordner mit Musik-Cover oder Stickers?</string>
<string name="faq_6_text">Es kann geschehen, dass manche ungewöhnliche Alben erscheinen. Diese kannst du ausschliessen durch gedrückt halten und Auswählen von Ausschliessen. Im nächsten Dialog kannst du den übergeordneten Ordner auswählen und dadurch sollten die anderen zugehörigen Alben auch nicht auftauchen.</string>
<string name="faq_7_title">Ein Ordner mit Bilder wird nicht angezeigt. Was kann ich tun?</string>
<string name="faq_7_text">Dies kann mehrere Gründe haben, aber es zu lösen ist einfach. Gehe einfach zu Einstellungen -> Einbezogene Ordner verwalten, wähle das Plus aus und navigiere zum gewünschten Ordner.</string>
<string name="faq_8_title">Was ist, wenn ich nur ein paar definierte Ordner sichtbar haben will?</string>
<string name="faq_8_text">Einen Ordner zu den einbezogenen Ordner hinzuzufügen schliesst nicht automatisch alle anderen aus. Eine Möglichkeit ist, in Einstellungen -> Ausgeschlossene Ordner verwalten den Stammordner \"/\" auszuschliessen und dann alle gewünschten Ordner in Einstellungen -> Einbezogene Ordner verwalten hinzuzufügen.
Dadurch werden nur die ausgewählten Ordner sichtbar, da Auschliessen und Einbeziehen rekursiv erfolgen und wenn ein Ordner ausgeschlossen und einbezogen wurde, wird er dennoch angezeigt.</string>
<string name="faq_9_title">Vollbildfotos haben seltsame Artefakte. Kann ich die Qualität verbessern?</string>
<string name="faq_9_text">Ja, es gibt einen Schalter in den Einstellungen gekennzeichnet mit \"Stark zoombare Bilder durch Bilder mit hoher Qualität ersetzen\". Dieser wird die Bildqualität verbessern, aber sie werden bei sehr hoher Zoomstufe unscharf.</string>
<string name="faq_7_title">Ein Ordner mit Bildern wird nicht angezeigt. Was kann ich tun?</string>
<string name="faq_7_text">Öffne die Galerie-Einstellungen, wähle dort \'Einbezogene Ordner verwalten\', dann das Plus-Zeichen oben rechts und navigiere zum gewünschten Ordner.</string>
<string name="faq_8_title">Wie kann ich erreichen, dass nur ein paar definierte Ordner sichtbar sind?</string>
<string name="faq_8_text">Einen Ordner zu den \'einbezogenen Ordnern\' hinzuzufügen, schließt nicht automatisch alle anderen aus. Eine Möglichkeit ist, in den Galerie-Einstellungen \'Ausgeschlossene Ordner verwalten\' zu wählen, den Stammordner \"/\" auszuschliessen und dann alle gewünschten Ordner in \'Einbezogene Ordner verwalten\' hinzuzufügen.</string>
<string name="faq_9_title">Als Vollbild angezeigte Bilder haben seltsame Artefakte. Kann ich die Qualität verbessern?</string>
<string name="faq_9_text">Ja, es gibt einen Schalter in den Einstellungen, gekennzeichnet mit \"Stark zoombare Bilder durch Bilder mit hoher Qualität ersetzen\". Dieser wird die Bildqualität verbessern, aber sie werden bei sehr hoher Zoomstufe unscharf.</string>
<string name="faq_10_title">Kann ich mit dieser App Bilder zuschneiden?</string>
<string name="faq_10_text">Ja, du kannst Bilder über das Ziehen der Bildecken im Editor zuschneiden. Du gelangst zum Editor indem du lange auf ein Vorschaubild drückst und Bearbeiten auswählst oder durch Auswählen von Bearbeiten in der Vollbildansicht.</string>
<string name="faq_11_title">Kann ich Mediendatei-Thumbnails irgendwie gruppieren?</string>
<string name="faq_11_text">Verwenden Sie einfach den Menüeintrag \"Gruppieren nach\" in der Miniaturansicht. Sie können Dateien nach mehreren Kriterien gruppieren, einschließlich Aufnahmedatum. Wenn Sie die Funktion \"Alle Ordnerinhalte anzeigen\" verwenden, können Sie sie auch nach Ordnern gruppieren.</string>
<string name="faq_12_title">Sorting by Date Taken doesn\'t seem to work properly, how can I fix it?</string>
<string name="faq_12_text">It is most likely caused by the files being copied from somewhere. You can fix it by selecting the file thumbnails and selecting \"Fix Date Taken value\".</string>
<string name="faq_11_text">Verwende dazu den Menüeintrag \"Gruppieren nach\" in der Miniaturansicht. Du kannst Dateien nach mehreren Kriterien gruppieren, einschließlich Aufnahmedatum. Wenn Du die Funktion \"Alle Ordnerinhalte anzeigen\" verwendest, kannst du sie auch nach Ordnern gruppieren.</string>
<string name="faq_12_title">Die Sortierung nach Datum ist nicht korrekt, wie kann ich das korrigieren?</string>
<string name="faq_12_text">Die wahrscheinliche Ursache ist, dass deine Bilder von woanders kopiert worden sind. In diesem Fall solltest du die Miniatur-Ansichten der Bilder durch etwas längeres Antippen markieren und dann im Menü oben rechts die Funktion \'Aufnahmedatum korrigieren\' ausführen.</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<!-- Short description has to have less than 80 chars -->

View file

@ -4,45 +4,46 @@
<string name="app_launcher_name">Gallery</string>
<string name="edit">Επεξεργασία</string>
<string name="open_camera">Άνοιγμα κάμερας</string>
<string name="hidden">(κρυμμένο)</string>
<string name="excluded">(εξαιρεθέν)</string>
<string name="hidden">(κρυφά)</string>
<string name="excluded">(εξαιρούνται)</string>
<string name="pin_folder">Καρφίτσωμα φακέλου</string>
<string name="unpin_folder">Ξεκαρφίτσωμα φακέλου</string>
<string name="pin_to_the_top">Καρφίτσωμα στην κορυφή</string>
<string name="show_all">Εμφάνιση περιεχομένου όλων των φακέλων</string>
<string name="show_all">Προβολή όλων στο φάκελο</string>
<string name="all_folders">Όλοι οι φάκελοι</string>
<string name="folder_view">Αλλαγή στην εμφάνιση των φακέλων</string>
<string name="folder_view">Αλλαγή σε προβολή φακέλων</string>
<string name="other_folder">Άλλος φάκελος</string>
<string name="show_on_map">Εμφάνιση στο χάρτη</string>
<string name="unknown_location">Άγνωστη τοποθεσία</string>
<string name="increase_column_count">Αύξηση αριθμού στηλών</string>
<string name="reduce_column_count">Μείωση αριθμού στηλών</string>
<string name="change_cover_image">Αλλαγή εικόνας εξώφυλλου</string>
<string name="change_cover_image">Αλλαγή εξώφυλλου φακέλου</string>
<string name="select_photo">Επιλογή φωτογραφίας</string>
<string name="use_default">Χρήση προκαθορισμένου</string>
<string name="use_default">Χρήση προεπιλεγμένης</string>
<string name="volume">Ένταση</string>
<string name="brightness">Φωτεινότητα</string>
<string name="lock_orientation">Κλείδωμα προσανατολισμού</string>
<string name="unlock_orientation">Ξεκλείδωμα προσανατολισμού</string>
<string name="change_orientation">Change orientation</string>
<string name="force_portrait">Force portrait</string>
<string name="force_landscape">Force landscape</string>
<string name="use_default_orientation">Use default orientation</string>
<string name="fix_date_taken">Fix Date Taken value</string>
<string name="fixing">Fixing</string>
<string name="dates_fixed_successfully">Dates fixed successfully</string>
<string name="change_orientation">Αλλαγή προσανατολισμού</string>
<string name="force_portrait">Εξαναγκασμός σε πορτρέτο</string>
<string name="force_landscape">Εξαναγκασμός σε τοπίο</string>
<string name="use_default_orientation">Χρήση προεπιλογής</string>
<string name="fix_date_taken">Διόρθωση ημερ. λήψης</string>
<string name="fixing">Διορθώνεται</string>
<string name="dates_fixed_successfully">Ημερ. διορθώθηκε με επιτυχία</string>
<!-- Filter -->
<string name="filter_media">Φιλτράρισμα πολυμέσων</string>
<string name="images">Εικόνες</string>
<string name="videos">Βίντεο</string>
<string name="gifs">GIFs</string>
<string name="raw_images">RAW images</string>
<string name="raw_images">RAW Εικόνες</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">Δεν βρέθηκε κανένα αρχείο πολυμέσων με τα επιλεγμένα φίλτρα.</string>
<string name="change_filters_underlined"><u>Αλλαγή φίλτρων</u></string>
<!-- Hide / Exclude -->
<string name="hide_folder_description">Αυτή η λειτουργικότητα κρύβει τον φάκελο προσθέτοντας ένα \'.nomedia\' αρχείο μέσα του, θα κρύψει και όλους τους υποφακέλους επίσης. Μπορείτε να τους δείτε με την επιλογή του \'Εμφάνιση κρυφών δεδομένων\' στις Ρυθμίσεις. Συνέχεια?</string>
<string name="hide_folder_description">Αυτή η λειτουργία κρύβει τον φάκελο προσθέτοντας ένα \".nomedia\" αρχείο μέσα του, θα κρύψει και όλους τους υποφακέλους επίσης. Μπορείτε να τους δείτε με την επιλογή του \'Εμφάνιση κρυφών δεδομένων\' στις Ρυθμίσεις. Συνέχεια?</string>
<string name="exclude">Εξαίρεση</string>
<string name="excluded_folders">Εξαίρεση φακέλων</string>
<string name="manage_excluded_folders">Διαχείριση εξαιρεμένων φακέλων</string>
@ -72,30 +73,30 @@
<!-- Editor -->
<string name="editor">Επεξεργαστής</string>
<string name="save">Αποθήκευση</string>
<string name="rotate">Γύρισμα</string>
<string name="path">Μονοπάτι</string>
<string name="invalid_image_path">Λάθος μονοπάτι εικόνας</string>
<string name="rotate">Περιστροφή</string>
<string name="path">Διαδρομή</string>
<string name="invalid_image_path">Μη έγκυρη διαδρομή εικόνας</string>
<string name="image_editing_failed">Η επεξεργασία εικόνας απέτυχε</string>
<string name="edit_image_with">Επεξεργασία εικόνας με:</string>
<string name="no_editor_found">Δεν βρέθηκε επεργαστής για τις εικόνες</string>
<string name="no_editor_found">Δεν βρέθηκε επεργαστής εικόνων</string>
<string name="unknown_file_location">Άγνωστη τοποθεσία αρχείου</string>
<string name="error_saving_file">Δεν ήταν δυνατή η αντικατάσταση του αρχείου πηγής</string>
<string name="rotate_left">Στροφή αριστερά</string>
<string name="rotate_right">Στροφή δεξιά</string>
<string name="rotate_one_eighty">Στροφή κατά 180º</string>
<string name="rotate_left">Περιστροφή αριστερά</string>
<string name="rotate_right">Περιστροφή δεξιά</string>
<string name="rotate_one_eighty">Περιστροφή κατά 180º</string>
<string name="flip">Αναποδογύρισμα</string>
<string name="flip_horizontally">Οριζόντιο αναποδογύρισμα</string>
<string name="flip_vertically">Κατακόρυφο αναποδογύρισμα</string>
<string name="edit_with">Επεξεργασία με</string>
<string name="free_aspect_ratio">Free</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
<string name="free_aspect_ratio">Ελεύθερο</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
<!-- Set wallpaper -->
<string name="simple_wallpaper">Simple Wallpaper</string>
<string name="set_as_wallpaper">Εφαρμογή ως ταπετσαρία</string>
<string name="set_as_wallpaper_failed">Η εφαρμογή ως ταπετσαρία απέτυχε</string>
<string name="set_as_wallpaper_with">Εφαρμογή ως ταπετσαρία με:</string>
<string name="setting_wallpaper">Εφαρμογή ταπετσαρίας&#8230;</string>
<string name="wallpaper_set_successfully">Εφαρμογή ταπετσαρίας επιτυχώς</string>
<string name="setting_wallpaper">Η ταπετσαρία εφαρμόζεται...</string>
<string name="wallpaper_set_successfully">Η ταπετσαρία εφαρμόστηκε</string>
<string name="portrait_aspect_ratio">Αναλογία σε κατακόρυφη προβολή</string>
<string name="landscape_aspect_ratio">Αναλογία σε οριζόντια προβολή</string>
<string name="home_screen">Αρχική οθόνη</string>
@ -103,8 +104,8 @@
<string name="home_and_lock_screen">Αρχική οθόνη και κλειδώματος</string>
<!-- Slideshow -->
<string name="slideshow">Προβολή εικόνων</string>
<string name="interval">Χρόνος επανάληψης (δευτερόλεπτα):</string>
<string name="slideshow">Παρουσίαση διαφανιών</string>
<string name="interval">Χρόνος επανάληψης (δευτ.) :</string>
<string name="include_photos">Συμπερίληψη φωτογραφιών</string>
<string name="include_videos">Συμπερίληψη βίντεο</string>
<string name="include_gifs">Συμπερίληψη GIFs</string>6
@ -122,22 +123,22 @@
<string name="group_direct_subfolders">Ομαδοποίηση υποφακέλων</string>
<!-- Grouping at media thumbnails -->
<string name="group_by">Group by</string>
<string name="do_not_group_files">Do not group files</string>
<string name="by_folder">Folder</string>
<string name="by_last_modified">Last modified</string>
<string name="by_date_taken">Date taken</string>
<string name="by_file_type">File type</string>
<string name="by_extension">Extension</string>
<string name="group_by">Ομαδοποίηση κατά</string>
<string name="do_not_group_files">Χωρίς</string>
<string name="by_folder">Φάκελο</string>
<string name="by_last_modified">Τελευταία τροποποίηση</string>
<string name="by_date_taken">Ημερομηνία λήψης</string>
<string name="by_file_type">Τύπο αρχείου</string>
<string name="by_extension">Επέκταση</string>
<!-- Settings -->
<string name="autoplay_videos">Αυτόματη αναπαραγωγή βίντεο</string>
<string name="toggle_filename">Αλλαγή ορατότητας ονόματος αρχείων</string>
<string name="toggle_filename">Αλλαγή προβολής ονόματος αρχείων</string>
<string name="loop_videos">Επανάληψη βίντεο</string>
<string name="animate_gifs">Εμφάνιση κινούμενων GIFs στα εικονίδια</string>
<string name="max_brightness">Μέγιστη φωτεινότητα κατά την θέαση πλήρους οθόνης</string>
<string name="max_brightness">Μέγιστη φωτεινότητα κατά την προβολή πλήρους οθόνης</string>
<string name="crop_thumbnails">Κόψιμο εικονιδίων σε τετράγωνα</string>
<string name="screen_rotation_by">Γύρισμα των πολυμέσων πλήρους οθόνης με</string>
<string name="screen_rotation_by">Περιστροφή σε πλήρη οθόνη απο</string>
<string name="screen_rotation_system_setting">Ρυθμίσεις συστήματος</string>
<string name="screen_rotation_device_rotation">Περιστροφή συσκευής</string>
<string name="screen_rotation_aspect_ratio">Αναλογία εικόνας</string>
@ -148,28 +149,28 @@
<string name="allow_photo_gestures">Να επιτρέπεται ο έλεγχος φωτεινότητας με κατακόρυφες κινήσεις</string>
<string name="allow_video_gestures">Να επιτρέπεται ο έλεγχος έντασης του βίντεο και φωτεινότητας με κατακόρυφες
κινήσεις (gestures)</string>
<string name="show_media_count">Εμφάνιση του πλήθους των πολυμέσων σε φάκελο, στην κύρια οθόνη</string>
<string name="show_media_count">Εμφάνιση του αριθμού πολυμέσων στον φάκελο, στην κύρια οθόνη</string>
<string name="replace_share_with_rotate">Αντικατάσταση της "Κοινής χρήσης" με "Περιστροφή" στο μενού πλήρους οθόνης</string>
<string name="show_extended_details">Εμφάνιση λεπτομερειών στα πολυμέσα σε κατάσταση πλήρους οθόνης</string>
<string name="manage_extended_details">Διαχείριση εκτεταμένων λεπτομερειών</string>
<string name="one_finger_zoom">Να επιτρέπεται μεγένθυση με ένα δάχτυλο σε πλήρη οθόνη</string>
<string name="allow_instant_change">Να επιτρέπεται η άμεση αλλαγή των μέσων με το άγγιγμα στις άκρες της οθόνης</string>
<string name="replace_zoomable_images">Αντικατάσταση των φωτογραφιών που απαιτούν ζούμ με άλλες καλύτερης ποιότητας</string>
<string name="allow_deep_zooming_images">Επιτρέπει βαθύ ζουμ στις εικόνες</string>
<string name="hide_extended_details">Απόκρυψη λεπτομερειών όταν η μπάρα κατάστασης είναι κρυμμένη</string>
<string name="do_extra_check">Επιπλέον έλεγχος για την αποφυγή εμφάνισης λανθασμένων αρχείων</string>
<string name="show_at_bottom">Show some action buttons at the bottom of the screen</string>
<string name="show_recycle_bin">Show the Recycle Bin at the folders screen</string>
<string name="show_at_bottom">Εμφάνιση μερικών κουμπιών λειτουργιών στο κάτω μέρος της οθόνης</string>
<string name="show_recycle_bin">Εμφάνιση του κάδου ανακύκλωσης στην οθόνη φακέλων</string>
<!-- Setting sections -->
<string name="thumbnails">Εικονίδια</string>
<string name="fullscreen_media">Πολυμέσα πλήρους οθόνης</string>
<string name="extended_details">Περισσότερες λεπτομέρειες</string>
<string name="bottom_actions">Bottom actions</string>
<string name="bottom_actions">Λειτουργίες στο κάτω μέρος</string>
<!-- Bottom actions -->
<string name="manage_bottom_actions">Manage visible bottom actions</string>
<string name="toggle_favorite">Toggle favorite</string>
<string name="toggle_file_visibility">Toggle file visibility</string>
<string name="manage_bottom_actions">Διαχείρηση εμφάνισης λειτουργιών</string>
<string name="toggle_favorite">Εναλλαγή αγαπημένων</string>
<string name="toggle_file_visibility">Εναλλαγή προβολής αρχείου</string>
<!-- FAQ -->
<string name="faq_1_title">Πώς μπορώ να κάνω το Simple Gallery προκαθορισμένη εφαρμογή συλλογής πολυμέσων;</string>
@ -192,24 +193,26 @@
Αυτό θα κάνει ορατούς μόνο τους επιλεγμένους φακέλους, καθώς η εξαίρεση και η συμπερίληψη λειτουργούν αναδρομικά και αν ενας φάκελος ανήκει και στα δύο, θα εμφανιστεί.</string>
<string name="faq_9_title">Οι εικόνες πλήρους οθόνης έχουν κάποια περίεργα σημάδια. Μπορώ κάπως να βελτιώσω την ποιότητα;</string>
<string name="faq_9_text">Ναι. Υπάρχει ένας διακόπτης στις Ρυθμίσεις με το κείμενο \"Αντικατάσταση των φωτογραφιών που απαιτούν ζούμ με άλλες καλύτερης ποιότητας\". Μπορείτε να χρησιμοποιήσετε αυτό. Θα βελτιώσει την ποιότητα των φωτογραφιών, αλλά θα θολώσουν στο μεγάλο ζουμ.</string>
<string name="faq_11_title">Can I somehow group media file thumbnails?</string>
<string name="faq_11_text">Sure, just use the \"Group by\" menu item while at the thumbnails view. You can group files by multiple criteria, including Date Taken. If you use the \"Show all folders content\" function you can group them by folders too.</string>
<string name="faq_12_title">Sorting by Date Taken doesn\'t seem to work properly, how can I fix it?</string>
<string name="faq_12_text">It is most likely caused by the files being copied from somewhere. You can fix it by selecting the file thumbnails and selecting \"Fix Date Taken value\".</string>
<string name="faq_10_title">Μπορώ να περικόψω εικόνες με την εφαρμογή;</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>
<string name="faq_12_text">Αυτό πιθανότατα προκαλείται από την αντιγραφή των αρχείων από κάπου. Μπορείτε να το διορθώσετε επιλέγοντας τις μικρογραφίες αρχείων και επιλέγοντας \"Επιδιόρθωση ημερ. λήψης\".</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<!-- Short description has to have less than 80 chars -->
<string name="app_short_description">Μία γκάλερι για την προβολή φωτογραφιών και βίντεο χωρίς διαφημίσεις.</string>
<string name="app_short_description">Μία Gallery για την προβολή φωτογραφιών και βίντεο χωρίς διαφημίσεις.</string>
<string name="app_long_description">
Μία απλή εφαρμογή για την εμφάνιση φωτογραφιών και βίντεο. Τα αντικείμενα μπορούνα να ταξινομηθούν με βάση την ημερ/νία, το μέγεθος και το όνομα με αύξουσα ή φθήνουσα σειρά, οι φωτογραφίες μπορούν να μεγεθυνθούν. Τα αρχεία πολυμέσων εμφανίζονται σε πολλαπλές στήλες ανάλογα με τον μέγεθος της οθόνης και μπορείτε να αλλάξετε το πλήθος των στηλών με τα 2 δάχτυλα (pintch). Μπορούν να μετονομαστούν, να μοιραστούν, να διαγραφούν, να αντιγραφούν και να μετακινηθούν. Οι εικόνες επίσης μπορούν να κοπούν, να περιστραφούν, να αντιστραφούν ή να οριστούν ως ταπετσαρίες κατευθείαν από την εφαρμογή.
Μία απλή εφαρμογή για την προβολή φωτογραφιών και βίντεο. Τα αντικείμενα μπορούνα να ταξινομηθούν με βάση την ημερ/νία, το μέγεθος και το όνομα με αύξουσα ή φθήνουσα σειρά, οι φωτογραφίες μπορούν να μεγεθυνθούν. Τα αρχεία πολυμέσων εμφανίζονται σε πολλαπλές στήλες ανάλογα με τον μέγεθος της οθόνης και μπορείτε να αλλάξετε τον αριθμό των στηλών με τα 2 δάχτυλα (pintch). Μπορούν να μετονομαστούν, να μοιραστούν, να διαγραφούν, να αντιγραφούν και να μετακινηθούν. Οι εικόνες επίσης μπορούν να κοπούν, να περιστραφούν, να αντιστραφούν ή να οριστούν ως ταπετσαρίες κατευθείαν από την εφαρμογή.
Η γκάλερι επίσης μπορεί να χρησιμοποιηθεί από άλλες εφαρμογές για προεμφάνιση φωτογραφιών / βίντεο, να μπουν ως επισυνάψεις σε εφαρμογές email κλπ. Είναι τέλεια για καθημερινή χρήση.
Η Gallery επίσης μπορεί να χρησιμοποιηθεί από άλλες εφαρμογές για προεμφάνιση φωτογραφιών / βίντεο, να μπουν ως επισυνάψεις σε εφαρμογές email κλπ. Είναι τέλεια για καθημερινή χρήση.
Το δικαίωμα δαχτυλικού αποτυπώματος χρειάζεται για το κλείδωμα των κρυφών αντικειμένων ή ολόκληρης της εφαρμογής.
Η εξουσιοδότηση δαχτυλικού αποτυπώματος χρειάζεται για το κλείδωμα των κρυφών αντικειμένων ή ολόκληρης της εφαρμογής.
Δεν περιέχει διαφημίσεις ή περιττά δικαιώματα. Έιναι όλη ανοιχτού κώδικα και δίνει την δυνατότητα επιλογής των χρωμάτων της εφαρμογής.
Δεν περιέχει διαφημίσεις ή περιττά δικαιώματα. Έιναι όλη ανοιχτού κώδικα και παρέχει προσαρμόσιμα χρώματα για την εφαρμογή.
Αυτή η εφαργμογή είναι κομμάτι μιας σειρά εφαρμογών. Μπορείτε να βρείτε τις υπόλοιπες στο https://www.simplemobiletools.com
Αυτή η εφαρμογή είναι μέρος μιας σειράς εφαρμογών. Μπορείτε να βρείτε τις υπόλοιπες στο https://www.simplemobiletools.com
</string>
<!--

View file

@ -38,6 +38,7 @@
<string name="videos">Vídeos</string>
<string name="gifs">GIFs</string>
<string name="raw_images">Imagenes RAW</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">No se han encontrado ficheros con los filtros seleccionados.</string>
<string name="change_filters_underlined"><u>Cambiar filtros</u></string>
@ -153,15 +154,15 @@
<string name="manage_extended_details">Administrar detalles ampliados</string>
<string name="one_finger_zoom">Permitir zoom con un dedo en pantalla completa</string>
<string name="allow_instant_change">Permitir el cambio instantáneo de medios haciendo clic en los lados de la pantalla</string>
<string name="replace_zoomable_images">Reemplace las imágenes con mucho zoom por otras de mejor calidad</string>
<string name="allow_deep_zooming_images">Permitir zoom profundo</string>
<string name="hide_extended_details">Ocultar detalles ampliados cuando la barra de estado está oculta</string>
<string name="do_extra_check">Hacer una comprobación adicional para evitar mostrar archivos inválidos</string>
<string name="show_at_bottom">Mostrar algunos botones de acción en la parte inferior de la pantalla</string>
<string name="show_recycle_bin">Muestra la papelera de reciclaje en la pantalla de carpetas</string>
<string name="show_recycle_bin">Mostrar la papelera de reciclaje en la pantalla de carpetas</string>
<!-- Setting sections -->
<string name="thumbnails">Miniaturas</string>
<string name="fullscreen_media">Medios a pantalla compelta</string>
<string name="fullscreen_media">Medios a pantalla completa</string>
<string name="extended_details">Detalles ampliados</string>
<string name="bottom_actions">Acciones en la parte inferior</string>
@ -173,9 +174,9 @@
<!-- FAQ -->
<string name="faq_1_title">¿Cómo puedo hacer que Simple Gallery sea la galería de dispositivos predeterminada?</string>
<string name="faq_1_text">Primero tiene que encontrar la galería predeterminada actualmente en la sección Aplicaciones de la configuración de su dispositivo, busque un botón que diga algo como \"Abrir por defecto \", haga clic en él, luego seleccione \"Borrar valores predeterminados \".
La próxima vez que intente abrir una imagen o video, debería ver un selector de aplicaciones, donde puede seleccionar Galería simple y convertirla en la aplicación predeterminada.</string>
La próxima vez que intente abrir una imagen o video, debería ver un selector de aplicaciones, donde puede seleccionar Galería Simple y convertirla en la aplicación predeterminada.</string>
<string name="faq_2_title">He protegido la aplicación con una contraseña, pero la he olvidado. ¿Que puedo hacer?</string>
<string name="faq_2_text">Puedes resolverlo de 2 maneras. Puede reinstalar la aplicación o encontrar la aplicación en la configuración de su dispositivo y seleccionar \"Borrar datos \". Restablecerá todas sus configuraciones, no eliminará ningún archivo multimedia.</string>
<string name="faq_2_text">Puede resolverlo de 2 maneras. Puede reinstalar la aplicación o encontrar la aplicación en la configuración de su dispositivo y seleccionar \"Borrar datos \". Restablecerá todas sus configuraciones, no eliminará ningún archivo multimedia.</string>
<string name="faq_3_title">¿Cómo puedo hacer que un álbum siempre aparezca en la parte superior?</string>
<string name="faq_3_text">Puede aguantar pulsado el álbum deseado y seleccionar el ícono Pin en el menú de acción, que lo fijará en la parte superior. También puede anclar varias carpetas, los artículos fijados se ordenarán por el método de clasificación predeterminado.</string>
<string name="faq_4_title">¿Cómo puedo avanzar videos?</string>
@ -190,7 +191,7 @@
<string name="faq_8_text">Agregar una carpeta en las carpetas incluidas no excluye automáticamente nada. Lo que puede hacer es ir a Ajustes -> Administrar carpetas excluidas, excluir la carpeta raíz \"/\", luego agregar las carpetas deseadas en Configuración -> Administrar carpetas incluidas.
Esto hará que solo las carpetas seleccionadas sean visibles, ya que tanto la exclusión como la inclusión son recursivas y si una carpeta está excluida e incluida, aparecerá.</string>
<string name="faq_9_title">Las imágenes a pantalla completa tienen artefactos extraños, ¿puedo de alguna manera mejorar la calidad?</string>
<string name="faq_9_text">Sí, hay una alternancia en Configuración que dice \"Reemplazar imágenes con zoom profundo con las de mejor calidad\", puedes usar eso. Mejorará la calidad de las imágenes, pero se volverán borrosas una vez que intente ampliar demasiado.</string>
<string name="faq_9_text">Sí, hay una alternancia en Ajustes que dice \"Reemplazar imágenes con zoom profundo con las de mejor calidad\", puede usar eso. Mejorará la calidad de las imágenes, pero se volverán borrosas una vez que intente ampliar demasiado.</string>
<string name="faq_10_title">¿Puedo recortar imágenes con esta aplicación?</string>
<string name="faq_10_text">Sí, puede recortar imágenes en el editor arrastrando las esquinas de la imagen. Puede acceder al editor pulsando prolongadamente una imagen en miniatura y seleccionando Editar, o seleccionando Editar en la vista de pantalla completa.</string>
<string name="faq_11_title">¿Puedo de alguna manera agrupar miniaturas de archivos multimedia?</string>

View file

@ -38,6 +38,7 @@
<string name="videos">Videot</string>
<string name="gifs">GIFit</string>
<string name="raw_images">RAW images</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">Mediaa ei löytynyt valituilla suotimilla.</string>
<string name="change_filters_underlined"><u>Muuta suotimia</u></string>
@ -153,7 +154,7 @@
<string name="manage_extended_details">Hallitse yksityiskohtaisia tietoja</string>
<string name="one_finger_zoom">Salli lähentäminen yhdellä sormella täyden ruudun tilassa</string>
<string name="allow_instant_change">Salli median selaaminen ruudun reunoja koskettamalla</string>
<string name="replace_zoomable_images">Korvaa syvälle lähennettävät kuvat parempilaatuisella</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="hide_extended_details">Piilota yksityiskohtaiset tiedot kun tilapalkki on piilotettu</string>
<string name="do_extra_check">Tee ylimääräinen tarkistus rikkinäisten tiedostojen varalta</string>
<string name="show_at_bottom">Show some action buttons at the bottom of the screen</string>

View file

@ -38,6 +38,7 @@
<string name="videos">Vidéos</string>
<string name="gifs">GIF</string>
<string name="raw_images">RAW images</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">Aucun fichier média trouvé avec les filtres sélectionnés.</string>
<string name="change_filters_underlined"><u>Changer les filtres</u></string>
@ -153,7 +154,7 @@
<string name="manage_extended_details">Gérer les détails supplémentaires</string>
<string name="one_finger_zoom">Autoriser le zoom avec un doigt sur un média en plein écran</string>
<string name="allow_instant_change">Autoriser le changement instantané de média en cliquant sur les côtés de l\'écran</string>
<string name="replace_zoomable_images">Remplacer les images zoomables profondes par des images de meilleure qualité</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="hide_extended_details">Masquer les détails supplémentaires lorsque la barre d\'état est masquée</string>
<string name="do_extra_check">Faire une vérification supplémentaire pour éviter de montrer des fichiers invalides</string>
<string name="show_at_bottom">Show some action buttons at the bottom of the screen</string>

View file

@ -38,6 +38,7 @@
<string name="videos">Vídeos</string>
<string name="gifs">GIFs</string>
<string name="raw_images">RAW images</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">Non se atoparon medios dos indicados polo filtro.</string>
<string name="change_filters_underlined"><u>Cambiar filtro</u></string>
@ -153,7 +154,7 @@
<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="replace_zoomable_images">Substituír imaxes con un gran zoom por por outras con mellor calidade</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="hide_extended_details">Agochar detalles extendidos cando a barra de estado está oculta</string>
<string name="do_extra_check">Facer unha comprobación extra para evitar mostrar ficheiros non válidos</string>
<string name="show_at_bottom">Show some action buttons at the bottom of the screen</string>

View file

@ -38,6 +38,7 @@
<string name="videos">Video</string>
<string name="gifs">GIF-ovi</string>
<string name="raw_images">RAW images</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">Nije pronađena nijedna datoteka s odabranim filtrom.</string>
<string name="change_filters_underlined"><u>Promijeni filter</u></string>
@ -153,7 +154,7 @@
<string name="manage_extended_details">Upravljaj proširenim pojedinostima</string>
<string name="one_finger_zoom">Omogući zumiranje jednim prstom na mediju cijelog zaslona</string>
<string name="allow_instant_change">Dopusti trenutačno mijenjanje medija dodirom na stranice zaslona</string>
<string name="replace_zoomable_images">Zamijenite slike s dubokim zumom za one s boljom kvalitetom</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="hide_extended_details">Sakrij proširene pojedinosti kada je traka statusa skrivena</string>
<string name="do_extra_check">Napravite dodatnu provjeru da biste izbjegli prikazivanje nevažećih datoteka</string>
<string name="show_at_bottom">Show some action buttons at the bottom of the screen</string>

View file

@ -38,6 +38,7 @@
<string name="videos">Videos</string>
<string name="gifs">GIFs</string>
<string name="raw_images">RAW images</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">No media files have been found with the selected filters.</string>
<string name="change_filters_underlined"><u>Change filters</u></string>
@ -153,7 +154,7 @@
<string name="manage_extended_details">Manage extended details</string>
<string name="one_finger_zoom">Allow one finger zoom at fullscreen media</string>
<string name="allow_instant_change">Allow instantly changing media by clicking on screen sides</string>
<string name="replace_zoomable_images">Replace deep zoomable images with better quality ones</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="hide_extended_details">Hide extended details when status bar is hidden</string>
<string name="do_extra_check">Do an extra check to avoid showing invalid files</string>
<string name="show_at_bottom">Show some action buttons at the bottom of the screen</string>

View file

@ -28,9 +28,9 @@
<string name="force_portrait">Forza verticale</string>
<string name="force_landscape">Forza orizzontale</string>
<string name="use_default_orientation">Usa l\'orientamento predefinito</string>
<string name="fix_date_taken">Fix Date Taken value</string>
<string name="fixing">Fixing</string>
<string name="dates_fixed_successfully">Dates fixed successfully</string>
<string name="fix_date_taken">Correggi valore Data acquisizione</string>
<string name="fixing">Correzione</string>
<string name="dates_fixed_successfully">Date aggiornate correttamente</string>
<!-- Filter -->
<string name="filter_media">Filtra i media</string>
@ -38,6 +38,7 @@
<string name="videos">Video</string>
<string name="gifs">GIF</string>
<string name="raw_images">Immagini RAW</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">Nessun file trovato per il filtro selezionato.</string>
<string name="change_filters_underlined"><u>Cambia filtro</u></string>
@ -87,7 +88,7 @@
<string name="flip_horizontally">Capovolgi orizzontalmente</string>
<string name="flip_vertically">Capovolgi verticalmente</string>
<string name="edit_with">Modifica con</string>
<string name="free_aspect_ratio">Free</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
<string name="free_aspect_ratio">Libero</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
<!-- Set wallpaper -->
<string name="simple_wallpaper">Sfondo semplice</string>
@ -153,11 +154,11 @@
<string name="manage_extended_details">Gestisci le informazioni estese</string>
<string name="one_finger_zoom">Abilita zoom con un dito su media a schermo intero</string>
<string name="allow_instant_change">Cambia media istantaneamente toccando sui lati dello schermo</string>
<string name="replace_zoomable_images">Sostituisci le immagini ingrandibili a fondo con altre di migliore qualità</string>
<string name="allow_deep_zooming_images">Permetti zoom immagini profondo</string>
<string name="hide_extended_details">Nascondi i dettagli estesi quando la barra di stato è nascosta</string>
<string name="do_extra_check">Fai un controllo ulteriore per evitare di mostrare file non validi</string>
<string name="show_at_bottom">Mostra alcuni pulsanti azione in fondo allo schermo</string>
<string name="show_recycle_bin">Show the Recycle Bin at the folders screen</string>
<string name="show_recycle_bin">Mostra il cestino nella schermata delle cartelle</string>
<!-- Setting sections -->
<string name="thumbnails">Miniature</string>
@ -195,8 +196,8 @@
<string name="faq_10_text">Sì, puoi ritagliare le immagini nell\'editor, trascinando gli angoli dell\'immagine. Puoi usare l\'editor sia premendo a lungo la miniatura di un\'immagine e selezionando Modifica, o selezionando Modifica mentre la vedi a schermo intero.</string>
<string name="faq_11_title">Posso raggruppare in qualche modo le miniature dei file?</string>
<string name="faq_11_text">Certo, usa il menu \"Raggruppa per\" mentre visualizzi le miniature. Puoi raggruppare i file con diversi criteri, incluso la data di creazione. Se utilizzi la funzione \"Mostra tutti i contenuti\" puoi anche raggrupparli per cartelle.</string>
<string name="faq_12_title">Sorting by Date Taken doesn\'t seem to work properly, how can I fix it?</string>
<string name="faq_12_text">It is most likely caused by the files being copied from somewhere. You can fix it by selecting the file thumbnails and selecting \"Fix Date Taken value\".</string>
<string name="faq_12_title">L\'ordinamento per data acquisizione sembra non funzionare bene, come posso risolvere?</string>
<string name="faq_12_text">Probabilmente è causato dai file copiati da altre parti. Puoi risolvere selezionando le miniature dei file e scegliendo \"Correggi valore Data acquisizione\".</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<!-- Short description has to have less than 80 chars -->

View file

@ -28,9 +28,9 @@
<string name="force_portrait">縦で固定</string>
<string name="force_landscape">横で固定</string>
<string name="use_default_orientation">デフォルト仕様</string>
<string name="fix_date_taken">Fix Date Taken value</string>
<string name="fixing">Fixing</string>
<string name="dates_fixed_successfully">Dates fixed successfully</string>
<string name="fix_date_taken">撮影日の値を修正</string>
<string name="fixing">修正中</string>
<string name="dates_fixed_successfully">撮影日が正常に修正されました</string>
<!-- Filter -->
<string name="filter_media">表示する形式</string>
@ -38,6 +38,7 @@
<string name="videos">ビデオ</string>
<string name="gifs">GIF</string>
<string name="raw_images">RAW</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">条件に該当するメディアがありません。</string>
<string name="change_filters_underlined"><u>絞り込み条件を変更</u></string>
@ -82,7 +83,7 @@
<string name="error_saving_file">元のファイルを上書きできません</string>
<string name="rotate_left">左に回転</string>
<string name="rotate_right">右に回転</string>
<string name="rotate_one_eighty">180o回転</string>
<string name="rotate_one_eighty">180回転</string>
<string name="flip">反転</string>
<string name="flip_horizontally">水平方向に反転</string>
<string name="flip_vertically">垂直方向に反転</string>
@ -153,7 +154,7 @@
<string name="manage_extended_details">詳細表示を管理する</string>
<string name="one_finger_zoom">メディアを指ひとつでズーム可能にする</string>
<string name="allow_instant_change">画面の端を押してメディアをスライドする</string>
<string name="replace_zoomable_images">ズームが可能な画像を高画質な物にする</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="hide_extended_details">ステータスバーが非表示の時は詳細を隠す</string>
<string name="do_extra_check">無効なファイルを見せない調整を行う</string>
<string name="show_at_bottom">画面下部にアクションボタンを表示する</string>

View file

@ -38,6 +38,7 @@
<string name="videos">비디오</string>
<string name="gifs">GIFs</string>
<string name="raw_images">RAW images</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">설정된 필터와 일치하는 컨텐츠가 존재하지 않습니다.</string>
<string name="change_filters_underlined"><u>필터 변경</u></string>
@ -153,7 +154,7 @@
<string name="manage_extended_details">확장된 세부정보 관리</string>
<string name="one_finger_zoom">전체화면 모드에서 한 손가락으로 확대 및 축소</string>
<string name="allow_instant_change">측면 클릭으로 미디어 즉시변경</string>
<string name="replace_zoomable_images">확대 축소 가능한 이미지를 더 좋은 품질로 교체</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="hide_extended_details">상태 표시 줄이 숨겨져있을 때 확장 된 세부 정보 숨김</string>
<string name="do_extra_check">잘못된 파일 표시를 방지하기 위해 추가 검사 수행</string>
<string name="show_at_bottom">Show some action buttons at the bottom of the screen</string>

View file

@ -38,6 +38,7 @@
<string name="videos">Vaizdo įrašai</string>
<string name="gifs">GIF\'ai</string>
<string name="raw_images">RAW images</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">Su pasirinktais filtrais nerasta medijos bylų.</string>
<string name="change_filters_underlined"><u>Pakeisti filtrus</u></string>
@ -153,7 +154,7 @@
<string name="manage_extended_details">Tvarkykite išsamią informaciją</string>
<string name="one_finger_zoom">Leisti vienu pirštu pritraukti viso ekrano rėžime</string>
<string name="allow_instant_change">Leiskite akimirksniu keisti mediją spustelėdami ekrano šonuose</string>
<string name="replace_zoomable_images">Pakeisti giliai priartinamus atvaizdus su geresnės kokybės atvaizdais</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="hide_extended_details">Slėpti išsamią informaciją, kai būsenos juosta yra paslėpta</string>
<string name="do_extra_check">Atlikti papildomą patikrinimą, kad nebūtų rodomos sugadintos bylos</string>
<string name="show_at_bottom">Show some action buttons at the bottom of the screen</string>

View file

@ -24,20 +24,21 @@
<string name="brightness">Lysstyrke</string>
<string name="lock_orientation">Lås skjermorientering</string>
<string name="unlock_orientation">Lås opp skjermorientering</string>
<string name="change_orientation">Change orientation</string>
<string name="force_portrait">Force portrait</string>
<string name="force_landscape">Force landscape</string>
<string name="use_default_orientation">Use default orientation</string>
<string name="fix_date_taken">Fix Date Taken value</string>
<string name="fixing">Fixing</string>
<string name="dates_fixed_successfully">Dates fixed successfully</string>
<string name="change_orientation">Endre orientering</string>
<string name="force_portrait">Framtving portrett</string>
<string name="force_landscape">Framtving landskap</string>
<string name="use_default_orientation">Bruk standardorientering</string>
<string name="fix_date_taken">Korriger Dato tatt-verdi</string>
<string name="fixing">Korrigerer</string>
<string name="dates_fixed_successfully">Datoer er korrigerte</string>
<!-- Filter -->
<string name="filter_media">Filtrer media</string>
<string name="images">Bilder</string>
<string name="videos">Videoer</string>
<string name="gifs">GIF-bilder</string>
<string name="raw_images">RAW images</string>
<string name="raw_images">RAW-format-bilder</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">Ingen media-filer er funnet med de valgte filtrene.</string>
<string name="change_filters_underlined"><u>Endre filtere</u></string>
@ -87,7 +88,7 @@
<string name="flip_horizontally">Speilvend horisontalt</string>
<string name="flip_vertically">Speilvend vertikalt</string>
<string name="edit_with">Rediger med</string>
<string name="free_aspect_ratio">Free</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
<string name="free_aspect_ratio">Fri</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
<!-- Set wallpaper -->
<string name="simple_wallpaper">Bakgrunnsbilde</string>
@ -122,13 +123,13 @@
<string name="group_direct_subfolders">Group direct subfolders</string>
<!-- Grouping at media thumbnails -->
<string name="group_by">Group by</string>
<string name="do_not_group_files">Do not group files</string>
<string name="by_folder">Folder</string>
<string name="by_last_modified">Last modified</string>
<string name="by_date_taken">Date taken</string>
<string name="by_file_type">File type</string>
<string name="by_extension">Extension</string>
<string name="group_by">Grupper etter</string>
<string name="do_not_group_files">Ikke grupper filer</string>
<string name="by_folder">Mappe</string>
<string name="by_last_modified">Sist endret</string>
<string name="by_date_taken">Dato tatt</string>
<string name="by_file_type">Filtype</string>
<string name="by_extension">Endelse</string>
<!-- Settings -->
<string name="autoplay_videos">Avspill videoer automatisk</string>
@ -153,22 +154,22 @@
<string name="manage_extended_details">Velg detaljer</string>
<string name="one_finger_zoom">Tillat en-finger-zoom i mediavisningen</string>
<string name="allow_instant_change">Tillat å skifte media øyeblikkelig ved å trykke på kanten av skjermen</string>
<string name="replace_zoomable_images">Erstatt dyp-zoombare bilder med bilder av bedre kvalitet</string>
<string name="allow_deep_zooming_images">Tillat dyp bildezooming</string>
<string name="hide_extended_details">Skjul utvidede detaljer når statuslinjen er skjult</string>
<string name="do_extra_check">Gjør en ekstra sjekk for å unngå visning av ugyldige filer</string>
<string name="show_at_bottom">Show some action buttons at the bottom of the screen</string>
<string name="show_recycle_bin">Show the Recycle Bin at the folders screen</string>
<string name="show_at_bottom">Vis noen handlingsknapper nederst på skjermen</string>
<string name="show_recycle_bin">Vis papirkurven på mappeskjermen</string>
<!-- Setting sections -->
<string name="thumbnails">Minibilder</string>
<string name="fullscreen_media">Mediavisning</string>
<string name="extended_details">Utvidede detaljer</string>
<string name="bottom_actions">Bottom actions</string>
<string name="bottom_actions">Handlinger nederst</string>
<!-- Bottom actions -->
<string name="manage_bottom_actions">Manage visible bottom actions</string>
<string name="toggle_favorite">Toggle favorite</string>
<string name="toggle_file_visibility">Toggle file visibility</string>
<string name="manage_bottom_actions">Behandle nedre handlingsknapper</string>
<string name="toggle_favorite">Favoritt av/på</string>
<string name="toggle_file_visibility">Filsynlighet av/på</string>
<!-- FAQ -->
<string name="faq_1_title">How can I make Simple Gallery the default device gallery?</string>

View file

@ -28,9 +28,9 @@
<string name="force_portrait">Portretmodus forceren</string>
<string name="force_landscape">Landschapsmodus forceren</string>
<string name="use_default_orientation">Standaardmodus gebruiken</string>
<string name="fix_date_taken">Fix Date Taken value</string>
<string name="fixing">Fixing</string>
<string name="dates_fixed_successfully">Dates fixed successfully</string>
<string name="fix_date_taken">Datum opname corrigeren</string>
<string name="fixing">Corrigeren</string>
<string name="dates_fixed_successfully">Datums zijn gecorrigeerd</string>
<!-- Filter -->
<string name="filter_media">Media filteren</string>
@ -38,6 +38,7 @@
<string name="videos">Video\'s</string>
<string name="gifs">GIF-bestanden</string>
<string name="raw_images">RAW-afbeeldingen</string>
<string name="svgs">SVG-vectorafbeeldingen</string>
<string name="no_media_with_filters">Er zijn geen bestanden gevonden met de huidige filters.</string>
<string name="change_filters_underlined"><u>Filters aanpassen</u></string>
@ -153,7 +154,7 @@
<string name="manage_extended_details">Uitgebreide informatie</string>
<string name="one_finger_zoom">Met één vinger zoomen in volledig scherm</string>
<string name="allow_instant_change">Direct naar vorige/volgende door op de zijkanten van het scherm te tikken</string>
<string name="replace_zoomable_images">In hoge kwaliteit weergeven (ten koste van ver inzoomen)</string>
<string name="allow_deep_zooming_images">Verder inzoomen mogelijk maken</string>
<string name="hide_extended_details">Uitgebreide informatie niet tonen als de statusbalk is verborgen</string>
<string name="do_extra_check">Ongeldige bestanden verbergen</string>
<string name="show_at_bottom">Enkele actieknoppen onderaan het scherm tonen</string>

View file

@ -28,9 +28,9 @@
<string name="force_portrait">Wymuś pionową</string>
<string name="force_landscape">Wymuś poziomą</string>
<string name="use_default_orientation">Używaj systemowej</string>
<string name="fix_date_taken">Fix Date Taken value</string>
<string name="fixing">Fixing</string>
<string name="dates_fixed_successfully">Dates fixed successfully</string>
<string name="fix_date_taken">Napraw datę utworzenia</string>
<string name="fixing">Naprawiam</string>
<string name="dates_fixed_successfully">Daty zostały naprawione</string>
<!-- Filter -->
<string name="filter_media">Filtruj multimedia</string>
@ -38,11 +38,12 @@
<string name="videos">Filmy</string>
<string name="gifs">GIFy</string>
<string name="raw_images">Obrazy RAW</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">Nie znalazłem multimediów z wybranymi filtrami.</string>
<string name="change_filters_underlined"><u>Zmień filtry</u></string>
<!-- Hide / Exclude -->
<string name="hide_folder_description">Ta funkcja ukrywa foldery, dodając do nich pusty plik .nomedia. Aby móc je zobaczyć, należy włączyć opcję \'Pokazuj ukryte foldery\' w ustawieniach. Kontynuować?</string>
<string name="hide_folder_description">Ta funkcja ukrywa foldery, dodając do nich pusty plik \'.nomedia\'. Aby móc je zobaczyć, należy włączyć opcję \'Pokazuj ukryte foldery\' w ustawieniach. Kontynuować?</string>
<string name="exclude">Wyklucz</string>
<string name="excluded_folders">Wykluczone foldery</string>
<string name="manage_excluded_folders">Zarządzaj wykluczonymi folderami</string>
@ -53,7 +54,7 @@
<string name="remove_all_description">Usunąć wszystkie foldery z listy wykluczonych? Foldery nie zostaną fizycznie usunięte.</string>
  <string name="hidden_folders">Ukryte foldery</string>
   <string name="manage_hidden_folders">Zarządzaj ukrytymi folderami</string>
   <string name="hidden_folders_placeholder">Zdaje się, że nie masz żadnych folderów z plikiem \".nomedia\".</string>
<string name="hidden_folders_placeholder">Zdaje się, że nie masz żadnych folderów z plikiem \'.nomedia\'.</string>
<!-- Include folders -->
<string name="include_folders">Dołączone foldery</string>
@ -153,8 +154,8 @@
<string name="manage_extended_details">Zarządzaj dodatkowymi szczegółami</string>
   <string name="one_finger_zoom">Zezwalaj na powiększanie jednym palcem w widoku pełnoekranowym</string>
   <string name="allow_instant_change">Zezwalaj na natychmiastową zmianę multimediów po kliknięciu boków ekranu</string>
   <string name="replace_zoomable_images">Zamieniaj powiększalne obrazy na te o lepszej jakości</string>
   <string name="hide_extended_details">Ukrywaj dodatkowe szczegóły gdy pasek stanu jest ukryty</string>
<string name="allow_deep_zooming_images">Zezwalaj na duże powiększanie obrazów</string>
<string name="hide_extended_details">Ukrywaj dodatkowe szczegóły, gdy pasek stanu jest ukryty</string>
   <string name="do_extra_check">Dodatkowe sprawdzenie w celu uniknięcia pokazywania niewłaściwych plików</string>
<string name="show_at_bottom">Pokazuj niektóre przyciski akcji na dole ekranu</string>
<string name="show_recycle_bin">Pokazuj kosz w widoku folderów</string>
@ -182,10 +183,10 @@
   <string name="faq_5_title">Jaka jest różnica między ukryciem, a wykluczeniem folderu?</string>
   <string name="faq_5_text">Wykluczenie działa tylko w obrębie niniejszej aplikacji (wszędzie indziej pliki są normalnie widoczne), ukrywanie - w obrębie całego systemu (nie widać ich nigdzie), dodawany jest wtedy do folderu pusty plik \'.nomedia\', który możesz usunąć w dowolnym menedżerze plików.</string>
   <string name="faq_6_title">Dlaczego pokazują mi się foldery z okładkami do piosenek i tym podobne rzeczy?</string>
<string name="faq_6_text">Aplikacja niestety nie wie, czy dane zdjęcie jest okładką od piosenki czy czymś innym. Aby ukryć niechciane rzeczy, przytrzymaj je i wybierz opcję \'Wyklucz\' z paska akcji.</string>
<string name="faq_6_text">Aplikacja nie wie, czy dany obraz jest okładką od piosenki czy czymś innym. Aby ukryć niechciane rzeczy, przytrzymaj je i wybierz opcję \'Wyklucz\' z paska akcji.</string>
   <string name="faq_7_title">Nie pokazuje(-ą) mi się folder(y) ze zdjęciami / filmami. Co mogę zrobić?</string>
   <string name="faq_7_text">Wejdź do ustawień aplikacji i w sekcji z dołączonymi folderami dodaj tenże folder do listy.</string>
   <string name="faq_8_title">Co jeśli chcę widzieć tylko.wybrane foldery?</string>
<string name="faq_8_title">Co jeśli chcę widzieć tylko wybrane foldery?</string>
   <string name="faq_8_text">Przejdź do sekcji z wykluczonymi folderami w ustawieniach aplikacji, dodaj tam folder główny (\"/\"), a następnie dodaj pożądane foldery w sekcji z dołączonymi folderami.</string>
   <string name="faq_9_title">Zdjęcia w widoku pełnoekranowym mają dziwne artefakty. Jak mogę to naprawić?</string>
<string name="faq_9_text">W ustawieniach aplikacji włącz opcję \'Zamieniaj powiększalne obrazy na te o lepszej jakości\'. Poprawi ona jakość zdjęć, jednak przy bardzo dużych powiększeniach mogą się stać one zbyt rozmazane.</string>
@ -193,8 +194,8 @@
<string name="faq_10_text">Tak, możesz to zrobić w edytorze, przeciągając krawędzie obrazu. Edytor otworzysz przytrzymując miniaturę obrazu i wybierając opcję \'Edytuj\', bądź wybierając tą samą opcję w menu pełnoekranowym.</string>
<string name="faq_11_title">Czy mogę jakoś grupować miniatury plików?</string>
<string name="faq_11_text">Tak. Użyj opcji \'Grupuj według\', gdy jesteś w widoku miniatur. Grupować je możesz według wielu kryteriów, włącznie z datą ich utworzenia. Ponadto, jeśli użyjesz opcji \'Pokazuj całą zawartość folderów\', możesz je także grupować według folderów.</string>
<string name="faq_12_title">Sorting by Date Taken doesn\'t seem to work properly, how can I fix it?</string>
<string name="faq_12_text">It is most likely caused by the files being copied from somewhere. You can fix it by selecting the file thumbnails and selecting \"Fix Date Taken value\".</string>
<string name="faq_12_title">Sortowanie według daty utworzenia nie działa poprawnie. Dlaczego tak się dzieje i jak mogę to naprawić?</string>
<string name="faq_12_text">Dzieje się tak, gdyż prawdopodobnie pliki zostały skądś do urządzenia skopiowane. Naprawić to można wybierając miniatury plików, a następnie opcję \'Napraw datę utworzenia\'.</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<!-- Short description has to have less than 80 chars -->

View file

@ -38,6 +38,7 @@
<string name="videos">Vídeos</string>
<string name="gifs">GIFs</string>
<string name="raw_images">RAW images</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">Nenhum arquivo de mídia encontrado a partir dos filtros selecionados.</string>
<string name="change_filters_underlined"><u>Mudar filtros</u></string>
@ -153,7 +154,7 @@
<string name="manage_extended_details">Gerenciar detalhes extendidos</string>
<string name="one_finger_zoom">Permitir zoom com um dedo quando em exibição de tela cheia</string>
<string name="allow_instant_change">Permitir alternância instantânia de mídia clicando nas laterais da tela</string>
<string name="replace_zoomable_images">Substituir imagens aptas a grande quantitade de zoom por imagens de melhor qualidade</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="hide_extended_details">Ocultar detalhes extendidos quando a barra de status estiver oculta</string>
<string name="do_extra_check">Realizar verificação extra para evitar mostrar arquivos inválidos</string>
<string name="show_at_bottom">Show some action buttons at the bottom of the screen</string>

View file

@ -24,20 +24,21 @@
<string name="brightness">Brilho</string>
<string name="lock_orientation">Bloquear orientação</string>
<string name="unlock_orientation">Desbloquear orientação</string>
<string name="change_orientation">Change orientation</string>
<string name="force_portrait">Force portrait</string>
<string name="force_landscape">Force landscape</string>
<string name="use_default_orientation">Use default orientation</string>
<string name="fix_date_taken">Fix Date Taken value</string>
<string name="fixing">Fixing</string>
<string name="dates_fixed_successfully">Dates fixed successfully</string>
<string name="change_orientation">Alterar orientação</string>
<string name="force_portrait">Impor modo vertical</string>
<string name="force_landscape">Impor modo horizontal</string>
<string name="use_default_orientation">Usar predefinição</string>
<string name="fix_date_taken">Corrigir data de obtenção</string>
<string name="fixing">A corrigir</string>
<string name="dates_fixed_successfully">Dados corrigidos com sucesso</string>
<!-- Filter -->
<string name="filter_media">Filtrar multimédia</string>
<string name="images">Imagens</string>
<string name="videos">Vídeos</string>
<string name="gifs">GIF</string>
<string name="raw_images">RAW images</string>
<string name="raw_images">Imagens RAW</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">Não foram encontrados ficheiros que cumpram os requisitos.</string>
<string name="change_filters_underlined"><u>Alterar filtros</u></string>
@ -87,7 +88,7 @@
<string name="flip_horizontally">Horizontalmente</string>
<string name="flip_vertically">Verticalmente</string>
<string name="edit_with">Editar com</string>
<string name="free_aspect_ratio">Free</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
<string name="free_aspect_ratio">Livre</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
<!-- Set wallpaper -->
<string name="simple_wallpaper">Simple Wallpaper</string>
@ -119,16 +120,16 @@
<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">Group direct subfolders</string>
<string name="group_direct_subfolders">Agrupar sub-pastas</string>
<!-- Grouping at media thumbnails -->
<string name="group_by">Group by</string>
<string name="do_not_group_files">Do not group files</string>
<string name="by_folder">Folder</string>
<string name="by_last_modified">Last modified</string>
<string name="by_date_taken">Date taken</string>
<string name="by_file_type">File type</string>
<string name="by_extension">Extension</string>
<string name="group_by">Agrupar por</string>
<string name="do_not_group_files">Não agrupar ficheiros</string>
<string name="by_folder">Pasta</string>
<string name="by_last_modified">Última modificação</string>
<string name="by_date_taken">Data de obtenção</string>
<string name="by_file_type">Tipo de ficheiro</string>
<string name="by_extension">Extensão</string>
<!-- Settings -->
<string name="autoplay_videos">Reproduzir vídeos automaticamente</string>
@ -153,22 +154,22 @@
<string name="manage_extended_details">Gerir detalhes exibidos</string>
<string name="one_finger_zoom">Permitir ampliação com um dedo se em ecrã completo</string>
<string name="allow_instant_change">Permitir troca imediata de ficheiro ao tocar nas margens do ecrã</string>
<string name="replace_zoomable_images">Replace deep zoomable images with better quality ones</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="hide_extended_details">Ocultar detalhes extra se a barra de estado estiver oculta</string>
<string name="do_extra_check">Efetuar uma dupla verificação para evitar mostrar os ficheiros inválidos</string>
<string name="show_at_bottom">Show some action buttons at the bottom of the screen</string>
<string name="show_recycle_bin">Show the Recycle Bin at the folders screen</string>
<string name="show_at_bottom">Mostrar alguns botões de ação na base do ecrã</string>
<string name="show_recycle_bin">Mostrar reciclagem no ecrã de pastas</string>
<!-- Setting sections -->
<string name="thumbnails">Miniaturas</string>
<string name="fullscreen_media">Multimédia em ecrã completo</string>
<string name="extended_details">Detalhes extra</string>
<string name="bottom_actions">Bottom actions</string>
<string name="bottom_actions">Ações em baixo</string>
<!-- Bottom actions -->
<string name="manage_bottom_actions">Manage visible bottom actions</string>
<string name="toggle_favorite">Toggle favorite</string>
<string name="toggle_file_visibility">Toggle file visibility</string>
<string name="manage_bottom_actions">Gerir botões de ação</string>
<string name="toggle_favorite">Alternar favoritos</string>
<string name="toggle_file_visibility">Alternar visibilidade dos ficheiros</string>
<!-- FAQ -->
<string name="faq_1_title">How can I make Simple Gallery the default device gallery?</string>

View file

@ -38,6 +38,7 @@
<string name="videos">Видео</string>
<string name="gifs">GIF</string>
<string name="raw_images">Изображения RAW</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">При заданных фильтрах медиафайлы не найдены</string>
<string name="change_filters_underlined"><u>Изменить фильтры</u></string>
@ -153,7 +154,7 @@
<string name="manage_extended_details">Выбрать подробности файла</string>
<string name="one_finger_zoom">Масштабирование одним пальцем при просмотре изображения</string>
<string name="allow_instant_change">Мгновенное переключение медиафайлов нажатием по краю экрана</string>
<string name="replace_zoomable_images">Заменять масштабируемые изображения высококачественными</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="hide_extended_details">Не показывать подробности при скрытой строке состояния</string>
<string name="do_extra_check">Делать дополнительную проверку, чтобы избежать показа неподдерживаемых файлов</string>
<string name="show_at_bottom">Показывать кнопки действий в нижней части экрана</string>

View file

@ -38,6 +38,7 @@
<string name="videos">Videá</string>
<string name="gifs">GIFká</string>
<string name="raw_images">RAW obrázky</string>
<string name="svgs">SVGčká</string>
<string name="no_media_with_filters">So zvolenými filtrami sa nenašli žiadne média súbory.</string>
<string name="change_filters_underlined"><u>Zmeniť filtre</u></string>
@ -153,7 +154,7 @@
<string name="manage_extended_details">Spravovať rozšírené vlastnosti</string>
<string name="one_finger_zoom">Povoliť približovanie jedným prstom v celoobrazovkovom režime</string>
<string name="allow_instant_change">Povoliť instantné prepínanie médií kliknutím na okraj obrazovky</string>
<string name="replace_zoomable_images">Nahradiť hlboko priblížiteľné obrázky s obrázkami s lepšou kvalitou</string>
<string name="allow_deep_zooming_images">Povoliť hlboké približovanie obrázkov</string>
<string name="hide_extended_details">Skryť rozšírené vlastnosti ak je skrytá stavová lišta</string>
<string name="do_extra_check">Predísť zobrazovaniu neplatných súborov dodatočnou kontrolou</string>
<string name="show_at_bottom">Zobraziť niektoré akčné tlačidlá na spodku obrazovky</string>

View file

@ -38,6 +38,7 @@
<string name="videos">Videor</string>
<string name="gifs">GIF-bilder</string>
<string name="raw_images">RAW images</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">Inga mediefiler hittades med valda filter.</string>
<string name="change_filters_underlined"><u>Ändra filter</u></string>
@ -153,7 +154,7 @@
<string name="manage_extended_details">Hantera utökad information</string>
<string name="one_finger_zoom">Tillåt zoomning med ett finger när media visas i helskärmsläge</string>
<string name="allow_instant_change">Tillåt snabbyte av media genom tryckning på skärmens kanter</string>
<string name="replace_zoomable_images">Ersätt djupt zoombara bilder med bilder av bättre kvalitet</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="hide_extended_details">Dölj utökad information när statusfältet är dolt</string>
<string name="do_extra_check">Gör en extra kontroll för att hindra ogiltiga filer från att visas</string>
<string name="show_at_bottom">Show some action buttons at the bottom of the screen</string>

View file

@ -38,6 +38,7 @@
<string name="videos">Videos</string>
<string name="gifs">GIFs</string>
<string name="raw_images">RAW images</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">No media files have been found with the selected filters.</string>
<string name="change_filters_underlined"><u>Change filters</u></string>
@ -153,7 +154,7 @@
<string name="manage_extended_details">Manage extended details</string>
<string name="one_finger_zoom">Allow one finger zoom at fullscreen media</string>
<string name="allow_instant_change">Allow instantly changing media by clicking on screen sides</string>
<string name="replace_zoomable_images">Replace deep zoomable images with better quality ones</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="hide_extended_details">Hide extended details when status bar is hidden</string>
<string name="do_extra_check">Do an extra check to avoid showing invalid files</string>
<string name="show_at_bottom">Show some action buttons at the bottom of the screen</string>

View file

@ -38,6 +38,7 @@
<string name="videos">视频</string>
<string name="gifs">GIFs</string>
<string name="raw_images">RAW 图片</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">所选的过滤器没有找到媒体文件。</string>
<string name="change_filters_underlined"><u>更改过滤器</u></string>
@ -153,7 +154,7 @@
<string name="manage_extended_details">要显示的详细信息项目</string>
<string name="one_finger_zoom">单指缩放</string>
<string name="allow_instant_change">通过单击屏幕边缘来切换媒体</string>
<string name="replace_zoomable_images">用质量更好的图像替换可深度缩放的图像</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="hide_extended_details">当状态栏隐藏时隐藏扩展详情</string>
<string name="do_extra_check">额外检查以避免显示无效的文件</string>
<string name="show_at_bottom">在屏幕底部显示一些操作按钮</string>

View file

@ -28,9 +28,9 @@
<string name="force_portrait">強制直向</string>
<string name="force_landscape">強制橫向</string>
<string name="use_default_orientation">使用預設方向</string>
<string name="fix_date_taken">Fix Date Taken value</string>
<string name="fixing">Fixing</string>
<string name="dates_fixed_successfully">Dates fixed successfully</string>
<string name="fix_date_taken">修復拍照日期數值</string>
<string name="fixing">修復中</string>
<string name="dates_fixed_successfully">日期修復成功</string>
<!-- Filter -->
<string name="filter_media">篩選媒體檔案</string>
@ -38,6 +38,7 @@
<string name="videos">影片</string>
<string name="gifs">GIF</string>
<string name="raw_images">RAW圖檔</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">選擇的篩選條件未發現媒體檔案。</string>
<string name="change_filters_underlined"><u>更改篩選條件</u></string>
@ -87,7 +88,7 @@
<string name="flip_horizontally">水平翻轉</string>
<string name="flip_vertically">垂直翻轉</string>
<string name="edit_with">用其他程式編輯</string>
<string name="free_aspect_ratio">Free</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
<string name="free_aspect_ratio">自由</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
<!-- Set wallpaper -->
<string name="simple_wallpaper">簡易桌布</string>
@ -153,11 +154,11 @@
<string name="manage_extended_details">管理詳細資訊</string>
<string name="one_finger_zoom">全螢幕時允許單指縮放</string>
<string name="allow_instant_change">允許點擊螢幕邊緣來快速切換媒體檔案</string>
<string name="replace_zoomable_images">可深度縮放的圖片用品質更佳的來取代</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="hide_extended_details">狀態欄隱藏時,同時隱藏詳細資訊</string>
<string name="do_extra_check">進行額外檢查,避免顯示無效的檔案</string>
<string name="show_at_bottom">在螢幕底部顯示一些操作按鈕</string>
<string name="show_recycle_bin">Show the Recycle Bin at the folders screen</string>
<string name="show_recycle_bin">在資料夾畫面顯示回收桶</string>
<!-- Setting sections -->
<string name="thumbnails">縮圖</string>
@ -166,9 +167,9 @@
<string name="bottom_actions">底部操作</string>
<!-- Bottom actions -->
<string name="manage_bottom_actions">管理可見的底部操作</string>
<string name="toggle_favorite">加入/移除我的最愛</string>
<string name="toggle_file_visibility">檔案顯示/隱藏</string>
<string name="manage_bottom_actions">管理要顯示的底部操作</string>
<string name="toggle_favorite">我的最愛</string>
<string name="toggle_file_visibility">檔案顯示</string>
<!-- FAQ -->
<string name="faq_1_title">我如何將簡易相簿設為預設相簿?</string>
@ -195,8 +196,8 @@
<string name="faq_10_text">是的,你能夠在編輯器內拉動圖片角落來裁剪圖片。要進入編輯器,你可以長按圖片縮圖然後選擇[編輯],或是在全螢幕檢視下選擇[編輯]。</string>
<string name="faq_11_title">我可以歸類媒體檔案的縮圖嗎?</string>
<string name="faq_11_text">當然,只要在縮圖瀏覽中使用[歸類]選單項目就可以了。你能依多種條件歸類檔案,包含拍照日期。如果你使用了[資料夾內容全部顯示]功能,你還能以資料夾來歸類。</string>
<string name="faq_12_title">Sorting by Date Taken doesn\'t seem to work properly, how can I fix it?</string>
<string name="faq_12_text">It is most likely caused by the files being copied from somewhere. You can fix it by selecting the file thumbnails and selecting \"Fix Date Taken value\".</string>
<string name="faq_12_title">依拍照日期排序似乎沒正確運作,我該如何修復?</string>
<string name="faq_12_text">那很可能是由於檔案從某處複製過來所造成的。你可以選擇檔案縮圖,然後選擇\"修復拍照日期數值\"來進行修復。</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<!-- Short description has to have less than 80 chars -->

View file

@ -38,6 +38,7 @@
<string name="videos">Videos</string>
<string name="gifs">GIFs</string>
<string name="raw_images">RAW images</string>
<string name="svgs">SVGs</string>
<string name="no_media_with_filters">No media files have been found with the selected filters.</string>
<string name="change_filters_underlined"><u>Change filters</u></string>
@ -153,7 +154,7 @@
<string name="manage_extended_details">Manage extended details</string>
<string name="one_finger_zoom">Allow one finger zoom at fullscreen media</string>
<string name="allow_instant_change">Allow instantly changing media by clicking on screen sides</string>
<string name="replace_zoomable_images">Replace deep zoomable images with better quality ones</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="hide_extended_details">Hide extended details when status bar is hidden</string>
<string name="do_extra_check">Do an extra check to avoid showing invalid files</string>
<string name="show_at_bottom">Show some action buttons at the bottom of the screen</string>

View file

@ -1,7 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.2.51'
ext.kotlin_version = '1.2.60'
repositories {
jcenter()
@ -9,7 +9,7 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.3'
classpath 'com.android.tools.build:gradle:3.1.4'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong