Merge pull request #61 from SimpleMobileTools/master

upd
This commit is contained in:
solokot 2019-12-16 17:00:41 +03:00 committed by GitHub
commit 1edcd5a4c0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
82 changed files with 996 additions and 430 deletions

3
.github/FUNDING.yml vendored Normal file
View file

@ -0,0 +1,3 @@
github: [tibbi]
patreon: tiborkaputa
custom: ["https://www.paypal.me/SimpleMobileTools", "https://www.simplemobiletools.com/donate"]

View file

@ -1,6 +1,33 @@
Changelog Changelog
========== ==========
Version 6.10.7 *(2019-12-12)*
----------------------------
* Refreshed the thumbnails list views by removing the dividers
* Reordered some top menu items for consistency
* Added a Resize button to resize images directly from the fullscreen view
* Migrate album covers at export/import settings too
* Remember the last used path and file name at exporting settings
* Fixed a glitch with empty screen at direct subfolder grouping
* Many other stability, ux and translation improvements
Version 6.10.6 *(2019-11-28)*
----------------------------
* Fixed some smaller glitches
* Added some stability and translation improvements
Version 6.10.5 *(2019-11-10)*
----------------------------
* Remember the last used pattern at batch renaming
* Allow adding an incrementing number at pattern batch renaming
* Fixed some USB file related issues
* Fixed some fullscreen glitches at using split screen
* Allow using videos as custom folder covers
* Some stability and translation improvements
Version 6.10.4 *(2019-11-05)* Version 6.10.4 *(2019-11-05)*
---------------------------- ----------------------------

View file

