diff --git a/CHANGELOG.md b/CHANGELOG.md index cb169a1cb..6e1d67295 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,64 @@ Changelog ========== +Version 6.7.6 *(2019-05-26)* +---------------------------- + + * Improved batch renaming, allow using date time patterns in it + * Fixed empty folder deleting after deleting its content + * Improved new file cache updating in the background + * Improved the placeholder text in case no files are found + * Keep last_modified field at deleting and restoring files from the bin + * Increase the max image duration at slideshows + * Highlight the warning at deleting a folder + * Other stability, translation and performance improvements + +Version 6.7.5 *(2019-05-15)* +---------------------------- + + * Hotfixing a glitch with opening third party intents + +Version 6.7.4 *(2019-05-15)* +---------------------------- + + * Speeded up video deleting from fullscreen view + * Hotfixed some crashes + +Version 6.7.3 *(2019-05-14)* +---------------------------- + + * Fixed folder sorting if used together with subfolder grouping + * Fixed some copy/move related progressbar issues + * Added many performance and stability improvements + +Version 6.7.2 *(2019-05-09)* +---------------------------- + + * Allow creating file or folder shortcuts only from Android 8+ + +Version 6.7.1 *(2019-05-08)* +---------------------------- + + * Allow creating file or folder shortcuts on home screen on Android 7+ + * Allow creating new folders on the file thumbnails screen too + * Added a checkbox at sorting by name/path to sort numbers by their actual numeric value + * Improve grouping direct subfolders, do not ignore parent folders without media files + * Show the Open Camera button at the menu on the main screen, instead of the Sort by button + * Other translation and stability improvements + +Version 6.7.0 *(2019-05-02)* +---------------------------- + + * Moved the video duration field at the top right corner of thumbnails, if enabled + * Fixed some fullscreen image related glitches + * Misc translation and stability improvements + +Version 6.6.4 *(2019-04-09)* +---------------------------- + + * Reverting to the previous way of sorting items by name/path + * Some stability and translation improvements + Version 6.6.3 *(2019-04-02)* ---------------------------- diff --git a/app/build.gradle b/app/build.gradle index eacad08de..24c7f7f37 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.simplemobiletools.gallery.pro" minSdkVersion 21 targetSdkVersion 28 - versionCode 241 - versionName "6.6.3" + versionCode 250 + versionName "6.7.6" multiDexEnabled true setProperty("archivesBaseName", "gallery") } @@ -61,12 +61,12 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.11.0' + implementation 'com.simplemobiletools:commons:5.13.1' 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.16' - implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha3' + implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.17-SNAPSHOT' + implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta1' 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' @@ -74,8 +74,8 @@ dependencies { implementation 'info.androidhive:imagefilters:1.0.7' implementation 'com.squareup.picasso:picasso:2.71828' implementation 'com.caverock:androidsvg-aar:1.3' - implementation 'com.github.tibbi:gestureviews:cb7c2c191a' - implementation 'com.github.tibbi:subsampling-scale-image-view:7e4202eaee' + implementation 'com.github.tibbi:gestureviews:1506ec6156' + implementation 'com.github.tibbi:subsampling-scale-image-view:1df78cdfff' kapt 'com.github.bumptech.glide:compiler:4.9.0' // keep it here too, not just in Commons, else loading SVGs wont work kapt 'androidx.room:room-compiler:2.0.0' diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/IncludedFoldersActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/IncludedFoldersActivity.kt index b6be4add2..f4e0258c3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/IncludedFoldersActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/activities/IncludedFoldersActivity.kt @@ -3,9 +3,7 @@ package com.simplemobiletools.gallery.pro.activities import android.os.Bundle import android.view.Menu import android.view.MenuItem -import com.simplemobiletools.commons.dialogs.FilePickerDialog import com.simplemobiletools.commons.extensions.beVisibleIf -import com.simplemobiletools.commons.extensions.scanPathRecursively import com.simplemobiletools.commons.interfaces.RefreshRecyclerViewListener import com.simplemobiletools.gallery.pro.R import com.simplemobiletools.gallery.pro.adapters.ManageFoldersAdapter @@ -50,13 +48,8 @@ class IncludedFoldersActivity : SimpleActivity(), RefreshRecyclerViewListener { } private fun addFolder() { - FilePickerDialog(this, config.lastFilepickerPath, false, config.shouldShowHidden, false, true) { - config.lastFilepickerPath = it - config.addIncludedFolder(it) + showAddIncludedFolderDialog { updateFolders() - Thread { - scanPathRecursively(it) - }.start() } } } 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 ba2807965..255ce9f8d 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 @@ -39,7 +39,6 @@ import com.simplemobiletools.gallery.pro.interfaces.DirectoryDao import com.simplemobiletools.gallery.pro.interfaces.DirectoryOperationsListener import com.simplemobiletools.gallery.pro.interfaces.MediumDao import com.simplemobiletools.gallery.pro.jobs.NewPhotoFetcher -import com.simplemobiletools.gallery.pro.models.AlbumCover import com.simplemobiletools.gallery.pro.models.Directory import com.simplemobiletools.gallery.pro.models.Medium import kotlinx.android.synthetic.main.activity_main.* @@ -118,10 +117,6 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { storeStateVariables() checkWhatsNewDialog() - directories_empty_text.setOnClickListener { - showFilterMediaDialog() - } - mIsPasswordProtectionPending = config.isAppPasswordProtectionOn setupLatestMediaId() @@ -149,6 +144,11 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { } } + if (!config.wasSortingByNumericValueAdded) { + config.wasSortingByNumericValueAdded = true + config.sorting = config.sorting or SORT_USE_NUMERIC_VALUE + } + updateWidgets() registerFileUpdateListener() } @@ -999,26 +999,26 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { private fun checkPlaceholderVisibility(dirs: ArrayList) { directories_empty_text_label.beVisibleIf(dirs.isEmpty() && mLoadedInitialPhotos) directories_empty_text.beVisibleIf(dirs.isEmpty() && mLoadedInitialPhotos) - directories_grid.beVisibleIf(directories_empty_text_label.isGone()) - } - private fun createDirectoryFromMedia(path: String, curMedia: ArrayList, albumCovers: ArrayList, hiddenString: String, - includedFolders: MutableSet, isSortingAscending: Boolean, getProperFileSize: Boolean): Directory { - var thumbnail = curMedia.firstOrNull { File(it.path).exists() }?.path ?: "" - albumCovers.forEach { - if (it.path == path && File(it.tmb).exists()) { - thumbnail = it.tmb + if (dirs.isEmpty() && config.filterMedia == TYPE_DEFAULT_FILTER) { + directories_empty_text_label.text = getString(R.string.no_media_add_included) + directories_empty_text.text = getString(R.string.add_folder) + directories_empty_text.underlineText() + + directories_empty_text.setOnClickListener { + showAddIncludedFolderDialog { + refreshItems() + } + } + } else { + directories_empty_text_label.text = getString(R.string.no_media_with_filters) + directories_empty_text.text = getString(R.string.change_filters_underlined) + directories_empty_text.setOnClickListener { + showFilterMediaDialog() } } - val firstItem = curMedia.first() - val lastItem = curMedia.last() - val dirName = checkAppendingHidden(path, hiddenString, includedFolders) - val lastModified = if (isSortingAscending) Math.min(firstItem.modified, lastItem.modified) else Math.max(firstItem.modified, lastItem.modified) - val dateTaken = if (isSortingAscending) Math.min(firstItem.taken, lastItem.taken) else Math.max(firstItem.taken, lastItem.taken) - val size = if (getProperFileSize) curMedia.sumByLong { it.size } else 0L - val mediaTypes = curMedia.getDirMediaTypes() - return Directory(null, path, thumbnail, dirName, curMedia.size, lastModified, dateTaken, size, getPathLocation(path), mediaTypes) + directories_grid.beVisibleIf(directories_empty_text_label.isGone()) } private fun setupAdapter(dirs: ArrayList, textToSearch: String = "") { @@ -1109,9 +1109,12 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { } if (config.useRecycleBin) { - val binFolder = dirs.firstOrNull { it.path == RECYCLE_BIN } - if (binFolder != null && mMediumDao.getDeletedMedia().isEmpty()) { - invalidDirs.add(binFolder) + try { + val binFolder = dirs.firstOrNull { it.path == RECYCLE_BIN } + if (binFolder != null && mMediumDao.getDeletedMedia().isEmpty()) { + invalidDirs.add(binFolder) + } + } catch (ignored: Exception) { } } @@ -1119,7 +1122,10 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener { dirs.removeAll(invalidDirs) setupAdapter(dirs) invalidDirs.forEach { - mDirectoryDao.deleteDirPath(it.path) + try { + mDirectoryDao.deleteDirPath(it.path) + } catch (ignored: Exception) { + } } } } 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 dff45ff8f..e2043f87d 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 @@ -22,6 +22,7 @@ import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.request.target.SimpleTarget import com.bumptech.glide.request.transition.Transition import com.simplemobiletools.commons.dialogs.ConfirmationDialog +import com.simplemobiletools.commons.dialogs.CreateNewFolderDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE import com.simplemobiletools.commons.helpers.REQUEST_EDIT_IMAGE @@ -220,6 +221,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { findItem(R.id.folder_view).isVisible = mShowAll findItem(R.id.open_camera).isVisible = mShowAll findItem(R.id.about).isVisible = mShowAll + findItem(R.id.create_new_folder).isVisible = !mShowAll && mPath != RECYCLE_BIN && mPath != FAVORITES findItem(R.id.temporarily_show_hidden).isVisible = !config.shouldShowHidden findItem(R.id.stop_showing_hidden).isVisible = config.temporarilyShowHidden @@ -249,6 +251,7 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { R.id.hide_folder -> tryHideFolder() R.id.unhide_folder -> unhideFolder() R.id.exclude_folder -> tryExcludeFolder() + R.id.create_new_folder -> createNewFolder() R.id.temporarily_show_hidden -> tryToggleTemporarilyShowHidden() R.id.stop_showing_hidden -> tryToggleTemporarilyShowHidden() R.id.increase_column_count -> increaseColumnCount() @@ -625,6 +628,12 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener { }.start() } + private fun createNewFolder() { + CreateNewFolderDialog(this, mPath) { + config.tempFolderPath = it + } + } + private fun tryToggleTemporarilyShowHidden() { if (config.temporarilyShowHidden) { toggleTemporarilyShowHidden(false) 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 2be7d90fe..8b3505972 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 @@ -6,11 +6,15 @@ import android.net.Uri import android.provider.MediaStore import android.view.WindowManager import com.simplemobiletools.commons.activities.BaseSimpleActivity +import com.simplemobiletools.commons.dialogs.FilePickerDialog +import com.simplemobiletools.commons.extensions.getParentPath import com.simplemobiletools.commons.extensions.getRealPathFromURI +import com.simplemobiletools.commons.extensions.scanPathRecursively import com.simplemobiletools.commons.helpers.isPiePlus import com.simplemobiletools.gallery.pro.R import com.simplemobiletools.gallery.pro.extensions.addPathToDB import com.simplemobiletools.gallery.pro.extensions.config +import com.simplemobiletools.gallery.pro.extensions.updateDirectoryPath open class SimpleActivity : BaseSimpleActivity() { val observer = object : ContentObserver(null) { @@ -18,6 +22,7 @@ open class SimpleActivity : BaseSimpleActivity() { super.onChange(selfChange, uri) val path = getRealPathFromURI(uri) if (path != null) { + updateDirectoryPath(path.getParentPath()) addPathToDB(path) } } @@ -76,4 +81,15 @@ open class SimpleActivity : BaseSimpleActivity() { } catch (ignored: Exception) { } } + + protected fun showAddIncludedFolderDialog(callback: () -> Unit) { + FilePickerDialog(this, config.lastFilepickerPath, false, config.shouldShowHidden, false, true) { + config.lastFilepickerPath = it + config.addIncludedFolder(it) + callback() + Thread { + scanPathRecursively(it) + }.start() + } + } } 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 6ba9995da..8d944e919 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 @@ -2,13 +2,17 @@ package com.simplemobiletools.gallery.pro.activities import android.animation.Animator import android.animation.ValueAnimator +import android.annotation.SuppressLint import android.app.Activity import android.content.Intent import android.content.pm.ActivityInfo +import android.content.pm.ShortcutInfo +import android.content.pm.ShortcutManager import android.content.res.Configuration import android.database.Cursor import android.graphics.Color import android.graphics.drawable.ColorDrawable +import android.graphics.drawable.Icon import android.media.ExifInterface import android.net.Uri import android.os.Bundle @@ -66,6 +70,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View private var mMediaFiles = ArrayList() private var mFavoritePaths = ArrayList() + private var mIgnoredPaths = ArrayList() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -157,9 +162,10 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View findItem(R.id.menu_save_as).isVisible = rotationDegrees != 0 findItem(R.id.menu_hide).isVisible = !currentMedium.isHidden() && visibleBottomActions and BOTTOM_ACTION_TOGGLE_VISIBILITY == 0 && !currentMedium.getIsInRecycleBin() findItem(R.id.menu_unhide).isVisible = currentMedium.isHidden() && visibleBottomActions and BOTTOM_ACTION_TOGGLE_VISIBILITY == 0 && !currentMedium.getIsInRecycleBin() - findItem(R.id.menu_add_to_favorites).isVisible = !currentMedium.isFavorite && visibleBottomActions and BOTTOM_ACTION_TOGGLE_FAVORITE == 0 - findItem(R.id.menu_remove_from_favorites).isVisible = currentMedium.isFavorite && visibleBottomActions and BOTTOM_ACTION_TOGGLE_FAVORITE == 0 + findItem(R.id.menu_add_to_favorites).isVisible = !currentMedium.isFavorite && visibleBottomActions and BOTTOM_ACTION_TOGGLE_FAVORITE == 0 && !currentMedium.getIsInRecycleBin() + findItem(R.id.menu_remove_from_favorites).isVisible = currentMedium.isFavorite && visibleBottomActions and BOTTOM_ACTION_TOGGLE_FAVORITE == 0 && !currentMedium.getIsInRecycleBin() findItem(R.id.menu_restore_file).isVisible = currentMedium.path.startsWith(recycleBinPath) + findItem(R.id.menu_create_shortcut).isVisible = isOreoPlus() findItem(R.id.menu_change_orientation).isVisible = rotationDegrees == 0 && visibleBottomActions and BOTTOM_ACTION_CHANGE_ORIENTATION == 0 findItem(R.id.menu_change_orientation).icon = resources.getDrawable(getChangeOrientationIcon()) findItem(R.id.menu_rotate).setShowAsAction( @@ -204,6 +210,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View R.id.menu_force_landscape -> toggleOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) R.id.menu_default_orientation -> toggleOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) R.id.menu_save_as -> saveImageAs() + R.id.menu_create_shortcut -> createShortcut() R.id.menu_settings -> launchSettings() else -> return super.onOptionsItemSelected(item) } @@ -359,8 +366,10 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View private fun updatePagerItems(media: MutableList) { val pagerAdapter = MyPagerAdapter(this, supportFragmentManager, media) if (!isDestroyed) { + pagerAdapter.shouldInitFragment = mPos < 5 view_pager.apply { adapter = pagerAdapter + pagerAdapter.shouldInitFragment = true currentItem = mPos removeOnPageChangeListener(this@ViewPagerActivity) addOnPageChangeListener(this@ViewPagerActivity) @@ -600,6 +609,29 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View } } + @SuppressLint("NewApi") + private fun createShortcut() { + val manager = getSystemService(ShortcutManager::class.java) + if (manager.isRequestPinShortcutSupported) { + val medium = getCurrentMedium() ?: return + val path = medium.path + val drawable = resources.getDrawable(R.drawable.shortcut_image).mutate() + getShortcutImage(path, drawable) { + val intent = Intent(this, PhotoVideoActivity::class.java) + intent.action = Intent.ACTION_VIEW + intent.data = Uri.fromFile(File(path)) + + val shortcut = ShortcutInfo.Builder(this, path) + .setShortLabel(medium.name) + .setIcon(Icon.createWithBitmap(drawable.convertToBitmap())) + .setIntent(intent) + .build() + + manager.requestPinShortcut(shortcut, null) + } + } + } + private fun getCurrentPhotoFragment() = getCurrentFragment() as? PhotoFragment private fun isShowHiddenFlagNeeded(): Boolean { @@ -704,13 +736,14 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View } private fun initBottomActionButtons() { + val currentMedium = getCurrentMedium() val visibleBottomActions = if (config.bottomActions) config.visibleBottomActions else 0 - bottom_favorite.beVisibleIf(visibleBottomActions and BOTTOM_ACTION_TOGGLE_FAVORITE != 0) + bottom_favorite.beVisibleIf(visibleBottomActions and BOTTOM_ACTION_TOGGLE_FAVORITE != 0 && currentMedium?.getIsInRecycleBin() == false) bottom_favorite.setOnClickListener { toggleFavorite() } - bottom_edit.beVisibleIf(visibleBottomActions and BOTTOM_ACTION_EDIT != 0 && getCurrentMedium()?.isSVG() == false) + bottom_edit.beVisibleIf(visibleBottomActions and BOTTOM_ACTION_EDIT != 0 && currentMedium?.isSVG() == false) bottom_edit.setOnClickListener { openEditor(getCurrentPath()) } @@ -742,7 +775,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View else -> ActivityInfo.SCREEN_ORIENTATION_PORTRAIT } mIsOrientationLocked = requestedOrientation != ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED - updateBottomActionIcons(getCurrentMedium()) + updateBottomActionIcons(currentMedium) } bottom_slideshow.beVisibleIf(visibleBottomActions and BOTTOM_ACTION_SLIDESHOW != 0) @@ -757,14 +790,14 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View bottom_toggle_file_visibility.beVisibleIf(visibleBottomActions and BOTTOM_ACTION_TOGGLE_VISIBILITY != 0) bottom_toggle_file_visibility.setOnClickListener { - getCurrentMedium()?.apply { + currentMedium?.apply { toggleFileVisibility(!isHidden()) { - updateBottomActionIcons(getCurrentMedium()) + updateBottomActionIcons(currentMedium) } } } - bottom_rename.beVisibleIf(visibleBottomActions and BOTTOM_ACTION_RENAME != 0 && getCurrentMedium()?.getIsInRecycleBin() == false) + bottom_rename.beVisibleIf(visibleBottomActions and BOTTOM_ACTION_RENAME != 0 && currentMedium?.getIsInRecycleBin() == false) bottom_rename.setOnClickListener { renameFile() } @@ -877,19 +910,37 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View val fileDirItem = FileDirItem(path, path.getFilenameFromPath()) if (config.useRecycleBin && !getCurrentMedium()!!.getIsInRecycleBin()) { + mIgnoredPaths.add(fileDirItem.path) + val media = mMediaFiles.filter { !mIgnoredPaths.contains(it.path) } as ArrayList + runOnUiThread { + gotMedia(media) + } + movePathsInRecycleBin(arrayListOf(path)) { if (it) { tryDeleteFileDirItem(fileDirItem, false, false) { - refreshViewPager() + mIgnoredPaths.remove(fileDirItem.path) + deleteDirectoryIfEmpty() } } else { toast(R.string.unknown_error_occurred) } } } else { - tryDeleteFileDirItem(fileDirItem, false, true) { - refreshViewPager() - } + handleDeletion(fileDirItem) + } + } + + private fun handleDeletion(fileDirItem: FileDirItem) { + mIgnoredPaths.add(fileDirItem.path) + val media = mMediaFiles.filter { !mIgnoredPaths.contains(it.path) } as ArrayList + runOnUiThread { + gotMedia(media) + } + + tryDeleteFileDirItem(fileDirItem, false, true) { + mIgnoredPaths.remove(fileDirItem.path) + deleteDirectoryIfEmpty() } } @@ -932,7 +983,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View } private fun gotMedia(thumbnailItems: ArrayList) { - val media = thumbnailItems.asSequence().filter { it is Medium }.map { it as Medium }.toMutableList() as ArrayList + 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) { return } @@ -976,8 +1027,8 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View var flipSides = false try { val pathToLoad = getCurrentPath() - val exif = android.media.ExifInterface(pathToLoad) - val orientation = exif.getAttributeInt(android.media.ExifInterface.TAG_ORIENTATION, -1) + val exif = ExifInterface(pathToLoad) + val orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1) flipSides = orientation == ExifInterface.ORIENTATION_ROTATE_90 || orientation == ExifInterface.ORIENTATION_ROTATE_270 } catch (e: Exception) { } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt index cc8b1b52a..965250340 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/adapters/DirectoryAdapter.kt @@ -1,5 +1,10 @@ package com.simplemobiletools.gallery.pro.adapters +import android.annotation.SuppressLint +import android.content.Intent +import android.content.pm.ShortcutInfo +import android.content.pm.ShortcutManager +import android.graphics.drawable.Icon import android.view.Menu import android.view.View import android.view.ViewGroup @@ -12,10 +17,13 @@ import com.simplemobiletools.commons.dialogs.PropertiesDialog import com.simplemobiletools.commons.dialogs.RenameItemDialog import com.simplemobiletools.commons.dialogs.RenameItemsDialog import com.simplemobiletools.commons.extensions.* +import com.simplemobiletools.commons.helpers.isOreoPlus import com.simplemobiletools.commons.models.FileDirItem import com.simplemobiletools.commons.views.FastScroller import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.gallery.pro.R +import com.simplemobiletools.gallery.pro.activities.MediaActivity +import com.simplemobiletools.gallery.pro.dialogs.ConfirmDeleteFolderDialog import com.simplemobiletools.gallery.pro.dialogs.ExcludeFolderDialog import com.simplemobiletools.gallery.pro.dialogs.PickMediumDialog import com.simplemobiletools.gallery.pro.extensions.* @@ -75,6 +83,8 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList copyMoveTo(true) R.id.cab_move_to -> moveFilesTo() R.id.cab_select_all -> selectAll() + R.id.cab_create_shortcut -> createShortcut() R.id.cab_delete -> askConfirmDelete() R.id.cab_select_photo -> changeAlbumCover(false) R.id.cab_use_default -> changeAlbumCover(true) @@ -340,6 +351,30 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList activity.handleDeletePasswordProtection { @@ -349,7 +384,11 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList { val itemsCnt = selectedKeys.size val items = if (itemsCnt == 1) { - "\"${getSelectedPaths().first().getFilenameFromPath()}\"" + var folder = getSelectedPaths().first().getFilenameFromPath() + if (folder == RECYCLE_BIN) { + folder = activity.getString(R.string.recycle_bin) + } + "\"$folder\"" } else { resources.getQuantityString(R.plurals.delete_items, itemsCnt, itemsCnt) } @@ -361,10 +400,9 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList 1) "${directory.name} (${directory.subfoldersCount})" else directory.name dir_path?.text = "${directory.path.substringBeforeLast("/")}/" photo_cnt.text = directory.subfoldersMediaCount.toString() val thumbnailType = when { @@ -501,7 +539,7 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: ArrayList + val isInRecycleBin = selectedItems.firstOrNull()?.getIsInRecycleBin() == true menu.apply { - findItem(R.id.cab_rename).isVisible = selectedItems.firstOrNull()?.getIsInRecycleBin() == false + findItem(R.id.cab_rename).isVisible = !isInRecycleBin + findItem(R.id.cab_add_to_favorites).isVisible = !isInRecycleBin + findItem(R.id.cab_fix_date_taken).isVisible = !isInRecycleBin + findItem(R.id.cab_move_to).isVisible = !isInRecycleBin findItem(R.id.cab_open_with).isVisible = isOneItemSelected findItem(R.id.cab_confirm_selection).isVisible = isAGetIntent && allowMultiplePicks && selectedKeys.isNotEmpty() findItem(R.id.cab_restore_recycle_bin_files).isVisible = selectedPaths.all { it.startsWith(activity.recycleBinPath) } @@ -178,8 +182,8 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList) { - menu.findItem(R.id.cab_add_to_favorites).isVisible = selectedItems.any { !it.isFavorite } - menu.findItem(R.id.cab_remove_from_favorites).isVisible = selectedItems.any { it.isFavorite } + menu.findItem(R.id.cab_add_to_favorites).isVisible = selectedItems.none { it.getIsInRecycleBin() } && selectedItems.any { !it.isFavorite } + menu.findItem(R.id.cab_remove_from_favorites).isVisible = selectedItems.none { it.getIsInRecycleBin() } && selectedItems.any { it.isFavorite } } private fun confirmSelection() { @@ -211,7 +215,7 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList) : FragmentStatePagerAdapter(fm) { private val fragments = HashMap() + var shouldInitFragment = true + override fun getCount() = media.size override fun getItem(position: Int): Fragment { val medium = media[position] val bundle = Bundle() bundle.putSerializable(MEDIUM, medium) + bundle.putBoolean(SHOULD_INIT_FRAGMENT, shouldInitFragment) val fragment = if (medium.isVideo()) { VideoFragment() } else { 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 79c0961a6..9db8e7b13 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 @@ -5,6 +5,7 @@ import android.view.View import androidx.appcompat.app.AlertDialog import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.extensions.beVisibleIf +import com.simplemobiletools.commons.extensions.isVisible import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.gallery.pro.R @@ -12,7 +13,7 @@ import com.simplemobiletools.gallery.pro.extensions.config import com.simplemobiletools.gallery.pro.helpers.SHOW_ALL import kotlinx.android.synthetic.main.dialog_change_sorting.view.* -class ChangeSortingDialog(val activity: BaseSimpleActivity, val isDirectorySorting: Boolean, showFolderCheckbox: Boolean, +class ChangeSortingDialog(val activity: BaseSimpleActivity, val isDirectorySorting: Boolean, val showFolderCheckbox: Boolean, val path: String = "", val callback: () -> Unit) : DialogInterface.OnClickListener { private var currSorting = 0 @@ -21,11 +22,16 @@ class ChangeSortingDialog(val activity: BaseSimpleActivity, val isDirectorySorti private var view: View init { + currSorting = if (isDirectorySorting) config.directorySorting else config.getFileSorting(pathToUse) view = activity.layoutInflater.inflate(R.layout.dialog_change_sorting, null).apply { - use_for_this_folder_divider.beVisibleIf(showFolderCheckbox) + use_for_this_folder_divider.beVisibleIf(showFolderCheckbox || (currSorting and SORT_BY_NAME != 0 || currSorting and SORT_BY_PATH != 0)) + + sorting_dialog_numeric_sorting.beVisibleIf(showFolderCheckbox && (currSorting and SORT_BY_NAME != 0 || currSorting and SORT_BY_PATH != 0)) + sorting_dialog_numeric_sorting.isChecked = currSorting and SORT_USE_NUMERIC_VALUE != 0 + sorting_dialog_use_for_this_folder.beVisibleIf(showFolderCheckbox) - sorting_dialog_bottom_note.beVisibleIf(!isDirectorySorting) sorting_dialog_use_for_this_folder.isChecked = config.hasCustomSorting(pathToUse) + sorting_dialog_bottom_note.beVisibleIf(!isDirectorySorting) } AlertDialog.Builder(activity) @@ -35,13 +41,17 @@ class ChangeSortingDialog(val activity: BaseSimpleActivity, val isDirectorySorti activity.setupDialogStuff(view, this, R.string.sort_by) } - currSorting = if (isDirectorySorting) config.directorySorting else config.getFileSorting(pathToUse) setupSortRadio() setupOrderRadio() } private fun setupSortRadio() { val sortingRadio = view.sorting_dialog_radio_sorting + sortingRadio.setOnCheckedChangeListener { group, checkedId -> + val isSortingByNameOrPath = checkedId == sortingRadio.sorting_dialog_radio_name.id || checkedId == sortingRadio.sorting_dialog_radio_path.id + view.sorting_dialog_numeric_sorting.beVisibleIf(isSortingByNameOrPath) + view.use_for_this_folder_divider.beVisibleIf(view.sorting_dialog_numeric_sorting.isVisible() || view.sorting_dialog_use_for_this_folder.isVisible()) + } val sortBtn = when { currSorting and SORT_BY_PATH != 0 -> sortingRadio.sorting_dialog_radio_path @@ -79,6 +89,10 @@ class ChangeSortingDialog(val activity: BaseSimpleActivity, val isDirectorySorti sorting = sorting or SORT_DESCENDING } + if (view.sorting_dialog_numeric_sorting.isChecked) { + sorting = sorting or SORT_USE_NUMERIC_VALUE + } + if (isDirectorySorting) { config.directorySorting = sorting } else { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/ConfirmDeleteFolderDialog.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/ConfirmDeleteFolderDialog.kt new file mode 100644 index 000000000..27f3a59c9 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/dialogs/ConfirmDeleteFolderDialog.kt @@ -0,0 +1,31 @@ +package com.simplemobiletools.gallery.pro.dialogs + +import android.app.Activity +import androidx.appcompat.app.AlertDialog +import com.simplemobiletools.commons.extensions.setupDialogStuff +import com.simplemobiletools.gallery.pro.R +import kotlinx.android.synthetic.main.dialog_confirm_delete_folder.view.* + +class ConfirmDeleteFolderDialog(activity: Activity, message: String, warningMessage: String, val callback: () -> Unit) { + var dialog: AlertDialog + + init { + val view = activity.layoutInflater.inflate(R.layout.dialog_confirm_delete_folder, null) + view.message.text = message + view.message_warning.text = warningMessage + + val builder = AlertDialog.Builder(activity) + .setPositiveButton(R.string.yes) { dialog, which -> dialogConfirmed() } + + builder.setNegativeButton(R.string.no, null) + + dialog = builder.create().apply { + activity.setupDialogStuff(view, this) + } + } + + private fun dialogConfirmed() { + dialog.dismiss() + callback() + } +} 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 3a5803d45..921013ccc 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 @@ -7,6 +7,8 @@ import android.content.Intent import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Matrix +import android.graphics.drawable.Drawable +import android.graphics.drawable.LayerDrawable import android.media.ExifInterface import android.os.Build import android.provider.MediaStore @@ -14,6 +16,9 @@ import android.util.DisplayMetrics import android.view.View import androidx.appcompat.app.AppCompatActivity import com.bumptech.glide.Glide +import com.bumptech.glide.load.DecodeFormat +import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.bumptech.glide.request.RequestOptions import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.extensions.* @@ -226,10 +231,15 @@ fun BaseSimpleActivity.movePathsInRecycleBin(paths: ArrayList, mediumDao paths.forEach { val file = File(it) val internalFile = File(recycleBinPath, it) + val lastModified = file.lastModified() try { if (file.copyRecursively(internalFile, true)) { mediumDao.updateDeleted("$RECYCLE_BIN$it", System.currentTimeMillis(), it) pathsCnt-- + + if (config.keepLastModified) { + internalFile.setLastModified(lastModified) + } } } catch (e: Exception) { showErrorToast(e) @@ -250,17 +260,22 @@ fun BaseSimpleActivity.restoreRecycleBinPaths(paths: ArrayList, mediumDa paths.forEach { val source = it val destination = it.removePrefix(recycleBinPath) + val lastModified = File(source).lastModified() var inputStream: InputStream? = null var out: OutputStream? = null try { out = getFileOutputStreamSync(destination, source.getMimeType()) - inputStream = getFileInputStreamSync(source)!! + inputStream = getFileInputStreamSync(source) inputStream.copyTo(out!!) if (File(source).length() == File(destination).length()) { mediumDao.updateDeleted(destination.removePrefix(recycleBinPath), 0, "$RECYCLE_BIN$destination") } newPaths.add(destination) + + if (config.keepLastModified) { + File(destination).setLastModified(lastModified) + } } catch (e: Exception) { showErrorToast(e) } finally { @@ -273,7 +288,7 @@ fun BaseSimpleActivity.restoreRecycleBinPaths(paths: ArrayList, mediumDa callback() } - fixDateTaken(newPaths) + fixDateTaken(newPaths, false) }.start() } @@ -323,9 +338,12 @@ fun Activity.hasNavBar(): Boolean { return (realDisplayMetrics.widthPixels - displayMetrics.widthPixels > 0) || (realDisplayMetrics.heightPixels - displayMetrics.heightPixels > 0) } -fun Activity.fixDateTaken(paths: ArrayList, callback: (() -> Unit)? = null) { +fun Activity.fixDateTaken(paths: ArrayList, showToasts: Boolean, callback: (() -> Unit)? = null) { val BATCH_SIZE = 50 - toast(R.string.fixing) + if (showToasts) { + toast(R.string.fixing) + } + try { var didUpdateFile = false val operations = ArrayList() @@ -366,13 +384,18 @@ fun Activity.fixDateTaken(paths: ArrayList, callback: (() -> Unit)? = nu didUpdateFile = false } - toast(if (didUpdateFile) R.string.dates_fixed_successfully else R.string.unknown_error_occurred) runOnUiThread { + if (showToasts) { + toast(if (didUpdateFile) R.string.dates_fixed_successfully else R.string.unknown_error_occurred) + } + callback?.invoke() } } } catch (e: Exception) { - showErrorToast(e) + if (showToasts) { + showErrorToast(e) + } } } @@ -478,7 +501,7 @@ fun BaseSimpleActivity.copyFile(source: String, destination: String) { try { out = getFileOutputStreamSync(destination, source.getMimeType()) inputStream = getFileInputStreamSync(source) - inputStream?.copyTo(out!!) + inputStream.copyTo(out!!) } finally { inputStream?.close() out?.close() @@ -491,3 +514,30 @@ fun saveFile(path: String, bitmap: Bitmap, out: FileOutputStream, degrees: Int) val bmp = Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true) bmp.compress(path.getCompressionFormat(), 90, out) } + +fun Activity.getShortcutImage(tmb: String, drawable: Drawable, callback: () -> Unit) { + Thread { + val options = RequestOptions() + .format(DecodeFormat.PREFER_ARGB_8888) + .skipMemoryCache(true) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .fitCenter() + + val size = resources.getDimension(R.dimen.shortcut_size).toInt() + val builder = Glide.with(this) + .asDrawable() + .load(tmb) + .apply(options) + .centerCrop() + .into(size, size) + + try { + (drawable as LayerDrawable).setDrawableByLayerId(R.id.shortcut_image, builder.get()) + } catch (e: Exception) { + } + + runOnUiThread { + callback() + } + }.start() +} 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 358fb253c..a3dfdda6f 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 @@ -6,7 +6,6 @@ import android.content.Context import android.content.Intent import android.content.res.Configuration import android.database.Cursor -import android.database.sqlite.SQLiteException import android.graphics.Point import android.graphics.drawable.PictureDrawable import android.media.AudioManager @@ -14,6 +13,7 @@ import android.provider.MediaStore import android.view.WindowManager import android.widget.ImageView import com.bumptech.glide.Glide +import com.bumptech.glide.Priority import com.bumptech.glide.load.DecodeFormat import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions @@ -28,6 +28,7 @@ import com.simplemobiletools.gallery.pro.helpers.* import com.simplemobiletools.gallery.pro.interfaces.DirectoryDao import com.simplemobiletools.gallery.pro.interfaces.MediumDao import com.simplemobiletools.gallery.pro.interfaces.WidgetsDao +import com.simplemobiletools.gallery.pro.models.AlbumCover import com.simplemobiletools.gallery.pro.models.Directory import com.simplemobiletools.gallery.pro.models.Medium import com.simplemobiletools.gallery.pro.models.ThumbnailItem @@ -166,8 +167,21 @@ fun Context.getSortedDirectories(source: ArrayList): ArrayList o1.name.toLowerCase().compareTo(o2.name.toLowerCase()) - sorting and SORT_BY_PATH != 0 -> o1.path.toLowerCase().compareTo(o2.path.toLowerCase()) + sorting and SORT_BY_NAME != 0 -> { + if (sorting and SORT_USE_NUMERIC_VALUE != 0) { + AlphanumericComparator().compare(o1.name.toLowerCase(), o2.name.toLowerCase()) + } else { + o1.name.toLowerCase().compareTo(o2.name.toLowerCase()) + } + } + sorting and SORT_BY_PATH != 0 -> { + if (sorting and SORT_USE_NUMERIC_VALUE != 0) { + AlphanumericComparator().compare(o1.path.toLowerCase(), o2.path.toLowerCase()) + } else { + o1.path.toLowerCase().compareTo(o2.path.toLowerCase()) + } + } + sorting and SORT_BY_PATH != 0 -> AlphanumericComparator().compare(o1.path.toLowerCase(), o2.path.toLowerCase()) sorting and SORT_BY_SIZE != 0 -> o1.size.compareTo(o2.size) sorting and SORT_BY_DATE_MODIFIED != 0 -> o1.modified.compareTo(o2.modified) else -> o1.taken.compareTo(o2.taken) @@ -189,9 +203,7 @@ fun Context.getDirsToShow(dirs: ArrayList, allDirs: ArrayList - val foldersToShow = getDirectParentSubfolders(dirFolders, currentPathPrefix) - val parentDirs = dirs.filter { foldersToShow.contains(it.path) } as ArrayList + val parentDirs = getDirectParentSubfolders(dirs, currentPathPrefix) updateSubfolderCounts(dirs, parentDirs) // show the current folder as an available option too, not just subfolders @@ -203,39 +215,83 @@ fun Context.getDirsToShow(dirs: ArrayList, allDirs: ArrayList, currentPathPrefix: String): HashSet { - val internalPath = internalStoragePath - val sdPath = sdCardPath +fun Context.getDirectParentSubfolders(dirs: ArrayList, currentPathPrefix: String): ArrayList { + val folders = dirs.map { it.path }.sorted().toMutableSet() as HashSet val currentPaths = LinkedHashSet() + val foldersWithoutMediaFiles = ArrayList() + var newDirId = 1000L - folders.forEach { - val path = it - if (path != RECYCLE_BIN && path != FAVORITES && !path.equals(internalPath, true) && !path.equals(sdPath, true)) { - if (currentPathPrefix.isNotEmpty()) { - if (path == currentPathPrefix || File(path).parent.equals(currentPathPrefix, true)) { - currentPaths.add(path) - } - } else if (folders.any { !it.equals(path, true) && (File(path).parent.equals(it, true) || File(it).parent.equals(File(path).parent, true)) }) { - // if we have folders like - // /storage/emulated/0/Pictures/Images and - // /storage/emulated/0/Pictures/Screenshots, - // but /storage/emulated/0/Pictures is empty, show Images and Screenshots as separate folders, do not group them at /Pictures - val parent = File(path).parent - if (folders.contains(parent)) { - currentPaths.add(parent) - } else { - currentPaths.add(path) - } - } else { - currentPaths.add(path) + for (path in folders) { + if (path == RECYCLE_BIN || path == FAVORITES) { + continue + } + + if (currentPathPrefix.isNotEmpty()) { + if (!path.startsWith(currentPathPrefix, true)) { + continue } + + if (!File(path).parent.equals(currentPathPrefix, true)) { + continue + } + } + + if (currentPathPrefix.isNotEmpty() && path == currentPathPrefix || File(path).parent.equals(currentPathPrefix, true)) { + currentPaths.add(path) + } else if (folders.any { !it.equals(path, true) && (File(path).parent.equals(it, true) || File(it).parent.equals(File(path).parent, true)) }) { + // if we have folders like + // /storage/emulated/0/Pictures/Images and + // /storage/emulated/0/Pictures/Screenshots, + // but /storage/emulated/0/Pictures is empty, still Pictures with the first folders thumbnails and proper other info + val parent = File(path).parent + if (!folders.contains(parent) && dirs.none { it.path == parent }) { + currentPaths.add(parent) + val isSortingAscending = config.sorting and SORT_DESCENDING == 0 + val subDirs = dirs.filter { File(it.path).parent.equals(File(path).parent, true) } as ArrayList + if (subDirs.isNotEmpty()) { + val lastModified = if (isSortingAscending) { + subDirs.minBy { it.modified }?.modified + } else { + subDirs.maxBy { it.modified }?.modified + } ?: 0 + + val dateTaken = if (isSortingAscending) { + subDirs.minBy { it.taken }?.taken + } else { + subDirs.maxBy { it.taken }?.taken + } ?: 0 + + var mediaTypes = 0 + subDirs.forEach { + mediaTypes = mediaTypes or it.types + } + + val directory = Directory(newDirId++, + parent, + subDirs.first().tmb, + getFolderNameFromPath(parent), + subDirs.sumBy { it.mediaCnt }, + lastModified, + dateTaken, + subDirs.sumByLong { it.size }, + getPathLocation(parent), + mediaTypes) + + directory.containsMediaFilesDirectly = false + dirs.add(directory) + currentPaths.add(parent) + foldersWithoutMediaFiles.add(parent) + } + } + } else { + currentPaths.add(path) } } @@ -243,7 +299,7 @@ fun Context.getDirectParentSubfolders(folders: HashSet, currentPathPrefi currentPaths.forEach { val path = it currentPaths.forEach { - if (!it.equals(path) && File(it).parent?.equals(path) == true) { + if (!foldersWithoutMediaFiles.contains(it) && !it.equals(path, true) && File(it).parent?.equals(path, true) == true) { areDirectSubfoldersAvailable = true } } @@ -258,15 +314,17 @@ fun Context.getDirectParentSubfolders(folders: HashSet, currentPathPrefi } if (folders.size == currentPaths.size) { - return currentPaths + return dirs.filter { currentPaths.contains(it.path) } as ArrayList } folders.clear() folders.addAll(currentPaths) + + val dirsToShow = dirs.filter { folders.contains(it.path) } as ArrayList return if (areDirectSubfoldersAvailable) { - getDirectParentSubfolders(folders, currentPathPrefix) + getDirectParentSubfolders(dirsToShow, currentPathPrefix) } else { - folders + dirsToShow } } @@ -287,7 +345,10 @@ fun Context.updateSubfolderCounts(children: ArrayList, parentDirs: Ar // make sure we count only the proper direct subfolders, grouped the same way as on the main screen parentDirs.firstOrNull { it.path == longestSharedPath }?.apply { if (path.equals(child.path, true) || path.equals(File(child.path).parent, true) || children.any { it.path.equals(File(child.path).parent, true) }) { - subfoldersCount++ + if (child.containsMediaFilesDirectly) { + subfoldersCount++ + } + if (path != child.path) { subfoldersMediaCount += child.mediaCnt } @@ -412,21 +473,23 @@ fun Context.loadImage(type: Int, path: String, target: MySquareImageView, horizo } fun Context.addTempFolderIfNeeded(dirs: ArrayList): ArrayList { - val directories = ArrayList() val tempFolderPath = config.tempFolderPath - if (tempFolderPath.isNotEmpty()) { + return if (tempFolderPath.isNotEmpty()) { + val directories = ArrayList() val newFolder = Directory(null, tempFolderPath, "", tempFolderPath.getFilenameFromPath(), 0, 0, 0, 0L, getPathLocation(tempFolderPath), 0) directories.add(newFolder) + directories.addAll(dirs) + directories + } else { + dirs } - directories.addAll(dirs) - return directories } fun Context.getPathLocation(path: String): Int { return when { isPathOnSD(path) -> LOCATION_SD isPathOnOTG(path) -> LOCATION_OTG - else -> LOCAITON_INTERNAL + else -> LOCATION_INTERNAL } } @@ -435,6 +498,7 @@ fun Context.loadPng(path: String, target: MySquareImageView, cropThumbnails: Boo .signature(path.getFileSignature()) .skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true) .diskCacheStrategy(DiskCacheStrategy.RESOURCE) + .priority(Priority.LOW) .format(DecodeFormat.PREFER_ARGB_8888) val builder = Glide.with(applicationContext) @@ -449,6 +513,7 @@ fun Context.loadJpg(path: String, target: MySquareImageView, cropThumbnails: Boo val options = RequestOptions() .signature(path.getFileSignature()) .skipMemoryCache(skipMemoryCacheAtPaths?.contains(path) == true) + .priority(Priority.LOW) .diskCacheStrategy(DiskCacheStrategy.RESOURCE) val builder = Glide.with(applicationContext) @@ -477,7 +542,7 @@ fun Context.getCachedDirectories(getVideosOnly: Boolean = false, getImagesOnly: Thread { val directories = try { directoryDao.getAll() as ArrayList - } catch (e: SQLiteException) { + } catch (e: Exception) { ArrayList() } @@ -722,3 +787,39 @@ fun Context.addPathToDB(path: String) { } }.start() } + +fun Context.createDirectoryFromMedia(path: String, curMedia: ArrayList, albumCovers: ArrayList, hiddenString: String, + includedFolders: MutableSet, isSortingAscending: Boolean, getProperFileSize: Boolean): Directory { + var thumbnail = curMedia.firstOrNull { File(it.path).exists() }?.path ?: "" + albumCovers.forEach { + if (it.path == path && File(it.tmb).exists()) { + thumbnail = it.tmb + } + } + + val defaultMedium = Medium(0, "", "", "", 0L, 0L, 0L, 0, 0, false, 0L) + val firstItem = curMedia.firstOrNull() ?: defaultMedium + val lastItem = curMedia.lastOrNull() ?: defaultMedium + val dirName = checkAppendingHidden(path, hiddenString, includedFolders) + val lastModified = if (isSortingAscending) Math.min(firstItem.modified, lastItem.modified) else Math.max(firstItem.modified, lastItem.modified) + val dateTaken = if (isSortingAscending) Math.min(firstItem.taken, lastItem.taken) else Math.max(firstItem.taken, lastItem.taken) + val size = if (getProperFileSize) curMedia.sumByLong { it.size } else 0L + val mediaTypes = curMedia.getDirMediaTypes() + return Directory(null, path, thumbnail, dirName, curMedia.size, lastModified, dateTaken, size, getPathLocation(path), mediaTypes) +} + +fun Context.updateDirectoryPath(path: String) { + val mediaFetcher = MediaFetcher(applicationContext) + val getImagesOnly = false + val getVideosOnly = false + val hiddenString = getString(R.string.hidden) + val albumCovers = config.parseAlbumCovers() + val includedFolders = config.includedFolders + val isSortingAscending = config.directorySorting and SORT_DESCENDING == 0 + val getProperDateTaken = config.directorySorting and SORT_BY_DATE_TAKEN != 0 + val getProperFileSize = config.directorySorting and SORT_BY_SIZE != 0 + val favoritePaths = getFavoritePaths() + val curMedia = mediaFetcher.getFilesFrom(path, getImagesOnly, getVideosOnly, getProperDateTaken, getProperFileSize, favoritePaths, false) + val directory = createDirectoryFromMedia(path, curMedia, albumCovers, hiddenString, includedFolders, isSortingAscending, getProperFileSize) + updateDBDirectory(directory, galleryDB.DirectoryDao()) +} 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 8ed09a992..571f361f7 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 @@ -21,6 +21,7 @@ import android.view.ViewGroup import com.alexvasilkov.gestures.GestureController import com.alexvasilkov.gestures.State import com.bumptech.glide.Glide +import com.bumptech.glide.Priority import com.bumptech.glide.load.DataSource import com.bumptech.glide.load.DecodeFormat import com.bumptech.glide.load.engine.DiskCacheStrategy @@ -39,10 +40,7 @@ import com.simplemobiletools.gallery.pro.R import com.simplemobiletools.gallery.pro.activities.PanoramaPhotoActivity import com.simplemobiletools.gallery.pro.activities.PhotoActivity import com.simplemobiletools.gallery.pro.extensions.* -import com.simplemobiletools.gallery.pro.helpers.MEDIUM -import com.simplemobiletools.gallery.pro.helpers.PATH -import com.simplemobiletools.gallery.pro.helpers.PicassoDecoder -import com.simplemobiletools.gallery.pro.helpers.PicassoRegionDecoder +import com.simplemobiletools.gallery.pro.helpers.* import com.simplemobiletools.gallery.pro.models.Medium import com.simplemobiletools.gallery.pro.svg.SvgSoftwareLayerSetter import com.squareup.picasso.Callback @@ -89,7 +87,14 @@ class PhotoFragment : ViewPagerFragment() { private lateinit var mMedium: Medium override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { - mView = (inflater.inflate(R.layout.pager_photo_item, container, false) as ViewGroup).apply { + mView = (inflater.inflate(R.layout.pager_photo_item, container, false) as ViewGroup) + if (!arguments!!.getBoolean(SHOULD_INIT_FRAGMENT, true)) { + return mView + } + + mMedium = arguments!!.getSerializable(MEDIUM) as Medium + + mView.apply { subsampling_view.setOnClickListener { photoClicked() } gestures_view.setOnClickListener { photoClicked() } gif_view.setOnClickListener { photoClicked() } @@ -146,7 +151,6 @@ class PhotoFragment : ViewPagerFragment() { mIsFragmentVisible = true } - mMedium = arguments!!.getSerializable(MEDIUM) as Medium if (mMedium.path.startsWith("content://") && !mMedium.path.startsWith("content://mms/")) { val originalPath = mMedium.path mMedium.path = context!!.getRealPathFromURI(Uri.parse(originalPath)) ?: mMedium.path @@ -226,6 +230,13 @@ class PhotoFragment : ViewPagerFragment() { super.onDestroyView() if (activity?.isDestroyed == false) { mView.subsampling_view.recycle() + + try { + if (context != null) { + Glide.with(context!!).clear(mView.gestures_view) + } + } catch (ignored: Exception) { + } } mLoadZoomableViewHandler.removeCallbacksAndMessages(null) @@ -243,11 +254,13 @@ class PhotoFragment : ViewPagerFragment() { // avoid GIFs being skewed, played in wrong aspect ratio if (mMedium.isGIF()) { mView.onGlobalLayout { - measureScreen() - Handler().postDelayed({ - mView.gif_view_frame.controller.resetState() - loadGif() - }, 50) + if (activity != null) { + measureScreen() + Handler().postDelayed({ + mView.gif_view_frame.controller.resetState() + loadGif() + }, 50) + } } } else { hideZoomableView() @@ -286,7 +299,7 @@ class PhotoFragment : ViewPagerFragment() { private fun measureScreen() { val metrics = DisplayMetrics() - activity!!.windowManager.defaultDisplay.getRealMetrics(metrics) + activity?.windowManager?.defaultDisplay?.getRealMetrics(metrics) mScreenWidth = metrics.widthPixels mScreenHeight = metrics.heightPixels } @@ -357,9 +370,11 @@ class PhotoFragment : ViewPagerFragment() { } private fun loadBitmap(addZoomableView: Boolean = true) { + val priority = if (mIsFragmentVisible) Priority.IMMEDIATE else Priority.NORMAL val options = RequestOptions() .signature(mMedium.path.getFileSignature()) .format(DecodeFormat.PREFER_ARGB_8888) + .priority(priority) .diskCacheStrategy(DiskCacheStrategy.RESOURCE) .fitCenter() @@ -538,7 +553,7 @@ class PhotoFragment : ViewPagerFragment() { tag?.getValueAsInt(defaultOrientation) ?: defaultOrientation } else { val exif = android.media.ExifInterface(path) - exif.getAttributeInt(android.media.ExifInterface.TAG_ORIENTATION, defaultOrientation) + exif.getAttributeInt(TAG_ORIENTATION, defaultOrientation) } if (orient == defaultOrientation || context!!.isPathOnOTG(mMedium.path)) { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt index 8bf276b80..fb6f9cde7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/fragments/VideoFragment.kt @@ -28,10 +28,7 @@ import com.simplemobiletools.gallery.pro.R import com.simplemobiletools.gallery.pro.activities.PanoramaVideoActivity import com.simplemobiletools.gallery.pro.activities.VideoActivity import com.simplemobiletools.gallery.pro.extensions.* -import com.simplemobiletools.gallery.pro.helpers.Config -import com.simplemobiletools.gallery.pro.helpers.MEDIUM -import com.simplemobiletools.gallery.pro.helpers.MIN_SKIP_LENGTH -import com.simplemobiletools.gallery.pro.helpers.PATH +import com.simplemobiletools.gallery.pro.helpers.* import com.simplemobiletools.gallery.pro.models.Medium import com.simplemobiletools.gallery.pro.views.MediaSideScroll import kotlinx.android.synthetic.main.bottom_video_time_holder.view.* @@ -77,6 +74,7 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S private lateinit var mSeekBar: SeekBar override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + mMedium = arguments!!.getSerializable(MEDIUM) as Medium mConfig = context!!.config mView = inflater.inflate(R.layout.pager_video_item, container, false).apply { instant_prev_item.setOnClickListener { listener?.goToPrevItem() } @@ -125,8 +123,11 @@ class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, S } } + if (!arguments!!.getBoolean(SHOULD_INIT_FRAGMENT, true)) { + return mView + } + storeStateVariables() - mMedium = arguments!!.getSerializable(MEDIUM) as Medium Glide.with(context!!).load(mMedium.path).into(mView.video_preview) // setMenuVisibility is not called at VideoActivity (third party intent) 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 3f0c9839e..bd335ad6c 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 @@ -203,7 +203,7 @@ class Config(context: Context) : BaseConfig(context) { set(blackBackground) = prefs.edit().putBoolean(BLACK_BACKGROUND, blackBackground).apply() var filterMedia: Int - get() = prefs.getInt(FILTER_MEDIA, TYPE_IMAGES or TYPE_VIDEOS or TYPE_GIFS or TYPE_RAWS or TYPE_SVGS) + get() = prefs.getInt(FILTER_MEDIA, TYPE_DEFAULT_FILTER) set(filterMedia) = prefs.edit().putInt(FILTER_MEDIA, filterMedia).apply() var dirColumnCnt: Int 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 0ea8d7062..481d49080 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 @@ -119,6 +119,7 @@ const val GET_ANY_INTENT = "get_any_intent" const val SET_WALLPAPER_INTENT = "set_wallpaper_intent" const val IS_VIEW_INTENT = "is_view_intent" const val PICKED_PATHS = "picked_paths" +const val SHOULD_INIT_FRAGMENT = "should_init_fragment" // rotations const val ROTATE_BY_SYSTEM_SETTING = 0 @@ -153,8 +154,9 @@ const val TYPE_VIDEOS = 2 const val TYPE_GIFS = 4 const val TYPE_RAWS = 8 const val TYPE_SVGS = 16 +const val TYPE_DEFAULT_FILTER = TYPE_IMAGES or TYPE_VIDEOS or TYPE_GIFS or TYPE_RAWS or TYPE_SVGS -const val LOCAITON_INTERNAL = 1 +const val LOCATION_INTERNAL = 1 const val LOCATION_SD = 2 const val LOCATION_OTG = 3 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 caef3de15..c64a0d88a 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 @@ -126,7 +126,7 @@ class MediaFetcher(val context: Context) { if (cursor.moveToFirst()) { do { val path = cursor.getStringValue(MediaStore.Images.Media.DATA) - val parentPath = File(path).parent?.trimEnd('/') ?: continue + val parentPath = File(path).parent ?: continue if (!includedFolders.contains(parentPath) && !foldersToIgnore.contains(parentPath)) { foldersToScan.add(parentPath) } @@ -287,8 +287,20 @@ class MediaFetcher(val context: Context) { o1 as Medium o2 as Medium var result = when { - sorting and SORT_BY_NAME != 0 -> o1.name.toLowerCase().compareTo(o2.name.toLowerCase()) - sorting and SORT_BY_PATH != 0 -> o1.path.toLowerCase().compareTo(o2.path.toLowerCase()) + sorting and SORT_BY_NAME != 0 -> { + if (sorting and SORT_USE_NUMERIC_VALUE != 0) { + AlphanumericComparator().compare(o1.name.toLowerCase(), o2.name.toLowerCase()) + } else { + o1.name.toLowerCase().compareTo(o2.name.toLowerCase()) + } + } + sorting and SORT_BY_PATH != 0 -> { + if (sorting and SORT_USE_NUMERIC_VALUE != 0) { + AlphanumericComparator().compare(o1.path.toLowerCase(), o2.path.toLowerCase()) + } else { + o1.path.toLowerCase().compareTo(o2.path.toLowerCase()) + } + } sorting and SORT_BY_SIZE != 0 -> o1.size.compareTo(o2.size) sorting and SORT_BY_DATE_MODIFIED != 0 -> o1.modified.compareTo(o2.modified) else -> o1.taken.compareTo(o2.taken) 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 8039ae280..07d24df9d 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 @@ -12,8 +12,10 @@ import android.net.Uri import android.os.Build import android.os.Handler import android.provider.MediaStore +import com.simplemobiletools.commons.extensions.getParentPath import com.simplemobiletools.commons.extensions.getStringValue import com.simplemobiletools.gallery.pro.extensions.addPathToDB +import com.simplemobiletools.gallery.pro.extensions.updateDirectoryPath // based on https://developer.android.com/reference/android/app/job/JobInfo.Builder.html#addTriggerContentUri(android.app.job.JobInfo.TriggerContentUri) @TargetApi(Build.VERSION_CODES.N) @@ -54,6 +56,7 @@ class NewPhotoFetcher : JobService() { override fun onStartJob(params: JobParameters): Boolean { mRunningParams = params + val affectedFolderPaths = HashSet() if (params.triggeredContentAuthorities != null && params.triggeredContentUris != null) { val ids = arrayListOf() for (uri in params.triggeredContentUris!!) { @@ -80,6 +83,7 @@ class NewPhotoFetcher : JobService() { cursor = contentResolver.query(it, projection, selection.toString(), null, null) while (cursor!!.moveToNext()) { val path = cursor!!.getStringValue(MediaStore.Images.ImageColumns.DATA) + affectedFolderPaths.add(path.getParentPath()) addPathToDB(path) } } @@ -90,6 +94,12 @@ class NewPhotoFetcher : JobService() { } } + Thread { + affectedFolderPaths.forEach { + updateDirectoryPath(it) + } + }.start() + mHandler.post(mWorker) return true } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/Directory.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/Directory.kt index f74af2abc..3b2ebedc5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/Directory.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/pro/models/Directory.kt @@ -26,7 +26,8 @@ data class Directory( // used with "Group direct subfolders" enabled @Ignore var subfoldersCount: Int = 0, - @Ignore var subfoldersMediaCount: Int = 0) { + @Ignore var subfoldersMediaCount: Int = 0, + @Ignore var containsMediaFilesDirectly: Boolean = true) { constructor() : this(null, "", "", "", 0, 0L, 0L, 0L, 0, 0, 0, 0) diff --git a/app/src/main/res/drawable/shortcut_image.xml b/app/src/main/res/drawable/shortcut_image.xml new file mode 100644 index 000000000..20dde1a45 --- /dev/null +++ b/app/src/main/res/drawable/shortcut_image.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 84912ef58..bbf53b09e 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -48,9 +48,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_alignParentEnd="true" - android:layout_alignParentRight="true" android:paddingStart="@dimen/normal_margin" - android:paddingLeft="@dimen/normal_margin" android:visibility="gone"> @@ -62,7 +60,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentStart="true" - android:layout_alignParentLeft="true" android:layout_alignParentBottom="true" android:paddingTop="@dimen/normal_margin" android:visibility="gone"> diff --git a/app/src/main/res/layout/activity_media.xml b/app/src/main/res/layout/activity_media.xml index 222ca5826..852cec099 100644 --- a/app/src/main/res/layout/activity_media.xml +++ b/app/src/main/res/layout/activity_media.xml @@ -48,9 +48,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_alignParentEnd="true" - android:layout_alignParentRight="true" android:paddingStart="@dimen/normal_margin" - android:paddingLeft="@dimen/normal_margin" android:visibility="gone"> @@ -62,7 +60,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentStart="true" - android:layout_alignParentLeft="true" android:layout_alignParentBottom="true" android:paddingTop="@dimen/normal_margin" android:visibility="gone"> diff --git a/app/src/main/res/layout/activity_panorama_photo.xml b/app/src/main/res/layout/activity_panorama_photo.xml index 199fb8d8f..0a4cd3f99 100644 --- a/app/src/main/res/layout/activity_panorama_photo.xml +++ b/app/src/main/res/layout/activity_panorama_photo.xml @@ -23,7 +23,7 @@ android:id="@+id/cardboard" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentRight="true" + android:layout_alignParentEnd="true" android:layout_alignParentBottom="true" android:padding="@dimen/activity_margin" android:src="@drawable/ic_cardboard"/> @@ -32,7 +32,7 @@ android:id="@+id/explore" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" android:layout_alignParentBottom="true" android:padding="@dimen/activity_margin" android:src="@drawable/ic_explore"/> diff --git a/app/src/main/res/layout/activity_panorama_video.xml b/app/src/main/res/layout/activity_panorama_video.xml index 343496d24..45e5fb637 100644 --- a/app/src/main/res/layout/activity_panorama_video.xml +++ b/app/src/main/res/layout/activity_panorama_video.xml @@ -17,7 +17,7 @@ android:id="@+id/explore" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" android:layout_alignParentBottom="true" android:padding="@dimen/activity_margin" android:src="@drawable/ic_explore"/> @@ -26,7 +26,7 @@ android:id="@+id/cardboard" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentRight="true" + android:layout_alignParentEnd="true" android:layout_alignParentBottom="true" android:padding="@dimen/activity_margin" android:src="@drawable/ic_cardboard"/> diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index c0f1c51a9..9331be83c 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -29,7 +29,6 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/customize_colors"/> @@ -52,7 +51,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/use_english_language" app:switchPadding="@dimen/medium_margin"/> @@ -75,7 +73,6 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/change_date_and_time_format"/> @@ -97,7 +94,6 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toStartOf="@+id/settings_file_loading_priority" - android:layout_toLeftOf="@+id/settings_file_loading_priority" android:paddingLeft="@dimen/medium_margin" android:paddingRight="@dimen/medium_margin" android:text="@string/file_loading_priority"/> @@ -107,9 +103,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" - android:layout_alignParentRight="true" android:layout_marginEnd="@dimen/small_margin" - android:layout_marginRight="@dimen/small_margin" android:background="@null" android:clickable="false"/> @@ -127,7 +121,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" 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" @@ -150,7 +143,6 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/manage_included_folders"/> @@ -172,7 +164,6 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/manage_excluded_folders"/> @@ -194,7 +185,6 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/manage_hidden_folders"/> @@ -217,7 +207,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/show_hidden_items" app:switchPadding="@dimen/medium_margin"/> @@ -235,7 +224,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" 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" @@ -259,7 +247,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/autoplay_videos" app:switchPadding="@dimen/medium_margin"/> @@ -283,7 +270,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/remember_last_video_position" app:switchPadding="@dimen/medium_margin"/> @@ -307,7 +293,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/loop_videos" app:switchPadding="@dimen/medium_margin"/> @@ -331,7 +316,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/open_videos_on_separate_screen" app:switchPadding="@dimen/medium_margin"/> @@ -355,7 +339,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/allow_video_gestures" app:switchPadding="@dimen/medium_margin"/> @@ -373,7 +356,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" 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" @@ -397,7 +379,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/animate_gifs" app:switchPadding="@dimen/medium_margin"/> @@ -421,7 +402,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/crop_thumbnails" app:switchPadding="@dimen/medium_margin"/> @@ -445,7 +425,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/show_thumbnail_video_duration" app:switchPadding="@dimen/medium_margin"/> @@ -469,7 +448,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/show_media_count" app:switchPadding="@dimen/medium_margin"/> @@ -487,7 +465,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" 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" @@ -511,7 +488,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/show_info_bubble" app:switchPadding="@dimen/medium_margin"/> @@ -535,7 +511,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/scroll_thumbnails_horizontally" app:switchPadding="@dimen/medium_margin"/> @@ -559,7 +534,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/enable_pull_to_refresh" app:switchPadding="@dimen/medium_margin"/> @@ -577,7 +551,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" 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" @@ -601,7 +574,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/max_brightness" app:switchPadding="@dimen/medium_margin"/> @@ -625,7 +597,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/black_background_at_fullscreen" app:switchPadding="@dimen/medium_margin"/> @@ -649,7 +620,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/hide_system_ui_at_fullscreen" app:switchPadding="@dimen/medium_margin"/> @@ -673,7 +643,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/allow_instant_change" app:switchPadding="@dimen/medium_margin"/> @@ -697,7 +666,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/allow_photo_gestures" app:switchPadding="@dimen/medium_margin"/> @@ -721,7 +689,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/allow_down_gesture" app:switchPadding="@dimen/medium_margin"/> @@ -745,7 +712,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/show_notch" app:switchPadding="@dimen/medium_margin"/> @@ -768,7 +734,6 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toStartOf="@+id/settings_screen_rotation" - android:layout_toLeftOf="@+id/settings_screen_rotation" android:paddingLeft="@dimen/medium_margin" android:paddingRight="@dimen/medium_margin" android:text="@string/screen_rotation_by"/> @@ -778,9 +743,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" - android:layout_alignParentRight="true" android:layout_marginEnd="@dimen/small_margin" - android:layout_marginRight="@dimen/small_margin" android:background="@null" android:clickable="false"/> @@ -798,7 +761,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/bigger_margin" - android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginTop="@dimen/activity_margin" android:text="@string/deep_zoomable_images" android:textAllCaps="true" @@ -822,7 +784,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/allow_deep_zooming_images" app:switchPadding="@dimen/medium_margin"/> @@ -846,7 +807,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/allow_rotating_gestures" app:switchPadding="@dimen/medium_margin"/> @@ -870,7 +830,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/show_highest_quality" app:switchPadding="@dimen/medium_margin"/> @@ -894,7 +853,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/allow_one_to_one_zoom" app:switchPadding="@dimen/medium_margin"/> @@ -912,7 +870,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/bigger_margin" - android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginTop="@dimen/activity_margin" android:text="@string/extended_details" android:textAllCaps="true" @@ -936,7 +893,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/show_extended_details" app:switchPadding="@dimen/medium_margin"/> @@ -959,7 +915,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/hide_extended_details" app:switchPadding="@dimen/medium_margin"/> @@ -981,7 +936,6 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/manage_extended_details"/> @@ -998,7 +952,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" 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" @@ -1022,7 +975,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/password_protect_hidden_items" app:switchPadding="@dimen/medium_margin"/> @@ -1046,7 +998,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/password_protect_whole_app" app:switchPadding="@dimen/medium_margin"/> @@ -1070,7 +1021,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/password_protect_file_deletion" app:switchPadding="@dimen/medium_margin"/> @@ -1088,7 +1038,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" 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" @@ -1112,7 +1061,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/delete_empty_folders" app:switchPadding="@dimen/medium_margin"/> @@ -1136,7 +1084,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/keep_last_modified" app:switchPadding="@dimen/medium_margin"/> @@ -1160,7 +1107,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/skip_delete_confirmation" app:switchPadding="@dimen/medium_margin"/> @@ -1178,7 +1124,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" 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" @@ -1202,7 +1147,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/show_at_bottom" app:switchPadding="@dimen/medium_margin"/> @@ -1225,7 +1169,6 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/manage_bottom_actions"/> @@ -1242,7 +1185,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" 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" @@ -1266,7 +1208,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/move_items_into_recycle_bin" app:switchPadding="@dimen/medium_margin"/> @@ -1290,7 +1231,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/show_recycle_bin" app:switchPadding="@dimen/medium_margin"/> @@ -1314,7 +1254,6 @@ android:background="@null" android:clickable="false" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/show_recycle_bin_last" app:switchPadding="@dimen/medium_margin"/> @@ -1337,7 +1276,6 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toStartOf="@+id/settings_empty_recycle_bin_size" - android:layout_toLeftOf="@+id/settings_empty_recycle_bin_size" android:paddingLeft="@dimen/medium_margin" android:paddingRight="@dimen/medium_margin" android:text="@string/empty_recycle_bin"/> @@ -1347,9 +1285,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" - android:layout_alignParentRight="true" android:layout_marginEnd="@dimen/small_margin" - android:layout_marginRight="@dimen/small_margin" android:background="@null" android:clickable="false"/> @@ -1367,7 +1303,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/bigger_margin" - android:layout_marginLeft="@dimen/bigger_margin" android:layout_marginTop="@dimen/activity_margin" android:text="@string/migrating" android:textAllCaps="true" @@ -1390,7 +1325,6 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/export_settings"/> @@ -1412,7 +1346,6 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:text="@string/import_settings"/> diff --git a/app/src/main/res/layout/activity_video_player.xml b/app/src/main/res/layout/activity_video_player.xml index d7962a628..224c6425a 100644 --- a/app/src/main/res/layout/activity_video_player.xml +++ b/app/src/main/res/layout/activity_video_player.xml @@ -23,8 +23,7 @@ android:id="@+id/video_volume_controller" android:layout_width="@dimen/media_side_slider_width" android:layout_height="match_parent" - android:layout_alignParentEnd="true" - android:layout_alignParentRight="true"/> + android:layout_alignParentEnd="true"/> @@ -100,7 +100,6 @@ android:layout_alignTop="@+id/config_bg_color" android:layout_alignBottom="@+id/config_bg_color" android:layout_toEndOf="@+id/config_bg_color" - android:layout_toRightOf="@+id/config_bg_color" android:background="@android:color/white"> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0"/> + app:layout_constraintStart_toEndOf="@+id/bottom_favorite" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0"/> + app:layout_constraintStart_toEndOf="@+id/bottom_edit" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0"/> + app:layout_constraintStart_toEndOf="@+id/bottom_share" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0"/> + app:layout_constraintStart_toEndOf="@+id/bottom_delete" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0"/> + app:layout_constraintStart_toEndOf="@+id/bottom_rotate" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0"/> + app:layout_constraintStart_toEndOf="@+id/bottom_properties" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0"/> + app:layout_constraintStart_toEndOf="@+id/bottom_change_orientation" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0"/> + app:layout_constraintStart_toEndOf="@+id/bottom_slideshow" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0"/> + app:layout_constraintStart_toEndOf="@+id/bottom_show_on_map" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0"/> + app:layout_constraintStart_toEndOf="@+id/bottom_toggle_file_visibility" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0"/> + app:layout_constraintStart_toEndOf="@+id/bottom_rename" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0"/> + app:layout_constraintStart_toEndOf="@+id/bottom_set_as" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0"/> + app:layout_constraintStart_toEndOf="@+id/bottom_copy" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0"/> diff --git a/app/src/main/res/layout/bottom_actions_aspect_ratio.xml b/app/src/main/res/layout/bottom_actions_aspect_ratio.xml index 8663bf358..e5ffd02df 100644 --- a/app/src/main/res/layout/bottom_actions_aspect_ratio.xml +++ b/app/src/main/res/layout/bottom_actions_aspect_ratio.xml @@ -17,9 +17,12 @@ android:textAllCaps="true" android:textColor="@android:color/white" android:textSize="@dimen/big_text_size" + app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/bottom_aspect_ratio_one_one" app:layout_constraintHorizontal_bias="0.5" - app:layout_constraintStart_toStartOf="parent"/> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0"/> + app:layout_constraintStart_toEndOf="@+id/bottom_aspect_ratio_free" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0"/> + app:layout_constraintStart_toEndOf="@+id/bottom_aspect_ratio_one_one" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0"/> + app:layout_constraintStart_toEndOf="@+id/bottom_aspect_ratio_four_three" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0"/> + app:layout_constraintStart_toEndOf="@+id/bottom_aspect_ratio_sixteen_nine" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0"/> diff --git a/app/src/main/res/layout/bottom_editor_draw_actions.xml b/app/src/main/res/layout/bottom_editor_draw_actions.xml index fb12e40b2..8026820e2 100644 --- a/app/src/main/res/layout/bottom_editor_draw_actions.xml +++ b/app/src/main/res/layout/bottom_editor_draw_actions.xml @@ -24,7 +24,7 @@ android:id="@+id/bottom_draw_color_clickable" android:layout_width="@dimen/bottom_editor_color_picker_size" android:layout_height="@dimen/bottom_editor_color_picker_size" - android:layout_marginRight="@dimen/small_margin" + android:layout_marginEnd="@dimen/small_margin" android:background="?attr/selectableItemBackgroundBorderless" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintRight_toLeftOf="@+id/bottom_draw_undo" @@ -34,7 +34,7 @@ android:id="@+id/bottom_draw_color" android:layout_width="@dimen/bottom_editor_color_picker_size" android:layout_height="@dimen/bottom_editor_color_picker_size" - android:layout_marginRight="@dimen/small_margin" + android:layout_marginEnd="@dimen/small_margin" android:clickable="false" android:padding="@dimen/small_margin" android:src="@drawable/circle_background" @@ -46,7 +46,7 @@ android:id="@+id/bottom_draw_undo" android:layout_width="@dimen/bottom_editor_color_picker_size" android:layout_height="@dimen/bottom_editor_color_picker_size" - android:layout_marginRight="@dimen/normal_margin" + android:layout_marginEnd="@dimen/normal_margin" android:background="?attr/selectableItemBackgroundBorderless" android:clickable="false" android:padding="@dimen/medium_margin" diff --git a/app/src/main/res/layout/bottom_video_time_holder.xml b/app/src/main/res/layout/bottom_video_time_holder.xml index ec34b6501..53701119c 100644 --- a/app/src/main/res/layout/bottom_video_time_holder.xml +++ b/app/src/main/res/layout/bottom_video_time_holder.xml @@ -50,7 +50,6 @@ android:layout_alignTop="@+id/video_seekbar" android:layout_alignBottom="@+id/video_seekbar" android:layout_alignParentStart="true" - android:layout_alignParentLeft="true" android:background="?attr/selectableItemBackgroundBorderless" android:gravity="center_vertical" android:paddingLeft="@dimen/activity_margin" @@ -64,9 +63,7 @@ android:layout_height="wrap_content" android:layout_below="@+id/video_toggle_play_pause" android:layout_toStartOf="@+id/video_duration" - android:layout_toLeftOf="@+id/video_duration" android:layout_toEndOf="@+id/video_curr_time" - android:layout_toRightOf="@+id/video_curr_time" android:paddingTop="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin"/> @@ -78,7 +75,6 @@ android:layout_alignTop="@+id/video_seekbar" android:layout_alignBottom="@+id/video_seekbar" android:layout_alignParentEnd="true" - android:layout_alignParentRight="true" android:background="?attr/selectableItemBackgroundBorderless" android:gravity="center_vertical" android:paddingLeft="@dimen/activity_margin" diff --git a/app/src/main/res/layout/dialog_change_sorting.xml b/app/src/main/res/layout/dialog_change_sorting.xml index 8d3dc7570..96fb61ad5 100644 --- a/app/src/main/res/layout/dialog_change_sorting.xml +++ b/app/src/main/res/layout/dialog_change_sorting.xml @@ -101,6 +101,14 @@ android:id="@+id/use_for_this_folder_divider" layout="@layout/divider"/> + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_custom_aspect_ratio.xml b/app/src/main/res/layout/dialog_custom_aspect_ratio.xml index 3f9180ae0..7650ee275 100644 --- a/app/src/main/res/layout/dialog_custom_aspect_ratio.xml +++ b/app/src/main/res/layout/dialog_custom_aspect_ratio.xml @@ -33,8 +33,8 @@ android:layout_height="wrap_content" android:layout_alignTop="@+id/aspect_ratio_width" android:layout_alignBottom="@+id/aspect_ratio_width" - android:layout_toLeftOf="@+id/aspect_ratio_height" - android:layout_toRightOf="@+id/aspect_ratio_width" + android:layout_toStartOf="@+id/aspect_ratio_height" + android:layout_toEndOf="@+id/aspect_ratio_width" android:gravity="center" android:text=":" android:textStyle="bold"/> @@ -44,8 +44,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="50dp" - android:layout_marginLeft="50dp" - android:layout_toRightOf="@+id/aspect_ratio_width_label" + android:layout_toEndOf="@+id/aspect_ratio_width_label" android:text="@string/height"/> + android:paddingStart="@dimen/normal_margin"> @@ -40,7 +36,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentStart="true" - android:layout_alignParentLeft="true" android:layout_alignParentBottom="true" android:paddingTop="@dimen/normal_margin"> diff --git a/app/src/main/res/layout/dialog_medium_picker.xml b/app/src/main/res/layout/dialog_medium_picker.xml index c9b59d2d8..cc06575dc 100644 --- a/app/src/main/res/layout/dialog_medium_picker.xml +++ b/app/src/main/res/layout/dialog_medium_picker.xml @@ -19,9 +19,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_alignParentEnd="true" - android:layout_alignParentRight="true" - android:paddingStart="@dimen/normal_margin" - android:paddingLeft="@dimen/normal_margin"> + android:paddingStart="@dimen/normal_margin"> @@ -32,7 +30,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentStart="true" - android:layout_alignParentLeft="true" android:layout_alignParentBottom="true" android:paddingTop="@dimen/normal_margin"> diff --git a/app/src/main/res/layout/dialog_other_aspect_ratio.xml b/app/src/main/res/layout/dialog_other_aspect_ratio.xml index 61487c688..661245a51 100644 --- a/app/src/main/res/layout/dialog_other_aspect_ratio.xml +++ b/app/src/main/res/layout/dialog_other_aspect_ratio.xml @@ -27,7 +27,7 @@ android:id="@+id/other_aspect_ratio_2_1" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingLeft="@dimen/small_margin" + android:paddingStart="@dimen/small_margin" android:paddingTop="@dimen/normal_margin" android:paddingBottom="@dimen/normal_margin" android:text="2:1" @@ -37,18 +37,17 @@ android:id="@+id/other_aspect_ratio_3_2" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingLeft="@dimen/small_margin" + android:paddingStart="@dimen/small_margin" android:paddingTop="@dimen/normal_margin" android:paddingBottom="@dimen/normal_margin" android:text="3:2" android:textSize="@dimen/bigger_text_size"/> - + android:paddingEnd="@dimen/small_margin"/> @@ -27,12 +26,11 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" - android:layout_alignParentRight="true" android:ems="5" - android:gravity="right" + android:gravity="end" android:imeOptions="actionDone" android:inputType="number" - android:maxLength="2" + android:maxLength="5" android:textCursorDrawable="@null" android:textSize="@dimen/normal_text_size"/> @@ -43,7 +41,6 @@ android:layout_below="@+id/interval_label" android:background="?attr/selectableItemBackground" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:paddingTop="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin"> @@ -64,7 +61,6 @@ android:layout_below="@+id/include_videos_holder" android:background="?attr/selectableItemBackground" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:paddingTop="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin"> @@ -85,7 +81,6 @@ android:layout_below="@+id/include_gifs_holder" android:background="?attr/selectableItemBackground" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:paddingTop="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin"> @@ -106,7 +101,6 @@ android:layout_below="@+id/random_order_holder" android:background="?attr/selectableItemBackground" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:paddingTop="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin" android:visibility="gone"> @@ -128,7 +122,6 @@ android:layout_below="@+id/use_fade_holder" android:background="?attr/selectableItemBackground" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:paddingTop="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin"> @@ -149,7 +142,6 @@ android:layout_below="@+id/move_backwards_holder" android:background="?attr/selectableItemBackground" android:paddingStart="@dimen/medium_margin" - android:paddingLeft="@dimen/medium_margin" android:paddingTop="@dimen/activity_margin" android:paddingBottom="@dimen/activity_margin"> diff --git a/app/src/main/res/layout/directory_item_grid.xml b/app/src/main/res/layout/directory_item_grid.xml index 4eab84e66..9f72281c9 100644 --- a/app/src/main/res/layout/directory_item_grid.xml +++ b/app/src/main/res/layout/directory_item_grid.xml @@ -17,10 +17,9 @@ android:id="@+id/dir_check" android:layout_width="@dimen/selection_check_size" android:layout_height="@dimen/selection_check_size" - android:layout_alignRight="@+id/dir_shadow_holder" + android:layout_alignEnd="@+id/dir_shadow_holder" android:layout_alignParentTop="true" android:layout_alignParentEnd="true" - android:layout_alignParentRight="true" android:layout_margin="@dimen/small_margin" android:background="@drawable/circle_background" android:padding="@dimen/tiny_margin" @@ -32,7 +31,6 @@ android:layout_width="@dimen/selection_check_size" android:layout_height="@dimen/selection_check_size" android:layout_alignParentStart="true" - android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_margin="@dimen/small_margin" android:background="@drawable/circle_black_background" @@ -44,8 +42,8 @@ android:id="@+id/dir_shadow_holder" android:layout_width="match_parent" android:layout_height="@dimen/tmb_shadow_height" - android:layout_alignLeft="@+id/dir_bottom_holder" - android:layout_alignRight="@+id/dir_bottom_holder" + android:layout_alignStart="@+id/dir_bottom_holder" + android:layout_alignEnd="@+id/dir_bottom_holder" android:layout_alignParentBottom="true" android:background="@drawable/gradient_background"/> @@ -53,8 +51,8 @@ android:id="@+id/dir_bottom_holder" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_alignLeft="@+id/dir_thumbnail" - android:layout_alignRight="@+id/dir_thumbnail" + android:layout_alignStart="@+id/dir_thumbnail" + android:layout_alignEnd="@+id/dir_thumbnail" android:layout_alignParentBottom="true" android:gravity="bottom" android:orientation="vertical" @@ -70,6 +68,8 @@ android:ellipsize="end" android:maxLines="2" android:paddingBottom="@dimen/small_margin" + android:shadowColor="@color/default_background_color" + android:shadowRadius="4" android:textColor="@android:color/white" android:textSize="@dimen/normal_text_size"/> @@ -86,11 +86,10 @@ android:id="@+id/dir_location" android:layout_width="@dimen/sd_card_icon_size" android:layout_height="@dimen/sd_card_icon_size" - android:layout_alignRight="@+id/dir_bottom_holder" + android:layout_alignEnd="@+id/dir_bottom_holder" android:layout_alignParentBottom="true" android:alpha="0.8" android:paddingEnd="@dimen/small_margin" - android:paddingRight="@dimen/small_margin" android:paddingBottom="@dimen/small_margin" android:src="@drawable/ic_sd_card" android:visibility="gone"/> diff --git a/app/src/main/res/layout/directory_item_list.xml b/app/src/main/res/layout/directory_item_list.xml index 4a0036d7f..8534c4552 100644 --- a/app/src/main/res/layout/directory_item_list.xml +++ b/app/src/main/res/layout/directory_item_list.xml @@ -6,7 +6,7 @@ android:layout_height="wrap_content" android:clickable="true" android:focusable="true" - android:paddingLeft="@dimen/small_margin" + android:paddingStart="@dimen/small_margin" android:paddingTop="@dimen/small_margin"> @@ -58,7 +57,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/dir_name" - android:layout_toRightOf="@+id/dir_name" + android:layout_toEndOf="@+id/dir_name" android:alpha="0.4" android:textColor="@android:color/white" android:textSize="@dimen/smaller_text_size"/> @@ -68,9 +67,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" - android:layout_alignParentRight="true" android:layout_alignParentBottom="true" - android:layout_marginRight="@dimen/small_margin" + android:layout_marginEnd="@dimen/small_margin" android:gravity="end" android:orientation="horizontal" android:paddingBottom="@dimen/tiny_margin"> @@ -98,7 +96,7 @@ android:layout_height="1dp" android:layout_alignBottom="@+id/dir_thumbnail" android:layout_marginTop="2dp" - android:layout_toRightOf="@+id/dir_thumbnail" + android:layout_toEndOf="@+id/dir_thumbnail" android:background="@drawable/divider"/> diff --git a/app/src/main/res/layout/pager_photo_item.xml b/app/src/main/res/layout/pager_photo_item.xml index 7484532eb..2336176cb 100644 --- a/app/src/main/res/layout/pager_photo_item.xml +++ b/app/src/main/res/layout/pager_photo_item.xml @@ -45,7 +45,7 @@ android:id="@+id/photo_details" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" android:layout_marginLeft="@dimen/small_margin" android:layout_marginRight="@dimen/small_margin" android:background="@color/gradient_grey_start" @@ -59,8 +59,7 @@ android:id="@+id/photo_brightness_controller" android:layout_width="@dimen/media_side_slider_width" android:layout_height="match_parent" - android:layout_alignParentStart="true" - android:layout_alignParentLeft="true"/> + android:layout_alignParentStart="true"/> + android:layout_alignParentEnd="true"/> diff --git a/app/src/main/res/layout/pager_video_item.xml b/app/src/main/res/layout/pager_video_item.xml index 9db21e6a4..4a18f5add 100644 --- a/app/src/main/res/layout/pager_video_item.xml +++ b/app/src/main/res/layout/pager_video_item.xml @@ -28,8 +28,7 @@ android:id="@+id/video_volume_controller" android:layout_width="@dimen/media_side_slider_width" android:layout_height="match_parent" - android:layout_alignParentEnd="true" - android:layout_alignParentRight="true"/> + android:layout_alignParentEnd="true"/> + android:layout_alignParentEnd="true"/> - - + + + android:textSize="@dimen/smaller_text_size" + tools:text="My photo"/> diff --git a/app/src/main/res/layout/photo_video_item_list.xml b/app/src/main/res/layout/photo_video_item_list.xml index 46f772e8a..3acf413c3 100644 --- a/app/src/main/res/layout/photo_video_item_list.xml +++ b/app/src/main/res/layout/photo_video_item_list.xml @@ -7,7 +7,7 @@ android:layout_height="wrap_content" android:clickable="true" android:focusable="true" - android:paddingLeft="@dimen/small_margin" + android:paddingStart="@dimen/small_margin" android:paddingTop="@dimen/small_margin"> + android:textSize="@dimen/bigger_text_size" + tools:text="My photo"/> @@ -60,7 +60,7 @@ android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="6dp" - android:layout_toLeftOf="@+id/play_outline" + android:layout_toStartOf="@+id/play_outline" android:paddingLeft="@dimen/small_margin" android:paddingRight="@dimen/small_margin" android:paddingBottom="@dimen/small_margin" @@ -74,7 +74,7 @@ android:layout_height="1dp" android:layout_alignBottom="@+id/medium_thumbnail" android:layout_marginTop="2dp" - android:layout_toRightOf="@+id/medium_thumbnail" + android:layout_toEndOf="@+id/medium_thumbnail" android:background="@drawable/divider"/> diff --git a/app/src/main/res/menu/cab_directories.xml b/app/src/main/res/menu/cab_directories.xml index e2e19a58b..a7f29794a 100644 --- a/app/src/main/res/menu/cab_directories.xml +++ b/app/src/main/res/menu/cab_directories.xml @@ -48,19 +48,15 @@ android:id="@+id/cab_exclude" android:title="@string/exclude" app:showAsAction="never"/> - - + + + diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index 15dd5ecfd..1de075c0c 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -7,16 +7,16 @@ android:title="@string/search" app:actionViewClass="androidx.appcompat.widget.SearchView" app:showAsAction="collapseActionView|ifRoom"/> - + + + إدارة المجلدات المضمنة اضافة مجلد إذا كان لديك بعض المجلدات التي تحتوي على الملتيميديا ، ولكن لم يتم التعرف عليها من قبل التطبيق، يمكنك إضافتها يدويا هنا.\n + No media files have been found. You can solve it by adding the folders containing media files manually. \n لن تؤدي إضافة بعض العناصر هنا إلى استبعاد أي مجلد آخر. diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index bfb70a1b6..3d299a0c0 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -63,6 +63,7 @@ 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. + No media files have been found. You can solve it by adding the folders containing media files manually. Resize @@ -198,7 +199,7 @@ 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. + You can long press the desired album and select the Pin icon at the actions menu, 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 either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward. What is the difference between hiding and excluding a folder? diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 3d9c658ed..2826c8ec4 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -63,6 +63,7 @@ Gestionar carpetes incloses Agregar carpeta Si tens alguna carpeta que contingui multimèdia però no ha estat reconeguda per la aplicació, pots agregar-les manualment aquí. + No media files have been found. You can solve it by adding the folders containing media files manually. Redimensionar diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index c45fd6dc0..6d2c18104 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -31,8 +31,8 @@ Opravit datum vytvoření Opravuji… Datumy byly úspěšně opraveny - Share a resized version - 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! + Sdílet verzi se změněnou velikostí + Zdravím,\n\nzdá se, že jse přešli ze staré bezplatné aplikace. Starou aplikaci, která má nahoře v nastavení tlačítko \'Stáhnout Pro verzi\', můžete již odinstalovat.\n\nZtratíte tím pouze soubory v odpadkovém koši, označení oblíbených souborů a také budete muset znovu nastavit položky v nastavení aplikace.\n\nDěkuji! Filtr médií @@ -50,7 +50,7 @@ Vyloučené složky Spravovat vyloučené složky Tato funkce vyloučí výběr včetně podsložek jen z Jednoduché galerie. V nastavení můžete spravovat vyloučené složky. - Chcete vyloučit rodičovskou složku? + Chcete vyloučit nadřazenou složku? Vyloučené složky budou spolu s podsložkami vyloučeny jen z Jednoduché Galerie, ostatní aplikace je nadále uvidí.\n\nPokud je chcete skrýt i před ostatními aplikacemi, použijte funkci Skrýt. Odstranit všechny Odstranit všechny složky ze seznamu vyloučených? Tato operace neodstraní obsah složek. @@ -63,6 +63,7 @@ Spravovat přidané složky Přidat složku Pokud máte nějaké složky obsahující média, ale nebyly aplikací nalezeny, můžete je zde přidat ručně. + No media files have been found. You can solve it by adding the folders containing media files manually. Změnit velikost @@ -90,7 +91,7 @@ Překlopit vodorovně Překlopit svisle Volný - Other + Jiný Jednoduchá tapeta @@ -107,17 +108,17 @@ Prezentace - Interval (sekundy): + Interval (vteřin): Zahrnout fotografie Zahrnout videa Zahrnout GIFy Náhodné pořadí - Použít miznoucí animace + Použít animaci slábnutí Jít opačným směrem - Smyčková prezentace + Opakovat prezentaci ve smyčce Prezentace skončila Nebyla nalezena žádná média pro prezentaci - Use crossfade animations + Použít animaci prolnutí Změnit typ zobrazení @@ -127,28 +128,28 @@ Seskupit podle - Soubory neseskupovat + Neseskupovat soubory Složky Data poslední úpravy Data pořízení Typu souboru Přípony - Please note that grouping and sorting are 2 independent fields + Mějte prosím na paměti, že seskupování a řazení jsou 2 nezávislé hodnoty Složka zobrazená na widgetu: Zobrazit název složky - Automaticky přehrávat videa + Přehrávat videa automaticky Zapamatovat pozici posledního přehraného videa Přepnout viditelnost názvů souborů Přehrávat videa ve smyčce Animovat náhledy souborů GIF - Nastavit jas obrazovky na max při zobrazení médií + Maximální jas obrazovky při zobrazení médií Oříznout náhledy na čtverce Zobrazit dobu trvání videí - Otočit média podle + Otáčet média na celé obrazovce podle Systémového nastavení Otočení zařízení Poměru stran @@ -162,23 +163,23 @@ Zobrazit rozšířené vlastnosti přes celoobrazovkové média Spravovat rozšířené vlastnosti Povolit přibližování jedním prstem v celoobrazovkovém režimu - Povolit okamžité přepínání médií kliknutím na okraj obrazovky + Povolit okamžité přepínání médií ťuknutím na okraj obrazovky Povolit hluboké přibližování obrázků Skrýt rozšířené vlastnosti pokud je skrytá stavová lišta - Zobrazit některé akční tlačítka na spodní straně obrazovky + Zobrazit některá akční tlačítka ve spodní části obrazovky Zobrazit odpadkový koš na obrazovce se složkami Hluboce priblížitelné obrázky Zobrazit obrázky v nejlepší možné kvalitě Zobrazit odpadkový koš jako poslední položku na hlavní obrazovce Povolit zavírání celoobrazovkového režimu tažením prstu dolů - Allow 1:1 zooming in with two double taps - Always open videos on a separate screen with new horizontal gestures - Show a notch if available - Allow rotating images with gestures - File loading priority - Speed - Compromise - Avoid showing invalid files + Povolit přiblížení 1:1 dvojitým poklepáním + Vždy otevírat videa na vlastní obrazovce s novými vodorovnými gesty + Zobrazit výřez obrazovky pokud je dostupný + Povolit otáčení obrázků gesty + Priorita načítání obrázků + Rychlost + Kompromis + Vyvarovat se zobrazení neplatných souborů Náhledy @@ -192,87 +193,87 @@ Přepnutí viditelnosti souboru - Jak můžu udělat Jednoduchou Galerii výchozí galerií zařízení? - Nejdřív musíte najít v nastavení zařízení sekci Aplikace, současnou výchozí galerii, zvolit tlačítko s textem ve smyslu \"Nastavení výchozího otevírání\" a následně \"Vymazat výchozí nastavení\". - Pokud potom zkusíte otevřít obrázek nebo video, zobrazí se seznam aplikací, kde můžete zvolit Jednoduchou Galerii a nastavit ji jako výchozí. + Jak nastavím Jednoduchou Galerii jako výchozí galerii? + Nejdříve musíte najít v nastavení zařízení, v sekci Aplikace, současnou výchozí galerii, zvolit tlačítko s textem ve smyslu \"Nastavení výchozího otevírání\" a následně \"Vymazat výchozí nastavení\". + Pokud poté zkusíte otevřít obrázek nebo video, zobrazí se seznam aplikací, kde můžete zvolit Jednoduchou Galerii a nastavit ji jako výchozí. Uzamknul jsem aplikaci heslem, ale zapomněl jsem ho. Co můžu udělat? - Můžete to vyriešǐť 2 způsoby. Můžete aplikaci buď přeinstalovat nebo ji najít v nastavení zařízení a zvolit \"Vymazat data\". Vymaže to pouze nastavení, nikoli soubory. - Jak můžu dosáhnout, aby bylo dané album stále zobrazeno první? - Můžete označit danou složku dlouhým podržením a zvolit tlačítko s obrázkem připínáčku, to jej připne na vrch. Můžete připnout i více složek, budou seřazeny podle zvoleného řazení. - Jak můžu rychle posunout videa? - You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward. + Můžete to vyriešǐť 2 způsoby. Můžete aplikaci buď přeinstalovat nebo ji najít v nastavení zařízení a zvolit \"Vymazat data\". Vymažou se pouze nastavení aplikace, nikoliv soubory. + Jak mohu dosáhnout, aby bylo dané album stále zobrazeno jako první? + Můžete označit danou složku dlouhým podržením a zvolit tlačítko s obrázkem připínáčku, to ji připne na vrch. Můžete připnout i více složek, budou seřazeny podle zvoleného řazení. + Jak mohu video posunout vpřed? + Můžete toho dosáhnout buď tažením prstu vodorovně přes okno přehrávače nebo ťuknutím na text aktuální či celkové délky videa, které najdete po bocích indikátoru aktuální pozice. To posune video buď zpět nebo vpřed. Jaký je rozdíl mezi Skrytím a Vyloučením složky? - Zatímco vyloučení předejde zobrazení složky pouze vrámci Jednoduché Galerie, skrytí ho ukryje vrámci celého systému, tedy to ovlivní i ostatní galerie. Skrytí funguje pomocí vytvoření prázdného \".nomedia\" souboru v daném adresáři, který můžete vymazat i nějakým správcem souborů. + Zatímco vyloučení zamezí zobrazení složky pouze vrámci Jednoduché Galerie, skrytí ji ukryje vrámci celého systému, tedy to ovlivní i ostatní galerie. Skrytí funguje pomocí vytvoření prázdného souboru \".nomedia\" v daném adresáři, který můžete vymazat i libovolným správcem souborů. Proč se mi zobrazují složky s obaly hudebních alb, nebo nálepkami? - Může se stát, že se vám zobrazí také neobvyklé složky. Můžete je ale jednoduše skrýt pomocí jejich zvolení dlouhým podržením a zvolením Vyloučit. Pokud na následujícím dialogu zvolíte vyloučení rodičovské složky, pravděpodobně budou vyloučeny i ostatní podobné složky. - Složka s fotkami se mi nezobrazuje, co můžu udělat? - Může to mít několik důvodů, řešení je ale jednoduché. Jděte do Nastavení -> Spravovat přidané složky, zvolte Plus a zvolte požadovanou složku. + Může se stát, že se vám zobrazí také neobvyklé složky. Můžete je ale jednoduše skrýt jejich vybráním pomocí dlouhého podržení a zvolením Vyloučit. Pokud na následujícím dialogu zvolíte vyloučení nadřazené složky, pravděpodobně budou vyloučeny i ostatní podobné složky. + Složka s fotografiemi se mi nezobrazuje nebo ve složce nevidím všechny soubory. Co s tím? + Může to mít více důvodů, řešení je ale jednoduché. Jděte do Nastavení -> Spravovat přidané složky, zvolte Plus a zvolte požadovanou složku. Co v případě, že chci mít zobrazeno pouze několik složek? Přidání složky mezi Přidané složky automaticky nevyloučí ostatní. Můžete ale jít do Nastavení -> Spravovat vyloučené složky a zvolit Kořenovou složku \"/\", následně přidat požadované složky v Nastavení -> Spravovat přidané složky. To způsobí, že budou zobrazeny pouze vyžádané složky, protože vyloučení i přidání fungují rekurzivně a pokud je složka vyloučena i přidaná, bude viditelná. - Můžu s touto aplikací oříznout obrázky? - Ano, oříznutí je možné v editoru potažením rohů obrázků. Do editoru se můžete dostat buď dlouhým podržením náhledu obrázku a zvolením menu položky Upravit nebo zvolením Upravit při celoobrazovkovém režimu. - Můžu nějakým způsobem seskupit náhledy souborů? + Dá se s touto aplikací oříznout obrázek? + Ano, oříznutí je možné v editoru, potažením rohů obrázku. Do editoru se můžete dostat buď dlouhým podržením náhledu obrázku a zvolením menu položky Upravit nebo zvolením Upravit při celoobrazovkovém režimu. + Mohu nějakým způsobem seskupit náhledy souborů? Ano, použitím funkce \"Seskupit podle\" v menu obrazovky s náhledy. Seskupení je možné na základě různých kritérií včetně data vytvoření. Pokud použijete funkci \"Zobrazit obsah všech složek\", můžete je seskupit také podle složek. - Řazení podle data vytvoření nefunguje správně, jak to můžu opravit? - Je to pravděpodobně způsobeno kopírováním souborů. Můžete to opravit označením jednotlivých náhledů souborů a zvolit \"Opravit datum vytvoření\". - Na obrázcích vidím nějaké barevné pásy. Jak můžu zlepšit kvalitu obrázků? + Řazení podle data vytvoření nefunguje správně, jak to mohu opravit? + Je to pravděpodobně způsobeno kopírováním souborů. Můžete to opravit označením jednotlivých náhledů souborů a zvolit \"Opravit datum vytvoření\". + Na obrázcích vidím nějaké barevné pásy. Jak mohu zlepšit kvalitu obrázků? Současné řešení funguje správně v drtivé většině případů, pokud ale chcete zobrazit obrázky v lepší kvalitě, můžete povolit možnost \"Zobrazit obrázky v nejlepší možné kvalitě\" v nastavení aplikace v sekcí \"Hluboko priblížitelné obrázky\". - Skryl jsem soubor/složku, jak to můžu odkrýt? - Můžete buď použít menu tlačítko \"Dočasně zobrazit skryté položky\" na hlavní obrazovce, nebo v nastavení aplikace zapnout možnost \"Zobrazit skryté položky\", tím se skryté položky zobrazí. Pokud je chcete odkrýt, stačí je dlouho podržet a zvolit možnost \"Odkrýt\". Složky jsou skrývané přidáním souboru \".nomedia\", ten můžete vymazat i libovolným správcem souborů. - Why does the app take up so much space? - App cache can take up to 250MB, it ensures quicker image loading. If the app is taking up even more space, it is most likely caused by you having items in the Recycle Bin. Those files count to the app size. You can clear the Recycle bin by opening it and deleting all files, or from the app settings. Every file in the Bin is deleted automatically after 30 days. + Skryl jsem soubor/složku, jak jej mohu odkrýt? + Můžete buď použít menu tlačítko \"Dočasně zobrazit skryté položky\" na hlavní obrazovce, nebo v nastavení aplikace zapnout možnost \"Zobrazit skryté položky\", tím se skryté položky zobrazí. Pokud je chcete odkrýt trvale, stačí je dlouho podržet a zvolit možnost \"Odkrýt\". Složky jsou skrývané přidáním souboru \".nomedia\", ten můžete vymazat i libovolným správcem souborů. + Proč aplikace zabírá tolik místa? + Vyrovnávací paměť aplikace může zabírat až 250MB, zabezpečuje to rychlejší nahrávání obrázků. Pokud aplikace zabírá místa více, bude to pravděpodobně způsobeno soubory v odpadkovém koši. Dané soubory se započítávajé do velikosti aplikace. Koš můžete vyprázdnit buď jeho otevřením a smazáním všech souborů, nebo z nastavení aplikace. Položky v koši jsou automaticky mazány po 30 dnech. - Simple Gallery Pro: Photo Manager & Editor + Jednoduchá Galerie Pro: Organizér a editor fotografií - Offline gallery without ads. Organize, edit, recover and protect photos & videos + Offline galerie bez reklam. Organizujte, upravujte a chraňte své fotografie a videa - 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. + Jednoduchá Galerie Pro je vysoce přizpůsobitelná offline galerie. Organizujte a upravujte své fotografie, obnovujte smazané fotografie s funkcí odpadkového koše, chraňte je a skrývejte. Prohlížejte množství různých foto a video formátů včetně RAW, SVG a mnoho dalších. - The app contains no ads and unnecessary permissions. As the app doesn’t require internet access either, your privacy is protected. + Aplikace neobsahuje žádné reklamy ani nepotřebná oprávnění. Tím, že ani nevyžaduje připojení k internetu je vaše soukromí maximálně chráněno. ------------------------------------------------- - SIMPLE GALLERY PRO – FEATURES + JEDNODUCHÁ GALERIE PRO – FUNKCE ------------------------------------------------- - • Offline gallery with no ads or popups - • Simple gallery photo editor – crop, rotate, resize, draw, filters & more - • No internet access needed, giving you more privacy and security - • No unnecessary permissions required - • Quickly search images, videos & files - • Open & view many different photo and video types (RAW, SVG, panoramic etc) - • A variety of intuitive gestures to easily edit & organize files - • Lots of ways to filter, group & sort files - • Customize the appearance of Simple Gallery Pro - • Available in 32 languages - • Mark files as favorites for quick access - • Protect your photos & videos with a pattern, pin or fingerprint - • Use pin, pattern & fingerprint to protect the app launch or specific functions too - • Recover deleted photos & videos from the recycle bin - • Toggle visibility of files to hide photos & videos - • Create a customizable slideshow of your files - • View detailed information of your files (resolution, EXIF values etc) - • Simple Gallery Pro is open source - … and much much more! + • Offline galerie bez reklam a vyskakujících oken + • Foto editor – ořezávejte, otáčejte, měňte velikost, kreslete, používejte filtry a více + • Nevyžaduje přístup k internetu - více soukromí a bezpečí + • Nepožaduje žádná nepotřebná oprávnění navíc + • Rychle prohledávejte obrázky a videa + • Otevírejte mnoho rozličných formátů fotografií a videí (RAW, SVG, GIF, panorama, atd) + • Množství intuitivních gest pro jednoduchou úpravu a organizaci souborů + • Mnoho různých způsobů filtrování, seskupování a řazení souborů + • Změňte si vzhled Jednoduché galerie pro + • Dostupná ve 32 jazycích + • Označte si oblíbené soubory pro rychlý přístup + • Chraňte své fotografie a videa pomocí pinu, vzoru nebo otiskem prstu + • Použijte pin, vzor a otisk prstu pro zabezpečení spuštění aplikace, nebo i některých funkcí + • Obnovte smazané fotografie a videa z odpadkového koše + • Přepněte viditelnost souborů pro skrytí obrázků a videí + • Vytvořte si ze svých souborů prezentaci + • Zobrazte si detailní informace o svých souborech (rozlišení, hodnoty EXIF, atd) + • Jednoduchá galerie Pro má otevřený zdrojový kód + … a mnoho dalších! - PHOTO GALLERY EDITOR - Simple Gallery Pro makes it easy to edit your pictures on the fly. Crop, flip, rotate and resize your pictures. If you’re feeling a little more creative you can add filters and draw on your pictures! + EDITOR OBRÁZKŮ + Jednoduchá Galerie Pro umožňuje snadnou úpravu obrázků. Ořezávejte, překlápějte, otáčejte či měňte jejich velikost. Pokud se cítíte kreativně, můžete také aplikovat filtry nebo do obrázku kreslit! - SUPPORT FOR MANY FILE TYPES - Unlike some other gallery viewers & photo organizers, Simple Gallery Pro supports a huge range of different file types including JPEG, PNG, MP4, MKV, RAW, SVG, Panoramic photos, Panoramic videos and many more. + PODPORA MNOHA TYPŮ SOUBORŮ + Na rozdíl od některých galerií podporuje Jednoduchá Galerie Pro velké množství různých druhů souborů včetně JPEG, PNG, MP4, MKV, RAW, SVG, panoramatických fotografií a videí. - HIGHLY CUSTOMIZABLE GALLERY MANAGER - From the UI to the function buttons on the bottom toolbar, Simple Gallery Pro is highly customizable and works the way you want it to. No other gallery manager has this kind of flexibility! Thanks to being open source, we’re also available in 32 languages! + Vysoce upravitelný správce galerie + Od vzhledu až po funkční tlačítka na spodní liště, Jednoduchá Galerie Pro je plně nastavitelná a bude fungovat přesně jak si budete přát. Žádná jiná galerie nenabízí takovou flexibilitu! A díky otevřenému kódu je naše aplikace dostupná ve 32 jazycích! - RECOVER DELETED PHOTOS & VIDEOS - Accidentally deleted a precious photo or video? Don’t worry! Simple Gallery Pro features a handy recycle bin where you can recover deleted photos & videos easily. + OBNOVTE SMAZANÉ FOTOGRAFIE A VIDEA + Smazali jste nechtěně důležitou fotografii nebo video? Žádný strach! Jednoduchá Galerie Pro pro podobné případy nabízí funkci odpadkového koše, odkud smazané fotografie a videa snadno obnovíte. - PROTECT & HIDE PHOTOS, VIDEOS & FILES - Using pin, pattern or your device’s fingerprint scanner you can protect and hide photos, videos & entire albums. You can protect the app itself or place locks on specific functions of the app. For example, you can’t delete a file without a fingerprint scan, helping to protect your files from accidental deletion. + CHRAŇTE A SKRÝVEJTE SVÉ FOTOGRAFIE A VIDEA + Použitím pinu, vzoru nebo otisku prstu snadno své fotografie, videa či celá alba ochráníte nebo skryjete. Můžete ochránit i spuštění samotné aplikace, nebo některé její funkce. Například můžete zabránit náhodnému smazání souboru bez potvrzení otiskem prstu. - Check out the full suite of Simple Tools here: + Prohlédněte si celou sadu Jednoduchých aplikací na: https://www.simplemobiletools.com Facebook: diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index d3aac5110..e7a520503 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -17,7 +17,7 @@ Ukendt placering Flere kolonner Færre kolonner - Skift cover billede + Skift cover-billede Vælg billede Brug standard Lydstyrke @@ -28,24 +28,24 @@ Tving portræt Tving landskab Brug standard orientering - Fiks Dato Taget værdi + Fiks eksponeringsdato Fikser… Datoer fikset med succes Del en skaleret version - Hey,\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 appen\'s indstillinger.\n\nDu vil blot få papirkurvens elementer slettet, favoritter vil blive umarkeret og du vil også skulle genopsætte dine app indstillinger.\n\nTak! + 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! - Filtrér medier + Filtrer medier Billeder Videoer GIF\'er - RAW billeder + RAW-billeder SVG\'er Der blev ikke fundet nogen filer med det valgte filter. Skift filter - Denne funktion skjuler mappen og dens eventueller undermapper ved at oprette en \'.nomedia\'-fil i den. Du kan se dem ved at klikke på \'Vis skjulte\' i indstillingerne. Fortsæt? + Denne funktion skjuler mappen og dens eventuelle undermapper ved at oprette en \".nomedia\"-fil i den. Du kan se dem ved at klikke på \"Vis skjulte\" i indstillingerne. Fortsæt? Ekskluder Ekskluderede mapper Administrer ekskluderede mapper @@ -63,10 +63,11 @@ Administrer inkluderede mapper Tilføj mappe Hvis du har mapper med mediefiler som appen ikke har fundet, kan du manuelt tilføje dem her.\n\nDet vil ikke ekskludere andre mapper. + Ingen mediefiler er fundet. Dette kan løses ved manuelt at tilføje mapper som indeholder mediefiler. - Skalér - Skalér valgte elementer og gem + Skaler + Skaler valgte elementer og gem Bredde Højde Bevar billedforhold @@ -75,7 +76,7 @@ Editor Gem - Rotér + Roter Sti Ugyldig sti til billede Redigering af billede mislykkedes @@ -83,9 +84,9 @@ Der blev ikke fundet en editor til billedbehandling Ukendt filplacering Kunne ikke overskrive kildefilen - Rotér mod venstre - Rotér mod højre - Rotér 180º + Roter mod venstre + Roter mod højre + Roter 180º Spejlvend Spejlvend vandret Spejlvend lodret @@ -117,7 +118,7 @@ Endeløs kørsel Slideshowet endte Der blev ikke funket nogen mediefiler til slideshowet - Use crossfade animations + Anvend crossfade-animationer Skift visning @@ -130,9 +131,9 @@ Gruppér ikke filer Mappe Sidst ændret - Dato taget + Eksponeringsdato Filtype - Filudvidelse + Filendelse Vær opmærksom på at gruppering og sortering er to individuelle felter @@ -144,11 +145,11 @@ Husk sidste position ved videoafspilning Skift filnavnets synlighed Kør videoer i sløjfe - Animér GIF\'er i miniaturer + Animer GIF\'er i miniaturer Maksimal lysstyrke ved fuldskærmsvisning af medier Beskær miniaturer til kvadrater Vis varighed på video - Rotér fuldskærmsmedier efter + Roter fuldskærmsmedier efter Systemindstilling Enhedens orientering Billedformat @@ -173,9 +174,9 @@ Luk fuldskærmsvisning ved at swipe ned Tillad 1:1 zooming med to dobbelttryk Åbn altid videoer på en separat skærm med nye vandrette bevægelser - Vis en notch hvis tilgængelig - Tillad roterende billeder med bevægelser - Filindlæsnings prioritet + Vis \"notch\" hvis tilgængelig + Tillad rotering af billeder med bevægelser + Prioritering af filindlæsning Hastighed Kompromis Undgå at vise ugyldige filer @@ -192,87 +193,87 @@ Synlighed - Hvordan kan jeg lave Simple Gallery til standard-galleriet på min enhed? - Først skal du finde det nuværende standard galleri, i Apps sektionen af din enheds indstillinger. Kig efter en knap som hedder noget i stil med \"Åbn som standard\", klik på denne og vælg \"Ryd standarder\". - Næste gang du forsøger at åbne et billede eller en video, bør du se en app-vælger, hvor du kan vælge Simple Gallery og gøre den til standard app\'en. - Jeg har låst app\'en med en adgangskode, men jeg har glemt den. Hvad kan jeg gøre? - Du kan løse dette på to måder. Du kan enten geninstallere app\'en, eller finde app\'en i indstillingerne på din enhed og vælge \"Ryd data\". Dette vil nulstille alle dine indstillinger, det vil ikke slette nogle mediefiler. + Hvordan kan jeg gøre Simple Gallery til min enheds standardgalleri? + Først skal du finde det nuværende standardgalleri, i Apps-sektionen af din enheds indstillinger. Kig efter en knap som hedder noget i stil med \"Åbn som standard\", klik på denne og vælg \"Ryd standarder\". + Næste gang du forsøger at åbne et billede eller en video, bør du se en app-vælger, hvor du kan vælge Simple Gallery og gøre den til standardapp. + Jeg har låst appen med en adgangskode, men jeg har glemt den. Hvad kan jeg gøre? + Du har to muligheder. Du kan enten geninstallere appen, eller finde den i indstillingerne på din enhed og vælge \"Ryd data\". Dette vil nulstille alle dine indstillinger, det vil ikke slette nogen mediefiler. Hvordan kan jeg altid få et bestemt album vist i toppen? - Du kan holde fingeren nede på det ønskede album, og vælge tegnstift-ikonet i menuen, dette vil fastgøre den til toppen. Du kan fastgøre flere mapper også. Fastgjorte elementer vil blive sorteret efter standard sorterings-metoden. + Du kan holde fingeren nede på det ønskede album, og vælge tegnestift-ikonet i menuen, dette vil fastgøre den til toppen. Du kan fastgøre flere mapper også. Fastgjorte elementer vil blive sorteret efter standard sorterings-metoden. Hvordan kan jeg spole fremad i videoer? - Du kan enten trække din finger horisontalt over videoafspilleren, eller klikke på den nuværende eller maksimum varighed teksterne, nær søgefeltet. Det vil enten spole videoen tilbage eller fremad. + Du kan enten trække din finger vandret over videoafspilleren, eller klikke på den nuværende eller maksimum varighedsteksterne, nær søgefeltet. Det vil enten spole videoen tilbage eller fremad. Hvad er forskellen på at skjule og ekskludere en mappe? - Eksludering forhindrer visning af mappen i blot Simple Gallery, mens Skjul viser systemvist og skjuler mappen fra andre gallerier også. Det fungerer ved at oprette entom \".nomedia\" fil i den givne mappe, hvilket du også kan slette med enhver filhåndterings-app. - Hvorfor dukker mapper med musik omslag eller klistermærker op? + Eksludering forhindrer kun visning af mappen i Simple Gallery, mens Skjul virker på systemniveau og skjuler mappen fra andre gallerier også. Det fungerer ved at oprette en tom \".nomedia\"-fil i den givne mappe, som du kan slette med enhver filhåndterings-app. + Hvorfor dukker mapper med musikomslag eller klistermærker op? Det kan ske at du vil se nogle udsædvanlige albummmer. Du kan nemt ekskludere disse, ved at holde fingeren nede på disse og vælge Ekskluder. I den næste dialogboks kan du vælge den ovenliggende mappe, da andre relaterede albummer så sandsynligvis også vil blive forhindret i at blive vist. En mappe med billeder dukker ikke op, eller den viser ikke alle elementer. Hvad kan jeg gøre? - Der kan være flere grunde, men en løsning er nem. Bare gå til Indstillinger -> Administrer inkluderede mapper, vælg plusset og naviger til mappen. + Der kan være flere grunde, men en løsning er nem. Gå til Indstillinger -> Administrer inkluderede mapper, vælg plusset og naviger til mappen. Hvad hvis jeg kun ønsker få et par bestemte mapper vist? At tilføje en mappe ved de Inkluderede mapper, ekskluderer ikke automatisk alt. Det du kan gøre, er at gå til Indstillinger -> Adminsterer ekskluderede mapper, eksludere rodmappen \"/\", og så tilføje de ønskede mapper under Indstillinger -> Administrer inkluderede mapper. - Det vil gøre kun de valgte mapper synlige, da både ekskludering og inkludering er reskursivt, og hvis en mappe både er ekskluderet og inkluderet, vil den blive vist. + Det vil kun gøre de valgte mapper synlige, da både ekskludering og inkludering virker reskursivt, og hvis en mappe både er ekskluderet og inkluderet, vil den blive vist. Kan jeg beskære billeder med denne app? Ja, du kan beskære billeder i editoren, ved at trække i billedets kanter. Du kan gå til editoren, ved enten at holde fingeren nede på et miniaturebillede og vælge Rediger, eller vælge Rediger fra fuldskærmsvisningen. Kan jeg på en eller anden måde gruppere miniaturebilleder til mediefiler? - Sagtens, bare brug menupunktet \"Gruppér efter\", mens du ser miniaturebillederne. Du kan gruppere flere efter flere kriterier, inklusiv Dato Taget. Hvis du bruger funktionen \"Vis indholdet af alle mapper\", kan du også gruppere dem efter mapper. - Sortering efter Dato Taget ser ikke ud til at fungere. Hvordan kan jeg fikse dette? - Det skyldes højst sandsynligt at filerne er kopieret fra et andet sted. Du kan fikse det, ved at vælge filens miniature, og vælge \"Fiks Dato Taget værdi\". - Jeg ser noget color banding på billederne. Hvordan kan jeg forbedre kvaliteten? - Den nuværende løsning til visning af billeder virker fint i langt de fleste tilfælde, men hvis du vil have en endnu bedre billedkvalitet, kan du aktivere \"Vis billeder i den højst mulige kvalitet\" i app\'ens indstillinger, i sektionen \"Dybt zoombare billeder\". + Sagtens, brug menupunktet \"Gruppér efter\", mens du ser miniaturebillederne. Du kan gruppere flere efter flere kriterier, inklusiv eksponeringsdato. Hvis du bruger funktionen \"Vis indholdet af alle mapper\", kan du også gruppere dem efter mapper. + Sortering efter eksponeringsdato ser ikke ud til at fungere. Hvordan kan jeg fikse det? + Det skyldes højst sandsynligt at filerne er kopieret fra et andet sted. Du kan fikse det ved at vælge filens miniature, og vælge \"Fiks eksponeringsdato\". + Jeg ser noget \"color banding\" på billederne. Hvordan kan jeg forbedre kvaliteten? + Den nuværende løsning til visning af billeder virker fint i langt de fleste tilfælde, men hvis du vil have en endnu bedre billedkvalitet, kan du aktivere \"Vis billeder i den højst mulige kvalitet\" i appens indstillinger, i sektionen \"Dybt zoombare billeder\". Jeg har en skjult fil/mappe. Hvordan kan jeg få den vist igen? - Du kan enten trykke på menupunktet \"Vis midlertidigt skjulte\" på hovedskærmen, eller aktivere \"Vis skjulte elementer\" i app\'ens indstillinger for at se det skjulte element. Hvis du vil fjerne skjulningen, skal du blot holde fingeren nede og vælge \"Fjern skjulning\". Mapper er skjult ved at tilføje en skjult \".nomedia\" fil i dem, du kan også slette med enhver filhåndterings-app. - Why does the app take up so much space? - App cache can take up to 250MB, it ensures quicker image loading. If the app is taking up even more space, it is most likely caused by you having items in the Recycle Bin. Those files count to the app size. You can clear the Recycle bin by opening it and deleting all files, or from the app settings. Every file in the Bin is deleted automatically after 30 days. + Du kan enten trykke på menupunktet \"Vis midlertidigt skjulte\" på hovedskærmen, eller aktivere \"Vis skjulte elementer\" i appens indstillinger for at se det skjulte element. Hvis du vil fjerne skjulningen, skal du blot holde fingeren nede og vælge \"Fjern skjulning\". Mapper er skjult ved at tilføje en skjult \".nomedia\"-fil i dem, som du også kan slette med enhver filhåndterings-app. + Hvorfor fylder appen så meget? + App-mellemlageret kan bruge op til 250MB, det sikrer hurtigere indlæsning. Fylder appen endnu mere kan det skyldes at der ligger meget papirkurven. Filer heri tæller med til appens størrelse. Du kan tømme papirkurven ved at åbne den og slette indholdet, eller fra appens indstillinger. Alle filer i papirkurven slettes automatisk efter 30 dage. - Simple Gallery Pro: Photo Manager & Editor + Simple Gallery Pro: Billedhåndtering - Offline gallery without ads. Organize, edit, recover and protect photos & videos + Offline galleri uden reklamer. Organiser, rediger og gendan mm. fotos og videoer - 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. + Simple Gallery Pro er et offline-galleri med mange tilpasningsmuligheder. Organiser og rediger dine billeder, gendan slettede filer via papirkurven, beskyt og skjul filer og se adskillige forskellige billed- og videoformater inklusiv RAW, SVG og mange flere. - The app contains no ads and unnecessary permissions. As the app doesn’t require internet access either, your privacy is protected. + Appen indeholder ingen reklamer og kræver ingen unødvendige tilladelser. Da den heller ikke kræver adgang til internettet, er dit privatliv også beskyttet. ------------------------------------------------- - SIMPLE GALLERY PRO – FEATURES + SIMPLE GALLERY PRO – FUNKTIONER ------------------------------------------------- - • Offline gallery with no ads or popups - • Simple gallery photo editor – crop, rotate, resize, draw, filters & more - • No internet access needed, giving you more privacy and security - • No unnecessary permissions required - • Quickly search images, videos & files - • Open & view many different photo and video types (RAW, SVG, panoramic etc) - • A variety of intuitive gestures to easily edit & organize files - • Lots of ways to filter, group & sort files - • Customize the appearance of Simple Gallery Pro - • Available in 32 languages - • Mark files as favorites for quick access - • Protect your photos & videos with a pattern, pin or fingerprint - • Use pin, pattern & fingerprint to protect the app launch or specific functions too - • Recover deleted photos & videos from the recycle bin - • Toggle visibility of files to hide photos & videos - • Create a customizable slideshow of your files - • View detailed information of your files (resolution, EXIF values etc) - • Simple Gallery Pro is open source - … and much much more! + • Offline galleri uden reklamer eller pop op\'er + • Simple gallerys billedbehandler – beskær, roter, tilpas størrelse, tegn, filtrer mm. + • Inget krav om internetadgang - en stor fordel for dit privatliv og din sikkerhed + • Ingen krav om unødvendige tilladelser + • Hurtig søgning efter billeder, videoer & filer + • Åbn & se mange forskellige foto- og videoformater (RAW, SVG, panoramic osv.) + • En række intuitive bevægelser til nem redigering og organisering af filer + • Mange muligheder for filtrering, gruppering og sortering af filer + • Tilpas udseendet af Simple Gallery Pro + • Tilgængelig på 32 sprog + • Marker filer som favoriter for hurtig adgang + • Beskyt dine billeder & videoer med et mønster, pinkode eller fingeraftryk + • Brug mønster, pinkode eller fingeraftryk til beskyttelse af åbning af appen eller specifikke funktioner + • Gendan slettede billeder & videoer via papirkurven + • Skift mellem vis/skjul filer for at skjule billeder & videoer + • Opret et redigerbart slideshow med dine filer + • Se detaljeret information om dine filer (opløsning, EXIF-værdier osv.) + • Simple Gallery Pro er open source + … og meget mere! - PHOTO GALLERY EDITOR - Simple Gallery Pro makes it easy to edit your pictures on the fly. Crop, flip, rotate and resize your pictures. If you’re feeling a little more creative you can add filters and draw on your pictures! + FOTOGALLERI - EDITOR + Simple Gallery Pro gør det nemt at redigere dine billeder i en fart. Beskær, flip, roter og tilpas størrelsen på dine billeder. Føler du dig lidt mere kreativ, kan du tilføje filtre og tegne oveni dine billeder! - SUPPORT FOR MANY FILE TYPES - Unlike some other gallery viewers & photo organizers, Simple Gallery Pro supports a huge range of different file types including JPEG, PNG, MP4, MKV, RAW, SVG, Panoramic photos, Panoramic videos and many more. + UNDERSTØTTELSE AF MANGE FILTYPER + I modsætning til mange andre gallerier supporterer Simple Gallery Pro en masse forskellige filtyper inklusiv JPEG, PNG, MP4, MKV, RAW, SVG, Panoramic-foto, Panoramic-videoer og mange flere. - HIGHLY CUSTOMIZABLE GALLERY MANAGER - From the UI to the function buttons on the bottom toolbar, Simple Gallery Pro is highly customizable and works the way you want it to. No other gallery manager has this kind of flexibility! Thanks to being open source, we’re also available in 32 languages! + GALLERI MED MASSER AF TILPASNINGSMULIGHEDER + Simple Gallery Pro kan tilpasses lige fra brugerfladen til funktionsknapper på nederste værktøjslinje og fungere lige efter dit ønske. Inget andet galleri er så fleksibelt! Takket være at det er open sourse, er det også tilgængeligt på 32 sprog! - RECOVER DELETED PHOTOS & VIDEOS - Accidentally deleted a precious photo or video? Don’t worry! Simple Gallery Pro features a handy recycle bin where you can recover deleted photos & videos easily. + GENDAN SLETTEDE BILLEDER & VIDEOER + Er du ved en fejl kommet til at slette et billede eller en video? Intet problem! Simple Gallery Pro har en handy papirkurv hvorfra du nemt kan gendanne slettede billeder & videoer. - PROTECT & HIDE PHOTOS, VIDEOS & FILES - Using pin, pattern or your device’s fingerprint scanner you can protect and hide photos, videos & entire albums. You can protect the app itself or place locks on specific functions of the app. For example, you can’t delete a file without a fingerprint scan, helping to protect your files from accidental deletion. + BESKYT & SKJUL FOTOS, VIDEOER & FILER + Du kan beskytte og skjule billeder, videoer og hele album med en pinkode, et mønster eller din enheds fingeraftryksscanner. Du kan også beskytte selve appen eller låse specifikke funktioner i appen. Du kan for eksempel låse sletning af en fil uden scanning af fingeraftryk og dermed beskytte filer mod at blive slettet ved en fejl. - Check out the full suite of Simple Tools here: + Se hele suiten af Simple Tools her: https://www.simplemobiletools.com Facebook: diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 79ec823fa..28d8069c7 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -32,7 +32,7 @@ Korrigiere… Datum erfolgreich korrigiert. Teile eine verkleinerte Version - 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! + Hey,\n\nes sieht so aus, als hättest du von der alten kostenlosen App geupgraded. Du kannst nun die alte Version deinstallieren, die oben in den App-Einstellungen einen \'Upgrade auf Pro\' Button hat.\n\nEs wird nur der Papierkorb gelöscht, die Markierungen von Favoriten entfernt und die App-Einstellungen zurückgesetzt.\n\nDanke! Filter @@ -63,6 +63,7 @@ Einbezogene Ordner verwalten Ordner hinzufügen Solltest du weitere Mediendateien haben, die von der App nicht gefunden wurden, kannst du deren Ordner hier manuell hinzufügen. + No media files have been found. You can solve it by adding the folders containing media files manually. Größe ändern @@ -219,12 +220,12 @@ Die jetzige Methode für die Anzeige von Bildern funktioniert gut, aber für eine noch bessere Bildqualität kann die Einstellung \"Zeige Bilder in der höchstmöglichen Qualität\" im Menü unter \"Stark vergrösserbare Bilder\" gesetzt werden. Ich habe eine versteckte Datei bzw. einen versteckten Ordner. Wie kann ich diese/n sichtbar stellen? Du kannst entweder auf \"Verstecktes temporär anzeigen\" im Hauptmenü drücken oder die Einstellung \"Versteckte Elemente anzeigen\" setzen. Wenn du es sichtbar einstellen willst, drücke lange darauf und wähle \"Nicht verstecken\" aus. Ordner werden durch eine versteckte, in ihnen gespeicherte \".nomedia\"-Datei versteckt und das Löschen der Datei ist mit jedem Dateimanger möglich. - Why does the app take up so much space? - App cache can take up to 250MB, it ensures quicker image loading. If the app is taking up even more space, it is most likely caused by you having items in the Recycle Bin. Those files count to the app size. You can clear the Recycle bin by opening it and deleting all files, or from the app settings. Every file in the Bin is deleted automatically after 30 days. + Warum beansprucht die App so viel Speicherplatz? + Der Cache der App kann bis zu 250 MB groß werden und sorgt dafür, dass die Bilder schneller geladen werden. Wenn die App noch mehr Speicherplatz beansprucht, liegt das wahrscheinlich daran, dass der Papierkorb zu voll ist. Diese Dateien zählen zum Speicherplatz der App dazu. Du kannst den Papierkorb leeren, indem du ihn öffnest und alle Dateien darin löschst, oder den entsprechenden Button in den Einstellungen betätigst. All 30 Tage wird der Papierkorb automatisch geleert. - Simple Gallery Pro: Photo Manager & Editor + Schlichte Galerie Pro: Foto Manager & Editor Galerie ohne Werbung. Ordnen, Bearbeiten und Wiederherstellen von Fotos & Videos @@ -256,10 +257,10 @@ • Schlichte Galerie Pro ist Open Source … und viele, viele mehr! - FOTO EDITOR + FOTOEDITOR Schlichte Galerie Pro macht es schnell und einfach deine Bilder zu bearbeiten. Schneide Bilder zu, drehe sie und ändere die Größe. Wenn du dich etwas kreativer fühlst, kannst du Filter hinzufügen und auf deinen Bildern malen! - UNTERSTÜTZUNG FÜR VIELE DATEITYPEEN + UNTERSTÜTZUNG FÜR VIELE DATEITYPEN Im Gegensatz zu einigen anderen Galerien unterstütz Schlichte Galerie Pro eine Vielzahl verschiedener Dateitypen. Unter anderem JPEG, PNG, MP4, MKV, RAW, SVG, Panoramabilder, Panoramavideos und viele mehr. STARK INDIVIDUALISIERBARE GALERIE @@ -268,7 +269,7 @@ WIEDERHERSTELLUNG GELÖSCHTER FOTOS & VIDEOS Versehentlich ein wertvolles Foto oder Video gelöscht? Keine Sorge! Schlichte Galerie Pro verfügt über einen praktischen Papierkorb, aus dem du gelöschte Bilder & Videos leicht wiederherstellen kannst. - SCHÜTZE & VERSTECKE FOTOS, VIDEOS & DATEIEN + SCHÜTZE UND VERSTECKE FOTOS, VIDEOS & DATEIEN Mit einem PIN, Muster oder dem Fingerabdrucksensor deines Gerätes kannst du Fotos, Videos und komplette Alben verstecken und schützen. Du kannst auch die App selber schützen oder bestimmte Funktionen der App sperren. Beispielsweise kannst du eine Datei nicht ohne Scan des Fingerabdrucks löschen, um deine Dateien vor versehentlichem Löschen zu schützen. Schau dir die vollständige Serie der Schlichten Apps hier an: diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index eb6a51e51..78a1557f2 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -63,6 +63,7 @@ Διαχείριση φακέλων που συμπεριλαμβάνονται Προσθήκη φακέλου Αν υπάρχουν κάποιοι φάκελοι που περιέχουν πολυμέσα, αλλά δεν αναγνωρίζονται από την εφαρμογή, μπορείτε να τους προσθέσετε χειροκίνητα εδώ.\n\nΗ προσθήκη στοιχείων εδώ, δεν θα εξαιρέσει κάποιον άλλο φάκελο. + Δεν βρέθηκαν αρχεία πολυμέσων. Μπορεί να λυθεί αυτό, προσθέτοντας τους φακέλους που περιέχουν αρχεία πολυμέσων με μη αυτόματο τρόπο. Αλλαγή μεγέθους diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 194364f59..4b129b459 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -63,6 +63,7 @@ Gestionar carpetas incluidas Agregar carpeta Si tiene algunas carpetas que contengan multimedia, pero que no fueron reconocidas por la aplicación, puede agregarlas manualmente aquí. + No media files have been found. You can solve it by adding the folders containing media files manually. Redimensionar diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 23963cfbd..6cad3b39d 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -63,6 +63,7 @@ Hallitse sisällettyjä kansioita Lisää kansio Jos sinulla on kansioita, jotka sisältää mediaa, mutta sovellus ei tunnistanut, voit lisätä ne manuaalisesti tähän.\n\Lisääminen ei poissulje muita kansioita. + No media files have been found. You can solve it by adding the folders containing media files manually. Rajaa @@ -198,7 +199,7 @@ 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. + You can long press the desired album and select the Pin icon at the actions menu, 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 either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward. What is the difference between hiding and excluding a folder? diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index de4a03228..7d1726867 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -63,6 +63,7 @@ Gérer les dossiers ajoutés Ajouter un dossier Si vous avez des dossiers contenant des médias qui ne sont pas affichés dans l\'application, vous pouvez les ajouter manuellement ici.\n\nCet ajout n\'exclura aucun autre dossier. + No media files have been found. You can solve it by adding the folders containing media files manually. Redimensionner diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 2055bd6ef..3bfd5b4f8 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -63,6 +63,7 @@ Xestionar cartafoles incluídos Engadir cartafol Si ten algún cartafol con medios, mais non foi recoñecido polo aplicativo, pódeo engadir manualmente.\n\nEngadindo aquí elementos non eliminará outros. + No media files have been found. You can solve it by adding the folders containing media files manually. Redimensionar diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 081714f73..999514a54 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -63,6 +63,7 @@ Upravljajte uključenim mapama Dodaj mapu Ako imate neke mape koje sadrže medije, ali ih aplikacija nije prepoznala, ručno ih možete dodati ovdje.\n\nDodavanjem nekih stavki ovdje nećete izuzeti bilo koju drugu mapu. + No media files have been found. You can solve it by adding the folders containing media files manually. Promjeni veličinu diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 758ad3f82..c446a3179 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -63,6 +63,7 @@ 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. + No media files have been found. You can solve it by adding the folders containing media files manually. Átméretezés @@ -221,14 +222,14 @@ Ezzel csak a kiválasztott mappák láthatók, mivel a kizárás és a befoglal 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. - Why does the app take up so much space? - App cache can take up to 250MB, it ensures quicker image loading. If the app is taking up even more space, it is most likely caused by you having items in the Recycle Bin. Those files count to the app size. You can clear the Recycle bin by opening it and deleting all files, or from the app settings. Every file in the Bin is deleted automatically after 30 days. + 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 - Offline gallery without ads. Organize, edit, recover and protect photos & videos + Offline galéria hirdetések nélkül. A fényképek és videók rendezése, szerkesztése 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. @@ -273,7 +274,7 @@ Ezzel csak a kiválasztott mappák láthatók, mivel a kizárás és a befoglal PROTECT & HIDE PHOTOS, VIDEOS & FILES Using pin, pattern or your device’s fingerprint scanner you can protect and hide photos, videos & entire albums. You can protect the app itself or place locks on specific functions of the app. For example, you can’t delete a file without a fingerprint scan, helping to protect your files from accidental deletion. - Check out the full suite of Simple Tools here: + Nézze meg a Simple Tools csomagot itt: https://www.simplemobiletools.com Facebook: diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index 2343f3803..761dd357f 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -63,6 +63,7 @@ Atur folder yang disertakan Tambah folder Jika ada folder yang berisi file media, namun tidak dikenali oleh aplikasi ini, Anda bisa menambahkannya disini secara manual.\n\nMenambah beberapa item disini tidak akan mengecualikan folder yang lain. + No media files have been found. You can solve it by adding the folders containing media files manually. Ubah ukuran diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 5728aed02..44e5ad685 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -63,6 +63,7 @@ Gestisci le cartelle incluse Aggiungi cartella Se si hanno alcune cartelle che contengono media, ma non sono state riconosciute dall\'app, si possono aggiungerle manualmente qui. + No media files have been found. You can solve it by adding the folders containing media files manually. Ridimensiona diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 7d097aa4d..a121af0f0 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -63,6 +63,7 @@ 追加フォルダの管理 フォルダを追加 メディア入りのフォルダがアプリで認識されない場合は手動で追加します。 + No media files have been found. You can solve it by adding the folders containing media files manually. リサイズ @@ -198,7 +199,7 @@ 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. + You can long press the desired album and select the Pin icon at the actions menu, that will pin it to the top. You can pin multiple folders too, pinned items will be sorted by the default sorting method. 動画を早送りするにはどうすればよいですか? You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward. What is the difference between hiding and excluding a folder? diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index ebd6cbbaa..72e47130f 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -63,6 +63,7 @@ 포함된 폴더 관리 폴더 추가 미디어가 포함되어 있지만 앱에서 인식하지 못하는 폴더가있는 경우 여기에서 수동으로 추가 할 수 있습니다. \n\n여기에 항목을 추가해도 원본 폴더에서 제외되지 않습니다. + No media files have been found. You can solve it by adding the folders containing media files manually. 크기 변경 @@ -198,7 +199,7 @@ 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. + You can long press the desired album and select the Pin icon at the actions menu, 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 either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward. What is the difference between hiding and excluding a folder? diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 22444b047..4f4f52afc 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -63,6 +63,7 @@ Tvarkyti įtrauktus aplankus Įtraukti aplanką Jei turite tam tikrų aplankų, kuriuose yra medijos , bet kurių neneatpažįsta programėlė, galite juos pridėti rankiniu būdu. \ N \ nPridedant kai kuriuos elementus, neišskirsite jokio kito aplanko. + No media files have been found. You can solve it by adding the folders containing media files manually. Keisti dydį diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index d1cefd66c..77e72a092 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -63,6 +63,7 @@ Håndter inkluderte mapper Legg til mappe Hvis du har noen mapper som inneholder media, men ikke ble gjenkjent av appen, kan du legge dem til manuelt her.\n\nÅ legge til noen elementer her, ekskluderer ikke noen annen mappe. + No media files have been found. You can solve it by adding the folders containing media files manually. Endre størrelse @@ -198,7 +199,7 @@ 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. + You can long press the desired album and select the Pin icon at the actions menu, 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 either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward. What is the difference between hiding and excluding a folder? diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 29ff119f5..f4103f8e6 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -63,6 +63,7 @@ Toegevoegde mappen beheren Map toevoegen Als er mappen zijn die wel media bevatten, maar niet door de galerij worden herkend, voeg deze mappen dan hier handmatig toe.\n\nHet hier toevoegen van mappen zal andere mappen niet uitsluiten. + No media files have been found. You can solve it by adding the folders containing media files manually. Grootte aanpassen diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index b7edb9672..0a3b68361 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -63,6 +63,7 @@ Zarządzaj dołączonymi folderami Dodaj folder Jeśli masz jakieś foldery z multimediami, ale aplikacja ich nie wykryła, możesz je dodać ręcznie tutaj. + No media files have been found. You can solve it by adding the folders containing media files manually. Zmień rozmiar diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index f0ae07f71..609e6d77c 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -5,7 +5,7 @@ Editar Abrir câmera (oculto) - (excluded) + (excluído) Fixar pasta Desfixar pasta Fixar no topo @@ -24,15 +24,15 @@ Brilho Travar orientação Destravar orientação - Change orientation - Force portrait - Force landscape - Use default orientation + Mudar orientação + Forçar modo retrato + Forçar modo paisagem + Usar orientação padrão Fix Date Taken value Fixing… Dates fixed successfully Share a resized version - 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! + Hey,\n\nparece que você atualizou o antigo aplicativo gratuito. Agora você poderá desinstalar a velha versão que tem o botão \'Atualize para a versão Pro\' no topo das 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! Filtrar mídia @@ -63,6 +63,7 @@ Gerenciar pastas incluídas Adicionar pasta Se possuir pastas com dados multimídia não reconhecidos pelo aplicativo, aqui você pode adicioná-las manualmente. + No media files have been found. You can solve it by adding the folders containing media files manually. Redimensionar @@ -89,8 +90,8 @@ Inverter Horizontalmente Verticalmente - Free - Other + Gratuito + Outro Simple Wallpaper @@ -117,37 +118,37 @@ Apresentação em ciclo Fim da apresentação Nenhuma mídia encontrada para a apresentação - Use crossfade animations + Usar animações crossfade Alterar modo de visualização Grade Lista - Group direct subfolders + Agrupar subpastas do diretório - Group by - Do not group files - Folder - Last modified - Date taken - File type - Extension - Please note that grouping and sorting are 2 independent fields + Agrupar por + Não agrupar arquivos + Pasta + Última modificação + Data de criação + Tipo de arquivo + Extensão + Por favor, note que o agrupamento e classificação são 2 campos independentes - Folder shown on the widget: - Show folder name + Exibição da Pasta no widget: + Exibir nome da pasta Reproduzir vídeos automaticamente - Remember last video playback position + Lembrar da última posição de reprodução de vídeo Mostrar/ocultar nome do arquivo Reproduzir vídeos em ciclo Animação de GIFs nas miniaturas Brilho máximo ao visualizar mídia Recortar miniaturas em quadrados - Show video durations + Exibir durações de vídeo Critério para rotação de tela Padrão do sistema Sensor do aparelho @@ -163,22 +164,22 @@ Gerenciar detalhes extendidos Permitir zoom com um dedo quando em exibição de tela cheia Permitir alternância instantânia de mídia clicando nas laterais da tela - Allow deep zooming images + Permitir zoom aprofundado em imagens Ocultar detalhes extendidos quando a barra de status estiver oculta - 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 - Show the Recycle Bin as the last item on the main screen - Allow closing the fullscreen view with a down gesture - Allow 1:1 zooming in with two double taps - Always open videos on a separate screen with new horizontal gestures - Show a notch if available - Allow rotating images with gestures - File loading priority - Speed + Mostrar alguns botões de ação na parte inferior da tela + Mostar a Lixeira na tela de pastas + Imagens com zoom aprofundado + Mostrar imagens com a maior qualidade possível + Mostrar a Lixeira como o último item na tela principal + Permitir fechar a exibição em tela cheia com um gesto para baixo + Permitir zoom 1:1 com dois toques duplos + Sempre abrir vídeos em uma tela separada com novos gestos horizontais + Mostrar um encaixe, se disponível + Permitir rotação de imagens com gestos + Prioridade de carregamento de arquivos + Velocidade Compromise - Avoid showing invalid files + Evite exibit arquivos inválidos Miniaturas @@ -192,13 +193,13 @@ Toggle file visibilityv - How can I make Simple Gallery the default device gallery? + Como eu posso tornar o Simple Gallery como galeria padrão do meu aparelho? 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. + You can long press the desired album and select the Pin icon at the actions menu, 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 either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward. What is the difference between hiding and excluding a folder? diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 5c50d7981..63ae35e77 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -63,6 +63,7 @@ Gerir pastas incluídas Adicionar pasta Se possuir pastas com dados multimédia não reconhecidos pela aplicação, aqui pode adicioná-las manualmente. + No media files have been found. You can solve it by adding the folders containing media files manually. Redimensionar @@ -198,7 +199,7 @@ 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. + You can long press the desired album and select the Pin icon at the actions menu, 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 either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward. What is the difference between hiding and excluding a folder? diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 669075f5e..65c606242 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -63,6 +63,7 @@ Управление включёнными папками Добавить папку Если у вас есть папки, содержащие медиафайлы, но не распознанные приложением, вы можете добавить их вручную.\n\nДобавление папки не приводит к исключению каких-либо других. + No media files have been found. You can solve it by adding the folders containing media files manually. Изменить размер diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 7c6cc27c5..7439c6e43 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -63,6 +63,7 @@ Spravovať pridané priečinky Pridať priečinok Ak máte nejaké priečinky obsahujúce médiá, ale neboli rozpoznané aplikáciou, môžete ich tu manuálne pridať.\n\nPridanie nových položiek sem nevylúči žiadny iný priečinok. + Nenašli sa žiadne súbory s médiami. Viete to napraviť manuálnym pridaním priečinkov, ktoré obsahujú médiá. Zmeniť veľkosť diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 348993a72..ff68e020b 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -32,7 +32,7 @@ Popravljam… Datumi uspešno popravljeni Deli spremenjeno verzijo - 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! + Živjo,\n\nkot kaže, ste nadgradili staro brezplačno aplikacijo. Sedaj lahko odstranite staro verzijo, ki ima gumb \'Nadgradi na Pro verzijo\' na vrhu nastavitev.\n\nIzbrisani bodo le elementi v košu, priljubljeni elementi bodo odznačeni, poleg tega pa bo potrebno še ponastaviti nastavitve aplikacije.\n\nHvala! Filtriranje datotek @@ -63,6 +63,7 @@ Urejaj vključene mape Dodaj mapo Če imate mape, ki vsebujejo medijske datoteke, ki jih aplikacija ni prepoznala, jih lahko ročno dodate tukaj.\n\nDodajanje novih elementov ne bo izključilo drugih. + No media files have been found. You can solve it by adding the folders containing media files manually. Spremeni velikost @@ -220,18 +221,18 @@ Trenutna rešitev prikazovanja slik deluje dobro v veliki večini primerov, če pa vseeno želite višjo kvaliteto, lahko uporabite funkcijo \"Prikaži slike v najvišji možni kvaliteti\" v Nastavitvah v razdelku \"Globoko povečljive slike\". Skril sem mapo/datoteko. Kako jo lahko zopet prikažem? Lahko uporabite funkcijo \"Začasno prikaži skrite elemente\", ki se nahaja v meniju na glavnem zaslonu ali preklopite \"Prikaži skrite elemente\" v Nastavitvah aplikacije. Če želite element označiti kot viden, z dolgim pritiskom nanj prikličite meni in izberite \"Prikaži\". Skrivanje map deluje tako, da se kreira prazno \".nomedia\" datoteko v izbrani mapi, ki jo lahko odstranite tudi s katerimkoli urejevalnikom datotek. - Why does the app take up so much space? - App cache can take up to 250MB, it ensures quicker image loading. If the app is taking up even more space, it is most likely caused by you having items in the Recycle Bin. Those files count to the app size. You can clear the Recycle bin by opening it and deleting all files, or from the app settings. Every file in the Bin is deleted automatically after 30 days. + Zakaj aplikacija zaseda toliko prostora? + Predpomnilnik aplikacije lahko zasede do 250MB, zagotavlja pa hitrejše nalaganje fotografij. Če aplikacija zaseda še več prostora, je to najverjetneje zaradi velikega števila elementov v košu. Tudi te datoteke se vštevajo v velikost aplikacije. Ročno odstranite datoteke iz koša. Vsaka datoteka v košu je sicer avtomatično izbrisana po 30 dneh. - Simple Gallery Pro: Photo Manager & Editor + Simple Gallery Pro: Pregledovalnik fotografij - Offline gallery without ads. Organize, edit, recover and protect photos & videos + Fotogalerija brez reklam. Organizira, ureja in zaščiti slike & videoposnetke. - 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. + Simple Gallery Pro je visoko prilagodljiva lokalna galerija. Organizirajte & urejajte vaše fotografije, vrnite izbrisane datoteke iz koša, zaščitite & skrijte datoteke in pregledujte ogromno različnih vrst foto & video formatov, vključujoč RAW, SVG in mnoge druge. - The app contains no ads and unnecessary permissions. As the app doesn’t require internet access either, your privacy is protected. + Aplikacije ne vsebuje reklam in nepotrebnih dovoljenj. Prav tako aplikacija ne potrebuje internetnega dostopa, zato je vaša zasebnost zagotovljena. ------------------------------------------------- SIMPLE GALLERY PRO – FEATURES diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 254e28851..ef85933bf 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -63,6 +63,7 @@ Управљај укљученим фасциклама Додај фасциклу Ако имате неке фасцикле које садрже медију, али нису препознате од стране апликације, можете их додати ручно овде. \n\nДодавањем неких ставки овде нећете изузети неку другу фасциклу. + No media files have been found. You can solve it by adding the folders containing media files manually. Промена величине diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 82b1ab4b1..ba827da08 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -63,6 +63,7 @@ Hantera inkluderade mappar Lägg till mapp Om du har vissa mappar som innehåller media men som inte känns igen av appen, kan du lägga till dem manuellt här. + No media files have been found. You can solve it by adding the folders containing media files manually. Ändra storlek @@ -198,7 +199,7 @@ 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. + You can long press the desired album and select the Pin icon at the actions menu, 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 either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar, that will move the video either backward, or forward. What is the difference between hiding and excluding a folder? diff --git a/app/src/main/res/values-sw600dp/dimens.xml b/app/src/main/res/values-sw600dp/dimens.xml index 9703f1cb6..7ef1ff093 100644 --- a/app/src/main/res/values-sw600dp/dimens.xml +++ b/app/src/main/res/values-sw600dp/dimens.xml @@ -5,4 +5,5 @@ 30dp 38dp 70dp + 100dp diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index f5cf36ae0..06764a5e5 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -63,6 +63,7 @@ Dahil edilen klasörleri yönet Klasör ekle Medya içeren, ancak uygulama tarafından tanınmayan bazı klasörleriniz varsa, bunları elle ekleyebilirsiniz.\n\nBuraya bazı öğeler eklemek başka bir klasörü hariç tutmaz. + No media files have been found. You can solve it by adding the folders containing media files manually. Yeniden boyutlandır diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 8d485d0d0..b4b5e12a2 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -63,6 +63,7 @@ Керування включеними теками Додати теку Якщо у вас є теки з медіафайлами, але вони не були розпізнані додатком, ви можете додати їх тут вручну.\n\nДодавання елементів сюди не виключить будь-яку іншу теку. + No media files have been found. You can solve it by adding the folders containing media files manually. Змінити розмір @@ -220,12 +221,12 @@ Поточне рішення для показу зображень відмінно працює в переважній більшості випадків, але якщо вам потрібна ще краща якість зображень, ви можете увімкнути опцію \"Показувати зображення в найвищій можливій якості\" в розділі \"Глибокомасштабовані зображення\" налаштувань додатку. Я приховав файл / теку. Як я можу відмінити цю дію? Щоб побачити приховані елементи, ви можете або натиснути пункт меню \"Тимчасово показати приховані елементи\" на головному екрані, або перемкнути опцію \"Показати приховані елементи\" в налаштуваннях додатку. Якщо ви більше не хочете приховувати елемент, довго натисніть на нього і оберіть \"Не приховувати\". Теки приховуються шляхом створення прихованого файлу \".nomedia\" в них, тож ви також можете видалити цей файл будь-яким файловим менеджером. - Why does the app take up so much space? - App cache can take up to 250MB, it ensures quicker image loading. If the app is taking up even more space, it is most likely caused by you having items in the Recycle Bin. Those files count to the app size. You can clear the Recycle bin by opening it and deleting all files, or from the app settings. Every file in the Bin is deleted automatically after 30 days. + Чому додаток займає так багато місця? + Кеш додатку може займати до 500 МБ, він забезпечує швидше завантаження зображень. Якщо додаток займає ще більше місця, найбільш вірогідно, це спричинено видаленими елементами у Кошику. Вони враховуються у загальному розмірі додатку. Ви можете очистити Кошик, відкривши його та видаливши всі файли, або через налаштування додатку. Кожен файл у Кошику автоматично видаляється через 30 днів. - Simple Gallery Pro: Photo Manager & Editor + Simple Gallery Pro: фотоменеджер і редактор Офлайн-галерея без реклами. Впорядкуй, редагуй, віднови та захисти фото і відео. diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 661438648..cb14f652c 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -63,6 +63,7 @@ 管理包含目录 添加目录 如果您还有应用未扫描到的媒体文件,请添加所在目录路径。 + No media files have been found. You can solve it by adding the folders containing media files manually. 缩放 @@ -218,7 +219,7 @@ 目前显示图像的方案在绝大多数情况下都能正常工作,如果您想要更好的图像质量,您可以在设置中启用\"以最高质量显示图像\"。 我隐藏了某个文件/文件夹。如何取消隐藏? 您可以点击主界面上的\"暂时显示隐藏的项目\"选项,或在设置中开启\"显示隐藏的项目\"。 如果你想取消隐藏它,长按它并选择\"取消隐藏\"即可。 我们是通过向文件夹中添加\".nomedia\"文件来隐藏文件夹的,使用文件管理器删除该文件也可以取消隐藏。 - + 为什么应用占用了这么多的空间? 应用缓存最多可达250MB,这样可以使图像加载更快。如果应用占用了更多空间,则很可能是因为回收站中有项目。这些文件被计入应用程序大小。您可以打开回收站并删除所有文件,或从应用设置中清除回收站。回收站中的内容会在30天后自动删除。 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml new file mode 100644 index 000000000..ff936c7c9 --- /dev/null +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -0,0 +1,290 @@ + + + 簡易相簿 + 簡易相簿 + 編輯 + 開啟相機 + (隱藏) + (排除) + 釘選資料夾 + 取消釘選資料夾 + 釘選在頂端 + 資料夾內容全部顯示 + 全部資料夾 + 切換成資料夾檢視 + 其他資料夾 + 在地圖上顯示 + 未知的位置 + 增加欄數 + 減少欄數 + 更換封面圖片 + 選擇相片 + 使用預設 + 音量 + 亮度 + 鎖定方向 + 解除鎖定方向 + 改變方向 + 強制直向 + 強制橫向 + 使用預設方向 + 修復拍照日期數值 + 修復中… + 日期修復成功 + 分享調整大小的版本 + 嘿\n\n你似乎從舊版免費應用程式升級了。現在你能解除安裝舊版了,在應用程式設定的頂端有個\'升級至專業版\'按鈕。\n\n將只有回收桶項目會被刪除,我的最愛項目會被解除標記,以及也會重置你的應用程式設定。\n\n感謝! + + + 篩選媒體檔案 + 圖片 + 影片 + GIF + RAW圖檔 + SVG + 選擇的篩選條件未發現媒體檔案。 + 更改篩選條件 + + + 這功能藉由添加一個\".nomedia\"檔案,來隱藏資料夾和所有子資料夾。您可以透過[設定]中的\"顯示隱藏的項目\"選項來查看。\n是否繼續? + 排除 + 排除資料夾 + 管理排除資料夾 + 此資料夾與子資料夾將只會都從簡易相簿中排除。您可以在設定中進行管理。 + 是否排除上層資料夾? + [排除資料夾]只會將選擇的資料夾與子資料夾一起從簡易相簿中隱藏,他們仍會出現在其他應用程式中。\n\n如果您要在其他應用程式中也隱藏,請使用[隱藏]功能。 + 移除全部 + 是否將排除列表中的所有資料夾都移除?這不會刪除資料夾。 + 隱藏資料夾 + 管理隱藏資料夾 + 您似乎沒有用\".nomedia\"檔案來隱藏的資料夾 + + + 包含資料夾 + 管理包含資料夾 + 增加資料夾 + 如果有些資料夾含有媒體檔案,卻沒被辨識到,您可以在此手動加入。 + No media files have been found. You can solve it by adding the folders containing media files manually. + + + 縮放 + 縮放所選區域並儲存 + 寬度 + 高度 + 保持長寬比 + 請輸入有效的解析度 + + + 編輯器 + 儲存 + 旋轉 + 路徑 + 無效的圖片路徑 + 圖片編輯失敗 + 編輯圖片: + 找不到圖片編輯器 + 未知的檔案位置 + 無法誤蓋原始檔案 + 向左轉 + 向右轉 + 旋轉180º + 翻轉 + 水平翻轉 + 垂直翻轉 + 自由 + 其它 + + + 簡易桌布 + 設為桌布 + 設為桌布失敗 + 用其他程式設為桌布: + 桌布設定中… + 成功設為桌布 + 直向長寬比 + 橫向長寬比 + 主頁螢幕 + 鎖定螢幕 + 主頁和鎖定螢幕 + + + 投影片 + 間隔 (秒): + 包含照片 + 包含影片 + 包含GIF + 隨機順序 + 使用淡入淡出動畫 + 反向播放 + 投影片循環 + 投影片結束 + 找不到投影片的媒體檔案 + 使用淡入淡出動畫 + + + 改變瀏覽類型 + 格狀 + 列表 + 歸類子資料夾 + + + 歸類 + 不歸類檔案 + 資料夾 + 最後修改 + 拍照日期 + 檔案類型 + 副檔名 + 請注意,歸類和排序是兩者是獨立的 + + + 在小工具顯示資料夾: + 顯示資料夾名稱 + + + 自動播放影片 + 記住影片上次播放位置 + 顯示檔案名稱 + 影片循環播放 + 縮圖顯示GIF動畫 + 瀏覽時最大亮度 + 縮圖裁剪成正方形 + 顯示影片長度 + 全螢幕時旋轉方向 + 系統設定方向 + 裝置實際方向 + 圖片長寬比 + 全螢幕時黑色背景和狀態欄 + 橫向滑動縮圖 + 全螢幕時自動隱藏系統介面 + 刪除內容後刪除空白資料夾 + 允許用上下手勢來控制相片的亮度 + 允許用上下手勢來控制影片的音量和亮度 + 主畫面顯示資料夾內的媒體檔案數量 + 全螢幕時顯示詳細資訊 + 管理詳細資訊 + 全螢幕時允許單指縮放 + 允許點擊螢幕邊緣來快速切換媒體檔案 + 允許深度縮放圖片 + 狀態欄隱藏時,同時隱藏詳細資訊 + 在螢幕底部顯示一些操作按鈕 + 在資料夾畫面顯示回收桶 + 可深度縮放的圖片 + 以最高品質顯示圖片 + 回收桶顯示在主畫面最後一項 + 允許用下滑手勢來關閉全螢幕檢視 + 允許用兩次雙擊來1:1縮放 + 總是用新的水平手勢在獨立畫面開啟影片 + 如果可以,顯示瀏海螢幕 + 允許用手勢來旋轉圖片 + 檔案讀取優先權 + 速度 + 折衷 + 避免顯示無效的檔案 + + + 縮圖 + 全螢幕媒體檔案 + 詳細資訊 + 底部操作 + + + 管理要顯示的底部操作 + 我的最愛 + 檔案顯示 + + + 我如何將簡易相簿設為預設相簿? + 首先你必須先在裝置設定中應用程式部分尋找目前預設相簿,找到一個像是\"預設開啟(Open by default)\"的按鈕,點下去,然後選擇\"清除預設(Clear defaults)\"。 + 下次你要開啟圖片或影片時應該會看到程式選擇器,你可以在那裡選擇簡易相簿並設為預設程式。 + 我用密碼鎖住了這應用程式,但我忘記了。怎麼辦? + 有兩個解決方法。你可以重新安裝應用程式,或者在裝置設定中找到這程式然後選擇\"清除資料(Clear data)\"。這將重置你程式內所有設定,不會移除任何媒體檔案。 + 我如何讓某個相冊總是出現在頂端? + 你可以長按想要的相冊,然後在操作選單中選擇[圖釘]圖示,就會釘選於頂端。你也能釘選多個資料夾,釘選的項目會依預設的排序方法來排序。 + 我如何快轉影片? + 你可以在影片播放器上水平滑動你的手指,或者點擊進度條附近的當前或總時長文字。這會使影片快轉或倒轉。 + 隱藏和排除資料夾,兩者有什麼不同? + [排除]只在簡易相簿中避免顯示出來;而[隱藏]則作用於整個系統,資料夾也會被其他相簿隱藏。這是藉由在指定資料夾內建立一個\".nomedia\"空白檔案來進行隱藏,你之後也能用任何檔案管理器移除。 + 為什麼有些音樂專輯封面或貼圖的資料夾會出現? + 這情況可能發生,你會看到一些異常的相冊出現。你可以長按再選擇[排除]來輕易排除他們。在下個對話框,你可以選擇上層資料夾,有可能讓其他相關相冊也避免出現。 + 有一個圖片資料夾沒有顯示出來,怎麼辦? + 可能有多種原因,不過很好解決。只要到[設定] -> [管理包含資料夾],選擇[加號]然後導引到需要的資料夾。 + 如果我只想看到幾個特定的資料夾,怎麼做? + 在[包含資料夾]內添加資料夾並不會自動排除任何東西。你能做的是到[設定] -> [管理排除資料夾],排除根目錄 \"/\",然後在[設定] -> [管理包含資料夾]添加想要的資料夾。 + 那樣的話就只有選擇的資料夾可見。因為排除和包含都是遞迴的,如果一個資料夾被排除又被包含,則會顯示出來。 + 我可以用這程式裁減圖片嗎? + 是的,你能夠在編輯器內拉動圖片角落來裁剪圖片。要進入編輯器,你可以長按圖片縮圖然後選擇[編輯],或是在全螢幕檢視下選擇[編輯]。 + 我可以歸類媒體檔案的縮圖嗎? + 當然,只要在縮圖瀏覽中使用[歸類]選單項目就可以了。你能依多種條件歸類檔案,包含拍照日期。如果你使用了[資料夾內容全部顯示]功能,你還能以資料夾來歸類。 + 依拍照日期排序似乎沒正確運作,我該如何修復? + 那很可能是由於檔案從某處複製過來所造成的。你可以選擇檔案縮圖,然後選擇\"修復拍照日期數值\"來進行修復。 + 我在圖片上看到一些色彩條紋。我如何提升品質? + 目前顯示圖片的處理方法,在大部分情況下都能正常運行。但如果你想要更好的圖片品質,你可以在程式設定中[可深度縮放的圖片]部分,啟用[以最高品質顯示圖片]。 + 我隱藏了一個檔案/資料夾。我如何取消隱藏? + 你可以在主畫面的選單項按[暫時顯示隱藏的項目],或者在程式設定中切換[顯示隱藏的項目]來看隱藏項目。如果你想要取消隱藏,只要長按然後選擇[取消隱藏]。以添加\".nomedia\"檔案進行隱藏的資料夾,你也可以用任何檔案管理器來刪除這檔案。 + 為什麼這應用程式占用了這麼多空間? + 應用程式快取最多占用250MB,以確保更快的圖片讀取。如果這應用程式占用了多更多的空間,最有可能是因為你在垃圾桶內有東西。那些檔案也計入應用程式大小內。你可以開啟垃圾桶並刪除全部檔案,或者從應用程式設定來清除垃圾桶。垃圾桶內的每個檔案都會在30天後自動刪除。 + + + + 簡易相簿 Pro: 相片管理&編輯器 + + 沒有廣告的離線相簿。整理、編輯、恢復和保護照片&影片 + + 簡易相簿Pro是一個高度自訂化的離線相簿。整理和編輯你的照片,從回收桶恢復刪除的檔案,保護和隱藏檔案,以及瀏覽大量不同的照片&影片格式,包含RAW、SVG…等更多。 + + 這應用程式沒有廣告和非必要的權限。並且由於不需要網路連線,您的隱私受到保護。 + + ------------------------------------------------- + 簡易相簿PRO – 特色 + ------------------------------------------------- + + • 沒有廣告和彈出畫面的離線相簿 + • 簡易相簿編輯器 – 裁減、旋轉、縮放、繪畫、濾鏡…等更多 + • 不需要網路連線,給您更多隱私及安全 + • 不會要求非必要的權限 + • 快速搜尋圖片、影片和檔案 + • 開啟和瀏覽多種不同的照片和影片類型 (RAW、SVG、全景之類的) + • 多種直觀的手勢,以便於編輯和整理檔案 + • 大量方法來篩選、歸類和排序檔案 + • 自訂簡易相簿Pro的外觀 + • 支援32種語言 + • 將檔案標記為我的最愛,以快速存取 + • 以圖形、PIN碼或指紋來保護您的照片&影片 + • 也能以圖形、PIN碼或指紋來保護應用程式開啟或特定功能 + • 從回收桶恢復刪除的照片&影片 + • 切換檔案的可見度來隱藏照片&影片 + • 用您的檔案建立可自訂的投影片 + • 查看您檔案的詳細資訊 (解析度、EXIF值…等) + • 簡易相簿Pro是開源的 + …還有多更多! + + 照片相簿編輯器 + 簡易相簿Pro使編輯圖片變得非常輕鬆。裁減、翻轉、旋轉及縮放您的圖片。如果您想更有一點創意,您可以直接在圖片上添加濾鏡和繪畫! + + 支援多種檔案類型 + 不同於其他相簿瀏覽器和照片整理器,簡易相簿Pro支援大量不同的檔案類型,包含JPEG、PNG、MP4、MKV、RAW、SVG、全景照片、全景影片…等更多。 + + 高度自訂化的相簿管理 + 從UI到底部工具列的功能按鈕,簡易相簿Pro是高度自訂化的,任您隨心所欲的方式操作。沒有其他相簿管理器有這樣的靈活性。歸功於開源,我們也支援32種語言! + + 恢復刪除的照片&影片 + 不小心刪除掉珍貴的照片或影片?別擔心!簡易相簿Pro標榜有便利的回收桶,您可以在那裡輕鬆恢復照片&影片。 + + 保護&隱藏照片、影片和檔案 + 使用Pin碼、圖形或裝置的指紋掃描器,您可以保護和隱藏照片、影片及整個相冊。您可以保護應用程式本身或者對程式的特定功能設個鎖。例如:您無法未經指紋掃描就刪除檔案,有助於檔案遭意外刪除。 + + 於此查看簡易工具系列全套: + https://www.simplemobiletools.com + + Facebook: + https://www.facebook.com/simplemobiletools + + Reddit: + https://www.reddit.com/r/SimpleMobileTools + + + + diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index dce671369..ff936c7c9 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -63,6 +63,7 @@ 管理包含資料夾 增加資料夾 如果有些資料夾含有媒體檔案,卻沒被辨識到,您可以在此手動加入。 + No media files have been found. You can solve it by adding the folders containing media files manually. 縮放 diff --git a/app/src/main/res/values/integers.xml b/app/src/main/res/values/integers.xml index 1ba77d374..cc7e8155c 100644 --- a/app/src/main/res/values/integers.xml +++ b/app/src/main/res/values/integers.xml @@ -4,5 +4,5 @@ 3 4 - 1026 + 33794 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 68b30f0cc..17c09aba8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -63,6 +63,7 @@ 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. + No media files have been found. You can solve it by adding the folders containing media files manually. Resize @@ -198,7 +199,7 @@ 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. + You can long press the desired album and select the Pin icon at the actions menu, 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 either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward. What is the difference between hiding and excluding a folder? diff --git a/build.gradle b/build.gradle index 413108702..a237dba1e 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.21' + ext.kotlin_version = '1.3.31' repositories { google() @@ -9,7 +9,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.3.2' + classpath 'com.android.tools.build:gradle:3.4.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong @@ -22,6 +22,7 @@ allprojects { google() jcenter() maven { url "https://jitpack.io" } + maven { url "https://oss.sonatype.org/content/repositories/snapshots" } } } diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/app.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/app.jpg old mode 100755 new mode 100644 index c8e5f57e9..859608677 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/app.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/app.jpg differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/app_2.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/app_2.jpg old mode 100755 new mode 100644 index 9d14855a2..00f22cc86 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/app_2.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/app_2.jpg differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/app_3.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/app_3.jpg old mode 100755 new mode 100644 index b80672eb4..ee5d2394a Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/app_3.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/app_3.jpg differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/app_4.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/app_4.jpg old mode 100755 new mode 100644 index 20ddf6acf..77ee101f3 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/app_4.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/app_4.jpg differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/app_5.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/app_5.jpg new file mode 100644 index 000000000..b96cb9dbc Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/app_5.jpg differ diff --git a/gradle.properties b/gradle.properties index 5465fec0e..f32badbfb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,3 @@ android.enableJetifier=true -android.useAndroidX=true \ No newline at end of file +android.useAndroidX=true +org.gradle.jvmargs=-Xmx1536m \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 00616cb8d..6d33a8d3b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Jan 16 16:59:58 CET 2019 +#Tue Apr 30 16:38:30 CEST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4-all.zip