diff --git a/CHANGELOG.md b/CHANGELOG.md index e7657fb9e..442f658f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,19 @@ Changelog ========== +Version 2.11.1 *(2017-06-19)* +---------------------------- + + * Fixed a crash at starting video + +Version 2.11.0 *(2017-06-18)* +---------------------------- + + * Store column count separately for portrait and landscape modes + * Improve zooming at double taping fullscreen images + * Allow opening a third party editor from our Editor screen + * Many crashfixes and smaller improvements + Version 2.10.10 *(2017-06-07)* ---------------------------- diff --git a/app/build.gradle b/app/build.gradle index cd03e6b5f..a1e12bdab 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "com.simplemobiletools.gallery" minSdkVersion 16 targetSdkVersion 23 - versionCode 109 - versionName "2.10.10" + versionCode 111 + versionName "2.11.1" } signingConfigs { @@ -32,7 +32,7 @@ android { } dependencies { - compile 'com.simplemobiletools:commons:2.20.1' + compile 'com.simplemobiletools:commons:2.21.4' compile 'com.davemorrissey.labs:subsampling-scale-image-view:3.6.0' compile 'com.theartofdev.edmodo:android-image-cropper:2.4.0' compile 'com.bignerdranch.android:recyclerview-multiselect:0.2' @@ -47,7 +47,7 @@ dependencies { } buildscript { - ext.kotlin_version = '1.1.2-3' + ext.kotlin_version = '1.1.2-5' repositories { mavenCentral() } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/EditActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/EditActivity.kt index d69eb1393..ca9cf9bf6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/EditActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/EditActivity.kt @@ -18,11 +18,11 @@ import com.simplemobiletools.gallery.R import com.simplemobiletools.gallery.dialogs.ResizeDialog import com.simplemobiletools.gallery.dialogs.SaveAsDialog import com.simplemobiletools.gallery.extensions.getRealPathFromURI +import com.simplemobiletools.gallery.extensions.openEditor import com.theartofdev.edmodo.cropper.CropImageView import kotlinx.android.synthetic.main.view_crop_image.* import java.io.* - class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener { val TAG = EditActivity::class.java.simpleName val ASPECT_X = "aspectX" @@ -33,6 +33,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener var resizeWidth = 0 var resizeHeight = 0 var isCropIntent = false + var isEditingWithThirdParty = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -62,6 +63,17 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener } } + override fun onResume() { + super.onResume() + isEditingWithThirdParty = false + } + + override fun onStop() { + super.onStop() + if (isEditingWithThirdParty) + finish() + } + override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_editor, menu) menu.findItem(R.id.resize).isVisible = !isCropIntent @@ -75,6 +87,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener R.id.resize -> resizeImage() R.id.flip_horizontally -> flipImage(true) R.id.flip_vertically -> flipImage(false) + R.id.edit -> editWith() else -> return super.onOptionsItemSelected(item) } return true @@ -189,6 +202,11 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener crop_image_view.flipImageVertically() } + private fun editWith() { + openEditor(uri, true) + isEditingWithThirdParty = true + } + private fun scanFinalPath(path: String) { scanPath(path) { setResult(Activity.RESULT_OK, intent) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/MainActivity.kt index 8e5c99539..85d5bc3f6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/MainActivity.kt @@ -14,6 +14,8 @@ import android.support.v4.app.ActivityCompat import android.support.v7.widget.GridLayoutManager import android.view.Menu import android.view.MenuItem +import android.view.ViewGroup +import android.widget.FrameLayout import com.google.gson.Gson import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.models.Release @@ -27,10 +29,7 @@ import com.simplemobiletools.gallery.helpers.* import com.simplemobiletools.gallery.models.Directory import com.simplemobiletools.gallery.views.MyScalableRecyclerView import kotlinx.android.synthetic.main.activity_main.* -import java.io.File -import java.io.FileInputStream -import java.io.InputStream -import java.io.OutputStream +import java.io.* import java.util.* class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener { @@ -51,6 +50,7 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener { private var mIsGettingDirs = false private var mStoredAnimateGifs = true private var mStoredCropThumbnails = true + private var mStoredScrollHorizontally = true private var mLoadedInitialPhotos = false private var mLastMediaModified = 0 private var mLastMediaHandler = Handler() @@ -74,6 +74,7 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener { mDirs = ArrayList() mStoredAnimateGifs = config.animateGifs mStoredCropThumbnails = config.cropThumbnails + mStoredScrollHorizontally = config.scrollHorizontally storeStoragePaths() checkWhatsNewDialog() } @@ -108,12 +109,18 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener { override fun onResume() { super.onResume() if (mStoredAnimateGifs != config.animateGifs) { - mDirs.clear() + directories_grid.adapter.notifyDataSetChanged() } if (mStoredCropThumbnails != config.cropThumbnails) { - mDirs.clear() + directories_grid.adapter.notifyDataSetChanged() } + + if (mStoredScrollHorizontally != config.scrollHorizontally) { + (directories_grid.adapter as DirectoryAdapter).scrollVertically = !config.scrollHorizontally + directories_grid.adapter.notifyDataSetChanged() + } + tryloadGallery() invalidateOptionsMenu() } @@ -126,6 +133,7 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener { mIsGettingDirs = false mStoredAnimateGifs = config.animateGifs mStoredCropThumbnails = config.cropThumbnails + mStoredScrollHorizontally = config.scrollHorizontally MyScalableRecyclerView.mListener = null mLastMediaHandler.removeCallbacksAndMessages(null) } @@ -141,7 +149,7 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener { showAllMedia() else getDirectories() - handleZooming() + setupLayoutManager() checkIfColorChanged() } else { ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), STORAGE_PERMISSION) @@ -221,8 +229,16 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener { private fun getRecyclerAdapter() = (directories_grid.adapter as DirectoryAdapter) - private fun handleZooming() { + private fun setupLayoutManager() { val layoutManager = directories_grid.layoutManager as GridLayoutManager + if (config.scrollHorizontally) { + layoutManager.orientation = GridLayoutManager.HORIZONTAL + directories_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT) + } else { + layoutManager.orientation = GridLayoutManager.VERTICAL + directories_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + } + layoutManager.spanCount = config.dirColumnCnt MyScalableRecyclerView.mListener = object : MyScalableRecyclerView.MyScalableRecyclerViewListener { override fun zoomIn() { @@ -252,11 +268,13 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener { private fun increaseColumnCount() { config.dirColumnCnt = ++(directories_grid.layoutManager as GridLayoutManager).spanCount invalidateOptionsMenu() + directories_grid.adapter.notifyDataSetChanged() } private fun reduceColumnCount() { config.dirColumnCnt = --(directories_grid.layoutManager as GridLayoutManager).spanCount invalidateOptionsMenu() + directories_grid.adapter.notifyDataSetChanged() } private fun isPickImageIntent(intent: Intent) = isPickIntent(intent) && (hasImageContentData(intent) || isImageType(intent)) @@ -302,6 +320,7 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener { inputStream = FileInputStream(File(path)) outputStream = contentResolver.openOutputStream(output) inputStream.copyTo(outputStream) + } catch (ignored: FileNotFoundException) { } finally { inputStream?.close() outputStream?.close() diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/MediaActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/MediaActivity.kt index fb254a7f6..2d90e98c7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/MediaActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/MediaActivity.kt @@ -12,6 +12,8 @@ import android.support.v7.widget.GridLayoutManager import android.util.Log import android.view.Menu import android.view.MenuItem +import android.view.ViewGroup +import android.widget.FrameLayout import com.bumptech.glide.Glide import com.bumptech.glide.request.animation.GlideAnimation import com.bumptech.glide.request.target.SimpleTarget @@ -46,6 +48,7 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener { private var mLoadedInitialPhotos = false private var mStoredAnimateGifs = true private var mStoredCropThumbnails = true + private var mStoredScrollHorizontally = true private var mLastDrawnHashCode = 0 private var mLastMediaModified = 0 private var mLastMediaHandler = Handler() @@ -67,6 +70,7 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener { mPath = intent.getStringExtra(DIRECTORY) mStoredAnimateGifs = config.animateGifs mStoredCropThumbnails = config.cropThumbnails + mStoredScrollHorizontally = config.scrollHorizontally mShowAll = config.showAll if (mShowAll) supportActionBar?.setDisplayHomeAsUpEnabled(false) @@ -75,12 +79,18 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener { override fun onResume() { super.onResume() if (mShowAll && mStoredAnimateGifs != config.animateGifs) { - mMedia.clear() + media_grid.adapter.notifyDataSetChanged() } if (mStoredCropThumbnails != config.cropThumbnails) { - mMedia.clear() + media_grid.adapter.notifyDataSetChanged() } + + if (mStoredScrollHorizontally != config.scrollHorizontally) { + (media_grid.adapter as MediaAdapter).scrollVertically = !config.scrollHorizontally + media_grid.adapter.notifyDataSetChanged() + } + tryloadGallery() invalidateOptionsMenu() } @@ -91,13 +101,15 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener { media_refresh_layout.isRefreshing = false mStoredAnimateGifs = config.animateGifs mStoredCropThumbnails = config.cropThumbnails + mStoredScrollHorizontally = config.scrollHorizontally MyScalableRecyclerView.mListener = null mLastMediaHandler.removeCallbacksAndMessages(null) } override fun onDestroy() { super.onDestroy() - config.temporarilyShowHidden = false + if (config.showAll) + config.temporarilyShowHidden = false mMedia.clear() } @@ -106,7 +118,7 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener { val dirName = getHumanizedFilename(mPath) title = if (mShowAll) resources.getString(R.string.all_folders) else dirName getMedia() - handleZooming() + setupLayoutManager() checkIfColorChanged() } else { finish() @@ -293,8 +305,16 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener { private fun getRecyclerAdapter() = (media_grid.adapter as MediaAdapter) - private fun handleZooming() { + private fun setupLayoutManager() { val layoutManager = media_grid.layoutManager as GridLayoutManager + if (config.scrollHorizontally) { + layoutManager.orientation = GridLayoutManager.HORIZONTAL + media_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT) + } else { + layoutManager.orientation = GridLayoutManager.VERTICAL + media_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + } + layoutManager.spanCount = config.mediaColumnCnt MyScalableRecyclerView.mListener = object : MyScalableRecyclerView.MyScalableRecyclerViewListener { override fun zoomIn() { @@ -324,11 +344,13 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener { private fun increaseColumnCount() { config.mediaColumnCnt = ++(media_grid.layoutManager as GridLayoutManager).spanCount invalidateOptionsMenu() + media_grid.adapter.notifyDataSetChanged() } private fun reduceColumnCount() { config.mediaColumnCnt = --(media_grid.layoutManager as GridLayoutManager).spanCount invalidateOptionsMenu() + media_grid.adapter.notifyDataSetChanged() } private fun isSetWallpaperIntent() = intent.getBooleanExtra(SET_WALLPAPER_INTENT, false) diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/PhotoVideoActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/PhotoVideoActivity.kt index 56e39f852..0aa50ac78 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/PhotoVideoActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/PhotoVideoActivity.kt @@ -129,18 +129,21 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.photo_video_menu, menu) - menu.findItem(R.id.menu_set_as_wallpaper).isVisible = mMedium?.isImage() == true + menu.findItem(R.id.menu_set_as).isVisible = mMedium?.isImage() == true menu.findItem(R.id.menu_edit).isVisible = mMedium?.isImage() == true return true } override fun onOptionsItemSelected(item: MenuItem): Boolean { + if (mMedium == null) + return true + when (item.itemId) { - R.id.menu_set_as_wallpaper -> trySetAsWallpaper(File(mMedium!!.path)) + R.id.menu_set_as -> trySetAs(File(mMedium!!.path)) R.id.menu_open_with -> openWith(File(mMedium!!.path)) R.id.menu_share -> shareUri(mMedium!!, mUri) - R.id.menu_edit -> openEditor(File(mMedium!!.path)) + R.id.menu_edit -> openFileEditor(File(mMedium!!.path)) else -> return super.onOptionsItemSelected(item) } return true diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/SettingsActivity.kt index dfcb59d95..0d8720b55 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/SettingsActivity.kt @@ -33,6 +33,7 @@ class SettingsActivity : SimpleActivity() { setupMaxBrightness() setupCropThumbnails() setupDarkBackground() + setupScrollHorizontally() setupScreenRotation() setupShowMedia() updateTextColors(settings_holder) @@ -112,6 +113,14 @@ class SettingsActivity : SimpleActivity() { } } + private fun setupScrollHorizontally() { + settings_scroll_horizontally.isChecked = config.scrollHorizontally + settings_scroll_horizontally_holder.setOnClickListener { + settings_scroll_horizontally.toggle() + config.scrollHorizontally = settings_scroll_horizontally.isChecked + } + } + private fun setupScreenRotation() { settings_screen_rotation.text = getScreenRotationText() settings_screen_rotation_holder.setOnClickListener { diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/ViewPagerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/ViewPagerActivity.kt index fbd122166..7ac0c413a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/activities/ViewPagerActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/activities/ViewPagerActivity.kt @@ -176,7 +176,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View return true menu.apply { - findItem(R.id.menu_set_as_wallpaper).isVisible = getCurrentMedium()!!.isImage() == true + findItem(R.id.menu_set_as).isVisible = getCurrentMedium()!!.isImage() == true findItem(R.id.menu_edit).isVisible = getCurrentMedium()!!.isImage() == true findItem(R.id.menu_rotate).isVisible = getCurrentMedium()!!.isImage() == true findItem(R.id.menu_save_as).isVisible = mRotationDegrees != 0f @@ -199,7 +199,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View return true when (item.itemId) { - R.id.menu_set_as_wallpaper -> trySetAsWallpaper(getCurrentFile()) + R.id.menu_set_as -> trySetAs(getCurrentFile()) R.id.menu_copy_to -> copyMoveTo(true) R.id.menu_move_to -> copyMoveTo(false) R.id.menu_open_with -> openWith(getCurrentFile()) @@ -208,7 +208,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View R.id.menu_share -> shareMedium(getCurrentMedium()!!) R.id.menu_delete -> askConfirmDelete() R.id.menu_rename -> renameFile() - R.id.menu_edit -> openEditor(getCurrentFile()) + R.id.menu_edit -> openFileEditor(getCurrentFile()) R.id.menu_properties -> showProperties() R.id.menu_save_as -> saveImageAs() R.id.show_on_map -> showOnMap() @@ -228,6 +228,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View adapter = pagerAdapter currentItem = mPos addOnPageChangeListener(this@ViewPagerActivity) + adapter!!.notifyDataSetChanged() } } } @@ -377,7 +378,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View mPos = -1 reloadViewPager() } - } else if (requestCode == REQUEST_SET_WALLPAPER) { + } else if (requestCode == REQUEST_SET_AS) { if (resultCode == Activity.RESULT_OK) { toast(R.string.wallpaper_set_successfully) } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/DirectoryAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/DirectoryAdapter.kt index 7b76fb7a9..02abb93f7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/DirectoryAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/adapters/DirectoryAdapter.kt @@ -41,6 +41,7 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList() var foregroundColor = 0 var pinnedFolders = config.pinnedFolders + var scrollVertically = !config.scrollHorizontally fun toggleItemSelection(select: Boolean, pos: Int) { if (itemViews[pos] != null) @@ -294,9 +295,11 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList it) { + val path = dirs[it].path + if (activity.needsStupidWritePermissions(path) && config.treeUri.isEmpty()) { + needPermissionForPath = path + } } } @@ -359,12 +362,12 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList (Unit)) : SwappingHolder(view, MultiSelector()) { - fun bindView(activity: SimpleActivity, multiSelectorCallback: ModalMultiSelectorCallback, multiSelector: MultiSelector, directory: Directory, - isPinned: Boolean, listener: DirOperationsListener?): View { + class ViewHolder(val view: View, val adapter: MyAdapterListener, val activity: SimpleActivity, val multiSelectorCallback: ModalMultiSelectorCallback, + val multiSelector: MultiSelector, val listener: DirOperationsListener?, val itemClick: (Directory) -> (Unit)) : + SwappingHolder(view, MultiSelector()) { + fun bindView(directory: Directory, isPinned: Boolean, scrollVertically: Boolean): View { itemView.apply { dir_name.text = directory.name photo_cnt.text = directory.mediaCnt.toString() dir_pin.visibility = if (isPinned) View.VISIBLE else View.GONE - activity.loadImage(directory.tmb, dir_thumbnail) + activity.loadImage(directory.tmb, dir_thumbnail, scrollVertically) - setOnClickListener { viewClicked(multiSelector, directory) } - setOnLongClickListener { - if (listener != null) { - if (!multiSelector.isSelectable) { - activity.startSupportActionMode(multiSelectorCallback) - adapter.toggleItemSelectionAdapter(true, layoutPosition) - } - - listener.itemLongClicked(layoutPosition) - } - true - } + setOnClickListener { viewClicked(directory) } + setOnLongClickListener { viewLongClicked(); true } adapter.setupItemForeground(this) } return itemView } - fun viewClicked(multiSelector: MultiSelector, directory: Directory) { + fun viewClicked(directory: Directory) { if (multiSelector.isSelectable) { val isSelected = adapter.getSelectedPositions().contains(layoutPosition) adapter.toggleItemSelectionAdapter(!isSelected, layoutPosition) @@ -456,6 +450,17 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList, val selectedPositions = HashSet() var foregroundColor = 0 var displayFilenames = config.displayFileNames + var scrollVertically = !config.scrollHorizontally fun toggleItemSelection(select: Boolean, pos: Int) { if (itemViews[pos] != null) @@ -120,7 +121,7 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList, override fun onPrepareActionMode(actionMode: ActionMode?, menu: Menu): Boolean { menu.findItem(R.id.cab_rename).isVisible = selectedPositions.size <= 1 - menu.findItem(R.id.cab_edit).isVisible = selectedPositions.size == 1 && media[selectedPositions.first()].isImage() + menu.findItem(R.id.cab_edit).isVisible = selectedPositions.size == 1 && media.size > selectedPositions.first() && media[selectedPositions.first()].isImage() checkHideBtnVisibility(menu) @@ -172,7 +173,7 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList, } private fun editFile() { - activity.openEditor(getCurrentFile()) + activity.openFileEditor(getCurrentFile()) actMode?.finish() } @@ -270,11 +271,11 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList, override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder { val view = LayoutInflater.from(parent?.context).inflate(R.layout.photo_video_item, parent, false) - return ViewHolder(view, adapterListener, itemClick) + return ViewHolder(view, adapterListener, activity, multiSelectorMode, multiSelector, listener, itemClick) } override fun onBindViewHolder(holder: ViewHolder, position: Int) { - itemViews.put(position, holder.bindView(activity, multiSelectorMode, multiSelector, media[position], listener, displayFilenames)) + itemViews.put(position, holder.bindView(media[position], displayFilenames, scrollVertically)) toggleItemSelection(selectedPositions.contains(position), position) holder.itemView.tag = holder } @@ -335,34 +336,24 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList, } } - class ViewHolder(val view: View, val adapter: MyAdapterListener, val itemClick: (Medium) -> (Unit)) : SwappingHolder(view, MultiSelector()) { - fun bindView(activity: SimpleActivity, multiSelectorCallback: ModalMultiSelectorCallback, multiSelector: MultiSelector, medium: Medium, - listener: MediaOperationsListener?, displayFilenames: Boolean): View { + class ViewHolder(val view: View, val adapter: MyAdapterListener, val activity: SimpleActivity, val multiSelectorCallback: ModalMultiSelectorCallback, + val multiSelector: MultiSelector, val listener: MediaOperationsListener?, val itemClick: (Medium) -> (Unit)) : SwappingHolder(view, MultiSelector()) { + fun bindView(medium: Medium, displayFilenames: Boolean, scrollVertically: Boolean): View { itemView.apply { play_outline.visibility = if (medium.video) View.VISIBLE else View.GONE photo_name.beVisibleIf(displayFilenames) photo_name.text = medium.name - activity.loadImage(medium.path, medium_thumbnail) + activity.loadImage(medium.path, medium_thumbnail, scrollVertically) - setOnClickListener { viewClicked(multiSelector, medium) } - setOnLongClickListener { - if (listener != null) { - if (!multiSelector.isSelectable) { - activity.startSupportActionMode(multiSelectorCallback) - adapter.toggleItemSelectionAdapter(true, layoutPosition) - } - - listener.itemLongClicked(layoutPosition) - } - true - } + setOnClickListener { viewClicked(medium) } + setOnLongClickListener { viewLongClicked(); true } adapter.setupItemForeground(this) } return itemView } - fun viewClicked(multiSelector: MultiSelector, medium: Medium) { + fun viewClicked(medium: Medium) { if (multiSelector.isSelectable) { val isSelected = adapter.getSelectedPositions().contains(layoutPosition) adapter.toggleItemSelectionAdapter(!isSelected, layoutPosition) @@ -371,6 +362,17 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList, } } + fun viewLongClicked() { + if (listener != null) { + if (!multiSelector.isSelectable) { + activity.startSupportActionMode(multiSelectorCallback) + adapter.toggleItemSelectionAdapter(true, layoutPosition) + } + + listener.itemLongClicked(layoutPosition) + } + } + fun stopLoad() { Glide.clear(view.medium_thumbnail) } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/extensions/activity.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/extensions/activity.kt index b1663b850..cc9125a8e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/extensions/activity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/extensions/activity.kt @@ -25,7 +25,7 @@ import com.simplemobiletools.gallery.R import com.simplemobiletools.gallery.activities.SimpleActivity import com.simplemobiletools.gallery.helpers.NOMEDIA import com.simplemobiletools.gallery.helpers.REQUEST_EDIT_IMAGE -import com.simplemobiletools.gallery.helpers.REQUEST_SET_WALLPAPER +import com.simplemobiletools.gallery.helpers.REQUEST_SET_AS import com.simplemobiletools.gallery.models.Directory import com.simplemobiletools.gallery.models.Medium import com.simplemobiletools.gallery.views.MySquareImageView @@ -71,32 +71,32 @@ fun Activity.shareMedia(media: List) { } } -fun Activity.trySetAsWallpaper(file: File) { +fun Activity.trySetAs(file: File) { try { var uri = Uri.fromFile(file) - if (!setAsWallpaper(uri, file)) { + if (!setAs(uri, file)) { uri = getFileContentUri(file) - setAsWallpaper(uri, file, false) + setAs(uri, file, false) } } catch (e: Exception) { toast(R.string.unknown_error_occurred) } } -fun Activity.setAsWallpaper(uri: Uri, file: File, showToast: Boolean = true): Boolean { +fun Activity.setAs(uri: Uri, file: File, showToast: Boolean = true): Boolean { var success = false Intent().apply { action = Intent.ACTION_ATTACH_DATA setDataAndType(uri, file.getMimeType("image/*")) addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) - val chooser = Intent.createChooser(this, getString(R.string.set_as_wallpaper_with)) + val chooser = Intent.createChooser(this, getString(R.string.set_as)) if (resolveActivity(packageManager) != null) { - startActivityForResult(chooser, REQUEST_SET_WALLPAPER) + startActivityForResult(chooser, REQUEST_SET_AS) success = true } else { if (showToast) { - toast(R.string.no_wallpaper_setter_found) + toast(R.string.no_capable_app_found) } success = false } @@ -130,9 +130,9 @@ fun Activity.openWith(file: File, forceChooser: Boolean = true) { action = Intent.ACTION_VIEW setDataAndType(uri, file.getMimeType()) addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) - val chooser = Intent.createChooser(this, getString(R.string.open_with)) if (resolveActivity(packageManager) != null) { + val chooser = Intent.createChooser(this, getString(R.string.open_with)) startActivity(if (forceChooser) chooser else this) } else { toast(R.string.no_app_found) @@ -140,15 +140,19 @@ fun Activity.openWith(file: File, forceChooser: Boolean = true) { } } -fun Activity.openEditor(file: File) { - val uri = Uri.fromFile(file) +fun Activity.openFileEditor(file: File) { + openEditor(Uri.fromFile(file)) +} + +fun Activity.openEditor(uri: Uri, forceChooser: Boolean = false) { Intent().apply { action = Intent.ACTION_EDIT setDataAndType(uri, "image/*") addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) if (resolveActivity(packageManager) != null) { - startActivityForResult(this, REQUEST_EDIT_IMAGE) + val chooser = Intent.createChooser(this, getString(R.string.edit_image_with)) + startActivityForResult(if (forceChooser) chooser else this, REQUEST_EDIT_IMAGE) } else { toast(R.string.no_editor_found) } @@ -260,7 +264,8 @@ fun SimpleActivity.toggleFileVisibility(oldFile: File, hide: Boolean, callback: fun Activity.getFileSignature(path: String) = StringSignature(File(path).lastModified().toString()) -fun Activity.loadImage(path: String, target: MySquareImageView) { +fun Activity.loadImage(path: String, target: MySquareImageView, verticalScroll: Boolean) { + target.isVerticalScrolling = verticalScroll if (path.isImageFast() || path.isVideoFast()) { if (path.isPng()) { loadPng(path, target) @@ -304,7 +309,7 @@ fun Activity.loadAnimatedGif(path: String, target: MySquareImageView) { .load(path) .asGif() .signature(getFileSignature(path)) - .diskCacheStrategy(DiskCacheStrategy.SOURCE) + .diskCacheStrategy(DiskCacheStrategy.NONE) .crossFade() if (config.cropThumbnails) builder.centerCrop() else builder.fitCenter() diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/extensions/context.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/extensions/context.kt index b8f37cf99..ebbf2772f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/extensions/context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/extensions/context.kt @@ -2,6 +2,7 @@ package com.simplemobiletools.gallery.extensions import android.content.Context import android.content.Intent +import android.content.res.Configuration import android.database.Cursor import android.net.Uri import android.provider.MediaStore @@ -19,6 +20,8 @@ import com.simplemobiletools.gallery.models.Medium import java.io.File import java.util.* +val Context.portrait get() = resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT + fun Context.getRealPathFromURI(uri: Uri): String? { var cursor: Cursor? = null try { @@ -139,35 +142,33 @@ private fun parseCursor(context: Context, cur: Cursor, isPickImage: Boolean, isP } } - if (curPath.isEmpty()) { - config.includedFolders.mapNotNull { File(it).listFiles() }.forEach { - for (file in it) { - val size = file.length() - if (size <= 0L) { - continue - } - - val filename = file.name - val isImage = filename.isImageFast() || filename.isGif() - val isVideo = if (isImage) false else filename.isVideoFast() - - if (!isImage && !isVideo) - continue - - if (isVideo && (isPickImage || showMedia == IMAGES)) - continue - - if (isImage && (isPickVideo || showMedia == VIDEOS)) - continue - - val dateTaken = file.lastModified() - val dateModified = file.lastModified() - - val medium = Medium(filename, file.absolutePath, isVideo, dateModified, dateTaken, size) - val isAlreadyAdded = curMedia.any { it.path == file.absolutePath } - if (!isAlreadyAdded) - curMedia.add(medium) + config.includedFolders.filter { it.isEmpty() || it == curPath }.mapNotNull { File(it).listFiles() }.forEach { + for (file in it) { + val size = file.length() + if (size <= 0L) { + continue } + + val filename = file.name + val isImage = filename.isImageFast() || filename.isGif() + val isVideo = if (isImage) false else filename.isVideoFast() + + if (!isImage && !isVideo) + continue + + if (isVideo && (isPickImage || showMedia == IMAGES)) + continue + + if (isImage && (isPickVideo || showMedia == VIDEOS)) + continue + + val dateTaken = file.lastModified() + val dateModified = file.lastModified() + + val medium = Medium(filename, file.absolutePath, isVideo, dateModified, dateTaken, size) + val isAlreadyAdded = curMedia.any { it.path == file.absolutePath } + if (!isAlreadyAdded) + curMedia.add(medium) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/PhotoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/PhotoFragment.kt index eaa7bfc91..7f82ae47f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/PhotoFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/PhotoFragment.kt @@ -27,6 +27,7 @@ import com.simplemobiletools.gallery.activities.ViewPagerActivity import com.simplemobiletools.gallery.extensions.config import com.simplemobiletools.gallery.extensions.getFileSignature import com.simplemobiletools.gallery.extensions.getRealPathFromURI +import com.simplemobiletools.gallery.extensions.portrait import com.simplemobiletools.gallery.helpers.GlideRotateTransformation import com.simplemobiletools.gallery.helpers.MEDIUM import com.simplemobiletools.gallery.models.Medium @@ -229,8 +230,6 @@ class PhotoFragment : ViewPagerFragment() { } private fun getDoubleTapZoomScale(): Float { - val displayAspectRatio = ViewPagerActivity.screenHeight / (ViewPagerActivity.screenWidth).toFloat() - val bitmapOptions = BitmapFactory.Options() bitmapOptions.inJustDecodeBounds = true BitmapFactory.decodeFile(medium.path, bitmapOptions) @@ -238,12 +237,15 @@ class PhotoFragment : ViewPagerFragment() { val height = bitmapOptions.outHeight val bitmapAspectRatio = height / (width).toFloat() - return if (Math.abs(displayAspectRatio - bitmapAspectRatio) < RATIO_THRESHOLD) { - 2f - } else if (bitmapAspectRatio > 1f) { - width / (height).toFloat() + if (context == null) + return 2f + + return if (context.portrait && bitmapAspectRatio <= 1f) { + ViewPagerActivity.screenHeight / height.toFloat() + } else if (!context.portrait && bitmapAspectRatio >= 1f) { + ViewPagerActivity.screenWidth / width.toFloat() } else { - bitmapAspectRatio + 2f } } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/VideoFragment.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/VideoFragment.kt index 5359bcc67..f9b3a604c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/VideoFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/fragments/VideoFragment.kt @@ -95,6 +95,9 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee super.setMenuVisibility(menuVisible) mIsFragmentVisible = menuVisible if (menuVisible) { + if (mSurfaceView != null) + initMediaPlayer() + if (context?.config?.autoplayVideos == true) { playVideo() } @@ -228,6 +231,7 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee } } catch (e: IOException) { Log.e(TAG, "init media player failed $e") + releaseMediaPlayer() } } @@ -258,12 +262,16 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee private fun cleanup() { pauseVideo() mCurrTimeView?.text = 0.getFormattedDuration() - mMediaPlayer?.release() - mMediaPlayer = null + releaseMediaPlayer() mSeekBar?.progress = 0 mTimerHandler?.removeCallbacksAndMessages(null) } + private fun releaseMediaPlayer() { + mMediaPlayer?.release() + mMediaPlayer = null + } + private fun videoPrepared(mediaPlayer: MediaPlayer) { mDuration = mediaPlayer.duration / 1000 addPreviewImage() @@ -294,8 +302,7 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee } override fun surfaceDestroyed(holder: SurfaceHolder) { - mMediaPlayer?.release() - mMediaPlayer = null + releaseMediaPlayer() } private fun setVideoSize() { @@ -348,6 +355,9 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee override fun onStartTrackingTouch(seekBar: SeekBar) { initMediaPlayer() + if (mMediaPlayer == null) + return + mMediaPlayer!!.pause() mIsDragged = true } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Config.kt index 424721c88..b144682c4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Config.kt @@ -1,6 +1,7 @@ package com.simplemobiletools.gallery.helpers import android.content.Context +import android.content.res.Configuration import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.simplemobiletools.commons.helpers.BaseConfig @@ -160,12 +161,52 @@ class Config(context: Context) : BaseConfig(context) { set(showMedia) = prefs.edit().putInt(SHOW_MEDIA, showMedia).apply() var dirColumnCnt: Int - get() = prefs.getInt(DIR_COLUMN_CNT, context.resources.getInteger(R.integer.directory_columns)) - set(dirColumnCnt) = prefs.edit().putInt(DIR_COLUMN_CNT, dirColumnCnt).apply() + get() = prefs.getInt(getDirectoryColumnsField(), getDefaultDirectoryColumnCount()) + set(dirColumnCnt) = prefs.edit().putInt(getDirectoryColumnsField(), dirColumnCnt).apply() + + private fun getDirectoryColumnsField(): String { + val isPortrait = context.resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT + return if (isPortrait) { + if (scrollHorizontally) { + DIR_HORIZONTAL_COLUMN_CNT + } else { + DIR_COLUMN_CNT + } + } else { + if (scrollHorizontally) { + DIR_LANDSCAPE_HORIZONTAL_COLUMN_CNT + } else { + DIR_LANDSCAPE_COLUMN_CNT + } + } + } + + private fun getDefaultDirectoryColumnCount() = context.resources.getInteger(if (scrollHorizontally) R.integer.directory_columns_horizontal_scroll + else R.integer.directory_columns_vertical_scroll) var mediaColumnCnt: Int - get() = prefs.getInt(MEDIA_COLUMN_CNT, context.resources.getInteger(R.integer.media_columns)) - set(mediaColumnCnt) = prefs.edit().putInt(MEDIA_COLUMN_CNT, mediaColumnCnt).apply() + get() = prefs.getInt(getMediaColumnsField(), getDefaultMediaColumnCount()) + set(mediaColumnCnt) = prefs.edit().putInt(getMediaColumnsField(), mediaColumnCnt).apply() + + private fun getMediaColumnsField(): String { + val isPortrait = context.resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT + return if (isPortrait) { + if (scrollHorizontally) { + MEDIA_HORIZONTAL_COLUMN_CNT + } else { + MEDIA_COLUMN_CNT + } + } else { + if (scrollHorizontally) { + MEDIA_LANDSCAPE_HORIZONTAL_COLUMN_CNT + } else { + MEDIA_LANDSCAPE_COLUMN_CNT + } + } + } + + private fun getDefaultMediaColumnCount() = context.resources.getInteger(if (scrollHorizontally) R.integer.media_columns_horizontal_scroll + else R.integer.media_columns_vertical_scroll) var directories: String get() = prefs.getString(DIRECTORIES, "") @@ -179,4 +220,8 @@ class Config(context: Context) : BaseConfig(context) { val listType = object : TypeToken>() {}.type return Gson().fromJson>(albumCovers, listType) ?: ArrayList(1) } + + var scrollHorizontally: Boolean + get() = prefs.getBoolean(SCROLL_HORIZONTALLY, false) + set(scrollHorizontally) = prefs.edit().putBoolean(SCROLL_HORIZONTALLY, scrollHorizontally).apply() } diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Constants.kt index 21dc7c6de..70fe30c1b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/helpers/Constants.kt @@ -16,7 +16,13 @@ val DISPLAY_FILE_NAMES = "display_file_names" val DARK_BACKGROUND = "dark_background" val PINNED_FOLDERS = "pinned_folders" val DIR_COLUMN_CNT = "dir_column_cnt" +val DIR_LANDSCAPE_COLUMN_CNT = "dir_landscape_column_cnt" +val DIR_HORIZONTAL_COLUMN_CNT = "dir_horizontal_column_cnt" +val DIR_LANDSCAPE_HORIZONTAL_COLUMN_CNT = "dir_landscape_horizontal_column_cnt" val MEDIA_COLUMN_CNT = "media_column_cnt" +val MEDIA_LANDSCAPE_COLUMN_CNT = "media_landscape_column_cnt" +val MEDIA_HORIZONTAL_COLUMN_CNT = "media_horizontal_column_cnt" +val MEDIA_LANDSCAPE_HORIZONTAL_COLUMN_CNT = "media_landscape_horizontal_column_cnt" val SHOW_ALL = "show_all" // display images and videos from all folders together val SHOW_MEDIA = "show_media" val SAVE_FOLDER_PREFIX = "folder2_" @@ -24,6 +30,7 @@ val HIDE_FOLDER_TOOLTIP_SHOWN = "hide_folder_tooltip_shown" val EXCLUDED_FOLDERS = "excluded_folders" val INCLUDED_FOLDERS = "included_folders" val ALBUM_COVERS = "album_covers" +val SCROLL_HORIZONTALLY = "scroll_horizontally" val NOMEDIA = ".nomedia" @@ -37,7 +44,7 @@ val DIRECTORIES = "directories2" val IS_VIEW_INTENT = "is_view_intent" val REQUEST_EDIT_IMAGE = 1 -val REQUEST_SET_WALLPAPER = 2 +val REQUEST_SET_AS = 2 // show media val IMAGES_AND_VIDEOS = 0 diff --git a/app/src/main/kotlin/com/simplemobiletools/gallery/views/MySquareImageView.kt b/app/src/main/kotlin/com/simplemobiletools/gallery/views/MySquareImageView.kt index 54c26947c..3e0c79df1 100644 --- a/app/src/main/kotlin/com/simplemobiletools/gallery/views/MySquareImageView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/gallery/views/MySquareImageView.kt @@ -5,6 +5,7 @@ import android.util.AttributeSet import android.widget.ImageView class MySquareImageView : ImageView { + var isVerticalScrolling = true constructor(context: Context) : super(context) @@ -14,6 +15,7 @@ class MySquareImageView : ImageView { override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { super.onMeasure(widthMeasureSpec, heightMeasureSpec) - setMeasuredDimension(measuredWidth, measuredWidth) + val spec = if (isVerticalScrolling) measuredWidth else measuredHeight + setMeasuredDimension(spec, spec) } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 8390ab0bc..6fdf71aac 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -17,7 +17,7 @@ android:layout_height="wrap_content" android:scrollbars="none" app:layoutManager="android.support.v7.widget.GridLayoutManager" - app:spanCount="@integer/directory_columns"/> + app:spanCount="@integer/directory_columns_vertical_scroll"/> + app:spanCount="@integer/media_columns_vertical_scroll"/> + + + + + + + app:spanCount="@integer/directory_columns_vertical_scroll"/> diff --git a/app/src/main/res/layout/dialog_medium_picker.xml b/app/src/main/res/layout/dialog_medium_picker.xml index f2aebbd17..60207b4c9 100644 --- a/app/src/main/res/layout/dialog_medium_picker.xml +++ b/app/src/main/res/layout/dialog_medium_picker.xml @@ -7,4 +7,4 @@ android:layout_height="wrap_content" android:paddingTop="@dimen/activity_margin" app:layoutManager="android.support.v7.widget.GridLayoutManager" - app:spanCount="@integer/media_columns"/> + app:spanCount="@integer/media_columns_vertical_scroll"/> diff --git a/app/src/main/res/layout/directory_item.xml b/app/src/main/res/layout/directory_item.xml index 9d4ef8a46..63642099d 100644 --- a/app/src/main/res/layout/directory_item.xml +++ b/app/src/main/res/layout/directory_item.xml @@ -2,7 +2,7 @@ diff --git a/app/src/main/res/layout/photo_video_item.xml b/app/src/main/res/layout/photo_video_item.xml index f5a4bfea3..cb52c8f10 100644 --- a/app/src/main/res/layout/photo_video_item.xml +++ b/app/src/main/res/layout/photo_video_item.xml @@ -2,7 +2,7 @@ diff --git a/app/src/main/res/menu/menu_editor.xml b/app/src/main/res/menu/menu_editor.xml index eeeb84d73..01aad0437 100644 --- a/app/src/main/res/menu/menu_editor.xml +++ b/app/src/main/res/menu/menu_editor.xml @@ -30,4 +30,8 @@ android:title="@string/flip_vertically"/> + diff --git a/app/src/main/res/menu/menu_viewpager.xml b/app/src/main/res/menu/menu_viewpager.xml index 96dd6b3c1..f5ffc6299 100644 --- a/app/src/main/res/menu/menu_viewpager.xml +++ b/app/src/main/res/menu/menu_viewpager.xml @@ -43,8 +43,8 @@ android:title="@string/move_to" app:showAsAction="never"/> Change cover image Select photo Use default + Nastavit jako Tato funkce skryje složku, včetně podsložek, přidáním souboru \'.nomedia\'. Zobrazíte je zvolením možnosti \'Zobrazit skryté složky\' v nastavení. Pokračovat? @@ -67,13 +68,14 @@ Překlopit vodorovně Překlopit svisle Zařízení nemá dostatek paměti + Edit with Jednoduchá tapeta Nastavit jako tapetu Nastavení tapety selhalo Nastavit jako tapetu pomocí: - Nebyla nalezena žádná vhodná aplikace + Nebyla nalezena žádná vhodná aplikace Nastavuje se tapeta… Tapeta byla úspěšně změněna Portrait aspect ratio @@ -86,8 +88,8 @@ Zobrazit média Jen obrázky Jen videa - Gifs only - Images, videos, gifs + GIFs only + Images, videos, GIFs Obrázky i videa Přehrávat videa ve smyčce Animovat náhledy souborů GIF diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 5e8f7e578..949a72095 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -21,8 +21,9 @@ Kacheln vergrößern Verstecktes temporär zeigen Change cover image - Select photo - Use default + Bild auswählen + Standard verwenden + Festlegen als Diese Funktion versteckt ausgewählte Ordner (auch für andere Apps), indem dort im Dateisystem eine \'.nomedia\'-Datei abgelegt wird. Dadurch werden auch deren Unterordner versteckt. Solche Ordner werden nur gezeigt, wenn die Einstellung \'Versteckte Ordner zeigen\' aktiv ist (auch andere Apps bieten üblicherweise eine solche Option). Fortfahren? @@ -39,7 +40,7 @@ Einbezogene Ordner Einbezogene Ordner verwalten Ordner hinzufügen - Sollten Sie weitere Medien-Ordner haben, die von der App nicht erkannt wurden, können Sie diese hier manuell hinzufügen. + Sollten Sie weitere Medienordner haben, die von der App nicht erkannt wurden, können Sie diese hier manuell hinzufügen. Größe ändern @@ -62,18 +63,19 @@ Konnte Quelldatei nicht überschreiben Nach links drehen Nach rechts drehen - Um 180º drehen + Um 180° drehen Spiegeln Horizontal spiegeln Vertikal spiegeln Fehler: Zuwenig Speicher + Edit with Schlichter Hintergrund Als Hintergrund festlegen Hintergrundbild festlegen fehlgeschlagen Als Hintergrund festlegen mit: - Keine Hintergrundbild-App gefunden + Keine Hintergrundbild-App gefunden Hintergrund festlegen… Hintergrundbild erfolgreich festgelegt Hochformat @@ -86,8 +88,8 @@ Medien auswählen Nur Bilder Nur Videos - Gifs only - Images, videos, gifs + Nur GIFs + Bilder, Videos und GIFs Bilder und Videos Videos in Endlosschleife spielen Kacheln bei GIFs animieren @@ -98,7 +100,7 @@ Gerätedrehung Seitenverhältnis Schwarzer Hintergrund im Vollbild - Scroll thumbnails horizontally + Kacheln horizontal scrollen diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index feea9961a..b5694df3c 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -23,6 +23,7 @@ Change cover image Select photo Use default + Set as Esta función oculta la carpeta agregando un archivo \'.nomedia\' en ella, y ocultará también las subcarpetas. Puede mostrarlas cambiando la opción \'Mostrar carpetas ocultas\' en los Ajustes. ¿Continuar? @@ -67,13 +68,14 @@ Horizontalmente Verticalmente Error: sin memoria + Edit with Fondos de pantalla Simple Gallery Establecer como fondo de pantalla Error al establecer fondo de pantalla Establecer como fondo de pantalla con: - No se encontró aplicación para ello + No se encontró aplicación para ello Estableciendo fondo de pantalla… Fondo de pantalla establecido correctamente Relación de aspecto tipo retrato @@ -86,11 +88,11 @@ Mostrar multimedia Solo imágenes Solo vídeos - Gifs only - Images, videos, gifs + GIFs only + Images, videos, GIFs Imágenes y vídeos Reproducción continua de vídeos - Animar las miniaturas de gifs + Animar las miniaturas de GIFs Brillo máximo cuando se muestra multimedia Recortar miniaturas en cuadrados Rotar multimedia en pantalla completa según diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index e98176869..4f32096b2 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -23,6 +23,7 @@ Change cover image Select photo Use default + Set as Cette option masque le dossier en ajoutant un fichier \'.nomedia\' à l\'intérieur, cela masquera aussi tous les sous-dossiers. Vous pouvez les voir en modifiant l\'option \'Afficher les dossiers cachés\' dans les Paramètres. Continuer ? @@ -67,13 +68,14 @@ Retourner horizontalement Retourner verticallement Erreur excès de mémoire + Edit with Simple fond d\'écran Définir comme fond d\'écran Échec de la définition en tant que fond d\'écran. Définir comme fond d\'écran avec : - Aucune application trouvée pour continuer cette action + Aucune application trouvée pour continuer cette action Paramètre de fond d\'écran… Fond d\'écran défini avec succès. Ratio aspect Portrait @@ -86,11 +88,11 @@ Afficher les médias Seulement les images Vidéos uniquement - Gifs only - Images, videos, gifs + GIFs only + Images, videos, GIFs Images et vidéos Tourner en boucle les vidéos - Gifs animés sur les miniatures + GIFs animés sur les miniatures Luminosité maximale lors de l\'affichage de media Rogner les miniatures en carrés Pivoter les medias plen écran selon diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 709a41f0d..d0120b7d9 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -23,6 +23,7 @@ Change cover image Select photo Use default + Set as This function hides the folder by adding a \'.nomedia\' file into it, it will hide all subfolders too. You can see them by toggling the \'Show hidden folders\' option in Settings. Continue? @@ -67,13 +68,14 @@ Flip horizontally Flip vertically Out of memory error + Edit with Simple Wallpaper Set as Wallpaper Setting as Wallpaper failed Set as wallpaper with: - No app capable of it has been found + No app capable of it has been found Setting wallpaper… Wallpaper set successfully Portrait aspect ratio @@ -86,11 +88,11 @@ Show media Images only Videos only - Gifs only - Images, videos, gifs + GIFs only + Images, videos, GIFs Images and videos Loop videos - Animate gifs at thumbnails + Animate GIFs at thumbnails Max brightness when viewing media Crop thumbnails into squares Rotate fullscreen media by diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 5087d0362..fa274c077 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -23,6 +23,7 @@ Change cover image Select photo Use default + Set as Questa funzione nasconde la cartella aggiungendo un file \'.nomedia\' all\'interno, nasconderà anche tutte le sottocartelle. Puoi vederle attivando l\'opzione \'Mostra cartelle nascoste\' nelle impostazioni. Continuare? @@ -67,13 +68,14 @@ Capovolgi orizzontalmente Capovolgi verticalmente Errore memoria esaurita + Edit with Sfondo semplice Imposta come sfondo Impostazione sfondo non riuscita Imposta come sfondo con: - Non sono disponibili app compatibili + Non sono disponibili app compatibili Impostazione sfondo… Sfondo impostato correttamente Proporzioni ritratto @@ -86,11 +88,11 @@ Mostra tipo di media Solo immagini Solo video - Gifs only - Images, videos, gifs + GIFs only + Images, videos, GIFs Immagini e video Ripeti i video - Anima le gif in miniatura + Anima le GIF in miniatura Luminosità max durante visualizzazione Ritaglia le miniature in quadrati Ruota a schermo intero per diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index d14c6d20f..67eed51b2 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -23,6 +23,7 @@ Change cover image Select photo Use default + Set as This function hides the folder by adding a \'.nomedia\' file into it, it will hide all subfolders too. You can see them by toggling the \'Show hidden folders\' option in Settings. Continue? @@ -67,13 +68,14 @@ Flip horizontally Flip vertically Out of memory error + Edit with シンプル壁紙 壁紙として設定 壁紙としての設定に失敗しました 壁紙として設定: - 対応できるアプリが見つかりません + 対応できるアプリが見つかりません 壁紙の設定… 壁紙を正常に設定しました Portrait aspect ratio @@ -86,11 +88,11 @@ Show media Images only Videos only - Gifs only - Images, videos, gifs + GIFs only + Images, videos, GIFs Images and videos Loop videos - Animate gifs at thumbnails + Animate GIFs at thumbnails Max brightness when viewing media Crop thumbnails into squares Rotate fullscreen media by diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index e850a9af4..b8fafa6ff 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -23,6 +23,7 @@ Change cover image Select photo Use default + Set as Ta funkcja ukrywa folder dodając \'. \' Nomedia plik do niego, można tak ukryć wszystkie podfoldery. Można je zobaczyć poprzez przełączanie \'Pokaż ukryte foldery \' opcję w ustawieniach. Kontyntynuj? @@ -67,13 +68,14 @@ Flip poziomo Flip pionowo Błąd pamięci + Edit with Tapeta Ustaw jako tapeta Ustawienie tapety nie powiodło się Ustaw jako tapetę w: - Brak odpowiednich ustawień + Brak odpowiednich ustawień Ustawianie tapety… Tapeta ustawiona Portrait aspect ratio @@ -86,11 +88,11 @@ Wybierz co pokazywać Tylko Zdjęcia Tylko Filmy - Gifs only - Images, videos, gifs + GIFs only + Images, videos, GIFs Obrazy i wideo Pętla wideo - Animowanie gify z miniaturkami + Animowanie GIFy z miniaturkami Max brightness when viewing media Crop thumbnails into squares Rotate fullscreen media by diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 5fd798068..9c09d69f6 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -20,9 +20,10 @@ Aumentar número de colunas Reduzir número de colunas Mostrar pastas ocultas temporariamente - Change cover image - Select photo - Use default + Trocar imagem de capa + Selecionar foto + Usar padrão + Set as Esta opção oculta uma pasta com a adição de um arquivo \'.nomedia\' dentro dela, e irá ocultar todas as subpastas que estejam dentro da mesma. Você poderá rever essas pastas com a opção \'Mostrar pastas ocultas\'. Continuar? @@ -67,15 +68,16 @@ Horizontalmente Verticalmente Memória insuficiente + Edit with Simple Wallpaper - Definir como fundo de tela - Falha ao definir como fundo de tela - Definir fundo de tela com: - Aplicativo não encontrado - A definir como fundo de tela; - Fundo de tela definido com sucesso + Definir como papel de parede + Falha ao definir como papel de parede + Definir papel de parede com: + Aplicativo não encontrado + Definindo como papel de parede; + Papel de parede com sucesso Retrato Paisagem @@ -86,11 +88,11 @@ Mostrar mídia Apenas imagens Apenas vídeos - Gifs only - Images, videos, gifs + Apenas GIFS + Imagens, vídeos, GIFs Imagens e vídeos Reproduzir vídeos em ciclo - Animação de gifs nas miniaturas + Animação de GIFs nas miniaturas    Brilho máximo ao visualizar mídia Recortar miniaturas em quadrados Critério para rotação de tela @@ -98,7 +100,7 @@ Sensor do aparelho Proporção da mídia Fundo de tela escuro em mídia tela cheia - Scroll thumbnails horizontally + Rolar miniaturas horizontalmente diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 89c7bfd08..07d1e99fa 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -18,11 +18,12 @@ Não existe uma aplicação adequada Não existe uma aplicação adequeada Aumentar número de colunas - Reduzir número de colunas + Diminuir número de colunas Mostrar ocultas temporariamente - Change cover image - Select photo - Use default + Alterar imagem da capa + Selecionar foto + Predefinição + Set as Esta opção oculta uma pasta com a adição de um ficheiro \'.nomedia\' na pasta, e irá ocultar todas as subpastas existentes. Pode ver as pastas com a opção \'Mostrar pastas ocultas\'. Continuar? @@ -67,13 +68,14 @@ Horizontalmente Verticalmente Memória insuficiente + Edit with Simple Wallpaper Definir como fundo do ecrã Falha ao definir como fundo de ecrã Definir como fundo com: - Aplicação não encontrada + Aplicação não encontrada A definir como fundo de ecrã… Fundo definido com sucesso Proporção na vertical @@ -86,11 +88,11 @@ Mostrar multimédia Apenas imagens Apenas vídeos - Apenas gifs - Imagens, vídeos e gifs + Apenas GIFs + Imagens, vídeos e GIFs Imagens e vídeos Vídeos em ciclo - Animação de gifs nas miniaturas + Animação de GIFs nas miniaturas Brilho máximo permitido Recortar miniaturas em quadrados Rodar em ecrã completo por @@ -98,7 +100,7 @@ Rotação do dispositivo Proporção Usar sempre um fundo escuro se em ecrã completo - Scroll thumbnails horizontally + Deslocação horizontal de miniaturas diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index bd5fb9684..fd09fae47 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -23,6 +23,7 @@ Change cover image Select photo Use default + Set as Эта опция скрывает папку, добавляя в неё файл \'.nomedia\'; будут скрыты все подпапки. Можно показывать их, переключая \'Показать скрытые папки\' в настройках. Продолжить? @@ -67,13 +68,14 @@ По горизонтали По вертикали Память переполнена + Edit with Простые обои Установить в качестве обоев Установить не удалось Установить в качестве обоев в: - Приложение не найдено + Приложение не найдено Установка обоев… Обои успешно установлены Формат изображения @@ -86,11 +88,11 @@ Отображать Только изображения Только видео - Gifs only - Images, videos, gifs + GIFs only + Images, videos, GIFs Изображения и видео Повторять видео - Анимировать эскизы gif-файлов + Анимировать эскизы GIF-файлов Максимальная яркость при просмотре файлов Нарезать миниатюры в квадраты Полноэкранный поворот diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index cf7f93f41..68beaf6cc 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -23,6 +23,7 @@ Zmeniť obal albumu Zvoliť foto Použiť predvolený + Nastaviť ako Táto funkcia skryje priečinok pridaním súboru \'.nomedia\', skryté budú aj podpriečinky. Môžete ich vidieť zvolením možnosti \'Zobraziť skryté priečinky\' v nastaveniach. Pokračovať? @@ -67,13 +68,14 @@ Preklopiť vodorovne Preklopiť zvisle Došlo k chybe s nedostatkom pamäte + Upraviť s Jednoduchá tapeta Nastaviť ako tapetu Nastavovanie ako tapeta zlyhalo Nastaviť ako tapetu s: - Nenašla sa žiadna vhodná aplikácia No app capable of it has been found + Nenašla sa žiadna vhodná aplikácia Nastavuje sa tapeta… Tapeta bola úspešne zmenená Orientácia nastojato @@ -86,11 +88,11 @@ Zobraziť médiá Iba obrázky Iba videá - Iba gifká - Obrázky, videá, gifká + Iba GIFká + Obrázky, videá, GIFká Obrázky aj videá Automaticky reštartovať videá - Animovať gif súbory pri náhľade + Animovať GIF súbory pri náhľade Maximálny jas pri prezeraní médií Orezať náhľady na štvorce Otáčať obrazovku podľa Rotate fullscreen media by diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index a0c67d09e..7e3133464 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -23,6 +23,7 @@ Change cover image Select photo Use default + Set as This function hides the folder by adding a \'.nomedia\' file into it, it will hide all subfolders too. You can see them by toggling the \'Show hidden folders\' option in Settings. Continue? @@ -67,13 +68,14 @@ Flip horizontally Flip vertically Out of memory error + Edit with Bakgrundsbild Ange som bakgrundsbild Det gick inte att byta bakgrundsbild Ange som bakgrundsbild med: - Hittade ingen app som klarar av detta + Hittade ingen app som klarar av detta Inställningar för bakgrundsbild… Bakgrundsbilden är ändrad Portrait aspect ratio @@ -86,11 +88,11 @@ Visa media Endast bilder Endast videos - Gifs only - Images, videos, gifs + GIFs only + Images, videos, GIFs Bilder och videos Återspela videos - Animate gifs at thumbnails + Animate GIFs at thumbnails Max brightness when viewing media Crop thumbnails into squares Rotate fullscreen media by diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 61ef91e0d..80f72abb2 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -23,6 +23,7 @@ Change cover image Select photo Use default + Set as Bu işlev, klasöre\'.medya yok\'dosyası ekleyerek gizler; tüm alt klasörleri de gizler. Bunları Ayarlar\'da\'Gizli klasörleri göster\'seçeneğine basarak görebilirsiniz. Devam et? @@ -67,13 +68,14 @@ Yatay Dikey Yetersiz bellek hatası + Edit with Basit Duvar Kağıdı Duvar kağıdı olarak ayarla Duvar Kağıdı Olarak Ayarlanılamıyor İle duvar kağıdı olarak ayarla: - Mümkün olan herhangi bir uygulama bulunamadı + Mümkün olan herhangi bir uygulama bulunamadı Duvar kağıdını ayarlama… Duvar kağıdı başarıyla ayarlandı Portrait aspect ratio @@ -86,11 +88,11 @@ Medyayı göster Yalnızca resimler Yalnızca videolar - Gifs only - Images, videos, gifs + GIFs only + Images, videos, GIFs Resimler ve videolar Videolar döngüsü - Küçük resimlerde gif\'leri canlandırın + Küçük resimlerde GIF\'leri canlandırın Ortam görüntülerken azami parlaklık Küçük resimleri karelere kırp Tarafından tam ekran medyayı döndür diff --git a/app/src/main/res/values-w480dp/integers.xml b/app/src/main/res/values-w480dp/integers.xml index 2bfaa32f7..2f22506b5 100644 --- a/app/src/main/res/values-w480dp/integers.xml +++ b/app/src/main/res/values-w480dp/integers.xml @@ -1,4 +1,6 @@ - 3 - 5 + 3 + 3 + 5 + 5 diff --git a/app/src/main/res/values-w600dp/integers.xml b/app/src/main/res/values-w600dp/integers.xml index a98204fd4..ca1cfb86b 100644 --- a/app/src/main/res/values-w600dp/integers.xml +++ b/app/src/main/res/values-w600dp/integers.xml @@ -1,4 +1,6 @@ - 4 - 7 + 4 + 7 + 7 + 8 diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 42deb7bcc..66e2d9d7f 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -5,41 +5,42 @@ 编辑 打开相机 打开方式 - 没有可用的应用 - (隐藏) - 锁定目录 - 解除锁定目录 - 显示目录中所有内容 - 所有目录 - 切换到目录视图 - 其他目录 + 未找到可用应用 + (隐藏) + 锁定文件夹 + 解除锁定文件夹 + 显示文件夹中所有内容 + 所有文件夹 + 切换到文件夹视图 + 其他文件夹 在地图中显示 未知位置 - 未发现地图应用 - 未发现相机应用 - 增加一行 - 减少一行 - 显示/隐藏缓存内容 - Change cover image - Select photo - Use default + 未找到地图应用 + 未找到相机应用 + 增加一栏 + 减少一栏 + 显示/隐藏缓存内容 + 更改封面图片 + 选择图片 + 使用默认 + Set as - 通过添加一个 \'.nomedia\' 文件到目录下,该目录包括子目录下的所有媒体都不会被扫描。 你可以通过设置中的 \'Show hidden folders\' 选项改变设置, 继续? + 通过添加文件 \'.nomedia\' 到文件夹,可以防止文件夹及其子文件夹下的所有媒体被扫描。您可以通过设置中的 \'显示隐藏文件夹\' 选项改变设置,是否继续? 排除 - 排除目录 - 管理排除的目录 - 目录及其子目录中的媒体将不会在Simple Gallery中显示,你可以修改设置。 - Exclude a parent instead? - 此处的目录及其子目录中的媒体将不会在Simple Gallery中显示,但是其它应用可以访问。\\n\\n如果你想对其它应用隐藏,请使用隐藏功能。 + 排除文件夹 + 管理排除文件夹 + 文件夹及其子文件夹中的媒体将不会在 Simple Gallery 中显示,您可以在设置更改。 + 是否排除父文件夹? + 此文件夹及其子文件夹中的媒体将不会在 Simple Gallery 中显示,但是其它应用可以访问。\\n\\n如果您想对其它应用隐藏,请使用隐藏功能。 移除全部 - 移除列表中的全部目录?目录不会被删除。 + 是否移除列表中的全部文件夹?文件夹不会被物理删除。 - 包含目录 - 管理包含的目录 - 添加目录 - 如果你还有应用未扫描到的媒体文件,可以将所在目录路径添加到这里。 + 包含文件夹 + 管理包含文件夹 + 添加文件夹 + 如果您还有应用未扫描到的媒体文件,请添加所在文件夹路径。 缩放 @@ -47,17 +48,17 @@ 宽度 高度 保持纵横比 - 请输入合法的分辨率 + 请输入有效分辨率 编辑器 保存 旋转 路径 - 无效的图片路径 - 图像编辑失败 - 编辑方式: - 没有可用的图片编辑器 + 无效图片路径 + 图片编辑失败 + 编辑方式: + 未找到可用图片编辑器 未知的文件路径 不能覆盖源文件 向左旋转 @@ -66,16 +67,17 @@ 翻转 水平翻转 垂直翻转 - Out of memory error + 内存不足 + Edit with Simple Wallpaper 设为壁纸 壁纸设置失败 设为壁纸... - 没有应用可用 - 壁纸应用中… - 壁纸应用成功 + 未找到可用应用 + 正在设置壁纸… + 壁纸设置成功 纵向长宽比 横向长宽比 @@ -84,10 +86,10 @@ 自动播放 显示文件名 显示多媒体文件 - 仅图像 + 仅图片 仅视频 仅 GIF - 图片, 视频, GIF + 图片,视频,GIF 图片和视频 循环播放视频 GIF 缩略图 @@ -98,7 +100,7 @@ 设备方向 根据长宽比 全屏时黑色背景 - Scroll thumbnails horizontally + 水平滚动缩略图 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index fdd431271..fdd1155a7 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -23,6 +23,7 @@ Change cover image Select photo Use default + Set as This function hides the folder by adding a \'.nomedia\' file into it, it will hide all subfolders too. You can see them by toggling the \'Show hidden folders\' option in Settings. Continue? @@ -67,13 +68,14 @@ Flip horizontally Flip vertically Out of memory error + Edit with 簡易桌布 設定為桌布 桌布設定失敗 用其他應用軟體設定桌布…… - 沒有可用的應用軟體 + 沒有可用的應用軟體 正在應用軟體桌布… 成功應用軟體桌布 Portrait aspect ratio @@ -86,11 +88,11 @@ 秀出多媒體檔案 僅圖片 僅影片 - Gifs only - Images, videos, gifs + GIFs only + Images, videos, GIFs 圖片和影片 迴圈播放影片 - Animate gifs at thumbnails + Animate GIFs at thumbnails Max brightness when viewing media Crop thumbnails into squares Rotate fullscreen media by diff --git a/app/src/main/res/values/integers.xml b/app/src/main/res/values/integers.xml index 3d424225f..e27e3e8f5 100644 --- a/app/src/main/res/values/integers.xml +++ b/app/src/main/res/values/integers.xml @@ -1,4 +1,6 @@ - 2 - 3 + 2 + 3 + 3 + 4 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a65e48784..26b9fc2f8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -23,6 +23,7 @@ Change cover image Select photo Use default + Set as This function hides the folder by adding a \'.nomedia\' file into it, it will hide all subfolders too. You can see them by toggling the \'Show hidden folders\' option in Settings. Continue? @@ -67,13 +68,14 @@ Flip horizontally Flip vertically Out of memory error + Edit with Simple Wallpaper Set as Wallpaper Setting as Wallpaper failed Set as wallpaper with: - No app capable of it has been found + No app capable of it has been found Setting wallpaper… Wallpaper set successfully Portrait aspect ratio @@ -86,11 +88,11 @@ Show media Images only Videos only - Gifs only - Images, videos, gifs + GIFs only + Images, videos, GIFs Images and videos Loop videos - Animate gifs at thumbnails + Animate GIFs at thumbnails Max brightness when viewing media Crop thumbnails into squares Rotate fullscreen media by diff --git a/build.gradle b/build.gradle index bfed59203..0a26ece58 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.2' + classpath 'com.android.tools.build:gradle:2.3.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files