diff --git a/CHANGELOG.md b/CHANGELOG.md index 769e4fa8a..717c71b10 100644 --- a/CHANGELOG.md +++ b/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)* ---------------------------- diff --git a/README.md b/README.md index 485b4d2da..501baa4b0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Simple Gallery -Logo +Logo 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. diff --git a/app/build.gradle b/app/build.gradle index 5c967a50a..8c700eb77 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 307682ab0..b871b2d77 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -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"> diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/EditActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/EditActivity.kt index 8d3532271..c9426fd29 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/EditActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/EditActivity.kt @@ -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() - } - } + initEditActivity() } 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 { - override fun onLoadFailed(e: GlideException?, model: Any?, target: Target?, isFirstResource: Boolean) = false + override fun onLoadFailed(e: GlideException?, model: Any?, target: Target?, isFirstResource: Boolean): Boolean { + if (uri != originalUri) { + uri = originalUri + Handler().post { + loadDefaultImageView() + } + } + return false + } override fun onResourceReady(bitmap: Bitmap?, model: Any?, target: Target?, 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) { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt index c5d929a84..82c781150 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MainActivity.kt @@ -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 || diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt index 06ad3005c..2eaf9f668 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/MediaActivity.kt @@ -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 } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaPhotoActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaPhotoActivity.kt index cbf066e42..362bd6f8b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaPhotoActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaPhotoActivity.kt @@ -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() - } - } + checkIntent() } 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 diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaVideoActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaVideoActivity.kt index 510f71792..b9a7976c3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaVideoActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PanoramaVideoActivity.kt @@ -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() - } - } + checkIntent() } 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) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt index 96dbc0fde..50600c6b0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/PhotoVideoActivity.kt @@ -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 diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SearchActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SearchActivity.kt index 69bfa3200..85dc0331a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SearchActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SearchActivity.kt @@ -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) { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt index 50133ccf5..8d43b89a8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SettingsActivity.kt @@ -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 { - FilePickerDialog(this) { - ensureBackgroundThread { - try { - parseFile(it) - } catch (e: Exception) { - showErrorToast(e) + 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 { + 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() inputStream.bufferedReader().use { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SimpleActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SimpleActivity.kt index da2a95982..6824b7038 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SimpleActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/SimpleActivity.kt @@ -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) { } } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/VideoPlayerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/VideoPlayerActivity.kt index ef1a6d537..6f994024d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/VideoPlayerActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/VideoPlayerActivity.kt @@ -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() - } - } + initPlayer() } override fun onResume() { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt index 77dffb031..55fc8f6b1 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/ViewPagerActivity.kt @@ -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 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 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) { + private fun gotMedia(thumbnailItems: ArrayList, ignorePlayingVideos: Boolean = false) { val media = thumbnailItems.asSequence().filter { it is Medium && !mIgnoredPaths.contains(it.path) }.map { it as Medium }.toMutableList() as ArrayList - 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 } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/asynctasks/GetMediaAsynctask.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/asynctasks/GetMediaAsynctask.kt index c459a0b30..5cbd156d6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/asynctasks/GetMediaAsynctask.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/asynctasks/GetMediaAsynctask.kt @@ -20,7 +20,7 @@ class GetMediaAsynctask(val context: Context, val mPath: String, val isPickImage override fun doInBackground(vararg params: Void): ArrayList { 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) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/ChangeSortingDialog.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/ChangeSortingDialog.kt index 9db8e7b13..cffa62738 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/ChangeSortingDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/ChangeSortingDialog.kt @@ -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 } } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/PickMediumDialog.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/PickMediumDialog.kt index 036b1eadf..2d9df0eb5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/PickMediumDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/PickMediumDialog.kt @@ -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 diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Activity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Activity.kt index c7703735e..fd7f24862 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Activity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Activity.kt @@ -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, 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()) } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt index 5834cf4fd..b205d09c9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/Context.kt @@ -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) -> Unit) { ensureBackgroundThread { val folders = ArrayList() - 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) -> 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 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) 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()) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt index ccfaa425b..2c0420b9a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/extensions/String.kt @@ -7,9 +7,9 @@ import com.simplemobiletools.commons.helpers.NOMEDIA import java.io.File import java.io.IOException -fun String.isThisOrParentIncluded(includedPaths: MutableSet) = includedPaths.any { startsWith(it, true) } +fun String.isThisOrParentIncluded(includedPaths: MutableSet) = includedPaths.any { equals(it, true) } || includedPaths.any { "$this/".startsWith("$it/", true) } -fun String.isThisOrParentExcluded(excludedPaths: MutableSet) = excludedPaths.any { startsWith(it, true) } +fun String.isThisOrParentExcluded(excludedPaths: MutableSet) = excludedPaths.any { equals(it, true) } || excludedPaths.any { "$this/".startsWith("$it/", true) } fun String.shouldFolderBeVisible(excludedPaths: MutableSet, includedPaths: MutableSet, showHidden: Boolean): Boolean { if (isEmpty()) { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/PhotoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/PhotoFragment.kt index 6f7064d55..3495e80a9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/PhotoFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/PhotoFragment.kt @@ -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) { } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/ViewPagerFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/ViewPagerFragment.kt index 41a31afe3..535aad447 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/ViewPagerFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/ViewPagerFragment.kt @@ -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!!) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Config.kt index 68ff6268b..06663d8f1 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Config.kt @@ -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 diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Constants.kt index 248cf6393..d6d6abef0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/Constants.kt @@ -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" diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt index f23e50b88..27c61a640 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/helpers/MediaFetcher.kt @@ -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 { - 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() 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 { @@ -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 + foldersToScan = foldersToScan.filter { it.shouldFolderBeVisible(excludedFolders, includedFolders, showHidden) }.toHashSet() return foldersToScan.distinctBy { it.getDistinctPath() }.toMutableSet() as LinkedHashSet } - private fun addFolder(curFolders: ArrayList, folder: String) { + private fun addFolder(curFolders: HashSet, 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() 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) { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/jobs/NewPhotoFetcher.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/jobs/NewPhotoFetcher.kt index e2c755ae0..ad5ada9f7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/jobs/NewPhotoFetcher.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/jobs/NewPhotoFetcher.kt @@ -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) } diff --git a/app/src/main/res/drawable-hdpi/ic_play_outline.png b/app/src/main/res/drawable-hdpi/ic_play_outline.png deleted file mode 100644 index 12be0724f..000000000 Binary files a/app/src/main/res/drawable-hdpi/ic_play_outline.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/ic_play_outline.png b/app/src/main/res/drawable-xhdpi/ic_play_outline.png deleted file mode 100644 index f99911f6c..000000000 Binary files a/app/src/main/res/drawable-xhdpi/ic_play_outline.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_play_outline.png b/app/src/main/res/drawable-xxhdpi/ic_play_outline.png deleted file mode 100644 index 156d6ca62..000000000 Binary files a/app/src/main/res/drawable-xxhdpi/ic_play_outline.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_play_outline.png b/app/src/main/res/drawable-xxxhdpi/ic_play_outline.png deleted file mode 100644 index 77370d426..000000000 Binary files a/app/src/main/res/drawable-xxxhdpi/ic_play_outline.png and /dev/null differ diff --git a/app/src/main/res/menu/cab_directories.xml b/app/src/main/res/menu/cab_directories.xml index 8c27750fc..3e9c55cbd 100644 --- a/app/src/main/res/menu/cab_directories.xml +++ b/app/src/main/res/menu/cab_directories.xml @@ -6,6 +6,11 @@ android:icon="@drawable/ic_delete_vector" android:title="@string/delete" app:showAsAction="ifRoom"/> + - تقليل عدد الأعمدة تغيير صورة الغلاف تحديد صورة - إستخدام كإفتراضي الصوت السبوع قفل الاتجاه @@ -78,9 +77,7 @@ تعديل - حفظ تدوير - المسار مسار الصورة غير صحيح فشل تعديل الصورة Image editing cancelled diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 09a2a7bdb..fdd551616 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -19,7 +19,6 @@ Reduce column count Change cover image Select photo - Use default Volume Brightness Lock orientation @@ -78,9 +77,7 @@ Editor - Save Rotate - Path Invalid image path Image editing failed Image editing cancelled diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 76bc342c6..aa267cf3f 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -19,7 +19,6 @@ Reduir el número de columnes Canviar imatge de portada Sel·leccionar imatge - Us per defecte Volum Brillantor Bloquejar orientació @@ -78,9 +77,7 @@ Editor - Guardar Rotar - Ruta Ruta de imatge no vàlida Ha fallat la edició de la imatge S\'ha cancel·lat l\'edició de la imatge diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 647f27e33..9cc297e7e 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -19,7 +19,6 @@ Snížit počet sloupců Změnit obal alba Vybrat fotografii - Použít výchozí Hlasitost Jas Uzamknout orientaci @@ -78,9 +77,7 @@ Editor - Uložit Otočit - Cesta Neplatná cesta Úprava souboru selhala Image editing cancelled diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index c969594f1..2dda54918 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -19,7 +19,6 @@ Færre kolonner Skift cover-billede Vælg billede - Brug standard Lydstyrke Lysstyrke Lås orientering @@ -31,7 +30,7 @@ Fiks eksponeringsdato Fikser… Datoer fikset med succes - No Date Taken values have been found + Ingen eksponeringsdatoer er fundet Del en skaleret version 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! Skift til filsøgning på tværs af synlige mapper @@ -78,13 +77,11 @@ Editor - Gem Roter - Sti Ugyldig sti til billede Redigering af billede mislykkedes - Image editing cancelled - File edited successfully + Billede redigering annulleret + Fil redigeret med succes Rediger billede med: Der blev ikke fundet en editor til billedbehandling Ukendt filplacering diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 2bf6dfda0..24ba36e45 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -19,7 +19,6 @@ Kacheln vergrößern Coverbild ändern Auswählen - Standard Lautstärke Helligkeit Bildausrichtung sperren @@ -78,9 +77,7 @@ Editor - Speichern Drehen - Pfad Ungültiger Dateipfad Bildbearbeitung fehlgeschlagen Image editing cancelled diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index b90b37cfd..b66ab9182 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -19,7 +19,6 @@ Μείωση αριθμού στηλών Αλλαγή εξώφυλλου φακέλου Επιλογή φωτογραφίας - Χρήση προεπιλεγμένης Ένταση Φωτεινότητα Κλείδωμα προσανατολισμού @@ -78,9 +77,7 @@ Επεξεργαστής - Αποθήκευση Περιστροφή - Διαδρομή Μη έγκυρη διαδρομή εικόνας Η επεξεργασία εικόνας απέτυχε Η επεξεργασία εικόνας ακυρώθηκε diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index e71a156ae..7bbde13bb 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -19,7 +19,6 @@ Reducir el número de columnas Cambiar imagen de portada Seleccionar imagen - Uso por defecto Volumen Brillo Bloquear orientación @@ -78,9 +77,7 @@ Editor - Guardar Rotar - Ruta Ruta de imagen no válida Falló la edición de imagen Edición de imagen cancelada diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index ee4727560..1385860e7 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -19,7 +19,6 @@ Vähennä sarakkeita Vaihda kansikuva Valitse kuva - Käytä oletuksia Äänenvoimakkuus Kirkkaus Lukitse näytönkierto @@ -78,9 +77,7 @@ Editori - Tallenna Käännä - Polku Kuvan polkua ei ole Kuvan muokkaus epäonnistui Image editing cancelled diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index d17748eff..3739156b6 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -19,7 +19,6 @@ Supprimer une colonne Changer l\'image du dossier Choisir une image - Image par défaut Volume Luminosité Verrouiller la rotation @@ -78,9 +77,7 @@ Éditeur - Sauvegarder Pivoter - Emplacement Emplacement invalide L\'édition de l\'image a échoué L\'édition de l\'image a été annulé diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index fa5ae19d5..aeeb8e9b7 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -19,7 +19,6 @@ Reduza o número de columnas Cambiar a imaxe de portada Escolla foto - Usar valor por omisión Volume Brillo Fixar orientación @@ -78,9 +77,7 @@ Editor - Gardar Rotar - Ruta Ruta a imaxe non válida Fallo na edición da imaxe Image editing cancelled diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index f27f92a1b..9927b9a55 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -19,7 +19,6 @@ Smanji broj stupaca Promjeni naslovnu sliku Odaberi sliku - Koristi zadano Glasnoća Svjetlina Zaključaj orijentaciju slike @@ -78,9 +77,7 @@ Uređivač - Spremi Rotiraj - Putanja Neispravna putanja slike Uređivanje slika nije uspjelo Image editing cancelled diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 524da5e32..dea3c1879 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -1,331 +1,328 @@ - Simple Gallery - Galéria - Szerkesztés - Kamera megnyitása - (rejtett) - (kizárva) - Mappa kitűzés - Mappa kitűzés megszüntetése - Kitűzés felülre - Mutassa az összes mappa tartalmát - Összes mappa - Váltás mappa nézetre - Egyéb mappa - Mutassa a térképen - Ismeretlen helyszín - Növelje az oszlopok számát - Csökkentse az oszlopok számát - Borítókép változtatása - Válasszon fotót - Alapértelmezett használata - Hangerő - Fényerő - Tájolás zárolása - Tájolás feloldása - Tájolás változtatása - Álló mód kényszerítése - Fekvő mód kényszerítése - Alapértelmezett tájolás használata - Dátum javítása - Javítás... - Sikeres dátum javítás + Simple Gallery + Galéria + Szerkesztés + Kamera megnyitása + (rejtett) + (kizárva) + Mappa kitűzés + Mappa kitűzés megszüntetése + Kitűzés felülre + Mutassa az összes mappa tartalmát + Összes mappa + Váltás mappa nézetre + Egyéb mappa + Mutassa a térképen + Ismeretlen helyszín + Növelje az oszlopok számát + Csökkentse az oszlopok számát + Borítókép változtatása + Válasszon fotót + Hangerő + Fényerő + Tájolás zárolása + Tájolás feloldása + Tájolás változtatása + Álló mód kényszerítése + Fekvő mód kényszerítése + Alapértelmezett tájolás használata + Dátum javítása + Javítás... + Sikeres dátum javítás No Date Taken values have been found - Átméretezett verzió megosztása - Hey,\n\nseems like you upgraded from the old free app. You can now uninstall the old version, which has an \'Upgrade to Pro\' button at the top of the app settings.\n\nYou will only have the Recycle bin items deleted, favorite items unmarked and you will also have to reset your app settings.\n\nThanks! - Váltás a fájlkeresésre az összes látható mappában - - - Média szűrő - Kép - Videó - GIF - RAW kép - SVG - Portraits - A kiválasztott szűrők nem találtak médiafájlokat. - Szűrők változtatása - - - Ez a funkció elrejti a mappát egy \'.nomedia\' fájl hozzáadásával, és elrejti az almappákat is. Láthatóvá teheti ezeket a Beállítások \"Mutassa a rejtett elemeket\" menüpontban. Folytatja? - Kizárás - Kizárt mappák - Kizárt mappák kezelése - Ez kizárja a kijelölést és az alkönyvtárakat a Simple Gallery alkalmazásból. A kizárt mappákat a Beállításokban kezelheti. - Kizárja a szülő mappát? - A mappák kizárásával az almappákkal együtt elrejti a Simple Gallery alkalmazásban, de továbbra is láthatóak maradnak más alkalmazásokban.\n\nHa el szeretné rejteni őket más alkalmazásokban is, használja az Elrejtés funkciót. - Összes eltávolítása - Összes mappa eltávolítása a Kizárás listából. Ez nem törli a mappákat. - Rejtett mappák - Rejtett mappák kezelése - Úgy tűnik, a mappái nincsenek elrejtve egy \".nomedia\" fájllal. - - - Befoglalt mappák - Befoglalt mappák kezelése - Mappa hozzáadása - Ha vannak olyan mappák, amelyek média fájlokat tartalmaznak, de az alkalmazás nem ismerte fel, akkor kézzel is hozzáadhatja ezeket.\n\nAz elemek hozzáadása nem zár ki más mappákat. - Nem talált médiafájlokat. Ezt megoldhatja a médiafájlokat tartalmazó mappák manuális hozzáadásával. - - - Átméretezés - Kiválasztás átméretezése és mentés - Szélesség - Magasság - Képarány megtartása - Írjon be érvényes felbontást - - - Szerkesztő - Mentés - Forgatás - Elérési útvonal - Érvénytelen kép elérési útvonal - Sikertelen kép szerkesztés + Átméretezett verzió megosztása + Hey,\n\nseems like you upgraded from the old free app. You can now uninstall the old version, which has an \'Upgrade to Pro\' button at the top of the app settings.\n\nYou will only have the Recycle bin items deleted, favorite items unmarked and you will also have to reset your app settings.\n\nThanks! + Váltás a fájlkeresésre az összes látható mappában + + + Média szűrő + Kép + Videó + GIF + RAW kép + SVG + Portraits + A kiválasztott szűrők nem találtak médiafájlokat. + Szűrők változtatása + + + Ez a funkció elrejti a mappát egy \'.nomedia\' fájl hozzáadásával, és elrejti az almappákat is. Láthatóvá teheti ezeket a Beállítások \"Mutassa a rejtett elemeket\" menüpontban. Folytatja? + Kizárás + Kizárt mappák + Kizárt mappák kezelése + Ez kizárja a kijelölést és az alkönyvtárakat a Simple Gallery alkalmazásból. A kizárt mappákat a Beállításokban kezelheti. + Kizárja a szülő mappát? + A mappák kizárásával az almappákkal együtt elrejti a Simple Gallery alkalmazásban, de továbbra is láthatóak maradnak más alkalmazásokban.\n\nHa el szeretné rejteni őket más alkalmazásokban is, használja az Elrejtés funkciót. + Összes eltávolítása + Összes mappa eltávolítása a Kizárás listából. Ez nem törli a mappákat. + Rejtett mappák + Rejtett mappák kezelése + Úgy tűnik, a mappái nincsenek elrejtve egy \".nomedia\" fájllal. + + + Befoglalt mappák + Befoglalt mappák kezelése + Mappa hozzáadása + Ha vannak olyan mappák, amelyek média fájlokat tartalmaznak, de az alkalmazás nem ismerte fel, akkor kézzel is hozzáadhatja ezeket.\n\nAz elemek hozzáadása nem zár ki más mappákat. + Nem talált médiafájlokat. Ezt megoldhatja a médiafájlokat tartalmazó mappák manuális hozzáadásával. + + + Átméretezés + Kiválasztás átméretezése és mentés + Szélesség + Magasság + Képarány megtartása + Írjon be érvényes felbontást + + + Szerkesztő + Forgatás + Érvénytelen kép elérési útvonal + Sikertelen kép szerkesztés Image editing cancelled - A fájl szerkesztése sikerült - Kép szerkesztés ezzel: - Nem található kép szerkesztő - Ismeretlen fájl hely - Nem lehet felülírni a forrás fájlt - Forgatás balra - Forgatás jobbra - 180º-os forgatás - Tükrözés - Tükrözés vízszintesen - Tükrözés függőlegesen - Szabad - - - Egyéb - - - - Simple Wallpaper - Beállítás háttérképként - Nem sikerült a beállítás háttérképként - Beállítás háttérképként ezzel: - Beállítás háttérképként... - Sikeresen beállítva háttérképnek - Álló képarány - Fekvő képarány - Kezdő képernyő - Zárolás képernyő - Kezdő és zárolás képernyő - - - Diavetítés - Időköz (másodperc): - Fotók befoglalása - Videók befoglalása - GIF befoglalása - Véletlen sorrend - Áthelyezés hátra - Diavetítés ismétlése - Animáció - Nincs - Áttűnés - Csúsztatás - A diavetítés vége - A diavetítéshez nem található média - - - Nézet típus változtatása - Rács - Lista - Közvetlen almappa csoport - - - Csoportosítás - Nincs csoportosítás - Mappa - Utolsó módosítás - Utoljára módosítva (naponta) - Utoljára módosítva (havonta) - Dátum - Felvétel dátuma (naponta) - Felvétel dátuma (havonta) - Fájl típus - Kiterjesztés - Kérjük, vegye figyelembe, hogy a csoportosítás és a rendezés 2 egymástól független mező - - - Mappa mutatása a widgeten: - Mutassa a mappa nevét - - - Automatikus videó lejátszás - Emlékezzen a videó utolsó lejátszási pozícióra - Fájlnév láthatóság módosítása - Videók ismétlése - Animált GIF miniatűr - Maximális fényerő a teljes képernyős médiánál - Miniatűrök négyzet alakúra vágva - Mutassa a videó időtartamát - Teljes képernyős média forgatása - Rendszer beállítások - Eszköz elforgatás - Képarány - Fekete háttérszín teljes képernyős médiánál - Miniatűrök görgetése vízszintesen - Automatikusan elrejti a rendszer UI-t teljes képernyőn - Az üres mappák törlése a tartalom törlése után - Engedélyezi a kép fényerő módosítást függőleges gesztusokkal - Engedélyezi a videó hangerő és fényerő módosítást függőleges gesztusokkal - Mutassa a fájlok számát a mappákban - Mutassa a kiterjesztett adatokat a teljes képernyős médián keresztül - Bővített részletek kezelése - Engedélyezi az egy ujjas nagyítást a teljes képernyős médiában - Engedélyezi a azonnali média váltást a képernyő oldalára kattintva - Engedélyezi a képek mély nagyítását - Bővített részletek elrejtése az állapotsor rejtett állapotában - Mutassa a művelet gombokat a képernyő alján - Mutassa a Lomtárat a mappák képernyőjén - Mély nagyítású képek - Mutassa a képeket a lehető legjobb minőségben - Mutassa a Lomtárat a fő képernyő utolsó elemeként - Engedélyezi a teljes képernyős nézetet a lefelé mozdulattal - Engedélyezi az 1:1 nagyítást két dupla érintéssel - Mindig külön képernyőn nyissa meg a videókat új vízszintes mozdulattal - Notch mutatása, ha elérhető - Engedélyezi a kép forgatását gesztusokkal - Fájl betöltés prioritása - Gyors - Kiegyensúlyozott - Kerülje az érvénytelen fájlok mutatását - Mutassa a kép fájl típusokat - - - Miniatűrök - Teljes képernyős média - Bővített részletek - Gomb műveletek - - - Látható gomb műveletek kezelése - Kedvencek módosítása - Fájl láthatóság módosítása - - - Egyéni - Alaphelyzetbe - Square - Transform - Szűrő - Nincs - Beállít - Árnyékok - Exposure - Highlights - Fényesség - Kontraszt - Színtelítettség - Világosság - Gamma - Blacks - Whites - Színhőmérséklet - Élesség - Alaphelyzetbe - Fókusz - Nincs - Radial - Linear - Tükrözött - Gaussian - Szöveg - Szöveg beállítások - Szöveg színe - Betűtípus - Hozzáadás - Szerkesztés - Straighten - Betűtípus - Szín - Háttérszín - Igazítás - Előre - Törlés - Saját szöveg - Ecset - Szín - Méret - Keménység - Előre - Törlés - Ecset színe - Szerkesztő - Bezárja a szerkesztőt? - Valóban el akarja dobni a képet? - Igen - Nem - Mégsem - Elfogad - Mentés - Kép exportálása... - %s kép exportálása - Tükrözés vízszintesen - Tükrözés függőlegesen - Visszavonás - Visszavom - Színválasztó - Áttetsző - Fehér - Szürke - Fekete - Világoskék - Kék - Bíbor - Orchidea - Rózsaszín - Piros - Narancssárga - Arany - Sárga - Oliva - Zöld - Aquamarin - Pipetta szín - - - Hogyan tudom beállítani a Simple Gallery-t alapértelmezett galériának? - Először meg kell találnia az alapértelmezett galériát az eszköz beállításainak Alkalmazások részében. Keressen egy olyan gombot, amely valami olyasmit, mint az \"Legyen alapértelmezett\", kattintson rá, majd válassza a \"Alapértelmezések törlése\" pontot. + A fájl szerkesztése sikerült + Kép szerkesztés ezzel: + Nem található kép szerkesztő + Ismeretlen fájl hely + Nem lehet felülírni a forrás fájlt + Forgatás balra + Forgatás jobbra + 180º-os forgatás + Tükrözés + Tükrözés vízszintesen + Tükrözés függőlegesen + Szabad + + + Egyéb + + + + Simple Wallpaper + Beállítás háttérképként + Nem sikerült a beállítás háttérképként + Beállítás háttérképként ezzel: + Beállítás háttérképként... + Sikeresen beállítva háttérképnek + Álló képarány + Fekvő képarány + Kezdő képernyő + Zárolás képernyő + Kezdő és zárolás képernyő + + + Diavetítés + Időköz (másodperc): + Fotók befoglalása + Videók befoglalása + GIF befoglalása + Véletlen sorrend + Áthelyezés hátra + Diavetítés ismétlése + Animáció + Nincs + Áttűnés + Csúsztatás + A diavetítés vége + A diavetítéshez nem található média + + + Nézet típus változtatása + Rács + Lista + Közvetlen almappa csoport + + + Csoportosítás + Nincs csoportosítás + Mappa + Utolsó módosítás + Utoljára módosítva (naponta) + Utoljára módosítva (havonta) + Dátum + Felvétel dátuma (naponta) + Felvétel dátuma (havonta) + Fájl típus + Kiterjesztés + Kérjük, vegye figyelembe, hogy a csoportosítás és a rendezés 2 egymástól független mező + + + Mappa mutatása a widgeten: + Mutassa a mappa nevét + + + Automatikus videó lejátszás + Emlékezzen a videó utolsó lejátszási pozícióra + Fájlnév láthatóság módosítása + Videók ismétlése + Animált GIF miniatűr + Maximális fényerő a teljes képernyős médiánál + Miniatűrök négyzet alakúra vágva + Mutassa a videó időtartamát + Teljes képernyős média forgatása + Rendszer beállítások + Eszköz elforgatás + Képarány + Fekete háttérszín teljes képernyős médiánál + Miniatűrök görgetése vízszintesen + Automatikusan elrejti a rendszer UI-t teljes képernyőn + Az üres mappák törlése a tartalom törlése után + Engedélyezi a kép fényerő módosítást függőleges gesztusokkal + Engedélyezi a videó hangerő és fényerő módosítást függőleges gesztusokkal + Mutassa a fájlok számát a mappákban + Mutassa a kiterjesztett adatokat a teljes képernyős médián keresztül + Bővített részletek kezelése + Engedélyezi az egy ujjas nagyítást a teljes képernyős médiában + Engedélyezi a azonnali média váltást a képernyő oldalára kattintva + Engedélyezi a képek mély nagyítását + Bővített részletek elrejtése az állapotsor rejtett állapotában + Mutassa a művelet gombokat a képernyő alján + Mutassa a Lomtárat a mappák képernyőjén + Mély nagyítású képek + Mutassa a képeket a lehető legjobb minőségben + Mutassa a Lomtárat a fő képernyő utolsó elemeként + Engedélyezi a teljes képernyős nézetet a lefelé mozdulattal + Engedélyezi az 1:1 nagyítást két dupla érintéssel + Mindig külön képernyőn nyissa meg a videókat új vízszintes mozdulattal + Notch mutatása, ha elérhető + Engedélyezi a kép forgatását gesztusokkal + Fájl betöltés prioritása + Gyors + Kiegyensúlyozott + Kerülje az érvénytelen fájlok mutatását + Mutassa a kép fájl típusokat + + + Miniatűrök + Teljes képernyős média + Bővített részletek + Gomb műveletek + + + Látható gomb műveletek kezelése + Kedvencek módosítása + Fájl láthatóság módosítása + + + Egyéni + Alaphelyzetbe + Square + Transform + Szűrő + Nincs + Beállít + Árnyékok + Exposure + Highlights + Fényesség + Kontraszt + Színtelítettség + Világosság + Gamma + Blacks + Whites + Színhőmérséklet + Élesség + Alaphelyzetbe + Fókusz + Nincs + Radial + Linear + Tükrözött + Gaussian + Szöveg + Szöveg beállítások + Szöveg színe + Betűtípus + Hozzáadás + Szerkesztés + Straighten + Betűtípus + Szín + Háttérszín + Igazítás + Előre + Törlés + Saját szöveg + Ecset + Szín + Méret + Keménység + Előre + Törlés + Ecset színe + Szerkesztő + Bezárja a szerkesztőt? + Valóban el akarja dobni a képet? + Igen + Nem + Mégsem + Elfogad + Mentés + Kép exportálása... + %s kép exportálása + Tükrözés vízszintesen + Tükrözés függőlegesen + Visszavonás + Visszavom + Színválasztó + Áttetsző + Fehér + Szürke + Fekete + Világoskék + Kék + Bíbor + Orchidea + Rózsaszín + Piros + Narancssárga + Arany + Sárga + Oliva + Zöld + Aquamarin + Pipetta szín + + + Hogyan tudom beállítani a Simple Gallery-t alapértelmezett galériának? + Először meg kell találnia az alapértelmezett galériát az eszköz beállításainak Alkalmazások részében. Keressen egy olyan gombot, amely valami olyasmit, mint az \"Legyen alapértelmezett\", kattintson rá, majd válassza a \"Alapértelmezések törlése\" pontot. A következő alkalommal, amikor megpróbál megnyitni egy képet vagy videót, megjelenik egy alkalmazásválasztó, ahol kiválaszthatja a Simple Gallery lehetőséget, és beállíthatja alapértelmezett alkalmazásnak. - Zároltam az alkalmazást jelszóval, de elfelejtettem. Mit tehetek? - 2 módon is megoldhatja. Újratelepítheti az alkalmazást, vagy megkeresi az alkalmazást az eszköz beállításai között, és válassza az \"Adatok törlése\" lehetőséget. Minden beállítást visszaállít alapértelmezettre. Ez nem távolítja el a média fájlokat. - Hogyan állíthatok be egy albumot úgy, hogy mindig felül legyen? - Hosszan nyomja meg a kívánt albumot, és válassza ki a Kitűzés ikont a művelet menüben, ami rögzíti felülre. Többféle mappát is kitűzhet, ezeket az elemeket az alapértelmezett rendezési mód szerint rendezi. - Hogyan tudom előre tekerni a videókat? - 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. - Mi a különbség a mappa elrejtése és kizárása között? - A Kizárás megakadályozza, hogy a mappát a Simple Gallery megjelenítse, az Elrejtés pedig rendszer szinten működik, és elrejti a mappát más galériákból is. Úgy működik, hogy létrehoz egy üres \". nomedia\" nevű fájlt az adott mappában, amelyet bármikor eltávolíthat bármilyen fájlkezelővel is. - Miért jelennek meg a zenei borítóval vagy matricával rendelkező mappák? - Lehet, hogy látni fog néhány szokatlan album megjelenést. Könnyen kizárhatja a hosszú megnyomással és a Kizárás kiválasztásával. A következő párbeszédablakban kiválaszthatja a szülő mappát, és valószínűleg megakadályozza, hogy a többi kapcsolódó album is megjelenjen. - A képekkel nem rendelkező mappa nem jelenik meg, vagy nem jeleníti meg az összes elemet. Mit tehetek? - Ennek több oka lehet, de megoldása egyszerű. Menjen a Beállítások -> Befoglalt mappák kezelése lehetőségre, válassza a plusz jelet, és keresse meg a kívánt mappát. - Mi van, ha csak néhány különleges mappát szeretnék látni? - A Befoglalt mappákhoz tartozó mappák hozzáadása nem zár ki automatikusan semmit. Amit tehetünk, menjünk a Beállítások -> Kizárt mappák kezelése, kizárjuk a gyökérmappát \"/ \", utána hozzáadjuk a kívánt mappákat a Beállítások -> Befoglalt mappák kezelése menüpontban. + Zároltam az alkalmazást jelszóval, de elfelejtettem. Mit tehetek? + 2 módon is megoldhatja. Újratelepítheti az alkalmazást, vagy megkeresi az alkalmazást az eszköz beállításai között, és válassza az \"Adatok törlése\" lehetőséget. Minden beállítást visszaállít alapértelmezettre. Ez nem távolítja el a média fájlokat. + Hogyan állíthatok be egy albumot úgy, hogy mindig felül legyen? + Hosszan nyomja meg a kívánt albumot, és válassza ki a Kitűzés ikont a művelet menüben, ami rögzíti felülre. Többféle mappát is kitűzhet, ezeket az elemeket az alapértelmezett rendezési mód szerint rendezi. + Hogyan tudom előre tekerni a videókat? + 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. + Mi a különbség a mappa elrejtése és kizárása között? + A Kizárás megakadályozza, hogy a mappát a Simple Gallery megjelenítse, az Elrejtés pedig rendszer szinten működik, és elrejti a mappát más galériákból is. Úgy működik, hogy létrehoz egy üres \". nomedia\" nevű fájlt az adott mappában, amelyet bármikor eltávolíthat bármilyen fájlkezelővel is. + Miért jelennek meg a zenei borítóval vagy matricával rendelkező mappák? + Lehet, hogy látni fog néhány szokatlan album megjelenést. Könnyen kizárhatja a hosszú megnyomással és a Kizárás kiválasztásával. A következő párbeszédablakban kiválaszthatja a szülő mappát, és valószínűleg megakadályozza, hogy a többi kapcsolódó album is megjelenjen. + A képekkel nem rendelkező mappa nem jelenik meg, vagy nem jeleníti meg az összes elemet. Mit tehetek? + Ennek több oka lehet, de megoldása egyszerű. Menjen a Beállítások -> Befoglalt mappák kezelése lehetőségre, válassza a plusz jelet, és keresse meg a kívánt mappát. + Mi van, ha csak néhány különleges mappát szeretnék látni? + A Befoglalt mappákhoz tartozó mappák hozzáadása nem zár ki automatikusan semmit. Amit tehetünk, menjünk a Beállítások -> Kizárt mappák kezelése, kizárjuk a gyökérmappát \"/ \", utána hozzáadjuk a kívánt mappákat a Beállítások -> Befoglalt mappák kezelése menüpontban. Ezzel csak a kiválasztott mappák láthatók, mivel a kizárás és a befoglalás rekurzív. Ha egy mappát hozzáadunk mindkettőhöz, akkor megjelenik. - Tudom vágni a képeket ezzel az alkalmazással? - Igen, megvághatja a képeket a szerkesztőben a kép sarkainak húzásával. A szerkesztőhöz eljuthat egy miniatűr kép hosszú megnyomásával és a Szerkesztés választásával, vagy a Szerkesztés választásával a teljes képernyős nézetben. - Valamilyen módon össze tudom csoportosítani a médiafájl bélyegképeit? - Persze, a miniatűr nézetben használja a \"Csoport\" menüpontot. A fájlokat többféle kritérium alapján csoportosíthatja, beleértve a dátumot is. Ha a \"Mutassa az összes mappa tartalmát\" funkciót választja, akkor mappákba is csoportosíthatja ezeket. - A dátum szerinti rendezés nem működik megfelelően, hogyan tudom megjavítani? - Valószínűleg a fájlok másolásából származik. Ezt a fájl bélyegképének kiválasztásával és a \"Dátum javítása\" lehetőség kiválasztásával oldhatja meg. - Néhány színcsíkot látok a képeken. Hogyan javíthatom a minőséget? - Az esetek többségében a kép megjelenítés jelenlegi megoldása jól működik. Ha még jobb képminőséget szeretne, engedélyezheti a \"Mutassa a képeket a lehető legjobb minőségben\" opcióval az alkalmazás beállításaiban, a \"Mély nagyítású képek\" szakaszban. - Elrejtettem egy fájlt/mappát. Hogyan tudom látni? - A rejtett elemek megtekintéséhez nyomja meg a \"Rejtettek ideiglenes mutatása\" elemet a fő képernyőn, vagy válassza a \"Mutassa a rejtett elemeket\" az alkalmazás beállításaiban. Ha meg akarja szüntetni, csak hosszan nyomja meg, és válassza a \"Elrejtés megszüntetés\" lehetőséget. A mappák elrejtése egy rejtett \". nomedia\" fájl hozzáadásával történik. Ezt a fájlt bármelyik fájlkezelővel is törölheti. - Miért használ az alkalmazás ennyi helyet? - Az alkalmazás gyorsítótára akár a 250 MB-ot is meghaladhatja, és ez gyorsabb megjelenítést biztosít. Ha az alkalmazás még több helyet foglal el, a legvalószínűbb oka, hogy a Lomtárban is van elem. Ezek a fájlok is az alkalmazás méretébe számítanak bele. Törölheti a Lomtárat azzal, hogy megnyitja és törli az összes fájlt vagy az alkalmazás beállításait. A Lomtárban lévő minden fájl 30 nap elteltével automatikusan törlődik. - - - - Simple Gallery Pro - Photo Manager & Editor - - Browse your memories without any interruptions with this photo and video gallery - + Tudom vágni a képeket ezzel az alkalmazással? + Igen, megvághatja a képeket a szerkesztőben a kép sarkainak húzásával. A szerkesztőhöz eljuthat egy miniatűr kép hosszú megnyomásával és a Szerkesztés választásával, vagy a Szerkesztés választásával a teljes képernyős nézetben. + Valamilyen módon össze tudom csoportosítani a médiafájl bélyegképeit? + Persze, a miniatűr nézetben használja a \"Csoport\" menüpontot. A fájlokat többféle kritérium alapján csoportosíthatja, beleértve a dátumot is. Ha a \"Mutassa az összes mappa tartalmát\" funkciót választja, akkor mappákba is csoportosíthatja ezeket. + A dátum szerinti rendezés nem működik megfelelően, hogyan tudom megjavítani? + Valószínűleg a fájlok másolásából származik. Ezt a fájl bélyegképének kiválasztásával és a \"Dátum javítása\" lehetőség kiválasztásával oldhatja meg. + Néhány színcsíkot látok a képeken. Hogyan javíthatom a minőséget? + Az esetek többségében a kép megjelenítés jelenlegi megoldása jól működik. Ha még jobb képminőséget szeretne, engedélyezheti a \"Mutassa a képeket a lehető legjobb minőségben\" opcióval az alkalmazás beállításaiban, a \"Mély nagyítású képek\" szakaszban. + Elrejtettem egy fájlt/mappát. Hogyan tudom látni? + A rejtett elemek megtekintéséhez nyomja meg a \"Rejtettek ideiglenes mutatása\" elemet a fő képernyőn, vagy válassza a \"Mutassa a rejtett elemeket\" az alkalmazás beállításaiban. Ha meg akarja szüntetni, csak hosszan nyomja meg, és válassza a \"Elrejtés megszüntetés\" lehetőséget. A mappák elrejtése egy rejtett \". nomedia\" fájl hozzáadásával történik. Ezt a fájlt bármelyik fájlkezelővel is törölheti. + Miért használ az alkalmazás ennyi helyet? + Az alkalmazás gyorsítótára akár a 250 MB-ot is meghaladhatja, és ez gyorsabb megjelenítést biztosít. Ha az alkalmazás még több helyet foglal el, a legvalószínűbb oka, hogy a Lomtárban is van elem. Ezek a fájlok is az alkalmazás méretébe számítanak bele. Törölheti a Lomtárat azzal, hogy megnyitja és törli az összes fájlt vagy az alkalmazás beállításait. A Lomtárban lévő minden fájl 30 nap elteltével automatikusan törlődik. + + + + Simple Gallery Pro - Photo Manager & Editor + + Browse your memories without any interruptions with this photo and video gallery + Simple Gallery Pro is a highly customizable offline gallery. Organize & edit your photos, recover deleted files with the recycle bin, protect & hide files and view a huge variety of different photo & video formats including RAW, SVG and much more. The app contains no ads and unnecessary permissions. As the app doesn’t require internet access either, your privacy is protected. @@ -381,7 +378,7 @@ Ezzel csak a kiválasztott mappák láthatók, mivel a kizárás és a befoglal Reddit: https://www.reddit.com/r/SimpleMobileTools - diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index 314d1c2aa..578450ecd 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -19,7 +19,6 @@ Kurangi jumlah kolom Ubah gambar kover Pilih foto - Gunakan default Volume Kecerahan Kunci orientasi @@ -78,9 +77,7 @@ Penyunting - Simpan Rotasi - Jalur Jalur gambar tidak valid Gagal menyunting gambar Image editing cancelled diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index a7d39d9ad..70c4eb0e8 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -19,7 +19,6 @@ Kurangi jumlah kolom Ubah gambar kover Pilih foto - Gunakan default Volume Kecerahan Kunci orientasi @@ -78,9 +77,7 @@ Penyunting - Simpan Rotasi - Jalur Jalur gambar tidak valid Gagal menyunting gambar Image editing cancelled diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index bf92f199c..434755d3f 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -19,7 +19,6 @@ Riduci numero colonne Cambia immagine copertina Seleziona foto - Usa predefinita Volume Luminosità Blocca orientamento @@ -31,7 +30,7 @@ Correggi valore Data acquisizione Correzione in corso… Date aggiornate correttamente - No Date Taken values have been found + Nessun valore trovato per data creazione Condividi una versione ridimensionata 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! Passa alla ricerca file su tutte le cartelle visibili @@ -78,13 +77,11 @@ Editor - Salva Ruota - Percorso Percorso dell\'immagine non valido Modifica dell\'immagine fallita - Image editing cancelled - File edited successfully + Modifica immagine annullata + File modificato correttamente Modifica immagine con: Editor delle immagini non trovato Posizione del file sconosciuta @@ -294,7 +291,7 @@ Come posso fare apparire un album sempre in cima? 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. Come avanzo velocemente nei video? - 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. + 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. Che differenza c\'è tra nascondere ed escludere una cartella? 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. Perchè vengono mostrate cartelle con copertine o adesivi di musica? @@ -321,7 +318,7 @@ Semplice Galleria Pro - gestore di foto & editor - Browse your memories without any interruptions with this photo and video gallery + Sfoglia le tue memorie senza interruzioni con questa galleria di foto e video 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 @@ Controlla le altre applicazioni qui: https://www.simplemobiletools.com - Standalone website of Simple Gallery Pro: + Sito internet di Semplice Galleria Pro: https://www.simplemobiletools.com/gallery Facebook: diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index d4f8effec..8d746ba15 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -19,7 +19,6 @@ 列数を減らす カバー画像を変更 写真を選択 - デフォルトに戻す 音量 明るさ 画面の向きを固定する @@ -78,9 +77,7 @@ 画像編集 - 保存 回転 - パス 無効な画像パス 画像の編集に失敗しました Image editing cancelled diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 866bded0e..166637daa 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -19,7 +19,6 @@ 섬네일크기 확대 커버 사진 변경 사진 선택 - 기본값 사용 볼륨 밝기 화면 회전 잠금 @@ -78,9 +77,7 @@ 편집 - 저장 회전 - 경로 유효하지 않은 사진 경로 사진 편집 실패 Image editing cancelled diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 2384a7e76..636a4faba 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -19,7 +19,6 @@ Sumažinti stulpelių skaičių Pakeisti viršelio atvaizdą Pasirinkti nuotrauką - Naudoti numatytąjį Garsas Ryškumas Užrakinti orientaciją @@ -78,9 +77,7 @@ Redaktorius - Saugoti Sukti - Kelias Netinkamas atvaizdo kelias Atvaizdo redagavimas nepavyko Image editing cancelled diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 305493c05..0c3e94123 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -19,7 +19,6 @@ Reduser antall kolonner Endre omslagsbilde Velg foto - Bruk standard Volum Lysstyrke Lås skjermorientering @@ -78,9 +77,7 @@ Redigering - Lagre Roter - Bane Ugyldig bildebane Bilderedigering feilet Image editing cancelled diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml index ed0704c7b..0bcb13087 100644 --- a/app/src/main/res/values-ne/strings.xml +++ b/app/src/main/res/values-ne/strings.xml @@ -19,7 +19,6 @@ कोलम सङ्खा घटाउनुहोस कभर तस्बिर परिवर्तन गर्नुहोस फोटो चयन गर्नुहोस - डिफल्ट प्रयोग गर्नुहोस भोलुम उज्यालोपन Lock orientation @@ -78,9 +77,7 @@ सम्पादक - बचत घुमाउने - Path Invalid image path Image editing failed Image editing cancelled diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index cb41c176c..fec603e35 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -19,7 +19,6 @@ Minder kolommen Afbeelding omslag wijzigen Foto selecteren - Standaard gebruiken Volume Helderheid Schermoriëntatie vergrendelen @@ -78,9 +77,7 @@ Bewerken - Opslaan Draaien - Pad Ongeldig pad naar afbeelding Fout bij bewerken van afbeelding Afbeelding bewerken is geannuleerd diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 7bab7b237..ece1bddf5 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -19,7 +19,6 @@ Zmniejsz liczbę kolumn Zmień okładkę Wybierz obraz - Użyj domyślnej Głośność Jasność Zablokuj orientację ekranu @@ -78,9 +77,7 @@ Edycja - Zapisz Obróć - Ścieżka Nieprawidłowa ścieżka Edycja obrazu nie powiodła się Anulowano edycję obrazu @@ -191,7 +188,7 @@ Szybkość Kompromis Unikaj pokazywania niewłaściwych plików - Show image file types + Pokazuj rozszerzenia zdjęć Miniatury diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 0be9a127e..67d38e5a1 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -19,7 +19,6 @@ Reduzir número de colunas Trocar imagem de capa Selecionar foto - Usar padrão Volume Brilho Travar orientação @@ -31,7 +30,7 @@ Corrigir data da foto Corrigindo… Datas corrigidas com sucesso - No Date Taken values have been found + Nenhum valor de data foi encontrado Compartilhar uma versão redimensionada 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! Alternar para a pesquisa de arquivos em todas as pastas visíveis @@ -78,12 +77,10 @@ Editor - Salvar Girar - Caminho Caminho inválido Falha na edição da imagem - Image editing cancelled + Edição de imagem cancelada Arquivo editado com sucesso Editar imagem com: Nenhum editor de imagem encontrado @@ -294,7 +291,7 @@ O que posso fazer para que uma pasta sempre apareça no topo da lista? 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. Como faço para avançar rapidamente um vídeo (fast forward)? - 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. + 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. Qual é a diferença entre ocultar e ignorar uma pasta? 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. Porque pastas com capas de CD de música ou figurinhas aparecem na lista? diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 674a4617d..8f8a6eb54 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -19,7 +19,6 @@ Diminuir número de colunas Alterar imagem de capa Selecionar foto - Predefinição Volume Brilho Bloquear orientação @@ -78,9 +77,7 @@ Editor - Guardar Rodar - Caminho Caminho inválido Falha na edição da imagem Edição de imagem cancelada @@ -369,7 +366,7 @@ Consulte todas as aplicações Simple Tools aqui: https://www.simplemobiletools.com - Standalone website of Simple Gallery Pro: + Sítio web de Simple Gallery Pro: https://www.simplemobiletools.com/gallery Facebook: diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index e870e1d94..2d9568cba 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -19,7 +19,6 @@ Убрать столбец Изменить обложку Выбрать изображение - Использовать по умолчанию Громкость Яркость Заблокировать ориентацию @@ -78,9 +77,7 @@ Редактор - Сохранить Поворот - Путь Недопустимый путь изображения Редактирование изображения не выполнено Редактирование изображения отменено diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 48acd5540..0f1135756 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -19,7 +19,6 @@ Znížiť počet stĺpcov Zmeniť obal albumu Zvoliť foto - Použiť predvolený Hlasitosť Jas Uzamknúť otočenie obrazovky @@ -78,9 +77,7 @@ Editor - Uložiť Otočiť - Cesta Neplatná cesta Úprava súboru zlyhala Úprava súboru bola zrušená diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 05d0d4ef8..b1c9df095 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -19,7 +19,6 @@ Zmanjšaj število stolpcev Spremeni naslovno fotografijo Izberi fotografijo - Uporabi privzeto Glasnost Svetlost Zakleni usmerjenost @@ -78,9 +77,7 @@ Urejevalnik - Shrani Zavrti - Pot Napačna pot Urejanje slike ni uspelo Image editing cancelled diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index a300177ac..052c9045f 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -19,7 +19,6 @@ Смањи број колона Промени насловну слику Изабери фотографију - Користи подразумевано Јачина звука Осветљење Закључај оријентацију @@ -78,9 +77,7 @@ Едитор - Сачувај Ротирај - Стаза Неисправна стаза слике Измена слике неуспешна Image editing cancelled diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 11ba26fbb..2557a5934 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -19,7 +19,6 @@ Minska antalet kolumner Byt omslagsbild Välj foto - Använd standard Volym Ljusstyrka Aktivera rotationslås @@ -78,9 +77,7 @@ Redigerare - Spara Rotera - Sökväg Ogiltig bildsökväg Bilden kunde inte redigeras Image editing cancelled diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 2aff9f791..2fd5cea83 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -19,7 +19,6 @@ Sütun sayısını azalt Kapak resmini değiştir Fotoğraf seç - Varsayılanı kullan Ses Parlaklık Yönü kilitle @@ -78,9 +77,7 @@ Düzenleyici - Kaydet Döndür - Yol Geçersiz resim yolu Resim düzenleme başarısız Image editing cancelled @@ -369,7 +366,7 @@ Tüm Basit Araçlar paketini buradan inceleyin: https://www.simplemobiletools.com - Basit Galeri Pro'nun bağımsız web sitesi: + Basit Galeri Pro\'nun bağımsız web sitesi: https://www.simplemobiletools.com/gallery Facebook: diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 857801d58..a9ecbb25d 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -19,7 +19,6 @@ Зменшити кількість колонок Змінити обкладинку Вибрати фото - Використовувати за-замовчуванням Об\'єм Яскравість Закріпити орієнтацію @@ -78,9 +77,7 @@ Редактор - Зберегти Обернути - Шлях Неприпустимий шлях до зображення Не вдалося редагувати зображення Image editing cancelled diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 9fc56dcaa..f4f322e0a 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -19,7 +19,6 @@ Giảm số lượng cột Thay đổi ảnh bìa Chọn ảnh - Sử dụng mặc định Âm lượng Độ sáng Khóa xoay màn hình @@ -78,9 +77,7 @@ Trình biên tập - Lưu Xoay - Đường dẫn Đường dẫn hình ảnh không hợp lệ Thất bại Image editing cancelled diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index edc71fd10..cccb42685 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -19,7 +19,6 @@ 显示更少项目 更换封面图片 选择图片 - 使用默认 音量 亮度 锁定屏幕方向 @@ -31,7 +30,7 @@ 修复拍摄日期 正在修复… 日期修复成功 - No Date Taken values have been found + 没有找到拍摄日期 调整尺寸并分享 嘿,\n\n你似乎已经从旧的免费版应用升级。你现在可以卸载旧版本,在该版本的应用设置顶部有一个“升级到专业版”按钮。\n\n此操作会删除回收站项目,取消标记收藏项目,并重置应用设置。\n\n谢谢! 切换文件搜索范围为所有可见的文件夹 @@ -42,8 +41,8 @@ 视频 GIF RAW 图片 - SVG - Portraits + SVG 矢量图 + 人像 没有媒体文件匹配选定的筛选条件。 更改筛选条件 @@ -78,13 +77,11 @@ 编辑器 - 保存 旋转 - 路径 无效的图片路径 图片编辑失败 - Image editing cancelled - File edited successfully + 取消图片编辑 + 文件编辑成功 编辑方式: 没有找到图片编辑器 未知文件位置 @@ -205,85 +202,85 @@ 隐藏文件 - Custom - Reset - Square - Transform - Filter - None - Adjust - Shadows - Exposure - Highlights - Brightness - Contrast - Saturation - Clarity - Gamma - Blacks - Whites - Temperature - Sharpness - Reset - Focus - None - Radial - Linear - Mirrored - Gaussian - Text - Text Options - Text Color - Font - Add - Edit - Straighten - Font - Color - BG Color - Alignment - To Front - Delete - Your text - Brush - Color - Size - Hardness - To Front - Delete - Brush Color - Editor - Close Editor? - Do you really want to discard the image? - Yes - No - Cancel - Accept - Save - Exporting image… - Exporting image %s. - Flip H - Flip V - Undo - Redo - Color Picker - Transparent - White - Gray - Black - Light blue - Blue - Purple - Orchid - Pink - Red - Orange - Gold - Yellow - Olive - Green - Aquamarin - Pipettable color + 自定义 + 重置 + 正方形 + 裁剪旋转 + 滤镜 + + 调整 + 阴影 + 曝光 + 高光 + 亮度 + 对比度 + 饱和度 + 清晰度 + 伽马 + 黑色 + 白色 + 色温 + 锐化 + 重置 + 对焦 + + 放射 + 线性 + 镜像 + 高斯 + 文字 + 文字选项 + 文字颜色 + 字体 + 添加 + 编辑 + 拉伸 + 字体 + 颜色 + 背景颜色 + 对齐 + 移到最上层 + 删除 + 你的文字 + 笔刷 + 颜色 + 尺寸 + 硬度 + 移到最上层 + 删除 + 笔刷颜色 + 编辑器 + 关闭编辑器? + 您确定要放弃编辑吗? + + + 取消 + 接受 + 保存 + 图片导出中… + 图片%s导出中。 + 水平翻转 + 垂直翻转 + 复原 + 取消复原 + 选色器 + 透明 + 白色 + 灰色 + 黑色 + 浅蓝 + 蓝色 + 紫色 + 淡紫 + 粉红 + 红色 + 橘色 + 金色 + 黄色 + 橄榄绿 + 绿色 + 碧绿 + 取色器 如何把简约图库设置为设备的默认图库? @@ -293,7 +290,7 @@ 如何让某个相册始终显示在最上面? 你可以长按该相册并在操作栏中点击图钉图标,这样 就可以将其固定在顶部了。你也可以固定多个文件夹,固定项目将按照默认排序方法排序。 如何快进/快退视频? - 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. + 您可以双击屏幕边缘或点击搜索栏附近的当前或总时长的文字。 如果您在应用设置中启用了在独立页面播放视频,则也可以使用水平手势。 文件夹的隐藏和排除有什么区别? 排除功能只是防止其在简约图库中显示,而隐藏功能则使用的是系统的方法,这样做也会在其他图库中隐藏。它的工作原理是在给定的文件夹中创建一个空的.nomedia文件,你可以使用任何文件管理器删除它。 为什么会出现音乐艺术家封面或贴纸文件夹? @@ -319,7 +316,7 @@ 简约图库 Pro - 图片管理 & 编辑 - Browse your memories without any interruptions with this photo and video gallery + 使用此照片和视频库来毫无阻碍地浏览您的回忆 简约图库 Pro 是一个高度可定制的图库。管理并编辑你的照片,从回收站中恢复已删除的照片,保护并隐藏文件,查看RAW,SVG等等多种照片和视频格式。 @@ -367,7 +364,7 @@ 查看简约系列的所有应用: https://www.simplemobiletools.com - Standalone website of Simple Gallery Pro: + 简约图库 Pro的独立网站: https://www.simplemobiletools.com/gallery Facebook: diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 665112cfb..d9eea967b 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -19,7 +19,6 @@ 減少欄數 更換封面圖片 選擇相片 - 使用預設 音量 亮度 鎖定方向 @@ -78,9 +77,7 @@ 編輯器 - 儲存 旋轉 - 路徑 無效的圖片路徑 圖片編輯失敗 Image editing cancelled diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index a4d7239bd..40615de37 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -19,7 +19,6 @@ 減少欄數 更換封面圖片 選擇相片 - 使用預設 音量 亮度 鎖定方向 @@ -78,9 +77,7 @@ 編輯器 - 儲存 旋轉 - 路徑 無效的圖片路徑 圖片編輯失敗 圖片編輯取消 @@ -189,7 +186,7 @@ 允許用手勢來旋轉圖片 檔案讀取優先權 速度 - 折衷 + 妥協 避免顯示無效的檔案 顯示圖片檔案類型 @@ -369,7 +366,7 @@ 於此查看簡易工具系列全套: https://www.simplemobiletools.com - Standalone website of Simple Gallery Pro: + 簡易相簿 Pro的獨立網站: https://www.simplemobiletools.com/gallery Facebook: diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 920cea2e4..d50f8f240 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -19,7 +19,6 @@ Reduce column count Change cover image Select photo - Use default Volume Brightness Lock orientation @@ -78,9 +77,7 @@ Editor - Save Rotate - Path Invalid image path Image editing failed Image editing cancelled diff --git a/build.gradle b/build.gradle index 84a9b3b9f..35d026a68 100644 --- a/build.gradle +++ b/build.gradle @@ -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 diff --git a/fastlane/metadata/android/en-US/changelogs/299.txt b/fastlane/metadata/android/en-US/changelogs/299.txt new file mode 100644 index 000000000..aaacdfa46 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/299.txt @@ -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 diff --git a/fastlane/metadata/android/en-US/changelogs/300.txt b/fastlane/metadata/android/en-US/changelogs/300.txt new file mode 100644 index 000000000..351f5c268 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/300.txt @@ -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 diff --git a/fastlane/metadata/android/en-US/changelogs/301.txt b/fastlane/metadata/android/en-US/changelogs/301.txt new file mode 100644 index 000000000..9c594c40d --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/301.txt @@ -0,0 +1,3 @@ + * Fixed some SD card file related glitches + * Improved some third party intent handling + * Added some translation and stability improvements diff --git a/fastlane/metadata/android/en-US/images/app_icon.png b/fastlane/metadata/android/en-US/images/app_icon.png new file mode 100644 index 000000000..84db52906 Binary files /dev/null and b/fastlane/metadata/android/en-US/images/app_icon.png differ diff --git a/fastlane/metadata/android/en-US/images/circle.png b/fastlane/metadata/android/en-US/images/circle.png deleted file mode 100644 index 13a06c9c9..000000000 Binary files a/fastlane/metadata/android/en-US/images/circle.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/featureGraphic.png b/fastlane/metadata/android/en-US/images/featureGraphic.png index 27b47a155..313517f4f 100644 Binary files a/fastlane/metadata/android/en-US/images/featureGraphic.png and b/fastlane/metadata/android/en-US/images/featureGraphic.png differ diff --git a/fastlane/metadata/android/en-US/images/featureGraphic_classic.png b/fastlane/metadata/android/en-US/images/featureGraphic_classic.png new file mode 100644 index 000000000..fa6f71d35 Binary files /dev/null and b/fastlane/metadata/android/en-US/images/featureGraphic_classic.png differ diff --git a/fastlane/metadata/android/en-US/images/icon.png b/fastlane/metadata/android/en-US/images/icon.png index 2056c1e20..b2ea97d57 100644 Binary files a/fastlane/metadata/android/en-US/images/icon.png and b/fastlane/metadata/android/en-US/images/icon.png differ diff --git a/fastlane/metadata/android/en-US/images/promo_graphic.png b/fastlane/metadata/android/en-US/images/promo_graphic.png new file mode 100644 index 000000000..52aedd675 Binary files /dev/null and b/fastlane/metadata/android/en-US/images/promo_graphic.png differ diff --git a/fastlane/metadata/android/en-US/images/square.png b/fastlane/metadata/android/en-US/images/square.png index 777308907..353caac87 100644 Binary files a/fastlane/metadata/android/en-US/images/square.png and b/fastlane/metadata/android/en-US/images/square.png differ diff --git a/fastlane/metadata/android/en-US/images/square.xcf b/fastlane/metadata/android/en-US/images/square.xcf index 526ac388f..39e96feb0 100644 Binary files a/fastlane/metadata/android/en-US/images/square.xcf and b/fastlane/metadata/android/en-US/images/square.xcf differ diff --git a/fastlane/metadata/android/en-US/images/tv_banner.png b/fastlane/metadata/android/en-US/images/tv_banner.png new file mode 100644 index 000000000..a9d0ecabc Binary files /dev/null and b/fastlane/metadata/android/en-US/images/tv_banner.png differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e9392819f..aa6500f74 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -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