22
CHANGELOG.md
|
@ -1,6 +1,28 @@
|
|||
Changelog
|
||||
==========
|
||||
|
||||
Version 6.14.1 *(2020-04-14)*
|
||||
----------------------------
|
||||
|
||||
* Fixed some SD card file related glitches
|
||||
* Improved some third party intent handling
|
||||
* Added some translation and stability improvements
|
||||
|
||||
Version 6.14.0 *(2020-03-19)*
|
||||
----------------------------
|
||||
|
||||
* Properly delete playing videos
|
||||
* Removed the Manage Hidden Folders settings button on Android 10+, it no longer works
|
||||
* Added many changes under the hood in preparation for handling Scoped Storage soon
|
||||
* Do not require the Storage permission at some third party intents
|
||||
|
||||
Version 6.13.4 *(2020-03-08)*
|
||||
----------------------------
|
||||
|
||||
* Fixed some hiding, excluding and including related glitches
|
||||
* Flipped Pin and Properties icons at the top menu for better user experience
|
||||
* Avoid showing Portrait image folders at the main folders screen
|
||||
|
||||
Version 6.13.3 *(2020-03-01)*
|
||||
----------------------------
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Simple Gallery
|
||||
|
||||
<img alt="Logo" src="app/src/main/res/mipmap-xxxhdpi/ic_launcher.png" width="80" />
|
||||
<img alt="Logo" src="fastlane/metadata/android/en-US/images/icon.png" width="120" />
|
||||
|
||||
Simple Gallery Pro is a highly customizable lightweight gallery loved by millions of people for its great user experience. Organize and edit your photos, recover deleted files with the recycle bin, protect & hide files and easily view a huge variety of different photo and video formats including RAW, SVG, GIF, panoramic and much more.
|
||||
|
||||
|
|
|
@ -10,15 +10,15 @@ if (keystorePropertiesFile.exists()) {
|
|||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion 28
|
||||
buildToolsVersion "28.0.3"
|
||||
compileSdkVersion 29
|
||||
buildToolsVersion "29.0.3"
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.simplemobiletools.gallery.pro"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 28
|
||||
versionCode 298
|
||||
versionName "6.13.3"
|
||||
targetSdkVersion 29
|
||||
versionCode 301
|
||||
versionName "6.14.1"
|
||||
multiDexEnabled true
|
||||
setProperty("archivesBaseName", "gallery-$versionCode")
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
|
@ -78,12 +78,12 @@ android {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.simplemobiletools:commons:5.22.18'
|
||||
implementation 'com.simplemobiletools:commons:5.25.16'
|
||||
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'
|
||||
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.19'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4'
|
||||
implementation 'com.google.android.exoplayer:exoplayer-core:2.9.6'
|
||||
implementation 'com.google.vr:sdk-panowidget:1.180.0'
|
||||
implementation 'com.google.vr:sdk-videowidget:1.180.0'
|
||||
|
@ -92,13 +92,13 @@ dependencies {
|
|||
implementation 'com.squareup.picasso:picasso:2.71828'
|
||||
implementation 'com.caverock:androidsvg-aar:1.3'
|
||||
implementation 'com.github.tibbi:gestureviews:512f929d82'
|
||||
implementation 'com.github.tibbi:subsampling-scale-image-view:d404e74e39'
|
||||
implementation 'com.github.tibbi:subsampling-scale-image-view:381878c078'
|
||||
|
||||
kapt 'com.github.bumptech.glide:compiler:4.10.0'
|
||||
|
||||
kapt 'androidx.room:room-compiler:2.2.2'
|
||||
implementation 'androidx.room:room-runtime:2.2.2'
|
||||
annotationProcessor 'androidx.room:room-compiler:2.2.2'
|
||||
kapt 'androidx.room:room-compiler:2.2.5'
|
||||
implementation 'androidx.room:room-runtime:2.2.5'
|
||||
annotationProcessor 'androidx.room:room-compiler:2.2.5'
|
||||
}
|
||||
|
||||
// Apply the PESDKPlugin
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_launcher_name"
|
||||
android:roundIcon="@mipmap/ic_launcher"
|
||||
android:requestLegacyExternalStorage="true"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme"
|
||||
tools:replace="android:label">
|
||||
|
|
|
@ -11,6 +11,7 @@ import android.media.ExifInterface
|
|||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.provider.MediaStore
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
|
@ -27,7 +28,6 @@ import com.bumptech.glide.request.target.Target
|
|||
import com.simplemobiletools.commons.dialogs.ColorPickerDialog
|
||||
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE
|
||||
import com.simplemobiletools.commons.helpers.REAL_FILE_PATH
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
import com.simplemobiletools.commons.helpers.isNougatPlus
|
||||
|
@ -75,8 +75,8 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
private val CROP_ROTATE_NONE = 0
|
||||
private val CROP_ROTATE_ASPECT_RATIO = 1
|
||||
|
||||
private lateinit var uri: Uri
|
||||
private lateinit var saveUri: Uri
|
||||
private var uri: Uri? = null
|
||||
private var resizeWidth = 0
|
||||
private var resizeHeight = 0
|
||||
private var drawColor = 0
|
||||
|
@ -90,6 +90,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
private var wasDrawCanvasPositioned = false
|
||||
private var oldExif: ExifInterface? = null
|
||||
private var filterInitialBitmap: Bitmap? = null
|
||||
private var originalUri: Uri? = null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
@ -99,14 +100,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
return
|
||||
}
|
||||
|
||||
handlePermission(PERMISSION_WRITE_STORAGE) {
|
||||
if (it) {
|
||||
initEditActivity()
|
||||
} else {
|
||||
toast(R.string.no_storage_permissions)
|
||||
finish()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
|
@ -146,7 +140,8 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
}
|
||||
|
||||
uri = intent.data!!
|
||||
if (uri.scheme != "file" && uri.scheme != "content") {
|
||||
originalUri = uri
|
||||
if (uri!!.scheme != "file" && uri!!.scheme != "content") {
|
||||
toast(R.string.unknown_file_location)
|
||||
finish()
|
||||
return
|
||||
|
@ -160,14 +155,14 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
else -> Uri.fromFile(File(realPath))
|
||||
}
|
||||
} else {
|
||||
(getRealPathFromURI(uri))?.apply {
|
||||
(getRealPathFromURI(uri!!))?.apply {
|
||||
uri = Uri.fromFile(File(this))
|
||||
}
|
||||
}
|
||||
|
||||
saveUri = when {
|
||||
intent.extras?.containsKey(MediaStore.EXTRA_OUTPUT) == true -> intent.extras!!.get(MediaStore.EXTRA_OUTPUT) as Uri
|
||||
else -> uri
|
||||
else -> uri!!
|
||||
}
|
||||
|
||||
isCropIntent = intent.extras?.get(CROP) == "true"
|
||||
|
@ -209,7 +204,15 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
.load(uri)
|
||||
.apply(options)
|
||||
.listener(object : RequestListener<Bitmap> {
|
||||
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Bitmap>?, isFirstResource: Boolean) = false
|
||||
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Bitmap>?, isFirstResource: Boolean): Boolean {
|
||||
if (uri != originalUri) {
|
||||
uri = originalUri
|
||||
Handler().post {
|
||||
loadDefaultImageView()
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
override fun onResourceReady(bitmap: Bitmap?, model: Any?, target: Target<Bitmap>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
|
||||
val currentFilter = getFiltersAdapter()?.getCurrentFilter()
|
||||
|
@ -304,7 +307,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
var inputStream: InputStream? = null
|
||||
try {
|
||||
if (isNougatPlus()) {
|
||||
inputStream = contentResolver.openInputStream(uri)
|
||||
inputStream = contentResolver.openInputStream(uri!!)
|
||||
oldExif = ExifInterface(inputStream!!)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
|
|
|
@ -9,6 +9,8 @@ import android.net.Uri
|
|||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.provider.MediaStore
|
||||
import android.provider.MediaStore.Images
|
||||
import android.provider.MediaStore.Video
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.ViewGroup
|
||||
|
@ -736,24 +738,24 @@ 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 == 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 == Video.Media.CONTENT_TYPE)
|
||||
|
||||
private fun isGetAnyContentIntent(intent: Intent) = isGetContentIntent(intent) && intent.type == "*/*"
|
||||
|
||||
private fun isSetWallpaperIntent(intent: Intent?) = intent?.action == Intent.ACTION_SET_WALLPAPER
|
||||
|
||||
private fun hasImageContentData(intent: Intent) = (intent.data == MediaStore.Images.Media.EXTERNAL_CONTENT_URI ||
|
||||
intent.data == MediaStore.Images.Media.INTERNAL_CONTENT_URI)
|
||||
private fun hasImageContentData(intent: Intent) = (intent.data == Images.Media.EXTERNAL_CONTENT_URI ||
|
||||
intent.data == Images.Media.INTERNAL_CONTENT_URI)
|
||||
|
||||
private fun hasVideoContentData(intent: Intent) = (intent.data == MediaStore.Video.Media.EXTERNAL_CONTENT_URI ||
|
||||
intent.data == MediaStore.Video.Media.INTERNAL_CONTENT_URI)
|
||||
private fun hasVideoContentData(intent: Intent) = (intent.data == Video.Media.EXTERNAL_CONTENT_URI ||
|
||||
intent.data == Video.Media.INTERNAL_CONTENT_URI)
|
||||
|
||||
private fun isImageType(intent: Intent) = (intent.type?.startsWith("image/") == true || intent.type == MediaStore.Images.Media.CONTENT_TYPE)
|
||||
private fun isImageType(intent: Intent) = (intent.type?.startsWith("image/") == true || intent.type == Images.Media.CONTENT_TYPE)
|
||||
|
||||
private fun isVideoType(intent: Intent) = (intent.type?.startsWith("video/") == true || intent.type == MediaStore.Video.Media.CONTENT_TYPE)
|
||||
private fun isVideoType(intent: Intent) = (intent.type?.startsWith("video/") == true || intent.type == Video.Media.CONTENT_TYPE)
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
|
||||
if (resultCode == Activity.RESULT_OK) {
|
||||
|
@ -901,7 +903,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
return
|
||||
}
|
||||
|
||||
val sorting = config.getFileSorting(directory.path)
|
||||
val sorting = config.getFolderSorting(directory.path)
|
||||
val grouping = config.getFolderGrouping(directory.path)
|
||||
val getProperDateTaken = config.directorySorting and SORT_BY_DATE_TAKEN != 0 ||
|
||||
sorting and SORT_BY_DATE_TAKEN != 0 ||
|
||||
|
@ -987,7 +989,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
return
|
||||
}
|
||||
|
||||
val sorting = config.getFileSorting(folder)
|
||||
val sorting = config.getFolderSorting(folder)
|
||||
val grouping = config.getFolderGrouping(folder)
|
||||
val getProperDateTaken = config.directorySorting and SORT_BY_DATE_TAKEN != 0 ||
|
||||
sorting and SORT_BY_DATE_TAKEN != 0 ||
|
||||
|
|
|
@ -159,7 +159,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
|
|||
media_empty_text_label.setTextColor(config.textColor)
|
||||
media_empty_text.setTextColor(getAdjustedPrimaryColor())
|
||||
|
||||
if (mMedia.isEmpty() || config.getFileSorting(mPath) and SORT_BY_RANDOM == 0) {
|
||||
if (mMedia.isEmpty() || config.getFolderSorting(mPath) and SORT_BY_RANDOM == 0) {
|
||||
tryLoadGallery()
|
||||
}
|
||||
}
|
||||
|
@ -413,7 +413,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
|
|||
media_horizontal_fastscroller.isHorizontal = true
|
||||
media_horizontal_fastscroller.beVisibleIf(allowHorizontalScroll)
|
||||
|
||||
val sorting = config.getFileSorting(if (mShowAll) SHOW_ALL else mPath)
|
||||
val sorting = config.getFolderSorting(if (mShowAll) SHOW_ALL else mPath)
|
||||
if (allowHorizontalScroll) {
|
||||
media_horizontal_fastscroller.allowBubbleDisplay = config.showInfoBubble
|
||||
media_horizontal_fastscroller.setViews(media_grid, media_refresh_layout) {
|
||||
|
@ -437,7 +437,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
|
|||
}
|
||||
|
||||
private fun checkLastMediaChanged() {
|
||||
if (isDestroyed || config.getFileSorting(mPath) and SORT_BY_RANDOM != 0) {
|
||||
if (isDestroyed || config.getFolderSorting(mPath) and SORT_BY_RANDOM != 0) {
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -4,17 +4,14 @@ import android.content.res.Configuration
|
|||
import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
||||
import android.graphics.Color
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.Window
|
||||
import android.widget.RelativeLayout
|
||||
import com.google.vr.sdk.widgets.pano.VrPanoramaEventListener
|
||||
import com.google.vr.sdk.widgets.pano.VrPanoramaView
|
||||
import com.simplemobiletools.commons.extensions.beVisible
|
||||
import com.simplemobiletools.commons.extensions.onGlobalLayout
|
||||
import com.simplemobiletools.commons.extensions.showErrorToast
|
||||
import com.simplemobiletools.commons.extensions.toast
|
||||
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
import com.simplemobiletools.gallery.pro.R
|
||||
import com.simplemobiletools.gallery.pro.extensions.*
|
||||
|
@ -48,14 +45,7 @@ open class PanoramaPhotoActivity : SimpleActivity() {
|
|||
explore.setImageResource(if (isExploreEnabled) R.drawable.ic_explore_vector else R.drawable.ic_explore_off_vector)
|
||||
}
|
||||
|
||||
handlePermission(PERMISSION_WRITE_STORAGE) {
|
||||
if (it) {
|
||||
checkIntent()
|
||||
} else {
|
||||
toast(R.string.no_storage_permissions)
|
||||
finish()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
|
@ -144,7 +134,12 @@ open class PanoramaPhotoActivity : SimpleActivity() {
|
|||
|
||||
for (i in 0..10) {
|
||||
try {
|
||||
bitmap = BitmapFactory.decodeFile(path, options)
|
||||
bitmap = if (path.startsWith("content://")) {
|
||||
val inputStream = contentResolver.openInputStream(Uri.parse(path))
|
||||
BitmapFactory.decodeStream(inputStream)
|
||||
} else {
|
||||
BitmapFactory.decodeFile(path, options)
|
||||
}
|
||||
break
|
||||
} catch (e: OutOfMemoryError) {
|
||||
options.inSampleSize *= 2
|
||||
|
|
|
@ -13,7 +13,6 @@ import android.widget.SeekBar
|
|||
import com.google.vr.sdk.widgets.video.VrVideoEventListener
|
||||
import com.google.vr.sdk.widgets.video.VrVideoView
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE
|
||||
import com.simplemobiletools.gallery.pro.R
|
||||
import com.simplemobiletools.gallery.pro.extensions.*
|
||||
import com.simplemobiletools.gallery.pro.helpers.MIN_SKIP_LENGTH
|
||||
|
@ -44,14 +43,7 @@ open class PanoramaVideoActivity : SimpleActivity(), SeekBar.OnSeekBarChangeList
|
|||
supportActionBar?.hide()
|
||||
|
||||
checkNotchSupport()
|
||||
handlePermission(PERMISSION_WRITE_STORAGE) {
|
||||
if (it) {
|
||||
checkIntent()
|
||||
} else {
|
||||
toast(R.string.no_storage_permissions)
|
||||
finish()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
|
@ -99,9 +91,14 @@ open class PanoramaVideoActivity : SimpleActivity(), SeekBar.OnSeekBarChangeList
|
|||
try {
|
||||
val options = VrVideoView.Options()
|
||||
options.inputType = VrVideoView.Options.TYPE_MONO
|
||||
val uri = if (path.startsWith("content://")) {
|
||||
Uri.parse(path)
|
||||
} else {
|
||||
Uri.fromFile(File(path))
|
||||
}
|
||||
|
||||
vr_video_view.apply {
|
||||
loadVideo(Uri.fromFile(File(path)), options)
|
||||
loadVideo(uri, options)
|
||||
pauseVideo()
|
||||
|
||||
setFlingingEnabled(true)
|
||||
|
|
|
@ -150,9 +150,10 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
|
|||
showSystemUI(true)
|
||||
val bundle = Bundle()
|
||||
val file = File(mUri.toString())
|
||||
val intentType = intent.type ?: ""
|
||||
val type = when {
|
||||
filename.isVideoFast() -> TYPE_VIDEOS
|
||||
filename.isGif() -> TYPE_GIFS
|
||||
filename.isVideoFast() || intentType.startsWith("video/") -> TYPE_VIDEOS
|
||||
filename.isGif() || intentType.equals("image/gif", true) -> TYPE_GIFS
|
||||
filename.isRawFast() -> TYPE_RAWS
|
||||
filename.isSvg() -> TYPE_SVGS
|
||||
file.isPortrait() -> TYPE_PORTRAITS
|
||||
|
|
|
@ -212,7 +212,7 @@ class SearchActivity : SimpleActivity(), MediaOperationsListener {
|
|||
media_horizontal_fastscroller.isHorizontal = true
|
||||
media_horizontal_fastscroller.beVisibleIf(allowHorizontalScroll)
|
||||
|
||||
val sorting = config.getFileSorting(SHOW_ALL)
|
||||
val sorting = config.getFolderSorting(SHOW_ALL)
|
||||
if (allowHorizontalScroll) {
|
||||
media_horizontal_fastscroller.allowBubbleDisplay = config.showInfoBubble
|
||||
media_horizontal_fastscroller.setViews(media_grid) {
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.simplemobiletools.gallery.pro.activities
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.text.TextUtils
|
||||
|
@ -18,9 +19,11 @@ 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.io.InputStream
|
||||
import java.util.*
|
||||
|
||||
class SettingsActivity : SimpleActivity() {
|
||||
private val PICK_IMPORT_SOURCE_INTENT = 1
|
||||
private var mRecycleBinContentSize = 0L
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
|
@ -94,6 +97,14 @@ class SettingsActivity : SimpleActivity() {
|
|||
return super.onCreateOptionsMenu(menu)
|
||||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
|
||||
super.onActivityResult(requestCode, resultCode, resultData)
|
||||
if (requestCode == PICK_IMPORT_SOURCE_INTENT && resultCode == Activity.RESULT_OK && resultData != null && resultData.data != null) {
|
||||
val inputStream = contentResolver.openInputStream(resultData.data!!)
|
||||
parseFile(inputStream)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupSectionColors() {
|
||||
val adjustedPrimaryColor = getAdjustedPrimaryColor()
|
||||
arrayListOf(visibility_label, videos_label, thumbnails_label, scrolling_label, fullscreen_media_label, security_label,
|
||||
|
@ -159,6 +170,7 @@ class SettingsActivity : SimpleActivity() {
|
|||
}
|
||||
|
||||
private fun setupManageHiddenFolders() {
|
||||
settings_manage_hidden_folders_holder.beVisibleIf(!isQPlus())
|
||||
settings_manage_hidden_folders_holder.setOnClickListener {
|
||||
handleHiddenFolderPasswordProtection {
|
||||
startActivity(Intent(this, HiddenFoldersActivity::class.java))
|
||||
|
@ -700,20 +712,32 @@ class SettingsActivity : SimpleActivity() {
|
|||
|
||||
private fun setupImportSettings() {
|
||||
settings_import_holder.setOnClickListener {
|
||||
if (isQPlus()) {
|
||||
Intent(Intent.ACTION_GET_CONTENT).apply {
|
||||
addCategory(Intent.CATEGORY_OPENABLE)
|
||||
type = "text/plain"
|
||||
startActivityForResult(this, PICK_IMPORT_SOURCE_INTENT)
|
||||
}
|
||||
} else {
|
||||
handlePermission(PERMISSION_READ_STORAGE) {
|
||||
if (it) {
|
||||
FilePickerDialog(this) {
|
||||
ensureBackgroundThread {
|
||||
try {
|
||||
parseFile(it)
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
parseFile(File(it).inputStream())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun parseFile(path: String) {
|
||||
val inputStream = File(path).inputStream()
|
||||
private fun parseFile(inputStream: InputStream?) {
|
||||
if (inputStream == null) {
|
||||
toast(R.string.unknown_error_occurred)
|
||||
return
|
||||
}
|
||||
|
||||
var importedItems = 0
|
||||
val configValues = LinkedHashMap<String, Any>()
|
||||
inputStream.bufferedReader().use {
|
||||
|
|
|
@ -3,7 +3,8 @@ package com.simplemobiletools.gallery.pro.activities
|
|||
import android.annotation.SuppressLint
|
||||
import android.database.ContentObserver
|
||||
import android.net.Uri
|
||||
import android.provider.MediaStore
|
||||
import android.provider.MediaStore.Images
|
||||
import android.provider.MediaStore.Video
|
||||
import android.view.WindowManager
|
||||
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
||||
import com.simplemobiletools.commons.dialogs.FilePickerDialog
|
||||
|
@ -70,8 +71,8 @@ open class SimpleActivity : BaseSimpleActivity() {
|
|||
|
||||
protected fun registerFileUpdateListener() {
|
||||
try {
|
||||
contentResolver.registerContentObserver(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, true, observer)
|
||||
contentResolver.registerContentObserver(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, true, observer)
|
||||
contentResolver.registerContentObserver(Images.Media.EXTERNAL_CONTENT_URI, true, observer)
|
||||
contentResolver.registerContentObserver(Video.Media.EXTERNAL_CONTENT_URI, true, observer)
|
||||
} catch (ignored: Exception) {
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,7 +24,6 @@ import com.google.android.exoplayer2.upstream.DataSource
|
|||
import com.google.android.exoplayer2.upstream.DataSpec
|
||||
import com.google.android.exoplayer2.video.VideoListener
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
import com.simplemobiletools.gallery.pro.R
|
||||
import com.simplemobiletools.gallery.pro.extensions.*
|
||||
|
@ -63,15 +62,7 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
|
|||
setContentView(R.layout.activity_video_player)
|
||||
setupOrientation()
|
||||
checkNotchSupport()
|
||||
|
||||
handlePermission(PERMISSION_WRITE_STORAGE) {
|
||||
if (it) {
|
||||
initPlayer()
|
||||
} else {
|
||||
toast(R.string.no_storage_permissions)
|
||||
finish()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
|
|
|
@ -20,7 +20,7 @@ import android.net.Uri
|
|||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.provider.MediaStore
|
||||
import android.provider.MediaStore.Images
|
||||
import android.text.Html
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
|
@ -261,10 +261,10 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
if (uri != null) {
|
||||
var cursor: Cursor? = null
|
||||
try {
|
||||
val proj = arrayOf(MediaStore.Images.Media.DATA)
|
||||
val proj = arrayOf(Images.Media.DATA)
|
||||
cursor = contentResolver.query(uri, proj, null, null, null)
|
||||
if (cursor?.moveToFirst() == true) {
|
||||
mPath = cursor.getStringValue(MediaStore.Images.Media.DATA)
|
||||
mPath = cursor.getStringValue(Images.Media.DATA)
|
||||
}
|
||||
} finally {
|
||||
cursor?.close()
|
||||
|
@ -1033,7 +1033,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
mIgnoredPaths.add(fileDirItem.path)
|
||||
val media = mMediaFiles.filter { !mIgnoredPaths.contains(it.path) } as ArrayList<ThumbnailItem>
|
||||
runOnUiThread {
|
||||
gotMedia(media)
|
||||
gotMedia(media, true)
|
||||
}
|
||||
|
||||
movePathsInRecycleBin(arrayListOf(path)) {
|
||||
|
@ -1055,7 +1055,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
mIgnoredPaths.add(fileDirItem.path)
|
||||
val media = mMediaFiles.filter { !mIgnoredPaths.contains(it.path) } as ArrayList<ThumbnailItem>
|
||||
runOnUiThread {
|
||||
gotMedia(media)
|
||||
gotMedia(media, true)
|
||||
}
|
||||
|
||||
tryDeleteFileDirItem(fileDirItem, false, true) {
|
||||
|
@ -1095,16 +1095,20 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
}
|
||||
|
||||
private fun refreshViewPager() {
|
||||
if (config.getFileSorting(mDirectory) and SORT_BY_RANDOM == 0) {
|
||||
if (config.getFolderSorting(mDirectory) and SORT_BY_RANDOM == 0) {
|
||||
GetMediaAsynctask(applicationContext, mDirectory, false, false, mShowAll) {
|
||||
gotMedia(it)
|
||||
}.execute()
|
||||
}
|
||||
}
|
||||
|
||||
private fun gotMedia(thumbnailItems: ArrayList<ThumbnailItem>) {
|
||||
private fun gotMedia(thumbnailItems: ArrayList<ThumbnailItem>, ignorePlayingVideos: Boolean = false) {
|
||||
val media = thumbnailItems.asSequence().filter { it is Medium && !mIgnoredPaths.contains(it.path) }.map { it as Medium }.toMutableList() as ArrayList<Medium>
|
||||
if (isDirEmpty(media) || media.hashCode() == mPrevHashcode || (getCurrentFragment() as? VideoFragment)?.mIsPlaying == true) {
|
||||
if (isDirEmpty(media) || media.hashCode() == mPrevHashcode) {
|
||||
return
|
||||
}
|
||||
|
||||
if (!ignorePlayingVideos && (getCurrentFragment() as? VideoFragment)?.mIsPlaying == true) {
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ class GetMediaAsynctask(val context: Context, val mPath: String, val isPickImage
|
|||
override fun doInBackground(vararg params: Void): ArrayList<ThumbnailItem> {
|
||||
val pathToUse = if (showAll) SHOW_ALL else mPath
|
||||
val folderGrouping = context.config.getFolderGrouping(pathToUse)
|
||||
val fileSorting = context.config.getFileSorting(pathToUse)
|
||||
val fileSorting = context.config.getFolderSorting(pathToUse)
|
||||
val getProperDateTaken = fileSorting and SORT_BY_DATE_TAKEN != 0 ||
|
||||
folderGrouping and GROUP_BY_DATE_TAKEN_DAILY != 0 ||
|
||||
folderGrouping and GROUP_BY_DATE_TAKEN_MONTHLY != 0
|
||||
|
@ -40,7 +40,7 @@ class GetMediaAsynctask(val context: Context, val mPath: String, val isPickImage
|
|||
media.addAll(newMedia)
|
||||
}
|
||||
|
||||
mediaFetcher.sortMedia(media, context.config.getFileSorting(SHOW_ALL))
|
||||
mediaFetcher.sortMedia(media, context.config.getFolderSorting(SHOW_ALL))
|
||||
media
|
||||
} else {
|
||||
mediaFetcher.getFilesFrom(mPath, isPickImage, isPickVideo, getProperDateTaken, getProperLastModified, getProperFileSize, favoritePaths, getVideoDurations)
|
||||
|
|
|
@ -22,7 +22,7 @@ class ChangeSortingDialog(val activity: BaseSimpleActivity, val isDirectorySorti
|
|||
private var view: View
|
||||
|
||||
init {
|
||||
currSorting = if (isDirectorySorting) config.directorySorting else config.getFileSorting(pathToUse)
|
||||
currSorting = if (isDirectorySorting) config.directorySorting else config.getFolderSorting(pathToUse)
|
||||
view = activity.layoutInflater.inflate(R.layout.dialog_change_sorting, null).apply {
|
||||
use_for_this_folder_divider.beVisibleIf(showFolderCheckbox || (currSorting and SORT_BY_NAME != 0 || currSorting and SORT_BY_PATH != 0))
|
||||
|
||||
|
@ -97,9 +97,9 @@ class ChangeSortingDialog(val activity: BaseSimpleActivity, val isDirectorySorti
|
|||
config.directorySorting = sorting
|
||||
} else {
|
||||
if (view.sorting_dialog_use_for_this_folder.isChecked) {
|
||||
config.saveFileSorting(pathToUse, sorting)
|
||||
config.saveCustomSorting(pathToUse, sorting)
|
||||
} else {
|
||||
config.removeFileSorting(pathToUse)
|
||||
config.removeCustomSorting(pathToUse)
|
||||
config.sorting = sorting
|
||||
}
|
||||
}
|
||||
|
|
|
@ -73,7 +73,7 @@ class PickMediumDialog(val activity: BaseSimpleActivity, val path: String, val c
|
|||
}
|
||||
|
||||
val scrollHorizontally = activity.config.scrollHorizontally && isGridViewType
|
||||
val sorting = activity.config.getFileSorting(if (path.isEmpty()) SHOW_ALL else path)
|
||||
val sorting = activity.config.getFolderSorting(if (path.isEmpty()) SHOW_ALL else path)
|
||||
view.apply {
|
||||
media_grid.adapter = adapter
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ import android.media.ExifInterface
|
|||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.provider.MediaStore
|
||||
import android.provider.MediaStore.Images
|
||||
import android.util.DisplayMetrics
|
||||
import android.view.View
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
|
@ -428,10 +429,10 @@ fun Activity.fixDateTaken(paths: ArrayList<String>, showToasts: Boolean, hasResc
|
|||
|
||||
val uri = getFileUri(path)
|
||||
ContentProviderOperation.newUpdate(uri).apply {
|
||||
val selection = "${MediaStore.Images.Media.DATA} = ?"
|
||||
val selection = "${Images.Media.DATA} = ?"
|
||||
val selectionArgs = arrayOf(path)
|
||||
withSelection(selection, selectionArgs)
|
||||
withValue(MediaStore.Images.Media.DATE_TAKEN, timestamp)
|
||||
withValue(Images.Media.DATE_TAKEN, timestamp)
|
||||
operations.add(build())
|
||||
}
|
||||
|
||||
|
|
|
@ -4,13 +4,11 @@ import android.appwidget.AppWidgetManager
|
|||
import android.content.ComponentName
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.res.Configuration
|
||||
import android.database.Cursor
|
||||
import android.graphics.Point
|
||||
import android.graphics.drawable.PictureDrawable
|
||||
import android.media.AudioManager
|
||||
import android.provider.MediaStore
|
||||
import android.view.WindowManager
|
||||
import android.provider.MediaStore.Files
|
||||
import android.provider.MediaStore.Images
|
||||
import android.widget.ImageView
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.Priority
|
||||
|
@ -39,63 +37,7 @@ import java.util.LinkedHashSet
|
|||
import kotlin.Comparator
|
||||
import kotlin.collections.ArrayList
|
||||
|
||||
val Context.portrait get() = resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT
|
||||
val Context.audioManager get() = getSystemService(Context.AUDIO_SERVICE) as AudioManager
|
||||
val Context.windowManager: WindowManager get() = getSystemService(Context.WINDOW_SERVICE) as WindowManager
|
||||
val Context.navigationBarRight: Boolean get() = usableScreenSize.x < realScreenSize.x
|
||||
val Context.navigationBarBottom: Boolean get() = usableScreenSize.y < realScreenSize.y
|
||||
val Context.navigationBarHeight: Int get() = if (navigationBarBottom) navigationBarSize.y else 0
|
||||
val Context.navigationBarWidth: Int get() = if (navigationBarRight) navigationBarSize.x else 0
|
||||
|
||||
internal val Context.navigationBarSize: Point
|
||||
get() = when {
|
||||
navigationBarRight -> Point(newNavigationBarHeight, usableScreenSize.y)
|
||||
navigationBarBottom -> Point(usableScreenSize.x, newNavigationBarHeight)
|
||||
else -> Point()
|
||||
}
|
||||
|
||||
internal val Context.newNavigationBarHeight: Int
|
||||
get() {
|
||||
var navigationBarHeight = 0
|
||||
val resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android")
|
||||
if (resourceId > 0) {
|
||||
navigationBarHeight = resources.getDimensionPixelSize(resourceId)
|
||||
}
|
||||
return navigationBarHeight
|
||||
}
|
||||
|
||||
internal val Context.statusBarHeight: Int
|
||||
get() {
|
||||
var statusBarHeight = 0
|
||||
val resourceId = resources.getIdentifier("status_bar_height", "dimen", "android")
|
||||
if (resourceId > 0) {
|
||||
statusBarHeight = resources.getDimensionPixelSize(resourceId)
|
||||
}
|
||||
return statusBarHeight
|
||||
}
|
||||
|
||||
internal val Context.actionBarHeight: Int
|
||||
get() {
|
||||
val styledAttributes = theme.obtainStyledAttributes(intArrayOf(android.R.attr.actionBarSize))
|
||||
val actionBarHeight = styledAttributes.getDimension(0, 0f)
|
||||
styledAttributes.recycle()
|
||||
return actionBarHeight.toInt()
|
||||
}
|
||||
|
||||
|
||||
val Context.usableScreenSize: Point
|
||||
get() {
|
||||
val size = Point()
|
||||
windowManager.defaultDisplay.getSize(size)
|
||||
return size
|
||||
}
|
||||
|
||||
val Context.realScreenSize: Point
|
||||
get() {
|
||||
val size = Point()
|
||||
windowManager.defaultDisplay.getRealSize(size)
|
||||
return size
|
||||
}
|
||||
|
||||
fun Context.getHumanizedFilename(path: String): String {
|
||||
val humanized = humanizePath(path)
|
||||
|
@ -362,11 +304,11 @@ fun Context.getNoMediaFolders(callback: (folders: ArrayList<String>) -> Unit) {
|
|||
ensureBackgroundThread {
|
||||
val folders = ArrayList<String>()
|
||||
|
||||
val uri = MediaStore.Files.getContentUri("external")
|
||||
val projection = arrayOf(MediaStore.Files.FileColumns.DATA)
|
||||
val selection = "${MediaStore.Files.FileColumns.MEDIA_TYPE} = ? AND ${MediaStore.Files.FileColumns.TITLE} LIKE ?"
|
||||
val selectionArgs = arrayOf(MediaStore.Files.FileColumns.MEDIA_TYPE_NONE.toString(), "%$NOMEDIA%")
|
||||
val sortOrder = "${MediaStore.Files.FileColumns.DATE_MODIFIED} DESC"
|
||||
val uri = Files.getContentUri("external")
|
||||
val projection = arrayOf(Files.FileColumns.DATA)
|
||||
val selection = "${Files.FileColumns.MEDIA_TYPE} = ? AND ${Files.FileColumns.TITLE} LIKE ?"
|
||||
val selectionArgs = arrayOf(Files.FileColumns.MEDIA_TYPE_NONE.toString(), "%$NOMEDIA%")
|
||||
val sortOrder = "${Files.FileColumns.DATE_MODIFIED} DESC"
|
||||
val OTGPath = config.OTGPath
|
||||
|
||||
var cursor: Cursor? = null
|
||||
|
@ -374,7 +316,7 @@ fun Context.getNoMediaFolders(callback: (folders: ArrayList<String>) -> Unit) {
|
|||
cursor = contentResolver.query(uri, projection, selection, selectionArgs, sortOrder)
|
||||
if (cursor?.moveToFirst() == true) {
|
||||
do {
|
||||
val path = cursor.getStringValue(MediaStore.Files.FileColumns.DATA) ?: continue
|
||||
val path = cursor.getStringValue(Files.FileColumns.DATA) ?: continue
|
||||
val noMediaFile = File(path)
|
||||
if (getDoesFilePathExist(noMediaFile.absolutePath, OTGPath) && noMediaFile.name == NOMEDIA) {
|
||||
folders.add("${noMediaFile.parent}/")
|
||||
|
@ -658,7 +600,7 @@ fun Context.getCachedMedia(path: String, getVideosOnly: Boolean = false, getImag
|
|||
}) as ArrayList<Medium>
|
||||
|
||||
val pathToUse = if (path.isEmpty()) SHOW_ALL else path
|
||||
mediaFetcher.sortMedia(media, config.getFileSorting(pathToUse))
|
||||
mediaFetcher.sortMedia(media, config.getFolderSorting(pathToUse))
|
||||
val grouped = mediaFetcher.groupMedia(media, pathToUse)
|
||||
callback(grouped.clone() as ArrayList<ThumbnailItem>)
|
||||
val OTGPath = config.OTGPath
|
||||
|
@ -924,7 +866,7 @@ fun Context.updateDirectoryPath(path: String) {
|
|||
val albumCovers = config.parseAlbumCovers()
|
||||
val includedFolders = config.includedFolders
|
||||
|
||||
val sorting = config.getFileSorting(path)
|
||||
val sorting = config.getFolderSorting(path)
|
||||
val grouping = config.getFolderGrouping(path)
|
||||
val getProperDateTaken = config.directorySorting and SORT_BY_DATE_TAKEN != 0 ||
|
||||
sorting and SORT_BY_DATE_TAKEN != 0 ||
|
||||
|
@ -945,11 +887,11 @@ fun Context.updateDirectoryPath(path: String) {
|
|||
|
||||
fun Context.getFileDateTaken(path: String): Long {
|
||||
val projection = arrayOf(
|
||||
MediaStore.Images.Media.DATE_TAKEN
|
||||
Images.Media.DATE_TAKEN
|
||||
)
|
||||
|
||||
val uri = MediaStore.Files.getContentUri("external")
|
||||
val selection = "${MediaStore.Images.Media.DATA} = ?"
|
||||
val uri = Files.getContentUri("external")
|
||||
val selection = "${Images.Media.DATA} = ?"
|
||||
val selectionArgs = arrayOf(path)
|
||||
|
||||
val cursor = contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||
|
@ -957,7 +899,7 @@ fun Context.getFileDateTaken(path: String): Long {
|
|||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
try {
|
||||
return cursor.getLongValue(MediaStore.Images.Media.DATE_TAKEN)
|
||||
return cursor.getLongValue(Images.Media.DATE_TAKEN)
|
||||
} catch (ignored: Exception) {
|
||||
}
|
||||
} while (cursor.moveToNext())
|
||||
|
|
|
@ -7,9 +7,9 @@ import com.simplemobiletools.commons.helpers.NOMEDIA
|
|||
import java.io.File
|
||||
import java.io.IOException
|
||||
|
||||
fun String.isThisOrParentIncluded(includedPaths: MutableSet<String>) = includedPaths.any { startsWith(it, true) }
|
||||
fun String.isThisOrParentIncluded(includedPaths: MutableSet<String>) = includedPaths.any { equals(it, true) } || includedPaths.any { "$this/".startsWith("$it/", true) }
|
||||
|
||||
fun String.isThisOrParentExcluded(excludedPaths: MutableSet<String>) = excludedPaths.any { startsWith(it, true) }
|
||||
fun String.isThisOrParentExcluded(excludedPaths: MutableSet<String>) = excludedPaths.any { equals(it, true) } || excludedPaths.any { "$this/".startsWith("$it/", true) }
|
||||
|
||||
fun String.shouldFolderBeVisible(excludedPaths: MutableSet<String>, includedPaths: MutableSet<String>, showHidden: Boolean): Boolean {
|
||||
if (isEmpty()) {
|
||||
|
|
|
@ -77,6 +77,7 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
private var mIsPanorama = false
|
||||
private var mIsSubsamplingVisible = false // checking view.visibility is unreliable, use an extra variable for it
|
||||
private var mCurrentPortraitPhotoPath = ""
|
||||
private var mOriginalPath = ""
|
||||
private var mImageOrientation = -1
|
||||
private var mLoadZoomableViewHandler = Handler()
|
||||
private var mScreenWidth = 0
|
||||
|
@ -99,6 +100,7 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
}
|
||||
|
||||
mMedium = arguments!!.getSerializable(MEDIUM) as Medium
|
||||
mOriginalPath = mMedium.path
|
||||
|
||||
mView.apply {
|
||||
subsampling_view.setOnClickListener { photoClicked() }
|
||||
|
@ -158,24 +160,23 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
}
|
||||
|
||||
if (mMedium.path.startsWith("content://") && !mMedium.path.startsWith("content://mms/")) {
|
||||
val originalPath = mMedium.path
|
||||
mMedium.path = context!!.getRealPathFromURI(Uri.parse(originalPath)) ?: mMedium.path
|
||||
mMedium.path = context!!.getRealPathFromURI(Uri.parse(mOriginalPath)) ?: mMedium.path
|
||||
|
||||
if (mMedium.path.isEmpty()) {
|
||||
var out: FileOutputStream? = null
|
||||
try {
|
||||
var inputStream = context!!.contentResolver.openInputStream(Uri.parse(originalPath))
|
||||
var inputStream = context!!.contentResolver.openInputStream(Uri.parse(mOriginalPath))
|
||||
val exif = ExifInterface()
|
||||
exif.readExif(inputStream, ExifInterface.Options.OPTION_ALL)
|
||||
val tag = exif.getTag(ExifInterface.TAG_ORIENTATION)
|
||||
val orientation = tag?.getValueAsInt(-1) ?: -1
|
||||
inputStream = context!!.contentResolver.openInputStream(Uri.parse(originalPath))
|
||||
inputStream = context!!.contentResolver.openInputStream(Uri.parse(mOriginalPath))
|
||||
val original = BitmapFactory.decodeStream(inputStream)
|
||||
val rotated = rotateViaMatrix(original, orientation)
|
||||
exif.setTagValue(ExifInterface.TAG_ORIENTATION, 1)
|
||||
exif.removeCompressedThumbnail()
|
||||
|
||||
val file = File(context!!.externalCacheDir, Uri.parse(originalPath).lastPathSegment)
|
||||
val file = File(context!!.externalCacheDir, Uri.parse(mOriginalPath).lastPathSegment)
|
||||
out = FileOutputStream(file)
|
||||
rotated.compress(Bitmap.CompressFormat.JPEG, 100, out)
|
||||
mMedium.path = file.absolutePath
|
||||
|
@ -398,6 +399,10 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
options.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
}
|
||||
|
||||
if (context == null) {
|
||||
return
|
||||
}
|
||||
|
||||
Glide.with(context!!)
|
||||
.load(getFilePathToShow())
|
||||
.apply(options)
|
||||
|
@ -444,7 +449,13 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun onError(e: Exception?) {}
|
||||
override fun onError(e: Exception?) {
|
||||
if (mMedium.path != mOriginalPath) {
|
||||
mMedium.path = mOriginalPath
|
||||
loadImage()
|
||||
checkIfPanorama()
|
||||
}
|
||||
}
|
||||
})
|
||||
} catch (ignored: Exception) {
|
||||
}
|
||||
|
|
|
@ -2,6 +2,8 @@ package com.simplemobiletools.gallery.pro.fragments
|
|||
|
||||
import android.media.ExifInterface
|
||||
import android.provider.MediaStore
|
||||
import android.provider.MediaStore.Files
|
||||
import android.provider.MediaStore.Images
|
||||
import android.view.MotionEvent
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
|
@ -91,14 +93,14 @@ abstract class ViewPagerFragment : Fragment() {
|
|||
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)
|
||||
val uri = MediaStore.Files.getContentUri("external")
|
||||
val projection = arrayOf(Images.Media.DATE_MODIFIED)
|
||||
val uri = Files.getContentUri("external")
|
||||
val selection = "${MediaStore.MediaColumns.DATA} = ?"
|
||||
val selectionArgs = arrayOf(file.absolutePath)
|
||||
val cursor = context!!.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||
cursor?.use {
|
||||
return if (cursor.moveToFirst()) {
|
||||
val dateModified = cursor.getLongValue(MediaStore.Images.Media.DATE_MODIFIED) * 1000L
|
||||
val dateModified = cursor.getLongValue(Images.Media.DATE_MODIFIED) * 1000L
|
||||
dateModified.formatDate(context!!)
|
||||
} else {
|
||||
file.lastModified().formatDate(context!!)
|
||||
|
|
|
@ -21,22 +21,6 @@ class Config(context: Context) : BaseConfig(context) {
|
|||
get(): Int = prefs.getInt(DIRECTORY_SORT_ORDER, SORT_BY_DATE_MODIFIED or SORT_DESCENDING)
|
||||
set(order) = prefs.edit().putInt(DIRECTORY_SORT_ORDER, order).apply()
|
||||
|
||||
fun saveFileSorting(path: String, value: Int) {
|
||||
if (path.isEmpty()) {
|
||||
sorting = value
|
||||
} else {
|
||||
prefs.edit().putInt(SORT_FOLDER_PREFIX + path.toLowerCase(), value).apply()
|
||||
}
|
||||
}
|
||||
|
||||
fun getFileSorting(path: String) = prefs.getInt(SORT_FOLDER_PREFIX + path.toLowerCase(), sorting)
|
||||
|
||||
fun removeFileSorting(path: String) {
|
||||
prefs.edit().remove(SORT_FOLDER_PREFIX + path.toLowerCase()).apply()
|
||||
}
|
||||
|
||||
fun hasCustomSorting(path: String) = prefs.contains(SORT_FOLDER_PREFIX + path.toLowerCase())
|
||||
|
||||
fun saveFolderGrouping(path: String, value: Int) {
|
||||
if (path.isEmpty()) {
|
||||
groupBy = value
|
||||
|
|
|
@ -4,7 +4,6 @@ import com.simplemobiletools.commons.helpers.MONTH_SECONDS
|
|||
|
||||
// shared preferences
|
||||
const val DIRECTORY_SORT_ORDER = "directory_sort_order"
|
||||
const val SORT_FOLDER_PREFIX = "sort_folder_"
|
||||
const val GROUP_FOLDER_PREFIX = "group_folder_"
|
||||
const val VIEW_TYPE_PREFIX = "view_type_folder_"
|
||||
const val SHOW_HIDDEN_MEDIA = "show_hidden_media"
|
||||
|
|
|
@ -5,7 +5,8 @@ import android.database.Cursor
|
|||
import android.net.Uri
|
||||
import android.os.Environment
|
||||
import android.provider.BaseColumns
|
||||
import android.provider.MediaStore
|
||||
import android.provider.MediaStore.Files
|
||||
import android.provider.MediaStore.Images
|
||||
import android.text.format.DateFormat
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.*
|
||||
|
@ -38,7 +39,7 @@ class MediaFetcher(val context: Context) {
|
|||
curMedia.addAll(newMedia)
|
||||
}
|
||||
|
||||
sortMedia(curMedia, context.config.getFileSorting(curPath))
|
||||
sortMedia(curMedia, context.config.getFolderSorting(curPath))
|
||||
|
||||
return curMedia
|
||||
}
|
||||
|
@ -54,9 +55,9 @@ class MediaFetcher(val context: Context) {
|
|||
).filter { context.getDoesFilePathExist(it, OTGPath) })
|
||||
|
||||
val filterMedia = context.config.filterMedia
|
||||
val uri = MediaStore.Files.getContentUri("external")
|
||||
val projection = arrayOf(MediaStore.Images.Media.DATA)
|
||||
val selection = "${getSelectionQuery(filterMedia)} ${MediaStore.Images.ImageColumns.BUCKET_ID} IS NOT NULL) GROUP BY (${MediaStore.Images.ImageColumns.BUCKET_ID}"
|
||||
val uri = Files.getContentUri("external")
|
||||
val projection = arrayOf(Images.Media.DATA)
|
||||
val selection = getSelectionQuery(filterMedia)
|
||||
val selectionArgs = getSelectionArgsQuery(filterMedia).toTypedArray()
|
||||
val cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||
folders.addAll(parseCursor(cursor!!))
|
||||
|
@ -72,8 +73,8 @@ class MediaFetcher(val context: Context) {
|
|||
}
|
||||
|
||||
private fun getLatestFileFolders(): LinkedHashSet<String> {
|
||||
val uri = MediaStore.Files.getContentUri("external")
|
||||
val projection = arrayOf(MediaStore.Images.ImageColumns.DATA)
|
||||
val uri = Files.getContentUri("external")
|
||||
val projection = arrayOf(Images.ImageColumns.DATA)
|
||||
val parents = LinkedHashSet<String>()
|
||||
val sorting = "${BaseColumns._ID} DESC LIMIT 50"
|
||||
var cursor: Cursor? = null
|
||||
|
@ -81,7 +82,7 @@ class MediaFetcher(val context: Context) {
|
|||
cursor = context.contentResolver.query(uri, projection, null, null, sorting)
|
||||
if (cursor?.moveToFirst() == true) {
|
||||
do {
|
||||
val path = cursor.getStringValue(MediaStore.Images.ImageColumns.DATA) ?: continue
|
||||
val path = cursor.getStringValue(Images.ImageColumns.DATA) ?: continue
|
||||
parents.add(path.getParentPath())
|
||||
} while (cursor.moveToNext())
|
||||
}
|
||||
|
@ -96,41 +97,38 @@ class MediaFetcher(val context: Context) {
|
|||
|
||||
private fun getSelectionQuery(filterMedia: Int): String {
|
||||
val query = StringBuilder()
|
||||
query.append("(")
|
||||
if (filterMedia and TYPE_IMAGES != 0) {
|
||||
photoExtensions.forEach {
|
||||
query.append("${MediaStore.Images.Media.DATA} LIKE ? OR ")
|
||||
query.append("${Images.Media.DATA} LIKE ? OR ")
|
||||
}
|
||||
}
|
||||
|
||||
if (filterMedia and TYPE_PORTRAITS != 0) {
|
||||
query.append("${MediaStore.Images.Media.DATA} LIKE ? OR ")
|
||||
query.append("${MediaStore.Images.Media.DATA} LIKE ? OR ")
|
||||
query.append("${Images.Media.DATA} LIKE ? OR ")
|
||||
query.append("${Images.Media.DATA} LIKE ? OR ")
|
||||
}
|
||||
|
||||
if (filterMedia and TYPE_VIDEOS != 0) {
|
||||
videoExtensions.forEach {
|
||||
query.append("${MediaStore.Images.Media.DATA} LIKE ? OR ")
|
||||
query.append("${Images.Media.DATA} LIKE ? OR ")
|
||||
}
|
||||
}
|
||||
|
||||
if (filterMedia and TYPE_GIFS != 0) {
|
||||
query.append("${MediaStore.Images.Media.DATA} LIKE ? OR ")
|
||||
query.append("${Images.Media.DATA} LIKE ? OR ")
|
||||
}
|
||||
|
||||
if (filterMedia and TYPE_RAWS != 0) {
|
||||
rawExtensions.forEach {
|
||||
query.append("${MediaStore.Images.Media.DATA} LIKE ? OR ")
|
||||
query.append("${Images.Media.DATA} LIKE ? OR ")
|
||||
}
|
||||
}
|
||||
|
||||
if (filterMedia and TYPE_SVGS != 0) {
|
||||
query.append("${MediaStore.Images.Media.DATA} LIKE ? OR ")
|
||||
query.append("${Images.Media.DATA} LIKE ? OR ")
|
||||
}
|
||||
|
||||
var selectionQuery = query.toString().trim().removeSuffix("OR")
|
||||
selectionQuery += ") AND "
|
||||
return selectionQuery
|
||||
return query.toString().trim().removeSuffix("OR")
|
||||
}
|
||||
|
||||
private fun getSelectionArgsQuery(filterMedia: Int): ArrayList<String> {
|
||||
|
@ -174,12 +172,12 @@ class MediaFetcher(val context: Context) {
|
|||
val config = context.config
|
||||
val includedFolders = config.includedFolders
|
||||
val OTGPath = config.OTGPath
|
||||
var foldersToScan = config.everShownFolders.filter { it == FAVORITES || it == RECYCLE_BIN || context.getDoesFilePathExist(it, OTGPath) }.toMutableList() as ArrayList
|
||||
var foldersToScan = config.everShownFolders.filter { it == FAVORITES || it == RECYCLE_BIN || context.getDoesFilePathExist(it, OTGPath) }.toHashSet()
|
||||
|
||||
cursor.use {
|
||||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
val path = cursor.getStringValue(MediaStore.Images.Media.DATA)
|
||||
val path = cursor.getStringValue(Images.Media.DATA)
|
||||
val parentPath = File(path).parent ?: continue
|
||||
if (!includedFolders.contains(parentPath) && !foldersToIgnore.contains(parentPath)) {
|
||||
foldersToScan.add(parentPath)
|
||||
|
@ -194,11 +192,11 @@ class MediaFetcher(val context: Context) {
|
|||
|
||||
val showHidden = config.shouldShowHidden
|
||||
val excludedFolders = config.excludedFolders
|
||||
foldersToScan = foldersToScan.filter { it.shouldFolderBeVisible(excludedFolders, includedFolders, showHidden) } as ArrayList<String>
|
||||
foldersToScan = foldersToScan.filter { it.shouldFolderBeVisible(excludedFolders, includedFolders, showHidden) }.toHashSet()
|
||||
return foldersToScan.distinctBy { it.getDistinctPath() }.toMutableSet() as LinkedHashSet<String>
|
||||
}
|
||||
|
||||
private fun addFolder(curFolders: ArrayList<String>, folder: String) {
|
||||
private fun addFolder(curFolders: HashSet<String>, folder: String) {
|
||||
curFolders.add(folder)
|
||||
val files = File(folder).listFiles() ?: return
|
||||
for (file in files) {
|
||||
|
@ -398,12 +396,12 @@ class MediaFetcher(val context: Context) {
|
|||
val dateTakens = HashMap<String, Long>()
|
||||
if (folder != FAVORITES) {
|
||||
val projection = arrayOf(
|
||||
MediaStore.Images.Media.DISPLAY_NAME,
|
||||
MediaStore.Images.Media.DATE_TAKEN
|
||||
Images.Media.DISPLAY_NAME,
|
||||
Images.Media.DATE_TAKEN
|
||||
)
|
||||
|
||||
val uri = MediaStore.Files.getContentUri("external")
|
||||
val selection = "${MediaStore.Images.Media.DATA} LIKE ? AND ${MediaStore.Images.Media.DATA} NOT LIKE ?"
|
||||
val uri = Files.getContentUri("external")
|
||||
val selection = "${Images.Media.DATA} LIKE ? AND ${Images.Media.DATA} NOT LIKE ?"
|
||||
val selectionArgs = arrayOf("$folder/%", "$folder/%/%")
|
||||
|
||||
val cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
|
||||
|
@ -411,9 +409,9 @@ class MediaFetcher(val context: Context) {
|
|||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
try {
|
||||
val dateTaken = cursor.getLongValue(MediaStore.Images.Media.DATE_TAKEN)
|
||||
val dateTaken = cursor.getLongValue(Images.Media.DATE_TAKEN)
|
||||
if (dateTaken != 0L) {
|
||||
val name = cursor.getStringValue(MediaStore.Images.Media.DISPLAY_NAME)
|
||||
val name = cursor.getStringValue(Images.Media.DISPLAY_NAME)
|
||||
dateTakens["$folder/$name"] = dateTaken
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.simplemobiletools.gallery.pro.jobs
|
|||
|
||||
import android.annotation.TargetApi
|
||||
import android.app.job.JobInfo
|
||||
import android.app.job.JobInfo.TriggerContentUri
|
||||
import android.app.job.JobParameters
|
||||
import android.app.job.JobScheduler
|
||||
import android.app.job.JobService
|
||||
|
@ -12,6 +13,8 @@ import android.net.Uri
|
|||
import android.os.Build
|
||||
import android.os.Handler
|
||||
import android.provider.MediaStore
|
||||
import android.provider.MediaStore.Images
|
||||
import android.provider.MediaStore.Video
|
||||
import com.simplemobiletools.commons.extensions.getParentPath
|
||||
import com.simplemobiletools.commons.extensions.getStringValue
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
|
@ -24,8 +27,8 @@ class NewPhotoFetcher : JobService() {
|
|||
companion object {
|
||||
const val PHOTO_VIDEO_CONTENT_JOB = 1
|
||||
private val MEDIA_URI = Uri.parse("content://${MediaStore.AUTHORITY}/")
|
||||
private val PHOTO_PATH_SEGMENTS = MediaStore.Images.Media.EXTERNAL_CONTENT_URI.pathSegments
|
||||
private val VIDEO_PATH_SEGMENTS = MediaStore.Video.Media.EXTERNAL_CONTENT_URI.pathSegments
|
||||
private val PHOTO_PATH_SEGMENTS = Images.Media.EXTERNAL_CONTENT_URI.pathSegments
|
||||
private val VIDEO_PATH_SEGMENTS = Video.Media.EXTERNAL_CONTENT_URI.pathSegments
|
||||
}
|
||||
|
||||
private val mHandler = Handler()
|
||||
|
@ -38,15 +41,15 @@ class NewPhotoFetcher : JobService() {
|
|||
|
||||
fun scheduleJob(context: Context) {
|
||||
val componentName = ComponentName(context, NewPhotoFetcher::class.java)
|
||||
val photoUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
|
||||
val videoUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI
|
||||
val photoUri = Images.Media.EXTERNAL_CONTENT_URI
|
||||
val videoUri = Video.Media.EXTERNAL_CONTENT_URI
|
||||
JobInfo.Builder(PHOTO_VIDEO_CONTENT_JOB, componentName).apply {
|
||||
addTriggerContentUri(JobInfo.TriggerContentUri(photoUri, JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS))
|
||||
addTriggerContentUri(JobInfo.TriggerContentUri(videoUri, JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS))
|
||||
addTriggerContentUri(JobInfo.TriggerContentUri(MEDIA_URI, 0))
|
||||
addTriggerContentUri(TriggerContentUri(photoUri, TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS))
|
||||
addTriggerContentUri(TriggerContentUri(videoUri, TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS))
|
||||
addTriggerContentUri(TriggerContentUri(MEDIA_URI, 0))
|
||||
|
||||
try {
|
||||
context.getSystemService(JobScheduler::class.java).schedule(build())
|
||||
context.getSystemService(JobScheduler::class.java)?.schedule(build())
|
||||
} catch (ignored: Exception) {
|
||||
}
|
||||
}
|
||||
|
@ -54,7 +57,7 @@ class NewPhotoFetcher : JobService() {
|
|||
|
||||
fun isScheduled(context: Context): Boolean {
|
||||
val jobScheduler = context.getSystemService(JobScheduler::class.java)
|
||||
val jobs = jobScheduler.allPendingJobs ?: return false
|
||||
val jobs = jobScheduler.allPendingJobs
|
||||
return jobs.any { it.id == PHOTO_VIDEO_CONTENT_JOB }
|
||||
}
|
||||
|
||||
|
@ -77,17 +80,17 @@ class NewPhotoFetcher : JobService() {
|
|||
if (selection.isNotEmpty()) {
|
||||
selection.append(" OR ")
|
||||
}
|
||||
selection.append("${MediaStore.Images.ImageColumns._ID} = '$id'")
|
||||
selection.append("${Images.ImageColumns._ID} = '$id'")
|
||||
}
|
||||
|
||||
var cursor: Cursor? = null
|
||||
try {
|
||||
val projection = arrayOf(MediaStore.Images.ImageColumns.DATA)
|
||||
val uris = arrayListOf(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MediaStore.Video.Media.EXTERNAL_CONTENT_URI)
|
||||
val projection = arrayOf(Images.ImageColumns.DATA)
|
||||
val uris = arrayListOf(Images.Media.EXTERNAL_CONTENT_URI, Video.Media.EXTERNAL_CONTENT_URI)
|
||||
uris.forEach {
|
||||
cursor = contentResolver.query(it, projection, selection.toString(), null, null)
|
||||
while (cursor!!.moveToNext()) {
|
||||
val path = cursor!!.getStringValue(MediaStore.Images.ImageColumns.DATA)
|
||||
val path = cursor!!.getStringValue(Images.ImageColumns.DATA)
|
||||
affectedFolderPaths.add(path.getParentPath())
|
||||
addPathToDB(path)
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 5.9 KiB |
|
@ -6,6 +6,11 @@
|
|||
android:icon="@drawable/ic_delete_vector"
|
||||
android:title="@string/delete"
|
||||
app:showAsAction="ifRoom"/>
|
||||
<item
|
||||
android:id="@+id/cab_properties"
|
||||
android:icon="@drawable/ic_info"
|
||||
android:title="@string/properties"
|
||||
app:showAsAction="ifRoom"/>
|
||||
<item
|
||||
android:id="@+id/cab_pin"
|
||||
android:icon="@drawable/ic_pin"
|
||||
|
@ -16,11 +21,6 @@
|
|||
android:icon="@drawable/ic_unpin"
|
||||
android:title="@string/unpin_folder"
|
||||
app:showAsAction="ifRoom"/>
|
||||
<item
|
||||
android:id="@+id/cab_properties"
|
||||
android:icon="@drawable/ic_info"
|
||||
android:title="@string/properties"
|
||||
app:showAsAction="ifRoom"/>
|
||||
<item
|
||||
android:id="@+id/cab_rename"
|
||||
android:icon="@drawable/ic_rename_new"
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">تقليل عدد الأعمدة</string>
|
||||
<string name="change_cover_image">تغيير صورة الغلاف</string>
|
||||
<string name="select_photo">تحديد صورة</string>
|
||||
<string name="use_default">إستخدام كإفتراضي</string>
|
||||
<string name="volume">الصوت</string>
|
||||
<string name="brightness">السبوع</string>
|
||||
<string name="lock_orientation">قفل الاتجاه</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">تعديل</string>
|
||||
<string name="save">حفظ</string>
|
||||
<string name="rotate">تدوير</string>
|
||||
<string name="path">المسار</string>
|
||||
<string name="invalid_image_path">مسار الصورة غير صحيح</string>
|
||||
<string name="image_editing_failed">فشل تعديل الصورة</string>
|
||||
<string name="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Reduce column count</string>
|
||||
<string name="change_cover_image">Change cover image</string>
|
||||
<string name="select_photo">Select photo</string>
|
||||
<string name="use_default">Use default</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Brightness</string>
|
||||
<string name="lock_orientation">Lock orientation</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Editor</string>
|
||||
<string name="save">Save</string>
|
||||
<string name="rotate">Rotate</string>
|
||||
<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="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Reduir el número de columnes</string>
|
||||
<string name="change_cover_image">Canviar imatge de portada</string>
|
||||
<string name="select_photo">Sel·leccionar imatge</string>
|
||||
<string name="use_default">Us per defecte</string>
|
||||
<string name="volume">Volum</string>
|
||||
<string name="brightness">Brillantor</string>
|
||||
<string name="lock_orientation">Bloquejar orientació</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Editor</string>
|
||||
<string name="save">Guardar</string>
|
||||
<string name="rotate">Rotar</string>
|
||||
<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="image_editing_cancelled">S\'ha cancel·lat l\'edició de la imatge</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Snížit počet sloupců</string>
|
||||
<string name="change_cover_image">Změnit obal alba</string>
|
||||
<string name="select_photo">Vybrat fotografii</string>
|
||||
<string name="use_default">Použít výchozí</string>
|
||||
<string name="volume">Hlasitost</string>
|
||||
<string name="brightness">Jas</string>
|
||||
<string name="lock_orientation">Uzamknout orientaci</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Editor</string>
|
||||
<string name="save">Uložit</string>
|
||||
<string name="rotate">Otočit</string>
|
||||
<string name="path">Cesta</string>
|
||||
<string name="invalid_image_path">Neplatná cesta</string>
|
||||
<string name="image_editing_failed">Úprava souboru selhala</string>
|
||||
<string name="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Færre kolonner</string>
|
||||
<string name="change_cover_image">Skift cover-billede</string>
|
||||
<string name="select_photo">Vælg billede</string>
|
||||
<string name="use_default">Brug standard</string>
|
||||
<string name="volume">Lydstyrke</string>
|
||||
<string name="brightness">Lysstyrke</string>
|
||||
<string name="lock_orientation">Lås orientering</string>
|
||||
|
@ -31,7 +30,7 @@
|
|||
<string name="fix_date_taken">Fiks eksponeringsdato</string>
|
||||
<string name="fixing">Fikser…</string>
|
||||
<string name="dates_fixed_successfully">Datoer fikset med succes</string>
|
||||
<string name="no_date_takens_found">No Date Taken values have been found</string>
|
||||
<string name="no_date_takens_found">Ingen eksponeringsdatoer er fundet</string>
|
||||
<string name="share_resized">Del en skaleret version</string>
|
||||
<string name="upgraded_from_free">Hej\n\nDet ser ud til at du har opgraderet fra den gamle, gratis app. Du kan afinstallere den gamle version, som har en \"Opgrader til Pro\"-knap i toppen af appens indstillinger.\n\nDu vil blot få papirkurvens elementer slettet, favoritter vil blive umarkeret og du vil også skulle genopsætte din apps indstillinger.\n\nTak!</string>
|
||||
<string name="switch_to_file_search">Skift til filsøgning på tværs af synlige mapper</string>
|
||||
|
@ -78,13 +77,11 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Editor</string>
|
||||
<string name="save">Gem</string>
|
||||
<string name="rotate">Roter</string>
|
||||
<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="image_editing_cancelled">Image editing cancelled</string>
|
||||
<string name="file_edited_successfully">File edited successfully</string>
|
||||
<string name="image_editing_cancelled">Billede redigering annulleret</string>
|
||||
<string name="file_edited_successfully">Fil redigeret med succes</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>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Kacheln vergrößern</string>
|
||||
<string name="change_cover_image">Coverbild ändern</string>
|
||||
<string name="select_photo">Auswählen</string>
|
||||
<string name="use_default">Standard</string>
|
||||
<string name="volume">Lautstärke</string>
|
||||
<string name="brightness">Helligkeit</string>
|
||||
<string name="lock_orientation">Bildausrichtung sperren</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Editor</string>
|
||||
<string name="save">Speichern</string>
|
||||
<string name="rotate">Drehen</string>
|
||||
<string name="path">Pfad</string>
|
||||
<string name="invalid_image_path">Ungültiger Dateipfad</string>
|
||||
<string name="image_editing_failed">Bildbearbeitung fehlgeschlagen</string>
|
||||
<string name="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Μείωση αριθμού στηλών</string>
|
||||
<string name="change_cover_image">Αλλαγή εξώφυλλου φακέλου</string>
|
||||
<string name="select_photo">Επιλογή φωτογραφίας</string>
|
||||
<string name="use_default">Χρήση προεπιλεγμένης</string>
|
||||
<string name="volume">Ένταση</string>
|
||||
<string name="brightness">Φωτεινότητα</string>
|
||||
<string name="lock_orientation">Κλείδωμα προσανατολισμού</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Επεξεργαστής</string>
|
||||
<string name="save">Αποθήκευση</string>
|
||||
<string name="rotate">Περιστροφή</string>
|
||||
<string name="path">Διαδρομή</string>
|
||||
<string name="invalid_image_path">Μη έγκυρη διαδρομή εικόνας</string>
|
||||
<string name="image_editing_failed">Η επεξεργασία εικόνας απέτυχε</string>
|
||||
<string name="image_editing_cancelled">Η επεξεργασία εικόνας ακυρώθηκε</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Reducir el número de columnas</string>
|
||||
<string name="change_cover_image">Cambiar imagen de portada</string>
|
||||
<string name="select_photo">Seleccionar imagen</string>
|
||||
<string name="use_default">Uso por defecto</string>
|
||||
<string name="volume">Volumen</string>
|
||||
<string name="brightness">Brillo</string>
|
||||
<string name="lock_orientation">Bloquear orientación</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Editor</string>
|
||||
<string name="save">Guardar</string>
|
||||
<string name="rotate">Rotar</string>
|
||||
<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="image_editing_cancelled">Edición de imagen cancelada</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Vähennä sarakkeita</string>
|
||||
<string name="change_cover_image">Vaihda kansikuva</string>
|
||||
<string name="select_photo">Valitse kuva</string>
|
||||
<string name="use_default">Käytä oletuksia</string>
|
||||
<string name="volume">Äänenvoimakkuus</string>
|
||||
<string name="brightness">Kirkkaus</string>
|
||||
<string name="lock_orientation">Lukitse näytönkierto</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Editori</string>
|
||||
<string name="save">Tallenna</string>
|
||||
<string name="rotate">Käännä</string>
|
||||
<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="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Supprimer une colonne</string>
|
||||
<string name="change_cover_image">Changer l\'image du dossier</string>
|
||||
<string name="select_photo">Choisir une image</string>
|
||||
<string name="use_default">Image par défaut</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Luminosité</string>
|
||||
<string name="lock_orientation">Verrouiller la rotation</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Éditeur</string>
|
||||
<string name="save">Sauvegarder</string>
|
||||
<string name="rotate">Pivoter</string>
|
||||
<string name="path">Emplacement</string>
|
||||
<string name="invalid_image_path">Emplacement invalide</string>
|
||||
<string name="image_editing_failed">L\'édition de l\'image a échoué</string>
|
||||
<string name="image_editing_cancelled">L\'édition de l\'image a été annulé</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Reduza o número de columnas</string>
|
||||
<string name="change_cover_image">Cambiar a imaxe de portada</string>
|
||||
<string name="select_photo">Escolla foto</string>
|
||||
<string name="use_default">Usar valor por omisión</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Brillo</string>
|
||||
<string name="lock_orientation">Fixar orientación</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Editor</string>
|
||||
<string name="save">Gardar</string>
|
||||
<string name="rotate">Rotar</string>
|
||||
<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="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Smanji broj stupaca</string>
|
||||
<string name="change_cover_image">Promjeni naslovnu sliku</string>
|
||||
<string name="select_photo">Odaberi sliku</string>
|
||||
<string name="use_default">Koristi zadano</string>
|
||||
<string name="volume">Glasnoća</string>
|
||||
<string name="brightness">Svjetlina</string>
|
||||
<string name="lock_orientation">Zaključaj orijentaciju slike</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Uređivač</string>
|
||||
<string name="save">Spremi</string>
|
||||
<string name="rotate">Rotiraj</string>
|
||||
<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="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Csökkentse az oszlopok számát</string>
|
||||
<string name="change_cover_image">Borítókép változtatása</string>
|
||||
<string name="select_photo">Válasszon fotót</string>
|
||||
<string name="use_default">Alapértelmezett használata</string>
|
||||
<string name="volume">Hangerő</string>
|
||||
<string name="brightness">Fényerő</string>
|
||||
<string name="lock_orientation">Tájolás zárolása</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Szerkesztő</string>
|
||||
<string name="save">Mentés</string>
|
||||
<string name="rotate">Forgatás</string>
|
||||
<string name="path">Elérési útvonal</string>
|
||||
<string name="invalid_image_path">Érvénytelen kép elérési útvonal</string>
|
||||
<string name="image_editing_failed">Sikertelen kép szerkesztés</string>
|
||||
<string name="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Kurangi jumlah kolom</string>
|
||||
<string name="change_cover_image">Ubah gambar kover</string>
|
||||
<string name="select_photo">Pilih foto</string>
|
||||
<string name="use_default">Gunakan default</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Kecerahan</string>
|
||||
<string name="lock_orientation">Kunci orientasi</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Penyunting</string>
|
||||
<string name="save">Simpan</string>
|
||||
<string name="rotate">Rotasi</string>
|
||||
<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="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Kurangi jumlah kolom</string>
|
||||
<string name="change_cover_image">Ubah gambar kover</string>
|
||||
<string name="select_photo">Pilih foto</string>
|
||||
<string name="use_default">Gunakan default</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Kecerahan</string>
|
||||
<string name="lock_orientation">Kunci orientasi</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Penyunting</string>
|
||||
<string name="save">Simpan</string>
|
||||
<string name="rotate">Rotasi</string>
|
||||
<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="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Riduci numero colonne</string>
|
||||
<string name="change_cover_image">Cambia immagine copertina</string>
|
||||
<string name="select_photo">Seleziona foto</string>
|
||||
<string name="use_default">Usa predefinita</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Luminosità</string>
|
||||
<string name="lock_orientation">Blocca orientamento</string>
|
||||
|
@ -31,7 +30,7 @@
|
|||
<string name="fix_date_taken">Correggi valore Data acquisizione</string>
|
||||
<string name="fixing">Correzione in corso…</string>
|
||||
<string name="dates_fixed_successfully">Date aggiornate correttamente</string>
|
||||
<string name="no_date_takens_found">No Date Taken values have been found</string>
|
||||
<string name="no_date_takens_found">Nessun valore trovato per data creazione</string>
|
||||
<string name="share_resized">Condividi una versione ridimensionata</string>
|
||||
<string name="upgraded_from_free">Hey,\n\nhai aggiornato dalla vecchia versione gratuita. Puoi disinstallare le vecchia versione, che ha un pulsante \'Aggiorna a Pro\' in alto nelle impostazioni.\n\nNon potrai recuperare gli elementi dal cestino, gli elementi marcati come preferiti e dovrai anche reimpostare le impostazioni dell\'app.\n\nGrazie!</string>
|
||||
<string name="switch_to_file_search">Passa alla ricerca file su tutte le cartelle visibili</string>
|
||||
|
@ -78,13 +77,11 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Editor</string>
|
||||
<string name="save">Salva</string>
|
||||
<string name="rotate">Ruota</string>
|
||||
<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="image_editing_cancelled">Image editing cancelled</string>
|
||||
<string name="file_edited_successfully">File edited successfully</string>
|
||||
<string name="image_editing_cancelled">Modifica immagine annullata</string>
|
||||
<string name="file_edited_successfully">File modificato correttamente</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>
|
||||
|
@ -294,7 +291,7 @@
|
|||
<string name="faq_3_title">Come posso fare apparire un album sempre in cima?</string>
|
||||
<string name="faq_3_text">Si può toccare a lungo l\'album desiderato e selezionare l\'icona puntina nel menù azioni, ciò lo fisserà in cima. Si possono anche fissare varie cartelle, gli elementi fissati saranno ordinati dal metodo di ordinamento predefinito.</string>
|
||||
<string name="faq_4_title">Come avanzo velocemente nei video?</string>
|
||||
<string name="faq_4_text">You can do it by double tapping the side of the screen, or tapping the current or max duration texts near the seekbar. If you enable opening videos on a separate screen in the app settings, you can use horizontal gestures too.</string>
|
||||
<string name="faq_4_text">Puoi farlo con un doppio tocco del lato dello schermo o toccando i testi di durata attuale o massima vicino alla barra. Se attivi l\'apertura di video su uno schermo separato nelle impostazioni, puoi anche usare i gesti orizzontali.</string>
|
||||
<string name="faq_5_title">Che differenza c\'è tra nascondere ed escludere una cartella?</string>
|
||||
<string name="faq_5_text">Escludere impedisce la visualizzazione della cartella solo in Semplice Galleria, mentre nascondere ha effetto in tutto il sistema e nasconde la cartella anche alle altre gallerie. Funziona creando un file vuoto \".nomedia\" nella cartella in questione, si possono anche rimuovere successivamente con qualsiasi gestore dei file.</string>
|
||||
<string name="faq_6_title">Perchè vengono mostrate cartelle con copertine o adesivi di musica?</string>
|
||||
|
@ -321,7 +318,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">Semplice Galleria Pro - gestore di foto & editor</string>
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
<string name="app_short_description">Browse your memories without any interruptions with this photo and video gallery</string>
|
||||
<string name="app_short_description">Sfoglia le tue memorie senza interruzioni con questa galleria di foto e video</string>
|
||||
<string name="app_long_description">
|
||||
Semplice Galleria Pro è una galleria offline altamente personalizzabile. Organizza, modifica le tue foto, recupera file con il cestino, progetti e nascondi file e visualizza una grande varietà di formati foto e video, inclusi RAW, SVG e molti altri.
|
||||
|
||||
|
@ -369,7 +366,7 @@
|
|||
<b>Controlla le altre applicazioni qui:</b>
|
||||
https://www.simplemobiletools.com
|
||||
|
||||
<b>Standalone website of Simple Gallery Pro:</b>
|
||||
<b>Sito internet di Semplice Galleria Pro:</b>
|
||||
https://www.simplemobiletools.com/gallery
|
||||
|
||||
<b>Facebook:</b>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">列数を減らす</string>
|
||||
<string name="change_cover_image">カバー画像を変更</string>
|
||||
<string name="select_photo">写真を選択</string>
|
||||
<string name="use_default">デフォルトに戻す</string>
|
||||
<string name="volume">音量</string>
|
||||
<string name="brightness">明るさ</string>
|
||||
<string name="lock_orientation">画面の向きを固定する</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">画像編集</string>
|
||||
<string name="save">保存</string>
|
||||
<string name="rotate">回転</string>
|
||||
<string name="path">パス</string>
|
||||
<string name="invalid_image_path">無効な画像パス</string>
|
||||
<string name="image_editing_failed">画像の編集に失敗しました</string>
|
||||
<string name="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">섬네일크기 확대</string>
|
||||
<string name="change_cover_image">커버 사진 변경</string>
|
||||
<string name="select_photo">사진 선택</string>
|
||||
<string name="use_default">기본값 사용</string>
|
||||
<string name="volume">볼륨</string>
|
||||
<string name="brightness">밝기</string>
|
||||
<string name="lock_orientation">화면 회전 잠금</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">편집</string>
|
||||
<string name="save">저장</string>
|
||||
<string name="rotate">회전</string>
|
||||
<string name="path">경로</string>
|
||||
<string name="invalid_image_path">유효하지 않은 사진 경로</string>
|
||||
<string name="image_editing_failed">사진 편집 실패</string>
|
||||
<string name="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Sumažinti stulpelių skaičių</string>
|
||||
<string name="change_cover_image">Pakeisti viršelio atvaizdą</string>
|
||||
<string name="select_photo">Pasirinkti nuotrauką</string>
|
||||
<string name="use_default">Naudoti numatytąjį</string>
|
||||
<string name="volume">Garsas</string>
|
||||
<string name="brightness">Ryškumas</string>
|
||||
<string name="lock_orientation">Užrakinti orientaciją</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Redaktorius</string>
|
||||
<string name="save">Saugoti</string>
|
||||
<string name="rotate">Sukti</string>
|
||||
<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="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Reduser antall kolonner</string>
|
||||
<string name="change_cover_image">Endre omslagsbilde</string>
|
||||
<string name="select_photo">Velg foto</string>
|
||||
<string name="use_default">Bruk standard</string>
|
||||
<string name="volume">Volum</string>
|
||||
<string name="brightness">Lysstyrke</string>
|
||||
<string name="lock_orientation">Lås skjermorientering</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Redigering</string>
|
||||
<string name="save">Lagre</string>
|
||||
<string name="rotate">Roter</string>
|
||||
<string name="path">Bane</string>
|
||||
<string name="invalid_image_path">Ugyldig bildebane</string>
|
||||
<string name="image_editing_failed">Bilderedigering feilet</string>
|
||||
<string name="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">कोलम सङ्खा घटाउनुहोस</string>
|
||||
<string name="change_cover_image">कभर तस्बिर परिवर्तन गर्नुहोस</string>
|
||||
<string name="select_photo">फोटो चयन गर्नुहोस</string>
|
||||
<string name="use_default">डिफल्ट प्रयोग गर्नुहोस</string>
|
||||
<string name="volume">भोलुम</string>
|
||||
<string name="brightness">उज्यालोपन</string>
|
||||
<string name="lock_orientation">Lock orientation</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">सम्पादक</string>
|
||||
<string name="save">बचत</string>
|
||||
<string name="rotate">घुमाउने</string>
|
||||
<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="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Minder kolommen</string>
|
||||
<string name="change_cover_image">Afbeelding omslag wijzigen</string>
|
||||
<string name="select_photo">Foto selecteren</string>
|
||||
<string name="use_default">Standaard gebruiken</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Helderheid</string>
|
||||
<string name="lock_orientation">Schermoriëntatie vergrendelen</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Bewerken</string>
|
||||
<string name="save">Opslaan</string>
|
||||
<string name="rotate">Draaien</string>
|
||||
<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="image_editing_cancelled">Afbeelding bewerken is geannuleerd</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Zmniejsz liczbę kolumn</string>
|
||||
<string name="change_cover_image">Zmień okładkę</string>
|
||||
<string name="select_photo">Wybierz obraz</string>
|
||||
<string name="use_default">Użyj domyślnej</string>
|
||||
<string name="volume">Głośność</string>
|
||||
<string name="brightness">Jasność</string>
|
||||
<string name="lock_orientation">Zablokuj orientację ekranu</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Edycja</string>
|
||||
<string name="save">Zapisz</string>
|
||||
<string name="rotate">Obróć</string>
|
||||
<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="image_editing_cancelled">Anulowano edycję obrazu</string>
|
||||
|
@ -191,7 +188,7 @@
|
|||
<string name="speed">Szybkość</string>
|
||||
<string name="compromise">Kompromis</string>
|
||||
<string name="avoid_showing_invalid_files">Unikaj pokazywania niewłaściwych plików</string>
|
||||
<string name="show_image_file_types">Show image file types</string>
|
||||
<string name="show_image_file_types">Pokazuj rozszerzenia zdjęć</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniatury</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Reduzir número de colunas</string>
|
||||
<string name="change_cover_image">Trocar imagem de capa</string>
|
||||
<string name="select_photo">Selecionar foto</string>
|
||||
<string name="use_default">Usar padrão</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Brilho</string>
|
||||
<string name="lock_orientation">Travar orientação</string>
|
||||
|
@ -31,7 +30,7 @@
|
|||
<string name="fix_date_taken">Corrigir data da foto</string>
|
||||
<string name="fixing">Corrigindo…</string>
|
||||
<string name="dates_fixed_successfully">Datas corrigidas com sucesso</string>
|
||||
<string name="no_date_takens_found">No Date Taken values have been found</string>
|
||||
<string name="no_date_takens_found">Nenhum valor de data foi encontrado</string>
|
||||
<string name="share_resized">Compartilhar uma versão redimensionada</string>
|
||||
<string name="upgraded_from_free">Olá,\n\nparece que você está atualizando do antigo aplicativo gratuito. Agora você já pode desinstalar a versão antiga, que tem o botão de atualizar para a versão Pro no topo da pagina de Configurações.\n\nVocê terá os itens da Lixeira excluídos, itens favoritos desmarcados e também terá que redefinir as configurações do seu aplicativo.\n\nObrigado!</string>
|
||||
<string name="switch_to_file_search">Alternar para a pesquisa de arquivos em todas as pastas visíveis</string>
|
||||
|
@ -78,12 +77,10 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Editor</string>
|
||||
<string name="save">Salvar</string>
|
||||
<string name="rotate">Girar</string>
|
||||
<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="image_editing_cancelled">Image editing cancelled</string>
|
||||
<string name="image_editing_cancelled">Edição de imagem cancelada</string>
|
||||
<string name="file_edited_successfully">Arquivo editado com sucesso</string>
|
||||
<string name="edit_image_with">Editar imagem com:</string>
|
||||
<string name="no_editor_found">Nenhum editor de imagem encontrado</string>
|
||||
|
@ -294,7 +291,7 @@
|
|||
<string name="faq_3_title">O que posso fazer para que uma pasta sempre apareça no topo da lista?</string>
|
||||
<string name="faq_3_text">Faça um toque longo na pasta em questão, e depois toque no ícone de alfinete na parte superior da tela, isto irá fixá-la no topo. Você também pode fixar várias pastas; os itens fixados serão classificados pelo método de ordenação padrão.</string>
|
||||
<string name="faq_4_title">Como faço para avançar rapidamente um vídeo (fast forward)?</string>
|
||||
<string name="faq_4_text">You can do it by double tapping the side of the screen, or tapping the current or max duration texts near the seekbar. If you enable opening videos on a separate screen in the app settings, you can use horizontal gestures too.</string>
|
||||
<string name="faq_4_text">Você pode fazer isso tocando duas vezes na lateral da tela ou tocando nos textos atuais ou de duração máxima próximos à barra de busca. Se você ativar a abertura de vídeos em uma tela separada nas configurações do aplicativo, também poderá usar gestos horizontais.</string>
|
||||
<string name="faq_5_title">Qual é a diferença entre ocultar e ignorar uma pasta?</string>
|
||||
<string name="faq_5_text">Ignorar deixa de exibir a pasta apenas no Simple Galeria, enquanto Ocultar afeta todo o sistema e pode ocultar pastas de outras galerias também. A função ocultar funciona adicionando um arquivo vazio chamado \".nomedia\" na pasta em questão, arquivo este você também pode excluir com um gerenciador de arquivos, se quiser.</string>
|
||||
<string name="faq_6_title">Porque pastas com capas de CD de música ou figurinhas aparecem na lista?</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Diminuir número de colunas</string>
|
||||
<string name="change_cover_image">Alterar imagem de capa</string>
|
||||
<string name="select_photo">Selecionar foto</string>
|
||||
<string name="use_default">Predefinição</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Brilho</string>
|
||||
<string name="lock_orientation">Bloquear orientação</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Editor</string>
|
||||
<string name="save">Guardar</string>
|
||||
<string name="rotate">Rodar</string>
|
||||
<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="image_editing_cancelled">Edição de imagem cancelada</string>
|
||||
|
@ -369,7 +366,7 @@
|
|||
<b>Consulte todas as aplicações Simple Tools aqui:</b>
|
||||
https://www.simplemobiletools.com
|
||||
|
||||
<b>Standalone website of Simple Gallery Pro:</b>
|
||||
<b>Sítio web de Simple Gallery Pro:</b>
|
||||
https://www.simplemobiletools.com/gallery
|
||||
|
||||
<b>Facebook:</b>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Убрать столбец</string>
|
||||
<string name="change_cover_image">Изменить обложку</string>
|
||||
<string name="select_photo">Выбрать изображение</string>
|
||||
<string name="use_default">Использовать по умолчанию</string>
|
||||
<string name="volume">Громкость</string>
|
||||
<string name="brightness">Яркость</string>
|
||||
<string name="lock_orientation">Заблокировать ориентацию</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Редактор</string>
|
||||
<string name="save">Сохранить</string>
|
||||
<string name="rotate">Поворот</string>
|
||||
<string name="path">Путь</string>
|
||||
<string name="invalid_image_path">Недопустимый путь изображения</string>
|
||||
<string name="image_editing_failed">Редактирование изображения не выполнено</string>
|
||||
<string name="image_editing_cancelled">Редактирование изображения отменено</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Znížiť počet stĺpcov</string>
|
||||
<string name="change_cover_image">Zmeniť obal albumu</string>
|
||||
<string name="select_photo">Zvoliť foto</string>
|
||||
<string name="use_default">Použiť predvolený</string>
|
||||
<string name="volume">Hlasitosť</string>
|
||||
<string name="brightness">Jas</string>
|
||||
<string name="lock_orientation">Uzamknúť otočenie obrazovky</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Editor</string>
|
||||
<string name="save">Uložiť</string>
|
||||
<string name="rotate">Otočiť</string>
|
||||
<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="image_editing_cancelled">Úprava súboru bola zrušená</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Zmanjšaj število stolpcev</string>
|
||||
<string name="change_cover_image">Spremeni naslovno fotografijo</string>
|
||||
<string name="select_photo">Izberi fotografijo</string>
|
||||
<string name="use_default">Uporabi privzeto</string>
|
||||
<string name="volume">Glasnost</string>
|
||||
<string name="brightness">Svetlost</string>
|
||||
<string name="lock_orientation">Zakleni usmerjenost</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Urejevalnik</string>
|
||||
<string name="save">Shrani</string>
|
||||
<string name="rotate">Zavrti</string>
|
||||
<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="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Смањи број колона</string>
|
||||
<string name="change_cover_image">Промени насловну слику</string>
|
||||
<string name="select_photo">Изабери фотографију</string>
|
||||
<string name="use_default">Користи подразумевано</string>
|
||||
<string name="volume">Јачина звука</string>
|
||||
<string name="brightness">Осветљење</string>
|
||||
<string name="lock_orientation">Закључај оријентацију</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Едитор</string>
|
||||
<string name="save">Сачувај</string>
|
||||
<string name="rotate">Ротирај</string>
|
||||
<string name="path">Стаза</string>
|
||||
<string name="invalid_image_path">Неисправна стаза слике</string>
|
||||
<string name="image_editing_failed">Измена слике неуспешна</string>
|
||||
<string name="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Minska antalet kolumner</string>
|
||||
<string name="change_cover_image">Byt omslagsbild</string>
|
||||
<string name="select_photo">Välj foto</string>
|
||||
<string name="use_default">Använd standard</string>
|
||||
<string name="volume">Volym</string>
|
||||
<string name="brightness">Ljusstyrka</string>
|
||||
<string name="lock_orientation">Aktivera rotationslås</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Redigerare</string>
|
||||
<string name="save">Spara</string>
|
||||
<string name="rotate">Rotera</string>
|
||||
<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="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Sütun sayısını azalt</string>
|
||||
<string name="change_cover_image">Kapak resmini değiştir</string>
|
||||
<string name="select_photo">Fotoğraf seç</string>
|
||||
<string name="use_default">Varsayılanı kullan</string>
|
||||
<string name="volume">Ses</string>
|
||||
<string name="brightness">Parlaklık</string>
|
||||
<string name="lock_orientation">Yönü kilitle</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Düzenleyici</string>
|
||||
<string name="save">Kaydet</string>
|
||||
<string name="rotate">Döndür</string>
|
||||
<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="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
@ -369,7 +366,7 @@
|
|||
<b>Tüm Basit Araçlar paketini buradan inceleyin:</b>
|
||||
https://www.simplemobiletools.com
|
||||
|
||||
<b>Basit Galeri Pro'nun bağımsız web sitesi:</b>
|
||||
<b>Basit Galeri Pro\'nun bağımsız web sitesi:</b>
|
||||
https://www.simplemobiletools.com/gallery
|
||||
|
||||
<b>Facebook:</b>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Зменшити кількість колонок</string>
|
||||
<string name="change_cover_image">Змінити обкладинку</string>
|
||||
<string name="select_photo">Вибрати фото</string>
|
||||
<string name="use_default">Використовувати за-замовчуванням</string>
|
||||
<string name="volume">Об\'єм</string>
|
||||
<string name="brightness">Яскравість</string>
|
||||
<string name="lock_orientation">Закріпити орієнтацію</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Редактор</string>
|
||||
<string name="save">Зберегти</string>
|
||||
<string name="rotate">Обернути</string>
|
||||
<string name="path">Шлях</string>
|
||||
<string name="invalid_image_path">Неприпустимий шлях до зображення</string>
|
||||
<string name="image_editing_failed">Не вдалося редагувати зображення</string>
|
||||
<string name="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Giảm số lượng cột</string>
|
||||
<string name="change_cover_image">Thay đổi ảnh bìa</string>
|
||||
<string name="select_photo">Chọn ảnh</string>
|
||||
<string name="use_default">Sử dụng mặc định</string>
|
||||
<string name="volume">Âm lượng</string>
|
||||
<string name="brightness">Độ sáng</string>
|
||||
<string name="lock_orientation">Khóa xoay màn hình</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Trình biên tập</string>
|
||||
<string name="save">Lưu</string>
|
||||
<string name="rotate">Xoay</string>
|
||||
<string name="path">Đường dẫn</string>
|
||||
<string name="invalid_image_path">Đường dẫn hình ảnh không hợp lệ</string>
|
||||
<string name="image_editing_failed">Thất bại</string>
|
||||
<string name="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">显示更少项目</string>
|
||||
<string name="change_cover_image">更换封面图片</string>
|
||||
<string name="select_photo">选择图片</string>
|
||||
<string name="use_default">使用默认</string>
|
||||
<string name="volume">音量</string>
|
||||
<string name="brightness">亮度</string>
|
||||
<string name="lock_orientation">锁定屏幕方向</string>
|
||||
|
@ -31,7 +30,7 @@
|
|||
<string name="fix_date_taken">修复拍摄日期</string>
|
||||
<string name="fixing">正在修复…</string>
|
||||
<string name="dates_fixed_successfully">日期修复成功</string>
|
||||
<string name="no_date_takens_found">No Date Taken values have been found</string>
|
||||
<string name="no_date_takens_found">没有找到拍摄日期</string>
|
||||
<string name="share_resized">调整尺寸并分享</string>
|
||||
<string name="upgraded_from_free">嘿,\n\n你似乎已经从旧的免费版应用升级。你现在可以卸载旧版本,在该版本的应用设置顶部有一个“升级到专业版”按钮。\n\n此操作会删除回收站项目,取消标记收藏项目,并重置应用设置。\n\n谢谢!</string>
|
||||
<string name="switch_to_file_search">切换文件搜索范围为所有可见的文件夹</string>
|
||||
|
@ -42,8 +41,8 @@
|
|||
<string name="videos">视频</string>
|
||||
<string name="gifs">GIF</string>
|
||||
<string name="raw_images">RAW 图片</string>
|
||||
<string name="svgs">SVG</string>
|
||||
<string name="portraits">Portraits</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>
|
||||
|
||||
|
@ -78,13 +77,11 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">编辑器</string>
|
||||
<string name="save">保存</string>
|
||||
<string name="rotate">旋转</string>
|
||||
<string name="path">路径</string>
|
||||
<string name="invalid_image_path">无效的图片路径</string>
|
||||
<string name="image_editing_failed">图片编辑失败</string>
|
||||
<string name="image_editing_cancelled">Image editing cancelled</string>
|
||||
<string name="file_edited_successfully">File edited successfully</string>
|
||||
<string name="image_editing_cancelled">取消图片编辑</string>
|
||||
<string name="file_edited_successfully">文件编辑成功</string>
|
||||
<string name="edit_image_with">编辑方式:</string>
|
||||
<string name="no_editor_found">没有找到图片编辑器</string>
|
||||
<string name="unknown_file_location">未知文件位置</string>
|
||||
|
@ -205,85 +202,85 @@
|
|||
<string name="toggle_file_visibility">隐藏文件</string>
|
||||
|
||||
<!-- New editor strings -->
|
||||
<string name="pesdk_transform_button_freeCrop">Custom</string>
|
||||
<string name="pesdk_transform_button_resetCrop">Reset</string>
|
||||
<string name="pesdk_transform_button_squareCrop">Square</string>
|
||||
<string name="pesdk_transform_title_name">Transform</string>
|
||||
<string name="pesdk_filter_title_name">Filter</string>
|
||||
<string name="pesdk_filter_asset_none">None</string>
|
||||
<string name="pesdk_adjustments_title_name">Adjust</string>
|
||||
<string name="pesdk_adjustments_button_shadowTool">Shadows</string>
|
||||
<string name="pesdk_adjustments_button_exposureTool">Exposure</string>
|
||||
<string name="pesdk_adjustments_button_highlightTool">Highlights</string>
|
||||
<string name="pesdk_adjustments_button_brightnessTool">Brightness</string>
|
||||
<string name="pesdk_adjustments_button_contrastTool">Contrast</string>
|
||||
<string name="pesdk_adjustments_button_saturationTool">Saturation</string>
|
||||
<string name="pesdk_adjustments_button_clarityTool">Clarity</string>
|
||||
<string name="pesdk_adjustments_button_gammaTool">Gamma</string>
|
||||
<string name="pesdk_adjustments_button_blacksTool">Blacks</string>
|
||||
<string name="pesdk_adjustments_button_whitesTool">Whites</string>
|
||||
<string name="pesdk_adjustments_button_temperatureTool">Temperature</string>
|
||||
<string name="pesdk_adjustments_button_sharpnessTool">Sharpness</string>
|
||||
<string name="pesdk_adjustments_button_reset">Reset</string>
|
||||
<string name="pesdk_focus_title_name">Focus</string>
|
||||
<string name="pesdk_focus_title_disabled">None</string>
|
||||
<string name="pesdk_focus_button_radial">Radial</string>
|
||||
<string name="pesdk_focus_button_linear">Linear</string>
|
||||
<string name="pesdk_focus_button_mirrored">Mirrored</string>
|
||||
<string name="pesdk_focus_button_gaussian">Gaussian</string>
|
||||
<string name="pesdk_text_title_name">Text</string>
|
||||
<string name="pesdk_text_title_options">Text Options</string>
|
||||
<string name="pesdk_text_title_textColor">Text Color</string>
|
||||
<string name="pesdk_text_title_font">Font</string>
|
||||
<string name="pesdk_text_button_add">Add</string>
|
||||
<string name="pesdk_text_button_edit">Edit</string>
|
||||
<string name="pesdk_text_button_straighten">Straighten</string>
|
||||
<string name="pesdk_text_button_font">Font</string>
|
||||
<string name="pesdk_text_button_color">Color</string>
|
||||
<string name="pesdk_text_button_backgroundColor">BG Color</string>
|
||||
<string name="pesdk_text_button_alignment">Alignment</string>
|
||||
<string name="pesdk_text_button_bringToFront">To Front</string>
|
||||
<string name="pesdk_text_button_delete">Delete</string>
|
||||
<string name="pesdk_text_text_editTextPlaceholder">Your text</string>
|
||||
<string name="pesdk_brush_title_name">Brush</string>
|
||||
<string name="pesdk_brush_button_color">Color</string>
|
||||
<string name="pesdk_brush_button_size">Size</string>
|
||||
<string name="pesdk_brush_button_hardness">Hardness</string>
|
||||
<string name="pesdk_brush_button_bringToFront">To Front</string>
|
||||
<string name="pesdk_brush_button_delete">Delete</string>
|
||||
<string name="pesdk_brush_title_brushColor">Brush Color</string>
|
||||
<string name="pesdk_editor_title_name">Editor</string>
|
||||
<string name="pesdk_editor_title_closeEditorAlert">Close Editor?</string>
|
||||
<string name="pesdk_editor_text_closeEditorAlert">Do you really want to discard the image?</string>
|
||||
<string name="pesdk_editor_button_closeEditorAlertConfirmation">Yes</string>
|
||||
<string name="pesdk_editor_button_closeEditorAlertCancelation">No</string>
|
||||
<string name="pesdk_editor_cancel">Cancel</string>
|
||||
<string name="pesdk_editor_accept">Accept</string>
|
||||
<string name="pesdk_editor_save">Save</string>
|
||||
<string name="pesdk_editor_text_exportProgressUnknown">Exporting image…</string>
|
||||
<string name="pesdk_editor_text_exportProgress" formatted="false">Exporting image %s.</string>
|
||||
<string name="pesdk_common_button_flipH">Flip H</string>
|
||||
<string name="pesdk_common_button_flipV">Flip V</string>
|
||||
<string name="pesdk_common_button_undo">Undo</string>
|
||||
<string name="pesdk_common_button_redo">Redo</string>
|
||||
<string name="pesdk_common_title_colorPicker">Color Picker</string>
|
||||
<string name="pesdk_common_title_transparentColor">Transparent</string>
|
||||
<string name="pesdk_common_title_whiteColor">White</string>
|
||||
<string name="pesdk_common_title_grayColor">Gray</string>
|
||||
<string name="pesdk_common_title_blackColor">Black</string>
|
||||
<string name="pesdk_common_title_lightBlueColor">Light blue</string>
|
||||
<string name="pesdk_common_title_blueColor">Blue</string>
|
||||
<string name="pesdk_common_title_purpleColor">Purple</string>
|
||||
<string name="pesdk_common_title_orchidColor">Orchid</string>
|
||||
<string name="pesdk_common_title_pinkColor">Pink</string>
|
||||
<string name="pesdk_common_title_redColor">Red</string>
|
||||
<string name="pesdk_common_title_orangeColor">Orange</string>
|
||||
<string name="pesdk_common_title_goldColor">Gold</string>
|
||||
<string name="pesdk_common_title_yellowColor">Yellow</string>
|
||||
<string name="pesdk_common_title_oliveColor">Olive</string>
|
||||
<string name="pesdk_common_title_greenColor">Green</string>
|
||||
<string name="pesdk_common_title_aquamarinColor">Aquamarin</string>
|
||||
<string name="pesdk_common_title_pipettableColor">Pipettable color</string>
|
||||
<string name="pesdk_transform_button_freeCrop">自定义</string>
|
||||
<string name="pesdk_transform_button_resetCrop">重置</string>
|
||||
<string name="pesdk_transform_button_squareCrop">正方形</string>
|
||||
<string name="pesdk_transform_title_name">裁剪旋转</string>
|
||||
<string name="pesdk_filter_title_name">滤镜</string>
|
||||
<string name="pesdk_filter_asset_none">无</string>
|
||||
<string name="pesdk_adjustments_title_name">调整</string>
|
||||
<string name="pesdk_adjustments_button_shadowTool">阴影</string>
|
||||
<string name="pesdk_adjustments_button_exposureTool">曝光</string>
|
||||
<string name="pesdk_adjustments_button_highlightTool">高光</string>
|
||||
<string name="pesdk_adjustments_button_brightnessTool">亮度</string>
|
||||
<string name="pesdk_adjustments_button_contrastTool">对比度</string>
|
||||
<string name="pesdk_adjustments_button_saturationTool">饱和度</string>
|
||||
<string name="pesdk_adjustments_button_clarityTool">清晰度</string>
|
||||
<string name="pesdk_adjustments_button_gammaTool">伽马</string>
|
||||
<string name="pesdk_adjustments_button_blacksTool">黑色</string>
|
||||
<string name="pesdk_adjustments_button_whitesTool">白色</string>
|
||||
<string name="pesdk_adjustments_button_temperatureTool">色温</string>
|
||||
<string name="pesdk_adjustments_button_sharpnessTool">锐化</string>
|
||||
<string name="pesdk_adjustments_button_reset">重置</string>
|
||||
<string name="pesdk_focus_title_name">对焦</string>
|
||||
<string name="pesdk_focus_title_disabled">无</string>
|
||||
<string name="pesdk_focus_button_radial">放射</string>
|
||||
<string name="pesdk_focus_button_linear">线性</string>
|
||||
<string name="pesdk_focus_button_mirrored">镜像</string>
|
||||
<string name="pesdk_focus_button_gaussian">高斯</string>
|
||||
<string name="pesdk_text_title_name">文字</string>
|
||||
<string name="pesdk_text_title_options">文字选项</string>
|
||||
<string name="pesdk_text_title_textColor">文字颜色</string>
|
||||
<string name="pesdk_text_title_font">字体</string>
|
||||
<string name="pesdk_text_button_add">添加</string>
|
||||
<string name="pesdk_text_button_edit">编辑</string>
|
||||
<string name="pesdk_text_button_straighten">拉伸</string>
|
||||
<string name="pesdk_text_button_font">字体</string>
|
||||
<string name="pesdk_text_button_color">颜色</string>
|
||||
<string name="pesdk_text_button_backgroundColor">背景颜色</string>
|
||||
<string name="pesdk_text_button_alignment">对齐</string>
|
||||
<string name="pesdk_text_button_bringToFront">移到最上层</string>
|
||||
<string name="pesdk_text_button_delete">删除</string>
|
||||
<string name="pesdk_text_text_editTextPlaceholder">你的文字</string>
|
||||
<string name="pesdk_brush_title_name">笔刷</string>
|
||||
<string name="pesdk_brush_button_color">颜色</string>
|
||||
<string name="pesdk_brush_button_size">尺寸</string>
|
||||
<string name="pesdk_brush_button_hardness">硬度</string>
|
||||
<string name="pesdk_brush_button_bringToFront">移到最上层</string>
|
||||
<string name="pesdk_brush_button_delete">删除</string>
|
||||
<string name="pesdk_brush_title_brushColor">笔刷颜色</string>
|
||||
<string name="pesdk_editor_title_name">编辑器</string>
|
||||
<string name="pesdk_editor_title_closeEditorAlert">关闭编辑器?</string>
|
||||
<string name="pesdk_editor_text_closeEditorAlert">您确定要放弃编辑吗?</string>
|
||||
<string name="pesdk_editor_button_closeEditorAlertConfirmation">是</string>
|
||||
<string name="pesdk_editor_button_closeEditorAlertCancelation">否</string>
|
||||
<string name="pesdk_editor_cancel">取消</string>
|
||||
<string name="pesdk_editor_accept">接受</string>
|
||||
<string name="pesdk_editor_save">保存</string>
|
||||
<string name="pesdk_editor_text_exportProgressUnknown">图片导出中…</string>
|
||||
<string name="pesdk_editor_text_exportProgress" formatted="false">图片%s导出中。</string>
|
||||
<string name="pesdk_common_button_flipH">水平翻转</string>
|
||||
<string name="pesdk_common_button_flipV">垂直翻转</string>
|
||||
<string name="pesdk_common_button_undo">复原</string>
|
||||
<string name="pesdk_common_button_redo">取消复原</string>
|
||||
<string name="pesdk_common_title_colorPicker">选色器</string>
|
||||
<string name="pesdk_common_title_transparentColor">透明</string>
|
||||
<string name="pesdk_common_title_whiteColor">白色</string>
|
||||
<string name="pesdk_common_title_grayColor">灰色</string>
|
||||
<string name="pesdk_common_title_blackColor">黑色</string>
|
||||
<string name="pesdk_common_title_lightBlueColor">浅蓝</string>
|
||||
<string name="pesdk_common_title_blueColor">蓝色</string>
|
||||
<string name="pesdk_common_title_purpleColor">紫色</string>
|
||||
<string name="pesdk_common_title_orchidColor">淡紫</string>
|
||||
<string name="pesdk_common_title_pinkColor">粉红</string>
|
||||
<string name="pesdk_common_title_redColor">红色</string>
|
||||
<string name="pesdk_common_title_orangeColor">橘色</string>
|
||||
<string name="pesdk_common_title_goldColor">金色</string>
|
||||
<string name="pesdk_common_title_yellowColor">黄色</string>
|
||||
<string name="pesdk_common_title_oliveColor">橄榄绿</string>
|
||||
<string name="pesdk_common_title_greenColor">绿色</string>
|
||||
<string name="pesdk_common_title_aquamarinColor">碧绿</string>
|
||||
<string name="pesdk_common_title_pipettableColor">取色器</string>
|
||||
|
||||
<!-- FAQ -->
|
||||
<string name="faq_1_title">如何把简约图库设置为设备的默认图库?</string>
|
||||
|
@ -293,7 +290,7 @@
|
|||
<string name="faq_3_title">如何让某个相册始终显示在最上面?</string>
|
||||
<string name="faq_3_text">你可以长按该相册并在操作栏中点击图钉图标,这样 就可以将其固定在顶部了。你也可以固定多个文件夹,固定项目将按照默认排序方法排序。</string>
|
||||
<string name="faq_4_title">如何快进/快退视频?</string>
|
||||
<string name="faq_4_text">You can do it by double tapping the side of the screen, or tapping the current or max duration texts near the seekbar. If you enable opening videos on a separate screen in the app settings, you can use horizontal gestures too.</string>
|
||||
<string name="faq_4_text">您可以双击屏幕边缘或点击搜索栏附近的当前或总时长的文字。 如果您在应用设置中启用了在独立页面播放视频,则也可以使用水平手势。</string>
|
||||
<string name="faq_5_title">文件夹的隐藏和排除有什么区别?</string>
|
||||
<string name="faq_5_text">排除功能只是防止其在简约图库中显示,而隐藏功能则使用的是系统的方法,这样做也会在其他图库中隐藏。它的工作原理是在给定的文件夹中创建一个空的.nomedia文件,你可以使用任何文件管理器删除它。</string>
|
||||
<string name="faq_6_title">为什么会出现音乐艺术家封面或贴纸文件夹?</string>
|
||||
|
@ -319,7 +316,7 @@
|
|||
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
|
||||
<string name="app_title">简约图库 Pro - 图片管理 & 编辑</string>
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
<string name="app_short_description">Browse your memories without any interruptions with this photo and video gallery</string>
|
||||
<string name="app_short_description">使用此照片和视频库来毫无阻碍地浏览您的回忆</string>
|
||||
<string name="app_long_description">
|
||||
简约图库 Pro 是一个高度可定制的图库。管理并编辑你的照片,从回收站中恢复已删除的照片,保护并隐藏文件,查看RAW,SVG等等多种照片和视频格式。
|
||||
|
||||
|
@ -367,7 +364,7 @@
|
|||
<b>查看简约系列的所有应用:</b>
|
||||
https://www.simplemobiletools.com
|
||||
|
||||
<b>Standalone website of Simple Gallery Pro:</b>
|
||||
<b>简约图库 Pro的独立网站:</b>
|
||||
https://www.simplemobiletools.com/gallery
|
||||
|
||||
<b>Facebook:</b>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">減少欄數</string>
|
||||
<string name="change_cover_image">更換封面圖片</string>
|
||||
<string name="select_photo">選擇相片</string>
|
||||
<string name="use_default">使用預設</string>
|
||||
<string name="volume">音量</string>
|
||||
<string name="brightness">亮度</string>
|
||||
<string name="lock_orientation">鎖定方向</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">編輯器</string>
|
||||
<string name="save">儲存</string>
|
||||
<string name="rotate">旋轉</string>
|
||||
<string name="path">路徑</string>
|
||||
<string name="invalid_image_path">無效的圖片路徑</string>
|
||||
<string name="image_editing_failed">圖片編輯失敗</string>
|
||||
<string name="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">減少欄數</string>
|
||||
<string name="change_cover_image">更換封面圖片</string>
|
||||
<string name="select_photo">選擇相片</string>
|
||||
<string name="use_default">使用預設</string>
|
||||
<string name="volume">音量</string>
|
||||
<string name="brightness">亮度</string>
|
||||
<string name="lock_orientation">鎖定方向</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">編輯器</string>
|
||||
<string name="save">儲存</string>
|
||||
<string name="rotate">旋轉</string>
|
||||
<string name="path">路徑</string>
|
||||
<string name="invalid_image_path">無效的圖片路徑</string>
|
||||
<string name="image_editing_failed">圖片編輯失敗</string>
|
||||
<string name="image_editing_cancelled">圖片編輯取消</string>
|
||||
|
@ -189,7 +186,7 @@
|
|||
<string name="allow_rotating_gestures">允許用手勢來旋轉圖片</string>
|
||||
<string name="file_loading_priority">檔案讀取優先權</string>
|
||||
<string name="speed">速度</string>
|
||||
<string name="compromise">折衷</string>
|
||||
<string name="compromise">妥協</string>
|
||||
<string name="avoid_showing_invalid_files">避免顯示無效的檔案</string>
|
||||
<string name="show_image_file_types">顯示圖片檔案類型</string>
|
||||
|
||||
|
@ -369,7 +366,7 @@
|
|||
<b>於此查看簡易工具系列全套:</b>
|
||||
https://www.simplemobiletools.com
|
||||
|
||||
<b>Standalone website of Simple Gallery Pro:</b>
|
||||
<b>簡易相簿 Pro的獨立網站:</b>
|
||||
https://www.simplemobiletools.com/gallery
|
||||
|
||||
<b>Facebook:</b>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="reduce_column_count">Reduce column count</string>
|
||||
<string name="change_cover_image">Change cover image</string>
|
||||
<string name="select_photo">Select photo</string>
|
||||
<string name="use_default">Use default</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Brightness</string>
|
||||
<string name="lock_orientation">Lock orientation</string>
|
||||
|
@ -78,9 +77,7 @@
|
|||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Editor</string>
|
||||
<string name="save">Save</string>
|
||||
<string name="rotate">Rotate</string>
|
||||
<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="image_editing_cancelled">Image editing cancelled</string>
|
||||
|
|
|
@ -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.61'
|
||||
ext.kotlin_version = '1.3.71'
|
||||
ext.is_proprietary = gradle.startParameter.taskNames.any { task -> task.contains("Proprietary") }
|
||||
|
||||
repositories {
|
||||
|
@ -13,10 +13,10 @@ buildscript {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.5.3'
|
||||
classpath 'com.android.tools.build:gradle:3.6.2'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
if (is_proprietary) {
|
||||
classpath 'ly.img.android.pesdk:plugin:7.1.9'
|
||||
classpath 'ly.img.android.pesdk:plugin:7.1.12'
|
||||
}
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
|
|
4
fastlane/metadata/android/en-US/changelogs/299.txt
Normal file
|
@ -0,0 +1,4 @@
|
|||
* Fixed some hiding, excluding and including related glitches
|
||||
* Flipped Pin and Properties icons at the top menu for better user experience
|
||||
* Avoid showing Portrait image folders at the main folders screen
|
||||
* Reverted back to the old image editor in the FOSS app version
|
4
fastlane/metadata/android/en-US/changelogs/300.txt
Normal file
|
@ -0,0 +1,4 @@
|
|||
* Properly delete playing videos
|
||||
* Removed the Manage Hidden Folders settings button on Android 10+, it no longer works
|
||||
* Added many changes under the hood in preparation for handling Scoped Storage soon
|
||||
* Do not require the Storage permission at some third party intents
|
3
fastlane/metadata/android/en-US/changelogs/301.txt
Normal file
|
@ -0,0 +1,3 @@
|
|||
* Fixed some SD card file related glitches
|
||||
* Improved some third party intent handling
|
||||
* Added some translation and stability improvements
|
BIN
fastlane/metadata/android/en-US/images/app_icon.png
Normal file
After Width: | Height: | Size: 6 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 295 KiB After Width: | Height: | Size: 287 KiB |
After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 19 KiB |
BIN
fastlane/metadata/android/en-US/images/promo_graphic.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 14 KiB |
BIN
fastlane/metadata/android/en-US/images/tv_banner.png
Normal file
After Width: | Height: | Size: 22 KiB |
4
gradle/wrapper/gradle-wrapper.properties
vendored
|
@ -1,6 +1,6 @@
|
|||
#Tue Aug 27 10:46:16 CEST 2019
|
||||
#Thu Mar 19 12:33:01 CET 2020
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
|
||||
|
|