@ -15,8 +15,8 @@ android {
applicationId "com.simplemobiletools.gallery.pro" applicationId "com.simplemobiletools.gallery.pro"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 28 targetSdkVersion 28
versionCode 271 versionCode 275
versionName "6.10.4" versionName "6.10.7"
multiDexEnabled true multiDexEnabled true
setProperty("archivesBaseName", "gallery") setProperty("archivesBaseName", "gallery")
vectorDrawables.useSupportLibrary = true vectorDrawables.useSupportLibrary = true
@ -62,7 +62,7 @@ android {
} }
dependencies { dependencies {
implementation 'com.simplemobiletools:commons:5.19.2' implementation 'com.simplemobiletools:commons:5.20.10'
implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0' implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0'
implementation 'androidx.multidex:multidex:2.0.1' implementation 'androidx.multidex:multidex:2.0.1'
implementation 'it.sephiroth.android.exif:library:1.0.1' implementation 'it.sephiroth.android.exif:library:1.0.1'
@ -80,7 +80,7 @@ dependencies {
kapt 'com.github.bumptech.glide:compiler:4.10.0' kapt 'com.github.bumptech.glide:compiler:4.10.0'
kapt 'androidx.room:room-compiler:2.2.1' kapt 'androidx.room:room-compiler:2.2.2'
implementation 'androidx.room:room-runtime:2.2.1' implementation 'androidx.room:room-runtime:2.2.2'
annotationProcessor 'androidx.room:room-compiler:2.2.1' annotationProcessor 'androidx.room:room-compiler:2.2.2'
} }

View file

@ -145,7 +145,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
return return
} }
uri = intent.data uri = intent.data!!
if (uri.scheme != "file" && uri.scheme != "content") { if (uri.scheme != "file" && uri.scheme != "content") {
toast(R.string.unknown_file_location) toast(R.string.unknown_file_location)
finish() finish()
@ -153,9 +153,9 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
} }
if (intent.extras?.containsKey(REAL_FILE_PATH) == true) { if (intent.extras?.containsKey(REAL_FILE_PATH) == true) {
val realPath = intent.extras.getString(REAL_FILE_PATH) val realPath = intent.extras!!.getString(REAL_FILE_PATH)
uri = when { uri = when {
isPathOnOTG(realPath) -> uri isPathOnOTG(realPath!!) -> uri
realPath.startsWith("file:/") -> Uri.parse(realPath) realPath.startsWith("file:/") -> Uri.parse(realPath)
else -> Uri.fromFile(File(realPath)) else -> Uri.fromFile(File(realPath))
} }
@ -305,7 +305,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
try { try {
if (isNougatPlus()) { if (isNougatPlus()) {
inputStream = contentResolver.openInputStream(uri) inputStream = contentResolver.openInputStream(uri)
oldExif = ExifInterface(inputStream) oldExif = ExifInterface(inputStream!!)
} }
} catch (e: Exception) { } catch (e: Exception) {
} finally { } finally {
@ -317,7 +317,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
} else if (editor_draw_canvas.isVisible()) { } else if (editor_draw_canvas.isVisible()) {
val bitmap = editor_draw_canvas.getBitmap() val bitmap = editor_draw_canvas.getBitmap()
if (saveUri.scheme == "file") { if (saveUri.scheme == "file") {
SaveAsDialog(this, saveUri.path, true) { SaveAsDialog(this, saveUri.path!!, true) {
saveBitmapToFile(bitmap, it, true) saveBitmapToFile(bitmap, it, true)
} }
} else if (saveUri.scheme == "content") { } else if (saveUri.scheme == "content") {
@ -643,7 +643,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
} }
private fun applyFilter(filterItem: FilterItem) { private fun applyFilter(filterItem: FilterItem) {
val newBitmap = Bitmap.createBitmap(filterInitialBitmap) val newBitmap = Bitmap.createBitmap(filterInitialBitmap!!)
default_image_view.setImageBitmap(filterItem.filter.processFilter(newBitmap)) default_image_view.setImageBitmap(filterItem.filter.processFilter(newBitmap))
} }
@ -748,7 +748,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
if (isCropIntent) { if (isCropIntent) {
if (saveUri.scheme == "file") { if (saveUri.scheme == "file") {
saveBitmapToFile(bitmap, saveUri.path, true) saveBitmapToFile(bitmap, saveUri.path!!, true)
} else { } else {
var inputStream: InputStream? = null var inputStream: InputStream? = null
var outputStream: OutputStream? = null var outputStream: OutputStream? = null
@ -757,7 +757,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
bitmap.compress(CompressFormat.JPEG, 100, stream) bitmap.compress(CompressFormat.JPEG, 100, stream)
inputStream = ByteArrayInputStream(stream.toByteArray()) inputStream = ByteArrayInputStream(stream.toByteArray())
outputStream = contentResolver.openOutputStream(saveUri) outputStream = contentResolver.openOutputStream(saveUri)
inputStream.copyTo(outputStream) inputStream.copyTo(outputStream!!)
} finally { } finally {
inputStream?.close() inputStream?.close()
outputStream?.close() outputStream?.close()
@ -771,7 +771,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
finish() finish()
} }
} else if (saveUri.scheme == "file") { } else if (saveUri.scheme == "file") {
SaveAsDialog(this, saveUri.path, true) { SaveAsDialog(this, saveUri.path!!, true) {
saveBitmapToFile(bitmap, it, true) saveBitmapToFile(bitmap, it, true)
} }
} else if (saveUri.scheme == "content") { } else if (saveUri.scheme == "content") {

View file

@ -13,6 +13,7 @@ import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.FrameLayout import android.widget.FrameLayout
import android.widget.RelativeLayout
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.core.view.MenuItemCompat import androidx.core.view.MenuItemCompat
@ -605,6 +606,11 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
private fun setupGridLayoutManager() { private fun setupGridLayoutManager() {
val layoutManager = directories_grid.layoutManager as MyGridLayoutManager val layoutManager = directories_grid.layoutManager as MyGridLayoutManager
(directories_grid.layoutParams as RelativeLayout.LayoutParams).apply {
topMargin = 0
bottomMargin = 0
}
if (config.scrollHorizontally) { if (config.scrollHorizontally) {
layoutManager.orientation = RecyclerView.HORIZONTAL layoutManager.orientation = RecyclerView.HORIZONTAL
directories_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT) directories_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT)
@ -670,6 +676,13 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
layoutManager.spanCount = 1 layoutManager.spanCount = 1
layoutManager.orientation = RecyclerView.VERTICAL layoutManager.orientation = RecyclerView.VERTICAL
directories_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) directories_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
val smallMargin = resources.getDimension(R.dimen.small_margin).toInt()
(directories_grid.layoutParams as RelativeLayout.LayoutParams).apply {
topMargin = smallMargin
bottomMargin = smallMargin
}
mZoomListener = null mZoomListener = null
} }
@ -723,10 +736,10 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
private fun isGetContentIntent(intent: Intent) = intent.action == Intent.ACTION_GET_CONTENT && intent.type != null private fun isGetContentIntent(intent: Intent) = intent.action == Intent.ACTION_GET_CONTENT && intent.type != null
private fun isGetImageContentIntent(intent: Intent) = isGetContentIntent(intent) && private fun isGetImageContentIntent(intent: Intent) = isGetContentIntent(intent) &&
(intent.type.startsWith("image/") || intent.type == MediaStore.Images.Media.CONTENT_TYPE) (intent.type!!.startsWith("image/") || intent.type == MediaStore.Images.Media.CONTENT_TYPE)
private fun isGetVideoContentIntent(intent: Intent) = isGetContentIntent(intent) && private fun isGetVideoContentIntent(intent: Intent) = isGetContentIntent(intent) &&
(intent.type.startsWith("video/") || intent.type == MediaStore.Video.Media.CONTENT_TYPE) (intent.type!!.startsWith("video/") || intent.type == MediaStore.Video.Media.CONTENT_TYPE)
private fun isGetAnyContentIntent(intent: Intent) = isGetContentIntent(intent) && intent.type == "*/*" private fun isGetAnyContentIntent(intent: Intent) = isGetContentIntent(intent) && intent.type == "*/*"
@ -773,14 +786,14 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
} }
private fun fillExtraOutput(resultData: Intent): Uri? { private fun fillExtraOutput(resultData: Intent): Uri? {
val file = File(resultData.data.path) val file = File(resultData.data!!.path!!)
var inputStream: InputStream? = null var inputStream: InputStream? = null
var outputStream: OutputStream? = null var outputStream: OutputStream? = null
try { try {
val output = intent.extras.get(MediaStore.EXTRA_OUTPUT) as Uri val output = intent.extras!!.get(MediaStore.EXTRA_OUTPUT) as Uri
inputStream = FileInputStream(file) inputStream = FileInputStream(file)
outputStream = contentResolver.openOutputStream(output) outputStream = contentResolver.openOutputStream(output)
inputStream.copyTo(outputStream) inputStream.copyTo(outputStream!!)
} catch (e: SecurityException) { } catch (e: SecurityException) {
showErrorToast(e) showErrorToast(e)
} catch (ignored: FileNotFoundException) { } catch (ignored: FileNotFoundException) {
@ -794,8 +807,8 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
} }
private fun fillPickedPaths(resultData: Intent, resultIntent: Intent) { private fun fillPickedPaths(resultData: Intent, resultIntent: Intent) {
val paths = resultData.extras.getStringArrayList(PICKED_PATHS) val paths = resultData.extras!!.getStringArrayList(PICKED_PATHS)
val uris = paths.map { getFilePublicUri(File(it), BuildConfig.APPLICATION_ID) } as ArrayList val uris = paths!!.map { getFilePublicUri(File(it), BuildConfig.APPLICATION_ID) } as ArrayList
val clipData = ClipData("Attachment", arrayOf("image/*", "video/*"), ClipData.Item(uris.removeAt(0))) val clipData = ClipData("Attachment", arrayOf("image/*", "video/*"), ClipData.Item(uris.removeAt(0)))
uris.forEach { uris.forEach {
@ -808,8 +821,8 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
private fun fillIntentPath(resultData: Intent, resultIntent: Intent) { private fun fillIntentPath(resultData: Intent, resultIntent: Intent) {
val data = resultData.data val data = resultData.data
val path = if (data.toString().startsWith("/")) data.toString() else data.path val path = if (data.toString().startsWith("/")) data.toString() else data!!.path
val uri = getFilePublicUri(File(path), BuildConfig.APPLICATION_ID) val uri = getFilePublicUri(File(path!!), BuildConfig.APPLICATION_ID)
val type = path.getMimeType() val type = path.getMimeType()
resultIntent.setDataAndTypeAndNormalize(uri, type) resultIntent.setDataAndTypeAndNormalize(uri, type)
resultIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) resultIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
@ -854,6 +867,10 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
} }
val dirs = getSortedDirectories(newDirs) val dirs = getSortedDirectories(newDirs)
if (config.groupDirectSubfolders) {
mDirs = dirs.clone() as ArrayList<Directory>
}
var isPlaceholderVisible = dirs.isEmpty() var isPlaceholderVisible = dirs.isEmpty()
runOnUiThread { runOnUiThread {
@ -1114,7 +1131,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
} else if (it.path != config.tempFolderPath) { } else if (it.path != config.tempFolderPath) {
val children = if (isPathOnOTG(it.path)) getOTGFolderChildrenNames(it.path) else File(it.path).list()?.asList() val children = if (isPathOnOTG(it.path)) getOTGFolderChildrenNames(it.path) else File(it.path).list()?.asList()
val hasMediaFile = children?.any { val hasMediaFile = children?.any {
it?.isMediaFile() == true || (File(it).isDirectory && it?.startsWith("img_", true) == true) it?.isMediaFile() == true || (File(it!!).isDirectory && it.startsWith("img_", true))
} ?: false } ?: false
if (!hasMediaFile) { if (!hasMediaFile) {
@ -1144,7 +1161,6 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
dirs.removeAll(invalidDirs) dirs.removeAll(invalidDirs)
setupAdapter(dirs) setupAdapter(dirs)
invalidDirs.forEach { invalidDirs.forEach {
toast("invalid ${it.path}", Toast.LENGTH_LONG)
try { try {
mDirectoryDao.deleteDirPath(it.path) mDirectoryDao.deleteDirPath(it.path)
} catch (ignored: Exception) { } catch (ignored: Exception) {

View file

@ -13,6 +13,7 @@ import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.FrameLayout import android.widget.FrameLayout
import android.widget.RelativeLayout
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.core.view.MenuItemCompat import androidx.core.view.MenuItemCompat
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
@ -680,6 +681,11 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
private fun setupGridLayoutManager() { private fun setupGridLayoutManager() {
val layoutManager = media_grid.layoutManager as MyGridLayoutManager val layoutManager = media_grid.layoutManager as MyGridLayoutManager
(media_grid.layoutParams as RelativeLayout.LayoutParams).apply {
topMargin = 0
bottomMargin = 0
}
if (config.scrollHorizontally) { if (config.scrollHorizontally) {
layoutManager.orientation = RecyclerView.HORIZONTAL layoutManager.orientation = RecyclerView.HORIZONTAL
media_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT) media_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT)
@ -775,6 +781,13 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
layoutManager.spanCount = 1 layoutManager.spanCount = 1
layoutManager.orientation = RecyclerView.VERTICAL layoutManager.orientation = RecyclerView.VERTICAL
media_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) media_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
val smallMargin = resources.getDimension(R.dimen.small_margin).toInt()
(media_grid.layoutParams as RelativeLayout.LayoutParams).apply {
topMargin = smallMargin
bottomMargin = smallMargin
}
mZoomListener = null mZoomListener = null
} }

View file

@ -71,6 +71,12 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
} }
private fun checkIntent(savedInstanceState: Bundle? = null) { private fun checkIntent(savedInstanceState: Bundle? = null) {
if (intent.data == null && intent.action == Intent.ACTION_VIEW) {
startActivity(Intent(this, MainActivity::class.java))
finish()
return
}
mUri = intent.data ?: return mUri = intent.data ?: return
val uri = mUri.toString() val uri = mUri.toString()
if (uri.startsWith("content:/") && uri.contains("/storage/")) { if (uri.startsWith("content:/") && uri.contains("/storage/")) {
@ -114,10 +120,10 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
if (mUri!!.scheme == "file") { if (mUri!!.scheme == "file") {
if (filename.contains('.')) { if (filename.contains('.')) {
bottom_actions.beGone() bottom_actions.beGone()
handleLockedFolderOpening(mUri!!.path.getParentPath()) { success -> handleLockedFolderOpening(mUri!!.path!!.getParentPath()) { success ->
if (success) { if (success) {
rescanPaths(arrayListOf(mUri!!.path)) rescanPaths(arrayListOf(mUri!!.path!!))
sendViewPagerIntent(mUri!!.path) sendViewPagerIntent(mUri!!.path!!)
} }
finish() finish()
} }
@ -130,7 +136,7 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
bottom_actions.beGone() bottom_actions.beGone()
handleLockedFolderOpening(path.getParentPath()) { success -> handleLockedFolderOpening(path.getParentPath()) { success ->
if (success) { if (success) {
rescanPaths(arrayListOf(mUri!!.path)) rescanPaths(arrayListOf(mUri!!.path!!))
sendViewPagerIntent(path) sendViewPagerIntent(path)
} }
finish() finish()
@ -154,7 +160,7 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
} }
mIsVideo = type == TYPE_VIDEOS mIsVideo = type == TYPE_VIDEOS
mMedium = Medium(null, filename, mUri.toString(), mUri!!.path.getParentPath(), 0, 0, file.length(), type, 0, false, 0L) mMedium = Medium(null, filename, mUri.toString(), mUri!!.path!!.getParentPath(), 0, 0, file.length(), type, 0, false, 0L)
supportActionBar?.title = mMedium!!.name supportActionBar?.title = mMedium!!.name
bundle.putSerializable(MEDIUM, mMedium) bundle.putSerializable(MEDIUM, mMedium)
@ -272,7 +278,7 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
} }
private fun showProperties() { private fun showProperties() {
PropertiesDialog(this, mUri!!.path) PropertiesDialog(this, mUri!!.path!!)
} }
private fun isFileTypeVisible(path: String): Boolean { private fun isFileTypeVisible(path: String): Boolean {
@ -301,7 +307,7 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
private fun initBottomActionButtons() { private fun initBottomActionButtons() {
arrayListOf(bottom_favorite, bottom_delete, bottom_rotate, bottom_properties, bottom_change_orientation, bottom_slideshow, bottom_show_on_map, arrayListOf(bottom_favorite, bottom_delete, bottom_rotate, bottom_properties, bottom_change_orientation, bottom_slideshow, bottom_show_on_map,
bottom_toggle_file_visibility, bottom_rename, bottom_copy, bottom_move).forEach { bottom_toggle_file_visibility, bottom_rename, bottom_copy, bottom_move, bottom_resize).forEach {
it.beGone() it.beGone()
} }

View file

@ -63,7 +63,7 @@ class SetWallpaperActivity : SimpleActivity(), CropImageView.OnCropImageComplete
} }
private fun handleImage(intent: Intent) { private fun handleImage(intent: Intent) {
uri = intent.data uri = intent.data!!
if (uri.scheme != "file" && uri.scheme != "content") { if (uri.scheme != "file" && uri.scheme != "content") {
toast(R.string.unknown_file_location) toast(R.string.unknown_file_location)
finish() finish()

View file

@ -4,6 +4,8 @@ import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.text.TextUtils import android.text.TextUtils
import android.view.Menu import android.view.Menu
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.simplemobiletools.commons.dialogs.* import com.simplemobiletools.commons.dialogs.*
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.helpers.*
@ -16,6 +18,7 @@ import com.simplemobiletools.gallery.pro.extensions.emptyTheRecycleBin
import com.simplemobiletools.gallery.pro.extensions.galleryDB import com.simplemobiletools.gallery.pro.extensions.galleryDB
import com.simplemobiletools.gallery.pro.extensions.showRecycleBinEmptyingDialog import com.simplemobiletools.gallery.pro.extensions.showRecycleBinEmptyingDialog
import com.simplemobiletools.gallery.pro.helpers.* import com.simplemobiletools.gallery.pro.helpers.*
import com.simplemobiletools.gallery.pro.models.AlbumCover
import kotlinx.android.synthetic.main.activity_settings.* import kotlinx.android.synthetic.main.activity_settings.*
import java.io.File import java.io.File
import java.util.* import java.util.*
@ -690,9 +693,10 @@ class SettingsActivity : SimpleActivity() {
put(LAST_EDITOR_BRUSH_SIZE, config.lastEditorBrushSize) put(LAST_EDITOR_BRUSH_SIZE, config.lastEditorBrushSize)
put(LAST_CONFLICT_RESOLUTION, config.lastConflictResolution) put(LAST_CONFLICT_RESOLUTION, config.lastConflictResolution)
put(LAST_CONFLICT_APPLY_TO_ALL, config.lastConflictApplyToAll) put(LAST_CONFLICT_APPLY_TO_ALL, config.lastConflictApplyToAll)
put(ALBUM_COVERS, config.albumCovers)
} }
exportSettings(configItems, "gallery-settings.txt") exportSettings(configItems)
} }
} }
@ -812,6 +816,18 @@ class SettingsActivity : SimpleActivity() {
LAST_EDITOR_BRUSH_SIZE -> config.lastEditorBrushSize = value.toInt() LAST_EDITOR_BRUSH_SIZE -> config.lastEditorBrushSize = value.toInt()
LAST_CONFLICT_RESOLUTION -> config.lastConflictResolution = value.toInt() LAST_CONFLICT_RESOLUTION -> config.lastConflictResolution = value.toInt()
LAST_CONFLICT_APPLY_TO_ALL -> config.lastConflictApplyToAll = value.toBoolean() LAST_CONFLICT_APPLY_TO_ALL -> config.lastConflictApplyToAll = value.toBoolean()
ALBUM_COVERS -> {
val existingCovers = config.parseAlbumCovers()
val existingCoverPaths = existingCovers.map { it.path }.toMutableList() as ArrayList<String>
val listType = object : TypeToken<List<AlbumCover>>() {}.type
val covers = Gson().fromJson<ArrayList<AlbumCover>>(value.toString(), listType) ?: ArrayList(1)
covers.filter { !existingCoverPaths.contains(it.path) && getDoesFilePathExist(it.tmb) }.forEach {
existingCovers.add(it)
}
config.albumCovers = Gson().toJson(existingCovers)
}
} }
} }

View file

@ -3,6 +3,7 @@ package com.simplemobiletools.gallery.pro.activities
import android.animation.Animator import android.animation.Animator
import android.animation.ValueAnimator import android.animation.ValueAnimator
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.annotation.TargetApi
import android.app.Activity import android.app.Activity
import android.content.Intent import android.content.Intent
import android.content.pm.ActivityInfo import android.content.pm.ActivityInfo
@ -16,6 +17,7 @@ import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Icon import android.graphics.drawable.Icon
import android.media.ExifInterface import android.media.ExifInterface
import android.net.Uri import android.net.Uri
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.Handler import android.os.Handler
import android.provider.MediaStore import android.provider.MediaStore
@ -45,6 +47,7 @@ import com.simplemobiletools.gallery.pro.R
import com.simplemobiletools.gallery.pro.adapters.MyPagerAdapter import com.simplemobiletools.gallery.pro.adapters.MyPagerAdapter
import com.simplemobiletools.gallery.pro.asynctasks.GetMediaAsynctask import com.simplemobiletools.gallery.pro.asynctasks.GetMediaAsynctask
import com.simplemobiletools.gallery.pro.dialogs.DeleteWithRememberDialog import com.simplemobiletools.gallery.pro.dialogs.DeleteWithRememberDialog
import com.simplemobiletools.gallery.pro.dialogs.ResizeWithPathDialog
import com.simplemobiletools.gallery.pro.dialogs.SaveAsDialog import com.simplemobiletools.gallery.pro.dialogs.SaveAsDialog
import com.simplemobiletools.gallery.pro.dialogs.SlideshowDialog import com.simplemobiletools.gallery.pro.dialogs.SlideshowDialog
import com.simplemobiletools.gallery.pro.extensions.* import com.simplemobiletools.gallery.pro.extensions.*
@ -57,6 +60,7 @@ import com.simplemobiletools.gallery.pro.models.ThumbnailItem
import kotlinx.android.synthetic.main.activity_medium.* import kotlinx.android.synthetic.main.activity_medium.*
import kotlinx.android.synthetic.main.bottom_actions.* import kotlinx.android.synthetic.main.bottom_actions.*
import java.io.File import java.io.File
import java.io.OutputStream
import java.util.* import java.util.*
class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, ViewPagerFragment.FragmentListener { class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, ViewPagerFragment.FragmentListener {
@ -173,6 +177,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
findItem(R.id.menu_move_to).isVisible = visibleBottomActions and BOTTOM_ACTION_MOVE == 0 findItem(R.id.menu_move_to).isVisible = visibleBottomActions and BOTTOM_ACTION_MOVE == 0
findItem(R.id.menu_save_as).isVisible = rotationDegrees != 0 findItem(R.id.menu_save_as).isVisible = rotationDegrees != 0
findItem(R.id.menu_print).isVisible = currentMedium.isImage() || currentMedium.isRaw() findItem(R.id.menu_print).isVisible = currentMedium.isImage() || currentMedium.isRaw()
findItem(R.id.menu_resize).isVisible = visibleBottomActions and BOTTOM_ACTION_RESIZE == 0 && currentMedium.isImage()
findItem(R.id.menu_hide).isVisible = !currentMedium.isHidden() && visibleBottomActions and BOTTOM_ACTION_TOGGLE_VISIBILITY == 0 && !currentMedium.getIsInRecycleBin() findItem(R.id.menu_hide).isVisible = !currentMedium.isHidden() && visibleBottomActions and BOTTOM_ACTION_TOGGLE_VISIBILITY == 0 && !currentMedium.getIsInRecycleBin()
findItem(R.id.menu_unhide).isVisible = currentMedium.isHidden() && visibleBottomActions and BOTTOM_ACTION_TOGGLE_VISIBILITY == 0 && !currentMedium.getIsInRecycleBin() findItem(R.id.menu_unhide).isVisible = currentMedium.isHidden() && visibleBottomActions and BOTTOM_ACTION_TOGGLE_VISIBILITY == 0 && !currentMedium.getIsInRecycleBin()
findItem(R.id.menu_add_to_favorites).isVisible = !currentMedium.isFavorite && visibleBottomActions and BOTTOM_ACTION_TOGGLE_FAVORITE == 0 && !currentMedium.getIsInRecycleBin() findItem(R.id.menu_add_to_favorites).isVisible = !currentMedium.isFavorite && visibleBottomActions and BOTTOM_ACTION_TOGGLE_FAVORITE == 0 && !currentMedium.getIsInRecycleBin()
@ -227,12 +232,30 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
R.id.menu_default_orientation -> toggleOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) R.id.menu_default_orientation -> toggleOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
R.id.menu_save_as -> saveImageAs() R.id.menu_save_as -> saveImageAs()
R.id.menu_create_shortcut -> createShortcut() R.id.menu_create_shortcut -> createShortcut()
R.id.menu_resize -> resizeImage()
R.id.menu_settings -> launchSettings() R.id.menu_settings -> launchSettings()
else -> return super.onOptionsItemSelected(item) else -> return super.onOptionsItemSelected(item)
} }
return true return true
} }
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
if (requestCode == REQUEST_EDIT_IMAGE && resultCode == Activity.RESULT_OK && resultData != null) {
mPos = -1
mPrevHashcode = 0
refreshViewPager()
} else if (requestCode == REQUEST_SET_AS && resultCode == Activity.RESULT_OK) {
toast(R.string.wallpaper_set_successfully)
} else if (requestCode == REQUEST_VIEW_VIDEO && resultCode == Activity.RESULT_OK && resultData != null) {
if (resultData.getBooleanExtra(GO_TO_NEXT_ITEM, false)) {
goToNextItem()
} else if (resultData.getBooleanExtra(GO_TO_PREV_ITEM, false)) {
goToPrevItem()
}
}
super.onActivityResult(requestCode, resultCode, resultData)
}
private fun initViewPager() { private fun initViewPager() {
val uri = intent.data val uri = intent.data
if (uri != null) { if (uri != null) {
@ -258,7 +281,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
} }
if (intent.extras?.containsKey(REAL_FILE_PATH) == true) { if (intent.extras?.containsKey(REAL_FILE_PATH) == true) {
mPath = intent.extras.getString(REAL_FILE_PATH) mPath = intent.extras!!.getString(REAL_FILE_PATH)!!
} }
if (mPath.isEmpty()) { if (mPath.isEmpty()) {
@ -666,9 +689,14 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
val path = medium.path val path = medium.path
val drawable = resources.getDrawable(R.drawable.shortcut_image).mutate() val drawable = resources.getDrawable(R.drawable.shortcut_image).mutate()
getShortcutImage(path, drawable) { getShortcutImage(path, drawable) {
val intent = Intent(this, PhotoVideoActivity::class.java) val intent = Intent(this, ViewPagerActivity::class.java).apply {
intent.action = Intent.ACTION_VIEW putExtra(PATH, path)
intent.data = Uri.fromFile(File(path)) putExtra(SHOW_ALL, config.showAll)
putExtra(SHOW_FAVORITES, path == FAVORITES)
putExtra(SHOW_RECYCLE_BIN, path == RECYCLE_BIN)
action = Intent.ACTION_VIEW
flags = flags or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
val shortcut = ShortcutInfo.Builder(this, path) val shortcut = ShortcutInfo.Builder(this, path)
.setShortLabel(medium.name) .setShortLabel(medium.name)
@ -804,6 +832,11 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
bottom_move.setOnClickListener { bottom_move.setOnClickListener {
moveFileTo() moveFileTo()
} }
bottom_resize.beVisibleIf(visibleBottomActions and BOTTOM_ACTION_RESIZE != 0 && currentMedium?.isImage() == true)
bottom_resize.setOnClickListener {
resizeImage()
}
} }
private fun updateBottomActionIcons(medium: Medium?) { private fun updateBottomActionIcons(medium: Medium?) {
@ -894,21 +927,62 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
} }
} }
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) { @TargetApi(Build.VERSION_CODES.N)
if (requestCode == REQUEST_EDIT_IMAGE && resultCode == Activity.RESULT_OK && resultData != null) { private fun resizeImage() {
mPos = -1 val oldPath = getCurrentPath()
mPrevHashcode = 0 val originalSize = oldPath.getImageResolution() ?: return
refreshViewPager() ResizeWithPathDialog(this, originalSize, oldPath) { newSize, newPath ->
} else if (requestCode == REQUEST_SET_AS && resultCode == Activity.RESULT_OK) { ensureBackgroundThread {
toast(R.string.wallpaper_set_successfully) try {
} else if (requestCode == REQUEST_VIEW_VIDEO && resultCode == Activity.RESULT_OK && resultData != null) { var oldExif: ExifInterface? = null
if (resultData.getBooleanExtra(GO_TO_NEXT_ITEM, false)) { if (isNougatPlus()) {
goToNextItem() val inputStream = contentResolver.openInputStream(Uri.fromFile(File(oldPath)))
} else if (resultData.getBooleanExtra(GO_TO_PREV_ITEM, false)) { oldExif = ExifInterface(inputStream!!)
goToPrevItem() }
val newBitmap = Glide.with(applicationContext).asBitmap().load(oldPath).submit(newSize.x, newSize.y).get()
val newFile = File(newPath)
val newFileDirItem = FileDirItem(newPath, newPath.getFilenameFromPath())
getFileOutputStream(newFileDirItem, true) {
if (it != null) {
saveBitmap(newFile, newBitmap, it, oldExif, File(oldPath).lastModified())
} else {
toast(R.string.image_editing_failed)
}
}
} catch (e: OutOfMemoryError) {
toast(R.string.out_of_memory_error)
} catch (e: Exception) {
showErrorToast(e)
}
} }
} }
super.onActivityResult(requestCode, resultCode, resultData) }
@TargetApi(Build.VERSION_CODES.N)
private fun saveBitmap(file: File, bitmap: Bitmap, out: OutputStream, oldExif: ExifInterface?, lastModified: Long) {
try {
bitmap.compress(file.absolutePath.getCompressionFormat(), 90, out)
if (isNougatPlus()) {
val newExif = ExifInterface(file.absolutePath)
oldExif?.copyTo(newExif, false)
}
} catch (e: Exception) {
}
toast(R.string.file_saved)
val paths = arrayListOf(file.absolutePath)
rescanPaths(paths) {
fixDateTaken(paths, false)
if (config.keepLastModified) {
File(file.absolutePath).setLastModified(lastModified)
updateLastModified(file.absolutePath, lastModified)
}
}
out.close()
} }
private fun checkDeleteConfirmation() { private fun checkDeleteConfirmation() {
@ -1096,9 +1170,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
override fun fragmentClicked() { override fun fragmentClicked() {
mIsFullScreen = !mIsFullScreen mIsFullScreen = !mIsFullScreen
checkSystemUI() checkSystemUI()
if (isChromebook()) { fullscreenToggled()
fullscreenToggled()
}
} }
override fun videoEnded(): Boolean { override fun videoEnded(): Boolean {
@ -1163,7 +1235,8 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
if (bottom_actions.isVisible()) { if (bottom_actions.isVisible()) {
bottom_actions.animate().alpha(newAlpha).start() bottom_actions.animate().alpha(newAlpha).start()
arrayOf(bottom_favorite, bottom_edit, bottom_share, bottom_delete, bottom_rotate, bottom_properties, bottom_change_orientation, arrayOf(bottom_favorite, bottom_edit, bottom_share, bottom_delete, bottom_rotate, bottom_properties, bottom_change_orientation,
bottom_slideshow, bottom_show_on_map, bottom_toggle_file_visibility, bottom_rename).forEach { bottom_slideshow, bottom_show_on_map, bottom_toggle_file_visibility, bottom_rename, bottom_set_as, bottom_copy, bottom_move,
bottom_resize).forEach {
it.isClickable = !mIsFullScreen it.isClickable = !mIsFullScreen
} }
} }

View file

@ -137,6 +137,10 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList<Directo
override fun getItemKeyPosition(key: Int) = dirs.indexOfFirst { it.path.hashCode() == key } override fun getItemKeyPosition(key: Int) = dirs.indexOfFirst { it.path.hashCode() == key }
override fun onActionModeCreated() {}
override fun onActionModeDestroyed() {}
override fun onViewRecycled(holder: ViewHolder) { override fun onViewRecycled(holder: ViewHolder) {
super.onViewRecycled(holder) super.onViewRecycled(holder)
if (!activity.isDestroyed) { if (!activity.isDestroyed) {

View file

@ -39,6 +39,10 @@ class ManageFoldersAdapter(activity: BaseSimpleActivity, var folders: ArrayList<
override fun getItemKeyPosition(key: Int) = folders.indexOfFirst { it.hashCode() == key } override fun getItemKeyPosition(key: Int) = folders.indexOfFirst { it.hashCode() == key }
override fun onActionModeCreated() {}
override fun onActionModeDestroyed() {}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_manage_folder, parent) override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_manage_folder, parent)
override fun onBindViewHolder(holder: ViewHolder, position: Int) { override fun onBindViewHolder(holder: ViewHolder, position: Int) {

View file

@ -41,6 +41,10 @@ class ManageHiddenFoldersAdapter(activity: BaseSimpleActivity, var folders: Arra
override fun getItemKeyPosition(key: Int) = folders.indexOfFirst { it.hashCode() == key } override fun getItemKeyPosition(key: Int) = folders.indexOfFirst { it.hashCode() == key }
override fun onActionModeCreated() {}
override fun onActionModeDestroyed() {}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_manage_folder, parent) override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_manage_folder, parent)
override fun onBindViewHolder(holder: ViewHolder, position: Int) { override fun onBindViewHolder(holder: ViewHolder, position: Int) {

View file

@ -1,5 +1,10 @@
package com.simplemobiletools.gallery.pro.adapters package com.simplemobiletools.gallery.pro.adapters
import android.annotation.SuppressLint
import android.content.Intent
import android.content.pm.ShortcutInfo
import android.content.pm.ShortcutManager
import android.graphics.drawable.Icon
import android.os.Handler import android.os.Handler
import android.os.Looper import android.os.Looper
import android.view.Menu import android.view.Menu
@ -14,16 +19,15 @@ import com.simplemobiletools.commons.dialogs.RenameDialog
import com.simplemobiletools.commons.dialogs.RenameItemDialog import com.simplemobiletools.commons.dialogs.RenameItemDialog
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.commons.helpers.ensureBackgroundThread
import com.simplemobiletools.commons.helpers.isOreoPlus
import com.simplemobiletools.commons.models.FileDirItem import com.simplemobiletools.commons.models.FileDirItem
import com.simplemobiletools.commons.views.FastScroller import com.simplemobiletools.commons.views.FastScroller
import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.commons.views.MyRecyclerView
import com.simplemobiletools.gallery.pro.R import com.simplemobiletools.gallery.pro.R
import com.simplemobiletools.gallery.pro.activities.ViewPagerActivity
import com.simplemobiletools.gallery.pro.dialogs.DeleteWithRememberDialog import com.simplemobiletools.gallery.pro.dialogs.DeleteWithRememberDialog
import com.simplemobiletools.gallery.pro.extensions.* import com.simplemobiletools.gallery.pro.extensions.*
import com.simplemobiletools.gallery.pro.helpers.SHOW_ALL import com.simplemobiletools.gallery.pro.helpers.*
import com.simplemobiletools.gallery.pro.helpers.TYPE_GIFS
import com.simplemobiletools.gallery.pro.helpers.TYPE_RAWS
import com.simplemobiletools.gallery.pro.helpers.VIEW_TYPE_LIST
import com.simplemobiletools.gallery.pro.interfaces.MediaOperationsListener import com.simplemobiletools.gallery.pro.interfaces.MediaOperationsListener
import com.simplemobiletools.gallery.pro.models.Medium import com.simplemobiletools.gallery.pro.models.Medium
import com.simplemobiletools.gallery.pro.models.ThumbnailItem import com.simplemobiletools.gallery.pro.models.ThumbnailItem
@ -122,6 +126,7 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList<Thumbnai
findItem(R.id.cab_open_with).isVisible = isOneItemSelected findItem(R.id.cab_open_with).isVisible = isOneItemSelected
findItem(R.id.cab_confirm_selection).isVisible = isAGetIntent && allowMultiplePicks && selectedKeys.isNotEmpty() findItem(R.id.cab_confirm_selection).isVisible = isAGetIntent && allowMultiplePicks && selectedKeys.isNotEmpty()
findItem(R.id.cab_restore_recycle_bin_files).isVisible = selectedPaths.all { it.startsWith(activity.recycleBinPath) } findItem(R.id.cab_restore_recycle_bin_files).isVisible = selectedPaths.all { it.startsWith(activity.recycleBinPath) }
findItem(R.id.cab_create_shortcut).isVisible = isOreoPlus() && isOneItemSelected
checkHideBtnVisibility(this, selectedItems) checkHideBtnVisibility(this, selectedItems)
checkFavoriteBtnVisibility(this, selectedItems) checkFavoriteBtnVisibility(this, selectedItems)
@ -149,6 +154,7 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList<Thumbnai
R.id.cab_rotate_one_eighty -> rotateSelection(180) R.id.cab_rotate_one_eighty -> rotateSelection(180)
R.id.cab_copy_to -> copyMoveTo(true) R.id.cab_copy_to -> copyMoveTo(true)
R.id.cab_move_to -> moveFilesTo() R.id.cab_move_to -> moveFilesTo()
R.id.cab_create_shortcut -> createShortcut()
R.id.cab_select_all -> selectAll() R.id.cab_select_all -> selectAll()
R.id.cab_open_with -> openPath() R.id.cab_open_with -> openPath()
R.id.cab_fix_date_taken -> fixDateTaken() R.id.cab_fix_date_taken -> fixDateTaken()
@ -165,6 +171,10 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList<Thumbnai
override fun getItemKeyPosition(key: Int) = media.indexOfFirst { (it as? Medium)?.path?.hashCode() == key } override fun getItemKeyPosition(key: Int) = media.indexOfFirst { (it as? Medium)?.path?.hashCode() == key }
override fun onActionModeCreated() {}
override fun onActionModeDestroyed() {}
override fun onViewRecycled(holder: ViewHolder) { override fun onViewRecycled(holder: ViewHolder) {
super.onViewRecycled(holder) super.onViewRecycled(holder)
if (!activity.isDestroyed) { if (!activity.isDestroyed) {
@ -343,6 +353,33 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList<Thumbnai
} }
} }
@SuppressLint("NewApi")
private fun createShortcut() {
val manager = activity.getSystemService(ShortcutManager::class.java)
if (manager.isRequestPinShortcutSupported) {
val path = getSelectedPaths().first()
val drawable = resources.getDrawable(R.drawable.shortcut_image).mutate()
activity.getShortcutImage(path, drawable) {
val intent = Intent(activity, ViewPagerActivity::class.java).apply {
putExtra(PATH, path)
putExtra(SHOW_ALL, config.showAll)
putExtra(SHOW_FAVORITES, path == FAVORITES)
putExtra(SHOW_RECYCLE_BIN, path == RECYCLE_BIN)
action = Intent.ACTION_VIEW
flags = flags or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
val shortcut = ShortcutInfo.Builder(activity, path)
.setShortLabel(path.getFilenameFromPath())
.setIcon(Icon.createWithBitmap(drawable.convertToBitmap()))
.setIntent(intent)
.build()
manager.requestPinShortcut(shortcut, null)
}
}
}
private fun fixDateTaken() { private fun fixDateTaken() {
ensureBackgroundThread { ensureBackgroundThread {
activity.fixDateTaken(getSelectedPaths(), true) { activity.fixDateTaken(getSelectedPaths(), true) {

View file

@ -28,6 +28,7 @@ class ManageBottomActionsDialog(val activity: BaseSimpleActivity, val callback:
manage_bottom_actions_set_as.isChecked = actions and BOTTOM_ACTION_SET_AS != 0 manage_bottom_actions_set_as.isChecked = actions and BOTTOM_ACTION_SET_AS != 0
manage_bottom_actions_copy.isChecked = actions and BOTTOM_ACTION_COPY != 0 manage_bottom_actions_copy.isChecked = actions and BOTTOM_ACTION_COPY != 0
manage_bottom_actions_move.isChecked = actions and BOTTOM_ACTION_MOVE != 0 manage_bottom_actions_move.isChecked = actions and BOTTOM_ACTION_MOVE != 0
manage_bottom_actions_resize.isChecked = actions and BOTTOM_ACTION_RESIZE != 0
} }
AlertDialog.Builder(activity) AlertDialog.Builder(activity)
@ -69,6 +70,8 @@ class ManageBottomActionsDialog(val activity: BaseSimpleActivity, val callback:
result += BOTTOM_ACTION_COPY result += BOTTOM_ACTION_COPY
if (manage_bottom_actions_move.isChecked) if (manage_bottom_actions_move.isChecked)
result += BOTTOM_ACTION_MOVE result += BOTTOM_ACTION_MOVE
if (manage_bottom_actions_resize.isChecked)
result += BOTTOM_ACTION_RESIZE
} }
activity.config.visibleBottomActions = result activity.config.visibleBottomActions = result

View file

@ -40,7 +40,7 @@ class PickMediumDialog(val activity: BaseSimpleActivity, val path: String, val c
} }
activity.getCachedMedia(path) { activity.getCachedMedia(path) {
val media = it.filter { it is Medium && !it.isVideo() } as ArrayList val media = it.filter { it is Medium } as ArrayList
if (media.isNotEmpty()) { if (media.isNotEmpty()) {
activity.runOnUiThread { activity.runOnUiThread {
gotMedia(media) gotMedia(media)
@ -48,7 +48,7 @@ class PickMediumDialog(val activity: BaseSimpleActivity, val path: String, val c
} }
} }
GetMediaAsynctask(activity, path, true, false, false) { GetMediaAsynctask(activity, path, false, false, false) {
gotMedia(it) gotMedia(it)
}.execute() }.execute()
} }

View file

@ -0,0 +1,125 @@
package com.simplemobiletools.gallery.pro.dialogs
import android.graphics.Point
import android.widget.EditText
import androidx.appcompat.app.AlertDialog
import com.simplemobiletools.commons.activities.BaseSimpleActivity
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.dialogs.FilePickerDialog
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.gallery.pro.R
import com.simplemobiletools.gallery.pro.extensions.config
import kotlinx.android.synthetic.main.dialog_resize_image_with_path.view.*
class ResizeWithPathDialog(val activity: BaseSimpleActivity, val size: Point, val path: String, val callback: (newSize: Point, newPath: String) -> Unit) {
init {
var realPath = path.getParentPath()
val view = activity.layoutInflater.inflate(R.layout.dialog_resize_image_with_path, null).apply {
image_path.text = "${activity.humanizePath(realPath).trimEnd('/')}/"
val fullName = path.getFilenameFromPath()
val dotAt = fullName.lastIndexOf(".")
var name = fullName
if (dotAt > 0) {
name = fullName.substring(0, dotAt)
val extension = fullName.substring(dotAt + 1)
image_extension.setText(extension)
}
image_name.setText(name)
image_path.setOnClickListener {
FilePickerDialog(activity, realPath, false, activity.config.shouldShowHidden, true, true) {
image_path.text = activity.humanizePath(it)
realPath = it
}
}
}
val widthView = view.image_width
val heightView = view.image_height
widthView.setText(size.x.toString())
heightView.setText(size.y.toString())
val ratio = size.x / size.y.toFloat()
widthView.onTextChangeListener {
if (widthView.hasFocus()) {
var width = getViewValue(widthView)
if (width > size.x) {
widthView.setText(size.x.toString())
width = size.x
}
heightView.setText((width / ratio).toInt().toString())
}
}
heightView.onTextChangeListener {
if (heightView.hasFocus()) {
var height = getViewValue(heightView)
if (height > size.y) {
heightView.setText(size.y.toString())
height = size.y
}
widthView.setText((height * ratio).toInt().toString())
}
}
AlertDialog.Builder(activity)
.setPositiveButton(R.string.ok, null)
.setNegativeButton(R.string.cancel, null)
.create().apply {
activity.setupDialogStuff(view, this) {
showKeyboard(view.image_width)
getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
val width = getViewValue(widthView)
val height = getViewValue(heightView)
if (width <= 0 || height <= 0) {
activity.toast(R.string.invalid_values)
return@setOnClickListener
}
val newSize = Point(getViewValue(widthView), getViewValue(heightView))
val filename = view.image_name.value
val extension = view.image_extension.value
if (filename.isEmpty()) {
activity.toast(R.string.filename_cannot_be_empty)
return@setOnClickListener
}
if (extension.isEmpty()) {
activity.toast(R.string.extension_cannot_be_empty)
return@setOnClickListener
}
val newFilename = "$filename.$extension"
val newPath = "${realPath.trimEnd('/')}/$newFilename"
if (!newFilename.isAValidFilename()) {
activity.toast(R.string.filename_invalid_characters)
return@setOnClickListener
}
if (activity.getDoesFilePathExist(newPath)) {
val title = String.format(activity.getString(R.string.file_already_exists_overwrite), newFilename)
ConfirmationDialog(activity, title) {
callback(newSize, newPath)
dismiss()
}
} else {
callback(newSize, newPath)
dismiss()
}
}
}
}
}
private fun getViewValue(view: EditText): Int {
val textValue = view.value
return if (textValue.isEmpty()) 0 else textValue.toInt()
}
}

View file

@ -237,12 +237,12 @@ fun BaseSimpleActivity.movePathsInRecycleBin(paths: ArrayList<String>, mediumDao
try { try {
val destination = "$recycleBinPath/$source" val destination = "$recycleBinPath/$source"
val fileDocument = getSomeDocumentFile(source) val fileDocument = getSomeDocumentFile(source)
inputStream = applicationContext.contentResolver.openInputStream(fileDocument?.uri) inputStream = applicationContext.contentResolver.openInputStream(fileDocument?.uri!!)
out = getFileOutputStreamSync(destination, source.getMimeType()) out = getFileOutputStreamSync(destination, source.getMimeType())
var copiedSize = 0L var copiedSize = 0L
val buffer = ByteArray(DEFAULT_BUFFER_SIZE) val buffer = ByteArray(DEFAULT_BUFFER_SIZE)
var bytes = inputStream.read(buffer) var bytes = inputStream!!.read(buffer)
while (bytes >= 0) { while (bytes >= 0) {
out!!.write(buffer, 0, bytes) out!!.write(buffer, 0, bytes)
copiedSize += bytes copiedSize += bytes
@ -612,7 +612,7 @@ fun Activity.getShortcutImage(tmb: String, drawable: Drawable, callback: () -> U
fun Activity.showFileOnMap(path: String) { fun Activity.showFileOnMap(path: String) {
val exif = try { val exif = try {
if (path.startsWith("content://") && isNougatPlus()) { if (path.startsWith("content://") && isNougatPlus()) {
ExifInterface(contentResolver.openInputStream(Uri.parse(path))) ExifInterface(contentResolver.openInputStream(Uri.parse(path))!!)
} else { } else {
ExifInterface(path) ExifInterface(path)
} }

View file

@ -251,7 +251,7 @@ fun Context.getDirectParentSubfolders(dirs: ArrayList<Directory>, currentPathPre
// /storage/emulated/0/Pictures/Screenshots, // /storage/emulated/0/Pictures/Screenshots,
// but /storage/emulated/0/Pictures is empty, still Pictures with the first folders thumbnails and proper other info // but /storage/emulated/0/Pictures is empty, still Pictures with the first folders thumbnails and proper other info
val parent = File(path).parent val parent = File(path).parent
if (!folders.contains(parent) && dirs.none { it.path == parent }) { if (parent != null && !folders.contains(parent) && dirs.none { it.path == parent }) {
currentPaths.add(parent) currentPaths.add(parent)
val isSortingAscending = config.sorting and SORT_DESCENDING == 0 val isSortingAscending = config.sorting and SORT_DESCENDING == 0
val subDirs = dirs.filter { File(it.path).parent.equals(File(path).parent, true) } as ArrayList<Directory> val subDirs = dirs.filter { File(it.path).parent.equals(File(path).parent, true) } as ArrayList<Directory>
@ -595,7 +595,7 @@ fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly:
it.name = if (it.path.doesThisOrParentHaveNoMedia() && !it.path.isThisOrParentIncluded(includedPaths)) { it.name = if (it.path.doesThisOrParentHaveNoMedia() && !it.path.isThisOrParentIncluded(includedPaths)) {
"${it.name.removeSuffix(hiddenString).trim()} $hiddenString" "${it.name.removeSuffix(hiddenString).trim()} $hiddenString"
} else { } else {
it.name it.name.removeSuffix(hiddenString).trim()
} }
} }

View file

@ -771,7 +771,7 @@ class PhotoFragment : ViewPagerFragment() {
this.mIsFullscreen = isFullscreen this.mIsFullscreen = isFullscreen
mView.apply { mView.apply {
photo_details.apply { photo_details.apply {
if (mStoredShowExtendedDetails && isVisible()) { if (mStoredShowExtendedDetails && isVisible() && context != null && resources != null) {
animate().y(getExtendedDetailsY(height)) animate().y(getExtendedDetailsY(height))
if (mStoredHideExtendedDetails) { if (mStoredHideExtendedDetails) {

View file

@ -460,7 +460,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S
mTimeHolder.animate().alpha(newAlpha).start() mTimeHolder.animate().alpha(newAlpha).start()
mView.video_details.apply { mView.video_details.apply {
if (mStoredShowExtendedDetails && isVisible()) { if (mStoredShowExtendedDetails && isVisible() && context != null && resources != null) {
animate().y(getExtendedDetailsY(height)) animate().y(getExtendedDetailsY(height))
if (mStoredHideExtendedDetails) { if (mStoredHideExtendedDetails) {

View file

@ -81,7 +81,7 @@ abstract class ViewPagerFragment : Fragment() {
return details.toString().trim() return details.toString().trim()
} }
fun getPathToLoad(medium: Medium) = if (context!!.isPathOnOTG(medium.path)) medium.path.getOTGPublicPath(context!!) else medium.path fun getPathToLoad(medium: Medium) = if (context?.isPathOnOTG(medium.path) == true) medium.path.getOTGPublicPath(context!!) else medium.path
private fun getFileLastModified(file: File): String { private fun getFileLastModified(file: File): String {
val projection = arrayOf(MediaStore.Images.Media.DATE_MODIFIED) val projection = arrayOf(MediaStore.Images.Media.DATE_MODIFIED)
@ -102,7 +102,12 @@ abstract class ViewPagerFragment : Fragment() {
private fun getLatLonAltitude(path: String): String { private fun getLatLonAltitude(path: String): String {
var result = "" var result = ""
val exif = ExifInterface(path) val exif = try {
ExifInterface(path)
} catch (e: Exception) {
return ""
}
val latLon = FloatArray(2) val latLon = FloatArray(2)
if (exif.getLatLong(latLon)) { if (exif.getLatLong(latLon)) {

View file

@ -94,7 +94,7 @@ class Config(context: Context) : BaseConfig(context) {
set(isThirdPartyIntent) = prefs.edit().putBoolean(IS_THIRD_PARTY_INTENT, isThirdPartyIntent).apply() set(isThirdPartyIntent) = prefs.edit().putBoolean(IS_THIRD_PARTY_INTENT, isThirdPartyIntent).apply()
var pinnedFolders: Set<String> var pinnedFolders: Set<String>
get() = prefs.getStringSet(PINNED_FOLDERS, HashSet<String>()) get() = prefs.getStringSet(PINNED_FOLDERS, HashSet<String>())!!
set(pinnedFolders) = prefs.edit().putStringSet(PINNED_FOLDERS, pinnedFolders).apply() set(pinnedFolders) = prefs.edit().putStringSet(PINNED_FOLDERS, pinnedFolders).apply()
var showAll: Boolean var showAll: Boolean
@ -133,7 +133,7 @@ class Config(context: Context) : BaseConfig(context) {
} }
var excludedFolders: MutableSet<String> var excludedFolders: MutableSet<String>
get() = prefs.getStringSet(EXCLUDED_FOLDERS, HashSet()) get() = prefs.getStringSet(EXCLUDED_FOLDERS, HashSet())!!
set(excludedFolders) = prefs.edit().remove(EXCLUDED_FOLDERS).putStringSet(EXCLUDED_FOLDERS, excludedFolders).apply() set(excludedFolders) = prefs.edit().remove(EXCLUDED_FOLDERS).putStringSet(EXCLUDED_FOLDERS, excludedFolders).apply()
fun addIncludedFolder(path: String) { fun addIncludedFolder(path: String) {
@ -155,7 +155,7 @@ class Config(context: Context) : BaseConfig(context) {
} }
var includedFolders: MutableSet<String> var includedFolders: MutableSet<String>
get() = prefs.getStringSet(INCLUDED_FOLDERS, HashSet<String>()) get() = prefs.getStringSet(INCLUDED_FOLDERS, HashSet<String>())!!
set(includedFolders) = prefs.edit().remove(INCLUDED_FOLDERS).putStringSet(INCLUDED_FOLDERS, includedFolders).apply() set(includedFolders) = prefs.edit().remove(INCLUDED_FOLDERS).putStringSet(INCLUDED_FOLDERS, includedFolders).apply()
var autoplayVideos: Boolean var autoplayVideos: Boolean
@ -263,7 +263,7 @@ class Config(context: Context) : BaseConfig(context) {
else R.integer.media_columns_vertical_scroll) else R.integer.media_columns_vertical_scroll)
var albumCovers: String var albumCovers: String
get() = prefs.getString(ALBUM_COVERS, "") get() = prefs.getString(ALBUM_COVERS, "")!!
set(albumCovers) = prefs.edit().putString(ALBUM_COVERS, albumCovers).apply() set(albumCovers) = prefs.edit().putString(ALBUM_COVERS, albumCovers).apply()
fun parseAlbumCovers(): ArrayList<AlbumCover> { fun parseAlbumCovers(): ArrayList<AlbumCover> {
@ -320,7 +320,7 @@ class Config(context: Context) : BaseConfig(context) {
set(loopSlideshow) = prefs.edit().putBoolean(SLIDESHOW_LOOP, loopSlideshow).apply() set(loopSlideshow) = prefs.edit().putBoolean(SLIDESHOW_LOOP, loopSlideshow).apply()
var tempFolderPath: String var tempFolderPath: String
get() = prefs.getString(TEMP_FOLDER_PATH, "") get() = prefs.getString(TEMP_FOLDER_PATH, "")!!
set(tempFolderPath) = prefs.edit().putString(TEMP_FOLDER_PATH, tempFolderPath).apply() set(tempFolderPath) = prefs.edit().putString(TEMP_FOLDER_PATH, tempFolderPath).apply()
var viewTypeFolders: Int var viewTypeFolders: Int
@ -348,7 +348,7 @@ class Config(context: Context) : BaseConfig(context) {
set(wasNewAppShown) = prefs.edit().putBoolean(WAS_NEW_APP_SHOWN, wasNewAppShown).apply() set(wasNewAppShown) = prefs.edit().putBoolean(WAS_NEW_APP_SHOWN, wasNewAppShown).apply()
var lastFilepickerPath: String var lastFilepickerPath: String
get() = prefs.getString(LAST_FILEPICKER_PATH, "") get() = prefs.getString(LAST_FILEPICKER_PATH, "")!!
set(lastFilepickerPath) = prefs.edit().putString(LAST_FILEPICKER_PATH, lastFilepickerPath).apply() set(lastFilepickerPath) = prefs.edit().putString(LAST_FILEPICKER_PATH, lastFilepickerPath).apply()
var tempSkipDeleteConfirmation: Boolean var tempSkipDeleteConfirmation: Boolean
@ -412,7 +412,7 @@ class Config(context: Context) : BaseConfig(context) {
// if a user hides a folder, then enables temporary hidden folder displaying, make sure we show it properly // if a user hides a folder, then enables temporary hidden folder displaying, make sure we show it properly
var everShownFolders: Set<String> var everShownFolders: Set<String>
get() = prefs.getStringSet(EVER_SHOWN_FOLDERS, getEverShownFolders()) get() = prefs.getStringSet(EVER_SHOWN_FOLDERS, getEverShownFolders())!!
set(everShownFolders) = prefs.edit().putStringSet(EVER_SHOWN_FOLDERS, everShownFolders).apply() set(everShownFolders) = prefs.edit().putStringSet(EVER_SHOWN_FOLDERS, everShownFolders).apply()
private fun getEverShownFolders() = hashSetOf( private fun getEverShownFolders() = hashSetOf(

View file

@ -195,6 +195,7 @@ const val BOTTOM_ACTION_RENAME = 1024
const val BOTTOM_ACTION_SET_AS = 2048 const val BOTTOM_ACTION_SET_AS = 2048
const val BOTTOM_ACTION_COPY = 4096 const val BOTTOM_ACTION_COPY = 4096
const val BOTTOM_ACTION_MOVE = 8192 const val BOTTOM_ACTION_MOVE = 8192
const val BOTTOM_ACTION_RESIZE = 16384
const val DEFAULT_BOTTOM_ACTIONS = BOTTOM_ACTION_TOGGLE_FAVORITE or BOTTOM_ACTION_EDIT or BOTTOM_ACTION_SHARE or BOTTOM_ACTION_DELETE const val DEFAULT_BOTTOM_ACTIONS = BOTTOM_ACTION_TOGGLE_FAVORITE or BOTTOM_ACTION_EDIT or BOTTOM_ACTION_SHARE or BOTTOM_ACTION_DELETE

View file

@ -61,7 +61,7 @@ class MediaFetcher(val context: Context) {
val selection = "${getSelectionQuery(filterMedia)} ${MediaStore.Images.ImageColumns.BUCKET_ID} IS NOT NULL) GROUP BY (${MediaStore.Images.ImageColumns.BUCKET_ID}" val selection = "${getSelectionQuery(filterMedia)} ${MediaStore.Images.ImageColumns.BUCKET_ID} IS NOT NULL) GROUP BY (${MediaStore.Images.ImageColumns.BUCKET_ID}"
val selectionArgs = getSelectionArgsQuery(filterMedia).toTypedArray() val selectionArgs = getSelectionArgsQuery(filterMedia).toTypedArray()
val cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null) val cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
folders.addAll(parseCursor(cursor)) folders.addAll(parseCursor(cursor!!))
val config = context.config val config = context.config
val shouldShowHidden = config.shouldShowHidden val shouldShowHidden = config.shouldShowHidden

View file

@ -213,10 +213,25 @@
android:padding="@dimen/medium_margin" android:padding="@dimen/medium_margin"
android:src="@drawable/ic_move" android:src="@drawable/ic_move"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toStartOf="@+id/bottom_resize"
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/bottom_copy" app:layout_constraintStart_toEndOf="@+id/bottom_copy"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0"/> app:layout_constraintVertical_bias="0.0"/>
<ImageView
android:id="@+id/bottom_resize"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/resize"
android:padding="@dimen/medium_margin"
android:src="@drawable/ic_minimize"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/bottom_move"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0"/>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -126,5 +126,13 @@
android:paddingBottom="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin"
android:text="@string/move"/> android:text="@string/move"/>
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/manage_bottom_actions_resize"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/activity_margin"
android:paddingBottom="@dimen/activity_margin"
android:text="@string/resize"/>
</LinearLayout> </LinearLayout>
</ScrollView> </ScrollView>

View file

@ -0,0 +1,98 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/resize_image_with_path_holder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/image_width_label"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="@string/width"
android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.commons.views.MyEditText
android:id="@+id/image_width"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_below="@+id/image_width_label"
android:inputType="number"
android:maxLength="6"
android:maxLines="1"
android:textCursorDrawable="@null"
android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/image_height_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="50dp"
android:layout_toEndOf="@+id/image_width_label"
android:text="@string/height"
android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.commons.views.MyEditText
android:id="@+id/image_height"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_below="@+id/image_width_label"
android:layout_alignStart="@+id/image_height_label"
android:inputType="number"
android:maxLength="6"
android:maxLines="1"
android:textCursorDrawable="@null"
android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/image_path_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/image_height"
android:layout_marginTop="@dimen/activity_margin"
android:text="@string/path"
android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/image_path"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/image_path_label"
android:layout_marginStart="@dimen/activity_margin"
android:layout_marginBottom="@dimen/activity_margin"
android:paddingTop="@dimen/small_margin"
android:paddingEnd="@dimen/small_margin"
android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.commons.views.MyEditText
android:id="@+id/image_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/image_path"
android:layout_marginBottom="@dimen/activity_margin"
android:singleLine="true"
android:textCursorDrawable="@null"
android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/image_extension_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/image_name"
android:text="@string/extension"
android:textSize="@dimen/normal_text_size" />
<com.simplemobiletools.commons.views.MyEditText
android:id="@+id/image_extension"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/image_extension_label"
android:layout_marginBottom="@dimen/activity_margin"
android:singleLine="true"
android:textCursorDrawable="@null"
android:textSize="@dimen/normal_text_size" />
</RelativeLayout>

View file

@ -4,10 +4,12 @@
android:id="@+id/dir_holder" android:id="@+id/dir_holder"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true" android:clickable="true"
android:focusable="true" android:focusable="true"
android:paddingStart="@dimen/small_margin" android:paddingStart="@dimen/medium_margin"
android:paddingTop="@dimen/small_margin"> android:paddingTop="@dimen/small_margin"
android:paddingBottom="@dimen/small_margin">
<com.simplemobiletools.gallery.pro.views.MySquareImageView <com.simplemobiletools.gallery.pro.views.MySquareImageView
android:id="@+id/dir_thumbnail" android:id="@+id/dir_thumbnail"
@ -35,7 +37,8 @@
android:layout_height="@dimen/selection_check_size" android:layout_height="@dimen/selection_check_size"
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_margin="@dimen/small_margin" android:layout_marginTop="@dimen/small_margin"
android:layout_marginEnd="@dimen/medium_margin"
android:background="@drawable/circle_background" android:background="@drawable/circle_background"
android:contentDescription="@null" android:contentDescription="@null"
android:padding="@dimen/tiny_margin" android:padding="@dimen/tiny_margin"
@ -49,8 +52,8 @@
android:layout_toEndOf="@+id/dir_thumbnail" android:layout_toEndOf="@+id/dir_thumbnail"
android:ellipsize="end" android:ellipsize="end"
android:maxLines="1" android:maxLines="1"
android:paddingLeft="6dp" android:paddingStart="@dimen/medium_margin"
android:paddingRight="6dp" android:paddingEnd="@dimen/medium_margin"
android:textColor="@android:color/white" android:textColor="@android:color/white"
android:textSize="@dimen/bigger_text_size"/> android:textSize="@dimen/bigger_text_size"/>
@ -64,7 +67,8 @@
android:alpha="0.4" android:alpha="0.4"
android:ellipsize="end" android:ellipsize="end"
android:maxLines="1" android:maxLines="1"
android:paddingStart="6dp" android:paddingStart="@dimen/medium_margin"
android:paddingEnd="@dimen/medium_margin"
android:textColor="@android:color/white" android:textColor="@android:color/white"
android:textSize="@dimen/smaller_text_size"/> android:textSize="@dimen/smaller_text_size"/>
@ -84,7 +88,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
android:layout_marginEnd="@dimen/small_margin" android:layout_marginEnd="@dimen/medium_margin"
android:gravity="end" android:gravity="end"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingBottom="@dimen/tiny_margin"> android:paddingBottom="@dimen/tiny_margin">
@ -106,15 +110,6 @@
android:paddingBottom="@dimen/small_margin" android:paddingBottom="@dimen/small_margin"
android:src="@drawable/ic_pin" android:src="@drawable/ic_pin"
android:visibility="gone"/> android:visibility="gone"/>
</LinearLayout> </LinearLayout>
<TextView
android:id="@+id/dir_list_divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_alignBottom="@+id/dir_thumbnail"
android:layout_marginTop="2dp"
android:layout_toEndOf="@+id/dir_thumbnail"
android:background="@drawable/divider"/>
</RelativeLayout> </RelativeLayout>

View file

@ -5,10 +5,12 @@
android:id="@+id/media_item_holder" android:id="@+id/media_item_holder"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true" android:clickable="true"
android:focusable="true" android:focusable="true"
android:paddingStart="@dimen/small_margin" android:paddingStart="@dimen/medium_margin"
android:paddingTop="@dimen/small_margin"> android:paddingTop="@dimen/small_margin"
android:paddingBottom="@dimen/small_margin">
<com.simplemobiletools.gallery.pro.views.MySquareImageView <com.simplemobiletools.gallery.pro.views.MySquareImageView
android:id="@+id/medium_thumbnail" android:id="@+id/medium_thumbnail"
@ -21,9 +23,10 @@
android:layout_height="@dimen/selection_check_size" android:layout_height="@dimen/selection_check_size"
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:contentDescription="@null" android:layout_marginTop="@dimen/small_margin"
android:layout_margin="@dimen/small_margin" android:layout_marginEnd="@dimen/medium_margin"
android:background="@drawable/circle_background" android:background="@drawable/circle_background"
android:contentDescription="@null"
android:padding="@dimen/tiny_margin" android:padding="@dimen/tiny_margin"
android:src="@drawable/ic_check_vector" android:src="@drawable/ic_check_vector"
android:visibility="gone"/> android:visibility="gone"/>
@ -38,7 +41,7 @@
android:ellipsize="end" android:ellipsize="end"
android:gravity="center_vertical" android:gravity="center_vertical"
android:maxLines="3" android:maxLines="3"
android:paddingStart="6dp" android:paddingStart="@dimen/medium_margin"
android:paddingEnd="@dimen/normal_margin" android:paddingEnd="@dimen/normal_margin"
android:textColor="@android:color/white" android:textColor="@android:color/white"
android:textSize="@dimen/bigger_text_size" android:textSize="@dimen/bigger_text_size"
@ -62,7 +65,7 @@
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
android:layout_marginEnd="@dimen/small_margin" android:layout_marginEnd="@dimen/small_margin"
android:paddingBottom="6dp" android:paddingBottom="@dimen/medium_margin"
android:paddingEnd="@dimen/small_margin" android:paddingEnd="@dimen/small_margin"
android:fontFamily="sans-serif-medium" android:fontFamily="sans-serif-medium"
android:shadowColor="@color/default_background_color" android:shadowColor="@color/default_background_color"
@ -77,7 +80,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
android:layout_marginBottom="6dp" android:layout_marginBottom="@dimen/medium_margin"
android:layout_toStartOf="@+id/play_outline" android:layout_toStartOf="@+id/play_outline"
android:paddingLeft="@dimen/small_margin" android:paddingLeft="@dimen/small_margin"
android:paddingRight="@dimen/small_margin" android:paddingRight="@dimen/small_margin"
@ -86,13 +89,4 @@
android:textSize="@dimen/normal_text_size" android:textSize="@dimen/normal_text_size"
tools:text="00:05"/> tools:text="00:05"/>
<TextView
android:id="@+id/dir_list_divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_alignBottom="@+id/medium_thumbnail"
android:layout_marginTop="2dp"
android:layout_toEndOf="@+id/medium_thumbnail"
android:background="@drawable/divider"/>
</RelativeLayout> </RelativeLayout>

View file

@ -36,6 +36,18 @@
android:icon="@drawable/ic_unhide_vector" android:icon="@drawable/ic_unhide_vector"
android:title="@string/unhide_folder" android:title="@string/unhide_folder"
app:showAsAction="ifRoom"/> app:showAsAction="ifRoom"/>
<item
android:id="@+id/cab_copy_to"
android:title="@string/copy_to"
app:showAsAction="never"/>
<item
android:id="@+id/cab_move_to"
android:title="@string/move_to"
app:showAsAction="never"/>
<item
android:id="@+id/cab_create_shortcut"
android:title="@string/create_shortcut"
app:showAsAction="never"/>
<item <item
android:id="@+id/cab_empty_recycle_bin" android:id="@+id/cab_empty_recycle_bin"
android:title="@string/empty_recycle_bin" android:title="@string/empty_recycle_bin"
@ -56,15 +68,6 @@
android:id="@+id/cab_unlock" android:id="@+id/cab_unlock"
android:title="@string/unlock_folder" android:title="@string/unlock_folder"
app:showAsAction="never"/> app:showAsAction="never"/>
<item
android:id="@+id/cab_select_all"
android:icon="@drawable/ic_select_all_vector"
android:title="@string/select_all"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/cab_create_shortcut"
android:title="@string/create_shortcut"
app:showAsAction="never"/>
<item <item
android:id="@+id/cab_change_cover_image" android:id="@+id/cab_change_cover_image"
android:title="@string/change_cover_image" android:title="@string/change_cover_image"
@ -79,11 +82,8 @@
</menu> </menu>
</item> </item>
<item <item
android:id="@+id/cab_copy_to" android:id="@+id/cab_select_all"
android:title="@string/copy_to" android:icon="@drawable/ic_select_all_vector"
app:showAsAction="never"/> android:title="@string/select_all"
<item app:showAsAction="ifRoom"/>
android:id="@+id/cab_move_to"
android:title="@string/move_to"
app:showAsAction="never"/>
</menu> </menu>

View file

@ -53,16 +53,31 @@
android:icon="@drawable/ic_unhide_vector" android:icon="@drawable/ic_unhide_vector"
android:title="@string/unhide" android:title="@string/unhide"
app:showAsAction="ifRoom"/> app:showAsAction="ifRoom"/>
<item
android:id="@+id/cab_copy_to"
android:title="@string/copy_to"
app:showAsAction="never"/>
<item
android:id="@+id/cab_move_to"
android:title="@string/move_to"
app:showAsAction="never"/>
<item
android:id="@+id/cab_create_shortcut"
android:title="@string/create_shortcut"
app:showAsAction="never"/>
<item
android:id="@+id/cab_open_with"
android:title="@string/open_with"
app:showAsAction="never"/>
<item
android:id="@+id/cab_set_as"
android:title="@string/set_as"
app:showAsAction="never"/>
<item <item
android:id="@+id/cab_edit" android:id="@+id/cab_edit"
android:icon="@drawable/ic_edit_vector" android:icon="@drawable/ic_edit_vector"
android:title="@string/edit" android:title="@string/edit"
app:showAsAction="ifRoom"/> app:showAsAction="ifRoom"/>
<item
android:id="@+id/cab_select_all"
android:icon="@drawable/ic_select_all_vector"
android:title="@string/select_all"
app:showAsAction="ifRoom"/>
<item <item
android:id="@+id/cab_add_to_favorites" android:id="@+id/cab_add_to_favorites"
android:icon="@drawable/ic_star_off_vector" android:icon="@drawable/ic_star_off_vector"
@ -82,19 +97,8 @@
android:title="@string/fix_date_taken" android:title="@string/fix_date_taken"
app:showAsAction="never"/> app:showAsAction="never"/>
<item <item
android:id="@+id/cab_open_with" android:id="@+id/cab_select_all"
android:title="@string/open_with" android:icon="@drawable/ic_select_all_vector"
app:showAsAction="never"/> android:title="@string/select_all"
<item app:showAsAction="ifRoom"/>
android:id="@+id/cab_set_as"
android:title="@string/set_as"
app:showAsAction="never"/>
<item
android:id="@+id/cab_copy_to"
android:title="@string/copy_to"
app:showAsAction="never"/>
<item
android:id="@+id/cab_move_to"
android:title="@string/move_to"
app:showAsAction="never"/>
</menu> </menu>

View file

@ -26,10 +26,6 @@
android:id="@+id/change_view_type" android:id="@+id/change_view_type"
android:title="@string/change_view_type" android:title="@string/change_view_type"
app:showAsAction="never"/> app:showAsAction="never"/>
<item
android:id="@+id/show_all"
android:title="@string/show_all"
app:showAsAction="never"/>
<item <item
android:id="@+id/temporarily_show_hidden" android:id="@+id/temporarily_show_hidden"
android:title="@string/temporarily_show_hidden" android:title="@string/temporarily_show_hidden"
@ -38,6 +34,10 @@
android:id="@+id/stop_showing_hidden" android:id="@+id/stop_showing_hidden"
android:title="@string/stop_showing_hidden" android:title="@string/stop_showing_hidden"
app:showAsAction="never"/> app:showAsAction="never"/>
<item
android:id="@+id/show_all"
android:title="@string/show_all"
app:showAsAction="never"/>
<item <item
android:id="@+id/show_the_recycle_bin" android:id="@+id/show_the_recycle_bin"
android:title="@string/show_the_recycle_bin" android:title="@string/show_the_recycle_bin"

View file

@ -22,6 +22,18 @@
android:icon="@drawable/ic_filter_vector" android:icon="@drawable/ic_filter_vector"
android:title="@string/filter_media" android:title="@string/filter_media"
app:showAsAction="ifRoom"/> app:showAsAction="ifRoom"/>
<item
android:id="@+id/change_view_type"
android:title="@string/change_view_type"
app:showAsAction="never"/>
<item
android:id="@+id/temporarily_show_hidden"
android:title="@string/temporarily_show_hidden"
app:showAsAction="never"/>
<item
android:id="@+id/stop_showing_hidden"
android:title="@string/stop_showing_hidden"
app:showAsAction="never"/>
<item <item
android:id="@+id/empty_recycle_bin" android:id="@+id/empty_recycle_bin"
android:title="@string/empty_recycle_bin" android:title="@string/empty_recycle_bin"
@ -47,10 +59,6 @@
android:id="@+id/group" android:id="@+id/group"
android:title="@string/group_by" android:title="@string/group_by"
app:showAsAction="never"/> app:showAsAction="never"/>
<item
android:id="@+id/change_view_type"
android:title="@string/change_view_type"
app:showAsAction="never"/>
<item <item
android:id="@+id/hide_folder" android:id="@+id/hide_folder"
android:title="@string/hide_folder" android:title="@string/hide_folder"
@ -67,14 +75,6 @@
android:id="@+id/create_new_folder" android:id="@+id/create_new_folder"
android:title="@string/create_new_folder" android:title="@string/create_new_folder"
app:showAsAction="never"/> app:showAsAction="never"/>
<item
android:id="@+id/temporarily_show_hidden"
android:title="@string/temporarily_show_hidden"
app:showAsAction="never"/>
<item
android:id="@+id/stop_showing_hidden"
android:title="@string/stop_showing_hidden"
app:showAsAction="never"/>
<item <item
android:id="@+id/increase_column_count" android:id="@+id/increase_column_count"
android:title="@string/increase_column_count" android:title="@string/increase_column_count"

View file

@ -34,6 +34,52 @@
android:title="@string/rotate_one_eighty"/> android:title="@string/rotate_one_eighty"/>
</menu> </menu>
</item> </item>
<item
android:id="@+id/menu_properties"
android:icon="@drawable/ic_info"
android:title="@string/properties"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_rename"
android:icon="@drawable/ic_rename_new"
android:title="@string/rename"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_hide"
android:icon="@drawable/ic_hide"
android:title="@string/hide"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_unhide"
android:icon="@drawable/ic_unhide_vector"
android:title="@string/unhide"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_copy_to"
android:title="@string/copy_to"
app:showAsAction="never"/>
<item
android:id="@+id/menu_move_to"
android:title="@string/move_to"
app:showAsAction="never"/>
<item
android:id="@+id/menu_create_shortcut"
android:title="@string/create_shortcut"
app:showAsAction="never"/>
<item
android:id="@+id/menu_open_with"
android:title="@string/open_with"
app:showAsAction="never"/>
<item
android:id="@+id/menu_set_as"
android:icon="@drawable/ic_set_as_vector"
android:title="@string/set_as"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_edit"
android:icon="@drawable/ic_edit_vector"
android:title="@string/edit"
app:showAsAction="ifRoom"/>
<item <item
android:id="@+id/menu_add_to_favorites" android:id="@+id/menu_add_to_favorites"
android:icon="@drawable/ic_star_off_vector" android:icon="@drawable/ic_star_off_vector"
@ -65,63 +111,23 @@
android:title="@string/use_default_orientation"/> android:title="@string/use_default_orientation"/>
</menu> </menu>
</item> </item>
<item
android:id="@+id/menu_copy_to"
android:title="@string/copy_to"
app:showAsAction="never"/>
<item
android:id="@+id/menu_move_to"
android:title="@string/move_to"
app:showAsAction="never"/>
<item
android:id="@+id/menu_open_with"
android:title="@string/open_with"
app:showAsAction="never"/>
<item
android:id="@+id/menu_hide"
android:title="@string/hide"
app:showAsAction="never"/>
<item
android:id="@+id/menu_unhide"
android:title="@string/unhide"
app:showAsAction="never"/>
<item
android:id="@+id/menu_edit"
android:icon="@drawable/ic_edit_vector"
android:title="@string/edit"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_properties"
android:icon="@drawable/ic_info"
android:title="@string/properties"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_slideshow"
android:icon="@drawable/ic_slideshow_vector"
android:title="@string/slideshow"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_set_as"
android:icon="@drawable/ic_set_as_vector"
android:title="@string/set_as"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_rename"
android:icon="@drawable/ic_rename_new"
android:title="@string/rename"
app:showAsAction="ifRoom"/>
<item <item
android:id="@+id/menu_print" android:id="@+id/menu_print"
android:title="@string/print" android:title="@string/print"
app:showAsAction="never"/> app:showAsAction="never"/>
<item <item
android:id="@+id/menu_create_shortcut" android:id="@+id/menu_resize"
android:title="@string/create_shortcut" android:title="@string/resize"
app:showAsAction="never"/> app:showAsAction="never"/>
<item <item
android:id="@+id/menu_show_on_map" android:id="@+id/menu_show_on_map"
android:title="@string/show_on_map" android:title="@string/show_on_map"
app:showAsAction="never"/> app:showAsAction="never"/>
<item
android:id="@+id/menu_slideshow"
android:icon="@drawable/ic_slideshow_vector"
android:title="@string/slideshow"
app:showAsAction="ifRoom"/>
<item <item
android:id="@+id/menu_settings" android:id="@+id/menu_settings"
android:title="@string/settings" android:title="@string/settings"

View file

@ -1,294 +1,297 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="app_name">الاستوديو البسيط</string> <string name="app_name">الاستديو البسيط</string>
<string name="app_launcher_name">الاستوديو</string> <string name="app_launcher_name">الاستديو</string>
<string name="edit">تعديل</string> <string name="edit">تعديل</string>
<string name="open_camera">فتح الكاميرا</string> <string name="open_camera">فتح الكاميرا</string>
<string name="hidden">(مخفية)</string> <string name="hidden">(مخفي)</string>
<string name="excluded">(excluded)</string> <string name="excluded">(مستبعد)</string>
<string name="pin_folder">تثبيت المجلد</string> <string name="pin_folder">تثبيت المجلد</string>
<string name="unpin_folder">ازالة تثبيت الملف</string> <string name="unpin_folder">إلغاء تثبيت المجلد</string>
<string name="pin_to_the_top">Pin to the top</string> <string name="pin_to_the_top">تثبيت في الأعلى</string>
<string name="show_all">عرض كل محتوى المجلدات</string> <string name="show_all">إظهار كل محتويات المجلدات</string>
<string name="all_folders">كل المجلدات</string> <string name="all_folders">كل المحلات</string>
<string name="folder_view">التبديل إلى عرض المجلد</string> <string name="folder_view">التبديل إلى عرض المجلد</string>
<string name="other_folder">مجلد آخر</string> <string name="other_folder">مجلد آخر</string>
<string name="show_on_map">عرض على الخريطة</string> <string name="show_on_map">عرض علي الخريطة</string>
<string name="unknown_location">موقع غير معروف</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="reduce_column_count">تقليل عدد الأعمدة</string>
<string name="change_cover_image">تغيير صورة الغلاف</string> <string name="change_cover_image">تغيير صورة الغلاف</string>
<string name="select_photo">اختر الصور</string> <string name="select_photo">تحديد صورة</string>
<string name="use_default">استخدم الافتراضي</string> <string name="use_default">إستخدام كإفتراضي</string>
<string name="volume">الصوت</string> <string name="volume">الصوت</string>
<string name="brightness">السطوع</string> <string name="brightness">السبوع</string>
<string name="lock_orientation">غلق الاتجاه</string> <string name="lock_orientation">قفل الاتجاه</string>
<string name="unlock_orientation">فتح الاتجاه</string> <string name="unlock_orientation">فتح الاتجاه</string>
<string name="change_orientation">Change orientation</string> <string name="change_orientation">تغيير الاتجاه</string>
<string name="force_portrait">Force portrait</string> <string name="force_portrait">فرض الإتجاه العمودي</string>
<string name="force_landscape">Force landscape</string> <string name="force_landscape">فرض الإتجاه الأفقي</string>
<string name="use_default_orientation">Use default orientation</string> <string name="use_default_orientation">إستخدام الإتجاه الافتراضي</string>
<string name="fix_date_taken">Fix Date Taken value</string> <string name="fix_date_taken">إصلاح تاريخ إلتقاط القيمة</string>
<string name="fixing">Fixing</string> <string name="fixing">جارٍ الإصلاح</string>
<string name="dates_fixed_successfully">Dates fixed successfully</string> <string name="dates_fixed_successfully">تم إصلاح التواريخ بنجاح</string>
<string name="share_resized">Share a resized version</string> <string name="share_resized">مشاركة الصورة الذي تم تغيير حجمها</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="upgraded_from_free">مرحباً,\n\nيبدو أنك قمت بترقية التطبيق المجاني القديم. يمكنك الآن إلغاء تثبيت الإصدار القديم، الذي يحتوي على زر \'الترقية إلى Pro\' في أعلي إعدادات التطبيق.\n\nسيتم حذف عناصر سلة المحذوفات فقط، كما سيتم حذف العناصر المفضلة، كما سيتعين عليك إعادة ضبط إعدادات التطبيق .\n\nشكراً!</string>
<string name="switch_to_file_search">Switch to file search across all visible folders</string> <string name="switch_to_file_search">التبديل إلي البحث فى الملفات عبر كافة المجلدات المرئية</string>
<!-- Filter --> <!-- Filter -->
<string name="filter_media">فلتر الميديا</string> <string name="filter_media">فلترة الوسائط</string>
<string name="images">الصور</string> <string name="images">الصور</string>
<string name="videos">الفديوهات</string> <string name="videos">الفيديوهات</string>
<string name="gifs">الصور المتحركة</string> <string name="gifs">الصور المتحركة (GIF)</string>
<string name="raw_images">RAW images</string> <string name="raw_images">صور الخام (RAW)</string>
<string name="svgs">SVGs</string> <string name="svgs">صور الرسومات المتجهة (SVG)</string>
<string name="portraits">Portraits</string> <string name="portraits">صور البورتريه</string>
<string name="no_media_with_filters">لم يتم العثور على ملفات وسائط مع الفلاتر المحددة</string> <string name="no_media_with_filters">لم يتم العثور على ملفات وسائط مع الفلاتر المحددة.</string>
<string name="change_filters_underlined"><u >تغيير الفلاتر</u></string> <string name="change_filters_underlined"><u>تغيير الفلاتر</u></string>
<!-- Hide / Exclude --> <!-- Hide / Exclude -->
<string name="hide_folder_description">هذه الميزة تخفي المجلد عن طريق إضافة ملف \'.nomedia\' بداخله، فإنه سيتم إخفاء كافة المجلدات الفرعية أيضا. يمكنك رؤيتها عن طريق تبديل الخيار \"إظهار العناصر المخفية\" في الإعدادات. استمر؟</string> <string name="hide_folder_description">تقوم هذه الوظيفة باخفاء المجلد عن طريق إضافة ملف \'. nomedia \' إليه ، وستقوم باخفاء كل المجلدات الفرعية أيضًا. يمكنك رؤيتهم عن طريق تبديل خيار \'إظهار العناصر المخفية \' في الإعدادات. هل تريد المتابعة؟</string>
<string name="exclude">استبعد</string> <string name="exclude">إستبعاد</string>
<string name="excluded_folders">المجلدات المستبعدة</string> <string name="excluded_folders">المجلدات المستبعدة</string>
<string name="manage_excluded_folders">ادارة المجلدات المستبعدة</string> <string name="manage_excluded_folders">إدارة المجلدات المستبعدة</string>
<string name="exclude_folder_description">سيؤدي هذا إلى استبعاد التحديد مع مجلداته الفرعية من الاستوديو فقط. يمكنك إدارة المجلدات المستبعدة في الإعدادات</string> <string name="exclude_folder_description">سيؤدي ذلك الي إستبعاد التحديد مع المجلدات الفرعية من "الاستديو" فقط.. يمكنك إدارة المجلدات المستبعدة في الإعدادات.</string>
<string name="exclude_folder_parent">هل تريد استبعاد أحد الوالدين بدلا من ذلك؟</string> <string name="exclude_folder_parent">إستبعاد المجلد الأصل بدلاً من ذلك(المحدد)؟</string>
<string name="excluded_activity_placeholder">باستثناء المجلدات سيجعلها جنبا إلى جنب مع المجلدات الفرعية مخبأة فقط في الاستوديو ، فإنها لا تزال مرئية في تطبيقات أخرى.\n <string name="excluded_activity_placeholder">سيؤدي إستبعاد المجلدات الي جعلها مع المجلدات الفرعية مخفية في "الاستديو" فقط, وستظل مرئية في تطبيقات أخرى. \n\nإذا كنت تريد إخفاءها من التطبيقات الأخرى أيضاً ، فاستخدم وظيفة الإخفاء.</string>
\n <string name="remove_all">إزالة الكل</string>
إذا كنت تريد إخفاءها من تطبيقات أخرى أيضا، استخدم ميزة الإخفاء</string> <string name="remove_all_description">هل تريد إزالة كافة المجلدات من قائمة المجلدات المستبعدة ؟ لن يؤدي هذا إلي حذف المجلدات.</string>
<string name="remove_all">حذف الكل</string>
<string name="remove_all_description">هل تريد إزالة جميع المجلدات من القائمة المستبعدة؟ لن يؤدي هذا إلى حذف المجلدات</string>
<string name="hidden_folders">المجلدات المخفية</string> <string name="hidden_folders">المجلدات المخفية</string>
<string name="manage_hidden_folders">إدارة المجلدات المخفية</string> <string name="manage_hidden_folders">إدارة المجلدات المخفية</string>
<string name="hidden_folders_placeholder">يبدو أنك لا تملك أي مجلد مخفي بملف \".nomedia\".</string> <string name="hidden_folders_placeholder">يبدو أنه لا توجد لديك أي مجلدات مخفية بملف \".nomedia\".</string>
<!-- Include folders --> <!-- Include folders -->
<string name="include_folders">المجلدات المضمنة</string> <string name="include_folders">المجلدات المضمنة</string>
<string name="manage_included_folders">إدارة المجلدات المضمنة</string> <string name="manage_included_folders">إدارة المجلدات المضمنة</string>
<string name="add_folder">اضافة مجلد</string> <string name="add_folder">إضافة مجلد</string>
<string name="included_activity_placeholder">إذا كان لديك بعض المجلدات التي تحتوي على الملتيميديا ، ولكن لم يتم التعرف عليها من قبل التطبيق، يمكنك إضافتها يدويا هنا.\n \n لن تؤدي إضافة بعض العناصر هنا إلى استبعاد أي مجلد آخر.</string> <string name="included_activity_placeholder">إذا كان لديك بعض المجلدات التي تحتوي على الوسائط ، ولكن لم يتم التعرف عليها من قبل التطبيق، يمكنك إضافتها يدوياً هنا.\n\nلن تؤدي إضافة بعض العناصر هنا إلى إستبعاد أي مجلد آخر.</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">لم يتم العثور علي أي ملفات وسائط.يمكنك حلها عن طريق إضافة المجلدات التي تحتوي على ملفات وسائط يدوياً.</string>
<!-- Resizing --> <!-- Resizing -->
<string name="resize">تحجيم</string> <string name="resize">تغيير الحجم</string>
<string name="resize_and_save">تغيير حجم التحديد وحفظ</string> <string name="resize_and_save">تغيير حجم التحديد والحفظ</string>
<string name="width">العرض</string> <string name="width">العرض</string>
<string name="height">الارتفاع</string> <string name="height">الإرتفاع</string>
<string name="keep_aspect_ratio">إبقاء نسبة القياس</string> <string name="keep_aspect_ratio">الحفاظ على نسبة الأبعاد</string>
<string name="invalid_values">الرجاء إدخال درجة دقة صحيحة</string> <string name="invalid_values">يرجى إدخال دقة صالحة</string>
<!-- Editor --> <!-- Editor -->
<string name="editor">تعديل</string> <string name="editor">تعديل</string>
<string name="save">حفظ</string> <string name="save">حفظ</string>
<string name="rotate">التدوير</string> <string name="rotate">تدوير</string>
<string name="path">المسار</string> <string name="path">المسار</string>
<string name="invalid_image_path">مسار صورة غير صحيح</string> <string name="invalid_image_path">مسار الصورة غير صحيح</string>
<string name="image_editing_failed">فشل تعديل الصورة</string> <string name="image_editing_failed">فشل تعديل الصورة</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">تعديل الصورة باستخدام:</string> <string name="edit_image_with">تعديل الصورة باستخدام:</string>
<string name="no_editor_found">لم يتم العثور على أي محرر للصور</string> <string name="no_editor_found">لم يتم العثور على أي محرر للصور</string>
<string name="unknown_file_location">موقع ملف غير معروف</string> <string name="unknown_file_location">موقع الملف غير معروف</string>
<string name="error_saving_file">تعذر الكتابة فوق الملف المصدر</string> <string name="error_saving_file">لا يمكن إستبدال الملف الأصل</string>
<string name="rotate_left">تدوير لليسار</string> <string name="rotate_left">تدوير لليسار</string>
<string name="rotate_right">تدوير لليمين</string> <string name="rotate_right">تدوير لليمين</string>
<string name="rotate_one_eighty">تدوير 180º</string> <string name="rotate_one_eighty">تدوير بزاوية 180º</string>
<string name="flip">قلب</string> <string name="flip">انعكاس</string>
<string name="flip_horizontally">قلب أفقيا</string> <string name="flip_horizontally">انعكاس أفقياً</string>
<string name="flip_vertically">قلب عموديا</string> <string name="flip_vertically">انعكاس عمودياً</string>
<string name="free_aspect_ratio">Free</string> <!-- available as an option: 1:1, 4:3, 16:9, free --> <string name="free_aspect_ratio">حر</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
<string name="other_aspect_ratio">Other</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other --> <string name="other_aspect_ratio">أخري</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
<!-- Set wallpaper --> <!-- Set wallpaper -->
<string name="simple_wallpaper">خلفية بسيطة</string> <string name="simple_wallpaper">خلفية بسيطة</string>
<string name="set_as_wallpaper">تعيين كخلفية الشاشة</string> <string name="set_as_wallpaper">تعيين كخلفية</string>
<string name="set_as_wallpaper_failed">فشل الإعداد كخلفية</string> <string name="set_as_wallpaper_failed">فشل التعيين كخلفية</string>
<string name="set_as_wallpaper_with">تعيين كخلفية بواسطة:</string> <string name="set_as_wallpaper_with">تعيين كخلفية باستخدام:</string>
<string name="setting_wallpaper">… جار تعيين الخلفية ...</string> <string name="setting_wallpaper">جارٍ تعيين الخلفية…</string>
<string name="wallpaper_set_successfully">تم تعيبن الخلفية بنجاح</string> <string name="wallpaper_set_successfully">تم تعيين الخلفية بنجاح</string>
<string name="portrait_aspect_ratio">صورة نسبة العرض إلى الارتفاع</string> <string name="portrait_aspect_ratio">نسبة الأبعاد العمودية</string>
<string name="landscape_aspect_ratio">نسبة العرض إلى الارتفاع في المناظر الطبيعية</string> <string name="landscape_aspect_ratio">نسبة الأبعاد الأفقية</string>
<string name="home_screen">الشاشة الرئيسية</string> <string name="home_screen">الشاشة الرئيسية</string>
<string name="lock_screen">شاشة القفل</string> <string name="lock_screen">شاشة القفل</string>
<string name="home_and_lock_screen">الرئيسية وشاشة القفل</string> <string name="home_and_lock_screen">الشاشة الرئيسية وشاشة القفل</string>
<!-- Slideshow --> <!-- Slideshow -->
<string name="slideshow">عرض الشرائح</string> <string name="slideshow">عرض الشرائح</string>
<string name="interval">الفاصل الزمني (بالثواني):</string> <string name="interval">الفاصل الزمني (بالثواني):</string>
<string name="include_photos">تضمين الصور</string> <string name="include_photos">تضمين الصور</string>
<string name="include_videos">تضمين الفديو</string> <string name="include_videos">تضمين مقاطع الفيديو</string>
<string name="include_gifs">تضمين GIF</string> <string name="include_gifs">تضمين الصور المتحركة (Gif)</string>
<string name="random_order">ترتيب عشوائي</string> <string name="random_order">ترتيب عشوائي</string>
<string name="move_backwards">ارجع للخلف</string> <string name="move_backwards">تحريك للخلف</string>
<string name="loop_slideshow">حلقة عرض الشرائح</string> <string name="loop_slideshow">حلقة عرض الشرائح</string>
<string name="animation">Animation</string> <string name="animation">الحركة</string>
<string name="no_animation">None</string> <string name="no_animation">لا شيء</string>
<string name="fade">Fade</string> <string name="fade">تلاشى</string>
<string name="slide">Slide</string> <string name="slide">انزلاق</string>
<string name="slideshow_ended">انتهى عرض الشرائح</string> <string name="slideshow_ended">أنتهى عرض الشرائح</string>
<string name="no_media_for_slideshow">لم يتم العثور على وسائط لعرض الشرائح</string> <string name="no_media_for_slideshow">لم يتم العثور علي أي وسائط لعرض الشرائح</string>
<!-- View types --> <!-- View types -->
<string name="change_view_type">تغيير طريقة العرض</string> <string name="change_view_type">تغيير نوع العرض</string>
<string name="grid">الشبكة</string> <string name="grid">الشبكة</string>
<string name="list">القائمة</string> <string name="list">القائمة</string>
<string name="group_direct_subfolders">Group direct subfolders</string> <string name="group_direct_subfolders">تجميع المجلدات الفرعية مباشرة</string>
<!-- Grouping at media thumbnails --> <!-- Grouping at media thumbnails -->
<string name="group_by">Group by</string> <string name="group_by">تجميع حسب</string>
<string name="do_not_group_files">Do not group files</string> <string name="do_not_group_files">عدم تجميع الملفات</string>
<string name="by_folder">Folder</string> <string name="by_folder">المجلد</string>
<string name="by_last_modified">Last modified</string> <string name="by_last_modified">آخر تعديل</string>
<string name="by_last_modified_daily">Last modified (daily)</string> <string name="by_last_modified_daily">آخر تعديل (يومياً)</string>
<string name="by_last_modified_monthly">Last modified (monthly)</string> <string name="by_last_modified_monthly">آخر تعديل (شهرياً)</string>
<string name="by_date_taken">Date taken</string> <string name="by_date_taken">تاريخ الإلتقاط</string>
<string name="by_date_taken_daily">Date taken (daily)</string> <string name="by_date_taken_daily">تاريخ الإلتقاط (يومياً)</string>
<string name="by_date_taken_monthly">Date taken (monthly)</string> <string name="by_date_taken_monthly">آخر تعديل (شهرياً)</string>
<string name="by_file_type">File type</string> <string name="by_file_type">نوع الملف</string>
<string name="by_extension">Extension</string> <string name="by_extension">الإمتداد</string>
<string name="grouping_and_sorting">Please note that grouping and sorting are 2 independent fields</string> <string name="grouping_and_sorting">يرجى ملاحظة أن التجميع والفرز هما حقلان مستقلان</string>
<!-- Widgets --> <!-- Widgets -->
<string name="folder_on_widget">Folder shown on the widget:</string> <string name="folder_on_widget">المجلد الظاهر فى الويدجت:</string>
<string name="show_folder_name">Show folder name</string> <string name="show_folder_name">إظهار اسم المجلد</string>
<!-- Settings --> <!-- Settings -->
<string name="autoplay_videos">تشغيل الفديوهات تلقائيا</string> <string name="autoplay_videos">تشغيل مقاطع الفيديو تلقائياً</string>
<string name="remember_last_video_position">Remember last video playback position</string> <string name="remember_last_video_position">تذكر آخر موضع لتشغيل الفيديو</string>
<string name="toggle_filename">تبديل رؤية اسم الملف</string> <string name="toggle_filename">تبديل رؤية إسم الملف</string>
<string name="loop_videos">حلقة الفيديو</string> <string name="loop_videos">حلقة مقاطع الفيديو</string>
<string name="animate_gifs">عرض صور GIF المتحركة في الصور المصغرة</string> <string name="animate_gifs">تحريك الصور المتحركة (Gif) في الصور المصغرة</string>
<string name="max_brightness">أقصى سطوع عند عرض الوسائط</string> <string name="max_brightness">أقصى سطوع عند عرض وسائط ملء الشاشة</string>
<string name="crop_thumbnails">قص الصور المصغرة الى مستطيلات</string> <string name="crop_thumbnails">إقتصاص الصور المصغرة إلى مربعات</string>
<string name="show_thumbnail_video_duration">Show video durations</string> <string name="show_thumbnail_video_duration">إظهار مدة الفيديوهات</string>
<string name="screen_rotation_by">تدوير وسائط ملء الشاشة بواسطة</string> <string name="screen_rotation_by">تدوير وسائط ملء الشاشة باستخدام</string>
<string name="screen_rotation_system_setting">اعدادات النظام</string> <string name="screen_rotation_system_setting">إعدادات النظام</string>
<string name="screen_rotation_device_rotation">تدوير الجهاز</string> <string name="screen_rotation_device_rotation">تدوير الجهاز</string>
<string name="screen_rotation_aspect_ratio">الابعاد</string> <string name="screen_rotation_aspect_ratio">نسبة الأبعاد</string>
<string name="black_background_at_fullscreen">اجعل الخلفية وشريط الحالة باللون الاسود عند عرض المحتوى في كامل الشاشة</string> <string name="black_background_at_fullscreen">جعل الخلفية باللون الأسود في وسائط ملء الشاشة</string>
<string name="scroll_thumbnails_horizontally">قم بتمرير الصور المصغرة أفقيا</string> <string name="scroll_thumbnails_horizontally">تمرير الصور المصغرة أفقياً</string>
<string name="hide_system_ui_at_fullscreen">إخفاء واجهة النظام تلقائيا عند العرض في وضع ملء الشاشة</string> <string name="hide_system_ui_at_fullscreen">إخفاء واجهة مستخدم النظام تلقائياً في وضع ملء الشاشة</string>
<string name="delete_empty_folders">احذف المجلدات الفارغة بعد حذف محتواها</string> <string name="delete_empty_folders">حذف المجلدات الفارغة بعد حذف محتواها</string>
<string name="allow_photo_gestures">السماح بالتحكم في سطوع الصورة باستخدام الإيماءات الرأسية</string> <string name="allow_photo_gestures">السماح بالتحكم في سطوع الصور باستخدام الإيماءات العمودية</string>
<string name="allow_video_gestures">السماح بالتحكم في صوت الفيديو والسطوع بالإيماءات العمودية</string> <string name="allow_video_gestures">السماح بالتحكم في مستوي صوت الفيديو والسطوع باستخدام الإيماءات العمودية</string>
<string name="show_media_count">إظهار عدد لوسائط المجلد على طريقة العرض الرئيسية</string> <string name="show_media_count">إظهار عدد وسائط المجلد في العرض الرئيسي</string>
<string name="show_extended_details">عرض تفاصيل موسعة على وسائط ملء الشاشة</string> <string name="show_extended_details">إظهار التفاصيل الموسعة عبر وسائط ملء الشاشة</string>
<string name="manage_extended_details">إدارة المجلدات المستبعدة</string> <string name="manage_extended_details">إدارة التفاصيل الموسعة</string>
<string name="one_finger_zoom">السماح بتكبير الوسائط بأصبع واحد في وضع ملء الشاشة</string> <string name="one_finger_zoom">السماح بتكبير الوسائط بأصبع واحد في وضع ملء الشاشة</string>
<string name="allow_instant_change">السماح بتغيير الوسائط على الفور من خلال النقر على جوانب الشاشة</string> <string name="allow_instant_change">السماح بتغيير الوسائط علي الفور من خلال النقر علي جوانب الشاشة</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string> <string name="allow_deep_zooming_images">السماح بالتكبير العميق للصور</string>
<string name="hide_extended_details">إخفاء التفاصيل الموسعة عند إخفاء شريط الحالة</string> <string name="hide_extended_details">إخفاء التفاصيل الموسعة عند إخفاء شريط الحالة</string>
<string name="show_at_bottom">Show some action buttons at the bottom of the screen</string> <string name="show_at_bottom">إظهار بعض أزرار الإجراءات في أسفل الشاشة</string>
<string name="show_recycle_bin">Show the Recycle Bin at the folders screen</string> <string name="show_recycle_bin">إظهار "سلة المحذوفات" في شاشة المجلدات</string>
<string name="deep_zoomable_images">Deep zoomable images</string> <string name="deep_zoomable_images">الصور القابلة للتكبير العميق</string>
<string name="show_highest_quality">Show images in the highest possible quality</string> <string name="show_highest_quality">عرض الصور بأعلى جودة ممكنة</string>
<string name="show_recycle_bin_last">Show the Recycle Bin as the last item on the main screen</string> <string name="show_recycle_bin_last">إظهار "سلة المحذوفات" كعنصر آخر علي الشاشة الرئيسية</string>
<string name="allow_down_gesture">Allow closing the fullscreen view with a down gesture</string> <string name="allow_down_gesture">السماح بإغلاق عرض ملء الشاشة باستخدام إيماءه لأسفل</string>
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string> <string name="allow_one_to_one_zoom">السماح بالتكبير 1:1 باستخدام النقر مزدوجاّ</string>
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string> <string name="open_videos_on_separate_screen">فتح مقاطع الفيديو دائماً علي شاشة منفصلة مع إيماءات أفقية جديدة</string>
<string name="show_notch">Show a notch if available</string> <string name="show_notch">عرض النوتش إذا كان متوفر</string>
<string name="allow_rotating_gestures">Allow rotating images with gestures</string> <string name="allow_rotating_gestures">السماح بتدوير الصور باستخدام الإيماءات</string>
<string name="file_loading_priority">File loading priority</string> <string name="file_loading_priority">أولوية تحميل الملفات</string>
<string name="speed">Speed</string> <string name="speed">بسرعة</string>
<string name="compromise">Compromise</string> <string name="compromise">إختيار وسط</string>
<string name="avoid_showing_invalid_files">Avoid showing invalid files</string> <string name="avoid_showing_invalid_files">تجنب إظهار الملفات غير الصالحة</string>
<string name="show_image_file_types">Show image file types</string> <string name="show_image_file_types">إظهار أنواع ملفات الصور</string>
<!-- Setting sections --> <!-- Setting sections -->
<string name="thumbnails">المصغرات</string> <string name="thumbnails">الصور المصغرة</string>
<string name="fullscreen_media">وسائط ملء الشاشة</string> <string name="fullscreen_media">وسائط ملء الشاشة</string>
<string name="extended_details">تفاصيل موسعة</string> <string name="extended_details">التفاصيل الموسعة</string>
<string name="bottom_actions">Bottom actions</string> <string name="bottom_actions"> إجراءات الأزرار السفلية</string>
<!-- Bottom actions --> <!-- Bottom actions -->
<string name="manage_bottom_actions">Manage visible bottom actions</string> <string name="manage_bottom_actions">إدارة إجراءات الأزرار المرئية</string>
<string name="toggle_favorite">Toggle favorite</string> <string name="toggle_favorite">تبديل المفضل</string>
<string name="toggle_file_visibility">Toggle file visibility</string> <string name="toggle_file_visibility">تبديل رؤية الملف</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">كيف يمكنني جعل الاستوديو البسيط معرض الأجهزة الافتراضي؟</string> <string name="faq_1_title">كيف يمكنني جعل تطبيق الاستديو معرض الجهاز الإفتراضي ؟</string>
<string name="faq_1_text">أولاً ، عليك العثور على المعرض الافتراضي حاليًا في قسم التطبيقات في إعدادات جهازك ، ابحث عن زر يقول مثلا \"فتح افتراضيًا\" ، وانقر عليه ، ثم حدد \"مسح الإعدادات الافتراضية\". في المرة التالية التي ستحاول فيها فتح صورة أو فيديو ، يجب أن تذهب الى منتقي التطبيقات ، حيث يمكنك اختيار تطبيق الاستوديو البسيط وجعله التطبيق الافتراضي.</string> <string name="faq_1_text">أولا، يجب عليك العثور على المعرض الإفتراضي الحالي في قسم "التطبيقات" من إعدادات الجهاز، أبحث عن زر يقول شيئاً مثل \"فتح كافتراضي/"، ثم أنقر عليه، ثم حدد \"مسح الإعدادات الإفتراضية\". في المرة القادمة التي ستحاول فيها فتح صورة أو مقطع فيديو يجب أن تري إختيار تطبيق، حيث يمكنك تحديد تطبيق "الاستديو" وجعله التطبيق الإفتراضي.</string>
<string name="faq_2_title">أغلقت التطبيق بكلمة مرور ، لكني نسيت ذلك. ماذا افعل؟</string> <string name="faq_2_title">لقد أغلقت التطبيق بكلمة مرور، لكنني نسيت ذلك. ماذا يمكنني أن أفعل؟</string>
<string name="faq_2_text">يمكنك حلها بطريقتين. يمكنك إما إعادة تثبيت التطبيق ، أو العثور على التطبيق في إعدادات جهازك وتحديد \"مسح البيانات\". سيقوم بإعادة ضبط جميع إعداداتك ، ولن يزيل أي ملفات وسائط.</string> <string name="faq_2_text">يمكنك حلها بطريقتين. يمكنك أما إعادة تثبيت التطبيق أو أبحث عن التطبيق في اعدادات جهازك وحدد \"مسح البيانات\". سيتم إعادة تعيين كل إعداداتك، ولن يقوم بإزالة أي ملفات وسائط.</string>
<string name="faq_3_title">كيف يمكنني جعل الألبوم يظهر دائمًا في الجزء العلوي؟</string> <string name="faq_3_title">كيف يمكنني جعل ألبوماً يظهر دائماً في الأعلى ؟</string>
<string name="faq_3_text">يمكنك الضغط لفترة طويلة على الألبوم المطلوب وتحديد أيقونة الدبوس في الإجراء ، والتي سوف تثبيته إلى الأعلى. يمكنك تثبيت عدة مجلدات أيضًا ، وسيتم ترتيب العناصر المثبتة حسب طريقة الفرز الافتراضية.</string> <string name="faq_3_text">يمكنك الضغط مطولاً علي الألبوم المطلوب وحدد أيقونة "التثبيت" في قائمة الإجراءات، التي ستقوم بتثبيته في الأعلي. يمكنك تثبيت مجلدات متعددة أيضا، سيتم فرز العناصر المثبتة حسب طريقة الفرز الإفتراضية.</string>
<string name="faq_4_title">كيف يمكنني تقديم مقاطع فيديو بسرعة؟</string> <string name="faq_4_title">كيف يمكنني تسريع مقاطع الفيديو؟</string>
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string> <string name="faq_4_text">يمكنك إما سحب إصبعك أفقياً على مشغل الفيديو، أو النقر على نصوص المدة الحالية أو أقصي مدة النصوص بالقرب من شريط التحكم (seekbar) . هذا سوف يحرك الفيديو إما إلى الخلف، أو إلى الأمام.</string>
<string name="faq_5_title">ما الفرق بين إخفاء واستبعاد مجلد؟</string> <string name="faq_5_title">ما هو الفرق بين إخفاء المجلد وإستبعاده ؟</string>
<string name="faq_5_text">يمنع الاستبعاد من عرض المجلد في الاستوديو البسيط فقط ، بينما يقوم بإخفاء بالعمل على مستوى النظام ككل ويقوم بإخفاء المجلد من المعارض الأخرى أيضًا. وهو يعمل عن طريق إنشاء ملف \".nomedia\" فارغ في المجلد المحدد ، والذي يمكنك بعد ذلك إزالته مع أي مدير ملفات أيضًا.</string> <string name="faq_5_text">الإستبعاد يمنع عرض المجلد فقط في الاستديو، بينما الإخفاء يعمل على مستوى النظام ويخفي المجلد من المعارض الأخرى أيضاً. يعمل عن طريق إنشاء ملف فارغ \ ".nomedia \" في المجلد المحدد ، والذي يمكنك إزالته بعد ذلك بواسطة أي مدير ملفات أيضًا.</string>
<string name="faq_6_title">لماذا تظهر المجلدات التي تحتوي على ملصقات أو ملصقات موسيقى تغطيها؟</string> <string name="faq_6_title">لماذا تظهر المجلدات مع صورة غلاف الموسيقى أو الملصقات؟</string>
<string name="faq_6_text">يمكن أن يحدث ذلك سترى بعض ألبومات غير عادية تظهر. يمكنك استبعادها بسهولة عن طريق الضغط عليها وتحديد \"استبعاد\". في مربع الحوار التالي ، يمكنك بعد ذلك تحديد المجلد الأصلي ، ومن المحتمل أن يؤدي ذلك إلى منع ظهور الألبومات الأخرى ذات الصلة أيضًا.</string> <string name="faq_6_text">قد يحدث أن ترى بعض الألبومات غير العادية تظهر. يمكنك بسهولة إستبعادهم بالضغط مطولاً عليهم وأختر إستبعاد. في مربع الحوار التالي يمكنك بعد ذلك تحديد المجلد الاصل، من المحتمل ان يمنع ظهور الألبومات الأخري ذات الصلة أيضاً.</string>
<string name="faq_7_title">لا يظهر مجلد به صور ، فماذا أفعل؟</string> <string name="faq_7_title">المجلد الذي به صور لا يظهر، أو لا يظهر كل العناصر. ماذا يمكنني أن أفعل؟</string>
<string name="faq_7_text">يمكن أن يكون ذلك لأسباب متعددة ، ولكن حلها أمر سهل. أذهب إلى الإعدادات -> إدارة المجلدات المضمنة ، اضغط علامة الزائد وانتقل إلى المجلد المطلوب.</string> <string name="faq_7_text">قد يكون لهذا عدة أسباب، ولكن حل هذه المشكلة أمر سهل. فقط أذهب إلى الإعدادات -> إدارة المجلدات المضمنة، وأختر علامة زائد (+) وأنتقل إلى المجلد المطلوب.</string>
<string name="faq_8_title">ماذا لو كنت أرغب في رؤية بعض المجلدات الخاصة؟</string> <string name="faq_8_title">ماذا أفعل لو كنت أريد بعض المجلدات المحددة مرئية فقط؟</string>
<string name="faq_8_text">لا يؤدي إضافة مجلد في \"المجلدات المضمنة\" إلى استبعاد أي شيء تلقائيًا. ما يمكنك فعله هو الذهاب إلى الإعدادات -> إدارة المجلدات المستبعدة ، واستبعاد المجلد الجذر \"/\" ، ثم إضافة المجلدات المطلوبة في الإعدادات -> إدارة المجلدات المضمنة. سيؤدي ذلك إلى إظهار المجلدات المحددة فقط ، حيث أن الاستبعاد والتضمين يكونان متكررين ، وإذا تم استبعاد أحد المجلدات وإدراجه ، فسيظهر.</string> <string name="faq_8_text">إضافة مجلد إلى المجلدات المضمنة لا يستبعد تلقائياً أي شيء. ما يمكنك القيام به هو الإنتقال إلى الإعدادات -> إدارة المجلدات المستبعدة، إستبعاد المجلد الأصل \"/\"، ثم إضافة المجلدات المطلوبة في الإعدادات -> إدارة المجلدات المضمنة. سيؤدي ذلك إلى جعل المجلدات المحددة مرئية فقط، حيث أن كل من الاستبعاد والتضمين منعكسين وإذا كان أحد المجلدات مستبعداً ومضمن معاً، فسوف يظهر.</string>
<string name="faq_10_title">هل يمكنني قص الصور باستخدام هذا التطبيق؟</string> <string name="faq_10_title">هل يمكنني إقتصاص الصور باستخدام هذا التطبيق؟</string>
<string name="faq_10_text">نعم ، يمكنك اقتصاص الصور في المحرر ، عن طريق سحب زوايا الصورة. يمكنك الوصول إلى المحرر إما عن طريق الضغط لفترة طويلة على صورة مصغرة وتحديد تحرير ، أو تحديد تحرير من العرض بملء الشاشة.</string> <string name="faq_10_text">نعم ، يمكنك إقتصاص الصور في المحرر ، عن طريق سحب زوايا الصورة. يمكنك الوصول إلى المحرر إما بالضغط مطولاً على الصورة المصغرة وأختر تعديل ، أو أختر تعديل من عرض ملء الشاشة.</string>
<string name="faq_11_title">Can I somehow group media file thumbnails?</string> <string name="faq_11_title">هل يمكنني بطريقة ما تجميع الصور المصغرة لملف الوسائط؟</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_11_text">بالتأكيد، فقط تستخدم عنصر القائمة \"تجميع حسب\" أثناء عرض الصور المصغرة.يمكنك تجميع الملفات حسب معايير متعددة، بما في ذلك تاريخ الإلتقاط. إذا كنت تستخدم وظيفة \"إظهار كل محتويات المجلدات\" فيمكنك تجميعها حسب المجلدات أيضا.</string>
<string name="faq_12_title">Sorting by Date Taken doesn\'t seem to work properly, how can I fix it?</string> <string name="faq_12_title">يبدو ان الفرز حسب تاريخ الإلتقاط لا يعمل بشكل صحيح، كيف يمكنني إصلاحه؟</string>
<string name="faq_12_text">It is most likely caused by the files being copied from somewhere. You can fix it by selecting the file thumbnails and selecting \"Fix Date Taken value\".</string> <string name="faq_12_text">غالباً ما يكون ذلك بسبب الملفات التي يتم نسخها من مكان ما. يمكنك اصلاحه عن طريق تحديد الصور المصغرة للملف وأختر \"إصلاح تاريخ إلتقاط القيمة\".</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_title">أرى بعض التباين اللونى على الصور. كيف يمكنني تحسين الجودة؟</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_13_text">الحل الحالي لعرض الصور يعمل بشكل جيد في الأغلبية العظمي للحالات، ولكن إذا كنت تريد تحسين جودة الصور، يمكنك تمكين خيار \"عرض الصور بأعلي جودة ممكنة\" من اعدادات التطبيق، من قسم \"الصور العميقة القابلة للتكبير\".</string>
<string name="faq_14_title">I have hidden a file/folder. How can I unhide it?</string> <string name="faq_14_title">لقد قمت بإخفاء ملف/مجلد. كيف يمكنني إظهاره؟</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_14_text">يمكنك أما أن تضغط علي عنصر القائمة "إظهار العناصر المخفية مؤقتاً" علي الشاشه الرئيسية أو تفعيل خيار \"إظهار العناصر المخفية" في إعدادات التطبيق لرؤية العنصر المخفي. إذا كنت تريد إظهاره ، فقط أضغط مطولاً عليه وأختر \" إظهار\". يتم إخفاء المجلدات عن طريق إضافة ملف مخفي ". nomedia/" إليهم، يمكنك حذف الملف بواسطة أي مدير ملفات أيضاً.</string>
<string name="faq_15_title">Why does the app take up so much space?</string> <string name="faq_15_title">لماذا يشغل التطبيق مساحة كبيرة؟</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_15_text">يمكن لذاكرة التخزين المؤقت للتطبيق أن تصل سعتها إلى 250 ميجابايت، ، مما يضمن سرعة تحميل الصور. إذا كان التطبيق يشغل مساحة أكبر ، فمن المحتمل أن يكون ذلك بسبب وجود عناصر في "سلة المحذوفات". يتم حساب هذه الملفات إلى حجم التطبيق. يمكنك مسح "سلة المحذوفات" عن طريق فتحها وحذف جميع الملفات ، أو من إعدادات التطبيق. يتم حذف كل ملف في "سلة المحذوفات" تلقائياً بعد 30 يوماً.</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have --> <!-- 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. --> <!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
<string name="app_title">Simple Gallery Pro - Photo Manager &amp; Editor</string> <string name="app_title">المعرض البسيط الـ Pro - محرر ومدير الصور</string>
<!-- Short description has to have less than 80 chars --> <!-- Short description has to have less than 80 chars -->
<string name="app_short_description">Browse your memories without any interruptions.</string> <string name="app_short_description">تصفح ذكرياتك دون اي انقطاع.</string>
<string name="app_long_description"> <string name="app_long_description">
Simple Gallery Pro is a highly customizable offline gallery. Organize &amp; edit your photos, recover deleted files with the recycle bin, protect &amp; hide files and view a huge variety of different photo &amp; video formats including RAW, SVG and much more. (تطبيق المعرض البسيط الـ Pro) هو معرض بدون إنترنت قابل للتخصيص بدرجة كبيرة يتمتع بتنظيم الصور وتحريرها وإستعادة الملفات المحذوفة من خلال "سلة المحذوفات" وحماية الملفات وإخفاؤها وعرض مجموعة كبيرة من تنسيقات الصور والفيديو المختلفة بما في ذلك تنسيقات RAW و SVG وغير ذلك الكثير.
The app contains no ads and unnecessary permissions. As the app doesnt require internet access either, your privacy is protected. لا يحتوي التطبيق على إعلانات وأذونات غير ضرورية. نظراً لأن التطبيق لا يتطلب الوصول إلى الإنترنت أيضاً ، فإن خصوصيتك محمية.
------------------------------------------------- -------------------------------------------------
<b>SIMPLE GALLERY PRO FEATURES</b> <b>المعرض البسيط الـ Pro - الميزات</b>
------------------------------------------------- -------------------------------------------------
• Offline gallery with no ads or popups معرض بدون إنترنت بدون إعلانات أو نوافذ منبثقة
• Simple gallery photo editor crop, rotate, resize, draw, filters &amp; more • محرر صور (معرض البسيط) - قص، تدوير، تغيير حجم، رسم، فلاتر وغير ذلك
• No internet access needed, giving you more privacy and security • لا حاجة للوصول إلى الإنترنت، مما يمنحك المزيد من الخصوصية والأمان
• No unnecessary permissions required
• Quickly search images, videos &amp; files
• Open &amp; view many different photo and video types (RAW, SVG, panoramic etc)
• A variety of intuitive gestures to easily edit &amp; organize files
• Lots of ways to filter, group &amp; sort files
• Customize the appearance of Simple Gallery Pro
• Available in 32 languages
• Mark files as favorites for quick access
• Protect your photos &amp; videos with a pattern, pin or fingerprint
• Use pin, pattern &amp; fingerprint to protect the app launch or specific functions too
• Recover deleted photos &amp; videos from the recycle bin
• Toggle visibility of files to hide photos &amp; videos
• Create a customizable slideshow of your files
• View detailed information of your files (resolution, EXIF values etc)
• Simple Gallery Pro is open source
… and much much more!
<b>PHOTO GALLERY EDITOR</b> • لا توجد أذونات غير ضرورية مطلوبة
Simple Gallery Pro makes it easy to edit your pictures on the fly. Crop, flip, rotate and resize your pictures. If youre feeling a little more creative you can add filters and draw on your pictures! • البحث بسرعة عن الصور ومقاطع الفيديو والملفات
• فتح وعرض العديد من أنواع مختلفة من الصور والفيديو (RAW ، SVG ، بانورامية الخ)
• مجموعة متنوعة من الإيماءات البسيطة لتحرير الملفات وتنظيمها بسهولة
• الكثير من الطرق لفلترة الملفات وتجميعها وفرزها
• تخصيص مظهر للتطبيق
• متوفر بـ ٣٢ لغة
• وضع علامة علي الملفات كمفضلة للوصول السريع
• تمتع بحماية صورك ومقاطع الفيديو باستخدام نمط أو رمز PIN أو بصمة إصبع
• أستخدم رمز الـ PIN والنقش وبصمة الاصبع لحماية تشغيل التطبيق أو وظائف معينة أيضاً
• إستعادة الصور ومقاطع الفيديو المحذوفة من "سلة المحذوفات"
• تبديل رؤية الملفات لإخفاء الصور ومقاطع الفيديو
• إنشاء عرض شرائح قابل للتخصيص لملفاتك
• عرض معلومات تفصيلية لملفاتك (دقة الوضوح، قيم EXIF، إلخ)
• تطبيق المعرض هو مصدر مفتوح
… والكثير الكثير!
<b>محرر معرض الصور</b>
يساعد (تطبيق المعرض البسيط الـ Pro ) على تسهيل تحرير الصور بسرعة فائقة. قص الصور وقلبها وتدويرها وتغيير حجمها. إذا كنت تشعر بقدر أكبر من الإبداع، يمكنك إضافة الفلاتر والرسم على صورك!
<b>SUPPORT FOR MANY FILE TYPES</b>
Unlike some other gallery viewers &amp; photo organizers, Simple Gallery Pro supports a huge range of different file types including JPEG, PNG, MP4, MKV, RAW, SVG, Panoramic photos, Panoramic videos and many more.
<b>HIGHLY CUSTOMIZABLE GALLERY MANAGER</b> <b>يدعم العديد من انواع الملفات</b>
From the UI to the function buttons on the bottom toolbar, Simple Gallery Pro is highly customizable and works the way you want it to. No other gallery manager has this kind of flexibility! Thanks to being open source, were also available in 32 languages! على عكس بعض تطبيقات معرض الصور الأخري ومنظمي الصور ، يدعم (تطبيق المعرض البسيط الـ Pro )مجموعة كبيرة من أنواع الملفات المختلفة بما في ذلك JPEG و PNG و MP4 و MKV و RAW و SVG والصور البانورامية ومقاطع الفيديو البانورامية وغيرها الكثير.
<b>RECOVER DELETED PHOTOS &amp; VIDEOS</b> <b>مدير معرض الصور القابل للتخصيص بدرجة كبيرة</b>
Accidentally deleted a precious photo or video? Dont worry! Simple Gallery Pro features a handy recycle bin where you can recover deleted photos &amp; videos easily. بدءاً من واجهة المستخدم وحتى أزرار الوظائف الموجودة على شريط الأدوات السفلي، يتسم (تطبيق المعرض البسيط الـ Pro ) بأنه قابل للتخصيص بدرجة كبيرة ويعمل بالطريقة التي تريدها في الإستخدام. لا يوجد أي مدير معرض آخر يتمتع بهذا النوع من المرونة! بفضل كونه مفتوح المصدر ، نحن متاحون أيضاً بـ 32 لغة!
<b>PROTECT &amp; HIDE PHOTOS, VIDEOS &amp; FILES</b> <b>إسترداد الصور ومقاطع الفيديو المحذوفة</b>
Using pin, pattern or your devices fingerprint scanner you can protect and hide photos, videos &amp; entire albums. You can protect the app itself or place locks on specific functions of the app. For example, you cant delete a file without a fingerprint scan, helping to protect your files from accidental deletion. حذف صورة أو فيديو ثمين عن طريق الخطأ لا تقلق نظراً لأن(تطبيق المعرض البسيط الـ Pro) يتميز بسلة محذوفات سهلة الاستخدام يمكنك من خلالها إسترداد الصور ومقاطع الفيديو المحذوفة بسهولة.
<b>Check out the full suite of Simple Tools here:</b> <b>حماية وإخفاء الصور والفيديوهات والملفات</b>
باستخدام رمز الـ PIN أو النمط أو الماسح الضوئي لبصمة الاصبع لجهازك يمكنك حماية الصور ومقاطع الفيديو والألبومات بأكملها وإخفائها. يمكنك حماية التطبيق نفسه أو وضع قفل الأمان علي وظائف معينة للتطبيق علي سبيل المثال، لا يمكنك حذف ملف دون إجراء مسح ضوئي لبصمة الاصبع، مما يساعد علي حماية ملفاتك من الحذف غير المقصود.
<b>أطلع على المجموعة الكاملة من الأدوات البسيطة هنا:</b>
https://www.simplemobiletools.com https://www.simplemobiletools.com
<b>Facebook:</b> <b>موقع مستقل لتطبيق المعرض البسيط الـ Pro : </b>
https://www.simplemobiletools.com/gallery
<b>صفحة الفيسبوك:</b>
https://www.facebook.com/simplemobiletools https://www.facebook.com/simplemobiletools
<b>Reddit:</b> <b>موقع رديت:</b>
https://www.reddit.com/r/SimpleMobileTools https://www.reddit.com/r/SimpleMobileTools
</string> </string>

View file

@ -82,6 +82,7 @@
<string name="path">Path</string> <string name="path">Path</string>
<string name="invalid_image_path">Invalid image path</string> <string name="invalid_image_path">Invalid image path</string>
<string name="image_editing_failed">Image editing failed</string> <string name="image_editing_failed">Image editing failed</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Edit image with:</string> <string name="edit_image_with">Edit image with:</string>
<string name="no_editor_found">No image editor found</string> <string name="no_editor_found">No image editor found</string>
<string name="unknown_file_location">Unknown file location</string> <string name="unknown_file_location">Unknown file location</string>

View file

@ -82,6 +82,7 @@
<string name="path">Ruta</string> <string name="path">Ruta</string>
<string name="invalid_image_path">Ruta de imatge no vàlida</string> <string name="invalid_image_path">Ruta de imatge no vàlida</string>
<string name="image_editing_failed">Ha fallat la edició de la imatge</string> <string name="image_editing_failed">Ha fallat la edició de la imatge</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Editar imatge utilitzant:</string> <string name="edit_image_with">Editar imatge utilitzant:</string>
<string name="no_editor_found">No sha trobat cap editor dimatges</string> <string name="no_editor_found">No sha trobat cap editor dimatges</string>
<string name="unknown_file_location">Ubicació de larxiu desconeguda</string> <string name="unknown_file_location">Ubicació de larxiu desconeguda</string>

View file

@ -82,6 +82,7 @@
<string name="path">Cesta</string> <string name="path">Cesta</string>
<string name="invalid_image_path">Neplatná cesta</string> <string name="invalid_image_path">Neplatná cesta</string>
<string name="image_editing_failed">Úprava souboru selhala</string> <string name="image_editing_failed">Úprava souboru selhala</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Upravit soubor pomocí:</string> <string name="edit_image_with">Upravit soubor pomocí:</string>
<string name="no_editor_found">Nebyl nalezen žádný editor</string> <string name="no_editor_found">Nebyl nalezen žádný editor</string>
<string name="unknown_file_location">Neznámé umístění souboru</string> <string name="unknown_file_location">Neznámé umístění souboru</string>

View file

@ -82,6 +82,7 @@
<string name="path">Sti</string> <string name="path">Sti</string>
<string name="invalid_image_path">Ugyldig sti til billede</string> <string name="invalid_image_path">Ugyldig sti til billede</string>
<string name="image_editing_failed">Redigering af billede mislykkedes</string> <string name="image_editing_failed">Redigering af billede mislykkedes</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Rediger billede med:</string> <string name="edit_image_with">Rediger billede med:</string>
<string name="no_editor_found">Der blev ikke fundet en editor til billedbehandling</string> <string name="no_editor_found">Der blev ikke fundet en editor til billedbehandling</string>
<string name="unknown_file_location">Ukendt filplacering</string> <string name="unknown_file_location">Ukendt filplacering</string>

View file

@ -82,6 +82,7 @@
<string name="path">Pfad</string> <string name="path">Pfad</string>
<string name="invalid_image_path">Ungültiger Dateipfad.</string> <string name="invalid_image_path">Ungültiger Dateipfad.</string>
<string name="image_editing_failed">Bildbearbeitung fehlgeschlagen.</string> <string name="image_editing_failed">Bildbearbeitung fehlgeschlagen.</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Bild bearbeiten mit:</string> <string name="edit_image_with">Bild bearbeiten mit:</string>
<string name="no_editor_found">Keine Bildeditor-App gefunden.</string> <string name="no_editor_found">Keine Bildeditor-App gefunden.</string>
<string name="unknown_file_location">Unbekannter Dateipfad.</string> <string name="unknown_file_location">Unbekannter Dateipfad.</string>

View file

@ -82,6 +82,7 @@
<string name="path">Διαδρομή</string> <string name="path">Διαδρομή</string>
<string name="invalid_image_path">Μη έγκυρη διαδρομή εικόνας</string> <string name="invalid_image_path">Μη έγκυρη διαδρομή εικόνας</string>
<string name="image_editing_failed">Η επεξεργασία εικόνας απέτυχε</string> <string name="image_editing_failed">Η επεξεργασία εικόνας απέτυχε</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Επεξεργασία εικόνας με:</string> <string name="edit_image_with">Επεξεργασία εικόνας με:</string>
<string name="no_editor_found">Δεν βρέθηκε επεργαστής εικόνων</string> <string name="no_editor_found">Δεν βρέθηκε επεργαστής εικόνων</string>
<string name="unknown_file_location">Άγνωστη τοποθεσία αρχείου</string> <string name="unknown_file_location">Άγνωστη τοποθεσία αρχείου</string>

View file

@ -82,6 +82,7 @@
<string name="path">Ruta</string> <string name="path">Ruta</string>
<string name="invalid_image_path">Ruta de imagen no válida</string> <string name="invalid_image_path">Ruta de imagen no válida</string>
<string name="image_editing_failed">Falló la edición de imagen</string> <string name="image_editing_failed">Falló la edición de imagen</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Editar imagen usando:</string> <string name="edit_image_with">Editar imagen usando:</string>
<string name="no_editor_found">No se encontró editor de imágenes</string> <string name="no_editor_found">No se encontró editor de imágenes</string>
<string name="unknown_file_location">Ubicación del archivo desconocida</string> <string name="unknown_file_location">Ubicación del archivo desconocida</string>

View file

@ -82,6 +82,7 @@
<string name="path">Polku</string> <string name="path">Polku</string>
<string name="invalid_image_path">Kuvan polkua ei ole</string> <string name="invalid_image_path">Kuvan polkua ei ole</string>
<string name="image_editing_failed">Kuvan muokkaus epäonnistui</string> <string name="image_editing_failed">Kuvan muokkaus epäonnistui</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Muokkaa kuvaa:</string> <string name="edit_image_with">Muokkaa kuvaa:</string>
<string name="no_editor_found">Kuvamuokkainta ei löytynyt</string> <string name="no_editor_found">Kuvamuokkainta ei löytynyt</string>
<string name="unknown_file_location">Tuntematon tiedostosijainti</string> <string name="unknown_file_location">Tuntematon tiedostosijainti</string>

View file

@ -82,6 +82,7 @@
<string name="path">Emplacement</string> <string name="path">Emplacement</string>
<string name="invalid_image_path">Emplacement invalide</string> <string name="invalid_image_path">Emplacement invalide</string>
<string name="image_editing_failed">Échec de l\'édition de l\'image</string> <string name="image_editing_failed">Échec de l\'édition de l\'image</string>
<string name="file_edited_successfully">File edited successfully</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="no_editor_found">Aucun éditeur d\'image trouvé</string>
<string name="unknown_file_location">Emplacement du fichier inconnu</string> <string name="unknown_file_location">Emplacement du fichier inconnu</string>
@ -151,11 +152,11 @@
<!-- Settings --> <!-- Settings -->
<string name="autoplay_videos">Lecture automatique des vidéos</string> <string name="autoplay_videos">Lecture automatique des vidéos</string>
<string name="remember_last_video_position">Mémoriser la position de lecture des vidéos</string> <string name="remember_last_video_position">Mémoriser la position de lecture des vidéos</string>
<string name="toggle_filename">Permuter la visibilité des noms de fichier</string> <string name="toggle_filename">Permuter l\'affichage des noms de fichier</string>
<string name="loop_videos">Lecture en boucle des vidéos</string> <string name="loop_videos">Lecture en boucle des vidéos</string>
<string name="animate_gifs">Animer le GIFs dans les miniatures</string> <string name="animate_gifs">Animer les miniatures des GIF</string>
<string name="max_brightness">Luminosité maximale</string> <string name="max_brightness">Luminosité maximale</string>
<string name="crop_thumbnails">Recadrer les miniatures en carrés</string> <string name="crop_thumbnails">Recadrer les miniatures en carré</string>
<string name="show_thumbnail_video_duration">Afficher la durée des vidéos</string> <string name="show_thumbnail_video_duration">Afficher la durée des vidéos</string>
<string name="screen_rotation_by">Orientation de l\'affichage</string> <string name="screen_rotation_by">Orientation de l\'affichage</string>
<string name="screen_rotation_system_setting">Paramètres système</string> <string name="screen_rotation_system_setting">Paramètres système</string>
@ -199,7 +200,7 @@
<!-- Bottom actions --> <!-- Bottom actions -->
<string name="manage_bottom_actions">Gérer la barre d\'actions</string> <string name="manage_bottom_actions">Gérer la barre d\'actions</string>
<string name="toggle_favorite">Ajouter aux favoris</string> <string name="toggle_favorite">Ajouter aux favoris</string>
<string name="toggle_file_visibility">Changer la visibilité des fichiers</string> <string name="toggle_file_visibility">Visibilité du fichier</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Comment faire de Simple Gallery ma galerie par défaut ?</string> <string name="faq_1_title">Comment faire de Simple Gallery ma galerie par défaut ?</string>

View file

@ -82,6 +82,7 @@
<string name="path">Ruta</string> <string name="path">Ruta</string>
<string name="invalid_image_path">Ruta a imaxe non válida</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_failed">Fallo na edición da imaxe</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Editar imaxe con:</string> <string name="edit_image_with">Editar imaxe con:</string>
<string name="no_editor_found">Non se atopou ningún editor</string> <string name="no_editor_found">Non se atopou ningún editor</string>
<string name="unknown_file_location">Localización do ficheiro descoñecida</string> <string name="unknown_file_location">Localización do ficheiro descoñecida</string>

View file

@ -82,6 +82,7 @@
<string name="path">Putanja</string> <string name="path">Putanja</string>
<string name="invalid_image_path">Neispravna putanja slike</string> <string name="invalid_image_path">Neispravna putanja slike</string>
<string name="image_editing_failed">Uređivanje slika nije uspjelo</string> <string name="image_editing_failed">Uređivanje slika nije uspjelo</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Uredi sliku pomoću:</string> <string name="edit_image_with">Uredi sliku pomoću:</string>
<string name="no_editor_found">Nije pronađen uređivač slika</string> <string name="no_editor_found">Nije pronađen uređivač slika</string>
<string name="unknown_file_location">Nepoznata lokacija datoteke</string> <string name="unknown_file_location">Nepoznata lokacija datoteke</string>

View file

@ -82,6 +82,7 @@
<string name="path">Elérési útvonal</string> <string name="path">Elérési útvonal</string>
<string name="invalid_image_path">Érvénytelen kép elérési útvonal</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_failed">Sikertelen kép szerkesztés</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Kép szerkesztés ezzel:</string> <string name="edit_image_with">Kép szerkesztés ezzel:</string>
<string name="no_editor_found">Nem található kép szerkesztő</string> <string name="no_editor_found">Nem található kép szerkesztő</string>
<string name="unknown_file_location">Ismeretlen fájl hely</string> <string name="unknown_file_location">Ismeretlen fájl hely</string>

View file

@ -82,6 +82,7 @@
<string name="path">Jalur</string> <string name="path">Jalur</string>
<string name="invalid_image_path">Jalur gambar tidak valid</string> <string name="invalid_image_path">Jalur gambar tidak valid</string>
<string name="image_editing_failed">Gagal menyunting gambar</string> <string name="image_editing_failed">Gagal menyunting gambar</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Sunting gambar dengan:</string> <string name="edit_image_with">Sunting gambar dengan:</string>
<string name="no_editor_found">Tidak ditemukan aplikasi penyunting gambar</string> <string name="no_editor_found">Tidak ditemukan aplikasi penyunting gambar</string>
<string name="unknown_file_location">Lokasi berkas tidak diketahui</string> <string name="unknown_file_location">Lokasi berkas tidak diketahui</string>
@ -237,7 +238,7 @@
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it --> <!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
<string name="app_title">Simple Gallery Pro - Pengelola &amp; Penyunting Foto</string> <string name="app_title">Simple Gallery Pro - Pengelola &amp; Penyunting Foto</string>
<!-- Short description has to have less than 80 chars --> <!-- Short description has to have less than 80 chars -->
<string name="app_short_description">Browse your memories without any interruptions.</string> <string name="app_short_description">Menampilkan semua kenangan anda tanpa gangguan.</string>
<string name="app_long_description"> <string name="app_long_description">
Simple Gallery Pro adalah aplikasi galeri luring yang sangat mudah diubahsuai. Mengelola &amp; menyunting foto anda, memulihkan berkas yang terhapus dari keranjang sampah, melindungi &amp; menyembunyikan berkas, dan menampilkan banyak format foto &amp; video, diantaranya RAW, SVG dan masih banyak lainnya. Simple Gallery Pro adalah aplikasi galeri luring yang sangat mudah diubahsuai. Mengelola &amp; menyunting foto anda, memulihkan berkas yang terhapus dari keranjang sampah, melindungi &amp; menyembunyikan berkas, dan menampilkan banyak format foto &amp; video, diantaranya RAW, SVG dan masih banyak lainnya.

View file

@ -82,6 +82,7 @@
<string name="path">Jalur</string> <string name="path">Jalur</string>
<string name="invalid_image_path">Jalur gambar tidak valid</string> <string name="invalid_image_path">Jalur gambar tidak valid</string>
<string name="image_editing_failed">Gagal menyunting gambar</string> <string name="image_editing_failed">Gagal menyunting gambar</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Sunting gambar dengan:</string> <string name="edit_image_with">Sunting gambar dengan:</string>
<string name="no_editor_found">Tidak ditemukan aplikasi penyunting gambar</string> <string name="no_editor_found">Tidak ditemukan aplikasi penyunting gambar</string>
<string name="unknown_file_location">Lokasi berkas tidak diketahui</string> <string name="unknown_file_location">Lokasi berkas tidak diketahui</string>
@ -237,7 +238,7 @@
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it --> <!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
<string name="app_title">Simple Gallery Pro - Pengelola &amp; Penyunting Foto</string> <string name="app_title">Simple Gallery Pro - Pengelola &amp; Penyunting Foto</string>
<!-- Short description has to have less than 80 chars --> <!-- Short description has to have less than 80 chars -->
<string name="app_short_description">Browse your memories without any interruptions.</string> <string name="app_short_description">Menampilkan semua kenangan anda tanpa gangguan.</string>
<string name="app_long_description"> <string name="app_long_description">
Simple Gallery Pro adalah aplikasi galeri luring yang sangat mudah diubahsuai. Mengelola &amp; menyunting foto anda, memulihkan berkas yang terhapus dari keranjang sampah, melindungi &amp; menyembunyikan berkas, dan menampilkan banyak format foto &amp; video, diantaranya RAW, SVG dan masih banyak lainnya. Simple Gallery Pro adalah aplikasi galeri luring yang sangat mudah diubahsuai. Mengelola &amp; menyunting foto anda, memulihkan berkas yang terhapus dari keranjang sampah, melindungi &amp; menyembunyikan berkas, dan menampilkan banyak format foto &amp; video, diantaranya RAW, SVG dan masih banyak lainnya.

View file

@ -82,6 +82,7 @@
<string name="path">Percorso</string> <string name="path">Percorso</string>
<string name="invalid_image_path">Percorso dell\'immagine non valido</string> <string name="invalid_image_path">Percorso dell\'immagine non valido</string>
<string name="image_editing_failed">Modifica dell\'immagine fallita</string> <string name="image_editing_failed">Modifica dell\'immagine fallita</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Modifica immagine con:</string> <string name="edit_image_with">Modifica immagine con:</string>
<string name="no_editor_found">Editor delle immagini non trovato</string> <string name="no_editor_found">Editor delle immagini non trovato</string>
<string name="unknown_file_location">Posizione del file sconosciuta</string> <string name="unknown_file_location">Posizione del file sconosciuta</string>

View file

@ -82,6 +82,7 @@
<string name="path">パス</string> <string name="path">パス</string>
<string name="invalid_image_path">無効な画像パス</string> <string name="invalid_image_path">無効な画像パス</string>
<string name="image_editing_failed">画像の編集に失敗しました</string> <string name="image_editing_failed">画像の編集に失敗しました</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">画像を編集:</string> <string name="edit_image_with">画像を編集:</string>
<string name="no_editor_found">画像エディターが見つかりません</string> <string name="no_editor_found">画像エディターが見つかりません</string>
<string name="unknown_file_location">ファイルの場所が不明です</string> <string name="unknown_file_location">ファイルの場所が不明です</string>

View file

@ -82,6 +82,7 @@
<string name="path">경로</string> <string name="path">경로</string>
<string name="invalid_image_path">유효하지 않은 사진 경로</string> <string name="invalid_image_path">유효하지 않은 사진 경로</string>
<string name="image_editing_failed">사진 편집 실패</string> <string name="image_editing_failed">사진 편집 실패</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">사진 편집 프로그램 연결:</string> <string name="edit_image_with">사진 편집 프로그램 연결:</string>
<string name="no_editor_found">사진 편집 프로그램 없음</string> <string name="no_editor_found">사진 편집 프로그램 없음</string>
<string name="unknown_file_location">알 수 없는 파일 위치</string> <string name="unknown_file_location">알 수 없는 파일 위치</string>

View file

@ -82,6 +82,7 @@
<string name="path">Kelias</string> <string name="path">Kelias</string>
<string name="invalid_image_path">Netinkamas atvaizdo kelias</string> <string name="invalid_image_path">Netinkamas atvaizdo kelias</string>
<string name="image_editing_failed">Atvaizdo redagavimas nepavyko</string> <string name="image_editing_failed">Atvaizdo redagavimas nepavyko</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Redaguoti atvaizdą su:</string> <string name="edit_image_with">Redaguoti atvaizdą su:</string>
<string name="no_editor_found">Nerasta atvaizdų redagavimo programėlės</string> <string name="no_editor_found">Nerasta atvaizdų redagavimo programėlės</string>
<string name="unknown_file_location">Nežinoma bylos vieta</string> <string name="unknown_file_location">Nežinoma bylos vieta</string>

View file

@ -82,6 +82,7 @@
<string name="path">Bane</string> <string name="path">Bane</string>
<string name="invalid_image_path">Ugyldig bildebane</string> <string name="invalid_image_path">Ugyldig bildebane</string>
<string name="image_editing_failed">Bilderedigering feilet</string> <string name="image_editing_failed">Bilderedigering feilet</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Rediger bilde med:</string> <string name="edit_image_with">Rediger bilde med:</string>
<string name="no_editor_found">Ingen bilderedigeringsapp funnet</string> <string name="no_editor_found">Ingen bilderedigeringsapp funnet</string>
<string name="unknown_file_location">Ukjent filplassering</string> <string name="unknown_file_location">Ukjent filplassering</string>

View file

@ -82,6 +82,7 @@
<string name="path">Pad</string> <string name="path">Pad</string>
<string name="invalid_image_path">Ongeldig pad naar afbeelding</string> <string name="invalid_image_path">Ongeldig pad naar afbeelding</string>
<string name="image_editing_failed">Fout bij bewerken van afbeelding</string> <string name="image_editing_failed">Fout bij bewerken van afbeelding</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Afbeelding bewerken met:</string> <string name="edit_image_with">Afbeelding bewerken met:</string>
<string name="no_editor_found">Geen app gevonden voor fotobewerking</string> <string name="no_editor_found">Geen app gevonden voor fotobewerking</string>
<string name="unknown_file_location">Onbekende bestandslocatie</string> <string name="unknown_file_location">Onbekende bestandslocatie</string>

View file

@ -82,6 +82,7 @@
<string name="path">Ścieżka</string> <string name="path">Ścieżka</string>
<string name="invalid_image_path">Nieprawidłowa ścieżka</string> <string name="invalid_image_path">Nieprawidłowa ścieżka</string>
<string name="image_editing_failed">Edycja obrazu nie powiodła się</string> <string name="image_editing_failed">Edycja obrazu nie powiodła się</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Edytuj obraz w:</string> <string name="edit_image_with">Edytuj obraz w:</string>
<string name="no_editor_found">Nie znalazłem edytora zdjęć</string> <string name="no_editor_found">Nie znalazłem edytora zdjęć</string>
<string name="unknown_file_location">Nieznana lokalizacja pliku</string> <string name="unknown_file_location">Nieznana lokalizacja pliku</string>

View file

@ -82,6 +82,7 @@
<string name="path">Caminho</string> <string name="path">Caminho</string>
<string name="invalid_image_path">Caminho inválido</string> <string name="invalid_image_path">Caminho inválido</string>
<string name="image_editing_failed">Falha na edição da imagem</string> <string name="image_editing_failed">Falha na edição da imagem</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Editar imagem com:</string> <string name="edit_image_with">Editar imagem com:</string>
<string name="no_editor_found">Editor não encontrado</string> <string name="no_editor_found">Editor não encontrado</string>
<string name="unknown_file_location">Localização desconhecida</string> <string name="unknown_file_location">Localização desconhecida</string>

View file

@ -82,6 +82,7 @@
<string name="path">Caminho</string> <string name="path">Caminho</string>
<string name="invalid_image_path">Caminho inválido</string> <string name="invalid_image_path">Caminho inválido</string>
<string name="image_editing_failed">Falha na edição da imagem</string> <string name="image_editing_failed">Falha na edição da imagem</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Editar imagem com:</string> <string name="edit_image_with">Editar imagem com:</string>
<string name="no_editor_found">Editor não encontrado</string> <string name="no_editor_found">Editor não encontrado</string>
<string name="unknown_file_location">Localização desconhecida</string> <string name="unknown_file_location">Localização desconhecida</string>
@ -237,11 +238,11 @@
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it --> <!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
<string name="app_title">Simple Gallery Pro - Editor e gestor de fotos</string> <string name="app_title">Simple Gallery Pro - Editor e gestor de fotos</string>
<!-- Short description has to have less than 80 chars --> <!-- Short description has to have less than 80 chars -->
<string name="app_short_description">Browse your memories without any interruptions.</string> <string name="app_short_description">Explore as suas memórias sem interrupções.</string>
<string name="app_long_description"> <string name="app_long_description">
Simple Gallery Pro é uma aplicação local para gerir fotos e vídeos. Pode organizar e editar as suas fotos, recuperar ficheiros através da reciclagem, proteger e ocultar ficheiros e ver imagens e vídeos disponíveis em vários formatos tais como RAW, SVG e muito mais. Simple Gallery Pro é uma aplicação local para gerir fotos e vídeos. Pode organizar e editar as suas fotos, recuperar ficheiros através da reciclagem, proteger e ocultar ficheiros e ver imagens e vídeos disponíveis em vários formatos tais como RAW, SVG e muito mais.
A aplicação não tem anúncios nem pede permissões desnecessárias. Uma vez que também não precisa de aceder à Internet, os seus ficheiros estão protegidos. A aplicação não tem anúncios nem permissões desnecessárias. Uma vez que também não precisa de aceder à Internet, os seus ficheiros estão protegidos.
------------------------------------------------- -------------------------------------------------
<b>SIMPLE GALLERY PRO FUNCIONALIDADES</b> <b>SIMPLE GALLERY PRO FUNCIONALIDADES</b>

View file

@ -82,6 +82,7 @@
<string name="path">Путь</string> <string name="path">Путь</string>
<string name="invalid_image_path">Недопустимый путь изображения</string> <string name="invalid_image_path">Недопустимый путь изображения</string>
<string name="image_editing_failed">Редактирование изображения не удалось</string> <string name="image_editing_failed">Редактирование изображения не удалось</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Редактировать изображение в:</string> <string name="edit_image_with">Редактировать изображение в:</string>
<string name="no_editor_found">Ни одного редактора изображений не найдено</string> <string name="no_editor_found">Ни одного редактора изображений не найдено</string>
<string name="unknown_file_location">Неизвестное местоположение файла</string> <string name="unknown_file_location">Неизвестное местоположение файла</string>

View file

@ -82,6 +82,7 @@
<string name="path">Cesta</string> <string name="path">Cesta</string>
<string name="invalid_image_path">Neplatná cesta</string> <string name="invalid_image_path">Neplatná cesta</string>
<string name="image_editing_failed">Úprava súboru zlyhala</string> <string name="image_editing_failed">Úprava súboru zlyhala</string>
<string name="file_edited_successfully">Súbor bol úspešne upravený</string>
<string name="edit_image_with">Upraviť súbor s:</string> <string name="edit_image_with">Upraviť súbor s:</string>
<string name="no_editor_found">Nebol nájdený žiadny editor</string> <string name="no_editor_found">Nebol nájdený žiadny editor</string>
<string name="unknown_file_location">Neznáme umiestnenie súboru</string> <string name="unknown_file_location">Neznáme umiestnenie súboru</string>

View file

@ -82,6 +82,7 @@
<string name="path">Pot</string> <string name="path">Pot</string>
<string name="invalid_image_path">Napačna pot</string> <string name="invalid_image_path">Napačna pot</string>
<string name="image_editing_failed">Urejanje slike ni uspelo</string> <string name="image_editing_failed">Urejanje slike ni uspelo</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Uredi sliko z:</string> <string name="edit_image_with">Uredi sliko z:</string>
<string name="no_editor_found">Ne najdem urejevalnika slik</string> <string name="no_editor_found">Ne najdem urejevalnika slik</string>
<string name="unknown_file_location">Neznana lokacija datoteke</string> <string name="unknown_file_location">Neznana lokacija datoteke</string>

View file

@ -82,6 +82,7 @@
<string name="path">Стаза</string> <string name="path">Стаза</string>
<string name="invalid_image_path">Неисправна стаза слике</string> <string name="invalid_image_path">Неисправна стаза слике</string>
<string name="image_editing_failed">Измена слике неуспешна</string> <string name="image_editing_failed">Измена слике неуспешна</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Измени слику са:</string> <string name="edit_image_with">Измени слику са:</string>
<string name="no_editor_found">Није пронађен едитор слика</string> <string name="no_editor_found">Није пронађен едитор слика</string>
<string name="unknown_file_location">Непозната локација датотеке</string> <string name="unknown_file_location">Непозната локација датотеке</string>

View file

@ -82,6 +82,7 @@
<string name="path">Sökväg</string> <string name="path">Sökväg</string>
<string name="invalid_image_path">Ogiltig bildsökväg</string> <string name="invalid_image_path">Ogiltig bildsökväg</string>
<string name="image_editing_failed">Bilden kunde inte redigeras</string> <string name="image_editing_failed">Bilden kunde inte redigeras</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Redigera bilden med:</string> <string name="edit_image_with">Redigera bilden med:</string>
<string name="no_editor_found">Ingen bildredigerare hittades</string> <string name="no_editor_found">Ingen bildredigerare hittades</string>
<string name="unknown_file_location">Okänd filplats</string> <string name="unknown_file_location">Okänd filplats</string>

View file

@ -82,6 +82,7 @@
<string name="path">Yol</string> <string name="path">Yol</string>
<string name="invalid_image_path">Geçersiz resim yolu</string> <string name="invalid_image_path">Geçersiz resim yolu</string>
<string name="image_editing_failed">Resim düzenleme başarısız</string> <string name="image_editing_failed">Resim düzenleme başarısız</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Resmi şununla düzenle:</string> <string name="edit_image_with">Resmi şununla düzenle:</string>
<string name="no_editor_found">Resim düzenleyici bulunamadı</string> <string name="no_editor_found">Resim düzenleyici bulunamadı</string>
<string name="unknown_file_location">Bilinmeyen dosya konumu</string> <string name="unknown_file_location">Bilinmeyen dosya konumu</string>

View file

@ -82,6 +82,7 @@
<string name="path">Шлях</string> <string name="path">Шлях</string>
<string name="invalid_image_path">Неприпустимий шлях до зображення</string> <string name="invalid_image_path">Неприпустимий шлях до зображення</string>
<string name="image_editing_failed">Не вдалося редагувати зображення</string> <string name="image_editing_failed">Не вдалося редагувати зображення</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Редагувати зображення за допомогою:</string> <string name="edit_image_with">Редагувати зображення за допомогою:</string>
<string name="no_editor_found">Не знайдено редакторів зображень</string> <string name="no_editor_found">Не знайдено редакторів зображень</string>
<string name="unknown_file_location">Невідоме розташування файлу</string> <string name="unknown_file_location">Невідоме розташування файлу</string>

View file

@ -82,6 +82,7 @@
<string name="path">路径</string> <string name="path">路径</string>
<string name="invalid_image_path">无效的图片路径</string> <string name="invalid_image_path">无效的图片路径</string>
<string name="image_editing_failed">图片编辑失败</string> <string name="image_editing_failed">图片编辑失败</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">编辑方式:</string> <string name="edit_image_with">编辑方式:</string>
<string name="no_editor_found">没有找到图片编辑器</string> <string name="no_editor_found">没有找到图片编辑器</string>
<string name="unknown_file_location">未知文件位置</string> <string name="unknown_file_location">未知文件位置</string>

View file

@ -82,6 +82,7 @@
<string name="path">路徑</string> <string name="path">路徑</string>
<string name="invalid_image_path">無效的圖片路徑</string> <string name="invalid_image_path">無效的圖片路徑</string>
<string name="image_editing_failed">圖片編輯失敗</string> <string name="image_editing_failed">圖片編輯失敗</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">編輯圖片:</string> <string name="edit_image_with">編輯圖片:</string>
<string name="no_editor_found">找不到圖片編輯器</string> <string name="no_editor_found">找不到圖片編輯器</string>
<string name="unknown_file_location">未知的檔案位置</string> <string name="unknown_file_location">未知的檔案位置</string>

View file

@ -82,6 +82,7 @@
<string name="path">路徑</string> <string name="path">路徑</string>
<string name="invalid_image_path">無效的圖片路徑</string> <string name="invalid_image_path">無效的圖片路徑</string>
<string name="image_editing_failed">圖片編輯失敗</string> <string name="image_editing_failed">圖片編輯失敗</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">編輯圖片:</string> <string name="edit_image_with">編輯圖片:</string>
<string name="no_editor_found">找不到圖片編輯器</string> <string name="no_editor_found">找不到圖片編輯器</string>
<string name="unknown_file_location">未知的檔案位置</string> <string name="unknown_file_location">未知的檔案位置</string>

View file

@ -82,6 +82,7 @@
<string name="path">Path</string> <string name="path">Path</string>
<string name="invalid_image_path">Invalid image path</string> <string name="invalid_image_path">Invalid image path</string>
<string name="image_editing_failed">Image editing failed</string> <string name="image_editing_failed">Image editing failed</string>
<string name="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Edit image with:</string> <string name="edit_image_with">Edit image with:</string>
<string name="no_editor_found">No image editor found</string> <string name="no_editor_found">No image editor found</string>
<string name="unknown_file_location">Unknown file location</string> <string name="unknown_file_location">Unknown file location</string>

View file

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

View file

@ -0,0 +1,55 @@
لا يحتوي التطبيق على إعلانات وأذونات غير ضرورية. نظراً لأن التطبيق لا يتطلب الوصول إلى الإنترنت أيضاً ، فإن خصوصيتك محمية.
-------------------------------------------------
<b>المعرض البسيط الـ Pro - الميزات</b>
-------------------------------------------------
معرض بدون إنترنت بدون إعلانات أو نوافذ منبثقة
• محرر صور (معرض البسيط) - قص، تدوير، تغيير حجم، رسم، فلاتر وغير ذلك
• لا حاجة للوصول إلى الإنترنت، مما يمنحك المزيد من الخصوصية والأمان
• لا توجد أذونات غير ضرورية مطلوبة
• البحث بسرعة عن الصور ومقاطع الفيديو والملفات
• فتح وعرض العديد من أنواع مختلفة من الصور والفيديو (RAW ، SVG ، بانورامية الخ)
• مجموعة متنوعة من الإيماءات البسيطة لتحرير الملفات وتنظيمها بسهولة
• الكثير من الطرق لفلترة الملفات وتجميعها وفرزها
• تخصيص مظهر للتطبيق
• متوفر بـ ٣٢ لغة
• وضع علامة علي الملفات كمفضلة للوصول السريع
• تمتع بحماية صورك ومقاطع الفيديو باستخدام نمط أو رمز PIN أو بصمة إصبع
• أستخدم رمز الـ PIN والنقش وبصمة الاصبع لحماية تشغيل التطبيق أو وظائف معينة أيضاً
• إستعادة الصور ومقاطع الفيديو المحذوفة من "سلة المحذوفات"
• تبديل رؤية الملفات لإخفاء الصور ومقاطع الفيديو
• إنشاء عرض شرائح قابل للتخصيص لملفاتك
• عرض معلومات تفصيلية لملفاتك (دقة الوضوح، قيم EXIF، إلخ)
• تطبيق المعرض هو مصدر مفتوح
… والكثير الكثير!
<b>محرر معرض الصور</b>
يساعد (تطبيق المعرض البسيط الـ Pro ) على تسهيل تحرير الصور بسرعة فائقة. قص الصور وقلبها وتدويرها وتغيير حجمها. إذا كنت تشعر بقدر أكبر من الإبداع، يمكنك إضافة الفلاتر والرسم على صورك!
<b>يدعم العديد من انواع الملفات</b>
على عكس بعض تطبيقات معرض الصور الأخري ومنظمي الصور ، يدعم (تطبيق المعرض البسيط الـ Pro )مجموعة كبيرة من أنواع الملفات المختلفة بما في ذلك JPEG و PNG و MP4 و MKV و RAW و SVG والصور البانورامية ومقاطع الفيديو البانورامية وغيرها الكثير.
<b>مدير معرض الصور القابل للتخصيص بدرجة كبيرة</b>
بدءاً من واجهة المستخدم وحتى أزرار الوظائف الموجودة على شريط الأدوات السفلي، يتسم (تطبيق المعرض البسيط الـ Pro ) بأنه قابل للتخصيص بدرجة كبيرة ويعمل بالطريقة التي تريدها في الإستخدام. لا يوجد أي مدير معرض آخر يتمتع بهذا النوع من المرونة! بفضل كونه مفتوح المصدر ، نحن متاحون أيضاً بـ 32 لغة!
<b>إسترداد الصور ومقاطع الفيديو المحذوفة</b>
حذف صورة أو فيديو ثمين عن طريق الخطأ لا تقلق نظراً لأن(تطبيق المعرض البسيط الـ Pro) يتميز بسلة محذوفات سهلة الاستخدام يمكنك من خلالها إسترداد الصور ومقاطع الفيديو المحذوفة بسهولة.
<b>حماية وإخفاء الصور والفيديوهات والملفات</b>
باستخدام رمز الـ PIN أو النمط أو الماسح الضوئي لبصمة الاصبع لجهازك يمكنك حماية الصور ومقاطع الفيديو والألبومات بأكملها وإخفائها. يمكنك حماية التطبيق نفسه أو وضع قفل الأمان علي وظائف معينة للتطبيق علي سبيل المثال، لا يمكنك حذف ملف دون إجراء مسح ضوئي لبصمة الاصبع، مما يساعد علي حماية ملفاتك من الحذف غير المقصود.
<b>أطلع على المجموعة الكاملة من الأدوات البسيطة هنا:</b>
https://www.simplemobiletools.com
<b>موقع مستقل لتطبيق المعرض البسيط الـ Pro : </b>
https://www.simplemobiletools.com/gallery
<b>الفيسبوك:</b>
https://www.facebook.com/simplemobiletools
<b>موقع رديت:</b>
https://www.reddit.com/r/SimpleMobileTools

View file

@ -0,0 +1 @@
تصفح ذكرياتك دون اي انقطاع.

View file

@ -0,0 +1 @@
المعرض البسيط الـ Pro - محرر ومدير الصور

View file

@ -0,0 +1,6 @@
* Remember the last used pattern at batch renaming
* Allow adding an incrementing number at pattern batch renaming
* Fixed some USB file related issues
* Fixed some fullscreen glitches at using split screen
* Allow using videos as custom folder covers
* Some stability and translation improvements

View file

@ -0,0 +1,2 @@
* Fixed some smaller glitches
* Added some stability and translation improvements

View file

@ -0,0 +1,7 @@
* Refreshed the thumbnails list views by removing the dividers
* Reordered some top menu items for consistency
* Added a Resize button to resize images directly from the fullscreen view
* Migrate album covers at export/import settings too
* Remember the last used path and file name at exporting settings
* Fixed a glitch with empty screen at direct subfolder grouping
* Many other stability, ux and translation improvements

View file

@ -1 +1 @@
Galeri luring tanpa iklan. Kelola, sunting, pulihkan dan lindungi foto & video Menampilkan semua kenangan anda tanpa gangguan.

View file

@ -1 +1 @@
Galeri luring tanpa iklan. Kelola, sunting, pulihkan dan lindungi foto & video Menampilkan semua kenangan anda tanpa gangguan.

View file

@ -1,6 +1,6 @@
Simple Gallery Pro é uma aplicação local para gerir fotos e vídeos. Pode organizar e editar as suas fotos, recuperar ficheiros através da reciclagem, proteger e ocultar ficheiros e ver imagens e vídeos disponíveis em vários formatos tais como RAW, SVG e muito mais. Simple Gallery Pro é uma aplicação local para gerir fotos e vídeos. Pode organizar e editar as suas fotos, recuperar ficheiros através da reciclagem, proteger e ocultar ficheiros e ver imagens e vídeos disponíveis em vários formatos tais como RAW, SVG e muito mais.
A aplicação não tem anúncios nem pede permissões desnecessárias. Uma vez que também não precisa de aceder à Internet, os seus ficheiros estão protegidos. A aplicação não tem anúncios nem permissões desnecessárias. Uma vez que também não precisa de aceder à Internet, os seus ficheiros estão protegidos.
------------------------------------------------- -------------------------------------------------
<b>SIMPLE GALLERY PRO FUNCIONALIDADES</b> <b>SIMPLE GALLERY PRO FUNCIONALIDADES</b>

View file

@ -1 +1 @@
Sem anúncios. Organize, edite, recupere e protega os seus vídeos e fotos Explore as suas memórias sem interrupções.

View file

@ -1 +1 @@
Галерея без рекламы. Управление, изменение, восстановление и защита фото и видео Просматривайте свои воспоминания без перерывов.