Merge pull request #70 from SimpleMobileTools/master

upd
This commit is contained in:
solokot 2020-05-17 22:51:49 +03:00 committed by GitHub
commit f01d1a31eb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
96 changed files with 912 additions and 857 deletions

View file

@ -1,6 +1,55 @@
Changelog
==========
Version 6.14.8 *(2020-05-05)*
----------------------------
* Added some crashfixes
Version 6.14.7 *(2020-05-04)*
----------------------------
* Fixed a glitch with some favorite items disappearing
* Improve folder hiding, add the new .nomedia file into MediaStore
* Improve the performance of getting video file duration
* A few other improvements here and there
Version 6.14.6 *(2020-04-26)*
----------------------------
* Added a few more stability and performance improvements
Version 6.14.5 *(2020-04-26)*
----------------------------
* Disable Portrait photo showing by default, until it gets improved
* Added a couple other performance improvements here and there
Version 6.14.4 *(2020-04-24)*
----------------------------
* Improved the performance on multiple places
* Removed some unnecessary permissions added recently
* Fixed some photo editor glitches
* Show Portrait images by default only on Android 9+
Version 6.14.3 *(2020-04-21)*
----------------------------
* Use the selected date format grouped thumbnail section titles too
* Fixed a glitch related to locked folders asking authentication too often
* Refresh the UI here and there a bit
Version 6.14.2 *(2020-04-18)*
----------------------------
* Fixed some Photo Editor bugs
* Properly handle locked folders at opening from widgets and shortcuts
* Open the map at clicking the coordinates at the Properties window
* Properly sort items at the Other Folder dialog at copy/move
* Fixed some folder un/hiding related glitches
* A couple other translation and UX improvements
Version 6.14.1 *(2020-04-14)*
----------------------------

View file

