diff --git a/CHANGELOG.md b/CHANGELOG.md index e82275519..9b21a461b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,28 @@ Changelog ========== +Version 4.6.4 *(2018-09-22)* +---------------------------- + + * Fixed lag at zooming fullscreen images on some devices + +Version 4.6.3 *(2018-09-21)* +---------------------------- + + * Improved zooming performance at fullscreen view + * Fixed showing conflict resolution dialog at Move + * Fixed selection check icons at horizontal scrolling + * Fixed displaying some fullscreen images, where file path contained percentage sign or hashtag + * Optimized many database operations + * Fixed many other smaller issues + +Version 4.6.2 *(2018-09-05)* +---------------------------- + + * Fixed opening some email client attachments and MMS images + * Attempt to fix lagging at zooming in on some devices + * Couple other smaller bugfixes and improvements + Version 4.6.1 *(2018-08-21)* ---------------------------- diff --git a/app/build.gradle b/app/build.gradle index 492a94415..e26f5bdbd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,15 +4,15 @@ apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 27 - buildToolsVersion "27.0.3" + compileSdkVersion 28 + buildToolsVersion "28.0.3" defaultConfig { applicationId "com.simplemobiletools.gallery" minSdkVersion 16 - targetSdkVersion 27 - versionCode 197 - versionName "4.6.1" + targetSdkVersion 28 + versionCode 200 + versionName "4.6.4" multiDexEnabled true setProperty("archivesBaseName", "gallery") } @@ -42,19 +42,15 @@ android { } } -ext { - leakCanaryVersion = '1.5.4' -} - dependencies { - implementation 'com.simplemobiletools:commons:4.6.14' + implementation 'com.simplemobiletools:commons:4.8.0' implementation 'com.theartofdev.edmodo:android-image-cropper:2.7.0' implementation 'com.android.support:multidex:1.0.3' implementation 'it.sephiroth.android.exif:library:1.0.1' - implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.12' - implementation 'com.android.support.constraint:constraint-layout:1.1.2' - implementation 'com.google.android.exoplayer:exoplayer-core:2.8.2' - implementation 'com.google.vr:sdk-panowidget:1.150.0' + implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.15' + implementation 'com.android.support.constraint:constraint-layout:1.1.3' + implementation 'com.google.android.exoplayer:exoplayer-core:2.8.4' + implementation 'com.google.vr:sdk-panowidget:1.170.0' implementation 'org.apache.sanselan:sanselan:0.97-incubator' implementation 'info.androidhive:imagefilters:1.0.7' implementation 'com.squareup.picasso:picasso:2.71828' @@ -65,14 +61,11 @@ dependencies { implementation "android.arch.persistence.room:runtime:1.1.1" annotationProcessor "android.arch.persistence.room:compiler:1.1.1" - //implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.9.0' - implementation 'com.github.tibbi:subsampling-scale-image-view:v3.10.0-fork' + //implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.10.0' + implementation 'com.github.tibbi:subsampling-scale-image-view:v3.10.1-fork' // implementation 'com.github.chrisbanes:PhotoView:2.1.4' implementation 'com.github.tibbi:PhotoView:2.1.4-fork' - - debugImplementation "com.squareup.leakcanary:leakcanary-android:$leakCanaryVersion" - releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$leakCanaryVersion" } Properties props = new Properties() diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index efaa38cf9..4248ccc76 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -1,4 +1,5 @@ -keep class com.simplemobiletools.** { *; } +-dontwarn android.graphics.Canvas -dontwarn com.simplemobiletools.** -dontwarn org.apache.** diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/App.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/App.kt index 665817fb5..e1562b1b4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/App.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/App.kt @@ -3,18 +3,10 @@ package com.simplemobiletools.gallery import android.support.multidex.MultiDexApplication import com.github.ajalt.reprint.core.Reprint import com.simplemobiletools.commons.extensions.checkUseEnglish -import com.squareup.leakcanary.LeakCanary class App : MultiDexApplication() { override fun onCreate() { super.onCreate() - if (BuildConfig.DEBUG) { - if (LeakCanary.isInAnalyzerProcess(this)) { - return - } - LeakCanary.install(this) - } - checkUseEnglish() Reprint.initialize(this) } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/MainActivity.kt index 6ed9d73dc..154c96a04 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/MainActivity.kt @@ -89,6 +89,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { config.temporarilyShowHidden = false config.tempSkipDeleteConfirmation = false removeTempFolder() + checkRecycleBinItems() } mIsPickImageIntent = isPickImageIntent(intent) @@ -139,8 +140,6 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { config.filterMedia += TYPE_SVGS } } - - checkRecycleBinItems() } override fun onStart() { @@ -421,9 +420,14 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { } override fun deleteFolders(folders: ArrayList) { - val fileDirItems = folders.map { FileDirItem(it.absolutePath, it.name, true) } as ArrayList - fileDirItems.forEach { - toast(String.format(getString(R.string.deleting_folder), it.name), Toast.LENGTH_LONG) + val fileDirItems = folders.asSequence().filter { it.isDirectory }.map { FileDirItem(it.absolutePath, it.name, true) }.toMutableList() as ArrayList + when { + fileDirItems.isEmpty() -> return + fileDirItems.size == 1 -> toast(String.format(getString(R.string.deleting_folder), fileDirItems.first().name)) + else -> { + val deletingItems = resources.getQuantityString(R.plurals.deleting_items, fileDirItems.size, fileDirItems.size) + toast(deletingItems) + } } if (config.useRecycleBin) { @@ -983,15 +987,13 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { } private fun checkRecycleBinItems() { - if (config.useRecycleBin) { - Thread { - val deletedMedia = mMediumDao.getDeletedMedia() - deletedMedia.forEach { - if (System.currentTimeMillis() > it.deletedTS + MONTH_MILLISECONDS) { - mMediumDao.deleteMediumPath(it.path) - } - } - }.start() + if (config.useRecycleBin && config.lastBinCheck < System.currentTimeMillis() - DAY_SECONDS * 1000) { + config.lastBinCheck = System.currentTimeMillis() + Handler().postDelayed({ + Thread { + mMediumDao.deleteOldRecycleBinItems(System.currentTimeMillis() - MONTH_MILLISECONDS) + }.start() + }, 3000L) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/MediaActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/MediaActivity.kt index 5107c3d21..5cb161a06 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/MediaActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/MediaActivity.kt @@ -832,7 +832,11 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { } override fun tryDeleteFiles(fileDirItems: ArrayList) { - val filtered = fileDirItems.filter { it.path.isMediaFile() } as ArrayList + val filtered = fileDirItems.filter { File(it.path).isFile && it.path.isMediaFile() } as ArrayList + if (filtered.isEmpty()) { + return + } + val deletingItems = resources.getQuantityString(R.plurals.deleting_items, filtered.size, filtered.size) toast(deletingItems) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/PhotoVideoActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/PhotoVideoActivity.kt index 602130cac..9ae24e5d8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/PhotoVideoActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/PhotoVideoActivity.kt @@ -88,11 +88,11 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList val file = File(mUri.toString()) val filename = getFilenameFromUri(mUri!!) val type = when { - filename.isImageFast() -> TYPE_IMAGES filename.isVideoFast() -> TYPE_VIDEOS filename.isGif() -> TYPE_GIFS filename.isRawFast() -> TYPE_RAWS - else -> TYPE_SVGS + filename.isSvg() -> TYPE_SVGS + else -> TYPE_IMAGES } mMedium = Medium(null, filename, mUri.toString(), mUri!!.path.getParentPath(), 0, 0, file.length(), type, false, 0L) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/SettingsActivity.kt index 596b79ffc..d6086baaf 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/SettingsActivity.kt @@ -67,6 +67,7 @@ class SettingsActivity : SimpleActivity() { setupShowInfoBubble() setupEnablePullToRefresh() setupAllowZoomingImages() + setupShowHighestQuality() setupOneFingerZoom() setupAllowInstantChange() setupShowExtendedDetails() @@ -84,7 +85,7 @@ class SettingsActivity : SimpleActivity() { private fun setupSectionColors() { val adjustedPrimaryColor = getAdjustedPrimaryColor() arrayListOf(visibility_label, videos_label, thumbnails_label, scrolling_label, fullscreen_media_label, security_label, - file_operations_label, extended_details_label, bottom_actions_label, recycle_bin_label).forEach { + file_operations_label, deep_zoomable_images_label, extended_details_label, bottom_actions_label, recycle_bin_label).forEach { it.setTextColor(adjustedPrimaryColor) } } @@ -337,10 +338,24 @@ class SettingsActivity : SimpleActivity() { private fun setupAllowZoomingImages() { settings_allow_zooming_images.isChecked = config.allowZoomingImages + updateDeepZoomToggleButtons() settings_allow_zooming_images_holder.setOnClickListener { settings_allow_zooming_images.toggle() config.allowZoomingImages = settings_allow_zooming_images.isChecked - settings_one_finger_zoom_holder.beVisibleIf(config.allowZoomingImages) + updateDeepZoomToggleButtons() + } + } + + private fun updateDeepZoomToggleButtons() { + settings_one_finger_zoom_holder.beVisibleIf(config.allowZoomingImages) + settings_show_highest_quality_holder.beVisibleIf(config.allowZoomingImages) + } + + private fun setupShowHighestQuality() { + settings_show_highest_quality.isChecked = config.showHighestQuality + settings_show_highest_quality_holder.setOnClickListener { + settings_show_highest_quality.toggle() + config.showHighestQuality = settings_show_highest_quality.isChecked } } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/DirectoryAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/DirectoryAdapter.kt index b419b121c..1c6f525f0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/DirectoryAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/DirectoryAdapter.kt @@ -521,11 +521,11 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList TYPE_IMAGES directory.tmb.isVideoFast() -> TYPE_VIDEOS directory.tmb.isGif() -> TYPE_GIFS directory.tmb.isRawFast() -> TYPE_RAWS - else -> TYPE_SVGS + directory.tmb.isSvg() -> TYPE_SVGS + else -> TYPE_IMAGES } activity.loadImage(thumbnailType, directory.tmb, dir_thumbnail, scrollHorizontally, animateGifs, cropThumbnails) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/MediaAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/MediaAdapter.kt index 990a2cf9d..6ff454a58 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/MediaAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/MediaAdapter.kt @@ -28,7 +28,6 @@ import com.simplemobiletools.gallery.models.ThumbnailItem import com.simplemobiletools.gallery.models.ThumbnailSection import kotlinx.android.synthetic.main.photo_video_item_grid.view.* import kotlinx.android.synthetic.main.thumbnail_section.view.* -import java.lang.Exception import java.text.SimpleDateFormat import java.util.* @@ -296,8 +295,13 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList) val recycleBinPath = filesDir.absolutePath + val mediaToDelete = ArrayList() media.filter { !getDoesFilePathExist(it.path) }.forEach { if (it.path.startsWith(recycleBinPath)) { mediumDao.deleteMediumPath(it.path.removePrefix(recycleBinPath)) } else { - mediumDao.deleteMediumPath(it.path) + mediaToDelete.add(it) } } + + mediumDao.deleteMedia(*mediaToDelete.toTypedArray()) }.start() } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/PhotoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/PhotoFragment.kt index 7210bec36..19688c461 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/PhotoFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/PhotoFragment.kt @@ -11,6 +11,7 @@ import android.graphics.drawable.ColorDrawable import android.graphics.drawable.PictureDrawable import android.media.ExifInterface.* import android.net.Uri +import android.os.Build import android.os.Bundle import android.os.Handler import android.util.DisplayMetrics @@ -47,21 +48,32 @@ import org.apache.sanselan.formats.jpeg.JpegImageParser import pl.droidsonroids.gif.GifDrawable import java.io.File import java.io.FileOutputStream +import java.util.* class PhotoFragment : ViewPagerFragment() { private val DEFAULT_DOUBLE_TAP_ZOOM = 2f private val ZOOMABLE_VIEW_LOAD_DELAY = 300L + // devices with good displays, but the rest of the hardware not good enough for them + private val WEIRD_DEVICES = arrayListOf( + "motorola xt1685", + "google nexus 5x" + ) + private var isFragmentVisible = false private var isFullscreen = false private var wasInit = false private var isPanorama = false + private var isSubsamplingVisible = false // checking view.visibility is unreliable, use an extra variable for it private var imageOrientation = -1 private var gifDrawable: GifDrawable? = null private var loadZoomableViewHandler = Handler() private var storedShowExtendedDetails = false private var storedHideExtendedDetails = false + private var storedAllowDeepZoomableImages = false + private var storedShowHighestQuality = false + private var storedAllowOneFingerZoom = false private var storedExtendedDetails = 0 lateinit var view: ViewGroup @@ -146,18 +158,26 @@ class PhotoFragment : ViewPagerFragment() { override fun onResume() { super.onResume() - if (wasInit && (context!!.config.showExtendedDetails != storedShowExtendedDetails || context!!.config.extendedDetails != storedExtendedDetails)) { + val config = context!!.config + if (wasInit && (config.showExtendedDetails != storedShowExtendedDetails || config.extendedDetails != storedExtendedDetails)) { initExtendedDetails() } - val allowPhotoGestures = context!!.config.allowPhotoGestures - val allowInstantChange = context!!.config.allowInstantChange + if (wasInit && (config.allowZoomingImages != storedAllowDeepZoomableImages || config.showHighestQuality != storedShowHighestQuality || + config.oneFingerZoom != storedAllowOneFingerZoom)) { + isSubsamplingVisible = false + view.subsampling_view.beGone() + loadImage() + } + + val allowPhotoGestures = config.allowPhotoGestures + val allowInstantChange = config.allowInstantChange view.apply { photo_brightness_controller.beVisibleIf(allowPhotoGestures) instant_prev_item.beVisibleIf(allowInstantChange) instant_next_item.beVisibleIf(allowInstantChange) - photo_view.setAllowFingerDragZoom(activity!!.config.oneFingerZoom) + photo_view.setAllowFingerDragZoom(config.oneFingerZoom) } storeStateVariables() @@ -179,6 +199,9 @@ class PhotoFragment : ViewPagerFragment() { context!!.config.apply { storedShowExtendedDetails = showExtendedDetails storedHideExtendedDetails = hideExtendedDetails + storedAllowDeepZoomableImages = allowZoomingImages + storedShowHighestQuality = showHighestQuality + storedAllowOneFingerZoom = oneFingerZoom storedExtendedDetails = extendedDetails } } @@ -209,6 +232,7 @@ class PhotoFragment : ViewPagerFragment() { if (isVisible) { scheduleZoomableView() } else { + isSubsamplingVisible = false view.subsampling_view.recycle() view.subsampling_view.beGone() loadZoomableViewHandler.removeCallbacksAndMessages(null) @@ -325,7 +349,7 @@ class PhotoFragment : ViewPagerFragment() { .load(getPathToLoad(medium)) .apply(options) .listener(object : RequestListener { - override fun onLoadFailed(e: GlideException?, model: Any?, target: com.bumptech.glide.request.target.Target?, isFirstResource: Boolean): Boolean = false + override fun onLoadFailed(e: GlideException?, model: Any?, target: com.bumptech.glide.request.target.Target?, isFirstResource: Boolean) = false override fun onResourceReady(resource: Bitmap?, model: Any?, target: com.bumptech.glide.request.target.Target?, dataSource: DataSource?, isFirstResource: Boolean): Boolean { if (isFragmentVisible) { @@ -346,7 +370,7 @@ class PhotoFragment : ViewPagerFragment() { private fun scheduleZoomableView() { loadZoomableViewHandler.removeCallbacksAndMessages(null) loadZoomableViewHandler.postDelayed({ - if (isFragmentVisible && context?.config?.allowZoomingImages == true && medium.isImage() && view.subsampling_view.isGone()) { + if (isFragmentVisible && context?.config?.allowZoomingImages == true && medium.isImage() && !isSubsamplingVisible) { addZoomableView() } }, ZOOMABLE_VIEW_LOAD_DELAY) @@ -354,15 +378,20 @@ class PhotoFragment : ViewPagerFragment() { private fun addZoomableView() { val rotation = degreesForRotation(imageOrientation) + val path = getPathToLoad(medium) + isSubsamplingVisible = true + view.subsampling_view.apply { + setMaxTileSize(4096) + setMinimumTileDpi(if (context!!.config.showHighestQuality) -1 else getMinTileDpi()) background = ColorDrawable(Color.TRANSPARENT) - setBitmapDecoderFactory { PicassoDecoder(medium.path, Picasso.get(), rotation) } + setBitmapDecoderFactory { PicassoDecoder(path, Picasso.get(), rotation) } setRegionDecoderFactory { PicassoRegionDecoder() } maxScale = 10f beVisible() isQuickScaleEnabled = context.config.oneFingerZoom setResetScaleOnSizeChange(context.config.screenRotation != ROTATE_BY_ASPECT_RATIO) - setImage(ImageSource.uri(getPathToLoad(medium))) + setImage(ImageSource.uri(path)) orientation = rotation setEagerLoadingEnabled(false) setOnImageEventListener(object : SubsamplingScaleImageView.OnImageEventListener { @@ -385,17 +414,31 @@ class PhotoFragment : ViewPagerFragment() { override fun onImageLoadError(e: Exception) { view.photo_view.isZoomable = true background = ColorDrawable(Color.TRANSPARENT) + isSubsamplingVisible = false beGone() } override fun onPreviewLoadError(e: Exception?) { background = ColorDrawable(Color.TRANSPARENT) + isSubsamplingVisible = false beGone() } }) } } + private fun getMinTileDpi(): Int { + val metrics = resources.displayMetrics + val averageDpi = (metrics.xdpi + metrics.ydpi) / 2 + val device = "${Build.BRAND} ${Build.MODEL}".toLowerCase() + return when { + WEIRD_DEVICES.contains(device) -> 240 + averageDpi > 400 -> 280 + averageDpi > 300 -> 220 + else -> 160 + } + } + private fun checkIfPanorama() { isPanorama = try { val inputStream = if (medium.path.startsWith("content:/")) context!!.contentResolver.openInputStream(Uri.parse(medium.path)) else File(medium.path).inputStream() @@ -454,6 +497,7 @@ class PhotoFragment : ViewPagerFragment() { fun rotateImageViewBy(degrees: Int) { loadZoomableViewHandler.removeCallbacksAndMessages(null) view.subsampling_view.beGone() + isSubsamplingVisible = false loadBitmap(degrees) } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Config.kt index 9916efcee..11474c421 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Config.kt @@ -384,4 +384,12 @@ class Config(context: Context) : BaseConfig(context) { var allowZoomingImages: Boolean get() = prefs.getBoolean(ALLOW_ZOOMING_IMAGES, true) set(allowZoomingImages) = prefs.edit().putBoolean(ALLOW_ZOOMING_IMAGES, allowZoomingImages).apply() + + var lastBinCheck: Long + get() = prefs.getLong(LAST_BIN_CHECK, 0L) + set(lastBinCheck) = prefs.edit().putLong(LAST_BIN_CHECK, lastBinCheck).apply() + + var showHighestQuality: Boolean + get() = prefs.getBoolean(SHOW_HIGHEST_QUALITY, false) + set(showHighestQuality) = prefs.edit().putBoolean(SHOW_HIGHEST_QUALITY, showHighestQuality).apply() } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Constants.kt index 3fecd735f..0db9f3129 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Constants.kt @@ -60,6 +60,8 @@ const val EVER_SHOWN_FOLDERS = "ever_shown_folders" const val SHOW_RECYCLE_BIN_AT_FOLDERS = "show_recycle_bin_at_folders" const val ALLOW_ZOOMING_IMAGES = "allow_zooming_images" const val WAS_SVG_SHOWING_HANDLED = "was_svg_showing_handled" +const val LAST_BIN_CHECK = "last_bin_check" +const val SHOW_HIGHEST_QUALITY = "show_highest_quality" // slideshow const val SLIDESHOW_INTERVAL = "slideshow_interval" diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/MediaFetcher.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/MediaFetcher.kt index 41b5f899d..7b7a08997 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/MediaFetcher.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/MediaFetcher.kt @@ -237,11 +237,11 @@ class MediaFetcher(val context: Context) { } val type = when { - isImage -> TYPE_IMAGES isVideo -> TYPE_VIDEOS isGif -> TYPE_GIFS isRaw -> TYPE_RAWS - else -> TYPE_SVGS + isSvg -> TYPE_SVGS + else -> TYPE_IMAGES } val isFavorite = favoritePaths.contains(path) @@ -299,11 +299,11 @@ class MediaFetcher(val context: Context) { val dateModified = file.lastModified() val type = when { - isImage -> TYPE_IMAGES isVideo -> TYPE_VIDEOS isGif -> TYPE_GIFS isRaw -> TYPE_RAWS - else -> TYPE_SVGS + isSvg -> TYPE_SVGS + else -> TYPE_IMAGES } val path = Uri.decode(file.uri.toString().replaceFirst("${context.config.OTGTreeUri}/document/${context.config.OTGPartition}%3A", OTG_PATH)) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/PicassoRegionDecoder.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/PicassoRegionDecoder.kt index 778b380b6..b96ed9deb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/PicassoRegionDecoder.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/PicassoRegionDecoder.kt @@ -10,7 +10,8 @@ class PicassoRegionDecoder : ImageRegionDecoder { private val decoderLock = Any() override fun init(context: Context, uri: Uri): Point { - val inputStream = context.contentResolver.openInputStream(uri) + val newUri = Uri.parse(uri.toString().replace("%", "%25").replace("#", "%23")) + val inputStream = context.contentResolver.openInputStream(newUri) decoder = BitmapRegionDecoder.newInstance(inputStream, false) return Point(decoder!!.width, decoder!!.height) } @@ -19,7 +20,7 @@ class PicassoRegionDecoder : ImageRegionDecoder { synchronized(decoderLock) { val options = BitmapFactory.Options() options.inSampleSize = sampleSize - options.inPreferredConfig = Bitmap.Config.ARGB_8888 + options.inPreferredConfig = Bitmap.Config.RGB_565 val bitmap = decoder!!.decodeRegion(rect, options) return bitmap ?: throw RuntimeException("Region decoder returned null bitmap - image format may not be supported") } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/interfaces/MediumDao.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/interfaces/MediumDao.kt index 03090d6b5..ac653ccd4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/interfaces/MediumDao.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/interfaces/MediumDao.kt @@ -1,6 +1,7 @@ package com.simplemobiletools.gallery.interfaces import android.arch.persistence.room.Dao +import android.arch.persistence.room.Delete import android.arch.persistence.room.Insert import android.arch.persistence.room.OnConflictStrategy.REPLACE import android.arch.persistence.room.Query @@ -26,9 +27,15 @@ interface MediumDao { @Insert(onConflict = REPLACE) fun insertAll(media: List) + @Delete + fun deleteMedia(vararg medium: Medium) + @Query("DELETE FROM media WHERE full_path = :path COLLATE NOCASE") fun deleteMediumPath(path: String) + @Query("DELETE FROM media WHERE deleted_ts < :timestmap") + fun deleteOldRecycleBinItems(timestmap: Long) + @Query("UPDATE OR REPLACE media SET filename = :newFilename, full_path = :newFullPath, parent_path = :newParentPath WHERE full_path = :oldPath COLLATE NOCASE") fun updateMedium(oldPath: String, newParentPath: String, newFilename: String, newFullPath: String) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/receivers/RefreshMediaReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/receivers/RefreshMediaReceiver.kt index 010aa8c27..d9ece1f20 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/receivers/RefreshMediaReceiver.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/receivers/RefreshMediaReceiver.kt @@ -22,10 +22,10 @@ class RefreshMediaReceiver : BroadcastReceiver() { } private fun getFileType(path: String) = when { - path.isImageFast() -> TYPE_IMAGES path.isVideoFast() -> TYPE_VIDEOS path.isGif() -> TYPE_GIFS path.isRawFast() -> TYPE_RAWS - else -> TYPE_SVGS + path.isSvg() -> TYPE_SVGS + else -> TYPE_IMAGES } } diff --git a/app/src/main/res/layout/activity_edit.xml b/app/src/main/res/layout/activity_edit.xml index b490a77ea..7e0465221 100644 --- a/app/src/main/res/layout/activity_edit.xml +++ b/app/src/main/res/layout/activity_edit.xml @@ -23,6 +23,13 @@ app:cropBackgroundColor="@color/crop_image_view_background" app:cropInitialCropWindowPaddingRatio="0"/> + + + android:paddingBottom="@dimen/activity_margin"> @@ -40,18 +40,18 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -62,10 +62,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -86,10 +86,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -115,8 +115,8 @@ android:id="@+id/visibility_label" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginStart="@dimen/bigger_margin" + android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginTop="@dimen/activity_margin" android:text="@string/visibility" android:textAllCaps="true" @@ -128,18 +128,18 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -150,18 +150,18 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -172,18 +172,18 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -194,10 +194,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -218,10 +218,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -247,8 +247,8 @@ android:id="@+id/videos_label" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginStart="@dimen/bigger_margin" + android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginTop="@dimen/activity_margin" android:text="@string/videos" android:textAllCaps="true" @@ -260,10 +260,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -284,10 +284,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -308,10 +308,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -337,8 +337,8 @@ android:id="@+id/thumbnails_label" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginStart="@dimen/bigger_margin" + android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginTop="@dimen/activity_margin" android:text="@string/thumbnails" android:textAllCaps="true" @@ -350,10 +350,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -374,10 +374,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -398,10 +398,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -427,8 +427,8 @@ android:id="@+id/scrolling_label" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginStart="@dimen/bigger_margin" + android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginTop="@dimen/activity_margin" android:text="@string/scrolling" android:textAllCaps="true" @@ -440,10 +440,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -464,10 +464,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -488,10 +488,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -517,8 +517,8 @@ android:id="@+id/fullscreen_media_label" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginStart="@dimen/bigger_margin" + android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginTop="@dimen/activity_margin" android:text="@string/fullscreen_media" android:textAllCaps="true" @@ -530,10 +530,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -554,10 +554,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -578,10 +578,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> - - - - - - - - - - - - + android:paddingBottom="@dimen/activity_margin"> @@ -674,10 +626,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -698,18 +650,18 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/bigger_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/bigger_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/bigger_margin"> + android:paddingBottom="@dimen/bigger_margin"> @@ -727,6 +679,96 @@ + + + + + + + + + + + + + + + + + + + + + + + android:paddingBottom="@dimen/activity_margin"> @@ -774,10 +816,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -797,18 +839,18 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -824,8 +866,8 @@ android:id="@+id/security_label" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginStart="@dimen/bigger_margin" + android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginTop="@dimen/activity_margin" android:text="@string/security" android:textAllCaps="true" @@ -837,10 +879,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -861,10 +903,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -890,8 +932,8 @@ android:id="@+id/file_operations_label" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginStart="@dimen/bigger_margin" + android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginTop="@dimen/activity_margin" android:text="@string/file_operations" android:textAllCaps="true" @@ -903,10 +945,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -927,10 +969,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -951,10 +993,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -980,8 +1022,8 @@ android:id="@+id/bottom_actions_label" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginStart="@dimen/bigger_margin" + android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginTop="@dimen/activity_margin" android:text="@string/bottom_actions" android:textAllCaps="true" @@ -993,10 +1035,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -1017,18 +1059,18 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -1044,8 +1086,8 @@ android:id="@+id/recycle_bin_label" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginStart="@dimen/bigger_margin" + android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginTop="@dimen/activity_margin" android:text="@string/recycle_bin" android:textAllCaps="true" @@ -1057,10 +1099,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -1081,10 +1123,10 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/activity_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/activity_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/activity_margin"> + android:paddingBottom="@dimen/activity_margin"> @@ -1105,18 +1147,18 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/medium_margin" android:background="?attr/selectableItemBackground" - android:paddingBottom="@dimen/bigger_margin" android:paddingLeft="@dimen/normal_margin" + android:paddingTop="@dimen/bigger_margin" android:paddingRight="@dimen/normal_margin" - android:paddingTop="@dimen/bigger_margin"> + android:paddingBottom="@dimen/bigger_margin"> diff --git a/app/src/main/res/layout/bottom_editor_primary_actions.xml b/app/src/main/res/layout/bottom_editor_primary_actions.xml index 19ae4997a..2acfec635 100644 --- a/app/src/main/res/layout/bottom_editor_primary_actions.xml +++ b/app/src/main/res/layout/bottom_editor_primary_actions.xml @@ -5,8 +5,7 @@ android:id="@+id/bottom_editor_primary_actions_wrapper" android:layout_width="match_parent" android:layout_height="@dimen/bottom_actions_height" - android:layout_alignParentBottom="true" - android:background="@drawable/gradient_background_lighter"> + android:layout_alignParentBottom="true"> قم بإجراء فحص إضافي لتجنب إظهار الملفات التالفة Show some action buttons at the bottom of the screen Show the Recycle Bin at the folders screen + Deep zoomable images + Show images in the highest possible quality المصغرات diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml new file mode 100644 index 000000000..48addd393 --- /dev/null +++ b/app/src/main/res/values-az/strings.xml @@ -0,0 +1,223 @@ + + + Sadə Qalereya + Qalereya + Redaktə + Kameranı aç + (gizli) + (xaric edilmiş) + Pin qovluğu + Unpin qovluğu + Pin to the top + Show all folders content + All folders + Switch to folder view + Other folder + Show on map + Unknown location + Increase column count + Reduce column count + Change cover image + Select photo + Use default + Volume + Brightness + Lock orientation + Unlock orientation + Change orientation + Force portrait + Force landscape + Use default orientation + Fix Date Taken value + Fixing… + Dates fixed successfully + + + Filter media + Images + Videos + GIFs + RAW images + SVGs + No media files have been found with the selected filters. + Change filters + + + This function hides the folder by adding a \'.nomedia\' file into it, it will hide all subfolders too. You can see them by toggling the \'Show hidden items\' option in Settings. Continue? + Exclude + Excluded folders + Manage excluded folders + This will exclude the selection together with its subfolders from Simple Gallery only. You can manage excluded folders in Settings. + Exclude a parent instead? + Excluding folders will make them together with their subfolders hidden just in Simple Gallery, they will still be visible in other applications.\n\nIf you want to hide them from other apps too, use the Hide function. + Remove all + Remove all folders from the list of excluded? This will not delete the folders. + Hidden folders + Manage hidden folders + Seems like you don\'t have any folders hidden with a \".nomedia\" file. + + + Included folders + Manage included folders + Add folder + If you have some folders which contain media, but were not recognized by the app, you can add them manually here.\n\nAdding some items here will not exclude any other folder. + + + Resize + Resize selection and save + Width + Height + Keep aspect ratio + Please enter a valid resolution + + + Editor + Save + Rotate + Path + Invalid image path + Image editing failed + Edit image with: + No image editor found + Unknown file location + Could not overwrite the source file + Rotate left + Rotate right + Rotate by 180º + Flip + Flip horizontally + Flip vertically + Edit with + Free + + + Simple Wallpaper + Set as Wallpaper + Setting as Wallpaper failed + Set as wallpaper with: + Setting wallpaper… + Wallpaper set successfully + Portrait aspect ratio + Landscape aspect ratio + Home screen + Lock screen + Home and lock screen + + + Slideshow + Interval (seconds): + Include photos + Include videos + Include GIFs + Random order + Use fade animations + Move backwards + Loop slideshow + The slideshow ended + No media for the slideshow have been found + + + Change view type + Grid + List + Group direct subfolders + + + Group by + Do not group files + Folder + Last modified + Date taken + File type + Extension + + + Play videos automatically + Toggle filename visibility + Loop videos + Animate GIFs at thumbnails + Max brightness when viewing fullscreen media + Crop thumbnails into squares + Rotate fullscreen media by + System setting + Device rotation + Aspect ratio + Black background and status bar at fullscreen media + Scroll thumbnails horizontally + Automatically hide system UI at fullscreen media + Delete empty folders after deleting their content + Allow controlling photo brightness with vertical gestures + Allow controlling video volume and brightness with vertical gestures + Show folder media count on the main view + Replace Share with Rotate at fullscreen menu + Show extended details over fullscreen media + Manage extended details + Allow one finger zoom at fullscreen media + Allow instantly changing media by clicking on screen sides + Allow deep zooming images + Hide extended details when status bar is hidden + Do an extra check to avoid showing invalid files + Show some action buttons at the bottom of the screen + Show the Recycle Bin at the folders screen + Deep zoomable images + Show images in the highest possible quality + + + Thumbnails + Fullscreen media + Extended details + Bottom actions + + + Manage visible bottom actions + Toggle favorite + Toggle file visibility + + + How can I make Simple Gallery the default device gallery? + First you have to find the currently default gallery in the Apps section of your device settings, look for a button that says something like \"Open by default\", click on it, then select \"Clear defaults\". + The next time you will try opening an image or video you should see an app picker, where you can select Simple Gallery and make it the default app. + I locked the app with a password, but I forgot it. What can I do? + You can solve it in 2 ways. You can either reinstall the app, or find the app in your device settings and select \"Clear data\". It will reset all your settings, it will not remove any media files. + How can I make an album always appear at the top? + You can long press the desired album and select the Pin icon at the actionmenu, that will pin it to the top. You can pin multiple folders too, pinned items will be sorted by the default sorting method. + How can I fast-forward videos? + You can click on the current or max duration texts near the seekbar, that will move the video either backward, or forward. + What is the difference between hiding and excluding a folder? + Exclude prevents displaying the folder only in Simple Gallery, while Hide works system-wise and it hides the folder from other galleries too. It works by creating an empty \".nomedia\" file in the given folder, which you can then remove with any file manager too. + Why do folders with music cover art or stickers show up? + It can happen that you will see some unusual albums show up. You can easily exclude them by long pressing them and selecting Exclude. In the next dialog you can then select the parent folder, chances are it will prevent the other related albums showing up too. + A folder with images isn\'t showing up, what can I do? + That can have multiple reasons, but solving it is easy. Just go in Settings -> Manage Included Folders, select Plus and navigate to the required folder. + What if I want just a few particular folders visible? + Adding a folder at the Included Folders doesn\'t automatically exclude anything. What you can do is go in Settings -> Manage Excluded Folders, exclude the root folder \"/\", then add the desired folders at Settings -> Manage Included Folders. + That will make only the selected folders visible, as both excluding and including are recursive and if a folder is both excluded and included, it will show up. + Fullscreen images have weird artifacts, can I somehow improve the quality? + Yea, there is a toggle in Settings saying \"Replace deep zoomable images with better quality ones\", you can use that. It will improve the quality of the images, but they will get blurred once you try zooming in too much. + Can I crop images with this app? + Yes, you can crop images in the editor, by dragging the image corners. You can get to the editor either by long pressing an image thumbnail and selecting Edit, or selecting Edit from the fullscreen view. + Can I somehow group media file thumbnails? + Sure, just use the \"Group by\" menu item while at the thumbnails view. You can group files by multiple criteria, including Date Taken. If you use the \"Show all folders content\" function you can group them by folders too. + Sorting by Date Taken doesn\'t seem to work properly, how can I fix it? + It is most likely caused by the files being copied from somewhere. You can fix it by selecting the file thumbnails and selecting \"Fix Date Taken value\". + + + + Şəkil və videolara baxmaq üçün reklamsız qalereya. + + A simple tool usable for viewing photos and videos. Items can be sorted by date, size, name both ascending or descending, photos can be zoomed in. Media files are shown in multiple columns depending on the size of the display, you can change the column count by pinch gestures. They can be renamed, shared, deleted, copied, moved. Images can also be cropped, rotated, flipped or set as Wallpaper directly from the app. + + The Gallery is also offered for third party usage for previewing images / videos, adding attachments at email clients etc. It\'s perfect for everyday usage. + + The fingerprint permission is needed for locking either hidden item visibility, or the whole app. + + Contains no ads or unnecessary permissions. It is fully opensource, provides customizable colors. + + This app is just one piece of a bigger series of apps. You can find the rest of them at https://www.simplemobiletools.com + + + + diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index e6fe577da..998b84701 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -28,9 +28,9 @@ Forçar vertical Forçar horitzontal Fer servir la orientació per defecte - Fix Date Taken value - Fixing… - Dates fixed successfully + Fixar la data de presa + Fixant… + Data fixada correctament Filtre d\'arxius @@ -49,7 +49,7 @@ Gestionar carpetes excloses Això exclou la selecció juntament amb les carpetes, només de Simple Gallery. Pots gestionar les carpetes excloses en els Ajustaments. Excloure millor la carpeta superior? - Excloure les carpetes les ocultarà junt amb les seves subcarpetes, però només a Simple Gallery. Seguirant sent visibles a altres aplicacions.\\n\\nSi vols ocultar-les d'altres aplicacions fes servir la opció Ocultar. + Excloure les carpetes les ocultarà junt amb les seves subcarpetes, però només a Simple Gallery. Seguirant sent visibles a altres aplicacions.\\n\\nSi vols ocultar-les d\'altres aplicacions fes servir la opció Ocultar. Eliminar tot Eliminar totes les carpetes de la llista d\'excloses? Això no eliminarà les carpetes. Carpetes ocultes @@ -154,11 +154,13 @@ Gestioneu els detalls ampliats Permet fer zoom amb un sol dit a pantalla complerta Permet canviar els mitjans de manera instantània fent clic als costats de la pantalla - Allow deep zooming images + Permet imatges de zoom profund Amaga els detalls estesos quan la barra d\'estat està amagada Fer una verificació addicional per evitar que es mostrin fitxers no vàlids Mostra alguns botons d\'acció a la part inferior de la pantalla Mostra la paperera de reciclatge a la pantalla de carpetes + Deep zoomable images + Show images in the highest possible quality Miniatures @@ -178,7 +180,7 @@ Vaig bloquejar l\'aplicació amb una contrasenya, però l\'he oblidat. Què puc fer? Es pot resoldre de dues maneres. Podeu tornar a instal·lar l\'aplicació o trobar l\'aplicació a la configuració del dispositiu i seleccionar \"Esborrar dades \". Això reiniciarà totes les configuracions, no eliminarà cap fitxer multimèdia. Com puc fer que un àlbum sempre aparegui a la part superior? - Podeu prémer l\'àlbum desitjat i seleccionar la icona de la xinxeta al menú d\'acció i el fixarà a la part superior. També podeu enganxar diverses carpetes, els elements fixats s'ordenaran pel mètode de classificació predeterminat. + Podeu prémer l\'àlbum desitjat i seleccionar la icona de la xinxeta al menú d\'acció i el fixarà a la part superior. També podeu enganxar diverses carpetes, els elements fixats s\'ordenaran pel mètode de classificació predeterminat. Com puc fer avançar els vídeos? Podeu fer clic als textos actuals o de duració màxima que hi ha a prop de la barra de cerca, això mourà el vídeo cap a enrere o cap endavant. Quina és la diferència entre ocultar i excloure una carpeta? @@ -196,8 +198,8 @@ Sí, pots retallar imatges a l\'editor, arrossegant les cantonades de la imatge. Pots accedir a l\'editor prement una miniatura d\'imatge i seleccionant Edita o seleccionant Edita des de la visualització de pantalla completa. Puc agrupar d\'alguna manera les miniatures del fitxer multimèdia? Si, només heu d\'utilitzar l\'ítem del menú \"Agrupar per\" mentre es troba a la vista en miniatura. Podeu agrupar fitxers amb diversos criteris, inclòs data de presa. Si utilitzeu la funció \"Mostra el contingut de totes les carpetes\", també podeu agrupar-les per carpetes. - Sorting by Date Taken doesn\'t seem to work properly, how can I fix it? - It is most likely caused by the files being copied from somewhere. You can fix it by selecting the file thumbnails and selecting \"Fix Date Taken value\". + L\'ordenació per data que de presa no sembla funcionar correctament, com puc solucionar-ho? + Probablement, els fitxers es copiïn en un lloc incorrecte. Podeu arreglar-ho si seleccioneu les miniatures del fitxer i seleccioneu \"Fixar data de presa\". @@ -211,7 +213,7 @@ No conté ni publicitat ni permisos innecessaris. Es totalment Lliure i proporciona colors personalitzables. - Aquesta aplicació es només una peça d'una sèrie més gran d'aplicacions. Pots trobar la resta a https://www.simplemobiletools.com + Aquesta aplicació es només una peça d\'una sèrie més gran d\'aplicacions. Pots trobar la resta a https://www.simplemobiletools.com Thumbnails diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index aaa7023d8..fca30e852 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -159,6 +159,8 @@ Tjek en ekstra gang for at undgå visning af ugyldige filer Show some action buttons at the bottom of the screen Show the Recycle Bin at the folders screen + Deep zoomable images + Show images in the highest possible quality Thumbnails diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 92fc25072..92093d76b 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -159,6 +159,8 @@ Zusätzliche Überprüfung, um ungültige Dateien nicht anzuzeigen Ausgewählte Funktionen am unteren Bildschirmrand anzeigen Papierkorb auf dem Ordnerbildschirm anzeigen + Deep zoomable images + Show images in the highest possible quality Thumbnails diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index e73d44a09..2e0c89e63 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -147,8 +147,7 @@ Αυτόματη απόκρυψη στοιχείων συστήματος σε πλήρη οθόνη Διαγραφή άδειων φακέλων, όταν διαγραφεί το περιεχόμενό τους Να επιτρέπεται ο έλεγχος φωτεινότητας με κατακόρυφες κινήσεις - Να επιτρέπεται ο έλεγχος έντασης του βίντεο και φωτεινότητας με κατακόρυφες - κινήσεις (gestures) + Να επιτρέπεται ο έλεγχος έντασης του βίντεο και φωτεινότητας με κατακόρυφες κινήσεις (gestures) Εμφάνιση του αριθμού πολυμέσων στον φάκελο, στην κύρια οθόνη Αντικατάσταση της "Κοινής χρήσης" με "Περιστροφή" στο μενού πλήρους οθόνης Εμφάνιση λεπτομερειών στα πολυμέσα σε κατάσταση πλήρους οθόνης @@ -160,6 +159,8 @@ Επιπλέον έλεγχος για την αποφυγή εμφάνισης λανθασμένων αρχείων Εμφάνιση μερικών κουμπιών λειτουργιών στο κάτω μέρος της οθόνης Εμφάνιση του κάδου ανακύκλωσης στην οθόνη φακέλων + Deep zoomable images + Show images in the highest possible quality Εικονίδια diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 2f5d77314..5490e74b5 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -28,9 +28,9 @@ Forzar retrato Forzar paisaje Usar la orientación por defecto - Fix Date Taken value - Fixing… - Dates fixed successfully + Fijar fecha de toma + Fijando… + Fecha fijada correctamente Filtro de medios @@ -159,6 +159,8 @@ Hacer una comprobación adicional para evitar mostrar archivos inválidos Mostrar algunos botones de acción en la parte inferior de la pantalla Mostrar la papelera de reciclaje en la pantalla de carpetas + Deep zoomable images + Show images in the highest possible quality Miniaturas @@ -196,8 +198,8 @@ Sí, puede recortar imágenes en el editor arrastrando las esquinas de la imagen. Puede acceder al editor pulsando prolongadamente una imagen en miniatura y seleccionando Editar, o seleccionando Editar en la vista de pantalla completa. ¿Puedo de alguna manera agrupar miniaturas de archivos multimedia? Claro, solo use el elemento de menú \"Agrupar por \" mientras esté en la vista de miniaturas. Puede agrupar archivos según varios criterios, incluida la Fecha de toma. Si usa la función \"Mostrar todo el contenido de las carpetas\" también puede agruparlas por carpetas. - Sorting by Date Taken doesn\'t seem to work properly, how can I fix it? - It is most likely caused by the files being copied from somewhere. You can fix it by selecting the file thumbnails and selecting \"Fix Date Taken value\". + La ordenación por fecha tomada no parece funcionar correctamente, ¿cómo puedo solucionarlo? + Lo más probable es que sea causado por los archivos que se copian de algún lugar. Puede solucionarlo seleccionando las miniaturas de archivo y seleccionando \"Fijar fecha de toma\". diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 323755c16..e389d0600 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -159,6 +159,8 @@ Tee ylimääräinen tarkistus rikkinäisten tiedostojen varalta Show some action buttons at the bottom of the screen Show the Recycle Bin at the folders screen + Deep zoomable images + Show images in the highest possible quality Esikatselukuvat diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 0e96c9eee..4b1fef60a 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -26,11 +26,11 @@ Déverrouiller la rotation Change orientation Force portrait - Force landscape - Use default orientation - Fix Date Taken value - Fixing… - Dates fixed successfully + Paysage de force + Utiliser l\'orientation par défaut + Fixe Date Valeur prise + Fixation.... + Dates fixées avec succès Filtrer les médias @@ -40,7 +40,7 @@ RAW images SVGs Aucun fichier média trouvé avec les filtres sélectionnés. - Changer les filtres + Changer les filtres Cette option masque le dossier en ajoutant un fichier \'.nomedia\' à l\'intérieur, cela masquera aussi tous les sous-dossiers. Vous pouvez les voir en modifiant l\'option \'Afficher les dossiers cachés\' dans les paramètres. Continuer ? @@ -49,7 +49,7 @@ Gérer les dossiers exclus Cela va exclure la sélection ainsi que ses sous-dossiers depuis Simple Galerie uniquement. Vous pouvez gérer les dossiers exclus depuis les paramètres. Exclure un dossier parent ? - Exclure des dossiers les masquera ainsi que leurs sous-dossiers uniquement dans Simple Galerie, ils seront toujours visibles depuis d\'autres applications.\\n\\nSi vous voulez aussi les masquer ailleurs, utilisez la fonction Masquer. + Exclure des dossiers les masquera ainsi que leurs sous-dossiers uniquement dans Simple Galerie, ils seront toujours visibles depuis d\'autres applications.\\Si vous voulez aussi les masquer ailleurs, utilisez la fonction Masquer. Tout supprimer Supprimer tous les dossiers de la liste des exclusions ? Ceci n\'effacera pas les dossiers. Dossiers masqués @@ -88,7 +88,7 @@ Retourner horizontalement Retourner verticalement Éditer avec - Free + Gratuit Simple fond d\'écran @@ -120,15 +120,15 @@ Changer le type de vue Grille Liste - Group direct subfolders + Sous-dossiers de groupe direct - Group by - Do not group files - Folder - Last modified - Date taken - File type + Grouper par + Ne pas regrouper les fichiers + Dossier + Dernière modification + Date de prise + Type de fichier Extension @@ -154,27 +154,28 @@ Gérer les détails supplémentaires Autoriser le zoom avec un doigt sur un média en plein écran Autoriser le changement instantané de média en cliquant sur les côtés de l\'écran - Allow deep zooming images + Permet de zoomer en profondeur Masquer les détails supplémentaires lorsque la barre d\'état est masquée Faire une vérification supplémentaire pour éviter de montrer des fichiers invalides - Show some action buttons at the bottom of the screen - Show the Recycle Bin at the folders screen + Afficher quelques boutons d\'action en bas de l\'écran + Afficher la corbeille à l\'écran Dossiers + Deep zoomable images + Show images in the highest possible quality Vignettes Média plein écran Détails supplémentaires - Bottom actions + Actions en bas - Manage visible bottom actions - Toggle favorite - Toggle file visibility + Gérer les actions visible du bas + Basculer favori + Changer la visibilité des fichiers Comment faire de Simple Galerie ma galerie par défaut ? - Il faut dans un premier temps trouver la galerie par défaut dans la section « Applications » des paramètres du téléphone, puis toucher « Ouvrir par défaut » et enfin selectionner « Réinitialiser les paramètres par défaut ». - La prochaine fois que vous ouvrirez une image ou une vidéo, il vous sera proposé de choisir une application, choisissez Simple Gallery puis « Toujours ». + Il faut dans un premier temps trouver la galerie par défaut dans la section « Applications » des paramètres du téléphone, puis toucher « Ouvrir par défaut » et enfin selectionner « Réinitialiser les paramètres par défaut ». La prochaine fois que vous ouvrirez une image ou une vidéo, il vous sera proposé de choisir une application, choisissez Simple Gallery puis « Toujours ». J\'ai verrouillé l\'appli avec un mot de passe et je ne m\'en rappelle plus. Que faire ? Il y a deux façons de procéder. Soit vous reinstallez l\'appli, soit retrouver l\'appli dans les paramètres du téléphone et toucher « Effacer les données ». Cela va seulement remettre à zéro les paramètres de l\'appli et ne supprimera pas vos fichiers. Comment faire pour qu\'un album soit toujours tout en haut ? @@ -186,17 +187,17 @@ Pourquoi des répertoires avec des pochettes d\'albums musicaux ou des miniatures d\'images sont affichés ? Cela peut arriver de voir des albums qui ne devraient pas être affichés. Vous pouvez les exclure facilement en faisaint un appui long sur eux puis en sélectionnant « Exclure », après quoi vous pouvez aussi sélectionner le répertoire parent, ce qui devrait éviter l\'apparition d\'albums similaires. Un dossier avec des images n\'apparaît pas. Que faire ? - Cela peut arriver pour de multiples raisons, mais c\'est facile à résoudre. Allez dans « Paramètres » puis « Gérer les dossiers inclus », sélectionnez le plus et sélectionnez le dossier voulu. + Cela peut arriver pour de multiples raisons, mais c\'est facile à résoudre. Allez dans « Paramètres » puis « Gérer les dossiers inclus », sélectionnez le plus et sélectionnez le dossier voulu. Comment faire apparaître uniquement certains dossiers ? - Ajouter un répértoire dans les dossiers inclus n\'exclut rien automatiquement. Pour ce faire, il faut aller dans « Paramètres » puis « Gérer les dossiers exclus », exclure le répertoire racine \"/\", puis ajouter les répertoires souhaités dans « Paramètres » puis « Gérer les répertoires inclus ». Seuls les répertoires selectionnés seront visibles, du fait que les exclusions et inclusions sont récursives, et si un répertoire est à la fois exclus et inclus, il sera affiché. + Ajouter un répértoire dans les dossiers inclus n\'exclut rien automatiquement. Pour ce faire, il faut aller dans « Paramètres » puis « Gérer les dossiers exclus », exclure le répertoire racine \"/\", puis ajouter les répertoires souhaités dans « Paramètres » puis « Gérer les répertoires inclus ». Seuls les répertoires selectionnés seront visibles, du fait que les exclusions et inclusions sont récursives, et si un répertoire est à la fois exclus et inclus, il sera affiché. Les images en plein écran contiennent des artéfacts, est-ce possible d\'améliorer la qualité ? - Oui, il existe dans « Paramètres » une option « Remplacer les images zoomables profondes par des images de meilleure qualité », mais les images seront alors floues si vous zoomez trop. + Oui, il existe dans « Paramètres » une option « Remplacer les images zoomables profondes par des images de meilleure qualité », mais les images seront alors floues si vous zoomez trop. Puis-je recadrer des images avec cette application? Oui, vous pouvez recadrer les images dans l\'éditeur en faisant glisser les coins de l\'image. Vous pouvez accéder à l\'éditeur en appuyant longuement sur une vignette d\'image et en sélectionnant Modifier, ou en sélectionnant Modifier en mode plein écran. - Can I somehow group media file thumbnails? - Sure, just use the \"Group by\" menu item while at the thumbnails view. You can group files by multiple criteria, including Date Taken. If you use the \"Show all folders content\" function you can group them by folders too. - Sorting by Date Taken doesn\'t seem to work properly, how can I fix it? - It is most likely caused by the files being copied from somewhere. You can fix it by selecting the file thumbnails and selecting \"Fix Date Taken value\". + Puis-je en quelque sorte regrouper les vignettes des fichiers multimédias ? + Bien sûr, il vous suffit d\'utiliser l\'option de menu \"Grouper par\" lorsque vous êtes dans l\'affichage des vignettes. Vous pouvez regrouper les fichiers selon plusieurs critères, y compris la date de prise de vue. Si vous utilisez la fonction \"Afficher le contenu de tous les dossiers\", vous pouvez également les regrouper par dossiers. + Le tri par date prise ne semble pas fonctionner correctement, comment puis-je le corriger ? + Il est très probablement causé par les fichiers copiés quelque part. Vous pouvez le corriger en sélectionnant les vignettes du fichier et en sélectionnant \"Fix Date Taken value\". diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 127191765..d68f63ee0 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -159,6 +159,8 @@ Facer unha comprobación extra para evitar mostrar ficheiros non válidos Show some action buttons at the bottom of the screen Show the Recycle Bin at the folders screen + Deep zoomable images + Show images in the highest possible quality Iconas diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 037c281da..1ea5f022f 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -5,7 +5,7 @@ Uredi Otvori kameru (skriveno) - (excluded) + (izuzeto) Prikvači mapu Otkvači mapu Prikvači na vrh @@ -22,14 +22,14 @@ Koristi zadano Glasnoća Svjetlina - Zaključaj rotaciju - Otključaj rotaciju - Change orientation - Force portrait - Force landscape - Use default orientation - Fix Date Taken value - Fixing… + Zaključaj orijentaciju slike + Otključaj orijentaciju slike + Promijeni orijentaciju slike + Prikaz slike u portretnom formatu + Prikaz slike u pejzažnom načinu rada + Koristi zadanu orijentaciju slike + Ispravi vrijednost datuma snimanja + Popravljam… Dates fixed successfully @@ -37,8 +37,8 @@ Slike Video GIF-ovi - RAW images - SVGs + RAW slike + SVG-ovi Nije pronađena nijedna datoteka s odabranim filtrom. Promijeni filter @@ -88,7 +88,7 @@ Okreni horizontalno Okreni vertikalno Uredi pomoću - Free + Slobodan odabir Jednostavna pozadina @@ -123,13 +123,13 @@ Group direct subfolders - Group by - Do not group files - Folder - Last modified - Date taken - File type - Extension + Grupiraj po + Nemoj grupirati ove datoteke + Mapa + Zadnje uređivano + Datum snimanja + Tip datoteke + Vrsta datoteke Automatsko pokretanje videa @@ -157,19 +157,21 @@ Allow deep zooming images Sakrij proširene pojedinosti kada je traka statusa skrivena Napravite dodatnu provjeru da biste izbjegli prikazivanje nevažećih datoteka - Show some action buttons at the bottom of the screen - Show the Recycle Bin at the folders screen + Pokažite neke gumbe za radnju pri dnu zaslona + Prikažite koš za smeće na zaslonu mapa + Deep zoomable images + Show images in the highest possible quality Sličice Mediji na cijelom zaslonu Proširene pojedinosti - Bottom actions + Radnju pri dnu zaslona - Manage visible bottom actions - Toggle favorite - Toggle file visibility + Upravljaj radnjama pri dnu zaslona + Uključi/isključi favorite + Uključi/isključi vidljivost datoteka Kako mogu postaviti Jednostavnu galeriju kao zadanu galeriju uređaja? @@ -194,10 +196,10 @@ Da, u "Postavkama" postoji opcija "Zamjena duboko zumiranih slika s kvalitetnijim slikama", ali slike će biti zamućene ako zumirate previše. Mogu li izrezati slike pomoću ove aplikacije? Da, možete obrezati slike u uređivaču povlačenjem uglova. Možete doći do uređivača dugim pritiskom na minijaturu slike i odabirom Uređivanje ili odabirom Uredi iz prikaza preko cijelog zaslona. - Can I somehow group media file thumbnails? - Sure, just use the \"Group by\" menu item while at the thumbnails view. You can group files by multiple criteria, including Date Taken. If you use the \"Show all folders content\" function you can group them by folders too. - Sorting by Date Taken doesn\'t seem to work properly, how can I fix it? - It is most likely caused by the files being copied from somewhere. You can fix it by selecting the file thumbnails and selecting \"Fix Date Taken value\". + Mogu li nekako grupirati sličice medijskih datoteka? + Naravno, koristeći stavku izbornika \"Grupiraj po\" u prikazu sličica. Možete grupirati datoteke prema više kriterija, uključujući datum snimanja. Ako koristite funkciju "Prikaži sve sadržaje mape", možete ih grupirati i mapama. + Sortiranje po datumu nije točno, kako to mogu ispraviti? + Vjerojatno uzrok tome da su Vaše slike kopirane s drugih mjesta. U tom slučaju trebali biste dugo dodirnuti sličice prikazanih slika, a zatim u izborniku u gornjem desnom kutu, odabrati funkciju \'Ispravi vrijednost datuma snimanja\'. diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 6be796647..8a0d39f0d 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -159,6 +159,8 @@ Do an extra check to avoid showing invalid files Show some action buttons at the bottom of the screen Show the Recycle Bin at the folders screen + Deep zoomable images + Show images in the highest possible quality Thumbnails diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 843238031..ea8a57ddb 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -38,7 +38,7 @@ Video GIF Immagini RAW - SVGs + SVG Nessun file trovato per il filtro selezionato. Cambia filtro @@ -159,6 +159,8 @@ Fai un controllo ulteriore per evitare di mostrare file non validi Mostra alcuni pulsanti azione in fondo allo schermo Mostra il cestino nella schermata delle cartelle + Deep zoomable images + Show images in the highest possible quality Miniature diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 035a2df7f..d5827bae0 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -159,6 +159,8 @@ 無効なファイルを見せない調整を行う 画面下部にアクションボタンを表示する フォルダ画面にごみ箱を表示する + Deep zoomable images + Show images in the highest possible quality サムネイル設定 diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 2287242a1..e53f53da3 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -159,6 +159,8 @@ 잘못된 파일 표시를 방지하기 위해 추가 검사 수행 Show some action buttons at the bottom of the screen Show the Recycle Bin at the folders screen + Deep zoomable images + Show images in the highest possible quality 섬네일 diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index d5c4ebb04..61b05eea2 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -159,6 +159,8 @@ Atlikti papildomą patikrinimą, kad nebūtų rodomos sugadintos bylos Show some action buttons at the bottom of the screen Show the Recycle Bin at the folders screen + Deep zoomable images + Show images in the highest possible quality Miniatiūros diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index c83c2b99d..393bb5b2b 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -159,6 +159,8 @@ Gjør en ekstra sjekk for å unngå visning av ugyldige filer Vis noen handlingsknapper nederst på skjermen Vis papirkurven på mappeskjermen + Deep zoomable images + Show images in the highest possible quality Minibilder diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 68b177cad..2dfe55ab9 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -159,6 +159,8 @@ Ongeldige bestanden verbergen Enkele actieknoppen onderaan het scherm tonen Prullenbak weergeven in de mapweergave + Deep zoomable images + Show images in the highest possible quality Miniatuurvoorbeelden diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index dbc0a7494..5f41b8f65 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -159,6 +159,8 @@    Dodatkowe sprawdzenie w celu uniknięcia pokazywania niewłaściwych plików Pokazuj niektóre przyciski akcji na dole ekranu Pokazuj kosz w widoku folderów + Deep zoomable images + Show images in the highest possible quality    Miniatury diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 5f9804afa..1b7aa235a 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -159,6 +159,8 @@ Realizar verificação extra para evitar mostrar arquivos inválidos Show some action buttons at the bottom of the screen Show the Recycle Bin at the folders screen + Deep zoomable images + Show images in the highest possible quality Miniaturas diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index dc672792d..d4f8ca771 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -38,7 +38,7 @@ Vídeos GIF Imagens RAW - SVGs + SVG Não foram encontrados ficheiros que cumpram os requisitos. Alterar filtros @@ -154,11 +154,13 @@ Gerir detalhes exibidos Permitir ampliação com um dedo se em ecrã completo Permitir troca imediata de ficheiro ao tocar nas margens do ecrã - Allow deep zooming images + Perimitir ampliação profunda de imagens Ocultar detalhes extra se a barra de estado estiver oculta Efetuar uma dupla verificação para evitar mostrar os ficheiros inválidos Mostrar alguns botões de ação na base do ecrã Mostrar reciclagem no ecrã de pastas + Deep zoomable images + Show images in the highest possible quality Miniaturas diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index aaa79ff2e..388be40b8 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -159,6 +159,8 @@ Дополнительная проверка, чтобы избежать показа неподдерживаемых файлов Показывать кнопки действий в нижней части экрана Показывать корзину вместе с папками + Deep zoomable images + Show images in the highest possible quality Миниатюры diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index abec90613..b608bf6b2 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -159,6 +159,8 @@ Predísť zobrazovaniu neplatných súborov dodatočnou kontrolou Zobraziť niektoré akčné tlačidlá na spodku obrazovky Zobraziť odpadkový kôš na obrazovke s priečinkami + Hlboko priblížiteľné obrázky + Zobrazovať obrázky v najlepšej možnej kvalite Náhľady diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index a0dc8f579..a15657dee 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -24,21 +24,21 @@ Ljusstyrka Aktivera rotationslås Inaktivera rotationslås - Change orientation - Force portrait - Force landscape - Use default orientation - Fix Date Taken value - Fixing… - Dates fixed successfully + Ändra orientering + Lås skärmen i stående läge + Lås skärmen i liggande läge + Använd standardorientering + Korrigera fotodatum + Korrigerar… + Datumen har korrigerats Filtrera media Bilder Videor GIF-bilder - RAW images - SVGs + RAW-bilder + SVG-bilder Inga mediefiler hittades med valda filter. Ändra filter @@ -88,7 +88,7 @@ Vänd horisontellt Vänd vertikalt Redigera med - Free + Fritt Bakgrund @@ -133,7 +133,7 @@ Spela upp videor automatiskt - Visa/dölj filnamnen + Visa/dölj filnamn Spela upp videor om och om igen Animera GIF-bilders miniatyrer Maximal ljusstyrka när media visas i helskärmsläge @@ -154,22 +154,24 @@ Hantera utökad information Tillåt zoomning med ett finger när media visas i helskärmsläge Tillåt snabbyte av media genom tryckning på skärmens kanter - Allow deep zooming images + Tillåt djupzoomning av bilder Dölj utökad information när statusfältet är dolt Gör en extra kontroll för att hindra ogiltiga filer från att visas - Show some action buttons at the bottom of the screen - Show the Recycle Bin at the folders screen + Visa några åtgärdsknappar längst ned på skärmen + Visa Papperskorgen i mappvyn + Deep zoomable images + Show images in the highest possible quality Miniatyrer Visning av media i helskärmsläge Utökad information - Bottom actions + Åtgärder längst ned på skärmen - Manage visible bottom actions - Toggle favorite - Toggle file visibility + Hantera synliga åtgärder längst ned på skärmen + Lägg till/ta bort från favoriter + Visa/dölj fil How can I make Simple Gallery the default device gallery? diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 9db6e91dc..8c4c30a1b 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -159,6 +159,8 @@ Do an extra check to avoid showing invalid files Show some action buttons at the bottom of the screen Show the Recycle Bin at the folders screen + Deep zoomable images + Show images in the highest possible quality Thumbnails diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 710d0ef86..16fccbccd 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -159,6 +159,8 @@ 额外检查以避免显示无效的文件 在屏幕底部显示一些操作按钮 Show the Recycle Bin at the folders screen + Deep zoomable images + Show images in the highest possible quality 缩略图 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index e930cba69..df5fbe431 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -159,6 +159,8 @@ 進行額外檢查,避免顯示無效的檔案 在螢幕底部顯示一些操作按鈕 在資料夾畫面顯示回收桶 + Deep zoomable images + Show images in the highest possible quality 縮圖 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index b671eac3e..48cefcd32 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -13,4 +13,5 @@ 64dp 76dp 90dp + 180dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e22f466a0..656c74445 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -159,6 +159,8 @@ Do an extra check to avoid showing invalid files Show some action buttons at the bottom of the screen Show the Recycle Bin at the folders screen + Deep zoomable images + Show images in the highest possible quality Thumbnails diff --git a/build.gradle b/build.gradle index b7a332342..5aab4c3d6 100644 --- a/build.gradle +++ b/build.gradle @@ -1,15 +1,15 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.2.60' + ext.kotlin_version = '1.2.71' repositories { - jcenter() google() + jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.4' + classpath 'com.android.tools.build:gradle:3.2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong @@ -19,8 +19,8 @@ buildscript { allprojects { repositories { - jcenter() google() + jcenter() maven { url "https://jitpack.io" } } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f4113673a..3e009998b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Tue Nov 07 16:59:29 CET 2017 +#Wed Sep 26 14:42:41 CEST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip