49
CHANGELOG.md
|
@ -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)*
|
||||
----------------------------
|
||||
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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>) {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) ?: "")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
""
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 3 KiB |
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 6.7 KiB |
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 excloure’ls 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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 -->
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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ényerő</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ényerő</string>
|
||||
<string name="pesdk_adjustments_button_contrastTool">Kontraszt</string>
|
||||
<string name="pesdk_adjustments_button_saturationTool">Színtelítettség</string>
|
||||
<string name="pesdk_adjustments_button_clarityTool">Világosság</string>
|
||||
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 video’s?</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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
6
fastlane/metadata/android/en-US/changelogs/302.txt
Normal 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
|
3
fastlane/metadata/android/en-US/changelogs/303.txt
Normal 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
|
4
fastlane/metadata/android/en-US/changelogs/305.txt
Normal 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+
|
2
fastlane/metadata/android/en-US/changelogs/306.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
* Disable Portrait photo showing by default, until it gets improved
|
||||
* Added a couple other performance improvements here and there
|
1
fastlane/metadata/android/en-US/changelogs/307.txt
Normal file
|
@ -0,0 +1 @@
|
|||
* Added a few more stability and performance improvements
|
4
fastlane/metadata/android/en-US/changelogs/308.txt
Normal 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
|
1
fastlane/metadata/android/en-US/changelogs/309.txt
Normal file
|
@ -0,0 +1 @@
|
|||
* Added some crashfixes
|