@ -17,8 +17,8 @@ android {
applicationId "com.simplemobiletools.gallery.pro"
minSdkVersion 21
targetSdkVersion 29
versionCode 301
versionName "6.14.1"
versionCode 309
versionName "6.14.8"
multiDexEnabled true
setProperty("archivesBaseName", "gallery-$versionCode")
vectorDrawables.useSupportLibrary = true
@ -58,8 +58,8 @@ android {
flavorDimensions "licensing"
productFlavors {
proprietary { }
foss { }
proprietary {}
foss {}
}
lintOptions {
@ -78,7 +78,7 @@ android {
}
dependencies {
implementation 'com.simplemobiletools:commons:5.25.25'
implementation 'com.simplemobiletools:commons:5.28.4'
implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'it.sephiroth.android.exif:library:1.0.1'
@ -111,8 +111,6 @@ if (is_proprietary) {
licencePath 'pesdk_license'
}
supportLibVersion "28.0.0"
modules {
include 'ui:core'
include 'ui:text'

View file

@ -7,6 +7,7 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"
tools:node="remove"/>
@ -285,6 +286,15 @@
android:resource="@xml/widget_info"/>
</receiver>
<receiver android:name=".receivers.BootCompletedReceiver"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON"/>
</intent-filter>
</receiver>
<service
android:name=".jobs.NewPhotoFetcher"
android:exported="true"

View file

@ -23,6 +23,7 @@ import androidx.recyclerview.widget.RecyclerView
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.dialogs.CreateNewFolderDialog
import com.simplemobiletools.commons.dialogs.FilePickerDialog
import com.simplemobiletools.commons.dialogs.NewAppsIconsDialog
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.*
import com.simplemobiletools.commons.models.FileDirItem
@ -51,7 +52,6 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
private val PICK_MEDIA = 2
private val PICK_WALLPAPER = 3
private val LAST_MEDIA_CHECK_PERIOD = 3000L
private val NEW_APP_PACKAGE = "com.simplemobiletools.clock"
private var mIsPickImageIntent = false
private var mIsPickVideoIntent = false
@ -71,6 +71,8 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
private var mLatestMediaDateId = 0L
private var mCurrentPathPrefix = "" // used at "Group direct subfolders" for navigation
private var mOpenedSubfolders = arrayListOf("") // used at "Group direct subfolders" for navigating Up with the back button
private var mDateFormat = ""
private var mTimeFormat = ""
private var mLastMediaHandler = Handler()
private var mTempShowHiddenHandler = Handler()
private var mZoomListener: MyRecyclerView.MyZoomListener? = null
@ -116,12 +118,6 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
mIsPasswordProtectionPending = config.isAppPasswordProtectionOn
setupLatestMediaId()
// notify some users about the Clock app
/*if (System.currentTimeMillis() < 1523750400000 && !config.wasNewAppShown && config.appRunCount > 100 && config.appRunCount % 50 != 0 && !isPackageInstalled(NEW_APP_PACKAGE)) {
config.wasNewAppShown = true
NewAppDialog(this, NEW_APP_PACKAGE, "Simple Clock")
}*/
if (!config.wereFavoritesPinned) {
config.addPinnedFolders(hashSetOf(FAVORITES))
config.wereFavoritesPinned = true
@ -151,6 +147,20 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
directories_switch_searching.setOnClickListener {
launchSearchActivity()
}
// just request the permission, tryLoadGallery will then trigger in onResume
handlePermission(PERMISSION_WRITE_STORAGE) {
if (!it) {
toast(R.string.no_storage_permissions)
finish()
}
}
// notify some users about the Dialer, SMS Messenger and Voice Recorder apps
if (!config.wasMessengerRecorderShown && config.appRunCount > 35) {
NewAppsIconsDialog(this)
config.wasMessengerRecorderShown = true
}
}
override fun onStart() {
@ -161,6 +171,8 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
override fun onResume() {
super.onResume()
config.isThirdPartyIntent = false
mDateFormat = config.dateFormat
mTimeFormat = getTimeFormat()
if (mStoredAnimateGifs != config.animateGifs) {
getRecyclerAdapter()?.updateAnimateGifs(config.animateGifs)
@ -413,7 +425,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
private fun checkDefaultSpamFolders() {
if (!config.spamFoldersChecked) {
val spamFolders = arrayListOf(
"/storage/emulated/0/Android/data/com.facebook.orca/files/stickers"
"/storage/emulated/0/Android/data/com.facebook.orca/files/stickers"
)
val OTGPath = config.OTGPath
@ -427,27 +439,22 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
}
private fun tryLoadGallery() {
handlePermission(PERMISSION_WRITE_STORAGE) {
if (it) {
if (!config.wasUpgradedFromFreeShown && isPackageInstalled("com.simplemobiletools.gallery")) {
ConfirmationDialog(this, "", R.string.upgraded_from_free, R.string.ok, 0) {}
config.wasUpgradedFromFreeShown = true
}
checkOTGPath()
checkDefaultSpamFolders()
if (config.showAll) {
showAllMedia()
} else {
getDirectories()
}
setupLayoutManager()
} else {
toast(R.string.no_storage_permissions)
finish()
if (hasPermission(PERMISSION_WRITE_STORAGE)) {
if (!config.wasUpgradedFromFreeShown && isPackageInstalled("com.simplemobiletools.gallery")) {
ConfirmationDialog(this, "", R.string.upgraded_from_free, R.string.ok, 0) {}
config.wasUpgradedFromFreeShown = true
}
checkOTGPath()
checkDefaultSpamFolders()
if (config.showAll) {
showAllMedia()
} else {
getDirectories()
}
setupLayoutManager()
}
}
@ -539,7 +546,13 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
val fileDirItems = folders.asSequence().filter { it.isDirectory }.map { FileDirItem(it.absolutePath, it.name, true) }.toMutableList() as ArrayList<FileDirItem>
when {
fileDirItems.isEmpty() -> return
fileDirItems.size == 1 -> toast(String.format(getString(R.string.deleting_folder), fileDirItems.first().name))
fileDirItems.size == 1 -> {
try {
toast(String.format(getString(R.string.deleting_folder), fileDirItems.first().name))
} catch (e: Exception) {
showErrorToast(e)
}
}
else -> {
val baseString = if (config.useRecycleBin) R.plurals.moving_items_into_bin else R.plurals.delete_items
val deletingItems = resources.getQuantityString(baseString, fileDirItems.size, fileDirItems.size)
@ -835,6 +848,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
handleLockedFolderOpening(path) { success ->
if (success) {
Intent(this, MediaActivity::class.java).apply {
putExtra(SKIP_AUTHENTICATION, true)
putExtra(DIRECTORY, path)
handleMediaIntent(this)
}
@ -944,11 +958,17 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
setupAdapter(dirs)
// update directories and media files in the local db, delete invalid items
// update directories and media files in the local db, delete invalid items. Intentionally creating a new thread
updateDBDirectory(directory)
if (!directory.isRecycleBin()) {
mediaDB.insertAll(curMedia)
Thread {
try {
mediaDB.insertAll(curMedia)
} catch (ignored: Exception) {
}
}.start()
}
getCachedMedia(directory.path, getVideosOnly, getImagesOnly) {
it.forEach {
if (!curMedia.contains(it)) {
@ -1019,13 +1039,17 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
val newDir = createDirectoryFromMedia(folder, newMedia, albumCovers, hiddenString, includedFolders, getProperFileSize)
dirs.add(newDir)
setupAdapter(dirs)
try {
directoryDao.insert(newDir)
if (folder != RECYCLE_BIN) {
mediaDB.insertAll(newMedia)
// make sure to create a new thread for these operations, dont just use the common bg thread
Thread {
try {
directoryDao.insert(newDir)
if (folder != RECYCLE_BIN) {
mediaDB.insertAll(newMedia)
}
} catch (ignored: Exception) {
}
} catch (ignored: Exception) {
}
}.start()
}
mLoadedInitialPhotos = true
@ -1035,21 +1059,31 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
directories_refresh_layout.isRefreshing = false
checkPlaceholderVisibility(dirs)
}
checkInvalidDirectories(dirs)
val everShownFolders = config.everShownFolders as HashSet
dirs.mapTo(everShownFolders) { it.path }
checkInvalidDirectories(dirs)
if (mDirs.size > 50) {
excludeSpamFolders()
}
val excludedFolders = config.excludedFolders
val everShownFolders = config.everShownFolders.toMutableSet() as HashSet<String>
// do not add excluded folders and their subfolders at everShownFolders
dirs.filter { dir ->
if (excludedFolders.any { dir.path.startsWith(it) }) {
return@filter false
}
return@filter true
}.mapTo(everShownFolders) { it.path }
try {
// catch some extreme exceptions like too many everShownFolders for storing, shouldnt really happen
config.everShownFolders = everShownFolders
} catch (e: Exception) {
config.everShownFolders = HashSet()
}
mDirs = dirs.clone() as ArrayList<Directory>
if (mDirs.size > 55) {
excludeSpamFolders()
}
mDirs = dirs.clone() as ArrayList<Directory>
}
private fun checkPlaceholderVisibility(dirs: ArrayList<Directory>) {
@ -1059,7 +1093,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
if (mIsSearchOpen) {
directories_empty_placeholder.text = getString(R.string.no_items_found)
directories_empty_placeholder_2.beGone()
} else if (dirs.isEmpty() && config.filterMedia == TYPE_DEFAULT_FILTER) {
} else if (dirs.isEmpty() && config.filterMedia == getDefaultFileFilter()) {
directories_empty_placeholder.text = getString(R.string.no_media_add_included)
directories_empty_placeholder_2.text = getString(R.string.add_folder)
@ -1158,7 +1192,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
} else if (it.path != config.tempFolderPath) {
val children = if (isPathOnOTG(it.path)) getOTGFolderChildrenNames(it.path) else File(it.path).list()?.asList()
val hasMediaFile = children?.any {
it != null && (it.isMediaFile() || (File(it).isDirectory && it.startsWith("img_", true)))
it != null && (it.isMediaFile() || (it.startsWith("img_", true) && File(it).isDirectory))
} ?: false
if (!hasMediaFile) {
@ -1198,8 +1232,8 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
private fun getCurrentlyDisplayedDirs() = getRecyclerAdapter()?.dirs ?: ArrayList()
private fun getBubbleTextItem(index: Int) = getRecyclerAdapter()?.dirs?.getOrNull(index)?.getBubbleText(config.directorySorting, this)
?: ""
private fun getBubbleTextItem(index: Int) = getRecyclerAdapter()?.dirs?.getOrNull(index)?.getBubbleText(config.directorySorting, this, mDateFormat, mTimeFormat)
?: ""
private fun setupLatestMediaId() {
ensureBackgroundThread {

View file

@ -22,7 +22,6 @@ import com.bumptech.glide.Glide
import com.bumptech.glide.request.RequestOptions
import com.bumptech.glide.request.target.SimpleTarget
import com.bumptech.glide.request.transition.Transition
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.dialogs.CreateNewFolderDialog
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE
@ -36,7 +35,10 @@ import com.simplemobiletools.gallery.pro.R
import com.simplemobiletools.gallery.pro.adapters.MediaAdapter
import com.simplemobiletools.gallery.pro.asynctasks.GetMediaAsynctask
import com.simplemobiletools.gallery.pro.databases.GalleryDatabase
import com.simplemobiletools.gallery.pro.dialogs.*
import com.simplemobiletools.gallery.pro.dialogs.ChangeGroupingDialog
import com.simplemobiletools.gallery.pro.dialogs.ChangeSortingDialog
import com.simplemobiletools.gallery.pro.dialogs.ChangeViewTypeDialog
import com.simplemobiletools.gallery.pro.dialogs.FilterMediaDialog
import com.simplemobiletools.gallery.pro.extensions.*
import com.simplemobiletools.gallery.pro.helpers.*
import com.simplemobiletools.gallery.pro.interfaces.MediaOperationsListener
@ -61,6 +63,8 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
private var mLoadedInitialPhotos = false
private var mIsSearchOpen = false
private var mLastSearchedText = ""
private var mDateFormat = ""
private var mTimeFormat = ""
private var mLatestMediaId = 0L
private var mLatestMediaDateId = 0L
private var mLastMediaHandler = Handler()
@ -122,6 +126,9 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
override fun onResume() {
super.onResume()
mDateFormat = config.dateFormat
mTimeFormat = getTimeFormat()
if (mStoredAnimateGifs != config.animateGifs) {
getMediaAdapter()?.updateAnimateGifs(config.animateGifs)
}
@ -160,11 +167,15 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
media_empty_text_placeholder_2.setTextColor(getAdjustedPrimaryColor())
if (mMedia.isEmpty() || config.getFolderSorting(mPath) and SORT_BY_RANDOM == 0) {
handleLockedFolderOpening(mPath) { success ->
if (success) {
tryLoadGallery()
} else {
finish()
if (shouldSkipAuthentication()) {
tryLoadGallery()
} else {
handleLockedFolderOpening(mPath) { success ->
if (success) {
tryLoadGallery()
} else {
finish()
}
}
}
}
@ -212,14 +223,9 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_media, menu)
val isFolderHidden = mPath.containsNoMedia()
menu.apply {
findItem(R.id.group).isVisible = !config.scrollHorizontally
findItem(R.id.hide_folder).isVisible = !isFolderHidden && !mShowAll && mPath != FAVORITES && mPath != RECYCLE_BIN
findItem(R.id.unhide_folder).isVisible = isFolderHidden && !mShowAll && mPath != FAVORITES && mPath != RECYCLE_BIN
findItem(R.id.exclude_folder).isVisible = !mShowAll && mPath != FAVORITES && mPath != RECYCLE_BIN
findItem(R.id.empty_recycle_bin).isVisible = mPath == RECYCLE_BIN
findItem(R.id.empty_disable_recycle_bin).isVisible = mPath == RECYCLE_BIN
findItem(R.id.restore_all_files).isVisible = mPath == RECYCLE_BIN
@ -255,9 +261,6 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
R.id.folder_view -> switchToFolderView()
R.id.change_view_type -> changeViewType()
R.id.group -> showGroupByDialog()
R.id.hide_folder -> tryHideFolder()
R.id.unhide_folder -> unhideFolder()
R.id.exclude_folder -> tryExcludeFolder()
R.id.create_new_folder -> createNewFolder()
R.id.temporarily_show_hidden -> tryToggleTemporarilyShowHidden()
R.id.stop_showing_hidden -> tryToggleTemporarilyShowHidden()
@ -274,8 +277,8 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
private fun startSlideshow() {
if (mMedia.isNotEmpty()) {
Intent(this, ViewPagerActivity::class.java).apply {
val item = mMedia.firstOrNull { it is Medium } as? Medium
?: return
val item = mMedia.firstOrNull { it is Medium } as? Medium ?: return
putExtra(SKIP_AUTHENTICATION, shouldSkipAuthentication())
putExtra(PATH, item.path)
putExtra(SHOW_ALL, mShowAll)
putExtra(SLIDESHOW_START_ON_ENTER, true)
@ -439,7 +442,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
if (mediaAdapter?.isASectionTitle(index) == true) {
realIndex++
}
return mediaAdapter?.getItemBubbleText(realIndex, sorting) ?: ""
return mediaAdapter?.getItemBubbleText(realIndex, sorting, mDateFormat, mTimeFormat) ?: ""
}
private fun checkLastMediaChanged() {
@ -536,43 +539,6 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
}
}
private fun tryHideFolder() {
if (config.wasHideFolderTooltipShown) {
hideFolder()
} else {
ConfirmationDialog(this, getString(R.string.hide_folder_description)) {
config.wasHideFolderTooltipShown = true
hideFolder()
}
}
}
private fun hideFolder() {
addNoMedia(mPath) {
runOnUiThread {
if (!config.shouldShowHidden) {
finish()
} else {
invalidateOptionsMenu()
}
}
}
}
private fun unhideFolder() {
removeNoMedia(mPath) {
runOnUiThread {
invalidateOptionsMenu()
}
}
}
private fun tryExcludeFolder() {
ExcludeFolderDialog(this, arrayListOf(mPath)) {
finish()
}
}
private fun deleteDirectoryIfEmpty() {
val fileDirItem = FileDirItem(mPath, mPath.getFilenameFromPath(), true)
if (config.deleteEmptyFolders && !fileDirItem.isDownloadsFolder() && fileDirItem.isDirectory && fileDirItem.getProperFileCount(this, true) == 0) {
@ -862,9 +828,14 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
if (isVideo) {
val extras = HashMap<String, Boolean>()
extras[SHOW_FAVORITES] = mPath == FAVORITES
if (shouldSkipAuthentication()) {
extras[SKIP_AUTHENTICATION] = true
}
openPath(path, false, extras)
} else {
Intent(this, ViewPagerActivity::class.java).apply {
putExtra(SKIP_AUTHENTICATION, shouldSkipAuthentication())
putExtra(PATH, path)
putExtra(SHOW_ALL, mShowAll)
putExtra(SHOW_FAVORITES, mPath == FAVORITES)
@ -902,7 +873,9 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
if (!isFromCache) {
val mediaToInsert = (mMedia).filter { it is Medium && it.deletedTS == 0L }.map { it as Medium }
try {
mediaDB.insertAll(mediaToInsert)
Thread {
mediaDB.insertAll(mediaToInsert)
}.start()
} catch (e: Exception) {
}
}
@ -932,6 +905,8 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
}
}
private fun shouldSkipAuthentication() = intent.getBooleanExtra(SKIP_AUTHENTICATION, false)
private fun deleteFilteredFiles(filtered: ArrayList<FileDirItem>) {
deleteFiles(filtered) {
if (!it) {

View file

@ -130,7 +130,7 @@ open class PanoramaVideoActivity : SimpleActivity(), SeekBar.OnSeekBarChangeList
mIsPlaying = true
resumeVideo()
} else {
video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline)
video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline_vector)
}
video_toggle_play_pause.beVisible()
}
@ -190,7 +190,7 @@ open class PanoramaVideoActivity : SimpleActivity(), SeekBar.OnSeekBarChangeList
}
private fun resumeVideo() {
video_toggle_play_pause.setImageResource(R.drawable.ic_pause_outline)
video_toggle_play_pause.setImageResource(R.drawable.ic_pause_outline_vector)
if (mCurrTime == mDuration) {
setVideoProgress(0)
mPlayOnReady = true
@ -203,7 +203,7 @@ open class PanoramaVideoActivity : SimpleActivity(), SeekBar.OnSeekBarChangeList
private fun pauseVideo() {
vr_video_view.pauseVideo()
video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline)
video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline_vector)
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}
@ -247,7 +247,7 @@ open class PanoramaVideoActivity : SimpleActivity(), SeekBar.OnSeekBarChangeList
}
explore.requestLayout()
}
video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline)
video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline_vector)
cardboard.setOnClickListener {
vr_video_view.displayMode = CARDBOARD_DISPLAY_MODE

View file

@ -103,12 +103,8 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
if (realPath.getFilenameFromPath().contains('.') || filename.contains('.')) {
if (isFileTypeVisible(realPath)) {
bottom_actions.beGone()
handleLockedFolderOpening(realPath.getParentPath()) { success ->
if (success) {
sendViewPagerIntent(realPath)
}
finish()
}
sendViewPagerIntent(realPath)
finish()
return
}
} else {
@ -120,13 +116,9 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
if (mUri!!.scheme == "file") {
if (filename.contains('.')) {
bottom_actions.beGone()
handleLockedFolderOpening(mUri!!.path!!.getParentPath()) { success ->
if (success) {
rescanPaths(arrayListOf(mUri!!.path!!))
sendViewPagerIntent(mUri!!.path!!)
}
finish()
}
rescanPaths(arrayListOf(mUri!!.path!!))
sendViewPagerIntent(mUri!!.path!!)
finish()
}
return
} else {
@ -134,13 +126,9 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
if (path != mUri.toString() && path.isNotEmpty() && mUri!!.authority != "mms" && filename.contains('.') && getDoesFilePathExist(path)) {
if (isFileTypeVisible(path)) {
bottom_actions.beGone()
handleLockedFolderOpening(path.getParentPath()) { success ->
if (success) {
rescanPaths(arrayListOf(mUri!!.path!!))
sendViewPagerIntent(path)
}
finish()
}
rescanPaths(arrayListOf(mUri!!.path!!))
sendViewPagerIntent(path)
finish()
return
}
}
@ -237,6 +225,7 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
private fun sendViewPagerIntent(path: String) {
Intent(this, ViewPagerActivity::class.java).apply {
putExtra(SKIP_AUTHENTICATION, intent.getBooleanExtra(SKIP_AUTHENTICATION, false))
putExtra(SHOW_FAVORITES, intent.getBooleanExtra(SHOW_FAVORITES, false))
putExtra(IS_VIEW_INTENT, true)
putExtra(IS_FROM_GALLERY, mIsFromGallery)
@ -293,8 +282,8 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
}
private fun initBottomActions() {
initBottomActionsLayout()
initBottomActionButtons()
initBottomActionsLayout()
}
private fun initBottomActionsLayout() {

View file

@ -31,6 +31,8 @@ import java.io.File
class SearchActivity : SimpleActivity(), MediaOperationsListener {
private var mIsSearchOpen = false
private var mLastSearchedText = ""
private var mDateFormat = ""
private var mTimeFormat = ""
private var mSearchMenuItem: MenuItem? = null
private var mCurrAsyncTask: GetMediaAsynctask? = null
@ -40,6 +42,8 @@ class SearchActivity : SimpleActivity(), MediaOperationsListener {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_search)
media_empty_text_placeholder.setTextColor(config.textColor)
mDateFormat = config.dateFormat
mTimeFormat = getTimeFormat()
getAllMedia()
}
@ -232,7 +236,7 @@ class SearchActivity : SimpleActivity(), MediaOperationsListener {
if (mediaAdapter?.isASectionTitle(index) == true) {
realIndex++
}
return mediaAdapter?.getItemBubbleText(realIndex, sorting) ?: ""
return mediaAdapter?.getItemBubbleText(realIndex, sorting, mDateFormat, mTimeFormat) ?: ""
}
private fun measureRecyclerViewContent(media: ArrayList<ThumbnailItem>) {

View file

@ -290,7 +290,7 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
if (config.autoplayVideos) {
resumeVideo()
} else {
video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline)
video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline_vector)
}
}
}
@ -305,7 +305,7 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
}
private fun resumeVideo() {
video_toggle_play_pause.setImageResource(R.drawable.ic_pause_outline)
video_toggle_play_pause.setImageResource(R.drawable.ic_pause_outline_vector)
if (mExoPlayer == null) {
return
}
@ -322,7 +322,7 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
}
private fun pauseVideo() {
video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline)
video_toggle_play_pause.setImageResource(R.drawable.ic_play_outline_vector)
if (mExoPlayer == null) {
return
}

View file

@ -308,11 +308,15 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
showSystemUI(true)
handleLockedFolderOpening(mPath.getParentPath()) { success ->
if (success) {
initContinue()
} else {
finish()
if (intent.getBooleanExtra(SKIP_AUTHENTICATION, false)) {
initContinue()
} else {
handleLockedFolderOpening(mPath.getParentPath()) { success ->
if (success) {
initContinue()
} else {
finish()
}
}
}
}
@ -385,7 +389,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
}
val isFavorite = favoritesDB.isFavorite(mPath)
val duration = if (type == TYPE_VIDEOS) mPath.getVideoDuration() else 0
val duration = if (type == TYPE_VIDEOS) getDuration(mPath) ?: 0 else 0
val ts = System.currentTimeMillis()
val medium = Medium(null, mPath.getFilenameFromPath(), mPath, mPath.getParentPath(), ts, ts, File(mPath).length(), type, duration, isFavorite, 0)
mediaDB.insert(medium)
@ -395,8 +399,8 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
}
private fun initBottomActions() {
initBottomActionsLayout()
initBottomActionButtons()
initBottomActionsLayout()
}
private fun initFavorites() {
@ -1165,6 +1169,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
}
}
@SuppressLint("SourceLockedOrientationActivity")
private fun checkOrientation() {
if (!mIsOrientationLocked && config.screenRotation == ROTATE_BY_ASPECT_RATIO) {
var flipSides = false

View file

@ -493,14 +493,16 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList<Thumbnai
}, INSTANT_LOAD_DURATION)
}
fun getItemBubbleText(position: Int, sorting: Int) = (media[position] as? Medium)?.getBubbleText(sorting, activity)
fun getItemBubbleText(position: Int, sorting: Int, dateFormat: String, timeFormat: String): String {
return (media[position] as? Medium)?.getBubbleText(sorting, activity, dateFormat, timeFormat) ?: ""
}
private fun setupThumbnail(view: View, medium: Medium) {
val isSelected = selectedKeys.contains(medium.path.hashCode())
view.apply {
play_outline.beVisibleIf(medium.isVideo() || medium.isPortrait())
if (medium.isVideo()) {
play_outline.setImageResource(R.drawable.img_play_outline)
play_outline.setImageResource(R.drawable.ic_play_outline_vector)
play_outline.beVisible()
} else if (medium.isPortrait()) {
play_outline.setImageResource(R.drawable.ic_portrait_photo_vector)

View file

@ -46,7 +46,7 @@ class FilterMediaDialog(val activity: BaseSimpleActivity, val callback: (result:
result += TYPE_PORTRAITS
if (result == 0) {
result = TYPE_DEFAULT_FILTER
result = getDefaultFileFilter()
}
activity.config.filterMedia = result

View file

@ -122,6 +122,8 @@ class PickDirectoryDialog(val activity: BaseSimpleActivity, val sourcePath: Stri
val scrollHorizontally = activity.config.scrollHorizontally && isGridViewType
val sorting = activity.config.directorySorting
val dateFormat = activity.config.dateFormat
val timeFormat = activity.getTimeFormat()
view.apply {
directories_grid.adapter = adapter
@ -134,12 +136,12 @@ class PickDirectoryDialog(val activity: BaseSimpleActivity, val sourcePath: Stri
if (scrollHorizontally) {
directories_horizontal_fastscroller.allowBubbleDisplay = activity.config.showInfoBubble
directories_horizontal_fastscroller.setViews(directories_grid) {
directories_horizontal_fastscroller.updateBubbleText(dirs[it].getBubbleText(sorting, activity))
directories_horizontal_fastscroller.updateBubbleText(dirs[it].getBubbleText(sorting, activity, dateFormat, timeFormat))
}
} else {
directories_vertical_fastscroller.allowBubbleDisplay = activity.config.showInfoBubble
directories_vertical_fastscroller.setViews(directories_grid) {
directories_vertical_fastscroller.updateBubbleText(dirs[it].getBubbleText(sorting, activity))
directories_vertical_fastscroller.updateBubbleText(dirs[it].getBubbleText(sorting, activity, dateFormat, timeFormat))
}
}
}

View file

@ -5,6 +5,7 @@ import androidx.recyclerview.widget.RecyclerView
import com.simplemobiletools.commons.activities.BaseSimpleActivity
import com.simplemobiletools.commons.extensions.beGoneIf
import com.simplemobiletools.commons.extensions.beVisibleIf
import com.simplemobiletools.commons.extensions.getTimeFormat
import com.simplemobiletools.commons.extensions.setupDialogStuff
import com.simplemobiletools.commons.views.MyGridLayoutManager
import com.simplemobiletools.gallery.pro.R
@ -74,6 +75,8 @@ class PickMediumDialog(val activity: BaseSimpleActivity, val path: String, val c
val scrollHorizontally = activity.config.scrollHorizontally && isGridViewType
val sorting = activity.config.getFolderSorting(if (path.isEmpty()) SHOW_ALL else path)
val dateFormat = activity.config.dateFormat
val timeFormat = activity.getTimeFormat()
view.apply {
media_grid.adapter = adapter
@ -86,12 +89,14 @@ class PickMediumDialog(val activity: BaseSimpleActivity, val path: String, val c
if (scrollHorizontally) {
media_horizontal_fastscroller.allowBubbleDisplay = activity.config.showInfoBubble
media_horizontal_fastscroller.setViews(media_grid) {
media_horizontal_fastscroller.updateBubbleText((media[it] as? Medium)?.getBubbleText(sorting, activity) ?: "")
val medium = (media[it] as? Medium)
media_horizontal_fastscroller.updateBubbleText(medium?.getBubbleText(sorting, activity, dateFormat, timeFormat) ?: "")
}
} else {
media_vertical_fastscroller.allowBubbleDisplay = activity.config.showInfoBubble
media_vertical_fastscroller.setViews(media_grid) {
media_vertical_fastscroller.updateBubbleText((media[it] as? Medium)?.getBubbleText(sorting, activity) ?: "")
val medium = (media[it] as? Medium)
media_vertical_fastscroller.updateBubbleText(medium?.getBubbleText(sorting, activity, dateFormat, timeFormat) ?: "")
}
}
}

View file

@ -84,24 +84,24 @@ fun SimpleActivity.launchAbout() {
LICENSE_PICASSO or LICENSE_EXOPLAYER or LICENSE_PANORAMA_VIEW or LICENSE_SANSELAN or LICENSE_FILTERS or LICENSE_GESTURE_VIEWS
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),
FAQItem(R.string.faq_2_title, R.string.faq_2_text),
FAQItem(R.string.faq_3_title, R.string.faq_3_text),
FAQItem(R.string.faq_4_title, R.string.faq_4_text),
FAQItem(R.string.faq_5_title, R.string.faq_5_text),
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_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_13_title, R.string.faq_13_text),
FAQItem(R.string.faq_14_title, R.string.faq_14_text),
FAQItem(R.string.faq_15_title, R.string.faq_15_text),
FAQItem(R.string.faq_2_title_commons, R.string.faq_2_text_commons),
FAQItem(R.string.faq_6_title_commons, R.string.faq_6_text_commons),
FAQItem(R.string.faq_7_title_commons, R.string.faq_7_text_commons))
FAQItem(R.string.faq_5_title_commons, R.string.faq_5_text_commons),
FAQItem(R.string.faq_1_title, R.string.faq_1_text),
FAQItem(R.string.faq_2_title, R.string.faq_2_text),
FAQItem(R.string.faq_3_title, R.string.faq_3_text),
FAQItem(R.string.faq_4_title, R.string.faq_4_text),
FAQItem(R.string.faq_5_title, R.string.faq_5_text),
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_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_13_title, R.string.faq_13_text),
FAQItem(R.string.faq_14_title, R.string.faq_14_text),
FAQItem(R.string.faq_15_title, R.string.faq_15_text),
FAQItem(R.string.faq_2_title_commons, R.string.faq_2_text_commons),
FAQItem(R.string.faq_6_title_commons, R.string.faq_6_text_commons),
FAQItem(R.string.faq_7_title_commons, R.string.faq_7_text_commons))
startAboutActivity(R.string.app_name, licenses, BuildConfig.VERSION_NAME, faqItems, true)
}
@ -156,7 +156,11 @@ fun BaseSimpleActivity.addNoMedia(path: String, callback: () -> Unit) {
}
} else {
try {
file.createNewFile()
if (file.createNewFile()) {
rescanFolderMedia(file.absolutePath)
} else {
toast(R.string.unknown_error_occurred)
}
} catch (e: Exception) {
showErrorToast(e)
}
@ -419,7 +423,7 @@ fun Activity.fixDateTaken(paths: ArrayList<String>, showToasts: Boolean, hasResc
for (path in paths) {
val dateTime = ExifInterface(path).getAttribute(ExifInterface.TAG_DATETIME_ORIGINAL)
?: ExifInterface(path).getAttribute(ExifInterface.TAG_DATETIME) ?: continue
?: ExifInterface(path).getAttribute(ExifInterface.TAG_DATETIME) ?: continue
// some formats contain a "T" in the middle, some don't
// sample dates: 2015-07-26T14:55:23, 2018:09:05 15:09:05
@ -611,18 +615,18 @@ fun saveFile(path: String, bitmap: Bitmap, out: FileOutputStream, degrees: Int)
fun Activity.getShortcutImage(tmb: String, drawable: Drawable, callback: () -> Unit) {
ensureBackgroundThread {
val options = RequestOptions()
.format(DecodeFormat.PREFER_ARGB_8888)
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.fitCenter()
.format(DecodeFormat.PREFER_ARGB_8888)
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.fitCenter()
val size = resources.getDimension(R.dimen.shortcut_size).toInt()
val builder = Glide.with(this)
.asDrawable()
.load(tmb)
.apply(options)
.centerCrop()
.into(size, size)
.asDrawable()
.load(tmb)
.apply(options)
.centerCrop()
.into(size, size)
try {
(drawable as LayerDrawable).setDrawableByLayerId(R.id.shortcut_image, builder.get())

View file

@ -216,16 +216,16 @@ fun Context.getDirectParentSubfolders(dirs: ArrayList<Directory>, currentPathPre
}
val directory = Directory(newDirId++,
parent,
subDirs.first().tmb,
getFolderNameFromPath(parent),
subDirs.sumBy { it.mediaCnt },
lastModified,
dateTaken,
subDirs.sumByLong { it.size },
getPathLocation(parent),
mediaTypes,
"")
parent,
subDirs.first().tmb,
getFolderNameFromPath(parent),
subDirs.sumBy { it.mediaCnt },
lastModified,
dateTaken,
subDirs.sumByLong { it.size },
getPathLocation(parent),
mediaTypes,
"")
directory.containsMediaFilesDirectly = false
dirs.add(directory)
@ -442,15 +442,15 @@ fun Context.getPathLocation(path: String): Int {
fun Context.loadPng(path: String, target: MySquareImageView, cropThumbnails: Boolean, skipMemoryCacheAtPaths: ArrayList<String>? = null) {
val options = RequestOptions()
.signature(path.getFileSignature())
.skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.priority(Priority.LOW)
.format(DecodeFormat.PREFER_ARGB_8888)
.signature(path.getFileSignature())
.skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.priority(Priority.LOW)
.format(DecodeFormat.PREFER_ARGB_8888)
val builder = Glide.with(applicationContext)
.asBitmap()
.load(path)
.asBitmap()
.load(path)
if (cropThumbnails) options.centerCrop() else options.fitCenter()
builder.apply(options).into(target)
@ -458,34 +458,34 @@ fun Context.loadPng(path: String, target: MySquareImageView, cropThumbnails: Boo
fun Context.loadJpg(path: String, target: MySquareImageView, cropThumbnails: Boolean, skipMemoryCacheAtPaths: ArrayList<String>? = null) {
val options = RequestOptions()
.signature(path.getFileSignature())
.skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true)
.priority(Priority.LOW)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.signature(path.getFileSignature())
.skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true)
.priority(Priority.LOW)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
val builder = Glide.with(applicationContext)
.load(path)
.load(path)
if (cropThumbnails) options.centerCrop() else options.fitCenter()
builder.apply(options)
.transition(DrawableTransitionOptions.withCrossFade())
.into(target)
.transition(DrawableTransitionOptions.withCrossFade())
.into(target)
}
fun Context.loadStaticGIF(path: String, target: MySquareImageView, cropThumbnails: Boolean, skipMemoryCacheAtPaths: ArrayList<String>? = null) {
val options = RequestOptions()
.signature(path.getFileSignature())
.skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true)
.priority(Priority.LOW)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.signature(path.getFileSignature())
.skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true)
.priority(Priority.LOW)
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
val builder = Glide.with(applicationContext)
.asBitmap() // make sure the GIF wont animate
.load(path)
.asBitmap() // make sure the GIF wont animate
.load(path)
if (cropThumbnails) options.centerCrop() else options.fitCenter()
builder.apply(options)
.into(target)
.into(target)
}
fun Context.loadSVG(path: String, target: MySquareImageView, cropThumbnails: Boolean) {
@ -493,12 +493,12 @@ fun Context.loadSVG(path: String, target: MySquareImageView, cropThumbnails: Boo
val options = RequestOptions().signature(path.getFileSignature())
Glide.with(applicationContext)
.`as`(PictureDrawable::class.java)
.listener(SvgSoftwareLayerSetter())
.load(path)
.apply(options)
.transition(DrawableTransitionOptions.withCrossFade())
.into(target)
.`as`(PictureDrawable::class.java)
.listener(SvgSoftwareLayerSetter())
.load(path)
.apply(options)
.transition(DrawableTransitionOptions.withCrossFade())
.into(target)
}
fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly: Boolean = false, forceShowHidden: Boolean = false, callback: (ArrayList<Directory>) -> Unit) {
@ -516,7 +516,7 @@ fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly:
val shouldShowHidden = config.shouldShowHidden || forceShowHidden
val excludedPaths = config.excludedFolders
val includedPaths = config.includedFolders
var filteredDirectories = directories.filter { it.path.shouldFolderBeVisible(excludedPaths, includedPaths, shouldShowHidden) } as ArrayList<Directory>
var filteredDirectories = directories.filter { it.path.shouldFolderBeVisible(excludedPaths, includedPaths, shouldShowHidden, this) } as ArrayList<Directory>
val filterMedia = config.filterMedia
filteredDirectories = (when {
@ -543,7 +543,6 @@ fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly:
val clone = filteredDirectories.clone() as ArrayList<Directory>
callback(clone.distinctBy { it.path.getDistinctPath() } as ArrayList<Directory>)
removeInvalidDBDirectories(filteredDirectories)
}
}
@ -565,7 +564,7 @@ fun Context.getCachedMedia(path: String, getVideosOnly: Boolean = false, getImag
val foldersToAdd = ArrayList<String>()
for (folder in foldersToScan) {
val allFiles = File(folder).listFiles() ?: continue
allFiles.filter { it.isDirectory && it.name.startsWith("img_", true) }.forEach {
allFiles.filter { it.name.startsWith("img_", true) && it.isDirectory }.forEach {
foldersToAdd.add(it.absolutePath)
}
}
@ -605,23 +604,26 @@ fun Context.getCachedMedia(path: String, getVideosOnly: Boolean = false, getImag
callback(grouped.clone() as ArrayList<ThumbnailItem>)
val OTGPath = config.OTGPath
val mediaToDelete = ArrayList<Medium>()
media.filter { !getDoesFilePathExist(it.path, OTGPath) }.forEach {
if (it.path.startsWith(recycleBinPath)) {
deleteDBPath(it.path)
} else {
mediaToDelete.add(it)
}
}
try {
if (mediaToDelete.isNotEmpty()) {
mediaDB.deleteMedia(*mediaToDelete.toTypedArray())
mediaToDelete.filter { it.isFavorite }.forEach {
favoritesDB.deleteFavoritePath(it.path)
val mediaToDelete = ArrayList<Medium>()
// creating a new thread intentionally, do not reuse the common background thread
Thread {
media.filter { !getDoesFilePathExist(it.path, OTGPath) }.forEach {
if (it.path.startsWith(recycleBinPath)) {
deleteDBPath(it.path)
} else {
mediaToDelete.add(it)
}
}
}
if (mediaToDelete.isNotEmpty()) {
mediaDB.deleteMedia(*mediaToDelete.toTypedArray())
mediaToDelete.filter { it.isFavorite }.forEach {
favoritesDB.deleteFavoritePath(it.path)
}
}
}.start()
} catch (ignored: Exception) {
}
}
@ -698,7 +700,6 @@ fun Context.deleteDBPath(path: String) {
fun Context.deleteMediumWithPath(path: String) {
try {
mediaDB.deleteMediumPath(path)
favoritesDB.deleteFavoritePath(path)
} catch (ignored: Exception) {
}
}
@ -788,9 +789,9 @@ fun Context.addPathToDB(path: String) {
try {
val isFavorite = favoritesDB.isFavorite(path)
val videoDuration = if (type == TYPE_VIDEOS) path.getVideoDuration() else 0
val videoDuration = if (type == TYPE_VIDEOS) getDuration(path) ?: 0 else 0
val medium = Medium(null, path.getFilenameFromPath(), path, path.getParentPath(), System.currentTimeMillis(), System.currentTimeMillis(),
File(path).length(), type, videoDuration, isFavorite, 0L)
File(path).length(), type, videoDuration, isFavorite, 0L)
mediaDB.insert(medium)
} catch (ignored: Exception) {
@ -887,23 +888,21 @@ fun Context.updateDirectoryPath(path: String) {
fun Context.getFileDateTaken(path: String): Long {
val projection = arrayOf(
Images.Media.DATE_TAKEN
Images.Media.DATE_TAKEN
)
val uri = Files.getContentUri("external")
val selection = "${Images.Media.DATA} = ?"
val selectionArgs = arrayOf(path)
val cursor = contentResolver.query(uri, projection, selection, selectionArgs, null)
cursor?.use {
if (cursor.moveToFirst()) {
do {
try {
return cursor.getLongValue(Images.Media.DATE_TAKEN)
} catch (ignored: Exception) {
}
} while (cursor.moveToNext())
try {
val cursor = contentResolver.query(uri, projection, selection, selectionArgs, null)
cursor?.use {
if (cursor.moveToFirst()) {
return cursor.getLongValue(Images.Media.DATE_TAKEN)
}
}
} catch (ignored: Exception) {
}
return 0L

View file

@ -1,9 +1,9 @@
package com.simplemobiletools.gallery.pro.extensions
import android.media.MediaMetadataRetriever
import android.content.Context
import android.os.Environment
import com.simplemobiletools.commons.extensions.doesThisOrParentHaveNoMedia
import com.simplemobiletools.commons.helpers.NOMEDIA
import com.simplemobiletools.commons.extensions.containsNoMedia
import com.simplemobiletools.commons.extensions.doesParentHaveNoMedia
import java.io.File
import java.io.IOException
@ -11,7 +11,7 @@ fun String.isThisOrParentIncluded(includedPaths: MutableSet<String>) = includedP
fun String.isThisOrParentExcluded(excludedPaths: MutableSet<String>) = excludedPaths.any { equals(it, true) } || excludedPaths.any { "$this/".startsWith("$it/", true) }
fun String.shouldFolderBeVisible(excludedPaths: MutableSet<String>, includedPaths: MutableSet<String>, showHidden: Boolean): Boolean {
fun String.shouldFolderBeVisible(excludedPaths: MutableSet<String>, includedPaths: MutableSet<String>, showHidden: Boolean, context: Context): Boolean {
if (isEmpty()) {
return false
}
@ -35,7 +35,7 @@ fun String.shouldFolderBeVisible(excludedPaths: MutableSet<String>, includedPath
val containsNoMedia = if (showHidden) {
false
} else {
File(this, NOMEDIA).exists()
file.containsNoMedia()
}
return if (!showHidden && containsNoMedia) {
@ -49,7 +49,7 @@ fun String.shouldFolderBeVisible(excludedPaths: MutableSet<String>, includedPath
} else if (!showHidden && file.isDirectory && file.canonicalFile == file.absoluteFile) {
var containsNoMediaOrDot = containsNoMedia || contains("/.")
if (!containsNoMediaOrDot) {
containsNoMediaOrDot = file.doesThisOrParentHaveNoMedia()
containsNoMediaOrDot = file.doesParentHaveNoMedia()
}
!containsNoMediaOrDot
} else {
@ -66,15 +66,4 @@ fun String.getDistinctPath(): String {
}
}
fun String.getVideoDuration(): Int {
var seconds = 0
try {
val retriever = MediaMetadataRetriever()
retriever.setDataSource(this)
seconds = Math.round(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION).toInt() / 1000f)
} catch (e: Exception) {
}
return seconds
}
fun String.isDownloadsFolder() = equals(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString(), true)

View file

@ -28,7 +28,9 @@ import com.simplemobiletools.commons.helpers.ensureBackgroundThread
import com.simplemobiletools.gallery.pro.R
import com.simplemobiletools.gallery.pro.activities.PanoramaVideoActivity
import com.simplemobiletools.gallery.pro.activities.VideoActivity
import com.simplemobiletools.gallery.pro.extensions.*
import com.simplemobiletools.gallery.pro.extensions.config
import com.simplemobiletools.gallery.pro.extensions.hasNavBar
import com.simplemobiletools.gallery.pro.extensions.parseFileChannel
import com.simplemobiletools.gallery.pro.helpers.*
import com.simplemobiletools.gallery.pro.models.Medium
import com.simplemobiletools.gallery.pro.views.MediaSideScroll
@ -327,7 +329,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S
}
private fun setupTimer() {
activity!!.runOnUiThread(object : Runnable {
activity?.runOnUiThread(object : Runnable {
override fun run() {
if (mExoPlayer != null && !mIsDragged && mIsPlaying) {
mCurrTime = (mExoPlayer!!.currentPosition / 1000).toInt()
@ -476,8 +478,8 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S
private fun checkIfPanorama() {
try {
val fis = FileInputStream(File(mMedium.path))
fis.use { fis ->
context!!.parseFileChannel(mMedium.path, fis.channel, 0, 0, 0) {
fis.use {
context!!.parseFileChannel(mMedium.path, it.channel, 0, 0, 0) {
mIsPanorama = true
}
}
@ -501,7 +503,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S
}
mSeekBar.setOnSeekBarChangeListener(if (mIsFullscreen) null else this)
arrayOf(mView.video_curr_time, mView.video_duration).forEach {
arrayOf(mView.video_curr_time, mView.video_duration, mView.video_toggle_play_pause).forEach {
it.isClickable = !mIsFullscreen
}
@ -588,8 +590,9 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S
return
}
if (mExoPlayer == null)
if (mExoPlayer == null) {
return
}
if (mIsPlaying) {
mExoPlayer!!.playWhenReady = true
@ -634,7 +637,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S
}
if (!wasEnded || !mConfig.loopVideos) {
mPlayPauseButton.setImageResource(R.drawable.ic_pause_outline)
mPlayPauseButton.setImageResource(R.drawable.ic_pause_outline_vector)
}
if (!mWasVideoStarted) {
@ -660,7 +663,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S
mExoPlayer?.playWhenReady = false
}
mPlayPauseButton.setImageResource(R.drawable.ic_play_outline)
mPlayPauseButton.setImageResource(R.drawable.ic_play_outline_vector)
activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
mPositionAtPause = mExoPlayer?.currentPosition ?: 0L
releaseExoPlayer()
@ -683,9 +686,14 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S
}
private fun setupVideoDuration() {
mDuration = mMedium.path.getVideoDuration()
setupTimeHolder()
setPosition(0)
ensureBackgroundThread {
mDuration = context?.getDuration(mMedium.path) ?: 0
activity?.runOnUiThread {
setupTimeHolder()
setPosition(0)
}
}
}
private fun videoPrepared() {

View file

@ -191,7 +191,7 @@ class Config(context: Context) : BaseConfig(context) {
set(blackBackground) = prefs.edit().putBoolean(BLACK_BACKGROUND, blackBackground).apply()
var filterMedia: Int
get() = prefs.getInt(FILTER_MEDIA, TYPE_DEFAULT_FILTER)
get() = prefs.getInt(FILTER_MEDIA, getDefaultFileFilter())
set(filterMedia) = prefs.edit().putInt(FILTER_MEDIA, filterMedia).apply()
var dirColumnCnt: Int
@ -400,11 +400,13 @@ class Config(context: Context) : BaseConfig(context) {
set(everShownFolders) = prefs.edit().putStringSet(EVER_SHOWN_FOLDERS, everShownFolders).apply()
private fun getEverShownFolders() = hashSetOf(
internalStoragePath,
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).absolutePath,
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath,
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).absolutePath,
"${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).absolutePath}/Screenshots"
internalStoragePath,
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).absolutePath,
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath,
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).absolutePath,
"${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).absolutePath}/Screenshots",
"internalStoragePath/WhatsApp/Media/WhatsApp Images",
"internalStoragePath/WhatsApp/Media/WhatsApp Video"
)
var showRecycleBinAtFolders: Boolean

View file

@ -1,6 +1,7 @@
package com.simplemobiletools.gallery.pro.helpers
import com.simplemobiletools.commons.helpers.MONTH_SECONDS
import com.simplemobiletools.commons.helpers.isPiePlus
// shared preferences
const val DIRECTORY_SORT_ORDER = "directory_sort_order"
@ -132,6 +133,7 @@ const val IS_VIEW_INTENT = "is_view_intent"
const val PICKED_PATHS = "picked_paths"
const val SHOULD_INIT_FRAGMENT = "should_init_fragment"
const val PORTRAIT_PATH = "portrait_path"
const val SKIP_AUTHENTICATION = "skip_authentication"
// rotations
const val ROTATE_BY_SYSTEM_SETTING = 0
@ -168,7 +170,8 @@ const val TYPE_GIFS = 4
const val TYPE_RAWS = 8
const val TYPE_SVGS = 16
const val TYPE_PORTRAITS = 32
const val TYPE_DEFAULT_FILTER = TYPE_IMAGES or TYPE_VIDEOS or TYPE_GIFS or TYPE_RAWS or TYPE_SVGS or TYPE_PORTRAITS
fun getDefaultFileFilter() = TYPE_IMAGES or TYPE_VIDEOS or TYPE_GIFS or TYPE_RAWS or TYPE_SVGS
const val LOCATION_INTERNAL = 1
const val LOCATION_SD = 2

View file

@ -49,9 +49,9 @@ class MediaFetcher(val context: Context) {
val OTGPath = context.config.OTGPath
val folders = getLatestFileFolders()
folders.addAll(arrayListOf(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString(),
"${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)}/Camera",
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString()
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString(),
"${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)}/Camera",
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString()
).filter { context.getDoesFilePathExist(it, OTGPath) })
val filterMedia = context.config.filterMedia
@ -66,7 +66,7 @@ class MediaFetcher(val context: Context) {
val shouldShowHidden = config.shouldShowHidden
val excludedPaths = config.excludedFolders
val includedPaths = config.includedFolders
folders.filter { it.shouldFolderBeVisible(excludedPaths, includedPaths, shouldShowHidden) }.toMutableList() as ArrayList<String>
folders.filter { it.shouldFolderBeVisible(excludedPaths, includedPaths, shouldShowHidden, context) }.toMutableList() as ArrayList<String>
} catch (e: Exception) {
ArrayList()
}
@ -172,7 +172,7 @@ class MediaFetcher(val context: Context) {
val config = context.config
val includedFolders = config.includedFolders
val OTGPath = config.OTGPath
var foldersToScan = config.everShownFolders.filter { it == FAVORITES || it == RECYCLE_BIN || context.getDoesFilePathExist(it, OTGPath) }.toHashSet()
val foldersToScan = config.everShownFolders.filter { it == FAVORITES || it == RECYCLE_BIN || context.getDoesFilePathExist(it, OTGPath) }.toHashSet()
cursor.use {
if (cursor.moveToFirst()) {
@ -192,8 +192,8 @@ class MediaFetcher(val context: Context) {
val showHidden = config.shouldShowHidden
val excludedFolders = config.excludedFolders
foldersToScan = foldersToScan.filter { it.shouldFolderBeVisible(excludedFolders, includedFolders, showHidden) }.toHashSet()
return foldersToScan.distinctBy { it.getDistinctPath() }.toMutableSet() as LinkedHashSet<String>
return foldersToScan.distinctBy { it.getDistinctPath() }
.filter { it.shouldFolderBeVisible(excludedFolders, includedFolders, showHidden, context) }.toMutableSet() as LinkedHashSet<String>
}
private fun addFolder(curFolders: HashSet<String>, folder: String) {
@ -244,7 +244,7 @@ class MediaFetcher(val context: Context) {
val isSvg = if (isImage || isVideo || isGif || isRaw) false else path.isSvg()
if (!isImage && !isVideo && !isGif && !isRaw && !isSvg) {
if (showPortraits && file.isDirectory && file.name.startsWith("img_", true)) {
if (showPortraits && file.name.startsWith("img_", true) && file.isDirectory) {
val portraitFiles = file.listFiles() ?: continue
val cover = portraitFiles.firstOrNull { it.name.contains("cover", true) } ?: portraitFiles.firstOrNull()
if (cover != null && !files.contains(cover)) {
@ -294,7 +294,7 @@ class MediaFetcher(val context: Context) {
} else {
val lastModified = if (getProperLastModified) file.lastModified() else 0L
var dateTaken = lastModified
val videoDuration = if (getVideoDurations && isVideo) path.getVideoDuration() else 0
val videoDuration = if (getVideoDurations && isVideo) context.getDuration(path) ?: 0 else 0
if (getProperDateTaken) {
var newDateTaken = dateTakens.remove(path)
@ -383,7 +383,7 @@ class MediaFetcher(val context: Context) {
}
val path = Uri.decode(file.uri.toString().replaceFirst("${context.config.OTGTreeUri}/document/${context.config.OTGPartition}%3A", "${context.config.OTGPath}/"))
val videoDuration = if (getVideoDurations) path.getVideoDuration() else 0
val videoDuration = if (getVideoDurations) context.getDuration(path) ?: 0 else 0
val isFavorite = favoritePaths.contains(path)
val medium = Medium(null, filename, path, folder, dateModified, dateTaken, size, type, videoDuration, isFavorite, 0L)
media.add(medium)
@ -396,8 +396,8 @@ class MediaFetcher(val context: Context) {
val dateTakens = HashMap<String, Long>()
if (folder != FAVORITES) {
val projection = arrayOf(
Images.Media.DISPLAY_NAME,
Images.Media.DATE_TAKEN
Images.Media.DISPLAY_NAME,
Images.Media.DATE_TAKEN
)
val uri = Files.getContentUri("external")
@ -494,7 +494,7 @@ class MediaFetcher(val context: Context) {
val sortDescending = currentGrouping and GROUP_DESCENDING != 0
val sorted = if (currentGrouping and GROUP_BY_LAST_MODIFIED_DAILY != 0 || currentGrouping and GROUP_BY_LAST_MODIFIED_MONTHLY != 0 ||
currentGrouping and GROUP_BY_DATE_TAKEN_DAILY != 0 || currentGrouping and GROUP_BY_DATE_TAKEN_MONTHLY != 0) {
currentGrouping and GROUP_BY_DATE_TAKEN_DAILY != 0 || currentGrouping and GROUP_BY_DATE_TAKEN_MONTHLY != 0) {
mediumGroups.toSortedMap(if (sortDescending) compareByDescending {
it.toLongOrNull() ?: 0L
} else {
@ -549,7 +549,7 @@ class MediaFetcher(val context: Context) {
return if (timestamp.areDigitsOnly()) {
val cal = Calendar.getInstance(Locale.ENGLISH)
cal.timeInMillis = timestamp.toLong()
val format = if (showDay) "dd MMM yyyy" else "MMM yyyy"
val format = if (showDay) context.config.dateFormat else "MMMM yyyy"
DateFormat.format(format, cal).toString()
} else {
""

View file

@ -32,11 +32,11 @@ data class Directory(
constructor() : this(null, "", "", "", 0, 0L, 0L, 0L, 0, 0, "", 0, 0)
fun getBubbleText(sorting: Int, context: Context) = when {
fun getBubbleText(sorting: Int, context: Context, dateFormat: String? = null, timeFormat: String? = null) = when {
sorting and SORT_BY_NAME != 0 -> name
sorting and SORT_BY_PATH != 0 -> path
sorting and SORT_BY_SIZE != 0 -> size.formatSize()
sorting and SORT_BY_DATE_MODIFIED != 0 -> modified.formatDate(context)
sorting and SORT_BY_DATE_MODIFIED != 0 -> modified.formatDate(context, dateFormat, timeFormat)
else -> taken.formatDate(context)
}

View file

@ -48,11 +48,11 @@ data class Medium(
fun isHidden() = name.startsWith('.')
fun getBubbleText(sorting: Int, context: Context) = when {
fun getBubbleText(sorting: Int, context: Context, dateFormat: String, timeFormat: String) = when {
sorting and SORT_BY_NAME != 0 -> name
sorting and SORT_BY_PATH != 0 -> path
sorting and SORT_BY_SIZE != 0 -> size.formatSize()
sorting and SORT_BY_DATE_MODIFIED != 0 -> modified.formatDate(context)
sorting and SORT_BY_DATE_MODIFIED != 0 -> modified.formatDate(context, dateFormat, timeFormat)
else -> taken.formatDate(context)
}

View file

@ -0,0 +1,18 @@
package com.simplemobiletools.gallery.pro.receivers
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
import com.simplemobiletools.gallery.pro.extensions.updateDirectoryPath
import com.simplemobiletools.gallery.pro.helpers.MediaFetcher
class BootCompletedReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
ensureBackgroundThread {
MediaFetcher(context).getFoldersToScan().forEach {
context.updateDirectoryPath(it)
}
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

File diff suppressed because it is too large Load diff

View file

@ -16,7 +16,7 @@
android:layout_marginTop="@dimen/activity_margin"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="@dimen/normal_margin"
android:src="@drawable/ic_prev_outline"
android:src="@drawable/ic_prev_outline_vector"
android:visibility="invisible"/>
<ImageView
@ -27,7 +27,7 @@
android:layout_marginTop="@dimen/activity_margin"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="@dimen/small_margin"
android:src="@drawable/ic_pause_outline"
android:src="@drawable/ic_pause_outline_vector"
android:visibility="invisible"/>
<ImageView
@ -39,7 +39,7 @@
android:layout_marginEnd="@dimen/small_margin"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="@dimen/normal_margin"
android:src="@drawable/ic_next_outline"
android:src="@drawable/ic_next_outline_vector"
android:visibility="invisible"/>
<TextView

View file

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_holder"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -8,17 +7,18 @@
<FrameLayout
android:id="@+id/fragment_placeholder"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
android:layout_height="match_parent" />
<ImageView
android:id="@+id/top_shadow"
android:layout_width="match_parent"
android:contentDescription="@null"
android:layout_height="@dimen/default_status_action_height"
android:background="@drawable/gradient_background_flipped"/>
android:background="@drawable/gradient_background_flipped"
android:contentDescription="@null" />
<include
android:id="@+id/bottom_actions"
layout="@layout/bottom_actions"/>
layout="@layout/bottom_actions"
android:visibility="gone" />
</RelativeLayout>

View file

@ -41,7 +41,7 @@
android:layout_height="@dimen/play_outline_size_big"
android:layout_centerInParent="true"
android:padding="20dp"
android:src="@drawable/ic_play_outline"/>
android:src="@drawable/ic_play_outline_vector"/>
<ImageView
android:id="@+id/panorama_outline"

View file

@ -21,7 +21,7 @@
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_margin="@dimen/small_margin"
android:src="@drawable/img_play_outline"
android:src="@drawable/ic_play_outline_vector"
android:visibility="gone"/>
<TextView

View file

@ -55,7 +55,7 @@
android:layout_alignParentBottom="true"
android:layout_marginEnd="@dimen/small_margin"
android:paddingBottom="6dp"
android:src="@drawable/img_play_outline_empty"
android:src="@drawable/ic_play_outline_vector"
android:visibility="gone"/>
<TextView

View file

@ -59,18 +59,6 @@
android:id="@+id/group"
android:title="@string/group_by"
app:showAsAction="never"/>
<item
android:id="@+id/hide_folder"
android:title="@string/hide_folder"
app:showAsAction="never"/>
<item
android:id="@+id/unhide_folder"
android:title="@string/unhide_folder"
app:showAsAction="never"/>
<item
android:id="@+id/exclude_folder"
android:title="@string/exclude"
app:showAsAction="never"/>
<item
android:id="@+id/create_new_folder"
android:title="@string/create_new_folder"

View file

@ -10,17 +10,17 @@
<string name="unpin_folder">إلغاء تثبيت المجلد</string>
<string name="pin_to_the_top">تثبيت في الأعلى</string>
<string name="show_all">إظهار كل محتويات المجلدات</string>
<string name="all_folders">كل المحلات</string>
<string name="all_folders">كل المجلدات</string>
<string name="folder_view">التبديل إلى عرض المجلد</string>
<string name="other_folder">مجلد آخر</string>
<string name="show_on_map">عرض علي الخريطة</string>
<string name="unknown_location">موقع غير معروف</string>
<string name="increase_column_count">ذيادة عدد الأعمدة</string>
<string name="increase_column_count">زيادة عدد الأعمدة</string>
<string name="reduce_column_count">تقليل عدد الأعمدة</string>
<string name="change_cover_image">تغيير صورة الغلاف</string>
<string name="select_photo">تحديد صورة</string>
<string name="volume">الصوت</string>
<string name="brightness">السبوع</string>
<string name="brightness">السطوع</string>
<string name="lock_orientation">قفل الاتجاه</string>
<string name="unlock_orientation">فتح الاتجاه</string>
<string name="change_orientation">تغيير الاتجاه</string>
@ -30,7 +30,7 @@
<string name="fix_date_taken">إصلاح تاريخ إلتقاط القيمة</string>
<string name="fixing">جارٍ الإصلاح…</string>
<string name="dates_fixed_successfully">تم إصلاح التواريخ بنجاح</string>
<string name="no_date_takens_found">No Date Taken values have been found</string>
<string name="no_date_takens_found">لم يتم العثور على تاريخ التقاط القيم</string>
<string name="share_resized">مشاركة الصورة الذي تم تغيير حجمها</string>
<string name="upgraded_from_free">مرحباً,\n\nيبدو أنك قمت بترقية التطبيق المجاني القديم. يمكنك الآن إلغاء تثبيت الإصدار القديم، الذي يحتوي على زر \'الترقية إلى Pro\' في أعلي إعدادات التطبيق.\n\nسيتم حذف عناصر سلة المحذوفات فقط، كما سيتم حذف العناصر المفضلة، كما سيتعين عليك إعادة ضبط إعدادات التطبيق .\n\nشكراً!</string>
<string name="switch_to_file_search">التبديل إلي البحث فى الملفات عبر كافة المجلدات المرئية</string>
@ -80,8 +80,8 @@
<string name="rotate">تدوير</string>
<string name="invalid_image_path">مسار الصورة غير صحيح</string>
<string name="image_editing_failed">فشل تعديل الصورة</string>
<string name="image_editing_cancelled">Image editing cancelled</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="image_editing_cancelled">تم إلغاء تعديل الصورة</string>
<string name="file_edited_successfully">تم تعديل الملف بنجاح</string>
<string name="edit_image_with">تعديل الصورة باستخدام:</string>
<string name="no_editor_found">لم يتم العثور على أي محرر للصور</string>
<string name="unknown_file_location">موقع الملف غير معروف</string>
@ -189,6 +189,7 @@
<string name="compromise">إختيار وسط</string>
<string name="avoid_showing_invalid_files">تجنب إظهار الملفات غير الصالحة</string>
<string name="show_image_file_types">إظهار أنواع ملفات الصور</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">الصور المصغرة</string>
@ -202,85 +203,85 @@
<string name="toggle_file_visibility">تبديل رؤية الملف</string>
<!-- New editor strings -->
<string name="pesdk_transform_button_freeCrop">Custom</string>
<string name="pesdk_transform_button_resetCrop">Reset</string>
<string name="pesdk_transform_button_squareCrop">Square</string>
<string name="pesdk_transform_title_name">Transform</string>
<string name="pesdk_filter_title_name">Filter</string>
<string name="pesdk_filter_asset_none">None</string>
<string name="pesdk_adjustments_title_name">Adjust</string>
<string name="pesdk_adjustments_button_shadowTool">Shadows</string>
<string name="pesdk_adjustments_button_exposureTool">Exposure</string>
<string name="pesdk_adjustments_button_highlightTool">Highlights</string>
<string name="pesdk_adjustments_button_brightnessTool">Brightness</string>
<string name="pesdk_adjustments_button_contrastTool">Contrast</string>
<string name="pesdk_adjustments_button_saturationTool">Saturation</string>
<string name="pesdk_adjustments_button_clarityTool">Clarity</string>
<string name="pesdk_adjustments_button_gammaTool">Gamma</string>
<string name="pesdk_adjustments_button_blacksTool">Blacks</string>
<string name="pesdk_adjustments_button_whitesTool">Whites</string>
<string name="pesdk_adjustments_button_temperatureTool">Temperature</string>
<string name="pesdk_adjustments_button_sharpnessTool">Sharpness</string>
<string name="pesdk_adjustments_button_reset">Reset</string>
<string name="pesdk_focus_title_name">Focus</string>
<string name="pesdk_focus_title_disabled">None</string>
<string name="pesdk_focus_button_radial">Radial</string>
<string name="pesdk_focus_button_linear">Linear</string>
<string name="pesdk_focus_button_mirrored">Mirrored</string>
<string name="pesdk_focus_button_gaussian">Gaussian</string>
<string name="pesdk_text_title_name">Text</string>
<string name="pesdk_text_title_options">Text Options</string>
<string name="pesdk_text_title_textColor">Text Color</string>
<string name="pesdk_text_title_font">Font</string>
<string name="pesdk_text_button_add">Add</string>
<string name="pesdk_text_button_edit">Edit</string>
<string name="pesdk_text_button_straighten">Straighten</string>
<string name="pesdk_text_button_font">Font</string>
<string name="pesdk_text_button_color">Color</string>
<string name="pesdk_text_button_backgroundColor">BG Color</string>
<string name="pesdk_text_button_alignment">Alignment</string>
<string name="pesdk_text_button_bringToFront">To Front</string>
<string name="pesdk_text_button_delete">Delete</string>
<string name="pesdk_text_text_editTextPlaceholder">Your text</string>
<string name="pesdk_brush_title_name">Brush</string>
<string name="pesdk_brush_button_color">Color</string>
<string name="pesdk_brush_button_size">Size</string>
<string name="pesdk_brush_button_hardness">Hardness</string>
<string name="pesdk_brush_button_bringToFront">To Front</string>
<string name="pesdk_brush_button_delete">Delete</string>
<string name="pesdk_brush_title_brushColor">Brush Color</string>
<string name="pesdk_editor_title_name">Editor</string>
<string name="pesdk_editor_title_closeEditorAlert">Close Editor?</string>
<string name="pesdk_editor_text_closeEditorAlert">Do you really want to discard the image?</string>
<string name="pesdk_editor_button_closeEditorAlertConfirmation">Yes</string>
<string name="pesdk_editor_button_closeEditorAlertCancelation">No</string>
<string name="pesdk_editor_cancel">Cancel</string>
<string name="pesdk_editor_accept">Accept</string>
<string name="pesdk_editor_save">Save</string>
<string name="pesdk_editor_text_exportProgressUnknown">Exporting image</string>
<string name="pesdk_editor_text_exportProgress" formatted="false">Exporting image %s.</string>
<string name="pesdk_common_button_flipH">Flip H</string>
<string name="pesdk_common_button_flipV">Flip V</string>
<string name="pesdk_common_button_undo">Undo</string>
<string name="pesdk_common_button_redo">Redo</string>
<string name="pesdk_common_title_colorPicker">Color Picker</string>
<string name="pesdk_common_title_transparentColor">Transparent</string>
<string name="pesdk_common_title_whiteColor">White</string>
<string name="pesdk_common_title_grayColor">Gray</string>
<string name="pesdk_common_title_blackColor">Black</string>
<string name="pesdk_common_title_lightBlueColor">Light blue</string>
<string name="pesdk_common_title_blueColor">Blue</string>
<string name="pesdk_common_title_purpleColor">Purple</string>
<string name="pesdk_common_title_orchidColor">Orchid</string>
<string name="pesdk_common_title_pinkColor">Pink</string>
<string name="pesdk_common_title_redColor">Red</string>
<string name="pesdk_common_title_orangeColor">Orange</string>
<string name="pesdk_common_title_goldColor">Gold</string>
<string name="pesdk_common_title_yellowColor">Yellow</string>
<string name="pesdk_common_title_oliveColor">Olive</string>
<string name="pesdk_common_title_greenColor">Green</string>
<string name="pesdk_common_title_aquamarinColor">Aquamarin</string>
<string name="pesdk_common_title_pipettableColor">Pipettable color</string>
<string name="pesdk_transform_button_freeCrop">مخصص</string>
<string name="pesdk_transform_button_resetCrop">إعادة تعيين</string>
<string name="pesdk_transform_button_squareCrop">مربع</string>
<string name="pesdk_transform_title_name">تحويل</string>
<string name="pesdk_filter_title_name">فلتر</string>
<string name="pesdk_filter_asset_none">لا شيء</string>
<string name="pesdk_adjustments_title_name">ضبط</string>
<string name="pesdk_adjustments_button_shadowTool">ظلال</string>
<string name="pesdk_adjustments_button_exposureTool">التعرض</string>
<string name="pesdk_adjustments_button_highlightTool">أكثر وضوحاً</string>
<string name="pesdk_adjustments_button_brightnessTool">السطوع</string>
<string name="pesdk_adjustments_button_contrastTool">التباين</string>
<string name="pesdk_adjustments_button_saturationTool">التشبع</string>
<string name="pesdk_adjustments_button_clarityTool">الوضوح</string>
<string name="pesdk_adjustments_button_gammaTool">جاما</string>
<string name="pesdk_adjustments_button_blacksTool">دراجات الأسود</string>
<string name="pesdk_adjustments_button_whitesTool">دراجات الأبيض</string>
<string name="pesdk_adjustments_button_temperatureTool">درجة الحرارة</string>
<string name="pesdk_adjustments_button_sharpnessTool">الحدة</string>
<string name="pesdk_adjustments_button_reset">إعادة تعيين</string>
<string name="pesdk_focus_title_name">تركيز</string>
<string name="pesdk_focus_title_disabled">لا شيء</string>
<string name="pesdk_focus_button_radial">قطري</string>
<string name="pesdk_focus_button_linear">خطي</string>
<string name="pesdk_focus_button_mirrored">مرآة</string>
<string name="pesdk_focus_button_gaussian">جاوس</string>
<string name="pesdk_text_title_name">النص</string>
<string name="pesdk_text_title_options">خيارات النص</string>
<string name="pesdk_text_title_textColor">لون الخط</string>
<string name="pesdk_text_title_font">الخط</string>
<string name="pesdk_text_button_add">إضافة</string>
<string name="pesdk_text_button_edit">تعديل</string>
<string name="pesdk_text_button_straighten">الصلابة</string>
<string name="pesdk_text_button_font">الخط</string>
<string name="pesdk_text_button_color">اللون</string>
<string name="pesdk_text_button_backgroundColor">لون الخلفية</string>
<string name="pesdk_text_button_alignment">محاذاة</string>
<string name="pesdk_text_button_bringToFront">إلي الأمام</string>
<string name="pesdk_text_button_delete">حذف</string>
<string name="pesdk_text_text_editTextPlaceholder">النص الخاص بك</string>
<string name="pesdk_brush_title_name">الفرشاة</string>
<string name="pesdk_brush_button_color">اللون</string>
<string name="pesdk_brush_button_size">الحجم</string>
<string name="pesdk_brush_button_hardness">الصلابة</string>
<string name="pesdk_brush_button_bringToFront">إلي الأمام</string>
<string name="pesdk_brush_button_delete">حذف</string>
<string name="pesdk_brush_title_brushColor">لون الفرشاة</string>
<string name="pesdk_editor_title_name">المحرر</string>
<string name="pesdk_editor_title_closeEditorAlert">هل تريد إغلاق المحرر؟</string>
<string name="pesdk_editor_text_closeEditorAlert">هل تريد فعلاً تجاهل الصورة؟</string>
<string name="pesdk_editor_button_closeEditorAlertConfirmation">نعم</string>
<string name="pesdk_editor_button_closeEditorAlertCancelation">لا</string>
<string name="pesdk_editor_cancel">إلغاء</string>
<string name="pesdk_editor_accept">موافق</string>
<string name="pesdk_editor_save">حفظ</string>
<string name="pesdk_editor_text_exportProgressUnknown">جارٍ تصدير الصورة</string>
<string name="pesdk_editor_text_exportProgress" formatted="false">جارٍ تصدير الصورة %s.</string>
<string name="pesdk_common_button_flipH">أنعكاس أفقي</string>
<string name="pesdk_common_button_flipV">أنعكاس رأسي</string>
<string name="pesdk_common_button_undo">تراجع</string>
<string name="pesdk_common_button_redo">إعادة</string>
<string name="pesdk_common_title_colorPicker">لاقط اللون</string>
<string name="pesdk_common_title_transparentColor">شفاف</string>
<string name="pesdk_common_title_whiteColor">أبيض</string>
<string name="pesdk_common_title_grayColor">رمادي</string>
<string name="pesdk_common_title_blackColor">أسود</string>
<string name="pesdk_common_title_lightBlueColor">أزرق فاتح</string>
<string name="pesdk_common_title_blueColor">أزرق</string>
<string name="pesdk_common_title_purpleColor">بنفسجي</string>
<string name="pesdk_common_title_orchidColor">أرجواني</string>
<string name="pesdk_common_title_pinkColor">وردي</string>
<string name="pesdk_common_title_redColor">أحمر</string>
<string name="pesdk_common_title_orangeColor">برتقالي</string>
<string name="pesdk_common_title_goldColor">ذهبي</string>
<string name="pesdk_common_title_yellowColor">أصفر</string>
<string name="pesdk_common_title_oliveColor">زيتوني</string>
<string name="pesdk_common_title_greenColor">أخضر</string>
<string name="pesdk_common_title_aquamarinColor">زبرجد</string>
<string name="pesdk_common_title_pipettableColor">Pipettable لون</string>
<!-- FAQ -->
<string name="faq_1_title">كيف يمكنني جعل تطبيق الاستديو معرض الجهاز الإفتراضي ؟</string>
@ -290,9 +291,9 @@
<string name="faq_3_title">كيف يمكنني جعل ألبوماً يظهر دائماً في الأعلى ؟</string>
<string name="faq_3_text">يمكنك الضغط مطولاً علي الألبوم المطلوب وحدد أيقونة "التثبيت" في قائمة الإجراءات، التي ستقوم بتثبيته في الأعلي. يمكنك تثبيت مجلدات متعددة أيضا، سيتم فرز العناصر المثبتة حسب طريقة الفرز الإفتراضية.</string>
<string name="faq_4_title">كيف يمكنني تسريع مقاطع الفيديو؟</string>
<string name="faq_4_text">You can do it by double tapping the side of the screen, or tapping the current or max duration texts near the seekbar. If you enable opening videos on a separate screen in the app settings, you can use horizontal gestures too.</string>
<string name="faq_4_text">يمكنك القيام بذلك عن طريق النقر المزدوج على جانب الشاشة, أو النقر على نصوص المدة الحالية أو القصوى بالقرب من شريط التمرير. إذا قمت بتمكين فتح مقاطع الفيديو على شاشة منفصلة في إعدادات التطبيق، يمكنك استخدام الإيماءات الأفقية أيضاً.</string>
<string name="faq_5_title">ما هو الفرق بين إخفاء المجلد وإستبعاده ؟</string>
<string name="faq_5_text">Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads. الإستبعاد يمنع عرض المجلد فقط في الاستديو، بينما الإخفاء يعمل على مستوى النظام ويخفي المجلد من المعارض الأخرى أيضاً. يعمل عن طريق إنشاء ملف فارغ \ ".nomedia \" في المجلد المحدد ، والذي يمكنك إزالته بعد ذلك بواسطة أي مدير ملفات أيضًا.</string>
<string name="faq_5_text">لاحظ أن بعض الأجهزة لا تسمح بإخفاء المجلدات مثل الكاميرا ولقطات الشاشة والتنزيلات. الإستبعاد يمنع عرض المجلد فقط في الاستديو، بينما الإخفاء يعمل على مستوى النظام ويخفي المجلد من المعارض الأخرى أيضاً. يعمل عن طريق إنشاء ملف فارغ \ ".nomedia \" في المجلد المحدد ، والذي يمكنك إزالته بعد ذلك بواسطة أي مدير ملفات أيضًا.</string>
<string name="faq_6_title">لماذا تظهر المجلدات مع صورة غلاف الموسيقى أو الملصقات؟</string>
<string name="faq_6_text">قد يحدث أن ترى بعض الألبومات غير العادية تظهر. يمكنك بسهولة إستبعادهم بالضغط مطولاً عليهم وأختر إستبعاد. في مربع الحوار التالي يمكنك بعد ذلك تحديد المجلد الاصل، من المحتمل ان يمنع ظهور الألبومات الأخري ذات الصلة أيضاً.</string>
<string name="faq_7_title">المجلد الذي به صور لا يظهر، أو لا يظهر كل العناصر. ماذا يمكنني أن أفعل؟</string>
@ -316,7 +317,7 @@
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
<string name="app_title">المعرض البسيط الـ Pro - محرر ومدير الصور</string>
<!-- Short description has to have less than 80 chars -->
<string name="app_short_description">Browse your memories without any interruptions with this photo and video gallery</string>
<string name="app_short_description">أستعرض ذكرياتك دون أي انقطاع مع معرض الصور والفيديو هذا</string>
<string name="app_long_description">
(تطبيق المعرض البسيط الـ Pro) هو معرض بدون إنترنت قابل للتخصيص بدرجة كبيرة يتمتع بتنظيم الصور وتحريرها وإستعادة الملفات المحذوفة من خلال "سلة المحذوفات" وحماية الملفات وإخفاؤها وعرض مجموعة كبيرة من تنسيقات الصور والفيديو المختلفة بما في ذلك تنسيقات RAW و SVG وغير ذلك الكثير.
@ -326,7 +327,7 @@
<b>المعرض البسيط الـ Pro - الميزات</b>
-------------------------------------------------
معرض بدون إنترنت بدون إعلانات أو نوافذ منبثقة
معرض بدون إنترنت بدون إعلانات أو نوافذ منبثقة
• محرر صور (معرض البسيط) - قص، تدوير، تغيير حجم، رسم، فلاتر وغير ذلك
• لا حاجة للوصول إلى الإنترنت، مما يمنحك المزيد من الخصوصية والأمان
@ -362,7 +363,7 @@
<b>حماية وإخفاء الصور والفيديوهات والملفات</b>
باستخدام رمز الـ PIN أو النمط أو الماسح الضوئي لبصمة الاصبع لجهازك يمكنك حماية الصور ومقاطع الفيديو والألبومات بأكملها وإخفائها. يمكنك حماية التطبيق نفسه أو وضع قفل الأمان علي وظائف معينة للتطبيق علي سبيل المثال، لا يمكنك حذف ملف دون إجراء مسح ضوئي لبصمة الاصبع، مما يساعد علي حماية ملفاتك من الحذف غير المقصود.
<b>أطلع على المجموعة الكاملة من الأدوات البسيطة هنا:</b>
<b>أطلع على المجموعة الكاملة من تطبيقات البسيط هنا:</b>
https://www.simplemobiletools.com
<b>موقع مستقل لتطبيق المعرض البسيط الـ Pro : </b>

View file

@ -189,6 +189,7 @@
<string name="compromise">Compromise</string>
<string name="avoid_showing_invalid_files">Avoid showing invalid files</string>
<string name="show_image_file_types">Show image file types</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Thumbnails</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Compromès</string>
<string name="avoid_showing_invalid_files">Eviteu mostrar fitxers no vàlids</string>
<string name="show_image_file_types">Mostra els tipus de fitxers d\imatges</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Miniatures</string>
@ -293,7 +294,7 @@
<string name="faq_4_title">Com puc fer avançar els vídeos?</string>
<string name="faq_4_text">Podeu fer-ho tocant dues vegades el costat de la pantalla o tocant els textos de durada actual o màxima a prop de la barra de cerca. Si activeu l\obertura de vídeos en una pantalla diferent a la configuració de l\aplicació, també podeu fer servir gestos horitzontals.</string>
<string name="faq_5_title">Quina és la diferència entre ocultar i excloure una carpeta?</string>
<string name="faq_5_text">Excloure impedeix mostrar la carpeta només a Simple Galery, mentre que Ocultar també amaga la carpeta a altres galeries. Funciona creant un fitxer \". Nomedia \" buit a la carpeta donada, que podeu eliminar amb qualsevol gestor de fitxers. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads.</string>
<string name="faq_5_text">Excloure impedeix mostrar la carpeta només a Simple Galery, mentre que Ocultar també amaga la carpeta a altres galeries. Funciona creant un fitxer \". Nomedia \" buit a la carpeta donada, que podeu eliminar amb qualsevol gestor de fitxers. Tingueu en compte que alguns dispositius no permeten amagar carpetes com Càmera, Captures de pantalla i Descàrregues.</string>
<string name="faq_6_title">Per què apareixen les carpetes amb les portades de la música o adhesius?</string>
<string name="faq_6_text">Pot passar que veuràs que apareixen alguns àlbums inusuals. Podeu exclourels fàcilment prement-los i seleccionant Excloure. Al següent diàleg, podeu seleccionar la carpeta principal, és probable que impedeixi que apareguin altres àlbums relacionats.</string>
<string name="faq_7_title">Una carpeta amb imatges no apareix, què puc fer?</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Kompromis</string>
<string name="avoid_showing_invalid_files">Nezobrazovat neplatné soubory</string>
<string name="show_image_file_types">Zobrazit typ obrázkových souborů</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Náhledy</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Kompromis</string>
<string name="avoid_showing_invalid_files">Undgå at vise ugyldige filer</string>
<string name="show_image_file_types">Vis billeders filtyper</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Miniaturer</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Kompromiss</string>
<string name="avoid_showing_invalid_files">Das Anzeigen von ungültigen Dateien vermeiden</string>
<string name="show_image_file_types">Bilddateitypen anzeigen</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Thumbnails</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Συμβιβασμός</string>
<string name="avoid_showing_invalid_files">Αποφυγή εμφάνισης μη έγκυρων αρχείων</string>
<string name="show_image_file_types">Εμφάνιση τύπου αρχείου εικόνας</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Εικονίδια</string>
@ -294,7 +295,7 @@
<string name="faq_4_title">Πώς μπορώ να τρέξω μπροστά (fast forward) τα βίντεο;</string>
<string name="faq_4_text">Μπορείτε να το κάνετε πατώντας δύο φορές την πλευρά της οθόνης ή πατώντας το κείμενο τρέχοντος ή μέγιστης διάρκειας κοντά στη γραμμή αναζήτησης. Αν ενεργοποιήσετε το άνοιγμα βίντεο σε ξεχωριστή οθόνη στις ρυθμίσεις εφαρμογής, μπορείτε επίσης να χρησιμοποιήσετε και τις οριζόντιες κινήσεις.</string>
<string name="faq_5_title">Ποια είναι διαφορά μεταξύ απόκρυψης και εξαίρεσης ενός φακέλου;</string>
<string name="faq_5_text">Η εξαίρεση δεν επιτρέπει την εμφάνιση του φακέλου μόνο στην Απλή Συλλογή, ενώ η απόκρυψη λειτουργεί σε επίπεδο συστήματος και θα αποκρύψει τον φάκελο και από άλλες εφαρμογές γκάλερι. Λειτουργεί δημιουργώντας ένα άδειο \".nomedia\" αρχείο στον επιλεγμένο φάκελο, το οποίο μπορείτε να το διαγράψετε και με οποιονδήποτε διαχειριστή αρχείων. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads.</string>
<string name="faq_5_text">Η εξαίρεση δεν επιτρέπει την εμφάνιση του φακέλου μόνο στην Απλή Συλλογή, ενώ η απόκρυψη λειτουργεί σε επίπεδο συστήματος και θα αποκρύψει τον φάκελο και από άλλες εφαρμογές γκάλερι. Λειτουργεί δημιουργώντας ένα άδειο \".nomedia\" αρχείο στον επιλεγμένο φάκελο, το οποίο μπορείτε να το διαγράψετε και με οποιονδήποτε διαχειριστή αρχείων. Σημειώστε ότι μερικές συσκευές δεν αποδέχονται την απόκρυψη φακέλων όπως Κάμερας, Στιγμιοτύπων, και Λήψεων.</string>
<string name="faq_6_title">Γιατί εμφανίζονται φάκελοι με εξώφυλλο μουσικής ή αυτόκολλητα;</string>
<string name="faq_6_text">Είναι πιθανόν να δείτε κάποια περίεργα άλμπουμ να εμφανίζονται. Μπορείτε να τα εξαιρέσετε εύκολα με παρατεταμένο άγγιγμα και επιλογή του Εξαίρεση. Στον επόμενο διάλογο μπορείτε να επιλέξετε επάνω φάκελο. Είναι πιθανό να μην επιτρέψει την εμφάνιση και άλλων σχετικών άλμπουμ.</string>
<string name="faq_7_title">Ένας φάκελος με εικόνες δεν εμφανίζεται. Τι μπορώ να κάνω;</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Compromiso</string>
<string name="avoid_showing_invalid_files">Evita mostrar archivos inválidos</string>
<string name="show_image_file_types">Mostrar tipos de archivo de imagen</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Miniaturas</string>
@ -293,7 +294,7 @@
<string name="faq_4_title">¿Cómo puedo avanzar videos?</string>
<string name="faq_4_text">Puede hacerlo tocando dos veces el costado de la pantalla o tocando los textos de duración actual o máxima cerca de la barra de búsqueda. Si habilita la apertura de videos en una pantalla separada en la configuración de la aplicación, también puede usar gestos horizontales.</string>
<string name="faq_5_title">¿Cuál es la diferencia entre ocultar y excluir una carpeta?</string>
<string name="faq_5_text">Excluir evita mostrar la carpeta solo en Simple Gallery, mientras que Ocultar funciona en el sistema y oculta la carpeta de otras galerías también. Funciona al crear un archivo \".nomedia \" vacío en la carpeta determinada, que luego puede eliminar también con cualquier administrador de archivos. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads.</string>
<string name="faq_5_text">Excluir evita mostrar la carpeta solo en Simple Gallery, mientras que Ocultar funciona en el sistema y oculta la carpeta de otras galerías también. Funciona al crear un archivo \".nomedia \" vacío en la carpeta determinada, que luego puede eliminar también con cualquier administrador de archivos. Tenga en cuenta que algunos dispositivos no permiten ocultar carpetas como Cámara, Capturas de pantalla y Descargas.</string>
<string name="faq_6_title">¿Por qué aparecen las carpetas con la portada de la música o las pegatinas?</string>
<string name="faq_6_text">Puede suceder que veas aparecer algunos álbumes inusuales. Puede excluirlos fácilmente presionándolos durante mucho tiempo y seleccionando Excluir. En el siguiente cuadro de diálogo, puede seleccionar la carpeta principal, lo más probable es que evite que aparezcan otros álbumes relacionados.</string>
<string name="faq_7_title">Una carpeta con imágenes no aparece, ¿qué puedo hacer?</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Compromise</string>
<string name="avoid_showing_invalid_files">Avoid showing invalid files</string>
<string name="show_image_file_types">Show image file types</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Esikatselukuvat</string>

View file

@ -80,9 +80,9 @@
<string name="rotate">Pivoter</string>
<string name="invalid_image_path">Emplacement invalide</string>
<string name="image_editing_failed">L\'édition de l\'image a échoué</string>
<string name="image_editing_cancelled">L\'édition de l\'image a été annulé</string>
<string name="image_editing_cancelled">L\'édition de l\'image a été annulée</string>
<string name="file_edited_successfully">L\'image a été éditée avec succès</string>
<string name="edit_image_with">Modifier l\'image avec:</string>
<string name="edit_image_with">Modifier l\'image avec :</string>
<string name="no_editor_found">Aucun éditeur d\'image trouvé</string>
<string name="unknown_file_location">Emplacement du fichier inconnu</string>
<string name="error_saving_file">Impossible de remplacer le fichier source</string>
@ -99,7 +99,7 @@
<string name="simple_wallpaper">Fond d\'écran simple</string>
<string name="set_as_wallpaper">Définir comme fond d\'écran</string>
<string name="set_as_wallpaper_failed">Échec de la définition en tant que fond d\'écran</string>
<string name="set_as_wallpaper_with">Définir comme fond d\'écran avec:</string>
<string name="set_as_wallpaper_with">Définir comme fond d\'écran avec :</string>
<string name="setting_wallpaper">Définition du fond d\'écran en cours…</string>
<string name="wallpaper_set_successfully">Fond d\'écran défini</string>
<string name="portrait_aspect_ratio">Rapport d\'affichage portrait</string>
@ -110,7 +110,7 @@
<!-- Slideshow -->
<string name="slideshow">Diaporama</string>
<string name="interval">Intervalle (secondes):</string>
<string name="interval">Intervalle (secondes) :</string>
<string name="include_photos">Inclure les images</string>
<string name="include_videos">Inclure les vidéos</string>
<string name="include_gifs">Inclure les GIFs</string>
@ -145,7 +145,7 @@
<string name="grouping_and_sorting">\'Grouper par\' et \'Trier par\' sont 2 modes indépendants</string>
<!-- Widgets -->
<string name="folder_on_widget">Dossier affiché sur le widget:</string>
<string name="folder_on_widget">Dossier affiché sur le widget :</string>
<string name="show_folder_name">Afficher le nom du dossier</string>
<!-- Settings -->
@ -189,6 +189,7 @@
<string name="compromise">Compromis</string>
<string name="avoid_showing_invalid_files">Éviter l\'affichage de fichiers invalides</string>
<string name="show_image_file_types">Afficher les types d\'image</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Miniatures</string>
@ -222,7 +223,7 @@
<string name="pesdk_adjustments_button_temperatureTool">Température</string>
<string name="pesdk_adjustments_button_sharpnessTool">Netteté</string>
<string name="pesdk_adjustments_button_reset">Réinitialiser</string>
<string name="pesdk_focus_title_name">Focus</string>
<string name="pesdk_focus_title_name">Floutage</string>
<string name="pesdk_focus_title_disabled">Aucun</string>
<string name="pesdk_focus_button_radial">Radial</string>
<string name="pesdk_focus_button_linear">Linéaire</string>
@ -288,11 +289,11 @@
<string name="faq_2_title">J\'ai verrouillé l\'application avec un mot de passe et je ne m\'en rappelle plus. Que faire ?</string>
<string name="faq_2_text">Il y a deux façons de procéder. Soit vous réinstallez l\'application, soit vous recherchez l\'application dans les paramètres de l\'appareil et appuyez sur \"Effacer les données\". Cela va seulement réinitialiser les paramètres de l\'application et ne supprimera pas vos fichiers.</string>
<string name="faq_3_title">Comment faire pour qu\'un album soit toujours affiché tout en haut ?</string>
<string name="faq_3_text">Vous devez simplement à effectuer un appui prolongé sur l\'album en question et choisir l\'icône \"Épingler\" dans le menu d\'actions. Vous pouvez en épingler plusieurs. Les éléments épinglés seront alors triés selon l\'ordre par défaut.</string>
<string name="faq_3_text">Vous devez simplement effectuer un appui prolongé sur l\'album en question et choisir l\'icône \"Épingler\" dans le menu d\'actions. Vous pouvez en épingler plusieurs. Les éléments épinglés seront alors triés selon l\'ordre par défaut.</string>
<string name="faq_4_title">Comment avancer rapidement dans les vidéos ?</string>
<string name="faq_4_text">You can do it by double tapping the side of the screen, or tapping the current or max duration texts near the seekbar. If you enable opening videos on a separate screen in the app settings, you can use horizontal gestures too.</string>
<string name="faq_4_text">Appuyez deux fois sur le côté de l\'écran, ou appuyez sur la valeur de durée actuelle ou maximale près de la barre de recherche. Si vous activez l\'ouverture des vidéos sur un écran séparé dans les paramètres de l\'application, vous pouvez également utiliser des gestes horizontaux.</string>
<string name="faq_5_title">Quelle est la différence entre cacher et exclure un dossier ?</string>
<string name="faq_5_text">\"Exclure un dossier\" permet de ne pas l\'afficher uniquement dans Simple Gallery, alors que \"Cacher un dossier\" rend le dossier invisible sur l\'ensemble de l\'appareil, y compris les autres applications de galerie. Dans le dernier cas, un fichier \".nomedia\" est créé dans le dossier caché, et peut être supprimé avec n\'importe quel explorateur de fichiers. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads.</string>
<string name="faq_5_text">\"Exclure un dossier\" permet de ne pas l\'afficher uniquement dans Simple Gallery, alors que \"Cacher un dossier\" rend le dossier invisible sur l\'ensemble de l\'appareil, y compris pour les autres applications de galerie. Dans le dernier cas, un fichier \".nomedia\" est créé dans le dossier caché, et peut être supprimé avec n\'importe quel explorateur de fichiers. Notez que certains appareils ne permettent pas de masquer certains dossiers tels qu\'Appareil photo, Captures d\'écran et Téléchargements.</string>
<string name="faq_6_title">Pourquoi des dossiers avec des pochettes d\'albums musicaux ou des miniatures d\'images sont affichés ?</string>
<string name="faq_6_text">Il est possible que des albums qui ne devraient pas être affichés le soient. Vous pouvez les exclure facilement en les sélectionnant par un appui prolongé, puis en choisissant l\'option \"Exclure\", après quoi vous pouvez aussi sélectionner le dossier parent, ce qui devrait éviter l\'apparition d\'albums similaires.</string>
<string name="faq_7_title">Un dossier avec des images n\'apparaît pas. Que faire ?</string>

View file

@ -23,26 +23,26 @@
<string name="brightness">Brillo</string>
<string name="lock_orientation">Fixar orientación</string>
<string name="unlock_orientation">Desbloquear orientación</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="no_date_takens_found">No Date Taken values have been found</string>
<string name="share_resized">Share a resized version</string>
<string name="upgraded_from_free">Hey,\n\nseems like you upgraded from the old free app. You can now uninstall the old version, which has an \'Upgrade to Pro\' button at the top of the app settings.\n\nYou will only have the Recycle bin items deleted, favorite items unmarked and you will also have to reset your app settings.\n\nThanks!</string>
<string name="switch_to_file_search">Switch to file search across all visible folders</string>
<string name="change_orientation">Cambiar orientación</string>
<string name="force_portrait">Forzar retrato</string>
<string name="force_landscape">Forzar paisaxe</string>
<string name="use_default_orientation">Usar a orientación predeterminada</string>
<string name="fix_date_taken">Arranxar o valor da Data de Captura</string>
<string name="fixing">Arranxando</string>
<string name="dates_fixed_successfully">Datas arranxadas con éxito</string>
<string name="no_date_takens_found">Non se atoparon valores de Datas de Captura</string>
<string name="share_resized">Comparta unha versión reducida</string>
<string name="upgraded_from_free">Ola,\n\nsemella que actualizou desde a vella aplicación gratuita. Pode desinstalar a versión vella, que ten un botón \'Upgrade to Pro\' enriba da pantalla de configuración.\n\nSo terá os elementos borrados da Papeleira de reciclaxe, os elementos favoritos sen marcar e tamén terá que reiniciar os Axustes.\n\nGrazas!</string>
<string name="switch_to_file_search">Cambiar á procura de ficheiros en todolos cartafoles visibles.</string>
<!-- Filter -->
<string name="filter_media">Filtrar medios</string>
<string name="images">Imaxes</string>
<string name="videos">Vídeos</string>
<string name="gifs">GIFs</string>
<string name="raw_images">RAW images</string>
<string name="raw_images">Imaxes RAW</string>
<string name="svgs">SVGs</string>
<string name="portraits">Portraits</string>
<string name="portraits">Retratos</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>
@ -65,7 +65,7 @@
<string name="manage_included_folders">Xestionar cartafoles incluídos</string>
<string name="add_folder">Engadir cartafol</string>
<string name="included_activity_placeholder">Si ten algún cartafol con medios, mais non foi recoñecido polo aplicativo, pódeo engadir manualmente.\n\nEngadindo aquí elementos non eliminará outros.</string>
<string name="no_media_add_included">No media files have been found. You can solve it by adding the folders containing media files manually.</string>
<string name="no_media_add_included">Non se atopou ningún ficheiro audiovisual. Pode solucionalo engadindo manualmente algúns cartafoles con eses ficheiros.</string>
<!-- Resizing -->
<string name="resize">Redimensionar</string>
@ -80,8 +80,8 @@
<string name="rotate">Rotar</string>
<string name="invalid_image_path">Ruta a imaxe non válida</string>
<string name="image_editing_failed">Fallo na edición da imaxe</string>
<string name="image_editing_cancelled">Image editing cancelled</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="image_editing_cancelled">Cancelouse a edición da imaxe</string>
<string name="file_edited_successfully">Ficheiro editado con éxito</string>
<string name="edit_image_with">Editar imaxe con:</string>
<string name="no_editor_found">Non se atopou ningún editor</string>
<string name="unknown_file_location">Localización do ficheiro descoñecida</string>
@ -92,8 +92,8 @@
<string name="flip">Voltear</string>
<string name="flip_horizontally">Voltear horizontalmente</string>
<string name="flip_vertically">Voltear verticalmente</string>
<string name="free_aspect_ratio">Free</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
<string name="other_aspect_ratio">Other</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
<string name="free_aspect_ratio">Libre</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
<string name="other_aspect_ratio">Outro</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
<!-- Set wallpaper -->
<string name="simple_wallpaper">Fondo de pantalla</string>
@ -117,10 +117,10 @@
<string name="random_order">Orde aleatoria</string>
<string name="move_backwards">Mover atrás</string>
<string name="loop_slideshow">Reproducir en bucle</string>
<string name="animation">Animation</string>
<string name="no_animation">None</string>
<string name="fade">Fade</string>
<string name="slide">Slide</string>
<string name="animation">Animación</string>
<string name="no_animation">Nengún</string>
<string name="fade">Esvaecemento</string>
<string name="slide">Deslizamento</string>
<string name="slideshow_ended">Rematou a presentación</string>
<string name="no_media_for_slideshow">Non se atoparon medios para a presentación</string>
@ -135,28 +135,28 @@
<string name="do_not_group_files">Non agrupar ficheiros</string>
<string name="by_folder">Cartafol</string>
<string name="by_last_modified">Último modificado</string>
<string name="by_last_modified_daily">Last modified (daily)</string>
<string name="by_last_modified_monthly">Last modified (monthly)</string>
<string name="by_last_modified_daily">Último modificado (diario)</string>
<string name="by_last_modified_monthly">Último modificado (mensual)</string>
<string name="by_date_taken">Data de captura</string>
<string name="by_date_taken_daily">Date taken (daily)</string>
<string name="by_date_taken_monthly">Date taken (monthly)</string>
<string name="by_file_type">Tipo de ficheior</string>
<string name="by_date_taken_daily">Data de captura (diaria)</string>
<string name="by_date_taken_monthly">Data de captura (mensual)</string>
<string name="by_file_type">Tipo de ficheiro</string>
<string name="by_extension">Extensión</string>
<string name="grouping_and_sorting">Please note that grouping and sorting are 2 independent fields</string>
<string name="grouping_and_sorting">Por favor, teña en conta que agrupar e ordenar son dous campos diferentes</string>
<!-- Widgets -->
<string name="folder_on_widget">Folder shown on the widget:</string>
<string name="show_folder_name">Show folder name</string>
<string name="folder_on_widget">Cartafol a mostrar no widget:</string>
<string name="show_folder_name">Amosar nome de cartafol</string>
<!-- Settings -->
<string name="autoplay_videos">Reproducir vídeos automticamente</string>
<string name="remember_last_video_position">Remember last video playback position</string>
<string name="remember_last_video_position">Lembrar a posición do vídeo na última vez</string>
<string name="toggle_filename">Mudar a visibilidade do ficheiro</string>
<string name="loop_videos">videos en bucle</string>
<string name="animate_gifs">Animar os GIFs na icona</string>
<string name="max_brightness">Brillo ao máximo cando mire medios</string>
<string name="crop_thumbnails">Recortar iconas a cadrados</string>
<string name="show_thumbnail_video_duration">Show video durations</string>
<string name="show_thumbnail_video_duration">Amosar a duración dos vídeos</string>
<string name="screen_rotation_by">Rotar medios a pantalla completa a</string>
<string name="screen_rotation_system_setting">Axuste do sistema</string>
<string name="screen_rotation_device_rotation">Rotación do dispositivo</string>
@ -172,113 +172,114 @@
<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="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="allow_deep_zooming_images">Permitir ampliar moito as imaxes</string>
<string name="hide_extended_details">Agochar detalles extendidos cando a barra de estado está oculta</string>
<string name="show_at_bottom">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="deep_zoomable_images">Deep zoomable images</string>
<string name="show_highest_quality">Show images in the highest possible quality</string>
<string name="show_recycle_bin_last">Show the Recycle Bin as the last item on the main screen</string>
<string name="allow_down_gesture">Allow closing the fullscreen view with a down gesture</string>
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
<string name="show_notch">Show a notch if available</string>
<string name="allow_rotating_gestures">Allow rotating images with gestures</string>
<string name="file_loading_priority">File loading priority</string>
<string name="speed">Speed</string>
<string name="compromise">Compromise</string>
<string name="avoid_showing_invalid_files">Avoid showing invalid files</string>
<string name="show_image_file_types">Show image file types</string>
<string name="show_at_bottom">Mostrar botóns para accións na parte baixa da pantalla</string>
<string name="show_recycle_bin">Mostrar a Papeleira de Reciclaxe na pantalla de cartafoles</string>
<string name="deep_zoomable_images">Imaxes con moita ampliación</string>
<string name="show_highest_quality">Mostrar imaxes na súa máxima calidade</string>
<string name="show_recycle_bin_last">Mostrar a Papeleira de Reciclaxe como no derradeiro posto da pantalla principal</string>
<string name="allow_down_gesture">Permitir pechar a visualización en pantalla completa deslizando cara abaixo</string>
<string name="allow_one_to_one_zoom">Permitir ampliar a 1:1 con dous toques</string>
<string name="open_videos_on_separate_screen">Abrir sempre os vídeos nunha pantalla diferente con novos xestos horizontais</string>
<string name="show_notch">Mostrar unha marca se a houbera</string>
<string name="allow_rotating_gestures">Permitir rotar unha imaxe con xestos</string>
<string name="file_loading_priority">Prioridade de carga de ficheiro</string>
<string name="speed">Velocidade</string>
<string name="compromise">Compromiso</string>
<string name="avoid_showing_invalid_files">Non mostrar ficheiros inválidos</string>
<string name="show_image_file_types">Mostrar tipos de ficheiros de imaxe</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Iconas</string>
<string name="fullscreen_media">Medios a pantalla completa</string>
<string name="extended_details">Detalles ampliados</string>
<string name="bottom_actions">Bottom actions</string>
<string name="bottom_actions">Actions do fondo</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">Xestionar accións visibles do fondo</string>
<string name="toggle_favorite">Alternar favorito</string>
<string name="toggle_file_visibility">Alternar visibilidade do ficheiro</string>
<!-- New editor strings -->
<string name="pesdk_transform_button_freeCrop">Custom</string>
<string name="pesdk_transform_button_resetCrop">Reset</string>
<string name="pesdk_transform_button_squareCrop">Square</string>
<string name="pesdk_transform_title_name">Transform</string>
<string name="pesdk_filter_title_name">Filter</string>
<string name="pesdk_filter_asset_none">None</string>
<string name="pesdk_adjustments_title_name">Adjust</string>
<string name="pesdk_adjustments_button_shadowTool">Shadows</string>
<string name="pesdk_adjustments_button_exposureTool">Exposure</string>
<string name="pesdk_adjustments_button_highlightTool">Highlights</string>
<string name="pesdk_adjustments_button_brightnessTool">Brightness</string>
<string name="pesdk_adjustments_button_contrastTool">Contrast</string>
<string name="pesdk_adjustments_button_saturationTool">Saturation</string>
<string name="pesdk_adjustments_button_clarityTool">Clarity</string>
<string name="pesdk_transform_button_freeCrop">Personalizado</string>
<string name="pesdk_transform_button_resetCrop">Reiniciar</string>
<string name="pesdk_transform_button_squareCrop">Cadrado</string>
<string name="pesdk_transform_title_name">Transformar</string>
<string name="pesdk_filter_title_name">Filtrar</string>
<string name="pesdk_filter_asset_none">Nengún</string>
<string name="pesdk_adjustments_title_name">Axustar</string>
<string name="pesdk_adjustments_button_shadowTool">Sombras</string>
<string name="pesdk_adjustments_button_exposureTool">Exposición</string>
<string name="pesdk_adjustments_button_highlightTool">Resalte</string>
<string name="pesdk_adjustments_button_brightnessTool">Brillo</string>
<string name="pesdk_adjustments_button_contrastTool">Contraste</string>
<string name="pesdk_adjustments_button_saturationTool">Saturación</string>
<string name="pesdk_adjustments_button_clarityTool">Claridade</string>
<string name="pesdk_adjustments_button_gammaTool">Gamma</string>
<string name="pesdk_adjustments_button_blacksTool">Blacks</string>
<string name="pesdk_adjustments_button_whitesTool">Whites</string>
<string name="pesdk_adjustments_button_temperatureTool">Temperature</string>
<string name="pesdk_adjustments_button_sharpnessTool">Sharpness</string>
<string name="pesdk_adjustments_button_reset">Reset</string>
<string name="pesdk_focus_title_name">Focus</string>
<string name="pesdk_focus_title_disabled">None</string>
<string name="pesdk_adjustments_button_blacksTool">Negros</string>
<string name="pesdk_adjustments_button_whitesTool">Brancos</string>
<string name="pesdk_adjustments_button_temperatureTool">Temperatura</string>
<string name="pesdk_adjustments_button_sharpnessTool">Nitidez</string>
<string name="pesdk_adjustments_button_reset">Reiniciar</string>
<string name="pesdk_focus_title_name">Foco</string>
<string name="pesdk_focus_title_disabled">Nengún</string>
<string name="pesdk_focus_button_radial">Radial</string>
<string name="pesdk_focus_button_linear">Linear</string>
<string name="pesdk_focus_button_mirrored">Mirrored</string>
<string name="pesdk_focus_button_gaussian">Gaussian</string>
<string name="pesdk_text_title_name">Text</string>
<string name="pesdk_text_title_options">Text Options</string>
<string name="pesdk_text_title_textColor">Text Color</string>
<string name="pesdk_text_title_font">Font</string>
<string name="pesdk_text_button_add">Add</string>
<string name="pesdk_text_button_edit">Edit</string>
<string name="pesdk_text_button_straighten">Straighten</string>
<string name="pesdk_text_button_font">Font</string>
<string name="pesdk_text_button_color">Color</string>
<string name="pesdk_text_button_backgroundColor">BG Color</string>
<string name="pesdk_text_button_alignment">Alignment</string>
<string name="pesdk_text_button_bringToFront">To Front</string>
<string name="pesdk_text_button_delete">Delete</string>
<string name="pesdk_text_text_editTextPlaceholder">Your text</string>
<string name="pesdk_brush_title_name">Brush</string>
<string name="pesdk_brush_button_color">Color</string>
<string name="pesdk_brush_button_size">Size</string>
<string name="pesdk_brush_button_hardness">Hardness</string>
<string name="pesdk_brush_button_bringToFront">To Front</string>
<string name="pesdk_brush_button_delete">Delete</string>
<string name="pesdk_brush_title_brushColor">Brush Color</string>
<string name="pesdk_focus_button_linear">Lineal</string>
<string name="pesdk_focus_button_mirrored">Reflectir</string>
<string name="pesdk_focus_button_gaussian">Gaussiano</string>
<string name="pesdk_text_title_name">Texto</string>
<string name="pesdk_text_title_options">Opcións de Texto</string>
<string name="pesdk_text_title_textColor">Cor de Texto</string>
<string name="pesdk_text_title_font">Fonte</string>
<string name="pesdk_text_button_add">Engadir</string>
<string name="pesdk_text_button_edit">Editar</string>
<string name="pesdk_text_button_straighten">Endereitar</string>
<string name="pesdk_text_button_font">Fonte</string>
<string name="pesdk_text_button_color">Cor</string>
<string name="pesdk_text_button_backgroundColor">Color Fondo</string>
<string name="pesdk_text_button_alignment">Aliñamento</string>
<string name="pesdk_text_button_bringToFront">Á Front</string>
<string name="pesdk_text_button_delete">Borrar</string>
<string name="pesdk_text_text_editTextPlaceholder">Seu texto</string>
<string name="pesdk_brush_title_name">Pincel</string>
<string name="pesdk_brush_button_color">Cor</string>
<string name="pesdk_brush_button_size">Tamaño</string>
<string name="pesdk_brush_button_hardness">Dureza</string>
<string name="pesdk_brush_button_bringToFront">Á Front</string>
<string name="pesdk_brush_button_delete">Borrar</string>
<string name="pesdk_brush_title_brushColor">Cor do Pincel</string>
<string name="pesdk_editor_title_name">Editor</string>
<string name="pesdk_editor_title_closeEditorAlert">Close Editor?</string>
<string name="pesdk_editor_text_closeEditorAlert">Do you really want to discard the image?</string>
<string name="pesdk_editor_button_closeEditorAlertConfirmation">Yes</string>
<string name="pesdk_editor_button_closeEditorAlertCancelation">No</string>
<string name="pesdk_editor_cancel">Cancel</string>
<string name="pesdk_editor_accept">Accept</string>
<string name="pesdk_editor_save">Save</string>
<string name="pesdk_editor_text_exportProgressUnknown">Exporting image…</string>
<string name="pesdk_editor_text_exportProgress" formatted="false">Exporting image %s.</string>
<string name="pesdk_common_button_flipH">Flip H</string>
<string name="pesdk_common_button_flipV">Flip V</string>
<string name="pesdk_common_button_undo">Undo</string>
<string name="pesdk_common_button_redo">Redo</string>
<string name="pesdk_common_title_colorPicker">Color Picker</string>
<string name="pesdk_common_title_transparentColor">Transparent</string>
<string name="pesdk_common_title_whiteColor">White</string>
<string name="pesdk_common_title_grayColor">Gray</string>
<string name="pesdk_common_title_blackColor">Black</string>
<string name="pesdk_common_title_lightBlueColor">Light blue</string>
<string name="pesdk_common_title_blueColor">Blue</string>
<string name="pesdk_common_title_purpleColor">Purple</string>
<string name="pesdk_common_title_orchidColor">Orchid</string>
<string name="pesdk_common_title_pinkColor">Pink</string>
<string name="pesdk_common_title_redColor">Red</string>
<string name="pesdk_common_title_orangeColor">Orange</string>
<string name="pesdk_common_title_goldColor">Gold</string>
<string name="pesdk_common_title_yellowColor">Yellow</string>
<string name="pesdk_common_title_oliveColor">Olive</string>
<string name="pesdk_common_title_greenColor">Green</string>
<string name="pesdk_editor_title_closeEditorAlert">Pechar o Editor?</string>
<string name="pesdk_editor_text_closeEditorAlert">Ten a certeza de desbotar a imaxe?</string>
<string name="pesdk_editor_button_closeEditorAlertConfirmation">Si</string>
<string name="pesdk_editor_button_closeEditorAlertCancelation">Non</string>
<string name="pesdk_editor_cancel">Cancelar</string>
<string name="pesdk_editor_accept">Aceptar</string>
<string name="pesdk_editor_save">Gardar</string>
<string name="pesdk_editor_text_exportProgressUnknown">Exportando imaxe…</string>
<string name="pesdk_editor_text_exportProgress" formatted="false">Exportando imaxe %s.</string>
<string name="pesdk_common_button_flipH">Volteo H</string>
<string name="pesdk_common_button_flipV">Volteo V</string>
<string name="pesdk_common_button_undo">Desfacer</string>
<string name="pesdk_common_button_redo">Refacer</string>
<string name="pesdk_common_title_colorPicker">Escolla de Cor</string>
<string name="pesdk_common_title_transparentColor">Transparente</string>
<string name="pesdk_common_title_whiteColor">Branco</string>
<string name="pesdk_common_title_grayColor">Gris</string>
<string name="pesdk_common_title_blackColor">Negro</string>
<string name="pesdk_common_title_lightBlueColor">Azul claro</string>
<string name="pesdk_common_title_blueColor">Azul</string>
<string name="pesdk_common_title_purpleColor">Púrpura</string>
<string name="pesdk_common_title_orchidColor">Rosa brillante</string>
<string name="pesdk_common_title_pinkColor">Rosa</string>
<string name="pesdk_common_title_redColor">Vermello</string>
<string name="pesdk_common_title_orangeColor">Laranxa</string>
<string name="pesdk_common_title_goldColor">Dourado</string>
<string name="pesdk_common_title_yellowColor">Amarelo</string>
<string name="pesdk_common_title_oliveColor">Verde oliva</string>
<string name="pesdk_common_title_greenColor">Verde</string>
<string name="pesdk_common_title_aquamarinColor">Aquamarin</string>
<string name="pesdk_common_title_pipettableColor">Pipettable color</string>
@ -291,7 +292,7 @@
<string name="faq_3_title">Cómo podo facer que un álbume apareza sempre arriba de todo?</string>
<string name="faq_3_text">Pode manter premido o álbume e escoller a icona de Fixar no menú de accións, esto fixarao arriba. Pode fixar varios cartafoles tambén, os elementos fixados estarán ordenados polo criterio por omisión.</string>
<string name="faq_4_title">Cómo podo aumentar a velocidade de reprodución de vídeo?</string>
<string name="faq_4_text">You can do it by double tapping the side of the screen, or tapping the current or max duration texts near the seekbar. If you enable opening videos on a separate screen in the app settings, you can use horizontal gestures too.</string>
<string name="faq_4_text">Pode facelo tocando dúas veces o lateral da pantalla, ou tocando os textos de duración máxima ou actual preto da barra de avance. Se activa abrir os vídeos nunha pantalla separada, tamén pode usar xestos horizontais.</string>
<string name="faq_5_title">Cal é a diferenza entre agochar e excluír un cartafol?</string>
<string name="faq_5_text">A Exclusión prevén que se mostre o cartafol só en Simple Gallery, mentras Agochar funciona para todo o sistema e agocha o cartafol para outras galerías tamén. Esto funciona creando un ficheiro baldeiro de nome \".nomedia\" no cartafol, que tamén pode quitar con calquer xestor de ficheiros. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads.</string>
<string name="faq_6_title">Por qué aparecen cartafoles de música con portadas ou pegatinas?</string>
@ -301,18 +302,18 @@
<string name="faq_8_title">E qué pasa si só quero que sexan visibles certos cartafoles</string>
<string name="faq_8_text">Engadir un cartafol a Cartafoles incluídos non exclúe nada de xeito automático. O que pode facer é ir a Axustes -> Xestionar cartafoles incluídos, excluír o cartafol root \"/\", e despóis engadir os cartafoles desexados con Axustes -> Xestionar Cartafoles Incluídos.
Esto fará visibles só aos cartafoles escollidos, como tanto excluír e incluír son recursivos e si está excluído e logo incluído, será mostrado.</string>
<string name="faq_10_title">Can I crop images with this app?</string>
<string name="faq_10_text">Yes, you can crop images in the editor, by dragging the image corners. You can get to the editor either by long pressing an image thumbnail and selecting Edit, or selecting Edit from the fullscreen view.</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_13_title">I see some color banding on the images. How can I improve the quality?</string>
<string name="faq_13_text">The current solution for displaying images works fine in the vast majority of cases, but if you want even better image quality, you can enable the \"Show images in the highest possible quality\" at the app settings, in the \"Deep zoomable images\" section.</string>
<string name="faq_14_title">I have hidden a file/folder. How can I unhide it?</string>
<string name="faq_14_text">You can either press the \"Temporarily show hidden items\" menu item at the main screen, or toggle \"Show hidden items\" in the app settings to see the hidden item. If you want to unhide it, just long press it and select \"Unhide\". Folders are hidden by adding a hidden \".nomedia\" file into them, you can delete the file with any file manager too.</string>
<string name="faq_15_title">Why does the app take up so much space?</string>
<string name="faq_15_text">App cache can take up to 250MB, it ensures quicker image loading. If the app is taking up even more space, it is most likely caused by you having items in the Recycle Bin. Those files count to the app size. You can clear the Recycle bin by opening it and deleting all files, or from the app settings. Every file in the Bin is deleted automatically after 30 days.</string>
<string name="faq_10_title">Podo recortar imaxes con esta aplicación?</string>
<string name="faq_10_text">Si, pode recortar imaxes no editor, arrastrando as esquinas das imaxes. Pode chegar ao editor tanto presionando na imaxe durante un anaco e seleccionando Editar, ou seleccionando Editar dende a vista de pantalla completa.</string>
<string name="faq_11_title">Podo agrupar as iconas de algún xeito?</string>
<string name="faq_11_text">Claro, use no menu \"Agrupar por\" na vista de iconas. Pode facelo por múltiples criterios, incluindo a data de captura. Se usa a función \"Mostrar o contido dos cartafoles\", tamén pode agruparlos por cartafoles.</string>
<string name="faq_12_title">Semella que Ordenar por Data non está a funcionar, como o amaño?</string>
<string name="faq_12_text">Seguramente foi causa de copiar os ficheiros de algures. Pode amañalo seleccionando as iconas e \"Arranxar o valor da Data de Captura\".</string>
<string name="faq_13_title">Vexo bandas de cor nas imaxes. Como podo mellorar a súa calidade?</string>
<string name="faq_13_text">A solución actual de mostra das imaxes funciona ben na maioría dos casos, pero se desexa unha calidade maior, active \"Mostrar imaxes na máxima calidade posible\" na configuración, na sección \"Imaxes con moita ampliación\".</string>
<string name="faq_14_title">Teño un ficheiro ou cartafol oculto. Como o amoso?</string>
<string name="faq_14_text">Pode ou ben activar \"Mostrar temporalmente ficheiros agochados\" no menu principal, ou activar \"Amosar obxectos ocultos\" na configuración. Se quere amosalo sempre, pode presionar uns intres e seleccionar \"Amosar\". Os cartafoles agóchanse engadindo un ficheiro oculto \".nomedia\" no seu interior; tamén pode borrar ese ficheiro con calquera xestor de ficheiros.</string>
<string name="faq_15_title">Por que consume tanto espacio esta aplicación?</string>
<string name="faq_15_text">Os ficheiros temporais poden chegar aos 250MB e server para cargar máis rápido. Se a aplicación está a consumir máis espazo, o máis probable é que teña ficheiros nam Papeleira de Reciclaxe. Estes ficheiros contan no tamaño da aplicación. Pode baleirala abríndoa e borrando os ficheiros, ou dende a configuración. Cada ficheiro da Papeleira bórrase automáticamente tras 30 días.</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->

View file

@ -189,6 +189,7 @@
<string name="compromise">Compromise</string>
<string name="avoid_showing_invalid_files">Avoid showing invalid files</string>
<string name="show_image_file_types">Show image file types</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Sličice</string>

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<string name="app_name">Simple Gallery</string>
<string name="app_launcher_name">Galéria</string>
@ -20,7 +20,7 @@
<string name="change_cover_image">Borítókép változtatása</string>
<string name="select_photo">Válasszon fotót</string>
<string name="volume">Hangerő</string>
<string name="brightness">Fénye</string>
<string name="brightness">Fényesség</string>
<string name="lock_orientation">Tájolás zárolása</string>
<string name="unlock_orientation">Tájolás feloldása</string>
<string name="change_orientation">Tájolás változtatása</string>
@ -80,7 +80,7 @@
<string name="rotate">Forgatás</string>
<string name="invalid_image_path">Érvénytelen kép elérési útvonal</string>
<string name="image_editing_failed">Sikertelen kép szerkesztés</string>
<string name="image_editing_cancelled">Image editing cancelled</string>
<string name="image_editing_cancelled">A képszerkesztés megszakítva</string>
<string name="file_edited_successfully">A fájl szerkesztése sikerült</string>
<string name="edit_image_with">Kép szerkesztés ezzel:</string>
<string name="no_editor_found">Nem található kép szerkesztő</string>
@ -92,12 +92,9 @@
<string name="flip">Tükrözés</string>
<string name="flip_horizontally">Tükrözés vízszintesen</string>
<string name="flip_vertically">Tükrözés függőlegesen</string>
<string name="free_aspect_ratio">Szabad</string>
<string name="free_aspect_ratio">Szabad</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
<string name="other_aspect_ratio">Egyéb</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
<!-- available as an option: 1:1, 4:3, 16:9, free -->
<string name="other_aspect_ratio">Egyéb</string>
<!-- available as an option: 1:1, 4:3, 16:9, free, other -->
<!-- Set wallpaper -->
<string name="simple_wallpaper">Simple Wallpaper</string>
<string name="set_as_wallpaper">Beállítás háttérképként</string>
@ -192,6 +189,7 @@
<string name="compromise">Kiegyensúlyozott</string>
<string name="avoid_showing_invalid_files">Kerülje az érvénytelen fájlok mutatását</string>
<string name="show_image_file_types">Mutassa a kép fájl típusokat</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Miniatűrök</string>
@ -207,7 +205,7 @@
<!-- New editor strings -->
<string name="pesdk_transform_button_freeCrop">Egyéni</string>
<string name="pesdk_transform_button_resetCrop">Alaphelyzetbe</string>
<string name="pesdk_transform_button_squareCrop">Square</string>
<string name="pesdk_transform_button_squareCrop">Négyzet</string>
<string name="pesdk_transform_title_name">Transform</string>
<string name="pesdk_filter_title_name">Szűrő</string>
<string name="pesdk_filter_asset_none">Nincs</string>
@ -215,7 +213,7 @@
<string name="pesdk_adjustments_button_shadowTool">Árnyékok</string>
<string name="pesdk_adjustments_button_exposureTool">Exposure</string>
<string name="pesdk_adjustments_button_highlightTool">Highlights</string>
<string name="pesdk_adjustments_button_brightnessTool">Fényesség</string>
<string name="pesdk_adjustments_button_brightnessTool">Fénye</string>
<string name="pesdk_adjustments_button_contrastTool">Kontraszt</string>
<string name="pesdk_adjustments_button_saturationTool">Színtelítettség</string>
<string name="pesdk_adjustments_button_clarityTool">Világosság</string>
@ -378,6 +376,7 @@ Ezzel csak a kiválasztott mappák láthatók, mivel a kizárás és a befoglal
<b>Reddit:</b>
https://www.reddit.com/r/SimpleMobileTools
</string>
<!--
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res

View file

@ -189,6 +189,7 @@
<string name="compromise">Kompromi</string>
<string name="avoid_showing_invalid_files">Hindari menampilkan berkas yang tidak valid</string>
<string name="show_image_file_types">Tampilkan tipe berkas gambar</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Thumbnail</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Kompromi</string>
<string name="avoid_showing_invalid_files">Hindari menampilkan berkas yang tidak valid</string>
<string name="show_image_file_types">Tampilkan tipe berkas gambar</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Thumbnail</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Compromesso</string>
<string name="avoid_showing_invalid_files">Evita di mostrare file non validi</string>
<string name="show_image_file_types">Mostra i tipi di file immagine</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Anteprime</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Compromise</string>
<string name="avoid_showing_invalid_files">Avoid showing invalid files</string>
<string name="show_image_file_types">Show image file types</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">サムネイル設定</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">균형</string>
<string name="avoid_showing_invalid_files">잘못된 파일 보이지 않기</string>
<string name="show_image_file_types">사진 파일 종류 표시</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">섬네일</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Compromise</string>
<string name="avoid_showing_invalid_files">Avoid showing invalid files</string>
<string name="show_image_file_types">Show image file types</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Miniatiūros</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Kompromiss</string>
<string name="avoid_showing_invalid_files">Unngå visning av ugyldige filer</string>
<string name="show_image_file_types">Vis bildefiltyper</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Minibilder</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Compromise</string>
<string name="avoid_showing_invalid_files">Avoid showing invalid files</string>
<string name="show_image_file_types">तस्बिरको फाईल किसिम देखाउनुहोस</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Thumbnails</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Compromis</string>
<string name="avoid_showing_invalid_files">Ongeldige bestanden verbergen</string>
<string name="show_image_file_types">Bestandstypen tonen</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Miniatuurvoorbeelden</string>
@ -293,7 +294,7 @@
<string name="faq_4_title">Hoe kan ik terug- of vooruitspoelen in videos?</string>
<string name="faq_4_text">Dubbelklik op de zijkant van het scherm, of tik op de cijfers die de voortgang of de lengte van de video weergeven om resp. terug of vooruit te springen. Als de instelling om video\'s in een apart scherm te openen is ingeschakeld, dan kunnen ook horizontale veeggebaren worden gebruikt.</string>
<string name="faq_5_title">Wat is het verschil tussen het verbergen en het uitsluiten van mappen?</string>
<string name="faq_5_text">Met \"Uitsluiten\" wordt het tonen van de map alleen binnen deze app voorkomen, terwijl \"Verbergen\" de map ook zal verbergen voor andere galerij-apps. Met \"Verbergen\" wordt een bestand genaamd \".nomedia\" in de te verbergen map aangemaakt (het verwijderen van dit bestand uit de map maakt het verbergen ongedaan). Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads.</string>
<string name="faq_5_text">Met \"Uitsluiten\" wordt het tonen van de map alleen binnen deze app voorkomen, terwijl \"Verbergen\" de map ook zal verbergen voor andere galerij-apps. Met \"Verbergen\" wordt een bestand genaamd \".nomedia\" in de te verbergen map aangemaakt (het verwijderen van dit bestand uit de map maakt het verbergen ongedaan). Op sommige apparaten is het echter niet mogelijk om specifieke mappen, zoals Camera, Screenshots en Downloads, te verbergen.</string>
<string name="faq_6_title">Waarom zie ik mappen met stickers of covers van muziekalbums?</string>
<string name="faq_6_text">Soms worden er wat ongebruikelijke afbeeldingen van andere apps getoond. Deze zijn gemakkelijk uit het overzicht te halen door lang te drukken op de map en vervolgens te kiezen voor \"Uitsluiten\". In het daaropvolgende venster is ook de bovenliggende map te kiezen; dit zou het tonen van soortgelijke ongewenste items kunnen voorkomen.</string>
<string name="faq_7_title">Een bepaalde map met afbeeldingen wordt niet getoond. Wat kan ik doen?</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Kompromis</string>
<string name="avoid_showing_invalid_files">Unikaj pokazywania niewłaściwych plików</string>
<string name="show_image_file_types">Pokazuj rozszerzenia zdjęć</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Miniatury</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Meio termo</string>
<string name="avoid_showing_invalid_files">Evitar a exibição de arquivos inválidos</string>
<string name="show_image_file_types">Exibir tipos de arquivo de imagem</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Miniaturas</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Qualidade</string>
<string name="avoid_showing_invalid_files">Não mostrar ficheiros inválidos</string>
<string name="show_image_file_types">Mostrar o tipo de imagem</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Miniaturas</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Компромисс</string>
<string name="avoid_showing_invalid_files">Пропускать файлы с ошибками</string>
<string name="show_image_file_types">Показывать типы файлов изображений</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Миниатюры</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Kompromis</string>
<string name="avoid_showing_invalid_files">Nezobrazovať neplatné súbory</string>
<string name="show_image_file_types">Zobraziť typ obrázkových súborov</string>
<string name="allow_zooming_videos">Povoliť približovanie videí dvojitým ťuknutím</string>
<!-- Setting sections -->
<string name="thumbnails">Náhľady</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Kompromis</string>
<string name="avoid_showing_invalid_files">Izogni se prikazovanju napačnih datotek</string>
<string name="show_image_file_types">Show image file types</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Sličice</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Компромис</string>
<string name="avoid_showing_invalid_files">Не приказуј оштећене датотеке</string>
<string name="show_image_file_types">Show image file types</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Сличице</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Compromise</string>
<string name="avoid_showing_invalid_files">Avoid showing invalid files</string>
<string name="show_image_file_types">Show image file types</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Miniatyrer</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Ödünsüz</string>
<string name="avoid_showing_invalid_files">Geçersiz dosyaları göstermekten kaçın</string>
<string name="show_image_file_types">Resim dosyası türlerini göster</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Küçük resimler</string>
@ -293,7 +294,7 @@
<string name="faq_4_title">Videoları nasıl hızlıca ileri sarabilirim?</string>
<string name="faq_4_text">Ekranın yan tarafına iki kez dokunarak veya arama çubuğunun yanındaki geçerli veya maksimum süre metinlerine dokunarak bunu yapabilirsiniz. Videoları uygulama ayarlarından ayrı bir ekranda açmayı etkinleştirirseniz yatay hareketleri de kullanabilirsiniz.</string>
<string name="faq_5_title">Klasörün gizlenmesi ve hariç tutulması arasındaki fark nedir?</string>
<string name="faq_5_text">Hariç tut, klasörü yalnızca Basit Galeri\'de görüntülemeyi engellerken, Gizle sistem genelinde çalışır ve klasörü diğer galerilerden de gizler. Verilen klasörde boş bir \".nomedia\" dosyası oluşturarak çalışır, daha sonra herhangi bir dosya yöneticisi ile kaldırabilirsiniz. Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads.</string>
<string name="faq_5_text">Hariç tut, klasörü yalnızca Basit Galeri\'de görüntülemeyi engellerken, Gizle sistem genelinde çalışır ve klasörü diğer galerilerden de gizler. Verilen klasörde boş bir \".nomedia\" dosyası oluşturarak çalışır, daha sonra herhangi bir dosya yöneticisi ile kaldırabilirsiniz. Bazı cihazların Kamera, Ekran Görüntüleri ve İndirilenler gibi klasörlerin gizlenmesine izin vermediğini unutmayın.</string>
<string name="faq_6_title">Neden albüm resimlerini içeren klasörler görünüyor?</string>
<string name="faq_6_text">Bazı olağandışı albümlerin ortaya çıktığını göreceksiniz. Onları uzun süre basarak ve Hariç tut\'u seçerek kolayca hariç tutabilirsiniz. Bir sonraki iletişim kutusunda, üst klasörü seçebilirsiniz, ancak diğer ilgili albümlerin de gösterilmesini önleyecektir.</string>
<string name="faq_7_title">Resimler içeren bir klasör görünmüyor, ne yapabilirim?</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Компроміс</string>
<string name="avoid_showing_invalid_files">Запобігати показу пошкоджених файлів</string>
<string name="show_image_file_types">Показувати типи файлів зображень</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Ескізи</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Thỏa hiệp</string>
<string name="avoid_showing_invalid_files">Tránh hiển thị các tệp không hợp lệ</string>
<string name="show_image_file_types">Hiển thị các loại tệp hình ảnh</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Hình thu nhỏ</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">折中</string>
<string name="avoid_showing_invalid_files">避免显示无效的文件</string>
<string name="show_image_file_types">显示图片文件类型</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">缩略图</string>
@ -292,7 +293,7 @@
<string name="faq_4_title">如何快进/快退视频?</string>
<string name="faq_4_text">您可以双击屏幕边缘或点击搜索栏附近的当前或总时长的文字。 如果您在应用设置中启用了在独立页面播放视频,则也可以使用水平手势。</string>
<string name="faq_5_title">文件夹的隐藏和排除有什么区别?</string>
<string name="faq_5_text">排除功能只是防止其在简约图库中显示,而隐藏功能则使用的是系统的方法,这样做也会在其他图库中隐藏。它的工作原理是在给定的文件夹中创建一个空的.nomedia文件你可以使用任何文件管理器删除它。Note that some devices do not allow hiding folders like Camera, Screenshots and Downloads.</string>
<string name="faq_5_text">排除功能只是防止其在简约图库中显示,而隐藏功能则使用的是系统的方法,这样做也会在其他图库中隐藏。它的工作原理是在给定的文件夹中创建一个空的.nomedia文件你可以使用任何文件管理器删除它。请注意,某些设备不允许隐藏\"Camera\"\"Screenshots\"和\"Downloads\"等文件夹。</string>
<string name="faq_6_title">为什么会出现音乐艺术家封面或贴纸文件夹?</string>
<string name="faq_6_text">你可能会看到一些不寻常的相册出现。你可以通过长按它们并选择“排除”来排除它们。在之后的对话框中,你可以选择父文件夹,这样也许就会阻止其他相关的相册出现。</string>
<string name="faq_7_title">有的图片文件夹没有显示,怎么回事?</string>
@ -364,7 +365,7 @@
<b>查看简约系列的所有应用:</b>
https://www.simplemobiletools.com
<b>简约图库 Pro的独立网站</b>
<b>简约图库 Pro 的独立网站:</b>
https://www.simplemobiletools.com/gallery
<b>Facebook:</b>

View file

@ -189,6 +189,7 @@
<string name="compromise">折衷</string>
<string name="avoid_showing_invalid_files">避免顯示無效的檔案</string>
<string name="show_image_file_types">Show image file types</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">縮圖</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">妥協</string>
<string name="avoid_showing_invalid_files">避免顯示無效的檔案</string>
<string name="show_image_file_types">顯示圖片檔案類型</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">縮圖</string>

View file

@ -189,6 +189,7 @@
<string name="compromise">Compromise</string>
<string name="avoid_showing_invalid_files">Avoid showing invalid files</string>
<string name="show_image_file_types">Show image file types</string>
<string name="allow_zooming_videos">Allow zooming videos with double tapping them</string>
<!-- Setting sections -->
<string name="thumbnails">Thumbnails</string>

View file

@ -13,10 +13,10 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.2'
classpath 'com.android.tools.build:gradle:3.6.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
if (is_proprietary) {
classpath 'ly.img.android.pesdk:plugin:7.2.0'
classpath 'ly.img.android.pesdk:plugin:7.2.2'
}
// NOTE: Do not place your application dependencies here; they belong

View file

@ -0,0 +1,6 @@
* Fixed some Photo Editor bugs
* Properly handle locked folders at opening from widgets and shortcuts
* Open the map at clicking the coordinates at the Properties window
* Properly sort items at the Other Folder dialog at copy/move
* Fixed some folder un/hiding related glitches
* A couple other translation and UX improvements

View file

@ -0,0 +1,3 @@
* Use the selected date format grouped thumbnail section titles too
* Fixed a glitch related to locked folders asking authentication too often
* Refresh the UI here and there a bit

View file

@ -0,0 +1,4 @@
* Improved the performance on multiple places
* Removed some unnecessary permissions added recently
* Fixed some photo editor glitches
* Show Portrait images by default only on Android 9+

View file

@ -0,0 +1,2 @@
* Disable Portrait photo showing by default, until it gets improved
* Added a couple other performance improvements here and there

View file

@ -0,0 +1 @@
* Added a few more stability and performance improvements

View file

@ -0,0 +1,4 @@
* Fixed a glitch with some favorite items disappearing
* Improve folder hiding, add the new .nomedia file into MediaStore
* Improve the performance of getting video file duration
* A few other improvements here and there

View file

@ -0,0 +1 @@
* Added some crashfixes