commit
c54fd0e940
21
CHANGELOG.md
21
CHANGELOG.md
|
@ -1,6 +1,27 @@
|
|||
Changelog
|
||||
==========
|
||||
|
||||
Version 3.4.1 *(2018-02-09)*
|
||||
----------------------------
|
||||
|
||||
* Fix some glitches around swiping fullscreen media with instant media switch or gesture brightness change enabled
|
||||
* Make changing image brightness with gestures disabled by default
|
||||
* Allow skipping forward/backward videos by pressing max/current time
|
||||
* Fix some cases of editing third party images
|
||||
* Couple other stability improvements
|
||||
|
||||
Version 3.4.0 *(2018-02-05)*
|
||||
----------------------------
|
||||
|
||||
* Allow changing the brightness by vertical gestures on images (by trubitsyn)
|
||||
* Properly fetch all media files from recognized folders
|
||||
* Make thumbnail info on the main screen a bit easier to read
|
||||
* Fix seeing blank thumbnail after deleting files in some cases
|
||||
* Reset zoom level on orientation change at fullscreen media
|
||||
* Add an optional extra check to avoid showing invalid files
|
||||
* Add a toggle to prevent showing What's new on startup
|
||||
* Many other stability and performance improvements
|
||||
|
||||
Version 3.3.1 *(2018-01-29)*
|
||||
----------------------------
|
||||
|
||||
|
|
|
@ -10,8 +10,8 @@ android {
|
|||
applicationId "com.simplemobiletools.gallery"
|
||||
minSdkVersion 16
|
||||
targetSdkVersion 27
|
||||
versionCode 159
|
||||
versionName "3.3.1"
|
||||
versionCode 161
|
||||
versionName "3.4.1"
|
||||
multiDexEnabled true
|
||||
setProperty("archivesBaseName", "gallery")
|
||||
}
|
||||
|
@ -21,6 +21,9 @@ android {
|
|||
}
|
||||
|
||||
buildTypes {
|
||||
debug {
|
||||
applicationIdSuffix ".debug"
|
||||
}
|
||||
release {
|
||||
minifyEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
|
@ -43,7 +46,7 @@ ext {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.simplemobiletools:commons:3.9.4'
|
||||
implementation 'com.simplemobiletools:commons:3.11.1'
|
||||
implementation 'com.theartofdev.edmodo:android-image-cropper:2.6.0'
|
||||
implementation 'com.android.support:multidex:1.0.2'
|
||||
implementation 'com.google.code.gson:gson:2.8.2'
|
||||
|
@ -52,7 +55,7 @@ dependencies {
|
|||
implementation 'com.github.chrisbanes:PhotoView:2.1.3'
|
||||
|
||||
//implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.9.0'
|
||||
implementation 'com.github.tibbi:subsampling-scale-image-view:v3.9.0-fork'
|
||||
implementation 'com.github.tibbi:subsampling-scale-image-view:v3.9.0.1-fork'
|
||||
|
||||
debugImplementation "com.squareup.leakcanary:leakcanary-android:$leakCanaryVersion"
|
||||
releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$leakCanaryVersion"
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_launcher_name">Gallery_debug</string>
|
||||
</resources>
|
|
@ -144,24 +144,28 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
override fun onCropImageComplete(view: CropImageView, result: CropImageView.CropResult) {
|
||||
if (result.error == null) {
|
||||
if (isCropIntent) {
|
||||
var inputStream: InputStream? = null
|
||||
var outputStream: OutputStream? = null
|
||||
try {
|
||||
val stream = ByteArrayOutputStream()
|
||||
result.bitmap.compress(CompressFormat.JPEG, 100, stream)
|
||||
inputStream = ByteArrayInputStream(stream.toByteArray())
|
||||
outputStream = contentResolver.openOutputStream(saveUri)
|
||||
inputStream.copyTo(outputStream)
|
||||
} finally {
|
||||
inputStream?.close()
|
||||
outputStream?.close()
|
||||
}
|
||||
if (saveUri.scheme == "file") {
|
||||
saveBitmapToFile(result.bitmap, saveUri.path)
|
||||
} else {
|
||||
var inputStream: InputStream? = null
|
||||
var outputStream: OutputStream? = null
|
||||
try {
|
||||
val stream = ByteArrayOutputStream()
|
||||
result.bitmap.compress(CompressFormat.JPEG, 100, stream)
|
||||
inputStream = ByteArrayInputStream(stream.toByteArray())
|
||||
outputStream = contentResolver.openOutputStream(saveUri)
|
||||
inputStream.copyTo(outputStream)
|
||||
} finally {
|
||||
inputStream?.close()
|
||||
outputStream?.close()
|
||||
}
|
||||
|
||||
Intent().apply {
|
||||
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||
setResult(RESULT_OK, this)
|
||||
Intent().apply {
|
||||
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||
setResult(RESULT_OK, this)
|
||||
}
|
||||
finish()
|
||||
}
|
||||
finish()
|
||||
} else if (saveUri.scheme == "file") {
|
||||
SaveAsDialog(this, saveUri.path, true) {
|
||||
saveBitmapToFile(result.bitmap, it)
|
||||
|
|
|
@ -22,6 +22,7 @@ import com.simplemobiletools.commons.helpers.SORT_BY_DATE_MODIFIED
|
|||
import com.simplemobiletools.commons.helpers.SORT_BY_DATE_TAKEN
|
||||
import com.simplemobiletools.commons.models.RadioItem
|
||||
import com.simplemobiletools.commons.models.Release
|
||||
import com.simplemobiletools.commons.views.MyGridLayoutManager
|
||||
import com.simplemobiletools.commons.views.MyRecyclerView
|
||||
import com.simplemobiletools.gallery.BuildConfig
|
||||
import com.simplemobiletools.gallery.R
|
||||
|
@ -369,7 +370,7 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
|||
}
|
||||
|
||||
private fun setupGridLayoutManager() {
|
||||
val layoutManager = directories_grid.layoutManager as GridLayoutManager
|
||||
val layoutManager = directories_grid.layoutManager as MyGridLayoutManager
|
||||
if (config.scrollHorizontally) {
|
||||
layoutManager.orientation = GridLayoutManager.HORIZONTAL
|
||||
directories_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT)
|
||||
|
@ -383,7 +384,7 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
|||
|
||||
private fun initZoomListener() {
|
||||
if (config.viewTypeFolders == VIEW_TYPE_GRID) {
|
||||
val layoutManager = directories_grid.layoutManager as GridLayoutManager
|
||||
val layoutManager = directories_grid.layoutManager as MyGridLayoutManager
|
||||
mZoomListener = object : MyRecyclerView.MyZoomListener {
|
||||
override fun zoomIn() {
|
||||
if (layoutManager.spanCount > 1) {
|
||||
|
@ -405,7 +406,7 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
|||
}
|
||||
|
||||
private fun setupListLayoutManager() {
|
||||
val layoutManager = directories_grid.layoutManager as GridLayoutManager
|
||||
val layoutManager = directories_grid.layoutManager as MyGridLayoutManager
|
||||
layoutManager.spanCount = 1
|
||||
layoutManager.orientation = GridLayoutManager.VERTICAL
|
||||
directories_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||
|
@ -424,7 +425,7 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
|||
private fun increaseColumnCount() {
|
||||
directories_vertical_fastscroller.measureRecyclerViewOnRedraw()
|
||||
directories_horizontal_fastscroller.measureRecyclerViewOnRedraw()
|
||||
config.dirColumnCnt = ++(directories_grid.layoutManager as GridLayoutManager).spanCount
|
||||
config.dirColumnCnt = ++(directories_grid.layoutManager as MyGridLayoutManager).spanCount
|
||||
invalidateOptionsMenu()
|
||||
directories_grid.adapter?.notifyDataSetChanged()
|
||||
}
|
||||
|
@ -432,7 +433,7 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
|||
private fun reduceColumnCount() {
|
||||
directories_vertical_fastscroller.measureRecyclerViewOnRedraw()
|
||||
directories_horizontal_fastscroller.measureRecyclerViewOnRedraw()
|
||||
config.dirColumnCnt = --(directories_grid.layoutManager as GridLayoutManager).spanCount
|
||||
config.dirColumnCnt = --(directories_grid.layoutManager as MyGridLayoutManager).spanCount
|
||||
invalidateOptionsMenu()
|
||||
directories_grid.adapter?.notifyDataSetChanged()
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ import android.graphics.Bitmap
|
|||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.support.v4.view.MenuItemCompat
|
||||
import android.support.v7.widget.GridLayoutManager
|
||||
import android.support.v7.widget.SearchView
|
||||
import android.view.Menu
|
||||
|
@ -26,6 +27,7 @@ import com.simplemobiletools.commons.extensions.*
|
|||
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE
|
||||
import com.simplemobiletools.commons.helpers.REQUEST_EDIT_IMAGE
|
||||
import com.simplemobiletools.commons.models.RadioItem
|
||||
import com.simplemobiletools.commons.views.MyGridLayoutManager
|
||||
import com.simplemobiletools.commons.views.MyRecyclerView
|
||||
import com.simplemobiletools.gallery.R
|
||||
import com.simplemobiletools.gallery.adapters.MediaAdapter
|
||||
|
@ -52,6 +54,7 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
|||
private var mAllowPickingMultiple = false
|
||||
private var mShowAll = false
|
||||
private var mLoadedInitialPhotos = false
|
||||
private var mIsSearchOpen = false
|
||||
private var mLatestMediaId = 0L
|
||||
private var mLastMediaHandler = Handler()
|
||||
private var mTempShowHiddenHandler = Handler()
|
||||
|
@ -81,7 +84,14 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
|||
}
|
||||
|
||||
media_refresh_layout.setOnRefreshListener { getMedia() }
|
||||
mPath = intent.getStringExtra(DIRECTORY)
|
||||
try {
|
||||
mPath = intent.getStringExtra(DIRECTORY)
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
finish()
|
||||
return
|
||||
}
|
||||
|
||||
storeStateVariables()
|
||||
if (mShowAll)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(false)
|
||||
|
@ -233,11 +243,25 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
|||
override fun onQueryTextSubmit(query: String) = false
|
||||
|
||||
override fun onQueryTextChange(newText: String): Boolean {
|
||||
searchQueryChanged(newText)
|
||||
if (mIsSearchOpen) {
|
||||
searchQueryChanged(newText)
|
||||
}
|
||||
return true
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
MenuItemCompat.setOnActionExpandListener(mSearchMenuItem, object : MenuItemCompat.OnActionExpandListener {
|
||||
override fun onMenuItemActionExpand(item: MenuItem?): Boolean {
|
||||
mIsSearchOpen = true
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onMenuItemActionCollapse(item: MenuItem?): Boolean {
|
||||
mIsSearchOpen = false
|
||||
return true
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private fun searchQueryChanged(text: String) {
|
||||
|
@ -479,7 +503,7 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
|||
}
|
||||
|
||||
private fun setupGridLayoutManager() {
|
||||
val layoutManager = media_grid.layoutManager as GridLayoutManager
|
||||
val layoutManager = media_grid.layoutManager as MyGridLayoutManager
|
||||
if (config.scrollHorizontally) {
|
||||
layoutManager.orientation = GridLayoutManager.HORIZONTAL
|
||||
media_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT)
|
||||
|
@ -493,7 +517,7 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
|||
|
||||
private fun initZoomListener() {
|
||||
if (config.viewTypeFiles == VIEW_TYPE_GRID) {
|
||||
val layoutManager = media_grid.layoutManager as GridLayoutManager
|
||||
val layoutManager = media_grid.layoutManager as MyGridLayoutManager
|
||||
mZoomListener = object : MyRecyclerView.MyZoomListener {
|
||||
override fun zoomIn() {
|
||||
if (layoutManager.spanCount > 1) {
|
||||
|
@ -515,7 +539,7 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
|||
}
|
||||
|
||||
private fun setupListLayoutManager() {
|
||||
val layoutManager = media_grid.layoutManager as GridLayoutManager
|
||||
val layoutManager = media_grid.layoutManager as MyGridLayoutManager
|
||||
layoutManager.spanCount = 1
|
||||
layoutManager.orientation = GridLayoutManager.VERTICAL
|
||||
media_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||
|
@ -525,7 +549,7 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
|||
private fun increaseColumnCount() {
|
||||
media_vertical_fastscroller.measureRecyclerViewOnRedraw()
|
||||
media_horizontal_fastscroller.measureRecyclerViewOnRedraw()
|
||||
config.mediaColumnCnt = ++(media_grid.layoutManager as GridLayoutManager).spanCount
|
||||
config.mediaColumnCnt = ++(media_grid.layoutManager as MyGridLayoutManager).spanCount
|
||||
invalidateOptionsMenu()
|
||||
media_grid.adapter?.notifyDataSetChanged()
|
||||
}
|
||||
|
@ -533,7 +557,7 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
|||
private fun reduceColumnCount() {
|
||||
media_vertical_fastscroller.measureRecyclerViewOnRedraw()
|
||||
media_horizontal_fastscroller.measureRecyclerViewOnRedraw()
|
||||
config.mediaColumnCnt = --(media_grid.layoutManager as GridLayoutManager).spanCount
|
||||
config.mediaColumnCnt = --(media_grid.layoutManager as MyGridLayoutManager).spanCount
|
||||
invalidateOptionsMenu()
|
||||
media_grid.adapter?.notifyDataSetChanged()
|
||||
}
|
||||
|
@ -633,6 +657,7 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
|||
val subList = mMedia.subList(0, Math.min(SAVE_MEDIA_CNT, mMedia.size))
|
||||
val json = Gson().toJson(subList)
|
||||
config.saveFolderMedia(mPath, json)
|
||||
} catch (ignored: Exception) {
|
||||
} catch (ignored: OutOfMemoryError) {
|
||||
}
|
||||
}.start()
|
||||
|
|
|
@ -33,10 +33,12 @@ class SettingsActivity : SimpleActivity() {
|
|||
|
||||
setupCustomizeColors()
|
||||
setupUseEnglish()
|
||||
setupAvoidWhatsNew()
|
||||
setupManageIncludedFolders()
|
||||
setupManageExcludedFolders()
|
||||
setupManageHiddenFolders()
|
||||
setupShowHiddenItems()
|
||||
setupDoExtraCheck()
|
||||
setupAutoplayVideos()
|
||||
setupLoopVideos()
|
||||
setupAnimateGifs()
|
||||
|
@ -50,6 +52,7 @@ class SettingsActivity : SimpleActivity() {
|
|||
setupPasswordProtection()
|
||||
setupAppPasswordProtection()
|
||||
setupDeleteEmptyFolders()
|
||||
setupAllowPhotoGestures()
|
||||
setupAllowVideoGestures()
|
||||
setupShowMediaCount()
|
||||
setupKeepLastModified()
|
||||
|
@ -88,6 +91,14 @@ class SettingsActivity : SimpleActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
private fun setupAvoidWhatsNew() {
|
||||
settings_avoid_whats_new.isChecked = config.avoidWhatsNew
|
||||
settings_avoid_whats_new_holder.setOnClickListener {
|
||||
settings_avoid_whats_new.toggle()
|
||||
config.avoidWhatsNew = settings_avoid_whats_new.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupManageIncludedFolders() {
|
||||
settings_manage_included_folders_holder.setOnClickListener {
|
||||
startActivity(Intent(this, IncludedFoldersActivity::class.java))
|
||||
|
@ -126,6 +137,14 @@ class SettingsActivity : SimpleActivity() {
|
|||
config.showHiddenMedia = settings_show_hidden_items.isChecked
|
||||
}
|
||||
|
||||
private fun setupDoExtraCheck() {
|
||||
settings_do_extra_check.isChecked = config.doExtraCheck
|
||||
settings_do_extra_check_holder.setOnClickListener {
|
||||
settings_do_extra_check.toggle()
|
||||
config.doExtraCheck = settings_do_extra_check.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupAutoplayVideos() {
|
||||
settings_autoplay_videos.isChecked = config.autoplayVideos
|
||||
settings_autoplay_videos_holder.setOnClickListener {
|
||||
|
@ -250,6 +269,14 @@ class SettingsActivity : SimpleActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
private fun setupAllowPhotoGestures() {
|
||||
settings_allow_photo_gestures.isChecked = config.allowPhotoGestures
|
||||
settings_allow_photo_gestures_holder.setOnClickListener {
|
||||
settings_allow_photo_gestures.toggle()
|
||||
config.allowPhotoGestures = settings_allow_photo_gestures.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupAllowVideoGestures() {
|
||||
settings_allow_video_gestures.isChecked = config.allowVideoGestures
|
||||
settings_allow_video_gestures_holder.setOnClickListener {
|
||||
|
|
|
@ -181,8 +181,10 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
}
|
||||
|
||||
val file = File(mPath)
|
||||
if (!file.exists()) {
|
||||
deleteFromMediaStore(file)
|
||||
if (!file.exists() && file.length() == 0L) {
|
||||
Thread {
|
||||
deleteFromMediaStore(file)
|
||||
}.start()
|
||||
finish()
|
||||
return
|
||||
}
|
||||
|
@ -211,7 +213,6 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
}
|
||||
|
||||
refreshViewPager()
|
||||
scanPath(mPath)
|
||||
|
||||
if (config.blackBackground) {
|
||||
view_pager.background = ColorDrawable(Color.BLACK)
|
||||
|
@ -642,7 +643,13 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
}
|
||||
|
||||
private fun showOnMap() {
|
||||
val exif = ExifInterface(getCurrentPath())
|
||||
val exif: ExifInterface
|
||||
try {
|
||||
exif = ExifInterface(getCurrentPath())
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
return
|
||||
}
|
||||
val lat = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE)
|
||||
val lat_ref = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF)
|
||||
val lon = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE)
|
||||
|
|
|
@ -349,7 +349,7 @@ class DirectoryAdapter(activity: BaseSimpleActivity, var dirs: MutableList<Direc
|
|||
|
||||
activity.loadImage(thumbnailType, directory.tmb, dir_thumbnail, scrollHorizontally, animateGifs, cropThumbnails)
|
||||
dir_pin.beVisibleIf(pinnedFolders.contains(directory.path))
|
||||
dir_sd_card.beVisibleIf(activity.isPathOnSD(directory.path))
|
||||
dir_sd_card.beVisibleIf(directory.isOnSDCard)
|
||||
photo_cnt.beVisibleIf(showMediaCount)
|
||||
|
||||
if (isListViewType) {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.simplemobiletools.gallery.adapters
|
||||
|
||||
import android.os.Bundle
|
||||
import android.os.Parcelable
|
||||
import android.support.v4.app.Fragment
|
||||
import android.support.v4.app.FragmentManager
|
||||
import android.support.v4.app.FragmentStatePagerAdapter
|
||||
|
@ -47,11 +48,18 @@ class MyPagerAdapter(val activity: ViewPagerActivity, fm: FragmentManager, val m
|
|||
super.destroyItem(container, position, any)
|
||||
}
|
||||
|
||||
fun getCurrentFragment(position: Int) = fragments.get(position)
|
||||
fun getCurrentFragment(position: Int) = fragments[position]
|
||||
|
||||
fun toggleFullscreen(isFullscreen: Boolean) {
|
||||
for ((pos, fragment) in fragments) {
|
||||
fragment.fullscreenToggled(isFullscreen)
|
||||
}
|
||||
}
|
||||
|
||||
// try fixing TransactionTooLargeException crash on Android Nougat, tip from https://stackoverflow.com/a/43193425/1967672
|
||||
override fun saveState(): Parcelable? {
|
||||
val bundle = super.saveState() as Bundle?
|
||||
bundle!!.putParcelableArray("states", null)
|
||||
return bundle
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,10 +2,7 @@ package com.simplemobiletools.gallery.asynctasks
|
|||
|
||||
import android.content.Context
|
||||
import android.os.AsyncTask
|
||||
import com.simplemobiletools.commons.extensions.getFilenameFromPath
|
||||
import com.simplemobiletools.commons.extensions.hasPermission
|
||||
import com.simplemobiletools.commons.extensions.internalStoragePath
|
||||
import com.simplemobiletools.commons.extensions.sdCardPath
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE
|
||||
import com.simplemobiletools.commons.helpers.SORT_DESCENDING
|
||||
import com.simplemobiletools.gallery.R
|
||||
|
@ -22,8 +19,9 @@ class GetDirectoriesAsynctask(val context: Context, val isPickVideo: Boolean, va
|
|||
val mediaFetcher = MediaFetcher(context)
|
||||
|
||||
override fun doInBackground(vararg params: Void): ArrayList<Directory> {
|
||||
if (!context.hasPermission(PERMISSION_WRITE_STORAGE))
|
||||
if (!context.hasPermission(PERMISSION_WRITE_STORAGE)) {
|
||||
return ArrayList()
|
||||
}
|
||||
|
||||
val config = context.config
|
||||
val groupedMedia = mediaFetcher.getMediaByDirectories(isPickVideo, isPickImage)
|
||||
|
@ -57,7 +55,7 @@ class GetDirectoriesAsynctask(val context: Context, val isPickVideo: Boolean, va
|
|||
val lastModified = if (config.directorySorting and SORT_DESCENDING > 0) Math.max(firstItem.modified, lastItem.modified) else Math.min(firstItem.modified, lastItem.modified)
|
||||
val dateTaken = if (config.directorySorting and SORT_DESCENDING > 0) Math.max(firstItem.taken, lastItem.taken) else Math.min(firstItem.taken, lastItem.taken)
|
||||
val size = curMedia.sumByLong { it.size }
|
||||
val directory = Directory(parentDir, thumbnail, dirName, curMedia.size, lastModified, dateTaken, size)
|
||||
val directory = Directory(parentDir, thumbnail, dirName, curMedia.size, lastModified, dateTaken, size, context.isPathOnSD(parentDir))
|
||||
directories.add(directory)
|
||||
}
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ import com.simplemobiletools.commons.extensions.beGoneIf
|
|||
import com.simplemobiletools.commons.extensions.beVisibleIf
|
||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
import com.simplemobiletools.commons.extensions.toast
|
||||
import com.simplemobiletools.commons.views.MyGridLayoutManager
|
||||
import com.simplemobiletools.gallery.R
|
||||
import com.simplemobiletools.gallery.adapters.DirectoryAdapter
|
||||
import com.simplemobiletools.gallery.asynctasks.GetDirectoriesAsynctask
|
||||
|
@ -26,7 +27,7 @@ class PickDirectoryDialog(val activity: BaseSimpleActivity, val sourcePath: Stri
|
|||
var isGridViewType = activity.config.viewTypeFolders == VIEW_TYPE_GRID
|
||||
|
||||
init {
|
||||
(view.directories_grid.layoutManager as GridLayoutManager).apply {
|
||||
(view.directories_grid.layoutManager as MyGridLayoutManager).apply {
|
||||
orientation = if (activity.config.scrollHorizontally && isGridViewType) GridLayoutManager.HORIZONTAL else GridLayoutManager.VERTICAL
|
||||
spanCount = if (isGridViewType) activity.config.dirColumnCnt else 1
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
|||
import com.simplemobiletools.commons.extensions.beGoneIf
|
||||
import com.simplemobiletools.commons.extensions.beVisibleIf
|
||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
import com.simplemobiletools.commons.views.MyGridLayoutManager
|
||||
import com.simplemobiletools.gallery.R
|
||||
import com.simplemobiletools.gallery.adapters.MediaAdapter
|
||||
import com.simplemobiletools.gallery.asynctasks.GetMediaAsynctask
|
||||
|
@ -22,7 +23,7 @@ class PickMediumDialog(val activity: BaseSimpleActivity, val path: String, val c
|
|||
var isGridViewType = activity.config.viewTypeFiles == VIEW_TYPE_GRID
|
||||
|
||||
init {
|
||||
(view.media_grid.layoutManager as GridLayoutManager).apply {
|
||||
(view.media_grid.layoutManager as MyGridLayoutManager).apply {
|
||||
orientation = if (activity.config.scrollHorizontally && isGridViewType) GridLayoutManager.HORIZONTAL else GridLayoutManager.VERTICAL
|
||||
spanCount = if (isGridViewType) activity.config.mediaColumnCnt else 1
|
||||
}
|
||||
|
|
|
@ -185,7 +185,7 @@ fun BaseSimpleActivity.addTempFolderIfNeeded(dirs: ArrayList<Directory>): ArrayL
|
|||
val directories = ArrayList<Directory>()
|
||||
val tempFolderPath = config.tempFolderPath
|
||||
if (tempFolderPath.isNotEmpty()) {
|
||||
val newFolder = Directory(tempFolderPath, "", tempFolderPath.getFilenameFromPath(), 0, 0, 0, 0L)
|
||||
val newFolder = Directory(tempFolderPath, "", tempFolderPath.getFilenameFromPath(), 0, 0, 0, 0L, isPathOnSD(tempFolderPath))
|
||||
directories.add(newFolder)
|
||||
}
|
||||
directories.addAll(dirs)
|
||||
|
|
|
@ -23,6 +23,7 @@ val Context.windowManager: WindowManager get() = getSystemService(Context.WINDOW
|
|||
val Context.navigationBarRight: Boolean get() = usableScreenSize.x < realScreenSize.x
|
||||
val Context.navigationBarBottom: Boolean get() = usableScreenSize.y < realScreenSize.y
|
||||
val Context.navigationBarHeight: Int get() = if (navigationBarBottom) navigationBarSize.y else 0
|
||||
val Context.navigationBarWidth: Int get() = if (navigationBarRight) navigationBarSize.x else 0
|
||||
|
||||
internal val Context.navigationBarSize: Point
|
||||
get() = when {
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
package com.simplemobiletools.gallery.extensions
|
||||
|
||||
import android.os.SystemClock
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
|
||||
fun View.sendFakeClick(x: Float, y: Float) {
|
||||
val uptime = SystemClock.uptimeMillis()
|
||||
val event = MotionEvent.obtain(uptime, uptime, MotionEvent.ACTION_DOWN, x, y, 0)
|
||||
dispatchTouchEvent(event)
|
||||
event.action = MotionEvent.ACTION_UP
|
||||
dispatchTouchEvent(event)
|
||||
}
|
|
@ -58,6 +58,19 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
gif_view.setOnClickListener { photoClicked() }
|
||||
instant_prev_item.setOnClickListener { listener?.goToPrevItem() }
|
||||
instant_next_item.setOnClickListener { listener?.goToNextItem() }
|
||||
|
||||
instant_prev_item.parentView = container
|
||||
instant_next_item.parentView = container
|
||||
|
||||
photo_brightness_controller.initialize(activity!!, slide_info, true, container) { x, y ->
|
||||
view.apply {
|
||||
if (subsampling_view.isVisible()) {
|
||||
subsampling_view.sendFakeClick(x, y)
|
||||
} else {
|
||||
gif_view.sendFakeClick(x, y)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
storeStateVariables()
|
||||
|
@ -116,9 +129,15 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
checkExtendedDetails()
|
||||
}
|
||||
|
||||
val allowPhotoGestures = context!!.config.allowPhotoGestures
|
||||
val allowInstantChange = context!!.config.allowInstantChange
|
||||
view.instant_prev_item.beVisibleIf(allowInstantChange)
|
||||
view.instant_next_item.beVisibleIf(allowInstantChange)
|
||||
|
||||
view.apply {
|
||||
photo_brightness_controller.beVisibleIf(allowPhotoGestures)
|
||||
instant_prev_item.beVisibleIf(allowInstantChange)
|
||||
instant_next_item.beVisibleIf(allowInstantChange)
|
||||
}
|
||||
|
||||
storeStateVariables()
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@ import android.net.Uri
|
|||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.provider.Settings
|
||||
import android.support.annotation.RequiresApi
|
||||
import android.util.DisplayMetrics
|
||||
import android.view.*
|
||||
|
@ -17,16 +16,14 @@ import android.widget.TextView
|
|||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.gallery.R
|
||||
import com.simplemobiletools.gallery.activities.VideoActivity
|
||||
import com.simplemobiletools.gallery.activities.ViewPagerActivity
|
||||
import com.simplemobiletools.gallery.extensions.*
|
||||
import com.simplemobiletools.gallery.helpers.MEDIUM
|
||||
import com.simplemobiletools.gallery.helpers.MediaSideScroll
|
||||
import com.simplemobiletools.gallery.models.Medium
|
||||
import kotlinx.android.synthetic.main.pager_video_item.view.*
|
||||
import java.io.IOException
|
||||
|
||||
class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSeekBarChangeListener {
|
||||
private val CLICK_MAX_DURATION = 150
|
||||
private val SLIDE_INFO_FADE_DELAY = 1000L
|
||||
private val PROGRESS = "progress"
|
||||
|
||||
private var mMediaPlayer: MediaPlayer? = null
|
||||
|
@ -50,21 +47,13 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
|||
private var mDuration = 0
|
||||
private var mEncodedPath = ""
|
||||
|
||||
private var mTouchDownX = 0f
|
||||
private var mTouchDownY = 0f
|
||||
private var mTouchDownTime = 0L
|
||||
private var mTouchDownVolume = 0
|
||||
private var mTouchDownBrightness = -1
|
||||
private var mTempBrightness = 0
|
||||
private var mLastTouchY = 0f
|
||||
|
||||
private var mSlideInfoText = ""
|
||||
private var mSlideInfoFadeHandler = Handler()
|
||||
|
||||
private var mStoredShowExtendedDetails = false
|
||||
private var mStoredHideExtendedDetails = false
|
||||
private var mStoredExtendedDetails = 0
|
||||
|
||||
private lateinit var brightnessSideScroll: MediaSideScroll
|
||||
private lateinit var volumeSideScroll: MediaSideScroll
|
||||
|
||||
lateinit var medium: Medium
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
|
@ -91,6 +80,21 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
|||
checkFullscreen()
|
||||
wasInit = true
|
||||
|
||||
mView!!.apply {
|
||||
brightnessSideScroll = video_brightness_controller
|
||||
brightnessSideScroll.initialize(activity!!, slide_info, true, container) { x, y ->
|
||||
video_holder.performClick()
|
||||
}
|
||||
|
||||
volumeSideScroll = video_volume_controller
|
||||
volumeSideScroll.initialize(activity!!, slide_info, false, container) { x, y ->
|
||||
video_holder.performClick()
|
||||
}
|
||||
|
||||
video_curr_time.setOnClickListener { skip(false) }
|
||||
video_duration.setOnClickListener { skip(true) }
|
||||
}
|
||||
|
||||
return mView
|
||||
}
|
||||
|
||||
|
@ -145,15 +149,6 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
|||
mSurfaceHolder!!.addCallback(this)
|
||||
mSurfaceView!!.setOnClickListener { toggleFullscreen() }
|
||||
mView!!.video_holder.setOnClickListener { toggleFullscreen() }
|
||||
mView!!.video_volume_controller.setOnTouchListener { v, event ->
|
||||
handleVolumeTouched(event)
|
||||
true
|
||||
}
|
||||
|
||||
mView!!.video_brightness_controller.setOnTouchListener { v, event ->
|
||||
handleBrightnessTouched(event)
|
||||
true
|
||||
}
|
||||
|
||||
initTimeHolder()
|
||||
checkExtendedDetails()
|
||||
|
@ -186,142 +181,19 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
|||
listener?.fragmentClicked()
|
||||
}
|
||||
|
||||
private fun handleVolumeTouched(event: MotionEvent) {
|
||||
when (event.action) {
|
||||
MotionEvent.ACTION_DOWN -> {
|
||||
mTouchDownX = event.x
|
||||
mTouchDownY = event.y
|
||||
mLastTouchY = event.y
|
||||
mTouchDownTime = System.currentTimeMillis()
|
||||
mTouchDownVolume = getCurrentVolume()
|
||||
mSlideInfoText = "${getString(R.string.volume)}:\n"
|
||||
}
|
||||
MotionEvent.ACTION_MOVE -> {
|
||||
val diffX = mTouchDownX - event.x
|
||||
val diffY = mTouchDownY - event.y
|
||||
|
||||
if (Math.abs(diffY) > 20 && Math.abs(diffY) > Math.abs(diffX)) {
|
||||
var percent = ((diffY / ViewPagerActivity.screenHeight) * 100).toInt() * 3
|
||||
percent = Math.min(100, Math.max(-100, percent))
|
||||
|
||||
if ((percent == 100 && event.y > mLastTouchY) || (percent == -100 && event.y < mLastTouchY)) {
|
||||
mTouchDownY = event.y
|
||||
mTouchDownVolume = getCurrentVolume()
|
||||
}
|
||||
|
||||
volumePercentChanged(percent)
|
||||
}
|
||||
mLastTouchY = event.y
|
||||
}
|
||||
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
|
||||
val diffX = Math.abs(event.x - mTouchDownX)
|
||||
val diffY = Math.abs(event.y - mTouchDownY)
|
||||
if (System.currentTimeMillis() - mTouchDownTime < CLICK_MAX_DURATION && diffX < 20 && diffY < 20) {
|
||||
mView!!.video_holder.performClick()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleBrightnessTouched(event: MotionEvent) {
|
||||
when (event.action) {
|
||||
MotionEvent.ACTION_DOWN -> {
|
||||
mTouchDownX = event.x
|
||||
mTouchDownY = event.y
|
||||
mLastTouchY = event.y
|
||||
mTouchDownTime = System.currentTimeMillis()
|
||||
mSlideInfoText = "${getString(R.string.brightness)}:\n"
|
||||
if (mTouchDownBrightness == -1)
|
||||
mTouchDownBrightness = getCurrentBrightness()
|
||||
}
|
||||
MotionEvent.ACTION_MOVE -> {
|
||||
val diffX = mTouchDownX - event.x
|
||||
val diffY = mTouchDownY - event.y
|
||||
|
||||
if (Math.abs(diffY) > 20 && Math.abs(diffY) > Math.abs(diffX)) {
|
||||
var percent = ((diffY / ViewPagerActivity.screenHeight) * 100).toInt() * 3
|
||||
percent = Math.min(100, Math.max(-100, percent))
|
||||
|
||||
if ((percent == 100 && event.y > mLastTouchY) || (percent == -100 && event.y < mLastTouchY)) {
|
||||
mTouchDownY = event.y
|
||||
mTouchDownBrightness = mTempBrightness
|
||||
}
|
||||
|
||||
brightnessPercentChanged(percent)
|
||||
}
|
||||
mLastTouchY = event.y
|
||||
}
|
||||
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
|
||||
val diffX = Math.abs(event.x - mTouchDownX)
|
||||
val diffY = Math.abs(event.y - mTouchDownY)
|
||||
if (System.currentTimeMillis() - mTouchDownTime < CLICK_MAX_DURATION && diffX < 20 && diffY < 20) {
|
||||
mView!!.video_holder.performClick()
|
||||
}
|
||||
mTouchDownBrightness = mTempBrightness
|
||||
}
|
||||
}
|
||||
mView!!.video_holder
|
||||
}
|
||||
|
||||
private fun getCurrentVolume() = context!!.audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
|
||||
|
||||
private fun getCurrentBrightness() = Settings.System.getInt(activity!!.contentResolver, Settings.System.SCREEN_BRIGHTNESS)
|
||||
|
||||
private fun volumePercentChanged(percent: Int) {
|
||||
val stream = AudioManager.STREAM_MUSIC
|
||||
val maxVolume = context!!.audioManager.getStreamMaxVolume(stream)
|
||||
val percentPerPoint = 100 / maxVolume
|
||||
val addPoints = percent / percentPerPoint
|
||||
val newVolume = Math.min(maxVolume, Math.max(0, mTouchDownVolume + addPoints))
|
||||
context!!.audioManager.setStreamVolume(stream, newVolume, 0)
|
||||
|
||||
val absolutePercent = ((newVolume / maxVolume.toFloat()) * 100).toInt()
|
||||
mView!!.slide_info.apply {
|
||||
text = "$mSlideInfoText$absolutePercent%"
|
||||
alpha = 1f
|
||||
}
|
||||
|
||||
mSlideInfoFadeHandler.removeCallbacksAndMessages(null)
|
||||
mSlideInfoFadeHandler.postDelayed({
|
||||
mView!!.slide_info.animate().alpha(0f)
|
||||
}, SLIDE_INFO_FADE_DELAY)
|
||||
}
|
||||
|
||||
private fun brightnessPercentChanged(percent: Int) {
|
||||
val maxBrightness = 255f
|
||||
var newBrightness = (mTouchDownBrightness + 2.55 * percent).toFloat()
|
||||
newBrightness = Math.min(maxBrightness, Math.max(0f, newBrightness))
|
||||
mTempBrightness = newBrightness.toInt()
|
||||
|
||||
val absolutePercent = ((newBrightness / maxBrightness) * 100).toInt()
|
||||
mView!!.slide_info.apply {
|
||||
text = "$mSlideInfoText$absolutePercent%"
|
||||
alpha = 1f
|
||||
}
|
||||
|
||||
val attributes = activity!!.window.attributes
|
||||
attributes.screenBrightness = absolutePercent / 100f
|
||||
activity!!.window.attributes = attributes
|
||||
|
||||
mSlideInfoFadeHandler.removeCallbacksAndMessages(null)
|
||||
mSlideInfoFadeHandler.postDelayed({
|
||||
mView!!.slide_info.animate().alpha(0f)
|
||||
}, SLIDE_INFO_FADE_DELAY)
|
||||
}
|
||||
|
||||
private fun initTimeHolder() {
|
||||
val res = resources
|
||||
val height = context!!.navigationBarHeight
|
||||
val left = mTimeHolder!!.paddingLeft
|
||||
val top = mTimeHolder!!.paddingTop
|
||||
var right = res.getDimension(R.dimen.timer_padding).toInt()
|
||||
var right = mTimeHolder!!.paddingRight
|
||||
var bottom = 0
|
||||
|
||||
if (hasNavBar()) {
|
||||
if (res.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) {
|
||||
bottom += height
|
||||
bottom += context!!.navigationBarHeight
|
||||
} else {
|
||||
right += height
|
||||
right += context!!.navigationBarWidth
|
||||
bottom += context!!.navigationBarHeight
|
||||
}
|
||||
mTimeHolder!!.setPadding(left, top, right, bottom)
|
||||
|
@ -331,8 +203,9 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
|||
mSeekBar = mView!!.video_seekbar
|
||||
mSeekBar!!.setOnSeekBarChangeListener(this)
|
||||
|
||||
if (mIsFullscreen)
|
||||
if (mIsFullscreen) {
|
||||
mTimeHolder!!.beInvisible()
|
||||
}
|
||||
}
|
||||
|
||||
private fun hasNavBar(): Boolean {
|
||||
|
@ -386,8 +259,9 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
|||
}
|
||||
|
||||
private fun checkFullscreen() {
|
||||
if (activity == null)
|
||||
if (activity == null) {
|
||||
return
|
||||
}
|
||||
|
||||
var anim = android.R.anim.fade_in
|
||||
if (mIsFullscreen) {
|
||||
|
@ -596,6 +470,16 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
|||
}
|
||||
}
|
||||
|
||||
private fun skip(forward: Boolean) {
|
||||
val curr = mMediaPlayer!!.currentPosition
|
||||
val twoPercents = mMediaPlayer!!.duration / 50
|
||||
val newProgress = if (forward) curr + twoPercents else curr - twoPercents
|
||||
setProgress(Math.round(newProgress / 1000f))
|
||||
if (!mIsPlaying) {
|
||||
togglePlayPause()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
||||
if (mMediaPlayer != null && fromUser) {
|
||||
setProgress(progress)
|
||||
|
|
|
@ -253,6 +253,10 @@ class Config(context: Context) : BaseConfig(context) {
|
|||
get() = prefs.getBoolean(DELETE_EMPTY_FOLDERS, false)
|
||||
set(deleteEmptyFolders) = prefs.edit().putBoolean(DELETE_EMPTY_FOLDERS, deleteEmptyFolders).apply()
|
||||
|
||||
var allowPhotoGestures: Boolean
|
||||
get() = prefs.getBoolean(ALLOW_PHOTO_GESTURES, false)
|
||||
set(allowPhotoGestures) = prefs.edit().putBoolean(ALLOW_PHOTO_GESTURES, allowPhotoGestures).apply()
|
||||
|
||||
var allowVideoGestures: Boolean
|
||||
get() = prefs.getBoolean(ALLOW_VIDEO_GESTURES, true)
|
||||
set(allowVideoGestures) = prefs.edit().putBoolean(ALLOW_VIDEO_GESTURES, allowVideoGestures).apply()
|
||||
|
@ -316,4 +320,8 @@ class Config(context: Context) : BaseConfig(context) {
|
|||
var extendedDetails: Int
|
||||
get() = prefs.getInt(EXTENDED_DETAILS, EXT_RESOLUTION or EXT_LAST_MODIFIED or EXT_EXIF_PROPERTIES)
|
||||
set(extendedDetails) = prefs.edit().putInt(EXTENDED_DETAILS, extendedDetails).apply()
|
||||
|
||||
var doExtraCheck: Boolean
|
||||
get() = prefs.getBoolean(DO_EXTRA_CHECK, false)
|
||||
set(doExtraCheck) = prefs.edit().putBoolean(DO_EXTRA_CHECK, doExtraCheck).apply()
|
||||
}
|
||||
|
|
|
@ -35,6 +35,7 @@ const val SCROLL_HORIZONTALLY = "scroll_horizontally"
|
|||
const val HIDE_SYSTEM_UI = "hide_system_ui"
|
||||
const val REPLACE_SHARE_WITH_ROTATE = "replace_share_with_rotate"
|
||||
const val DELETE_EMPTY_FOLDERS = "delete_empty_folders"
|
||||
const val ALLOW_PHOTO_GESTURES = "allow_photo_gestures"
|
||||
const val ALLOW_VIDEO_GESTURES = "allow_video_gestures"
|
||||
const val SHOW_MEDIA_COUNT = "show_media_count"
|
||||
const val TEMP_FOLDER_PATH = "temp_folder_path"
|
||||
|
@ -46,6 +47,7 @@ const val HIDE_EXTENDED_DETAILS = "hide_extended_details"
|
|||
const val ONE_FINGER_ZOOM = "one_finger_zoom"
|
||||
const val ALLOW_INSTANT_CHANGE = "allow_instant_change"
|
||||
const val REPLACE_ZOOMABLE_IMAGES = "replace_zoomable_images"
|
||||
const val DO_EXTRA_CHECK = "do_extra_check"
|
||||
|
||||
// slideshow
|
||||
const val SLIDESHOW_INTERVAL = "slideshow_interval"
|
||||
|
@ -62,6 +64,8 @@ const val SLIDESHOW_SCROLL_DURATION = 500L
|
|||
const val NOMEDIA = ".nomedia"
|
||||
const val MAX_COLUMN_COUNT = 20
|
||||
const val SHOW_TEMP_HIDDEN_DURATION = 600000L
|
||||
const val CLICK_MAX_DURATION = 150
|
||||
const val DRAG_THRESHOLD = 8
|
||||
|
||||
const val DIRECTORY = "directory"
|
||||
const val MEDIUM = "medium"
|
||||
|
|
|
@ -40,9 +40,42 @@ class MediaFetcher(val context: Context) {
|
|||
directories.remove(it)
|
||||
}
|
||||
|
||||
searchNewFiles(directories, showHidden)
|
||||
return directories
|
||||
}
|
||||
|
||||
// search for undiscovered media files in the folders, from which we already have some media files
|
||||
private fun searchNewFiles(directories: Map<String, ArrayList<Medium>>, showHidden: Boolean) {
|
||||
Thread {
|
||||
// try not to delay the main media file loading
|
||||
Thread.sleep(3000)
|
||||
for ((path, dirMedia) in directories) {
|
||||
if (path.contains("/.thumbnails/", true)) {
|
||||
continue
|
||||
}
|
||||
|
||||
// get the file parent this way, "path" is lowercased
|
||||
val folder = File(dirMedia.first().path).parentFile
|
||||
val files = folder.listFiles() ?: continue
|
||||
val fileCnt = files.filter { it.isFile }.size
|
||||
val newPaths = ArrayList<String>()
|
||||
|
||||
if (dirMedia.size != fileCnt) {
|
||||
val dirPaths = dirMedia.map { it.path }
|
||||
files.forEach {
|
||||
val filePath = it.absolutePath
|
||||
if ((showHidden || !it.name.startsWith(".")) && !dirPaths.contains(filePath)) {
|
||||
if (it.exists() && it.length() > 0 && it.isImageVideoGif()) {
|
||||
newPaths.add(it.absolutePath)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
context.scanPaths(newPaths)
|
||||
}
|
||||
}.start()
|
||||
}
|
||||
|
||||
fun getFilesFrom(curPath: String, isPickImage: Boolean, isPickVideo: Boolean): ArrayList<Medium> {
|
||||
val projection = arrayOf(MediaStore.Images.Media._ID,
|
||||
MediaStore.Images.Media.DISPLAY_NAME,
|
||||
|
@ -99,6 +132,7 @@ class MediaFetcher(val context: Context) {
|
|||
val filterMedia = config.filterMedia
|
||||
val showHidden = config.shouldShowHidden
|
||||
val isThirdPartyIntent = config.isThirdPartyIntent
|
||||
val doExtraCheck = config.doExtraCheck
|
||||
|
||||
cur.use {
|
||||
if (cur.moveToFirst()) {
|
||||
|
@ -137,7 +171,7 @@ class MediaFetcher(val context: Context) {
|
|||
size = file.length()
|
||||
}
|
||||
|
||||
if (size <= 0L)
|
||||
if (size <= 0L || (doExtraCheck && !file.exists()))
|
||||
continue
|
||||
|
||||
val dateTaken = cur.getLongValue(MediaStore.Images.Media.DATE_TAKEN)
|
||||
|
|
|
@ -0,0 +1,175 @@
|
|||
package com.simplemobiletools.gallery.helpers
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.media.AudioManager
|
||||
import android.os.Handler
|
||||
import android.provider.Settings
|
||||
import android.util.AttributeSet
|
||||
import android.view.MotionEvent
|
||||
import android.view.ViewGroup
|
||||
import android.widget.RelativeLayout
|
||||
import android.widget.TextView
|
||||
import com.simplemobiletools.gallery.R
|
||||
import com.simplemobiletools.gallery.activities.ViewPagerActivity
|
||||
import com.simplemobiletools.gallery.extensions.audioManager
|
||||
|
||||
// allow horizontal swipes through the layout, else it can cause glitches at zoomed in images
|
||||
class MediaSideScroll(context: Context, attrs: AttributeSet) : RelativeLayout(context, attrs) {
|
||||
private val SLIDE_INFO_FADE_DELAY = 1000L
|
||||
private var mTouchDownX = 0f
|
||||
private var mTouchDownY = 0f
|
||||
private var mTouchDownTime = 0L
|
||||
private var mTouchDownValue = -1
|
||||
private var mTempBrightness = 0
|
||||
private var mLastTouchY = 0f
|
||||
private var mIsBrightnessScroll = false
|
||||
private var mPassTouches = false
|
||||
private var dragThreshold = DRAG_THRESHOLD * context.resources.displayMetrics.density
|
||||
|
||||
private var mSlideInfoText = ""
|
||||
private var mSlideInfoFadeHandler = Handler()
|
||||
private var mParentView: ViewGroup? = null
|
||||
|
||||
private lateinit var activity: Activity
|
||||
private lateinit var slideInfoView: TextView
|
||||
private lateinit var callback: (Float, Float) -> Unit
|
||||
|
||||
fun initialize(activity: Activity, slideInfoView: TextView, isBrightness: Boolean, parentView: ViewGroup?, callback: (x: Float, y: Float) -> Unit) {
|
||||
this.activity = activity
|
||||
this.slideInfoView = slideInfoView
|
||||
this.callback = callback
|
||||
mParentView = parentView
|
||||
mIsBrightnessScroll = isBrightness
|
||||
mSlideInfoText = activity.getString(if (isBrightness) R.string.brightness else R.string.volume)
|
||||
}
|
||||
|
||||
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
|
||||
if (mPassTouches) {
|
||||
if (ev.actionMasked == MotionEvent.ACTION_DOWN) {
|
||||
mPassTouches = false
|
||||
}
|
||||
return false
|
||||
}
|
||||
return super.dispatchTouchEvent(ev)
|
||||
}
|
||||
|
||||
override fun onTouchEvent(event: MotionEvent): Boolean {
|
||||
if (mPassTouches) {
|
||||
return false
|
||||
}
|
||||
|
||||
when (event.actionMasked) {
|
||||
MotionEvent.ACTION_DOWN -> {
|
||||
mTouchDownX = event.x
|
||||
mTouchDownY = event.y
|
||||
mLastTouchY = event.y
|
||||
mTouchDownTime = System.currentTimeMillis()
|
||||
if (mIsBrightnessScroll) {
|
||||
if (mTouchDownValue == -1) {
|
||||
mTouchDownValue = getCurrentBrightness()
|
||||
}
|
||||
} else {
|
||||
mTouchDownValue = getCurrentVolume()
|
||||
}
|
||||
}
|
||||
MotionEvent.ACTION_MOVE -> {
|
||||
val diffX = mTouchDownX - event.x
|
||||
val diffY = mTouchDownY - event.y
|
||||
|
||||
if (Math.abs(diffY) > dragThreshold && Math.abs(diffY) > Math.abs(diffX)) {
|
||||
var percent = ((diffY / ViewPagerActivity.screenHeight) * 100).toInt() * 3
|
||||
percent = Math.min(100, Math.max(-100, percent))
|
||||
|
||||
if ((percent == 100 && event.y > mLastTouchY) || (percent == -100 && event.y < mLastTouchY)) {
|
||||
mTouchDownY = event.y
|
||||
mTouchDownValue = if (mIsBrightnessScroll) mTempBrightness else getCurrentVolume()
|
||||
}
|
||||
|
||||
percentChanged(percent)
|
||||
} else if (Math.abs(diffX) > dragThreshold || Math.abs(diffY) > dragThreshold) {
|
||||
if (!mPassTouches) {
|
||||
event.action = MotionEvent.ACTION_DOWN
|
||||
event.setLocation(event.rawX, event.y)
|
||||
mParentView?.dispatchTouchEvent(event)
|
||||
}
|
||||
mPassTouches = true
|
||||
mParentView?.dispatchTouchEvent(event)
|
||||
return false
|
||||
}
|
||||
mLastTouchY = event.y
|
||||
}
|
||||
MotionEvent.ACTION_UP -> {
|
||||
if (System.currentTimeMillis() - mTouchDownTime < CLICK_MAX_DURATION) {
|
||||
callback(event.rawX, event.rawY)
|
||||
}
|
||||
|
||||
if (mIsBrightnessScroll) {
|
||||
mTouchDownValue = mTempBrightness
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
private fun getCurrentVolume() = activity.audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
|
||||
|
||||
private fun getCurrentBrightness(): Int {
|
||||
return try {
|
||||
Settings.System.getInt(activity.contentResolver, Settings.System.SCREEN_BRIGHTNESS)
|
||||
} catch (e: Settings.SettingNotFoundException) {
|
||||
70
|
||||
}
|
||||
}
|
||||
|
||||
private fun percentChanged(percent: Int) {
|
||||
if (mIsBrightnessScroll) {
|
||||
brightnessPercentChanged(percent)
|
||||
} else {
|
||||
volumePercentChanged(percent)
|
||||
}
|
||||
}
|
||||
|
||||
private fun volumePercentChanged(percent: Int) {
|
||||
val stream = AudioManager.STREAM_MUSIC
|
||||
val maxVolume = activity.audioManager.getStreamMaxVolume(stream)
|
||||
val percentPerPoint = 100 / maxVolume
|
||||
val addPoints = percent / percentPerPoint
|
||||
val newVolume = Math.min(maxVolume, Math.max(0, mTouchDownValue + addPoints))
|
||||
activity.audioManager.setStreamVolume(stream, newVolume, 0)
|
||||
|
||||
val absolutePercent = ((newVolume / maxVolume.toFloat()) * 100).toInt()
|
||||
showValue(absolutePercent)
|
||||
|
||||
mSlideInfoFadeHandler.removeCallbacksAndMessages(null)
|
||||
mSlideInfoFadeHandler.postDelayed({
|
||||
slideInfoView.animate().alpha(0f)
|
||||
}, SLIDE_INFO_FADE_DELAY)
|
||||
}
|
||||
|
||||
private fun brightnessPercentChanged(percent: Int) {
|
||||
val maxBrightness = 255f
|
||||
var newBrightness = (mTouchDownValue + 2.55 * percent).toFloat()
|
||||
newBrightness = Math.min(maxBrightness, Math.max(0f, newBrightness))
|
||||
mTempBrightness = newBrightness.toInt()
|
||||
|
||||
val absolutePercent = ((newBrightness / maxBrightness) * 100).toInt()
|
||||
showValue(absolutePercent)
|
||||
|
||||
val attributes = activity.window.attributes
|
||||
attributes.screenBrightness = absolutePercent / 100f
|
||||
activity.window.attributes = attributes
|
||||
|
||||
mSlideInfoFadeHandler.removeCallbacksAndMessages(null)
|
||||
mSlideInfoFadeHandler.postDelayed({
|
||||
slideInfoView.animate().alpha(0f)
|
||||
}, SLIDE_INFO_FADE_DELAY)
|
||||
}
|
||||
|
||||
private fun showValue(percent: Int) {
|
||||
slideInfoView.apply {
|
||||
text = "$mSlideInfoText:\n$percent%"
|
||||
alpha = 1f
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,7 +6,7 @@ import com.simplemobiletools.commons.helpers.*
|
|||
import java.io.Serializable
|
||||
|
||||
data class Directory(val path: String, val tmb: String, val name: String, var mediaCnt: Int, val modified: Long, val taken: Long,
|
||||
val size: Long) : Serializable, Comparable<Directory> {
|
||||
val size: Long, val isOnSDCard: Boolean) : Serializable, Comparable<Directory> {
|
||||
companion object {
|
||||
private val serialVersionUID = -6553345863555455L
|
||||
var sorting: Int = 0
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
package com.simplemobiletools.gallery.views
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.MotionEvent
|
||||
import android.view.ViewGroup
|
||||
import android.widget.RelativeLayout
|
||||
import com.simplemobiletools.gallery.helpers.CLICK_MAX_DURATION
|
||||
import com.simplemobiletools.gallery.helpers.DRAG_THRESHOLD
|
||||
|
||||
// handle only one finger clicks, pass other events to the parent view and ignore it when received again
|
||||
class InstantItemSwitch(context: Context, attrs: AttributeSet) : RelativeLayout(context, attrs) {
|
||||
private var mTouchDownTime = 0L
|
||||
private var mTouchDownX = 0f
|
||||
private var mTouchDownY = 0f
|
||||
private var passTouches = false
|
||||
private var dragThreshold = DRAG_THRESHOLD * context.resources.displayMetrics.density
|
||||
|
||||
var parentView: ViewGroup? = null
|
||||
|
||||
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
|
||||
if (passTouches) {
|
||||
if (ev.actionMasked == MotionEvent.ACTION_DOWN) {
|
||||
passTouches = false
|
||||
}
|
||||
return false
|
||||
}
|
||||
return super.dispatchTouchEvent(ev)
|
||||
}
|
||||
|
||||
override fun onTouchEvent(event: MotionEvent): Boolean {
|
||||
if (passTouches) {
|
||||
return false
|
||||
}
|
||||
|
||||
when (event.actionMasked) {
|
||||
MotionEvent.ACTION_DOWN -> {
|
||||
mTouchDownX = event.x
|
||||
mTouchDownY = event.y
|
||||
mTouchDownTime = System.currentTimeMillis()
|
||||
}
|
||||
MotionEvent.ACTION_UP -> {
|
||||
if (System.currentTimeMillis() - mTouchDownTime < CLICK_MAX_DURATION) {
|
||||
performClick()
|
||||
}
|
||||
}
|
||||
MotionEvent.ACTION_MOVE -> {
|
||||
if (passTouches) {
|
||||
return false
|
||||
}
|
||||
|
||||
val diffX = mTouchDownX - event.x
|
||||
val diffY = mTouchDownY - event.y
|
||||
if (Math.abs(diffX) > dragThreshold || Math.abs(diffY) > dragThreshold) {
|
||||
if (!passTouches) {
|
||||
event.action = MotionEvent.ACTION_DOWN
|
||||
event.setLocation(event.rawX, event.y)
|
||||
parentView?.dispatchTouchEvent(event)
|
||||
}
|
||||
passTouches = true
|
||||
parentView?.dispatchTouchEvent(event)
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
|
@ -38,7 +38,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scrollbars="none"
|
||||
app:layoutManager="android.support.v7.widget.GridLayoutManager"
|
||||
app:layoutManager="com.simplemobiletools.commons.views.MyGridLayoutManager"
|
||||
app:spanCount="@integer/directory_columns_vertical_scroll"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.FastScroller
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
android:layout_height="match_parent"
|
||||
android:clipToPadding="false"
|
||||
android:scrollbars="vertical"
|
||||
app:layoutManager="android.support.v7.widget.LinearLayoutManager"/>
|
||||
app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/manage_folders_placeholder"
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scrollbars="none"
|
||||
app:layoutManager="android.support.v7.widget.GridLayoutManager"
|
||||
app:layoutManager="com.simplemobiletools.commons.views.MyGridLayoutManager"
|
||||
app:spanCount="@integer/media_columns_vertical_scroll"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.FastScroller
|
||||
|
|
|
@ -17,7 +17,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_customize_colors"
|
||||
|
@ -36,7 +39,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_use_english"
|
||||
|
@ -50,6 +56,29 @@
|
|||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_avoid_whats_new_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_avoid_whats_new"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:text="@string/avoid_whats_new"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/visibility_divider"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -61,8 +90,8 @@
|
|||
android:id="@+id/visibility_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/big_margin"
|
||||
android:layout_marginStart="@dimen/big_margin"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginStart="@dimen/bigger_margin"
|
||||
android:layout_marginTop="@dimen/activity_margin"
|
||||
android:text="@string/visibility"
|
||||
android:textAllCaps="true"
|
||||
|
@ -74,7 +103,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_manage_included_folders"
|
||||
|
@ -93,7 +125,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_manage_excluded_folders"
|
||||
|
@ -112,7 +147,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_manage_hidden_folders"
|
||||
|
@ -131,7 +169,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_show_hidden_items"
|
||||
|
@ -145,6 +186,29 @@
|
|||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_do_extra_check_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_do_extra_check"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:text="@string/do_extra_check"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/videos_divider"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -156,8 +220,8 @@
|
|||
android:id="@+id/videos_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/big_margin"
|
||||
android:layout_marginStart="@dimen/big_margin"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginStart="@dimen/bigger_margin"
|
||||
android:layout_marginTop="@dimen/activity_margin"
|
||||
android:text="@string/videos"
|
||||
android:textAllCaps="true"
|
||||
|
@ -169,7 +233,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_autoplay_videos"
|
||||
|
@ -189,7 +256,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_loop_videos"
|
||||
|
@ -209,7 +279,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_allow_video_gestures"
|
||||
|
@ -234,8 +307,8 @@
|
|||
android:id="@+id/thumbnails_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/big_margin"
|
||||
android:layout_marginStart="@dimen/big_margin"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginStart="@dimen/bigger_margin"
|
||||
android:layout_marginTop="@dimen/activity_margin"
|
||||
android:text="@string/thumbnails"
|
||||
android:textAllCaps="true"
|
||||
|
@ -247,7 +320,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_animate_gifs"
|
||||
|
@ -267,7 +343,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_crop_thumbnails"
|
||||
|
@ -287,7 +366,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_show_media_count"
|
||||
|
@ -312,8 +394,8 @@
|
|||
android:id="@+id/scrolling_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/big_margin"
|
||||
android:layout_marginStart="@dimen/big_margin"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginStart="@dimen/bigger_margin"
|
||||
android:layout_marginTop="@dimen/activity_margin"
|
||||
android:text="@string/scrolling"
|
||||
android:textAllCaps="true"
|
||||
|
@ -325,7 +407,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_scroll_horizontally"
|
||||
|
@ -345,7 +430,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_show_info_bubble"
|
||||
|
@ -370,8 +458,8 @@
|
|||
android:id="@+id/fullscreen_media_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/big_margin"
|
||||
android:layout_marginStart="@dimen/big_margin"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginStart="@dimen/bigger_margin"
|
||||
android:layout_marginTop="@dimen/activity_margin"
|
||||
android:text="@string/fullscreen_media"
|
||||
android:textAllCaps="true"
|
||||
|
@ -383,7 +471,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_max_brightness"
|
||||
|
@ -403,7 +494,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_black_background"
|
||||
|
@ -423,7 +517,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_hide_system_ui"
|
||||
|
@ -443,7 +540,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_replace_share"
|
||||
|
@ -463,7 +563,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_one_finger_zoom"
|
||||
|
@ -483,7 +586,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_allow_instant_change"
|
||||
|
@ -503,7 +609,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_replace_zoomable_images"
|
||||
|
@ -517,6 +626,29 @@
|
|||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_allow_photo_gestures_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_allow_photo_gestures"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:text="@string/allow_photo_gestures"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_screen_rotation_holder"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -524,8 +656,8 @@
|
|||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingBottom="@dimen/bigger_margin"
|
||||
android:paddingLeft="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/bigger_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
|
@ -563,8 +695,8 @@
|
|||
android:id="@+id/extended_details_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/big_margin"
|
||||
android:layout_marginStart="@dimen/big_margin"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginStart="@dimen/bigger_margin"
|
||||
android:layout_marginTop="@dimen/activity_margin"
|
||||
android:text="@string/extended_details"
|
||||
android:textAllCaps="true"
|
||||
|
@ -576,7 +708,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_show_extended_details"
|
||||
|
@ -595,7 +730,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_hide_extended_details"
|
||||
|
@ -614,7 +752,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/settings_manage_extended_details"
|
||||
|
@ -638,8 +779,8 @@
|
|||
android:id="@+id/security_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/big_margin"
|
||||
android:layout_marginStart="@dimen/big_margin"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginStart="@dimen/bigger_margin"
|
||||
android:layout_marginTop="@dimen/activity_margin"
|
||||
android:text="@string/security"
|
||||
android:textAllCaps="true"
|
||||
|
@ -651,7 +792,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_password_protection"
|
||||
|
@ -671,7 +815,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_app_password_protection"
|
||||
|
@ -696,8 +843,8 @@
|
|||
android:id="@+id/file_operations_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/big_margin"
|
||||
android:layout_marginStart="@dimen/big_margin"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginStart="@dimen/bigger_margin"
|
||||
android:layout_marginTop="@dimen/activity_margin"
|
||||
android:text="@string/file_operations"
|
||||
android:textAllCaps="true"
|
||||
|
@ -709,7 +856,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_delete_empty_folders"
|
||||
|
@ -729,7 +879,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin">
|
||||
android:paddingBottom="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_keep_last_modified"
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scrollbars="none"
|
||||
app:layoutManager="android.support.v7.widget.GridLayoutManager"
|
||||
app:layoutManager="com.simplemobiletools.commons.views.MyGridLayoutManager"
|
||||
app:spanCount="@integer/directory_columns_vertical_scroll"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.FastScroller
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scrollbars="none"
|
||||
app:layoutManager="android.support.v7.widget.GridLayoutManager"
|
||||
app:layoutManager="com.simplemobiletools.commons.views.MyGridLayoutManager"
|
||||
app:spanCount="@integer/media_columns_vertical_scroll"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.FastScroller
|
||||
|
|
|
@ -31,12 +31,36 @@
|
|||
android:visibility="gone"
|
||||
tools:text="My image\nAnother line"/>
|
||||
|
||||
<RelativeLayout
|
||||
<com.simplemobiletools.gallery.helpers.MediaSideScroll
|
||||
android:id="@+id/photo_brightness_controller"
|
||||
android:layout_width="@dimen/media_side_slider_width"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/slide_info"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_marginBottom="120dp"
|
||||
android:alpha="0"
|
||||
android:background="@drawable/black_rounded_background"
|
||||
android:gravity="center"
|
||||
android:paddingBottom="@dimen/medium_margin"
|
||||
android:paddingLeft="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/activity_margin"
|
||||
android:paddingTop="@dimen/medium_margin"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="@dimen/extra_big_text_size"/>
|
||||
|
||||
<com.simplemobiletools.gallery.views.InstantItemSwitch
|
||||
android:id="@+id/instant_prev_item"
|
||||
android:layout_width="@dimen/instant_change_bar_width"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<RelativeLayout
|
||||
<com.simplemobiletools.gallery.views.InstantItemSwitch
|
||||
android:id="@+id/instant_next_item"
|
||||
android:layout_width="@dimen/instant_change_bar_width"
|
||||
android:layout_height="match_parent"
|
||||
|
|
|
@ -13,24 +13,24 @@
|
|||
android:layout_centerInParent="true"
|
||||
android:background="@android:color/transparent"/>
|
||||
|
||||
<RelativeLayout
|
||||
<com.simplemobiletools.gallery.helpers.MediaSideScroll
|
||||
android:id="@+id/video_volume_controller"
|
||||
android:layout_width="@dimen/video_side_slider_width"
|
||||
android:layout_width="@dimen/media_side_slider_width"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"/>
|
||||
|
||||
<RelativeLayout
|
||||
<com.simplemobiletools.gallery.helpers.MediaSideScroll
|
||||
android:id="@+id/video_brightness_controller"
|
||||
android:layout_width="@dimen/video_side_slider_width"
|
||||
android:layout_width="@dimen/media_side_slider_width"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<RelativeLayout
|
||||
<com.simplemobiletools.gallery.views.InstantItemSwitch
|
||||
android:id="@+id/instant_prev_item"
|
||||
android:layout_width="@dimen/instant_change_bar_width"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<RelativeLayout
|
||||
<com.simplemobiletools.gallery.views.InstantItemSwitch
|
||||
android:id="@+id/instant_next_item"
|
||||
android:layout_width="@dimen/instant_change_bar_width"
|
||||
android:layout_height="match_parent"
|
||||
|
@ -81,12 +81,11 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:background="@drawable/gradient_background"
|
||||
android:paddingLeft="@dimen/timer_padding"
|
||||
android:paddingRight="@dimen/timer_padding">
|
||||
android:background="@drawable/gradient_background">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/video_curr_time"
|
||||
style="@style/MyBorderlessBackgroundStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignBottom="@+id/video_seekbar"
|
||||
|
@ -94,15 +93,15 @@
|
|||
android:layout_alignParentStart="true"
|
||||
android:layout_alignTop="@+id/video_seekbar"
|
||||
android:gravity="center_vertical"
|
||||
android:text="00:00"
|
||||
android:textColor="@android:color/white"/>
|
||||
android:paddingLeft="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/activity_margin"
|
||||
android:textColor="@android:color/white"
|
||||
tools:text="00:00"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.MySeekBar
|
||||
android:id="@+id/video_seekbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/activity_margin"
|
||||
android:layout_marginRight="@dimen/activity_margin"
|
||||
android:layout_toEndOf="@+id/video_curr_time"
|
||||
android:layout_toLeftOf="@+id/video_duration"
|
||||
android:layout_toRightOf="@+id/video_curr_time"
|
||||
|
@ -112,6 +111,7 @@
|
|||
|
||||
<TextView
|
||||
android:id="@+id/video_duration"
|
||||
style="@style/MyBorderlessBackgroundStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignBottom="@+id/video_seekbar"
|
||||
|
@ -119,8 +119,10 @@
|
|||
android:layout_alignParentRight="true"
|
||||
android:layout_alignTop="@+id/video_seekbar"
|
||||
android:gravity="center_vertical"
|
||||
android:text="00:00"
|
||||
android:textColor="@android:color/white"/>
|
||||
android:paddingLeft="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/activity_margin"
|
||||
android:textColor="@android:color/white"
|
||||
tools:text="00:00"/>
|
||||
|
||||
</RelativeLayout>
|
||||
</RelativeLayout>
|
||||
|
|
|
@ -130,6 +130,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">قم بتمرير الصور المصغرة أفقيا</string>
|
||||
<string name="hide_system_ui_at_fullscreen">إخفاء واجهة النظام تلقائيا عند العرض في وضع ملء الشاشة</string>
|
||||
<string name="delete_empty_folders">احذف المجلدات الفارغة بعد حذف محتواها</string>
|
||||
<string name="allow_photo_gestures">Allow controlling photo brightness with vertical gestures</string>
|
||||
<string name="allow_video_gestures">السماح بالتحكم في صوت الفيديو والسطوع بالإيماءات العمودية</string>
|
||||
<string name="show_media_count">إظهار عدد لوسائط المجلد على طريقة العرض الرئيسية</string>
|
||||
<string name="replace_share_with_rotate">استبدال خيار المشاركة مع خيار تدوير في القائمة ملء الشاشة</string>
|
||||
|
@ -139,6 +140,7 @@
|
|||
<string name="allow_instant_change">Allow instantly changing media by clicking on screen sides</string>
|
||||
<string name="replace_zoomable_images">Replace deep zoomable images with better quality ones</string>
|
||||
<string name="hide_extended_details">Hide extended details when status bar is hidden</string>
|
||||
<string name="do_extra_check">Do an extra check to avoid showing invalid files</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">Desplaçar miniatures horizontalment</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Ocultar automàticament la interficie de usuari del sistema a pantalla complerta</string>
|
||||
<string name="delete_empty_folders">Eliminar carpetes buides després d\'esborrar el seu contingut</string>
|
||||
<string name="allow_photo_gestures">Permet controlar la brillantor amb gestos verticals</string>
|
||||
<string name="allow_video_gestures">Permet controlar el volum i la brillantor del vídeo amb gestos verticals</string>
|
||||
<string name="show_media_count">Mostrar el número de mitjans de les carpetes a la vista principal</string>
|
||||
<string name="replace_share_with_rotate">Reemplaçar Compartir per Girar al menú de pantalla complerta</string>
|
||||
|
@ -134,7 +135,8 @@
|
|||
<string name="one_finger_zoom">Permet fer zoom amb un sol dit a pantalla complerta</string>
|
||||
<string name="allow_instant_change">Permet canviar els mitjans de manera instantània fent clic als costats de la pantalla</string>
|
||||
<string name="replace_zoomable_images">Substituïr imatges ampliades per les de millor quialitat</string>
|
||||
<string name="hide_extended_details">Amaga els detalls estesos quan la barra d'estat està amagada</string>
|
||||
<string name="hide_extended_details">Amaga els detalls estesos quan la barra d\'estat està amagada</string>
|
||||
<string name="do_extra_check">Fer una verificació addicional per evitar que es mostrin fitxers no vàlids</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniatures</string>
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Automatically hide system UI at fullscreen media</string>
|
||||
<string name="delete_empty_folders">Delete empty folders after deleting their content</string>
|
||||
<string name="allow_photo_gestures">Allow controlling photo brightness with vertical gestures</string>
|
||||
<string name="allow_video_gestures">Allow controlling video volume and brightness with vertical gestures</string>
|
||||
<string name="show_media_count">Show folder media count on the main view</string>
|
||||
<string name="replace_share_with_rotate">Replace Share with Rotate at fullscreen menu</string>
|
||||
|
@ -135,6 +136,7 @@
|
|||
<string name="allow_instant_change">Allow instantly changing media by clicking on screen sides</string>
|
||||
<string name="replace_zoomable_images">Replace deep zoomable images with better quality ones</string>
|
||||
<string name="hide_extended_details">Hide extended details when status bar is hidden</string>
|
||||
<string name="do_extra_check">Do an extra check to avoid showing invalid files</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">Kacheln horizontal scrollen</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Systemleiste im Vollbild ausblenden</string>
|
||||
<string name="delete_empty_folders">Nach Löschen leere Ordner löschen</string>
|
||||
<string name="allow_photo_gestures">Fotohelligkeit mit vertikalen Gesten ändern</string>
|
||||
<string name="allow_video_gestures">Gesten für Videolautstärke/Helligkeit zulassen</string>
|
||||
<string name="show_media_count">Medienanzahl bei Ordnern anzeigen</string>
|
||||
<string name="replace_share_with_rotate">Teilen/Drehen im Vollbild-Menü vertauschen</string>
|
||||
|
@ -135,6 +136,7 @@
|
|||
<string name="allow_instant_change">Beim Tippen auf eine Bildschirmseite sofort zwischen Medien wechseln</string>
|
||||
<string name="replace_zoomable_images">Stark zoombare Bilder durch Bilder mit hoher Qualität ersetzen</string>
|
||||
<string name="hide_extended_details">Erweiterte Details nicht anzeigen, wenn die Systemleiste versteckt ist</string>
|
||||
<string name="do_extra_check">Zusätzliche Überprüfung, um ungültige Dateien nicht anzuzeigen</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">Desplazar miniaturas horizontalmente</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Ocultar automáticamente la interfaz de usuario del sistema en medios de pantalla completa</string>
|
||||
<string name="delete_empty_folders">Eliminar carpetas vacias despues de borrar su contenido</string>
|
||||
<string name="allow_photo_gestures">Permite controlar el brillo con gestos verticales</string>
|
||||
<string name="allow_video_gestures">Permite controlar el volumen y el brillo del video con gestos verticales</string>
|
||||
<string name="show_media_count">Mostrar el conteo de medios de las carpetas en la vista principal</string>
|
||||
<string name="replace_share_with_rotate">Reemplazar Compartir con Girar en el menú de pantalla completa</string>
|
||||
|
@ -135,6 +136,7 @@
|
|||
<string name="allow_instant_change">Permitir el cambio instantáneo de medios haciendo clic en los lados de la pantalla</string>
|
||||
<string name="replace_zoomable_images">Reemplace las imágenes con mucho zoom por otras de mejor calidad</string>
|
||||
<string name="hide_extended_details">Ocultar detalles ampliados cuando la barra de estado está oculta</string>
|
||||
<string name="do_extra_check">Hacer una comprobación adicional para evitar mostrar archivos inválidos</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniaturas</string>
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">Vieritä pienoiskuvia vaakasuorassa</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Piilota järjestelmän UI automaattisesti koko näytön mediassa</string>
|
||||
<string name="delete_empty_folders">Poista tyhjät kansiot kansion tyhjennyksen jälkeen</string>
|
||||
<string name="allow_photo_gestures">Allow controlling photo brightness with vertical gestures</string>
|
||||
<string name="allow_video_gestures">Salli videon äänenvoimakkuuden ja kirkkauden säätö pystysuorilla eleillä</string>
|
||||
<string name="show_media_count">Show folder media count on the main view</string>
|
||||
<string name="replace_share_with_rotate">Korvaa jakaminen kääntämisellä koko näytön tilassa</string>
|
||||
|
@ -135,6 +136,7 @@
|
|||
<string name="allow_instant_change">Allow instantly changing media by clicking on screen sides</string>
|
||||
<string name="replace_zoomable_images">Replace deep zoomable images with better quality ones</string>
|
||||
<string name="hide_extended_details">Hide extended details when status bar is hidden</string>
|
||||
<string name="do_extra_check">Do an extra check to avoid showing invalid files</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
<string name="include_folders">Dossiers inclus</string>
|
||||
<string name="manage_included_folders">Gérer les dossiers inclus</string>
|
||||
<string name="add_folder">Ajouter un dossier</string>
|
||||
<string name="included_activity_placeholder">Si vous avez des dossiers contenant des médias et qui ne sont pas reconnus par l\'application alors, vous pouvez les ajouter manuellement ici.</string>
|
||||
<string name="included_activity_placeholder">Si vous avez des dossiers contenant des médias et qu\'ils ne sont pas reconnus par l\'application, vous pouvez les ajouter manuellement ici.</string>
|
||||
|
||||
<!-- Resizing -->
|
||||
<string name="resize">Redimensionner</string>
|
||||
|
@ -122,24 +122,26 @@
|
|||
<string name="screen_rotation_system_setting">Paramètres système</string>
|
||||
<string name="screen_rotation_device_rotation">Rotation de l\'appareil</string>
|
||||
<string name="screen_rotation_aspect_ratio">Ratio d\'aspect</string>
|
||||
<string name="black_background_at_fullscreen">Fond et barre de statur noir en plein écran</string>
|
||||
<string name="black_background_at_fullscreen">Fond et barre de statut noir en plein écran</string>
|
||||
<string name="scroll_thumbnails_horizontally">Défilement des miniatures horizontalement</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Masquer automatiquement l\'interface utilisateur si média plein écran</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Masquer automatiquement l\'interface utilisateur si média en plein écran</string>
|
||||
<string name="delete_empty_folders">Supprimer les dossiers vides après avoir supprimé leur contenu</string>
|
||||
<string name="allow_photo_gestures">Allow controlling photo brightness with vertical gestures</string>
|
||||
<string name="allow_video_gestures">Permettre le contrôle du volume vidéo et de la luminosité avec des gestes verticaux</string>
|
||||
<string name="show_media_count">Afficher le nombre de fichiers dans les dossiers sur l\'écran principal</string>
|
||||
<string name="replace_share_with_rotate">Remplacer Partager par Pivoter si menu en plein écran</string>
|
||||
<string name="show_extended_details">Afficher les détails supplémentaires par dessus le média en plein écran</string>
|
||||
<string name="manage_extended_details">Gérer les détails supplémentaires</string>
|
||||
<string name="one_finger_zoom">Allow one finger zoom at fullscreen media</string>
|
||||
<string name="allow_instant_change">Allow instantly changing media by clicking on screen sides</string>
|
||||
<string name="replace_zoomable_images">Replace deep zoomable images with better quality ones</string>
|
||||
<string name="hide_extended_details">Hide extended details when status bar is hidden</string>
|
||||
<string name="one_finger_zoom">Autoriser le zoom avec un doigt sur un média en plein écran</string>
|
||||
<string name="allow_instant_change">Autoriser le changement instantané de média en cliquant sur les côtés de l\'écran</string>
|
||||
<string name="replace_zoomable_images">Remplacer les images zoomables profondes par des images de meilleure qualité</string>
|
||||
<string name="hide_extended_details">Masquer les détails supplémentaires lorsque la barre d\'état est masquée</string>
|
||||
<string name="do_extra_check">Faire une vérification supplémentaire pour éviter de montrer des fichiers invalides</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
<string name="fullscreen_media">Fullscreen media</string>
|
||||
<string name="extended_details">Extended details</string>
|
||||
<string name="thumbnails">Vignettes</string>
|
||||
<string name="fullscreen_media">Média plein écran</string>
|
||||
<string name="extended_details">Détails supplémentaires</string>
|
||||
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
|
@ -147,11 +149,11 @@
|
|||
<string name="app_long_description">
|
||||
Un simple outil pour visionner les photos et les vidéos. Elles peuvent être triées par dates, tailles, noms dans les deux sens (alphabétique comme désalphabétique), il est possible de zoomer sur les photos. Les fichiers sont affichés sur de multiple colonnes en fonction de la taille de l\'écran, vous pouvez changer le nombre de colonnes par pincement. Elles peuvent être renommées, partagées, supprimées, copiées et déplacées. Les images peuvent en plus être tournées, rognées ou être définies comme fond d\'écran directement depuis l\'application.
|
||||
|
||||
La galerie est également proposée pour une utilisation comme tierce partie pour la prévisualisation des images/vidéos, ajouter des pièces jointes aux clients email etc. C\'est parfait pour un usage au quotidien.
|
||||
La galerie est également proposée pour une utilisation comme tierce partie pour la prévisualisation des images/vidéos, ajouter des pièces jointes aux clients email, etc... C\'est parfait pour un usage au quotidien.
|
||||
|
||||
L\'autorisation d\'empreinte digitale est nécessaire pour verrouiller les dossiers cachés et/ou l\'application.
|
||||
|
||||
L\'application ne contient ni publicité ni autorisation inutile. Elle est totalement opensource et est aussi fournie avec des couleurs personnalisables.
|
||||
L\'application ne contient ni publicité ni autorisation inutile. Elle est totalement opensource et est également fournie avec des couleurs personnalisables.
|
||||
|
||||
Cette application fait partie d\'une plus grande suite. Vous pouvez trouver les autres applications sur http://www.simplemobiletools.com
|
||||
</string>
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">Desplazar iconas horizontalmente</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Agochar controis do sistema cando visualice a pantalla completa</string>
|
||||
<string name="delete_empty_folders">Borrar cartafoles baldeiros cando elmine o seu contido</string>
|
||||
<string name="allow_photo_gestures">Allow controlling photo brightness with vertical gestures</string>
|
||||
<string name="allow_video_gestures">Permitir controlar o volume do vídeo e o brillo con xestos verticáis</string>
|
||||
<string name="show_media_count">Mostrar a conta de medios do cartafol na vista principal</string>
|
||||
<string name="replace_share_with_rotate">Substituír Compartir con Rotar no menú de pantalla completa</string>
|
||||
|
@ -135,6 +136,7 @@
|
|||
<string name="allow_instant_change">Allow instantly changing media by clicking on screen sides</string>
|
||||
<string name="replace_zoomable_images">Replace deep zoomable images with better quality ones</string>
|
||||
<string name="hide_extended_details">Hide extended details when status bar is hidden</string>
|
||||
<string name="do_extra_check">Do an extra check to avoid showing invalid files</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">Listaj sličice horizontalno</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Automatski sakrij UI sustava pri pregledu datoteka</string>
|
||||
<string name="delete_empty_folders">Izbriži prazne direktorije nakon brisanja njihovog sadržaja</string>
|
||||
<string name="allow_photo_gestures">Allow controlling photo brightness with vertical gestures</string>
|
||||
<string name="allow_video_gestures">Omogući kontrolu glasnoće videa i svjetline pomoću vertikalnih gesti</string>
|
||||
<string name="show_media_count">Prikaži broj datoteka u direktoriju na glavnom zaslonu</string>
|
||||
<string name="replace_share_with_rotate">Zamjeni Dijeli s Rotiraj pri pregledu datoteka</string>
|
||||
|
@ -135,6 +136,7 @@
|
|||
<string name="allow_instant_change">Allow instantly changing media by clicking on screen sides</string>
|
||||
<string name="replace_zoomable_images">Replace deep zoomable images with better quality ones</string>
|
||||
<string name="hide_extended_details">Hide extended details when status bar is hidden</string>
|
||||
<string name="do_extra_check">Do an extra check to avoid showing invalid files</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Automatically hide system UI at fullscreen media</string>
|
||||
<string name="delete_empty_folders">Delete empty folders after deleting their content</string>
|
||||
<string name="allow_photo_gestures">Allow controlling photo brightness with vertical gestures</string>
|
||||
<string name="allow_video_gestures">Allow controlling video volume and brightness with vertical gestures</string>
|
||||
<string name="show_media_count">Show folder media count on the main view</string>
|
||||
<string name="replace_share_with_rotate">Replace Share with Rotate at fullscreen menu</string>
|
||||
|
@ -135,6 +136,7 @@
|
|||
<string name="allow_instant_change">Allow instantly changing media by clicking on screen sides</string>
|
||||
<string name="replace_zoomable_images">Replace deep zoomable images with better quality ones</string>
|
||||
<string name="hide_extended_details">Hide extended details when status bar is hidden</string>
|
||||
<string name="do_extra_check">Do an extra check to avoid showing invalid files</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
|
|
|
@ -126,20 +126,22 @@
|
|||
<string name="scroll_thumbnails_horizontally">Scorri le miniature orizzontalmente</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Nascondi UI di sistema con media a schermo intero</string>
|
||||
<string name="delete_empty_folders">Elimina cartelle vuote dopo averne eliminato il contenuto</string>
|
||||
<string name="allow_photo_gestures">Controlla la luminosità delle foto con gesti verticali</string>
|
||||
<string name="allow_video_gestures">Gestisci il volume e la luminosità dei video con gesti verticali</string>
|
||||
<string name="show_media_count">Mostra numero elementi nella cartella</string>
|
||||
<string name="replace_share_with_rotate">Sostituisci Condividi con Ruota a schermo intero</string>
|
||||
<string name="show_extended_details">Mostra informazioni estese su media a schermo intero</string>
|
||||
<string name="manage_extended_details">Gestisci le informazioni estese</string>
|
||||
<string name="one_finger_zoom">Abilita zoom con un dito su media a schermo intero</string>
|
||||
<string name="allow_instant_change">Allow instantly changing media by clicking on screen sides</string>
|
||||
<string name="replace_zoomable_images">Replace deep zoomable images with better quality ones</string>
|
||||
<string name="hide_extended_details">Hide extended details when status bar is hidden</string>
|
||||
<string name="allow_instant_change">Cambia media istantaneamente toccando sui lati dello schermo</string>
|
||||
<string name="replace_zoomable_images">Sostituisci le immagini ingrandibili a fondo con altre di migliore qualità</string>
|
||||
<string name="hide_extended_details">Nascondi i dettagli estesi quando la barra di stato è nascosta</string>
|
||||
<string name="do_extra_check">Fai un controllo ulteriore per evitare di mostrare file non validi</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
<string name="fullscreen_media">Fullscreen media</string>
|
||||
<string name="extended_details">Extended details</string>
|
||||
<string name="thumbnails">Miniature</string>
|
||||
<string name="fullscreen_media">Media a schermo intero</string>
|
||||
<string name="extended_details">Dettagli estesi</string>
|
||||
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">サムネイル画面を横方向にスクロール</string>
|
||||
<string name="hide_system_ui_at_fullscreen">フルスクリーン時にシステムUIを非表示にする</string>
|
||||
<string name="delete_empty_folders">メディアの削除後にフォルダーが空になった場合、そのフォルダーを削除する</string>
|
||||
<string name="allow_photo_gestures">Allow controlling photo brightness with vertical gestures</string>
|
||||
<string name="allow_video_gestures">ビデオ再生中に、音量と明るさを縦方向のジェスチャーで変更する</string>
|
||||
<string name="show_media_count">Show folder media count on the main view</string>
|
||||
<string name="replace_share_with_rotate">フルスクリーンメニューの「共有」を「回転」に置き換える</string>
|
||||
|
@ -135,6 +136,7 @@
|
|||
<string name="allow_instant_change">Allow instantly changing media by clicking on screen sides</string>
|
||||
<string name="replace_zoomable_images">Replace deep zoomable images with better quality ones</string>
|
||||
<string name="hide_extended_details">Hide extended details when status bar is hidden</string>
|
||||
<string name="do_extra_check">Do an extra check to avoid showing invalid files</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">섬네일 수평스크롤</string>
|
||||
<string name="hide_system_ui_at_fullscreen">전체화면 모드에서 시스템 UI 숨김</string>
|
||||
<string name="delete_empty_folders">콘텐츠 삭제 후 빈폴더 삭제</string>
|
||||
<string name="allow_photo_gestures">Allow controlling photo brightness with vertical gestures</string>
|
||||
<string name="allow_video_gestures">수직 제스처로 비디오 볼륨 및 밝기 제어</string>
|
||||
<string name="show_media_count">폴더에 포함된 미디어파일 수 표시</string>
|
||||
<string name="replace_share_with_rotate">전체화면 메뉴의 공유 아이콘을 회전 아이콘으로 변경</string>
|
||||
|
@ -135,6 +136,7 @@
|
|||
<string name="allow_instant_change">Allow instantly changing media by clicking on screen sides</string>
|
||||
<string name="replace_zoomable_images">Replace deep zoomable images with better quality ones</string>
|
||||
<string name="hide_extended_details">Hide extended details when status bar is hidden</string>
|
||||
<string name="do_extra_check">Do an extra check to avoid showing invalid files</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">Horisontal rulling av minibilder</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Skjul automatisk systemlinjer ved mediavisning</string>
|
||||
<string name="delete_empty_folders">Slett tomme mapper etter sletting av deres innhold</string>
|
||||
<string name="allow_photo_gestures">Tillat å styre fotolysstyrke med vertikale bevegelser</string>
|
||||
<string name="allow_video_gestures">Tillat å styre videovolum og lysstyrke med vertikale bevegelser</string>
|
||||
<string name="show_media_count">Vis mediaantallet i mapper på hovedvisningen</string>
|
||||
<string name="replace_share_with_rotate">Erstatt Del med Roter i meny ved mediavisning</string>
|
||||
|
@ -135,6 +136,7 @@
|
|||
<string name="allow_instant_change">Tillat å skifte media øyeblikkelig ved å trykke på kanten av skjermen</string>
|
||||
<string name="replace_zoomable_images">Erstatt dyp-zoombare bilder med bilder av bedre kvalitet</string>
|
||||
<string name="hide_extended_details">Skjul utvidede detaljer når statuslinjen er skjult</string>
|
||||
<string name="do_extra_check">Gjør en ekstra sjekk for å unngå visning av ugyldige filer</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Minibilder</string>
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">Horizontaal scrollen</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Statusbalk automatisch verbergen in volledig scherm</string>
|
||||
<string name="delete_empty_folders">Lege mappen verwijderen na leegmaken</string>
|
||||
<string name="allow_photo_gestures">Allow controlling photo brightness with vertical gestures</string>
|
||||
<string name="allow_video_gestures">Volume en helderheid aanpassen met verticale gebaren</string>
|
||||
<string name="show_media_count">Aantallen in mappen tonen</string>
|
||||
<string name="replace_share_with_rotate">Menu-item Draaien vastzetten in volledig scherm (in plaats van Delen)</string>
|
||||
|
@ -135,6 +136,7 @@
|
|||
<string name="allow_instant_change">Direct naar vorige/volgende door op de zijkanten van het scherm te tikken</string>
|
||||
<string name="replace_zoomable_images">In hoge kwaliteit weergeven (ten koste van ver inzoomen)</string>
|
||||
<string name="hide_extended_details">Uitgebreide informatie niet tonen als de statusbalk is verborgen</string>
|
||||
<string name="do_extra_check">Do an extra check to avoid showing invalid files</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniatuurvoorbeelden</string>
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<string name="hidden">(ukryty)</string>
|
||||
<string name="pin_folder">Przypnij folder</string>
|
||||
<string name="unpin_folder">Wypakuj folder</string>
|
||||
<string name="pin_to_the_top">Pin to the top</string>
|
||||
<string name="pin_to_the_top">Przypnij na górze</string>
|
||||
<string name="show_all">Pokaż wszystko</string>
|
||||
<string name="all_folders">Wszystkie foldery</string>
|
||||
<string name="folder_view">Przełącz na widok folderów</string>
|
||||
|
@ -126,20 +126,22 @@
|
|||
<string name="scroll_thumbnails_horizontally">Przewijaj miniatury poziomo</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Ukrywaj interfejs przy pełnoekranowym podglądzie</string>
|
||||
<string name="delete_empty_folders">Usuwaj puste foldery po usunięciu ich zawartości</string>
|
||||
<string name="allow_photo_gestures">Allow controlling photo brightness with vertical gestures</string>
|
||||
<string name="allow_video_gestures">Zezwalaj na kontrolę jasności i głośności filmów pionowymi gestami</string>
|
||||
<string name="show_media_count">Pokazuj liczbę elementów w folderach w głównym widoku</string>
|
||||
<string name="replace_share_with_rotate">Zamień funkcję udostępniania na obracanie w menu pełnoekranowym</string>
|
||||
<string name="show_extended_details">Dodatkowe szczegóły przy podglądzie pełnoekranowym</string>
|
||||
<string name="manage_extended_details">Zarządzaj dodatkowymi szczegółami</string>
|
||||
<string name="one_finger_zoom">Allow one finger zoom at fullscreen media</string>
|
||||
<string name="allow_instant_change">Allow instantly changing media by clicking on screen sides</string>
|
||||
<string name="replace_zoomable_images">Replace deep zoomable images with better quality ones</string>
|
||||
<string name="hide_extended_details">Hide extended details when status bar is hidden</string>
|
||||
<string name="one_finger_zoom">Zezwalaj na powiększanie jednym palcem w widoku pełnoekranowym</string>
|
||||
<string name="allow_instant_change">Zezwalaj na natychmiastową zmianę multimediów po kliknięciu boków ekranu</string>
|
||||
<string name="replace_zoomable_images">Zamieniaj powiększalne obrazy na te o lepszej jakości</string>
|
||||
<string name="hide_extended_details">Ukrywaj dodatkowe szczegóły gdy pasek stanu jest ukryty</string>
|
||||
<string name="do_extra_check">Do an extra check to avoid showing invalid files</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
<string name="fullscreen_media">Fullscreen media</string>
|
||||
<string name="extended_details">Extended details</string>
|
||||
<string name="thumbnails">Miniatury</string>
|
||||
<string name="fullscreen_media">Widok pełnoekranowy</string>
|
||||
<string name="extended_details">Dodatkowe szczegóły</string>
|
||||
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">Rolar miniaturas horizontalmente</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Esconder interface do sistema automaticamente quando em tela cheia</string>
|
||||
<string name="delete_empty_folders">Apagar pastas vazias após deleter seu conteúdo</string>
|
||||
<string name="allow_photo_gestures">Allow controlling photo brightness with vertical gestures</string>
|
||||
<string name="allow_video_gestures">Permitir controle do volume e brilho com gestos na vertical</string>
|
||||
<string name="show_media_count">Mostrar quantidade de arquivos das pastas</string>
|
||||
<string name="replace_share_with_rotate">Substituir botão "Compartilhar" por "Rotação de tela" quando em tela cheia</string>
|
||||
|
@ -135,6 +136,7 @@
|
|||
<string name="allow_instant_change">Permitir alternância instantânia de mídia clicando nas laterais da tela</string>
|
||||
<string name="replace_zoomable_images">Substituir imagens aptas a grande quantitade de zoom por imagens de melhor qualidade</string>
|
||||
<string name="hide_extended_details">Ocultar detalhes extendidos quando a barra de status estiver oculta</string>
|
||||
<string name="do_extra_check">Realizar verificação extra para evitar mostrar arquivos inválidos</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniaturas</string>
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
<string name="filter_media">Filtrar multimédia</string>
|
||||
<string name="images">Imagens</string>
|
||||
<string name="videos">Vídeos</string>
|
||||
<string name="gifs">GIFs</string>
|
||||
<string name="gifs">GIF</string>
|
||||
<string name="no_media_with_filters">Não foram encontrados ficheiros que cumpram os requisitos.</string>
|
||||
<string name="change_filters_underlined"><u>Alterar filtros</u></string>
|
||||
|
||||
|
@ -98,7 +98,7 @@
|
|||
<string name="interval">Intervalo (segundos):</string>
|
||||
<string name="include_photos">Incluir fotos</string>
|
||||
<string name="include_videos">Incluir vídeos</string>
|
||||
<string name="include_gifs">Incluir GIFs</string>
|
||||
<string name="include_gifs">Incluir GIF</string>
|
||||
<string name="random_order">Ordem aleatória</string>
|
||||
<string name="use_fade">Usar animações</string>
|
||||
<string name="move_backwards">Mover para trás</string>
|
||||
|
@ -115,7 +115,7 @@
|
|||
<string name="autoplay_videos">Reproduzir vídeos automaticamente</string>
|
||||
<string name="toggle_filename">Mostrar/ocultar nome do ficheiro</string>
|
||||
<string name="loop_videos">Vídeos em ciclo</string>
|
||||
<string name="animate_gifs">Animação de GIFs nas miniaturas</string>
|
||||
<string name="animate_gifs">Animação de GIF nas miniaturas</string>
|
||||
<string name="max_brightness">Brilho máximo permitido</string>
|
||||
<string name="crop_thumbnails">Recortar miniaturas em quadrados</string>
|
||||
<string name="screen_rotation_by">Rodar em ecrã completo por</string>
|
||||
|
@ -126,20 +126,22 @@
|
|||
<string name="scroll_thumbnails_horizontally">Deslocação horizontal de miniaturas</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Ocultar interface do sistema se em ecrã completo</string>
|
||||
<string name="delete_empty_folders">Apagar as pastas vazias depois de remover o seu conteúdo</string>
|
||||
<string name="allow_video_gestures">Permitir controlo do volume e brilho dos vídeos através de gestos verticais</string>
|
||||
<string name="allow_photo_gestures">Permitir controlo do brilho das fotos com gestos verticais</string>
|
||||
<string name="allow_video_gestures">Permitir controlo do volume e do brilho dos vídeos através de gestos verticais</string>
|
||||
<string name="show_media_count">Mostrar número de ficheiros na vista principal</string>
|
||||
<string name="replace_share_with_rotate">Substituir a opção Partilhar pela opção Rodar se em ecrã completo</string>
|
||||
<string name="show_extended_details">Mostrar detalhes se em ecrã completo</string>
|
||||
<string name="manage_extended_details">Gerir detalhes exibidos</string>
|
||||
<string name="one_finger_zoom">Allow one finger zoom at fullscreen media</string>
|
||||
<string name="allow_instant_change">Allow instantly changing media by clicking on screen sides</string>
|
||||
<string name="one_finger_zoom">Permitir ampliação com um dedo se em ecrã completo</string>
|
||||
<string name="allow_instant_change">Permitir troca imediata de ficheiro ao tocar nas margens do ecrã</string>
|
||||
<string name="replace_zoomable_images">Replace deep zoomable images with better quality ones</string>
|
||||
<string name="hide_extended_details">Hide extended details when status bar is hidden</string>
|
||||
<string name="hide_extended_details">Ocultar detalhes extra se a barra de estado estiver oculta</string>
|
||||
<string name="do_extra_check">Efetuar uma dupla verificação para evitar mostrar os ficheiros inválidos</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
<string name="fullscreen_media">Fullscreen media</string>
|
||||
<string name="extended_details">Extended details</string>
|
||||
<string name="thumbnails">Miniaturas</string>
|
||||
<string name="fullscreen_media">Multimédia em ecrã completo</string>
|
||||
<string name="extended_details">Detalhes extra</string>
|
||||
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">Прокрутка эскизов по горизонтали</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Автоматически скрывать системный интерфейс в полноэкранном режиме</string>
|
||||
<string name="delete_empty_folders">Удалять пустые папки после удаления их содержимого</string>
|
||||
<string name="allow_photo_gestures">Управлять яркостью фото с помощью вертикальных жестов</string>
|
||||
<string name="allow_video_gestures">Управлять громкостью и яркостью видео с помощью вертикальных жестов</string>
|
||||
<string name="show_media_count">Показывать количество файлов в папках</string>
|
||||
<string name="replace_share_with_rotate">Заменить \"Поделиться\" на \"Повернуть\" в меню полноэкранного режима</string>
|
||||
|
@ -135,6 +136,7 @@
|
|||
<string name="allow_instant_change">Мгновенное переключение медиафайлов нажатием по краю экрана</string>
|
||||
<string name="replace_zoomable_images">Заменить масштабируемые изображения высококачественными</string>
|
||||
<string name="hide_extended_details">Не показывать подробности, если скрыта строка состояния</string>
|
||||
<string name="do_extra_check">Делать дополнительную проверку, чтобы избежать показа неверных файлов</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Миниатюры</string>
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">Prehliadať miniatúry vodorovne</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Automaticky skrývať systémové lišty pri celoobrazovkových médiách</string>
|
||||
<string name="delete_empty_folders">Odstrániť prázdne priečinky po vymazaní ich obsahu</string>
|
||||
<string name="allow_photo_gestures">Allow controlling photo brightness with vertical gestures</string>
|
||||
<string name="allow_video_gestures">Povoliť ovládanie hlasitosti a jasu videí vertikálnymi ťahmi</string>
|
||||
<string name="show_media_count">Zobraziť počet médií v priečinku na hlavnej obrazovke</string>
|
||||
<string name="replace_share_with_rotate">Nahradiť Zdieľanie s Otočením v celoobrazovkovom menu</string>
|
||||
|
@ -135,6 +136,7 @@
|
|||
<string name="allow_instant_change">Povoliť instantné prepínanie médií kliknutím na okraj obrazovky</string>
|
||||
<string name="replace_zoomable_images">Nahradiť hlboko priblížiteľné obrázky s obrázkami s lepšou kvalitou</string>
|
||||
<string name="hide_extended_details">Skryť rozšírené vlastnosti ak je skrytá stavová lišta</string>
|
||||
<string name="do_extra_check">Predísť zobrazovaniu neplatných súborov dodatočnou kontrolou</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Náhľady</string>
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">Rulla horisontellt genom miniatyrer</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Dölj systemanvändargränssnittet automatiskt när media visas i helskärmsläge</string>
|
||||
<string name="delete_empty_folders">Ta bort tomma mappar när deras innehåll tas bort</string>
|
||||
<string name="allow_photo_gestures">Allow controlling photo brightness with vertical gestures</string>
|
||||
<string name="allow_video_gestures">Tillåt styrning av videovolym och videoljusstyrka med vertikala gester</string>
|
||||
<string name="show_media_count">Visa antalet mediefiler i varje mapp i huvudvyn</string>
|
||||
<string name="replace_share_with_rotate">Ersätt Dela med Rotera i helskärmsmenyn</string>
|
||||
|
@ -135,6 +136,7 @@
|
|||
<string name="allow_instant_change">Allow instantly changing media by clicking on screen sides</string>
|
||||
<string name="replace_zoomable_images">Replace deep zoomable images with better quality ones</string>
|
||||
<string name="hide_extended_details">Hide extended details when status bar is hidden</string>
|
||||
<string name="do_extra_check">Do an extra check to avoid showing invalid files</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
|
|
|
@ -5,7 +5,5 @@
|
|||
<dimen name="sd_card_icon_size">30dp</dimen>
|
||||
<dimen name="selection_check_size">38dp</dimen>
|
||||
<dimen name="play_outline_size_big">230dp</dimen>
|
||||
<dimen name="timer_padding">32dp</dimen>
|
||||
<dimen name="tmb_shadow_height">60dp</dimen>
|
||||
<dimen name="video_side_slider_width">250dp</dimen>
|
||||
</resources>
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Automatically hide system UI at fullscreen media</string>
|
||||
<string name="delete_empty_folders">Delete empty folders after deleting their content</string>
|
||||
<string name="allow_photo_gestures">Allow controlling photo brightness with vertical gestures</string>
|
||||
<string name="allow_video_gestures">Allow controlling video volume and brightness with vertical gestures</string>
|
||||
<string name="show_media_count">Show folder media count on the main view</string>
|
||||
<string name="replace_share_with_rotate">Replace Share with Rotate at fullscreen menu</string>
|
||||
|
@ -135,6 +136,7 @@
|
|||
<string name="allow_instant_change">Allow instantly changing media by clicking on screen sides</string>
|
||||
<string name="replace_zoomable_images">Replace deep zoomable images with better quality ones</string>
|
||||
<string name="hide_extended_details">Hide extended details when status bar is hidden</string>
|
||||
<string name="do_extra_check">Do an extra check to avoid showing invalid files</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">水平滚动缩略图</string>
|
||||
<string name="hide_system_ui_at_fullscreen">全屏时自动隐藏状态栏</string>
|
||||
<string name="delete_empty_folders">删除没有内容的空文件夹</string>
|
||||
<string name="allow_photo_gestures">使用纵向滑动手势控制照片亮度</string>
|
||||
<string name="allow_video_gestures">使用纵向滑动手势控制视频音量和亮度</string>
|
||||
<string name="show_media_count">在主界面显示文件夹媒体计数</string>
|
||||
<string name="replace_share_with_rotate">替换全屏时菜单栏的“分享”为“旋转”</string>
|
||||
|
@ -135,6 +136,7 @@
|
|||
<string name="allow_instant_change">通过单击屏幕边缘来切换媒体</string>
|
||||
<string name="replace_zoomable_images">用质量更好的图像替换可深度缩放的图像</string>
|
||||
<string name="hide_extended_details">当状态栏隐藏时隐藏扩展详情</string>
|
||||
<string name="do_extra_check">额外检查以避免显示无效的文件</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">缩略图</string>
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">橫向滑動縮圖</string>
|
||||
<string name="hide_system_ui_at_fullscreen">全螢幕時自動隱藏系統介面</string>
|
||||
<string name="delete_empty_folders">刪除內容後刪除空白資料夾</string>
|
||||
<string name="allow_photo_gestures">允許用上下手勢來控制相片的亮度</string>
|
||||
<string name="allow_video_gestures">允許用上下手勢來控制影片的音量和亮度</string>
|
||||
<string name="show_media_count">主畫面顯示資料夾內媒體檔案數量</string>
|
||||
<string name="replace_share_with_rotate">將全螢幕選單的分享取代為旋轉</string>
|
||||
|
@ -135,6 +136,7 @@
|
|||
<string name="allow_instant_change">允許點擊螢幕邊緣來快速切換媒體檔案</string>
|
||||
<string name="replace_zoomable_images">可深度縮放的圖片用品質更佳的來取代</string>
|
||||
<string name="hide_extended_details">狀態欄隱藏時,同時隱藏詳細資訊</string>
|
||||
<string name="do_extra_check">進行額外檢查,避免顯示無效的檔案</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">縮圖</string>
|
||||
|
@ -149,7 +151,7 @@
|
|||
|
||||
這相簿也支援第三方應用,像是預覽圖片/影片、添加電子信箱附件...等功能,日常使用上相當適合。
|
||||
|
||||
The fingerprint permission is needed for locking either hidden item visibility, or the whole app.
|
||||
指紋權限用來鎖定隱藏的項目或是整個程式。
|
||||
|
||||
優點包含沒廣告,也沒非必要的權限,而且完全開放原始碼,並提供自訂顏色。
|
||||
|
||||
|
|
|
@ -6,9 +6,8 @@
|
|||
<dimen name="play_outline_icon_size">22dp</dimen>
|
||||
<dimen name="selection_check_size">26dp</dimen>
|
||||
<dimen name="play_outline_size_big">150dp</dimen>
|
||||
<dimen name="timer_padding">24dp</dimen>
|
||||
<dimen name="tmb_shadow_height">50dp</dimen>
|
||||
<dimen name="video_side_slider_width">150dp</dimen>
|
||||
<dimen name="instant_change_bar_width">60dp</dimen>
|
||||
<dimen name="tmb_shadow_height">60dp</dimen>
|
||||
<dimen name="media_side_slider_width">60dp</dimen>
|
||||
<dimen name="instant_change_bar_width">30dp</dimen>
|
||||
<dimen name="list_view_folder_thumbnail_size">72dp</dimen>
|
||||
</resources>
|
||||
|
|
|
@ -126,6 +126,7 @@
|
|||
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
||||
<string name="hide_system_ui_at_fullscreen">Automatically hide system UI at fullscreen media</string>
|
||||
<string name="delete_empty_folders">Delete empty folders after deleting their content</string>
|
||||
<string name="allow_photo_gestures">Allow controlling photo brightness with vertical gestures</string>
|
||||
<string name="allow_video_gestures">Allow controlling video volume and brightness with vertical gestures</string>
|
||||
<string name="show_media_count">Show folder media count on the main view</string>
|
||||
<string name="replace_share_with_rotate">Replace Share with Rotate at fullscreen menu</string>
|
||||
|
@ -135,6 +136,7 @@
|
|||
<string name="allow_instant_change">Allow instantly changing media by clicking on screen sides</string>
|
||||
<string name="replace_zoomable_images">Replace deep zoomable images with better quality ones</string>
|
||||
<string name="hide_extended_details">Hide extended details when status bar is hidden</string>
|
||||
<string name="do_extra_check">Do an extra check to avoid showing invalid files</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
|
|
Loading…
Reference in New Issue