Compare commits

...

63 Commits
2.3.1 ... 2.3.7

Author SHA1 Message Date
tibbi
f993c458dd updating changelog 2017-02-09 21:59:44 +01:00
tibbi
d26b62446e update version to 2.3.7 2017-02-09 21:59:39 +01:00
tibbi
0e541f091c delete images on a background thread from viewpager too 2017-02-09 21:57:21 +01:00
tibbi
58ace8e59f url decode the document file uri before deleting, should fix SD delete issues 2017-02-09 21:46:43 +01:00
tibbi
099e13ea0c check lollipop sd permissions at deleting asap 2017-02-09 21:38:07 +01:00
tibbi
3a0dbd9d57 update commons to 2.5.14 2017-02-09 21:10:53 +01:00
tibbi
5a625a3388 add a null check to viewpager menu items 2017-02-09 21:03:47 +01:00
tibbi
f728ca2650 add an activity null check at toggling fullscreen 2017-02-09 20:51:42 +01:00
tibbi
3a48b5d41f correct some slovak strings 2017-02-09 19:03:44 +01:00
tibbi
e2ad9ebfa6 adding slovak translation 2017-02-08 23:09:08 +01:00
tibbi
bd29368585 updating changelog 2017-02-07 00:24:00 +01:00
tibbi
49bce54b52 update version to 2.3.6 2017-02-07 00:23:51 +01:00
tibbi
77e32c2790 speed up checking if directories or images changed 2017-02-07 00:14:51 +01:00
tibbi
9a7361795f check if a Camera app is available before trying to launch it 2017-02-07 00:08:32 +01:00
tibbi
0f0b3cfc30 avoid VideoFragment implementing so many interfaces 2017-02-07 00:04:30 +01:00
tibbi
f2bcac6298 add the showmediapicker dialog 2017-02-06 23:55:42 +01:00
tibbi
762662a976 replace the media selection spinner in settings with text 2017-02-06 23:34:53 +01:00
tibbi
b064a76e97 update commons to 2.5.13 2017-02-06 22:53:09 +01:00
Tibor Kaputa
7a7c8d0801 Merge pull request #155 from mcbaze/patch-12
update Russian
2017-02-01 20:40:38 +01:00
Taras
15e6ee399d update Russian 2017-02-01 22:37:21 +03:00
Tibor Kaputa
9837ecec26 Merge pull request #153 from smarquespt/master
Portuguese update
2017-01-29 17:12:10 +01:00
Sérgio Marques
aa19b35d56 Portuguese update 2017-01-29 12:36:25 +00:00
tibbi
d6f77febfe update commons to 2.5.4 2017-01-25 22:02:20 +01:00
tibbi
992950f2a7 updating changelog 2017-01-23 23:07:57 +01:00
tibbi
5d23653523 update version to 2.3.5 2017-01-23 23:07:49 +01:00
tibbi
2c4bbfb0e2 make sure there is an application with maps before sending the intent 2017-01-23 23:05:25 +01:00
tibbi
5bba8d27dc update commons to 2.5.3 2017-01-23 23:01:18 +01:00
tibbi
ac24ac91e0 update commons to 2.5.1 2017-01-23 22:04:03 +01:00
tibbi
06ac24eca5 add hex code picking in Whats new 2017-01-23 20:02:35 +01:00
tibbi
d14ce706e4 make sure settings items dont overlap 2017-01-23 19:37:32 +01:00
tibbi
b6ee141c9c remove a writeexif line when opening weird images, like K9 attachments 2017-01-23 19:33:44 +01:00
tibbi
cf4bb250fe update commons to 2.4.7 2017-01-23 19:17:38 +01:00
Tibor Kaputa
9c04107608 Merge pull request #149 from smarquespt/master
Portuguese update
2017-01-22 23:07:41 +01:00
Sérgio Marques
a60aba6cb7 Portuguese update 2017-01-22 22:02:52 +00:00
tibbi
48fbf859ea update the signing store files 2017-01-22 20:12:48 +01:00
tibbi
1cc6301afd updating changelog 2017-01-22 20:04:46 +01:00
tibbi
90f7b0fb4c update version to 2.3.4 with Whats new update 2017-01-22 20:04:40 +01:00
tibbi
10670a8f0d wrap the whole exif part of photofragment in try catch 2017-01-22 18:58:04 +01:00
tibbi
9773a481c8 add some null checks to obtaining directories 2017-01-22 18:53:32 +01:00
tibbi
d1995d129a fix #138, add displaying photos on map, if theres coords available 2017-01-22 18:36:27 +01:00
tibbi
06e6f8a3f5 add a menu item for showing photo or video on map 2017-01-22 18:03:14 +01:00
tibbi
c4f49c56c9 use the main thread when deleting images from fullscreen view 2017-01-22 17:44:27 +01:00
tibbi
3a2cdd40c4 update commons to 2.4.6 2017-01-22 17:39:28 +01:00
Tibor Kaputa
bc81f6a7e3 Merge pull request #147 from nopeppermint/patch-2
update German translation
2017-01-22 15:59:30 +01:00
Stefan
0483706359 update German translation 2017-01-22 15:18:39 +01:00
Tibor Kaputa
9ba8391634 Merge pull request #146 from Sopor-/patch-1
Updated Swedish translation
2017-01-21 23:51:06 +01:00
Sopor
78d7e6e4d4 Updated Swedish translation
Release notes are not translated
2017-01-21 23:43:46 +01:00
tibbi
c6d29b7e65 Merge branch 'master' of github.com:SimpleMobileTools/Simple-Gallery 2017-01-20 21:47:56 +01:00
tibbi
714f4e778e take the icon for toggle filename from commons 2017-01-20 21:47:43 +01:00
Tibor Kaputa
af97d961d5 Merge pull request #143 from jbembennek/patch-1
Update strings.xml
2017-01-18 22:35:02 +01:00
jbembennek
d0964c66a1 Update strings.xml
I've translated some more strings in german language!
2017-01-18 21:02:59 +01:00
tibbi
3d14119929 updating a german string 2017-01-18 20:15:53 +01:00
tibbi
b35e8a93f8 updating changelog 2017-01-16 20:49:14 +01:00
tibbi
a84158eab7 update version to 2.3.3 2017-01-16 20:48:53 +01:00
tibbi
e13a37edf9 remove the Source field from the copy dialog 2017-01-16 20:45:07 +01:00
tibbi
f6aecb62c0 update commons to 2.4.1 2017-01-16 20:33:38 +01:00
tibbi
a3f7384ea9 updating changelog 2017-01-15 19:23:07 +01:00
tibbi
de5907b176 update version to 2.3.2 2017-01-15 19:22:56 +01:00
tibbi
e6124bd69f update version to 2.3.9 2017-01-15 19:22:42 +01:00
tibbi
483b49ed25 tweak the launcher icon a bit 2017-01-15 19:12:27 +01:00
tibbi
876f81c0e7 add a null check before displaying properties dialog 2017-01-15 11:59:47 +01:00
tibbi
40ec71c5c2 remember scroll position when going from media to fullscreen mode 2017-01-15 11:51:18 +01:00
tibbi
c6c945eb36 cache 40 photos per folder 2017-01-15 11:46:21 +01:00
42 changed files with 589 additions and 209 deletions

View File

@@ -1,6 +1,42 @@
Changelog
==========
Version 2.3.7 *(2017-02-09)*
----------------------------
* Fixed some issues with inability to delete files from SD card
* Some crashfixes
Version 2.3.6 *(2017-02-07)*
----------------------------
* Some crashfixes
Version 2.3.5 *(2017-01-23)*
----------------------------
* Allow selecting colors by hex codes
* Added a button for restoring default colors
Version 2.3.4 *(2017-01-22)*
----------------------------
* Allow showing photos and videos on the map, if coords are available
* Some crashfixes
Version 2.3.3 *(2017-01-16)*
----------------------------
* Fix a rare bug which could remove unwanted folders from SD card
* Remove the Source field from copy dialog to make it simpler
Version 2.3.2 *(2017-01-15)*
----------------------------
* Remember 40 photos per folder for instant loading
* Remember the scroll position when opening fullscreen photo
* Make the launcher icon a bit smaller
Version 2.3.1 *(2017-01-14)*
----------------------------

View File

