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
==========
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)*
----------------------------

View file

@ -15,8 +15,8 @@ android {
applicationId "com.simplemobiletools.gallery.pro"
minSdkVersion 21
targetSdkVersion 28
versionCode 271
versionName "6.10.4"
versionCode 275
versionName "6.10.7"
multiDexEnabled true
setProperty("archivesBaseName", "gallery")
vectorDrawables.useSupportLibrary = true
@ -62,7 +62,7 @@ android {
}
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 'androidx.multidex:multidex:2.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 'androidx.room:room-compiler:2.2.1'
implementation 'androidx.room:room-runtime:2.2.1'
annotationProcessor 'androidx.room:room-compiler:2.2.1'
kapt 'androidx.room:room-compiler:2.2.2'
implementation 'androidx.room:room-runtime:2.2.2'
annotationProcessor 'androidx.room:room-compiler:2.2.2'
}

View file

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

View file

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

View file

@ -13,6 +13,7 @@ import android.view.Menu
import android.view.MenuItem
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.RelativeLayout
import androidx.appcompat.widget.SearchView
import androidx.core.view.MenuItemCompat
import androidx.recyclerview.widget.GridLayoutManager
@ -680,6 +681,11 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
private fun setupGridLayoutManager() {
val layoutManager = media_grid.layoutManager as MyGridLayoutManager
(media_grid.layoutParams as RelativeLayout.LayoutParams).apply {
topMargin = 0
bottomMargin = 0
}
if (config.scrollHorizontally) {
layoutManager.orientation = RecyclerView.HORIZONTAL
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.orientation = RecyclerView.VERTICAL
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
}

View file

@ -71,6 +71,12 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
}
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
val uri = mUri.toString()
if (uri.startsWith("content:/") && uri.contains("/storage/")) {
@ -114,10 +120,10 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
if (mUri!!.scheme == "file") {
if (filename.contains('.')) {
bottom_actions.beGone()
handleLockedFolderOpening(mUri!!.path.getParentPath()) { success ->
handleLockedFolderOpening(mUri!!.path!!.getParentPath()) { success ->
if (success) {
rescanPaths(arrayListOf(mUri!!.path))
sendViewPagerIntent(mUri!!.path)
rescanPaths(arrayListOf(mUri!!.path!!))
sendViewPagerIntent(mUri!!.path!!)
}
finish()
}
@ -130,7 +136,7 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
bottom_actions.beGone()
handleLockedFolderOpening(path.getParentPath()) { success ->
if (success) {
rescanPaths(arrayListOf(mUri!!.path))
rescanPaths(arrayListOf(mUri!!.path!!))
sendViewPagerIntent(path)
}
finish()
@ -154,7 +160,7 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
}
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
bundle.putSerializable(MEDIUM, mMedium)
@ -272,7 +278,7 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
}
private fun showProperties() {
PropertiesDialog(this, mUri!!.path)
PropertiesDialog(this, mUri!!.path!!)
}
private fun isFileTypeVisible(path: String): Boolean {
@ -301,7 +307,7 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
private fun initBottomActionButtons() {
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()
}

View file

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

View file

@ -4,6 +4,8 @@ import android.content.Intent
import android.os.Bundle
import android.text.TextUtils
import android.view.Menu
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.simplemobiletools.commons.dialogs.*
import com.simplemobiletools.commons.extensions.*
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.showRecycleBinEmptyingDialog
import com.simplemobiletools.gallery.pro.helpers.*
import com.simplemobiletools.gallery.pro.models.AlbumCover
import kotlinx.android.synthetic.main.activity_settings.*
import java.io.File
import java.util.*
@ -690,9 +693,10 @@ class SettingsActivity : SimpleActivity() {
put(LAST_EDITOR_BRUSH_SIZE, config.lastEditorBrushSize)
put(LAST_CONFLICT_RESOLUTION, config.lastConflictResolution)
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_CONFLICT_RESOLUTION -> config.lastConflictResolution = value.toInt()
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.ValueAnimator
import android.annotation.SuppressLint
import android.annotation.TargetApi
import android.app.Activity
import android.content.Intent
import android.content.pm.ActivityInfo
@ -16,6 +17,7 @@ import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Icon
import android.media.ExifInterface
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.Handler
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.asynctasks.GetMediaAsynctask
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.SlideshowDialog
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.bottom_actions.*
import java.io.File
import java.io.OutputStream
import java.util.*
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_save_as).isVisible = rotationDegrees != 0
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_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()
@ -227,12 +232,30 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
R.id.menu_default_orientation -> toggleOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
R.id.menu_save_as -> saveImageAs()
R.id.menu_create_shortcut -> createShortcut()
R.id.menu_resize -> resizeImage()
R.id.menu_settings -> launchSettings()
else -> return super.onOptionsItemSelected(item)
}
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() {
val uri = intent.data
if (uri != null) {
@ -258,7 +281,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
}
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()) {
@ -666,9 +689,14 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
val path = medium.path
val drawable = resources.getDrawable(R.drawable.shortcut_image).mutate()
getShortcutImage(path, drawable) {
val intent = Intent(this, PhotoVideoActivity::class.java)
intent.action = Intent.ACTION_VIEW
intent.data = Uri.fromFile(File(path))
val intent = Intent(this, 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(this, path)
.setShortLabel(medium.name)
@ -804,6 +832,11 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
bottom_move.setOnClickListener {
moveFileTo()
}
bottom_resize.beVisibleIf(visibleBottomActions and BOTTOM_ACTION_RESIZE != 0 && currentMedium?.isImage() == true)
bottom_resize.setOnClickListener {
resizeImage()
}
}
private fun updateBottomActionIcons(medium: Medium?) {
@ -894,21 +927,62 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
}
}
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()
@TargetApi(Build.VERSION_CODES.N)
private fun resizeImage() {
val oldPath = getCurrentPath()
val originalSize = oldPath.getImageResolution() ?: return
ResizeWithPathDialog(this, originalSize, oldPath) { newSize, newPath ->
ensureBackgroundThread {
try {
var oldExif: ExifInterface? = null
if (isNougatPlus()) {
val inputStream = contentResolver.openInputStream(Uri.fromFile(File(oldPath)))
oldExif = ExifInterface(inputStream!!)
}
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() {
@ -1096,9 +1170,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
override fun fragmentClicked() {
mIsFullScreen = !mIsFullScreen
checkSystemUI()
if (isChromebook()) {
fullscreenToggled()
}
fullscreenToggled()
}
override fun videoEnded(): Boolean {
@ -1163,7 +1235,8 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
if (bottom_actions.isVisible()) {
bottom_actions.animate().alpha(newAlpha).start()
arrayOf(bottom_favorite, bottom_edit, bottom_share, bottom_delete, bottom_rotate, bottom_properties, bottom_change_orientation,
bottom_slideshow, bottom_show_on_map, bottom_toggle_file_visibility, bottom_rename).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
}
}

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 onActionModeCreated() {}
override fun onActionModeDestroyed() {}
override fun onViewRecycled(holder: ViewHolder) {
super.onViewRecycled(holder)
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 onActionModeCreated() {}
override fun onActionModeDestroyed() {}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_manage_folder, parent)
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 onActionModeCreated() {}
override fun onActionModeDestroyed() {}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_manage_folder, parent)
override fun onBindViewHolder(holder: ViewHolder, position: Int) {

View file

@ -1,5 +1,10 @@
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.Looper
import android.view.Menu
@ -14,16 +19,15 @@ import com.simplemobiletools.commons.dialogs.RenameDialog
import com.simplemobiletools.commons.dialogs.RenameItemDialog
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
import com.simplemobiletools.commons.helpers.isOreoPlus
import com.simplemobiletools.commons.models.FileDirItem
import com.simplemobiletools.commons.views.FastScroller
import com.simplemobiletools.commons.views.MyRecyclerView
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.extensions.*
import com.simplemobiletools.gallery.pro.helpers.SHOW_ALL
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.helpers.*
import com.simplemobiletools.gallery.pro.interfaces.MediaOperationsListener
import com.simplemobiletools.gallery.pro.models.Medium
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_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_create_shortcut).isVisible = isOreoPlus() && isOneItemSelected
checkHideBtnVisibility(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_copy_to -> copyMoveTo(true)
R.id.cab_move_to -> moveFilesTo()
R.id.cab_create_shortcut -> createShortcut()
R.id.cab_select_all -> selectAll()
R.id.cab_open_with -> openPath()
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 onActionModeCreated() {}
override fun onActionModeDestroyed() {}
override fun onViewRecycled(holder: ViewHolder) {
super.onViewRecycled(holder)
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() {
ensureBackgroundThread {
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_copy.isChecked = actions and BOTTOM_ACTION_COPY != 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)
@ -69,6 +70,8 @@ class ManageBottomActionsDialog(val activity: BaseSimpleActivity, val callback:
result += BOTTOM_ACTION_COPY
if (manage_bottom_actions_move.isChecked)
result += BOTTOM_ACTION_MOVE
if (manage_bottom_actions_resize.isChecked)
result += BOTTOM_ACTION_RESIZE
}
activity.config.visibleBottomActions = result

View file

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

View file

@ -251,7 +251,7 @@ fun Context.getDirectParentSubfolders(dirs: ArrayList<Directory>, currentPathPre
// /storage/emulated/0/Pictures/Screenshots,
// but /storage/emulated/0/Pictures is empty, still Pictures with the first folders thumbnails and proper other info
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)
val isSortingAscending = config.sorting and SORT_DESCENDING == 0
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.removeSuffix(hiddenString).trim()} $hiddenString"
} else {
it.name
it.name.removeSuffix(hiddenString).trim()
}
}

View file

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

View file

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

View file

@ -81,7 +81,7 @@ abstract class ViewPagerFragment : Fragment() {
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 {
val projection = arrayOf(MediaStore.Images.Media.DATE_MODIFIED)
@ -102,7 +102,12 @@ abstract class ViewPagerFragment : Fragment() {
private fun getLatLonAltitude(path: String): String {
var result = ""
val exif = ExifInterface(path)
val exif = try {
ExifInterface(path)
} catch (e: Exception) {
return ""
}
val latLon = FloatArray(2)
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()
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()
var showAll: Boolean
@ -133,7 +133,7 @@ class Config(context: Context) : BaseConfig(context) {
}
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()
fun addIncludedFolder(path: String) {
@ -155,7 +155,7 @@ class Config(context: Context) : BaseConfig(context) {
}
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()
var autoplayVideos: Boolean
@ -263,7 +263,7 @@ class Config(context: Context) : BaseConfig(context) {
else R.integer.media_columns_vertical_scroll)
var albumCovers: String
get() = prefs.getString(ALBUM_COVERS, "")
get() = prefs.getString(ALBUM_COVERS, "")!!
set(albumCovers) = prefs.edit().putString(ALBUM_COVERS, albumCovers).apply()
fun parseAlbumCovers(): ArrayList<AlbumCover> {
@ -320,7 +320,7 @@ class Config(context: Context) : BaseConfig(context) {
set(loopSlideshow) = prefs.edit().putBoolean(SLIDESHOW_LOOP, loopSlideshow).apply()
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()
var viewTypeFolders: Int
@ -348,7 +348,7 @@ class Config(context: Context) : BaseConfig(context) {
set(wasNewAppShown) = prefs.edit().putBoolean(WAS_NEW_APP_SHOWN, wasNewAppShown).apply()
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()
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
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()
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_COPY = 4096
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

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 selectionArgs = getSelectionArgsQuery(filterMedia).toTypedArray()
val cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
folders.addAll(parseCursor(cursor))
folders.addAll(parseCursor(cursor!!))
val config = context.config
val shouldShowHidden = config.shouldShowHidden

View file

@ -213,10 +213,25 @@
android:padding="@dimen/medium_margin"
android:src="@drawable/ic_move"
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_constraintStart_toEndOf="@+id/bottom_copy"
app:layout_constraintTop_toTopOf="parent"
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>

View file

@ -126,5 +126,13 @@
android:paddingBottom="@dimen/activity_margin"
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>
</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:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:paddingStart="@dimen/small_margin"
android:paddingTop="@dimen/small_margin">
android:paddingStart="@dimen/medium_margin"
android:paddingTop="@dimen/small_margin"
android:paddingBottom="@dimen/small_margin">
<com.simplemobiletools.gallery.pro.views.MySquareImageView
android:id="@+id/dir_thumbnail"
@ -35,7 +37,8 @@
android:layout_height="@dimen/selection_check_size"
android:layout_alignParentTop="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:contentDescription="@null"
android:padding="@dimen/tiny_margin"
@ -49,8 +52,8 @@
android:layout_toEndOf="@+id/dir_thumbnail"
android:ellipsize="end"
android:maxLines="1"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:paddingStart="@dimen/medium_margin"
android:paddingEnd="@dimen/medium_margin"
android:textColor="@android:color/white"
android:textSize="@dimen/bigger_text_size"/>
@ -64,7 +67,8 @@
android:alpha="0.4"
android:ellipsize="end"
android:maxLines="1"
android:paddingStart="6dp"
android:paddingStart="@dimen/medium_margin"
android:paddingEnd="@dimen/medium_margin"
android:textColor="@android:color/white"
android:textSize="@dimen/smaller_text_size"/>
@ -84,7 +88,7 @@
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginEnd="@dimen/small_margin"
android:layout_marginEnd="@dimen/medium_margin"
android:gravity="end"
android:orientation="horizontal"
android:paddingBottom="@dimen/tiny_margin">
@ -106,15 +110,6 @@
android:paddingBottom="@dimen/small_margin"
android:src="@drawable/ic_pin"
android:visibility="gone"/>
</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>

View file

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

View file

@ -36,6 +36,18 @@
android:icon="@drawable/ic_unhide_vector"
android:title="@string/unhide_folder"
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_empty_recycle_bin"
android:title="@string/empty_recycle_bin"
@ -56,15 +68,6 @@
android:id="@+id/cab_unlock"
android:title="@string/unlock_folder"
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
android:id="@+id/cab_change_cover_image"
android:title="@string/change_cover_image"
@ -79,11 +82,8 @@
</menu>
</item>
<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"/>
android:id="@+id/cab_select_all"
android:icon="@drawable/ic_select_all_vector"
android:title="@string/select_all"
app:showAsAction="ifRoom"/>
</menu>

View file

@ -53,16 +53,31 @@
android:icon="@drawable/ic_unhide_vector"
android:title="@string/unhide"
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
android:id="@+id/cab_edit"
android:icon="@drawable/ic_edit_vector"
android:title="@string/edit"
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
android:id="@+id/cab_add_to_favorites"
android:icon="@drawable/ic_star_off_vector"
@ -82,19 +97,8 @@
android:title="@string/fix_date_taken"
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
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"/>
android:id="@+id/cab_select_all"
android:icon="@drawable/ic_select_all_vector"
android:title="@string/select_all"
app:showAsAction="ifRoom"/>
</menu>

View file

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

View file

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

View file

@ -34,6 +34,52 @@
android:title="@string/rotate_one_eighty"/>
</menu>
</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
android:id="@+id/menu_add_to_favorites"
android:icon="@drawable/ic_star_off_vector"
@ -65,63 +111,23 @@
android:title="@string/use_default_orientation"/>
</menu>
</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
android:id="@+id/menu_print"
android:title="@string/print"
app:showAsAction="never"/>
<item
android:id="@+id/menu_create_shortcut"
android:title="@string/create_shortcut"
android:id="@+id/menu_resize"
android:title="@string/resize"
app:showAsAction="never"/>
<item
android:id="@+id/menu_show_on_map"
android:title="@string/show_on_map"
app:showAsAction="never"/>
<item
android:id="@+id/menu_slideshow"
android:icon="@drawable/ic_slideshow_vector"
android:title="@string/slideshow"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_settings"
android:title="@string/settings"

View file

@ -1,294 +1,297 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">الاستوديو البسيط</string>
<string name="app_launcher_name">الاستوديو</string>
<string name="app_name">الاستديو البسيط</string>
<string name="app_launcher_name">الاستديو</string>
<string name="edit">تعديل</string>
<string name="open_camera">فتح الكاميرا</string>
<string name="hidden">(مخفية)</string>
<string name="excluded">(excluded)</string>
<string name="hidden">(مخفي)</string>
<string name="excluded">(مستبعد)</string>
<string name="pin_folder">تثبيت المجلد</string>
<string name="unpin_folder">ازالة تثبيت الملف</string>
<string name="pin_to_the_top">Pin to the top</string>
<string name="show_all">عرض كل محتوى المجلدات</string>
<string name="all_folders">كل المجلدات</string>
<string name="unpin_folder">إلغاء تثبيت المجلد</string>
<string name="pin_to_the_top">تثبيت في الأعلى</string>
<string name="show_all">إظهار كل محتويات المجلدات</string>
<string name="all_folders">كل المحلات</string>
<string name="folder_view">التبديل إلى عرض المجلد</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="increase_column_count">زيادة عدد الأعمدة</string>
<string name="increase_column_count">ذيادة عدد الأعمدة</string>
<string name="reduce_column_count">تقليل عدد الأعمدة</string>
<string name="change_cover_image">تغيير صورة الغلاف</string>
<string name="select_photo">اختر الصور</string>
<string name="use_default">استخدم الافتراضي</string>
<string name="select_photo">تحديد صورة</string>
<string name="use_default">إستخدام كإفتراضي</string>
<string name="volume">الصوت</string>
<string name="brightness">السطوع</string>
<string name="lock_orientation">غلق الاتجاه</string>
<string name="brightness">السبوع</string>
<string name="lock_orientation">قفل الاتجاه</string>
<string name="unlock_orientation">فتح الاتجاه</string>
<string name="change_orientation">Change orientation</string>
<string name="force_portrait">Force portrait</string>
<string name="force_landscape">Force landscape</string>
<string name="use_default_orientation">Use default orientation</string>
<string name="fix_date_taken">Fix Date Taken value</string>
<string name="fixing">Fixing</string>
<string name="dates_fixed_successfully">Dates fixed successfully</string>
<string name="share_resized">Share a resized version</string>
<string name="upgraded_from_free">Hey,\n\nseems like you upgraded from the old free app. You can now uninstall the old version, which has an \'Upgrade to Pro\' button at the top of the app settings.\n\nYou will only have the Recycle bin items deleted, favorite items unmarked and you will also have to reset your app settings.\n\nThanks!</string>
<string name="switch_to_file_search">Switch to file search across all visible folders</string>
<string name="change_orientation">تغيير الاتجاه</string>
<string name="force_portrait">فرض الإتجاه العمودي</string>
<string name="force_landscape">فرض الإتجاه الأفقي</string>
<string name="use_default_orientation">إستخدام الإتجاه الافتراضي</string>
<string name="fix_date_taken">إصلاح تاريخ إلتقاط القيمة</string>
<string name="fixing">جارٍ الإصلاح</string>
<string name="dates_fixed_successfully">تم إصلاح التواريخ بنجاح</string>
<string name="share_resized">مشاركة الصورة الذي تم تغيير حجمها</string>
<string name="upgraded_from_free">مرحباً,\n\nيبدو أنك قمت بترقية التطبيق المجاني القديم. يمكنك الآن إلغاء تثبيت الإصدار القديم، الذي يحتوي على زر \'الترقية إلى Pro\' في أعلي إعدادات التطبيق.\n\nسيتم حذف عناصر سلة المحذوفات فقط، كما سيتم حذف العناصر المفضلة، كما سيتعين عليك إعادة ضبط إعدادات التطبيق .\n\nشكراً!</string>
<string name="switch_to_file_search">التبديل إلي البحث فى الملفات عبر كافة المجلدات المرئية</string>
<!-- Filter -->
<string name="filter_media">فلتر الميديا</string>
<string name="filter_media">فلترة الوسائط</string>
<string name="images">الصور</string>
<string name="videos">الفديوهات</string>
<string name="gifs">الصور المتحركة</string>
<string name="raw_images">RAW images</string>
<string name="svgs">SVGs</string>
<string name="portraits">Portraits</string>
<string name="no_media_with_filters">لم يتم العثور على ملفات وسائط مع الفلاتر المحددة</string>
<string name="change_filters_underlined"><u >تغيير الفلاتر</u></string>
<string name="videos">الفيديوهات</string>
<string name="gifs">الصور المتحركة (GIF)</string>
<string name="raw_images">صور الخام (RAW)</string>
<string name="svgs">صور الرسومات المتجهة (SVG)</string>
<string name="portraits">صور البورتريه</string>
<string name="no_media_with_filters">لم يتم العثور على ملفات وسائط مع الفلاتر المحددة.</string>
<string name="change_filters_underlined"><u>تغيير الفلاتر</u></string>
<!-- Hide / Exclude -->
<string name="hide_folder_description">هذه الميزة تخفي المجلد عن طريق إضافة ملف \'.nomedia\' بداخله، فإنه سيتم إخفاء كافة المجلدات الفرعية أيضا. يمكنك رؤيتها عن طريق تبديل الخيار \"إظهار العناصر المخفية\" في الإعدادات. استمر؟</string>
<string name="exclude">استبعد</string>
<string name="hide_folder_description">تقوم هذه الوظيفة باخفاء المجلد عن طريق إضافة ملف \'. nomedia \' إليه ، وستقوم باخفاء كل المجلدات الفرعية أيضًا. يمكنك رؤيتهم عن طريق تبديل خيار \'إظهار العناصر المخفية \' في الإعدادات. هل تريد المتابعة؟</string>
<string name="exclude">إستبعاد</string>
<string name="excluded_folders">المجلدات المستبعدة</string>
<string name="manage_excluded_folders">ادارة المجلدات المستبعدة</string>
<string name="exclude_folder_description">سيؤدي هذا إلى استبعاد التحديد مع مجلداته الفرعية من الاستوديو فقط. يمكنك إدارة المجلدات المستبعدة في الإعدادات</string>
<string name="exclude_folder_parent">هل تريد استبعاد أحد الوالدين بدلا من ذلك؟</string>
<string name="excluded_activity_placeholder">باستثناء المجلدات سيجعلها جنبا إلى جنب مع المجلدات الفرعية مخبأة فقط في الاستوديو ، فإنها لا تزال مرئية في تطبيقات أخرى.\n
\n
إذا كنت تريد إخفاءها من تطبيقات أخرى أيضا، استخدم ميزة الإخفاء</string>
<string name="remove_all">حذف الكل</string>
<string name="remove_all_description">هل تريد إزالة جميع المجلدات من القائمة المستبعدة؟ لن يؤدي هذا إلى حذف المجلدات</string>
<string name="manage_excluded_folders">إدارة المجلدات المستبعدة</string>
<string name="exclude_folder_description">سيؤدي ذلك الي إستبعاد التحديد مع المجلدات الفرعية من "الاستديو" فقط.. يمكنك إدارة المجلدات المستبعدة في الإعدادات.</string>
<string name="exclude_folder_parent">إستبعاد المجلد الأصل بدلاً من ذلك(المحدد)؟</string>
<string name="excluded_activity_placeholder">سيؤدي إستبعاد المجلدات الي جعلها مع المجلدات الفرعية مخفية في "الاستديو" فقط, وستظل مرئية في تطبيقات أخرى. \n\nإذا كنت تريد إخفاءها من التطبيقات الأخرى أيضاً ، فاستخدم وظيفة الإخفاء.</string>
<string name="remove_all">إزالة الكل</string>
<string name="remove_all_description">هل تريد إزالة كافة المجلدات من قائمة المجلدات المستبعدة ؟ لن يؤدي هذا إلي حذف المجلدات.</string>
<string name="hidden_folders">المجلدات المخفية</string>
<string name="manage_hidden_folders">إدارة المجلدات المخفية</string>
<string name="hidden_folders_placeholder">يبدو أنك لا تملك أي مجلد مخفي بملف \".nomedia\".</string>
<string name="hidden_folders_placeholder">يبدو أنه لا توجد لديك أي مجلدات مخفية بملف \".nomedia\".</string>
<!-- Include folders -->
<string name="include_folders">المجلدات المضمنة</string>
<string name="manage_included_folders">إدارة المجلدات المضمنة</string>
<string name="add_folder">اضافة مجلد</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="add_folder">إضافة مجلد</string>
<string name="included_activity_placeholder">إذا كان لديك بعض المجلدات التي تحتوي على الوسائط ، ولكن لم يتم التعرف عليها من قبل التطبيق، يمكنك إضافتها يدوياً هنا.\n\nلن تؤدي إضافة بعض العناصر هنا إلى إستبعاد أي مجلد آخر.</string>
<string name="no_media_add_included">لم يتم العثور علي أي ملفات وسائط.يمكنك حلها عن طريق إضافة المجلدات التي تحتوي على ملفات وسائط يدوياً.</string>
<!-- Resizing -->
<string name="resize">تحجيم</string>
<string name="resize_and_save">تغيير حجم التحديد وحفظ</string>
<string name="resize">تغيير الحجم</string>
<string name="resize_and_save">تغيير حجم التحديد والحفظ</string>
<string name="width">العرض</string>
<string name="height">الارتفاع</string>
<string name="keep_aspect_ratio">إبقاء نسبة القياس</string>
<string name="invalid_values">الرجاء إدخال درجة دقة صحيحة</string>
<string name="height">الإرتفاع</string>
<string name="keep_aspect_ratio">الحفاظ على نسبة الأبعاد</string>
<string name="invalid_values">يرجى إدخال دقة صالحة</string>
<!-- Editor -->
<string name="editor">تعديل</string>
<string name="save">حفظ</string>
<string name="rotate">التدوير</string>
<string name="rotate">تدوير</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="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">تعديل الصورة باستخدام:</string>
<string name="no_editor_found">لم يتم العثور على أي محرر للصور</string>
<string name="unknown_file_location">موقع ملف غير معروف</string>
<string name="error_saving_file">تعذر الكتابة فوق الملف المصدر</string>
<string name="unknown_file_location">موقع الملف غير معروف</string>
<string name="error_saving_file">لا يمكن إستبدال الملف الأصل</string>
<string name="rotate_left">تدوير لليسار</string>
<string name="rotate_right">تدوير لليمين</string>
<string name="rotate_one_eighty">تدوير 180º</string>
<string name="flip">قلب</string>
<string name="flip_horizontally">قلب أفقيا</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="other_aspect_ratio">Other</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
<string name="rotate_one_eighty">تدوير بزاوية 180º</string>
<string name="flip">انعكاس</string>
<string name="flip_horizontally">انعكاس أفقياً</string>
<string name="flip_vertically">انعكاس عمودياً</string>
<string name="free_aspect_ratio">حر</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
<string name="other_aspect_ratio">أخري</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
<!-- Set wallpaper -->
<string name="simple_wallpaper">خلفية بسيطة</string>
<string name="set_as_wallpaper">تعيين كخلفية الشاشة</string>
<string name="set_as_wallpaper_failed">فشل الإعداد كخلفية</string>
<string name="set_as_wallpaper_with">تعيين كخلفية بواسطة:</string>
<string name="setting_wallpaper">… جار تعيين الخلفية ...</string>
<string name="wallpaper_set_successfully">تم تعيبن الخلفية بنجاح</string>
<string name="portrait_aspect_ratio">صورة نسبة العرض إلى الارتفاع</string>
<string name="landscape_aspect_ratio">نسبة العرض إلى الارتفاع في المناظر الطبيعية</string>
<string name="set_as_wallpaper">تعيين كخلفية</string>
<string name="set_as_wallpaper_failed">فشل التعيين كخلفية</string>
<string name="set_as_wallpaper_with">تعيين كخلفية باستخدام:</string>
<string name="setting_wallpaper">جارٍ تعيين الخلفية…</string>
<string name="wallpaper_set_successfully">تم تعيين الخلفية بنجاح</string>
<string name="portrait_aspect_ratio">نسبة الأبعاد العمودية</string>
<string name="landscape_aspect_ratio">نسبة الأبعاد الأفقية</string>
<string name="home_screen">الشاشة الرئيسية</string>
<string name="lock_screen">شاشة القفل</string>
<string name="home_and_lock_screen">الرئيسية وشاشة القفل</string>
<string name="home_and_lock_screen">الشاشة الرئيسية وشاشة القفل</string>
<!-- Slideshow -->
<string name="slideshow">عرض الشرائح</string>
<string name="interval">الفاصل الزمني (بالثواني):</string>
<string name="include_photos">تضمين الصور</string>
<string name="include_videos">تضمين الفديو</string>
<string name="include_gifs">تضمين GIF</string>
<string name="include_videos">تضمين مقاطع الفيديو</string>
<string name="include_gifs">تضمين الصور المتحركة (Gif)</string>
<string name="random_order">ترتيب عشوائي</string>
<string name="move_backwards">ارجع للخلف</string>
<string name="move_backwards">تحريك للخلف</string>
<string name="loop_slideshow">حلقة عرض الشرائح</string>
<string name="animation">Animation</string>
<string name="no_animation">None</string>
<string name="fade">Fade</string>
<string name="slide">Slide</string>
<string name="slideshow_ended">انتهى عرض الشرائح</string>
<string name="no_media_for_slideshow">لم يتم العثور على وسائط لعرض الشرائح</string>
<string name="animation">الحركة</string>
<string name="no_animation">لا شيء</string>
<string name="fade">تلاشى</string>
<string name="slide">انزلاق</string>
<string name="slideshow_ended">أنتهى عرض الشرائح</string>
<string name="no_media_for_slideshow">لم يتم العثور علي أي وسائط لعرض الشرائح</string>
<!-- View types -->
<string name="change_view_type">تغيير طريقة العرض</string>
<string name="change_view_type">تغيير نوع العرض</string>
<string name="grid">الشبكة</string>
<string name="list">القائمة</string>
<string name="group_direct_subfolders">Group direct subfolders</string>
<string name="group_direct_subfolders">تجميع المجلدات الفرعية مباشرة</string>
<!-- Grouping at media thumbnails -->
<string name="group_by">Group by</string>
<string name="do_not_group_files">Do not group files</string>
<string name="by_folder">Folder</string>
<string name="by_last_modified">Last modified</string>
<string name="by_last_modified_daily">Last modified (daily)</string>
<string name="by_last_modified_monthly">Last modified (monthly)</string>
<string name="by_date_taken">Date taken</string>
<string name="by_date_taken_daily">Date taken (daily)</string>
<string name="by_date_taken_monthly">Date taken (monthly)</string>
<string name="by_file_type">File type</string>
<string name="by_extension">Extension</string>
<string name="grouping_and_sorting">Please note that grouping and sorting are 2 independent fields</string>
<string name="group_by">تجميع حسب</string>
<string name="do_not_group_files">عدم تجميع الملفات</string>
<string name="by_folder">المجلد</string>
<string name="by_last_modified">آخر تعديل</string>
<string name="by_last_modified_daily">آخر تعديل (يومياً)</string>
<string name="by_last_modified_monthly">آخر تعديل (شهرياً)</string>
<string name="by_date_taken">تاريخ الإلتقاط</string>
<string name="by_date_taken_daily">تاريخ الإلتقاط (يومياً)</string>
<string name="by_date_taken_monthly">آخر تعديل (شهرياً)</string>
<string name="by_file_type">نوع الملف</string>
<string name="by_extension">الإمتداد</string>
<string name="grouping_and_sorting">يرجى ملاحظة أن التجميع والفرز هما حقلان مستقلان</string>
<!-- Widgets -->
<string name="folder_on_widget">Folder shown on the widget:</string>
<string name="show_folder_name">Show folder name</string>
<string name="folder_on_widget">المجلد الظاهر فى الويدجت:</string>
<string name="show_folder_name">إظهار اسم المجلد</string>
<!-- Settings -->
<string name="autoplay_videos">تشغيل الفديوهات تلقائيا</string>
<string name="remember_last_video_position">Remember last video playback position</string>
<string name="toggle_filename">تبديل رؤية اسم الملف</string>
<string name="loop_videos">حلقة الفيديو</string>
<string name="animate_gifs">عرض صور GIF المتحركة في الصور المصغرة</string>
<string name="max_brightness">أقصى سطوع عند عرض الوسائط</string>
<string name="crop_thumbnails">قص الصور المصغرة الى مستطيلات</string>
<string name="show_thumbnail_video_duration">Show video durations</string>
<string name="screen_rotation_by">تدوير وسائط ملء الشاشة بواسطة</string>
<string name="screen_rotation_system_setting">اعدادات النظام</string>
<string name="autoplay_videos">تشغيل مقاطع الفيديو تلقائياً</string>
<string name="remember_last_video_position">تذكر آخر موضع لتشغيل الفيديو</string>
<string name="toggle_filename">تبديل رؤية إسم الملف</string>
<string name="loop_videos">حلقة مقاطع الفيديو</string>
<string name="animate_gifs">تحريك الصور المتحركة (Gif) في الصور المصغرة</string>
<string name="max_brightness">أقصى سطوع عند عرض وسائط ملء الشاشة</string>
<string name="crop_thumbnails">إقتصاص الصور المصغرة إلى مربعات</string>
<string name="show_thumbnail_video_duration">إظهار مدة الفيديوهات</string>
<string name="screen_rotation_by">تدوير وسائط ملء الشاشة باستخدام</string>
<string name="screen_rotation_system_setting">إعدادات النظام</string>
<string name="screen_rotation_device_rotation">تدوير الجهاز</string>
<string name="screen_rotation_aspect_ratio">الابعاد</string>
<string name="black_background_at_fullscreen">اجعل الخلفية وشريط الحالة باللون الاسود عند عرض المحتوى في كامل الشاشة</string>
<string name="scroll_thumbnails_horizontally">قم بتمرير الصور المصغرة أفقيا</string>
<string name="hide_system_ui_at_fullscreen">إخفاء واجهة النظام تلقائيا عند العرض في وضع ملء الشاشة</string>
<string name="delete_empty_folders">احذف المجلدات الفارغة بعد حذف محتواها</string>
<string name="allow_photo_gestures">السماح بالتحكم في سطوع الصورة باستخدام الإيماءات الرأسية</string>
<string name="allow_video_gestures">السماح بالتحكم في صوت الفيديو والسطوع بالإيماءات العمودية</string>
<string name="show_media_count">إظهار عدد لوسائط المجلد على طريقة العرض الرئيسية</string>
<string name="show_extended_details">عرض تفاصيل موسعة على وسائط ملء الشاشة</string>
<string name="manage_extended_details">إدارة المجلدات المستبعدة</string>
<string name="screen_rotation_aspect_ratio">نسبة الأبعاد</string>
<string name="black_background_at_fullscreen">جعل الخلفية باللون الأسود في وسائط ملء الشاشة</string>
<string name="scroll_thumbnails_horizontally">تمرير الصور المصغرة أفقياً</string>
<string name="hide_system_ui_at_fullscreen">إخفاء واجهة مستخدم النظام تلقائياً في وضع ملء الشاشة</string>
<string name="delete_empty_folders">حذف المجلدات الفارغة بعد حذف محتواها</string>
<string name="allow_photo_gestures">السماح بالتحكم في سطوع الصور باستخدام الإيماءات العمودية</string>
<string name="allow_video_gestures">السماح بالتحكم في مستوي صوت الفيديو والسطوع باستخدام الإيماءات العمودية</string>
<string name="show_media_count">إظهار عدد وسائط المجلد في العرض الرئيسي</string>
<string name="show_extended_details">إظهار التفاصيل الموسعة عبر وسائط ملء الشاشة</string>
<string name="manage_extended_details">إدارة التفاصيل الموسعة</string>
<string name="one_finger_zoom">السماح بتكبير الوسائط بأصبع واحد في وضع ملء الشاشة</string>
<string name="allow_instant_change">السماح بتغيير الوسائط على الفور من خلال النقر على جوانب الشاشة</string>
<string name="allow_deep_zooming_images">Allow deep zooming images</string>
<string name="allow_instant_change">السماح بتغيير الوسائط علي الفور من خلال النقر علي جوانب الشاشة</string>
<string name="allow_deep_zooming_images">السماح بالتكبير العميق للصور</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_recycle_bin">Show the Recycle Bin at the folders screen</string>
<string name="deep_zoomable_images">Deep zoomable images</string>
<string name="show_highest_quality">Show images in the highest possible quality</string>
<string name="show_recycle_bin_last">Show the Recycle Bin as the last item on the main screen</string>
<string name="allow_down_gesture">Allow closing the fullscreen view with a down gesture</string>
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
<string name="show_notch">Show a notch if available</string>
<string name="allow_rotating_gestures">Allow rotating images with gestures</string>
<string name="file_loading_priority">File loading priority</string>
<string name="speed">Speed</string>
<string name="compromise">Compromise</string>
<string name="avoid_showing_invalid_files">Avoid showing invalid files</string>
<string name="show_image_file_types">Show image file types</string>
<string name="show_at_bottom">إظهار بعض أزرار الإجراءات في أسفل الشاشة</string>
<string name="show_recycle_bin">إظهار "سلة المحذوفات" في شاشة المجلدات</string>
<string name="deep_zoomable_images">الصور القابلة للتكبير العميق</string>
<string name="show_highest_quality">عرض الصور بأعلى جودة ممكنة</string>
<string name="show_recycle_bin_last">إظهار "سلة المحذوفات" كعنصر آخر علي الشاشة الرئيسية</string>
<string name="allow_down_gesture">السماح بإغلاق عرض ملء الشاشة باستخدام إيماءه لأسفل</string>
<string name="allow_one_to_one_zoom">السماح بالتكبير 1:1 باستخدام النقر مزدوجاّ</string>
<string name="open_videos_on_separate_screen">فتح مقاطع الفيديو دائماً علي شاشة منفصلة مع إيماءات أفقية جديدة</string>
<string name="show_notch">عرض النوتش إذا كان متوفر</string>
<string name="allow_rotating_gestures">السماح بتدوير الصور باستخدام الإيماءات</string>
<string name="file_loading_priority">أولوية تحميل الملفات</string>
<string name="speed">بسرعة</string>
<string name="compromise">إختيار وسط</string>
<string name="avoid_showing_invalid_files">تجنب إظهار الملفات غير الصالحة</string>
<string name="show_image_file_types">إظهار أنواع ملفات الصور</string>
<!-- Setting sections -->
<string name="thumbnails">المصغرات</string>
<string name="thumbnails">الصور المصغرة</string>
<string name="fullscreen_media">وسائط ملء الشاشة</string>
<string name="extended_details">تفاصيل موسعة</string>
<string name="bottom_actions">Bottom actions</string>
<string name="extended_details">التفاصيل الموسعة</string>
<string name="bottom_actions"> إجراءات الأزرار السفلية</string>
<!-- Bottom actions -->
<string name="manage_bottom_actions">Manage visible bottom actions</string>
<string name="toggle_favorite">Toggle favorite</string>
<string name="toggle_file_visibility">Toggle file visibility</string>
<string name="manage_bottom_actions">إدارة إجراءات الأزرار المرئية</string>
<string name="toggle_favorite">تبديل المفضل</string>
<string name="toggle_file_visibility">تبديل رؤية الملف</string>
<!-- FAQ -->
<string name="faq_1_title">كيف يمكنني جعل الاستوديو البسيط معرض الأجهزة الافتراضي؟</string>
<string name="faq_1_text">أولاً ، عليك العثور على المعرض الافتراضي حاليًا في قسم التطبيقات في إعدادات جهازك ، ابحث عن زر يقول مثلا \"فتح افتراضيًا\" ، وانقر عليه ، ثم حدد \"مسح الإعدادات الافتراضية\". في المرة التالية التي ستحاول فيها فتح صورة أو فيديو ، يجب أن تذهب الى منتقي التطبيقات ، حيث يمكنك اختيار تطبيق الاستوديو البسيط وجعله التطبيق الافتراضي.</string>
<string name="faq_2_title">أغلقت التطبيق بكلمة مرور ، لكني نسيت ذلك. ماذا افعل؟</string>
<string name="faq_2_text">يمكنك حلها بطريقتين. يمكنك إما إعادة تثبيت التطبيق ، أو العثور على التطبيق في إعدادات جهازك وتحديد \"مسح البيانات\". سيقوم بإعادة ضبط جميع إعداداتك ، ولن يزيل أي ملفات وسائط.</string>
<string name="faq_3_title">كيف يمكنني جعل الألبوم يظهر دائمًا في الجزء العلوي؟</string>
<string name="faq_3_text">يمكنك الضغط لفترة طويلة على الألبوم المطلوب وتحديد أيقونة الدبوس في الإجراء ، والتي سوف تثبيته إلى الأعلى. يمكنك تثبيت عدة مجلدات أيضًا ، وسيتم ترتيب العناصر المثبتة حسب طريقة الفرز الافتراضية.</string>
<string name="faq_4_title">كيف يمكنني تقديم مقاطع فيديو بسرعة؟</string>
<string name="faq_4_text">You can 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_5_title">ما الفرق بين إخفاء واستبعاد مجلد؟</string>
<string name="faq_5_text">يمنع الاستبعاد من عرض المجلد في الاستوديو البسيط فقط ، بينما يقوم بإخفاء بالعمل على مستوى النظام ككل ويقوم بإخفاء المجلد من المعارض الأخرى أيضًا. وهو يعمل عن طريق إنشاء ملف \".nomedia\" فارغ في المجلد المحدد ، والذي يمكنك بعد ذلك إزالته مع أي مدير ملفات أيضًا.</string>
<string name="faq_6_title">لماذا تظهر المجلدات التي تحتوي على ملصقات أو ملصقات موسيقى تغطيها؟</string>
<string name="faq_6_text">يمكن أن يحدث ذلك سترى بعض ألبومات غير عادية تظهر. يمكنك استبعادها بسهولة عن طريق الضغط عليها وتحديد \"استبعاد\". في مربع الحوار التالي ، يمكنك بعد ذلك تحديد المجلد الأصلي ، ومن المحتمل أن يؤدي ذلك إلى منع ظهور الألبومات الأخرى ذات الصلة أيضًا.</string>
<string name="faq_7_title">لا يظهر مجلد به صور ، فماذا أفعل؟</string>
<string name="faq_7_text">يمكن أن يكون ذلك لأسباب متعددة ، ولكن حلها أمر سهل. أذهب إلى الإعدادات -> إدارة المجلدات المضمنة ، اضغط علامة الزائد وانتقل إلى المجلد المطلوب.</string>
<string name="faq_8_title">ماذا لو كنت أرغب في رؤية بعض المجلدات الخاصة؟</string>
<string name="faq_8_text">لا يؤدي إضافة مجلد في \"المجلدات المضمنة\" إلى استبعاد أي شيء تلقائيًا. ما يمكنك فعله هو الذهاب إلى الإعدادات -> إدارة المجلدات المستبعدة ، واستبعاد المجلد الجذر \"/\" ، ثم إضافة المجلدات المطلوبة في الإعدادات -> إدارة المجلدات المضمنة. سيؤدي ذلك إلى إظهار المجلدات المحددة فقط ، حيث أن الاستبعاد والتضمين يكونان متكررين ، وإذا تم استبعاد أحد المجلدات وإدراجه ، فسيظهر.</string>
<string name="faq_10_title">هل يمكنني قص الصور باستخدام هذا التطبيق؟</string>
<string name="faq_10_text">نعم ، يمكنك اقتصاص الصور في المحرر ، عن طريق سحب زوايا الصورة. يمكنك الوصول إلى المحرر إما عن طريق الضغط لفترة طويلة على صورة مصغرة وتحديد تحرير ، أو تحديد تحرير من العرض بملء الشاشة.</string>
<string name="faq_11_title">Can I somehow group media file thumbnails?</string>
<string name="faq_11_text">Sure, just use the \"Group by\" menu item while at the thumbnails view. You can group files by multiple criteria, including Date Taken. If you use the \"Show all folders content\" function you can group them by folders too.</string>
<string name="faq_12_title">Sorting by Date Taken doesn\'t seem to work properly, how can I fix it?</string>
<string name="faq_12_text">It is most likely caused by the files being copied from somewhere. You can fix it by selecting the file thumbnails and selecting \"Fix Date Taken value\".</string>
<string name="faq_13_title">I see some color banding on the images. How can I improve the quality?</string>
<string name="faq_13_text">The current solution for displaying images works fine in the vast majority of cases, but if you want even better image quality, you can enable the \"Show images in the highest possible quality\" at the app settings, in the \"Deep zoomable images\" section.</string>
<string name="faq_14_title">I have hidden a file/folder. How can I unhide it?</string>
<string name="faq_14_text">You can either press the \"Temporarily show hidden items\" menu item at the main screen, or toggle \"Show hidden items\" in the app settings to see the hidden item. If you want to unhide it, just long press it and select \"Unhide\". Folders are hidden by adding a hidden \".nomedia\" file into them, you can delete the file with any file manager too.</string>
<string name="faq_15_title">Why does the app take up so much space?</string>
<string name="faq_15_text">App cache can take up to 250MB, it ensures quicker image loading. If the app is taking up even more space, it is most likely caused by you having items in the Recycle Bin. Those files count to the app size. You can clear the Recycle bin by opening it and deleting all files, or from the app settings. Every file in the Bin is deleted automatically after 30 days.</string>
<string name="faq_1_title">كيف يمكنني جعل تطبيق الاستديو معرض الجهاز الإفتراضي ؟</string>
<string name="faq_1_text">أولا، يجب عليك العثور على المعرض الإفتراضي الحالي في قسم "التطبيقات" من إعدادات الجهاز، أبحث عن زر يقول شيئاً مثل \"فتح كافتراضي/"، ثم أنقر عليه، ثم حدد \"مسح الإعدادات الإفتراضية\". في المرة القادمة التي ستحاول فيها فتح صورة أو مقطع فيديو يجب أن تري إختيار تطبيق، حيث يمكنك تحديد تطبيق "الاستديو" وجعله التطبيق الإفتراضي.</string>
<string name="faq_2_title">لقد أغلقت التطبيق بكلمة مرور، لكنني نسيت ذلك. ماذا يمكنني أن أفعل؟</string>
<string name="faq_2_text">يمكنك حلها بطريقتين. يمكنك أما إعادة تثبيت التطبيق أو أبحث عن التطبيق في اعدادات جهازك وحدد \"مسح البيانات\". سيتم إعادة تعيين كل إعداداتك، ولن يقوم بإزالة أي ملفات وسائط.</string>
<string name="faq_3_title">كيف يمكنني جعل ألبوماً يظهر دائماً في الأعلى ؟</string>
<string name="faq_3_text">يمكنك الضغط مطولاً علي الألبوم المطلوب وحدد أيقونة "التثبيت" في قائمة الإجراءات، التي ستقوم بتثبيته في الأعلي. يمكنك تثبيت مجلدات متعددة أيضا، سيتم فرز العناصر المثبتة حسب طريقة الفرز الإفتراضية.</string>
<string name="faq_4_title">كيف يمكنني تسريع مقاطع الفيديو؟</string>
<string name="faq_4_text">يمكنك إما سحب إصبعك أفقياً على مشغل الفيديو، أو النقر على نصوص المدة الحالية أو أقصي مدة النصوص بالقرب من شريط التحكم (seekbar) . هذا سوف يحرك الفيديو إما إلى الخلف، أو إلى الأمام.</string>
<string name="faq_5_title">ما هو الفرق بين إخفاء المجلد وإستبعاده ؟</string>
<string name="faq_5_text">الإستبعاد يمنع عرض المجلد فقط في الاستديو، بينما الإخفاء يعمل على مستوى النظام ويخفي المجلد من المعارض الأخرى أيضاً. يعمل عن طريق إنشاء ملف فارغ \ ".nomedia \" في المجلد المحدد ، والذي يمكنك إزالته بعد ذلك بواسطة أي مدير ملفات أيضًا.</string>
<string name="faq_6_title">لماذا تظهر المجلدات مع صورة غلاف الموسيقى أو الملصقات؟</string>
<string name="faq_6_text">قد يحدث أن ترى بعض الألبومات غير العادية تظهر. يمكنك بسهولة إستبعادهم بالضغط مطولاً عليهم وأختر إستبعاد. في مربع الحوار التالي يمكنك بعد ذلك تحديد المجلد الاصل، من المحتمل ان يمنع ظهور الألبومات الأخري ذات الصلة أيضاً.</string>
<string name="faq_7_title">المجلد الذي به صور لا يظهر، أو لا يظهر كل العناصر. ماذا يمكنني أن أفعل؟</string>
<string name="faq_7_text">قد يكون لهذا عدة أسباب، ولكن حل هذه المشكلة أمر سهل. فقط أذهب إلى الإعدادات -> إدارة المجلدات المضمنة، وأختر علامة زائد (+) وأنتقل إلى المجلد المطلوب.</string>
<string name="faq_8_title">ماذا أفعل لو كنت أريد بعض المجلدات المحددة مرئية فقط؟</string>
<string name="faq_8_text">إضافة مجلد إلى المجلدات المضمنة لا يستبعد تلقائياً أي شيء. ما يمكنك القيام به هو الإنتقال إلى الإعدادات -> إدارة المجلدات المستبعدة، إستبعاد المجلد الأصل \"/\"، ثم إضافة المجلدات المطلوبة في الإعدادات -> إدارة المجلدات المضمنة. سيؤدي ذلك إلى جعل المجلدات المحددة مرئية فقط، حيث أن كل من الاستبعاد والتضمين منعكسين وإذا كان أحد المجلدات مستبعداً ومضمن معاً، فسوف يظهر.</string>
<string name="faq_10_title">هل يمكنني إقتصاص الصور باستخدام هذا التطبيق؟</string>
<string name="faq_10_text">نعم ، يمكنك إقتصاص الصور في المحرر ، عن طريق سحب زوايا الصورة. يمكنك الوصول إلى المحرر إما بالضغط مطولاً على الصورة المصغرة وأختر تعديل ، أو أختر تعديل من عرض ملء الشاشة.</string>
<string name="faq_11_title">هل يمكنني بطريقة ما تجميع الصور المصغرة لملف الوسائط؟</string>
<string name="faq_11_text">بالتأكيد، فقط تستخدم عنصر القائمة \"تجميع حسب\" أثناء عرض الصور المصغرة.يمكنك تجميع الملفات حسب معايير متعددة، بما في ذلك تاريخ الإلتقاط. إذا كنت تستخدم وظيفة \"إظهار كل محتويات المجلدات\" فيمكنك تجميعها حسب المجلدات أيضا.</string>
<string name="faq_12_title">يبدو ان الفرز حسب تاريخ الإلتقاط لا يعمل بشكل صحيح، كيف يمكنني إصلاحه؟</string>
<string name="faq_12_text">غالباً ما يكون ذلك بسبب الملفات التي يتم نسخها من مكان ما. يمكنك اصلاحه عن طريق تحديد الصور المصغرة للملف وأختر \"إصلاح تاريخ إلتقاط القيمة\".</string>
<string name="faq_13_title">أرى بعض التباين اللونى على الصور. كيف يمكنني تحسين الجودة؟</string>
<string name="faq_13_text">الحل الحالي لعرض الصور يعمل بشكل جيد في الأغلبية العظمي للحالات، ولكن إذا كنت تريد تحسين جودة الصور، يمكنك تمكين خيار \"عرض الصور بأعلي جودة ممكنة\" من اعدادات التطبيق، من قسم \"الصور العميقة القابلة للتكبير\".</string>
<string name="faq_14_title">لقد قمت بإخفاء ملف/مجلد. كيف يمكنني إظهاره؟</string>
<string name="faq_14_text">يمكنك أما أن تضغط علي عنصر القائمة "إظهار العناصر المخفية مؤقتاً" علي الشاشه الرئيسية أو تفعيل خيار \"إظهار العناصر المخفية" في إعدادات التطبيق لرؤية العنصر المخفي. إذا كنت تريد إظهاره ، فقط أضغط مطولاً عليه وأختر \" إظهار\". يتم إخفاء المجلدات عن طريق إضافة ملف مخفي ". nomedia/" إليهم، يمكنك حذف الملف بواسطة أي مدير ملفات أيضاً.</string>
<string name="faq_15_title">لماذا يشغل التطبيق مساحة كبيرة؟</string>
<string name="faq_15_text">يمكن لذاكرة التخزين المؤقت للتطبيق أن تصل سعتها إلى 250 ميجابايت، ، مما يضمن سرعة تحميل الصور. إذا كان التطبيق يشغل مساحة أكبر ، فمن المحتمل أن يكون ذلك بسبب وجود عناصر في "سلة المحذوفات". يتم حساب هذه الملفات إلى حجم التطبيق. يمكنك مسح "سلة المحذوفات" عن طريق فتحها وحذف جميع الملفات ، أو من إعدادات التطبيق. يتم حذف كل ملف في "سلة المحذوفات" تلقائياً بعد 30 يوماً.</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it. -->
<string name="app_title">Simple Gallery Pro - Photo Manager &amp; Editor</string>
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
<string name="app_title">المعرض البسيط الـ Pro - محرر ومدير الصور</string>
<!-- Short description has to have less than 80 chars -->
<string name="app_short_description">Browse your memories without any interruptions.</string>
<string name="app_short_description">تصفح ذكرياتك دون اي انقطاع.</string>
<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>
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!
<b>يدعم العديد من انواع الملفات</b>
على عكس بعض تطبيقات معرض الصور الأخري ومنظمي الصور ، يدعم (تطبيق المعرض البسيط الـ Pro )مجموعة كبيرة من أنواع الملفات المختلفة بما في ذلك JPEG و PNG و MP4 و MKV و RAW و SVG والصور البانورامية ومقاطع الفيديو البانورامية وغيرها الكثير.
<b>RECOVER DELETED PHOTOS &amp; VIDEOS</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.
<b>مدير معرض الصور القابل للتخصيص بدرجة كبيرة</b>
بدءاً من واجهة المستخدم وحتى أزرار الوظائف الموجودة على شريط الأدوات السفلي، يتسم (تطبيق المعرض البسيط الـ Pro ) بأنه قابل للتخصيص بدرجة كبيرة ويعمل بالطريقة التي تريدها في الإستخدام. لا يوجد أي مدير معرض آخر يتمتع بهذا النوع من المرونة! بفضل كونه مفتوح المصدر ، نحن متاحون أيضاً بـ 32 لغة!
<b>PROTECT &amp; HIDE PHOTOS, VIDEOS &amp; FILES</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.
<b>إسترداد الصور ومقاطع الفيديو المحذوفة</b>
حذف صورة أو فيديو ثمين عن طريق الخطأ لا تقلق نظراً لأن(تطبيق المعرض البسيط الـ Pro) يتميز بسلة محذوفات سهلة الاستخدام يمكنك من خلالها إسترداد الصور ومقاطع الفيديو المحذوفة بسهولة.
<b>Check out the full suite of Simple Tools here:</b>
<b>حماية وإخفاء الصور والفيديوهات والملفات</b>
باستخدام رمز الـ PIN أو النمط أو الماسح الضوئي لبصمة الاصبع لجهازك يمكنك حماية الصور ومقاطع الفيديو والألبومات بأكملها وإخفائها. يمكنك حماية التطبيق نفسه أو وضع قفل الأمان علي وظائف معينة للتطبيق علي سبيل المثال، لا يمكنك حذف ملف دون إجراء مسح ضوئي لبصمة الاصبع، مما يساعد علي حماية ملفاتك من الحذف غير المقصود.
<b>أطلع على المجموعة الكاملة من الأدوات البسيطة هنا:</b>
https://www.simplemobiletools.com
<b>Facebook:</b>
<b>موقع مستقل لتطبيق المعرض البسيط الـ Pro : </b>
https://www.simplemobiletools.com/gallery
<b>صفحة الفيسبوك:</b>
https://www.facebook.com/simplemobiletools
<b>Reddit:</b>
<b>موقع رديت:</b>
https://www.reddit.com/r/SimpleMobileTools
</string>

View file

@ -82,6 +82,7 @@
<string name="path">Path</string>
<string name="invalid_image_path">Invalid image path</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="no_editor_found">No image editor found</string>
<string name="unknown_file_location">Unknown file location</string>

View file

@ -82,6 +82,7 @@
<string name="path">Ruta</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="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Editar imatge utilitzant:</string>
<string name="no_editor_found">No sha trobat cap editor dimatges</string>
<string name="unknown_file_location">Ubicació de larxiu desconeguda</string>

View file

@ -82,6 +82,7 @@
<string name="path">Cesta</string>
<string name="invalid_image_path">Neplatná cesta</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="no_editor_found">Nebyl nalezen žádný editor</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="invalid_image_path">Ugyldig sti til billede</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="no_editor_found">Der blev ikke fundet en editor til billedbehandling</string>
<string name="unknown_file_location">Ukendt filplacering</string>

View file

@ -82,6 +82,7 @@
<string name="path">Pfad</string>
<string name="invalid_image_path">Ungültiger Dateipfad.</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="no_editor_found">Keine Bildeditor-App gefunden.</string>
<string name="unknown_file_location">Unbekannter Dateipfad.</string>

View file

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

View file

@ -82,6 +82,7 @@
<string name="path">Ruta</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="file_edited_successfully">File edited successfully</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="unknown_file_location">Ubicación del archivo desconocida</string>

View file

@ -82,6 +82,7 @@
<string name="path">Polku</string>
<string name="invalid_image_path">Kuvan polkua ei ole</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="no_editor_found">Kuvamuokkainta ei löytynyt</string>
<string name="unknown_file_location">Tuntematon tiedostosijainti</string>

View file

@ -82,6 +82,7 @@
<string name="path">Emplacement</string>
<string name="invalid_image_path">Emplacement invalide</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="no_editor_found">Aucun éditeur d\'image trouvé</string>
<string name="unknown_file_location">Emplacement du fichier inconnu</string>
@ -151,11 +152,11 @@
<!-- Settings -->
<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="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="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="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="screen_rotation_by">Orientation de l\'affichage</string>
<string name="screen_rotation_system_setting">Paramètres système</string>
@ -199,7 +200,7 @@
<!-- Bottom actions -->
<string name="manage_bottom_actions">Gérer la barre d\'actions</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 -->
<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="invalid_image_path">Ruta a imaxe non válida</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="no_editor_found">Non se atopou ningún editor</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="invalid_image_path">Neispravna putanja slike</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="no_editor_found">Nije pronađen uređivač slika</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="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="file_edited_successfully">File edited successfully</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="unknown_file_location">Ismeretlen fájl hely</string>

View file

@ -82,6 +82,7 @@
<string name="path">Jalur</string>
<string name="invalid_image_path">Jalur gambar tidak valid</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="no_editor_found">Tidak ditemukan aplikasi penyunting gambar</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 -->
<string name="app_title">Simple Gallery Pro - Pengelola &amp; Penyunting Foto</string>
<!-- 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">
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="invalid_image_path">Jalur gambar tidak valid</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="no_editor_found">Tidak ditemukan aplikasi penyunting gambar</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 -->
<string name="app_title">Simple Gallery Pro - Pengelola &amp; Penyunting Foto</string>
<!-- 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">
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="invalid_image_path">Percorso dell\'immagine non valido</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="no_editor_found">Editor delle immagini non trovato</string>
<string name="unknown_file_location">Posizione del file sconosciuta</string>

View file

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

View file

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

View file

@ -82,6 +82,7 @@
<string name="path">Kelias</string>
<string name="invalid_image_path">Netinkamas atvaizdo kelias</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="no_editor_found">Nerasta atvaizdų redagavimo programėlės</string>
<string name="unknown_file_location">Nežinoma bylos vieta</string>

View file

@ -82,6 +82,7 @@
<string name="path">Bane</string>
<string name="invalid_image_path">Ugyldig bildebane</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="no_editor_found">Ingen bilderedigeringsapp funnet</string>
<string name="unknown_file_location">Ukjent filplassering</string>

View file

@ -82,6 +82,7 @@
<string name="path">Pad</string>
<string name="invalid_image_path">Ongeldig pad naar 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="no_editor_found">Geen app gevonden voor fotobewerking</string>
<string name="unknown_file_location">Onbekende bestandslocatie</string>

View file

@ -82,6 +82,7 @@
<string name="path">Ś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="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Edytuj obraz w:</string>
<string name="no_editor_found">Nie znalazłem edytora zdjęć</string>
<string name="unknown_file_location">Nieznana lokalizacja pliku</string>

View file

@ -82,6 +82,7 @@
<string name="path">Caminho</string>
<string name="invalid_image_path">Caminho inválido</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="no_editor_found">Editor não encontrado</string>
<string name="unknown_file_location">Localização desconhecida</string>

View file

@ -82,6 +82,7 @@
<string name="path">Caminho</string>
<string name="invalid_image_path">Caminho inválido</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="no_editor_found">Editor não encontrado</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 -->
<string name="app_title">Simple Gallery Pro - Editor e gestor de fotos</string>
<!-- 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">
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>

View file

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

View file

@ -82,6 +82,7 @@
<string name="path">Cesta</string>
<string name="invalid_image_path">Neplatná cesta</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="no_editor_found">Nebol nájdený žiadny editor</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="invalid_image_path">Napačna pot</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="no_editor_found">Ne najdem urejevalnika slik</string>
<string name="unknown_file_location">Neznana lokacija datoteke</string>

View file

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

View file

@ -82,6 +82,7 @@
<string name="path">Sö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="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Redigera bilden med:</string>
<string name="no_editor_found">Ingen bildredigerare hittades</string>
<string name="unknown_file_location">Okänd filplats</string>

View file

@ -82,6 +82,7 @@
<string name="path">Yol</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="file_edited_successfully">File edited successfully</string>
<string name="edit_image_with">Resmi şununla düzenle:</string>
<string name="no_editor_found">Resim düzenleyici bulunamadı</string>
<string name="unknown_file_location">Bilinmeyen dosya konumu</string>

View file

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

View file

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

View file

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

View file

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

View file

@ -82,6 +82,7 @@
<string name="path">Path</string>
<string name="invalid_image_path">Invalid image path</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="no_editor_found">No image editor found</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.
buildscript {
ext.kotlin_version = '1.3.50'
ext.kotlin_version = '1.3.61'
repositories {
google()
@ -9,7 +9,7 @@ buildscript {
}
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"
// 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.
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>

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 @@
Галерея без рекламы. Управление, изменение, восстановление и защита фото и видео
Просматривайте свои воспоминания без перерывов.