@@ -10,8 +10,8 @@ android {
applicationId "com.simplemobiletools.gallery"
minSdkVersion 16
targetSdkVersion 25
versionCode 62
versionName "2.3.1"
versionCode 68
versionName "2.3.7"
}
signingConfigs {
@@ -32,7 +32,7 @@ android {
}
dependencies {
compile 'com.simplemobiletools:commons:2.3.8'
compile 'com.simplemobiletools:commons:2.5.14'
compile 'com.davemorrissey.labs:subsampling-scale-image-view:3.6.0'
compile 'com.theartofdev.edmodo:android-image-cropper:2.3.1'
compile 'com.bignerdranch.android:recyclerview-multiselect:0.2'
@@ -59,12 +59,11 @@ def propFile = new File('signing.properties')
if (propFile.canRead()) {
props.load(new FileInputStream(propFile))
if (props != null && props.containsKey('STORE_FILE') && props.containsKey('STORE_PASSWORD') &&
props.containsKey('KEY_ALIAS') && props.containsKey('KEY_PASSWORD')) {
if (props != null && props.containsKey('STORE_FILE') && props.containsKey('KEY_ALIAS') && props.containsKey('PASSWORD')) {
android.signingConfigs.release.storeFile = file(props['STORE_FILE'])
android.signingConfigs.release.storePassword = props['STORE_PASSWORD']
android.signingConfigs.release.storePassword = props['PASSWORD']
android.signingConfigs.release.keyAlias = props['KEY_ALIAS']
android.signingConfigs.release.keyPassword = props['KEY_PASSWORD']
android.signingConfigs.release.keyPassword = props['PASSWORD']
} else {
println 'signing.properties found but some entries are missing'
android.buildTypes.release.signingConfig = null

View File

@@ -29,6 +29,7 @@ import com.simplemobiletools.gallery.models.Directory
import com.simplemobiletools.gallery.views.MyScalableRecyclerView
import kotlinx.android.synthetic.main.activity_main.*
import java.io.File
import java.net.URLDecoder
import java.util.*
class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
@@ -100,7 +101,7 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
}
private fun tryloadGallery() {
if (hasStoragePermission()) {
if (hasWriteStoragePermission()) {
if (config.showAll)
showAllMedia()
else
@@ -193,7 +194,8 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
val document = getFileDocument(file.absolutePath, config.treeUri)
// double check we have the uri to the proper file path, not some parent folder
if (document.uri.toString().endsWith(file.absolutePath.getFilenameFromPath())) {
val uri = URLDecoder.decode(document.uri.toString(), "UTF-8")
if (uri.endsWith(file.absolutePath.getFilenameFromPath())) {
Thread({
document.delete()
}).start()
@@ -297,9 +299,10 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
fun gotDirectories(dirs: ArrayList<Directory>) {
directories_holder.isRefreshing = false
mIsGettingDirs = false
if (dirs == mDirs) {
if (dirs.hashCode() == mDirs.hashCode())
return
}
mDirs = dirs
setupAdapter()
@@ -334,6 +337,8 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
add(Release(54, R.string.release_54))
add(Release(58, R.string.release_58))
add(Release(62, R.string.release_62))
add(Release(65, R.string.release_65))
add(Release(66, R.string.release_66))
checkWhatsNew(this, BuildConfig.VERSION_CODE)
}
}

View File

@@ -27,10 +27,12 @@ import com.simplemobiletools.gallery.views.MyScalableRecyclerView
import kotlinx.android.synthetic.main.activity_media.*
import java.io.File
import java.io.IOException
import java.net.URLDecoder
import java.util.*
class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
private val TAG = MediaActivity::class.java.simpleName
private val SAVE_MEDIA_CNT = 40
private var mMedia = ArrayList<Medium>()
@@ -40,6 +42,7 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
private var mIsGetAnyIntent = false
private var mIsGettingMedia = false
private var mShowAll = false
private var mLoadedInitialPhotos = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -64,7 +67,7 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
}
private fun tryloadGallery() {
if (hasStoragePermission()) {
if (hasWriteStoragePermission()) {
val dirName = getHumanizedFilename(mPath)
title = if (mShowAll) resources.getString(R.string.all_folders) else dirName
getMedia()
@@ -171,8 +174,10 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
if (media.size == 0) {
media_holder.isRefreshing = true
} else {
gotMedia(media)
if (!mLoadedInitialPhotos)
gotMedia(media)
}
mLoadedInitialPhotos = true
GetMediaAsynctask(applicationContext, mPath, mIsGetVideoIntent, mIsGetImageIntent, mShowAll) {
gotMedia(it)
@@ -218,7 +223,8 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
val document = getFileDocument(it.absolutePath, config.treeUri)
// double check we have the uri to the proper file path, not some parent folder
if (document.uri.toString().endsWith(it.absolutePath.getFilenameFromPath()) && !document.isDirectory) {
val uri = URLDecoder.decode(document.uri.toString(), "UTF-8")
if (uri.endsWith(it.absolutePath.getFilenameFromPath()) && !document.isDirectory) {
Thread({
document.delete()
}).start()
@@ -281,9 +287,9 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
fun gotMedia(media: ArrayList<Medium>) {
mIsGettingMedia = false
media_holder.isRefreshing = false
if (media == mMedia) {
if (media.hashCode() == mMedia.hashCode())
return
}
mMedia = media
initializeGallery()
@@ -291,7 +297,7 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
}
private fun storeFolder() {
val subList = mMedia.subList(0, Math.min(30, mMedia.size))
val subList = mMedia.subList(0, Math.min(SAVE_MEDIA_CNT, mMedia.size))
val json = Gson().toJson(subList)
config.saveFolderMedia(mPath, json)
}

View File

@@ -1,11 +1,12 @@
package com.simplemobiletools.gallery.activities
import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import com.simplemobiletools.commons.extensions.updateTextColors
import com.simplemobiletools.gallery.R
import com.simplemobiletools.gallery.dialogs.ShowMediaDialog
import com.simplemobiletools.gallery.extensions.config
import com.simplemobiletools.gallery.helpers.IMAGES
import com.simplemobiletools.gallery.helpers.IMAGES_AND_VIDEOS
import kotlinx.android.synthetic.main.activity_settings.*
class SettingsActivity : SimpleActivity() {
@@ -65,14 +66,18 @@ class SettingsActivity : SimpleActivity() {
}
private fun setupShowMedia() {
settings_show_media.setSelection(config.showMedia)
settings_show_media.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
config.showMedia = settings_show_media.selectedItemPosition
}
override fun onNothingSelected(parent: AdapterView<*>?) {
settings_show_media.text = getShowMediaText()
settings_show_media_holder.setOnClickListener {
ShowMediaDialog(this) {
config.showMedia = it
settings_show_media.text = getShowMediaText()
}
}
}
private fun getShowMediaText() = getString(when (config.showMedia) {
IMAGES_AND_VIDEOS -> R.string.images_and_videos
IMAGES -> R.string.images
else -> R.string.videos
})
}

View File

@@ -3,6 +3,8 @@ package com.simplemobiletools.gallery.activities
import android.app.Activity
import android.content.Intent
import android.database.Cursor
import android.media.ExifInterface
import android.net.Uri
import android.os.Bundle
import android.provider.MediaStore
import android.support.v4.view.ViewPager
@@ -26,6 +28,7 @@ import com.simplemobiletools.gallery.helpers.REQUEST_SET_WALLPAPER
import com.simplemobiletools.gallery.models.Medium
import kotlinx.android.synthetic.main.activity_medium.*
import java.io.File
import java.net.URLDecoder
import java.util.*
class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, ViewPagerFragment.FragmentListener {
@@ -41,7 +44,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_medium)
if (!hasStoragePermission()) {
if (!hasWriteStoragePermission()) {
finish()
return
}
@@ -82,7 +85,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
override fun onResume() {
super.onResume()
if (!hasStoragePermission()) {
if (!hasWriteStoragePermission()) {
finish()
}
supportActionBar?.setBackgroundDrawable(resources.getDrawable(R.drawable.actionbar_gradient_background))
@@ -98,6 +101,9 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (getCurrentMedium() == null)
return true
when (item.itemId) {
R.id.menu_set_as_wallpaper -> setAsWallpaper(getCurrentFile())
R.id.menu_copy_move -> displayCopyDialog()
@@ -107,6 +113,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
R.id.menu_rename -> renameFile()
R.id.menu_edit -> openEditor(getCurrentFile())
R.id.menu_properties -> showProperties()
R.id.show_on_map -> showOnMap()
else -> return super.onOptionsItemSelected(item)
}
return true
@@ -141,9 +148,68 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
}
private fun showProperties() {
PropertiesDialog(this, getCurrentFile().absolutePath, false)
if (getCurrentMedium() != null)
PropertiesDialog(this, getCurrentMedium()!!.path, false)
}
private fun showOnMap() {
val exif = ExifInterface(getCurrentMedium()?.path)
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)
val lon_ref = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF)
if (lat == null || lat_ref == null || lon == null || lon_ref == null) {
toast(R.string.unknown_location)
} else {
val geoLat = if (lat_ref == "N") {
convertToDegree(lat)
} else {
0 - convertToDegree(lat)
}
val geoLon = if (lon_ref == "E") {
convertToDegree(lon)
} else {
0 - convertToDegree(lon)
}
val uriBegin = "geo:$geoLat,$geoLon"
val query = "$geoLat, $geoLon"
val encodedQuery = Uri.encode(query)
val uriString = "$uriBegin?q=$encodedQuery&z=16"
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(uriString))
val packageManager = packageManager
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
} else {
toast(R.string.no_map_application)
}
}
}
private fun convertToDegree(stringDMS: String): Float {
val dms = stringDMS.split(",".toRegex(), 3).toTypedArray()
val stringD = dms[0].split("/".toRegex(), 2).toTypedArray()
val d0 = stringD[0].toDouble()
val d1 = stringD[1].toDouble()
val floatD = d0 / d1
val stringM = dms[1].split("/".toRegex(), 2).toTypedArray()
val m0 = stringM[0].toDouble()
val m1 = stringM[1].toDouble()
val floatM = m0 / m1
val stringS = dms[2].split("/".toRegex(), 2).toTypedArray()
val s0 = stringS[0].toDouble()
val s1 = stringS[1].toDouble()
val floatS = s0 / s1
return (floatD + floatM / 60 + floatS / 3600).toFloat()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
if (requestCode == REQUEST_EDIT_IMAGE) {
if (resultCode == Activity.RESULT_OK && resultData != null) {
@@ -172,10 +238,14 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
if (needsStupidWritePermissions(mPath)) {
if (!isShowingPermDialog(file)) {
val document = getFileDocument(mPath, config.treeUri)
if (document.uri.toString().endsWith(file.absolutePath.getFilenameFromPath()) && !document.isDirectory)
// double check we have the uri to the proper file path, not some parent folder
val uri = URLDecoder.decode(document.uri.toString(), "UTF-8")
if (uri.endsWith(file.absolutePath.getFilenameFromPath()) && !document.isDirectory) {
Thread({
document.delete()
}).start()
}
}
} else {
Thread({

View File

@@ -240,6 +240,16 @@ class DirectoryAdapter(val activity: SimpleActivity, val dirs: MutableList<Direc
val paths = ArrayList<String>(selections.size)
val removeDirs = ArrayList<Directory>(selections.size)
var isShowingPermDialog = false
activity.runOnUiThread {
if (activity.isShowingPermDialog(File(dirs[selections[0]].path))) {
isShowingPermDialog = true
}
}
if (isShowingPermDialog)
return
selections.reverse()
selections.forEach {
val directory = dirs[it]
@@ -249,6 +259,7 @@ class DirectoryAdapter(val activity: SimpleActivity, val dirs: MutableList<Direc
}
dirs.removeAll(removeDirs)
markedItems.clear()
listener?.deleteFiles(paths)
}

View File

@@ -181,6 +181,16 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
val files = ArrayList<File>(selections.size)
val removeMedia = ArrayList<Medium>(selections.size)
var isShowingPermDialog = false
activity.runOnUiThread {
if (activity.isShowingPermDialog(File(media[selections[0]].path))) {
isShowingPermDialog = true
}
}
if (isShowingPermDialog)
return
selections.reverse()
selections.forEach {
val medium = media[it]
@@ -190,6 +200,7 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
}
media.removeAll(removeMedia)
markedItems.clear()
listener?.deleteFiles(files)
}

View File

@@ -23,8 +23,6 @@ class CopyDialog(val activity: SimpleActivity, val files: ArrayList<File>, val c
val sourcePath = files[0].parent.trimEnd('/')
var destinationPath = ""
view.source.text = activity.humanizePath(sourcePath)
view.destination.setOnClickListener {
PickAlbumDialog(activity) {
destinationPath = it
@@ -43,7 +41,7 @@ class CopyDialog(val activity: SimpleActivity, val files: ArrayList<File>, val c
return@setOnClickListener
}
if (view.source.text.trimEnd('/') == destinationPath.trimEnd('/')) {
if (sourcePath.trimEnd('/') == destinationPath.trimEnd('/')) {
context.toast(R.string.source_and_destination_same)
return@setOnClickListener
}

View File

@@ -0,0 +1,46 @@
package com.simplemobiletools.gallery.dialogs
import android.app.Activity
import android.support.v7.app.AlertDialog
import android.view.LayoutInflater
import android.widget.RadioGroup
import com.simplemobiletools.commons.extensions.setupDialogStuff
import com.simplemobiletools.gallery.R
import com.simplemobiletools.gallery.extensions.config
import com.simplemobiletools.gallery.helpers.IMAGES
import com.simplemobiletools.gallery.helpers.IMAGES_AND_VIDEOS
import com.simplemobiletools.gallery.helpers.VIDEOS
import kotlinx.android.synthetic.main.dialog_show_media.view.*
class ShowMediaDialog(val activity: Activity, val callback: (newValue: Int) -> Unit) : AlertDialog.Builder(activity), RadioGroup.OnCheckedChangeListener {
val dialog: AlertDialog?
init {
val view = LayoutInflater.from(activity).inflate(R.layout.dialog_show_media, null).dialog_radio_view.apply {
check(getSavedItem())
setOnCheckedChangeListener(this@ShowMediaDialog)
}
dialog = AlertDialog.Builder(activity)
.create().apply {
activity.setupDialogStuff(view, this)
}
}
override fun onCheckedChanged(group: RadioGroup?, checkedId: Int) {
callback.invoke(getNewValue(checkedId))
dialog?.dismiss()
}
fun getNewValue(id: Int) = when (id) {
R.id.dialog_radio_images -> IMAGES
R.id.dialog_radio_videos -> VIDEOS
else -> IMAGES_AND_VIDEOS
}
fun getSavedItem() = when (activity.config.showMedia) {
IMAGES -> R.id.dialog_radio_images
VIDEOS -> R.id.dialog_radio_videos
else -> R.id.dialog_radio_images_and_videos
}
}

View File

@@ -6,6 +6,8 @@ import android.database.Cursor
import android.net.Uri
import android.provider.MediaStore
import com.simplemobiletools.commons.extensions.humanizePath
import com.simplemobiletools.commons.extensions.toast
import com.simplemobiletools.gallery.R
import com.simplemobiletools.gallery.activities.SettingsActivity
import com.simplemobiletools.gallery.helpers.Config
import com.simplemobiletools.gallery.helpers.IMAGES
@@ -13,6 +15,7 @@ import com.simplemobiletools.gallery.helpers.VIDEOS
import java.io.File
import java.util.*
fun Context.getRealPathFromURI(uri: Uri): String? {
var cursor: Cursor? = null
try {
@@ -35,7 +38,12 @@ fun Context.getHumanizedFilename(path: String): String {
}
fun Context.launchCamera() {
startActivity(Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA))
val intent = Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA)
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
} else {
toast(R.string.no_camera_app_found)
}
}
fun Context.launchSettings() {
@@ -54,7 +62,7 @@ fun Context.getParents(isPickImage: Boolean, isPickVideo: Boolean): ArrayList<St
cursor = contentResolver.query(uri, columns, where, args, null)
if (cursor?.moveToFirst() == true) {
do {
val curPath = cursor.getStringValue(MediaStore.Images.Media.DATA)
val curPath = cursor.getStringValue(MediaStore.Images.Media.DATA) ?: ""
parents.add(File(curPath).parent)
} while (cursor.moveToNext())
}
@@ -62,8 +70,10 @@ fun Context.getParents(isPickImage: Boolean, isPickVideo: Boolean): ArrayList<St
cursor?.close()
}
filterDirectories(parents)
return parents
val notNull = ArrayList<String>()
parents.mapNotNullTo(notNull, { it })
filterDirectories(notNull)
return notNull
}
fun Context.getWhereCondition(isPickImage: Boolean, isPickVideo: Boolean): String {
@@ -86,7 +96,7 @@ fun Context.getArgs(isPickImage: Boolean, isPickVideo: Boolean): Array<String> {
}
}
fun Context.filterDirectories(dirs: MutableList<String>) {
fun Context.filterDirectories(dirs: ArrayList<String>) {
if (!config.showHiddenFolders) {
removeHiddenFolders(dirs)
removeNoMediaFolders(dirs)
@@ -114,4 +124,3 @@ private fun removeNoMediaFolders(paths: MutableList<String>) {
}
val Context.config: Config get() = Config.newInstance(this)

View File

@@ -16,6 +16,7 @@ import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.Target
import com.davemorrissey.labs.subscaleview.ImageSource
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
import com.simplemobiletools.commons.extensions.toast
import com.simplemobiletools.gallery.R
import com.simplemobiletools.gallery.extensions.getRealPathFromURI
import com.simplemobiletools.gallery.helpers.MEDIUM
@@ -43,32 +44,33 @@ class PhotoFragment : ViewPagerFragment() {
medium.path = context.getRealPathFromURI(Uri.parse(medium.path)) ?: ""
if (medium.path.isEmpty()) {
var inputStream = context.contentResolver.openInputStream(Uri.parse(originalPath))
val exif = ExifInterface()
exif.readExif(inputStream, ExifInterface.Options.OPTION_ALL)
val tag = exif.getTag(ExifInterface.TAG_ORIENTATION)
val orientation = tag?.getValueAsInt(-1) ?: -1
inputStream = context.contentResolver.openInputStream(Uri.parse(originalPath))
val original = BitmapFactory.decodeStream(inputStream)
val rotated = rotateViaMatrix(original, orientation)
exif.setTagValue(ExifInterface.TAG_ORIENTATION, 1)
exif.removeCompressedThumbnail()
val file = File(context.externalCacheDir, Uri.parse(originalPath).lastPathSegment)
var out: FileOutputStream? = null
try {
var inputStream = context.contentResolver.openInputStream(Uri.parse(originalPath))
val exif = ExifInterface()
exif.readExif(inputStream, ExifInterface.Options.OPTION_ALL)
val tag = exif.getTag(ExifInterface.TAG_ORIENTATION)
val orientation = tag?.getValueAsInt(-1) ?: -1
inputStream = context.contentResolver.openInputStream(Uri.parse(originalPath))
val original = BitmapFactory.decodeStream(inputStream)
val rotated = rotateViaMatrix(original, orientation)
exif.setTagValue(ExifInterface.TAG_ORIENTATION, 1)
exif.removeCompressedThumbnail()
val file = File(context.externalCacheDir, Uri.parse(originalPath).lastPathSegment)
out = FileOutputStream(file)
rotated.compress(Bitmap.CompressFormat.JPEG, 100, out)
medium.path = file.absolutePath
} catch (e: Exception) {
context.toast(R.string.unknown_error_occurred)
return view
} finally {
try {
out?.close()
} catch (e: IOException) {
}
}
exif.writeExif(rotated, file.absolutePath, 100)
medium.path = file.absolutePath
}
}

View File

@@ -3,7 +3,6 @@ package com.simplemobiletools.gallery.fragments
import android.content.res.Configuration
import android.media.AudioManager
import android.media.MediaPlayer
import android.media.MediaPlayer.OnPreparedListener
import android.net.Uri
import android.os.Build
import android.os.Bundle
@@ -24,8 +23,7 @@ import kotlinx.android.synthetic.main.pager_video_item.view.*
import java.io.IOException
import java.util.*
class VideoFragment : ViewPagerFragment(), View.OnClickListener, SurfaceHolder.Callback, MediaPlayer.OnCompletionListener,
MediaPlayer.OnVideoSizeChangedListener, SeekBar.OnSeekBarChangeListener, OnPreparedListener {
class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSeekBarChangeListener {
private var mMediaPlayer: MediaPlayer? = null
private var mSurfaceView: SurfaceView? = null
@@ -60,7 +58,6 @@ class VideoFragment : ViewPagerFragment(), View.OnClickListener, SurfaceHolder.C
mIsFullscreen = activity.window.decorView.systemUiVisibility and View.SYSTEM_UI_FLAG_FULLSCREEN == View.SYSTEM_UI_FLAG_FULLSCREEN
setupPlayer()
mView.setOnClickListener(this)
activity.window.decorView.setOnSystemUiVisibilityChangeListener { visibility ->
val fullscreen = visibility and View.SYSTEM_UI_FLAG_FULLSCREEN != 0
@@ -76,12 +73,16 @@ class VideoFragment : ViewPagerFragment(), View.OnClickListener, SurfaceHolder.C
if (activity == null)
return
mView.video_play_outline.setOnClickListener(this)
mView.video_play_outline.setOnClickListener { togglePlayPause() }
mSurfaceView = mView.video_surface
mSurfaceView!!.setOnClickListener(this)
mSurfaceHolder = mSurfaceView!!.holder
mSurfaceHolder!!.addCallback(this)
mSurfaceView!!.setOnClickListener({
mIsFullscreen = !mIsFullscreen
checkFullscreen()
listener?.fragmentClicked()
})
initTimeHolder()
}
@@ -157,18 +158,10 @@ class VideoFragment : ViewPagerFragment(), View.OnClickListener, SurfaceHolder.C
outState.putInt(PROGRESS, mCurrTime)
}
override fun onClick(v: View) {
when (v.id) {
R.id.video_play_outline -> togglePlayPause()
else -> {
mIsFullscreen = !mIsFullscreen
checkFullscreen()
listener?.fragmentClicked()
}
}
}
private fun checkFullscreen() {
if (activity == null)
return
var anim = android.R.anim.fade_in
if (mIsFullscreen) {
anim = android.R.anim.fade_out
@@ -177,7 +170,7 @@ class VideoFragment : ViewPagerFragment(), View.OnClickListener, SurfaceHolder.C
mSeekBar!!.setOnSeekBarChangeListener(this)
}
AnimationUtils.loadAnimation(context, anim).apply {
AnimationUtils.loadAnimation(activity, anim).apply {
duration = 150
fillAfter = true
mTimeHolder!!.startAnimation(this)
@@ -218,9 +211,9 @@ class VideoFragment : ViewPagerFragment(), View.OnClickListener, SurfaceHolder.C
mMediaPlayer = MediaPlayer().apply {
setDataSource(context, Uri.parse(mMedium.path))
setDisplay(mSurfaceHolder)
setOnCompletionListener(this@VideoFragment)
setOnVideoSizeChangedListener(this@VideoFragment)
setOnPreparedListener(this@VideoFragment)
setOnCompletionListener { videoCompleted() }
setOnVideoSizeChangedListener({ mediaPlayer, width, height -> setVideoSize() })
setOnPreparedListener { videoPrepared(it) }
setAudioStreamType(AudioManager.STREAM_MUSIC)
prepareAsync()
}
@@ -262,6 +255,26 @@ class VideoFragment : ViewPagerFragment(), View.OnClickListener, SurfaceHolder.C
mTimerHandler?.removeCallbacksAndMessages(null)
}
private fun videoPrepared(mediaPlayer: MediaPlayer) {
mDuration = mediaPlayer.duration / 1000
addPreviewImage()
setupTimeHolder()
setProgress(mCurrTime)
if (mIsFragmentVisible && context.config.autoplayVideos)
playVideo()
}
private fun videoCompleted() {
if (context.config.loopVideos) {
playVideo()
} else {
mSeekBar!!.progress = mSeekBar!!.max
mCurrTimeView!!.text = getTimeString(mDuration)
pauseVideo()
}
}
override fun surfaceCreated(holder: SurfaceHolder) {
initMediaPlayer()
}
@@ -275,20 +288,6 @@ class VideoFragment : ViewPagerFragment(), View.OnClickListener, SurfaceHolder.C
mMediaPlayer = null
}
override fun onCompletion(mp: MediaPlayer) {
if (context.config.loopVideos) {
playVideo()
} else {
mSeekBar!!.progress = mSeekBar!!.max
mCurrTimeView!!.text = getTimeString(mDuration)
pauseVideo()
}
}
override fun onVideoSizeChanged(mp: MediaPlayer, width: Int, height: Int) {
setVideoSize()
}
private fun setVideoSize() {
if (activity == null)
return
@@ -360,14 +359,4 @@ class VideoFragment : ViewPagerFragment(), View.OnClickListener, SurfaceHolder.C
mIsDragged = false
}
override fun onPrepared(mp: MediaPlayer) {
mDuration = mp.duration / 1000
addPreviewImage()
setupTimeHolder()
setProgress(mCurrTime)
if (mIsFragmentVisible && context.config.autoplayVideos)
playVideo()
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 516 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 293 B

View File

@@ -115,27 +115,32 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:paddingBottom="@dimen/activity_margin"
android:paddingBottom="@dimen/bigger_margin"
android:paddingLeft="@dimen/activity_margin"
android:paddingRight="@dimen/medium_margin"
android:paddingTop="@dimen/activity_margin">
android:paddingRight="@dimen/activity_margin"
android:paddingTop="@dimen/bigger_margin">
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_show_media_label"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/settings_show_media"
android:layout_toStartOf="@+id/settings_show_media"
android:paddingLeft="@dimen/medium_margin"
android:paddingStart="@dimen/medium_margin"
android:paddingRight="@dimen/medium_margin"
android:text="@string/show_media"/>
<com.simplemobiletools.commons.views.MyAppCompatSpinner
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_show_media"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:entries="@array/show_media_items"/>
android:layout_marginEnd="@dimen/small_margin"
android:layout_marginRight="@dimen/small_margin"
android:background="@null"
android:clickable="false"/>
</RelativeLayout>
</LinearLayout>

View File

@@ -9,22 +9,6 @@
android:paddingRight="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/source_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/source"
android:textSize="@dimen/smaller_text_size"/>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/source"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/activity_margin"
android:layout_marginLeft="@dimen/activity_margin"
android:paddingRight="@dimen/small_margin"
android:paddingTop="@dimen/small_margin"/>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/destination_label"
android:layout_width="wrap_content"

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<RadioGroup
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialog_radio_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MyCompatRadioButton
android:id="@+id/dialog_radio_images"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin"
android:text="@string/images"/>
<com.simplemobiletools.commons.views.MyCompatRadioButton
android:id="@+id/dialog_radio_videos"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin"
android:text="@string/videos"/>
<com.simplemobiletools.commons.views.MyCompatRadioButton
android:id="@+id/dialog_radio_images_and_videos"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin"
android:text="@string/images_and_videos"/>
</RadioGroup>

View File

@@ -8,7 +8,7 @@
app:showAsAction="ifRoom"/>
<item
android:id="@+id/toggle_filename"
android:icon="@drawable/ic_toggle_filename"
android:icon="@drawable/ic_label"
android:title="@string/toggle_filename"
app:showAsAction="ifRoom"/>
<item

View File

@@ -38,4 +38,8 @@
android:icon="@drawable/ic_info"
android:title="@string/properties"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/show_on_map"
android:title="@string/show_on_map"
app:showAsAction="never"/>
</menu>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 933 B

After

Width:  |  Height:  |  Size: 924 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@@ -13,19 +13,23 @@
<string name="hidden">(versteckt)</string>
<string name="save_as">Speichern unter</string>
<string name="file_saved">Datei erfolgreich gespeichert</string>
<string name="pin_folder">fixiere Ordner</string>
<string name="unpin_folder">Unpin folder</string>
<string name="pin_folder">Fixiere Ordner</string>
<string name="unpin_folder">Ordner lösen</string>
<string name="show_all">Inhalt aller Ordner (anzeigen)</string>
<string name="all_folders">All media</string>
<string name="folder_view">wechsle zu Ordner Ansicht</string>
<string name="other_folder">Other folder</string>
<string name="all_folders">Alle Medien</string>
<string name="folder_view">Wechsle zu Ordner Ansicht</string>
<string name="other_folder">andere Ordner</string>
<string name="show_on_map">Show on map</string>
<string name="unknown_location">Unknown location</string>
<string name="no_map_application">No application with maps has been found</string>
<string name="no_camera_app_found">No Camera app has been found</string>
<!-- Resizing -->
<string name="resize">Resize</string>
<string name="resize_and_save">Resize selection and save</string>
<string name="resize">Größe ändern</string>
<string name="resize_and_save">Größe ändern und speichern</string>
<string name="width">Breite</string>
<string name="height">Höhe</string>
<string name="keep_aspect_ratio">Behalte Seitenverhältnis bei</string>
<string name="keep_aspect_ratio">Seitenverhältnis beibehalten</string>
<string name="invalid_values">Bitte gib eine korrekte Auflösung ein</string>
<!-- Renaming -->
@@ -35,9 +39,9 @@
<string name="rename_folder_error">Konnte den Ordner nicht umbenennen</string>
<string name="rename_folder_empty">Ordnername darf nicht leer sein</string>
<string name="rename_folder_exists">Ein Ordner mit diesem Namen existiert bereits</string>
<string name="rename_folder_root">Cannot rename the root folder of a storage</string>
<string name="rename_folder_root">Root-Ordner des Speichers kann nicht umbenannt werden</string>
<string name="rename_folder_ok">Ordner erfolgreich umbenannt</string>
<string name="renaming_folder">Benenne Ordner um</string>
<string name="renaming_folder">Ordner umbennenen</string>
<string name="filename_cannot_be_empty">Dateiname darf nicht leer sein</string>
<string name="filename_invalid_characters">Dateiname enthält ungültige Zeichen</string>
<string name="extension">Dateiendung</string>
@@ -65,10 +69,9 @@
<string name="wallpaper_set_successfully">Hintergrundbild erfolgreich festgelegt</string>
<!-- Settings -->
<string name="dark_theme">Dunkles Design</string>
<string name="same_sorting">Selbe Sortierung für Dateien und Ordner</string>
<string name="show_hidden_folders">Zeige versteckte Ordner</string>
<string name="autoplay_videos">spiele Videos automatisch ab</string>
<string name="autoplay_videos">Spiele Videos automatisch ab</string>
<string name="toggle_filename">Toggle filename visibility</string>
<string name="show_media">Medienauswahl</string>
<string name="images">nur Bilder</string>
@@ -77,6 +80,8 @@
<string name="loop_videos">Video Endlos-Schleife</string>
<!-- Release notes -->
<string name="release_66">Allow picking colors by hex codes</string>
<string name="release_65">Allow showing the photos and videos on a map, if there are available map coordinates</string>
<string name="release_62">Show some additional Exif data at photo properties</string>
<string name="release_58">
Allow zooming pngs and gifs\n

View File

@@ -19,6 +19,10 @@
<string name="all_folders">All media</string>
<string name="folder_view">Switch to folder view</string>
<string name="other_folder">Other folder</string>
<string name="show_on_map">Show on map</string>
<string name="unknown_location">Unknown location</string>
<string name="no_map_application">No application with maps has been found</string>
<string name="no_camera_app_found">No Camera app has been found</string>
<!-- Resizing -->
<string name="resize">Resize</string>
@@ -65,7 +69,6 @@
<string name="wallpaper_set_successfully">Wallpaper set successfully</string>
<!-- Settings -->
<string name="dark_theme">Tema oscuro</string>
<string name="same_sorting">Ordenar del mismo modo los archivos y las carpetas</string>
<string name="show_hidden_folders">Mostrar carpetas ocultas</string>
<string name="autoplay_videos">Reproducir vídeos automáticamente</string>
@@ -77,6 +80,8 @@
<string name="loop_videos">Loop videos</string>
<!-- Release notes -->
<string name="release_66">Allow picking colors by hex codes</string>
<string name="release_65">Allow showing the photos and videos on a map, if there are available map coordinates</string>
<string name="release_62">Show some additional Exif data at photo properties</string>
<string name="release_58">
Allow zooming pngs and gifs\n

View File

@@ -19,6 +19,10 @@
<string name="all_folders">Tous les dossiers</string>
<string name="folder_view">Permuter vers la vue du dossier</string>
<string name="other_folder">Autre dossier</string>
<string name="show_on_map">Show on map</string>
<string name="unknown_location">Unknown location</string>
<string name="no_map_application">No application with maps has been found</string>
<string name="no_camera_app_found">No Camera app has been found</string>
<!-- Resizing -->
<string name="resize">Redimensionner</string>
@@ -65,7 +69,6 @@
<string name="wallpaper_set_successfully">Fond d\'écran défini avec succès.</string>
<!-- Settings -->
<string name="dark_theme">Thème sombre</string>
<string name="same_sorting">Tri identique pour fichiers et dossiers</string>
<string name="show_hidden_folders">Afficher les dossiers cachés</string>
<string name="autoplay_videos">Lecture automatique des vidéos</string>
@@ -77,6 +80,8 @@
<string name="loop_videos">Tourner en boucle les vidéos</string>
<!-- Release notes -->
<string name="release_66">Allow picking colors by hex codes</string>
<string name="release_65">Allow showing the photos and videos on a map, if there are available map coordinates</string>
<string name="release_62">Show some additional Exif data at photo properties</string>
<string name="release_58">
Allow zooming pngs and gifs\n

View File

@@ -19,6 +19,10 @@
<string name="all_folders">All media</string>
<string name="folder_view">Switch to folder view</string>
<string name="other_folder">Other folder</string>
<string name="show_on_map">Show on map</string>
<string name="unknown_location">Unknown location</string>
<string name="no_map_application">No application with maps has been found</string>
<string name="no_camera_app_found">No Camera app has been found</string>
<!-- Resizing -->
<string name="resize">Resize</string>
@@ -65,7 +69,6 @@
<string name="wallpaper_set_successfully">Sfondo impostato correttamente</string>
<!-- Settings -->
<string name="dark_theme">Tema scuro</string>
<string name="same_sorting">Stesso ordinamento per file e cartelle</string>
<string name="show_hidden_folders">Mostra cartelle nascoste</string>
<string name="autoplay_videos">Riproduci video automaticamente</string>
@@ -77,6 +80,8 @@
<string name="loop_videos">Loop videos</string>
<!-- Release notes -->
<string name="release_66">Allow picking colors by hex codes</string>
<string name="release_65">Allow showing the photos and videos on a map, if there are available map coordinates</string>
<string name="release_62">Show some additional Exif data at photo properties</string>
<string name="release_58">
Allow zooming pngs and gifs\n

View File

@@ -19,6 +19,10 @@
<string name="all_folders">All media</string>
<string name="folder_view">Switch to folder view</string>
<string name="other_folder">Other folder</string>
<string name="show_on_map">Show on map</string>
<string name="unknown_location">Unknown location</string>
<string name="no_map_application">No application with maps has been found</string>
<string name="no_camera_app_found">No Camera app has been found</string>
<!-- Resizing -->
<string name="resize">Resize</string>
@@ -65,7 +69,6 @@
<string name="wallpaper_set_successfully">壁紙を正常に設定しました</string>
<!-- Settings -->
<string name="dark_theme">ダークテーマ</string>
<string name="same_sorting">ファイルとフォルダーを同じに並べ替え</string>
<string name="show_hidden_folders">非表示フォルダーを表示</string>
<string name="autoplay_videos">自動的にビデオを再生</string>
@@ -77,6 +80,8 @@
<string name="loop_videos">Loop videos</string>
<!-- Release notes -->
<string name="release_66">Allow picking colors by hex codes</string>
<string name="release_65">Allow showing the photos and videos on a map, if there are available map coordinates</string>
<string name="release_62">Show some additional Exif data at photo properties</string>
<string name="release_58">
Allow zooming pngs and gifs\n

View File

@@ -19,6 +19,10 @@
<string name="all_folders">Todas as pastas</string>
<string name="folder_view">Alternar para a vista de pastas</string>
<string name="other_folder">Outra pasta</string>
<string name="show_on_map">Mostrar no mapa</string>
<string name="unknown_location">Localização desconhecida</string>
<string name="no_map_application">Não existe uma aplicação adequada</string>
<string name="no_camera_app_found">No Camera app has been found</string>
<!-- Resizing -->
<string name="resize">Redimensionar</string>
@@ -65,7 +69,6 @@
<string name="wallpaper_set_successfully">Fundo definido com sucesso</string>
<!-- Settings -->
<string name="dark_theme">Tema escuro</string>
<string name="same_sorting">Mesma ordenação para ficheiros e pastas</string>
<string name="show_hidden_folders">Mostrar pastas ocultas</string>
<string name="autoplay_videos">Reproduzir vídeos automaticamente</string>
@@ -77,6 +80,8 @@
<string name="loop_videos">Vídeos em ciclo</string>
<!-- Release notes -->
<string name="release_66">Allow picking colors by hex codes</string>
<string name="release_65">Allow showing the photos and videos on a map, if there are available map coordinates</string>
<string name="release_62">Show some additional Exif data at photo properties</string>
<string name="release_58">
Allow zooming pngs and gifs\n

View File

@@ -19,6 +19,10 @@
<string name="all_folders">Все медиафайлы</string>
<string name="folder_view">Переключиться к виду с папками</string>
<string name="other_folder">Другая папка</string>
<string name="show_on_map">Показать место съёмки</string>
<string name="unknown_location">Место съёмки не указано</string>
<string name="no_map_application">Не найдено приложений с картами</string>
<string name="no_camera_app_found">No Camera app has been found</string>
<!-- Resizing -->
<string name="resize">Изменить размер</string>
@@ -65,7 +69,6 @@
<string name="wallpaper_set_successfully">Обои успешно установлены</string>
<!-- Settings -->
<string name="dark_theme">Темная тема</string>
<string name="same_sorting">Одинаковая сортировка для файлов и папок</string>
<string name="show_hidden_folders">Показать скрытые папки</string>
<string name="autoplay_videos">Воспроизводить видео автоматически</string>
@@ -77,7 +80,9 @@
<string name="loop_videos">Повторять видео</string>
<!-- Release notes -->
<string name="release_62">Show some additional Exif data at photo properties</string>
<string name="release_66">Добавлена возможность выбирать цвета по hex-кодам</string>
<string name="release_65">Добавлена возможность показывать место съёмки фото или видео на карте, если указаны координаты</string>
<string name="release_62">В свойствах фото теперь отображаются некоторые Exif-данные</string>
<string name="release_58">
Добавлена возможность масштабирования png и gif изображений\n
Добавлена возможность создания новой папки в диалогах "Копировать/Переместить" и "Сохранить как"

View File

@@ -0,0 +1,121 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Jednoduchá galéria</string>
<string name="app_launcher_name">Galéria</string>
<string name="share_via">Zdieľať cez</string>
<string name="no_permissions">Bez prístupu k súborom sa nedá robiť nič</string>
<string name="edit">Upraviť</string>
<string name="open_camera">Otvoriť fotoaparát</string>
<string name="open_with">Otvoriť pomocou</string>
<string name="no_app_found">Nenašla sa žiadna vhodná aplikácia</string>
<string name="hide_folder">Skryť priečinok</string>
<string name="unhide_folder">Odkryť priečinok</string>
<string name="hidden">(skryté)</string>
<string name="save_as">Uložiť ako</string>
<string name="file_saved">Súbor bol úspešne uložený</string>
<string name="pin_folder">Pripnúť priečinok</string>
<string name="unpin_folder">Odopnúť priečinok</string>
<string name="show_all">Zobraziť obsah všetkých priečinkov</string>
<string name="all_folders">Všetky priečinky</string>
<string name="folder_view">Prepnúť na zobrazenie priečinkov</string>
<string name="other_folder">Iný priečinok</string>
<string name="show_on_map">Zobraziť na mape</string>
<string name="unknown_location">Neznáma poloha</string>
<string name="no_map_application">Nenašla sa žiadna mapová aplikácia</string>
<string name="no_camera_app_found">Nenašla sa žiadna aplikácia pre fotoaparát</string>
<!-- Resizing -->
<string name="resize">Zmeniť veľkosť</string>
<string name="resize_and_save">Zmeniť veľkosť a uložiť</string>
<string name="width">Šǐrka</string>
<string name="height">Výška</string>
<string name="keep_aspect_ratio">Zachovať pomer strán</string>
<string name="invalid_values">Prosím zadajte platné rozlíšenie</string>
<!-- Renaming -->
<string name="rename_file">Premenovať súbor</string>
<string name="rename_folder">Premenovať priečinok</string>
<string name="rename_file_error">Nepodarilo sa premenovať súbor</string>
<string name="rename_folder_error">Nepodarilo sa premenovať priečinok</string>
<string name="rename_folder_empty">Názov priečinka nemôže byť prázdny</string>
<string name="rename_folder_exists">Priečinok s daným názvom už existuje</string>
<string name="rename_folder_root">Nepodarilo sa premenovať základný priečinok úložiska</string>
<string name="rename_folder_ok">Priečinok bol úspešne premenovaný</string>
<string name="renaming_folder">Premenúva sa priečinok</string>
<string name="filename_cannot_be_empty">Názov súboru nemôže byť prázdny</string>
<string name="filename_invalid_characters">Názov súboru obsahuje neplatné znaky</string>
<string name="extension">Prípona</string>
<string name="extension_cannot_be_empty">Prípona nesmie byť prázdna</string>
<!-- Editor -->
<string name="editor">Editor</string>
<string name="save">Uložiť</string>
<string name="rotate">Otočiť</string>
<string name="path">Cesta</string>
<string name="invalid_image_path">Neplatná cesta</string>
<string name="image_editing_failed">Úprava súboru zlyhala</string>
<string name="edit_image_with">Upraviť súbor s:</string>
<string name="no_editor_found">Nebol nájdený žiadny editor</string>
<string name="unknown_file_location">Neznáme umiestnenie súboru</string>
<string name="error_saving_file">Nepodarilo sa prepísať zdrojový súbor</string>
<!-- Set wallpaper -->
<string name="simple_wallpaper">Jednoduchá tapeta</string>
<string name="set_as_wallpaper">Nastaviť ako tapetu</string>
<string name="set_as_wallpaper_failed">Nastavovanie ako tapeta zlyhalo</string>
<string name="set_as_wallpaper_with">Nastaviť ako tapetu s:</string>
<string name="no_wallpaper_setter_found">Nenašla sa žiadna vhodná aplikácia No app capable of it has been found</string>
<string name="setting_wallpaper">Nastavuje sa tapeta&#8230;</string>
<string name="wallpaper_set_successfully">Tapeta bola úspešne zmenená</string>
<!-- Settings -->
<string name="same_sorting">Použiť rovnaké zoradenie pre súbory a priečinky</string>
<string name="show_hidden_folders">Zobraziť skryté priečinky</string>
<string name="autoplay_videos">Spúšťať videá automaticky</string>
<string name="toggle_filename">Prepnúť viditeľnosť názvov súborov</string>
<string name="show_media">Zobraziť médiá</string>
<string name="images">Iba obrázky</string>
<string name="videos">Iba videá</string>
<string name="images_and_videos">Obrázky aj videá</string>
<string name="loop_videos">Automaticky reštartovať videá</string>
<!-- Release notes -->
<string name="release_66">Allow picking colors by hex codes</string>
<string name="release_65">Allow showing the photos and videos on a map, if there are available map coordinates</string>
<string name="release_62">Show some additional Exif data at photo properties</string>
<string name="release_58">
Allow zooming pngs and gifs\n
Allow creating new folders at Copy/Move or Save as dialog destinations
</string>
<string name="release_54">Added an option to loop videos automatically</string>
<string name="release_52">
Added more color customization options\n
Your settings have been cleared, please reset them</string>
<string name="release_51">Allow changing the column count with pinch gestures</string>
<string name="release_50">Added an option to display images or videos only</string>
<string name="release_49">Added a Select all button at selecting media and folders</string>
<string name="release_47">
Added an image resizer to the editor\n
Allow displaying images and videos from all folders together
</string>
<string name="release_46">Allow pinning folders at the top</string>
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<!-- Short description has to have less than 80 chars -->
<string name="app_short_description">Galéria na prezeranie obrázkov a videí bez reklám.</string>
<string name="app_long_description">
Jednoduchá nástroj použiteľný na prezeranie obrázkov a videí. Položky môžu byť zoradené podľa dátumu, veľkosti, názvu oboma smermi, obrázky je možné aj priblížiť. Položky sú zobrazované vo viacerých stĺpcoch v závislosti od veľkosti displeja, počet stĺpcov je možné meniť pomocou gesta prstami. Súbory môžete premenovať, zdieľať, mazať, kopírovať, premiestňovaŤ. Obrázky môžete orezať, otočiť, alebo nastaviť ako tapeta priamo v aplikácií.
Galéria je tiež poskytovaná pre použitie treťou stranou pre prehliadanie fotiek a videí, pridávanie príloh v emailových klientoch. Je perfektná na každodenné použitie.
Neobsahuje žiadne reklamy a nepotrebné oprávnenia. Je opensource, poskytuje možnosť zmeny farieb.
Táto aplikácia je iba jednou zo skupiny aplikácií. Ostatné viete nájsť na http://www.simplemobiletools.com
</string>
<!--
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
</resources>

View File

@@ -4,29 +4,33 @@
<string name="app_launcher_name">Gallery</string>
<string name="share_via">Dela via</string>
<string name="no_permissions">Inte mycket att göra i ett galleri om jag inte kommer åt lagringsutrymmet</string>
<string name="edit">Edit</string>
<string name="edit">Redigera</string>
<string name="open_camera">Starta kameran</string>
<string name="open_with">Open with</string>
<string name="no_app_found">No valid app found</string>
<string name="hide_folder">Hide folder</string>
<string name="unhide_folder">Unhide folder</string>
<string name="hidden">(hidden)</string>
<string name="save_as">Save as</string>
<string name="file_saved">File saved successfully</string>
<string name="pin_folder">Pin folder</string>
<string name="unpin_folder">Unpin folder</string>
<string name="show_all">Show all folders content</string>
<string name="all_folders">All folders</string>
<string name="folder_view">Switch to folder view</string>
<string name="other_folder">Другая папка</string>
<string name="open_with">Öppna med</string>
<string name="no_app_found">Hittade ingen giltig app</string>
<string name="hide_folder">Dölj mapp</string>
<string name="unhide_folder">Visa mapp</string>
<string name="hidden">(dold)</string>
<string name="save_as">Spara som</string>
<string name="file_saved">Filen sparad</string>
<string name="pin_folder">Fäst mappen</string>
<string name="unpin_folder">Släpp mappen</string>
<string name="show_all">Visa alla mappars innehåll</string>
<string name="all_folders">Alla mappar</string>
<string name="folder_view">Byt till mappvy</string>
<string name="other_folder">Andra mappar</string>
<string name="show_on_map">Show on map</string>
<string name="unknown_location">Unknown location</string>
<string name="no_map_application">No application with maps has been found</string>
<string name="no_camera_app_found">No Camera app has been found</string>
<!-- Resizing -->
<string name="resize">Resize</string>
<string name="resize_and_save">Resize selection and save</string>
<string name="width">Width</string>
<string name="height">Height</string>
<string name="keep_aspect_ratio">Keep aspect ratio</string>
<string name="invalid_values">Please enter a valid resolution</string>
<string name="resize">Ändra storlek</string>
<string name="resize_and_save">Ändra storlek och spara</string>
<string name="width">Bredd</string>
<string name="height">Höjd</string>
<string name="keep_aspect_ratio">Behåll bildförhållande</string>
<string name="invalid_values">Ange en giltig bildupplösning</string>
<!-- Renaming -->
<string name="rename_file">Döp om fil</string>
@@ -34,49 +38,50 @@
<string name="rename_file_error">Det gick inte att döpa om filen</string>
<string name="rename_folder_error">Det gick inte att döpa om mappen</string>
<string name="rename_folder_empty">Du måste ange ett mappnamn</string>
<string name="rename_folder_exists">A folder with that name already exists</string>
<string name="rename_folder_root">Cannot rename the root folder of a storage</string>
<string name="rename_folder_exists">En mapp med det namnet finns redan</string>
<string name="rename_folder_root">Det går inte att döpa om rotmappen på lagringsutrymmet</string>
<string name="rename_folder_ok">Mappen döptes om</string>
<string name="renaming_folder">Döper om mappen</string>
<string name="filename_cannot_be_empty">Du måste ange ett filnamn</string>
<string name="filename_invalid_characters">Filename contains invalid characters</string>
<string name="filename_invalid_characters">Filnamnet innehåller ogiltiga tecken</string>
<string name="extension">Filändelse</string>
<string name="extension_cannot_be_empty">Extension cannot be empty</string>
<string name="extension_cannot_be_empty">Filändelsen får inte vara tom</string>
<!-- Editor -->
<string name="editor">Editor</string>
<string name="save">Save</string>
<string name="rotate">Rotate</string>
<string name="path">Path</string>
<string name="invalid_image_path">Invalid image path</string>
<string name="editor">Redigera</string>
<string name="save">Spara</string>
<string name="rotate">Rotera</string>
<string name="path">Sökväg</string>
<string name="invalid_image_path">Ogiltig bildsökväg</string>
<string name="image_editing_failed">Image editing failed</string>
<string name="edit_image_with">Edit image with:</string>
<string name="no_editor_found">No image editor found</string>
<string name="unknown_file_location">Unknown file location</string>
<string name="error_saving_file">Could not overwrite the source file</string>
<string name="edit_image_with">Redigera bilden med:</string>
<string name="no_editor_found">Hittade ingen bildredigerare</string>
<string name="unknown_file_location">Okänd filplats</string>
<string name="error_saving_file">Det gick inte att skriva över källfilen</string>
<!-- Set wallpaper -->
<string name="simple_wallpaper">Simple Wallpaper</string>
<string name="set_as_wallpaper">Set as Wallpaper</string>
<string name="set_as_wallpaper_failed">Setting as Wallpaper failed</string>
<string name="set_as_wallpaper_with">Set as wallpaper with:</string>
<string name="no_wallpaper_setter_found">No app capable of it has been found</string>
<string name="simple_wallpaper">Bakgrundsbild</string>
<string name="set_as_wallpaper">Ange som bakgrundsbild</string>
<string name="set_as_wallpaper_failed">Det gick inte att byta bakgrundsbild</string>
<string name="set_as_wallpaper_with">Ange som bakgrundsbild med:</string>
<string name="no_wallpaper_setter_found">Hittade ingen app som klarar av detta</string>
<string name="setting_wallpaper">Inställningar för bakgrundsbild&#8230;</string>
<string name="wallpaper_set_successfully">Wallpaper set successfully</string>
<string name="wallpaper_set_successfully">Bakgrundsbilden är ändrad</string>
<!-- Settings -->
<string name="dark_theme">Mörkt tema</string>
<string name="same_sorting">Same sorting for files and folders</string>
<string name="show_hidden_folders">Show hidden folders</string>
<string name="autoplay_videos">Play videos automatically</string>
<string name="toggle_filename">Toggle filename visibility</string>
<string name="show_media">Show media</string>
<string name="images">Images only</string>
<string name="videos">Videos only</string>
<string name="images_and_videos">Images and videos</string>
<string name="loop_videos">Loop videos</string>
<string name="same_sorting">Samma sortering för filer som för mappar</string>
<string name="show_hidden_folders">Visa dolda mappar</string>
<string name="autoplay_videos">Spela upp videos automatiskt</string>
<string name="toggle_filename">Visa/dölj filnamnen</string>
<string name="show_media">Visa media</string>
<string name="images">Endast bilder</string>
<string name="videos">Endast videos</string>
<string name="images_and_videos">Bilder och videos</string>
<string name="loop_videos">Återspela videos</string>
<!-- Release notes -->
<string name="release_66">Allow picking colors by hex codes</string>
<string name="release_65">Allow showing the photos and videos on a map, if there are available map coordinates</string>
<string name="release_62">Show some additional Exif data at photo properties</string>
<string name="release_58">
Allow zooming pngs and gifs\n
@@ -97,16 +102,16 @@
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<!-- Short description has to have less than 80 chars -->
<string name="app_short_description">A gallery for viewing photos and videos without ads.</string>
<string name="app_short_description">Ett Galleri för att visa bilder och videos utan en massa reklam.</string>
<string name="app_long_description">
A simple tool usable for viewing photos and videos. Items can be sorted by date, size, name both ascending or descending, photos can be zoomed in. Media files are shown in multiple columns depending on the size of the display, you can change the column count by pinch gestures. They can be renamed, shared, deleted, copied, moved. Images can also be cropped, rotated or set as Wallpaper directly from the app.
Ett enkelt verktyg för att visa bilder och vdeos. Objekten kan sorteras efter datum, storlek, namn både stigande och fallande, bilder kan zoomas in. Mediafiler visas i flera kolumner beroende av skärmens storlek, du kan ändra antalet kolumner genom en nyp-rörelse. De går att döpa om, dela, ta bort, kopiera, flytta. Bilder kan också beskäras, roteras och anges som bakgrundsbild direkt från appen.
The Gallery is also offered for third party usage for previewing images / videos, adding attachments at email clients etc. It\'s perfect for everyday usage.
Galleriet kan också användas av tredjeparts för förhandsgranskning av bilder / videos, bifoga bilagor i e-postklienter etc. Den är perfekt för det dagliga användandet.
Contains no ads or unnecessary permissions. It is fully opensource, provides customizable colors.
Innehåller ingen reklam eller onödiga behörigheter. Det är helt och hållet opensource, innehåller anpassningsbara färger.
This app is just one piece of a bigger series of apps. You can find the rest of them at http://www.simplemobiletools.com
Detta är bara en app i en serie av appar. Du hittar resten av dem här http://www.simplemobiletools.com
</string>
<!--

View File

@@ -19,6 +19,10 @@
<string name="all_folders">所有文件夹</string>
<string name="folder_view">切换到文件夹视图</string>
<string name="other_folder">其他文件夹</string>
<string name="show_on_map">Show on map</string>
<string name="unknown_location">Unknown location</string>
<string name="no_map_application">No application with maps has been found</string>
<string name="no_camera_app_found">No Camera app has been found</string>
<!-- Resizing -->
<string name="resize">缩放</string>
@@ -65,7 +69,6 @@
<string name="wallpaper_set_successfully">壁纸应用成功</string>
<!-- Settings -->
<string name="dark_theme">暗主题</string>
<string name="same_sorting">全局排序</string>
<string name="show_hidden_folders">显示所有</string>
<string name="autoplay_videos">自动播放</string>
@@ -77,6 +80,8 @@
<string name="loop_videos">循环播放视频</string>
<!-- Release notes -->
<string name="release_66">Allow picking colors by hex codes</string>
<string name="release_65">Allow showing the photos and videos on a map, if there are available map coordinates</string>
<string name="release_62">Show some additional Exif data at photo properties</string>
<string name="release_58">
Allow zooming pngs and gifs\n

View File

@@ -19,6 +19,10 @@
<string name="all_folders">所有資料夾</string>
<string name="folder_view">切換到資料夾檢視</string>
<string name="other_folder">其他資料夾</string>
<string name="show_on_map">Show on map</string>
<string name="unknown_location">Unknown location</string>
<string name="no_map_application">No application with maps has been found</string>
<string name="no_camera_app_found">No Camera app has been found</string>
<!-- Resizing -->
<string name="resize">縮放</string>
@@ -65,7 +69,6 @@
<string name="wallpaper_set_successfully">成功應用軟體桌布</string>
<!-- Settings -->
<string name="dark_theme">暗色使用者介面主題</string>
<string name="same_sorting">全部排序</string>
<string name="show_hidden_folders">秀出隱藏資料夾</string>
<string name="autoplay_videos">自動播放影片</string>
@@ -77,6 +80,8 @@
<string name="loop_videos">迴圈播放影片</string>
<!-- Release notes -->
<string name="release_66">Allow picking colors by hex codes</string>
<string name="release_65">Allow showing the photos and videos on a map, if there are available map coordinates</string>
<string name="release_62">Show some additional Exif data at photo properties</string>
<string name="release_58">
Allow zooming pngs and gifs\n

View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="show_media_items" translatable="false">
<item>@string/images_and_videos</item>
<item>@string/images</item>
<item>@string/videos</item>
</string-array>
</resources>

View File

@@ -19,6 +19,10 @@
<string name="all_folders">All folders</string>
<string name="folder_view">Switch to folder view</string>
<string name="other_folder">Other folder</string>
<string name="show_on_map">Show on map</string>
<string name="unknown_location">Unknown location</string>
<string name="no_map_application">No application with maps has been found</string>
<string name="no_camera_app_found">No Camera app has been found</string>
<!-- Resizing -->
<string name="resize">Resize</string>
@@ -65,7 +69,6 @@
<string name="wallpaper_set_successfully">Wallpaper set successfully</string>
<!-- Settings -->
<string name="dark_theme">Dark theme</string>
<string name="same_sorting">Same sorting for files and folders</string>
<string name="show_hidden_folders">Show hidden folders</string>
<string name="autoplay_videos">Play videos automatically</string>
@@ -77,6 +80,8 @@
<string name="loop_videos">Loop videos</string>
<!-- Release notes -->
<string name="release_66">Allow picking colors by hex codes</string>
<string name="release_65">Allow showing the photos and videos on a map, if there are available map coordinates</string>
<string name="release_62">Show some additional Exif data at photo properties</string>
<string name="release_58">
Allow zooming pngs and gifs\n

View File

@@ -1,4 +1,3 @@
STORE_FILE=/path/to/your.keystore
STORE_PASSWORD=yourkeypass
KEY_ALIAS=projectkeyalias
KEY_PASSWORD=yourkeypass
PASSWORD=yourpass