diff --git a/.flutter b/.flutter
index 2f708eb83..9e1c85788 160000
--- a/.flutter
+++ b/.flutter
@@ -1 +1 @@
-Subproject commit 2f708eb8396e362e280fac22cf171c2cb467343c
+Subproject commit 9e1c857886f07d342cf106f2cd588bcd5e031bb2
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0a9edb946..9b6c75139 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,25 @@ All notable changes to this project will be documented in this file.
## [Unreleased]
+## [v1.10.0] - 2023-12-02
+
+### Added
+
+- Viewer / Slideshow: cast images via DLNA/UPnP
+- Icelandic translation (thanks Sveinn í Felli)
+
+### Changed
+
+- long press actions trigger haptic feedback according to OS settings
+- target Android 14 (API 34)
+- upgraded Flutter to stable v3.16.2
+
+### Fixed
+
+- temporary files remaining in the cache directory forever
+- detecting motion photos with more items in the XMP Container directory
+- parsing EXIF date written as epoch time
+
## [v1.9.7] - 2023-10-17
### Added
@@ -15,12 +34,12 @@ All notable changes to this project will be documented in this file.
- mosaic layout: clamp ratio to 32/9
- Video: disable subtitles by default
-- Map: Stamen Watercolor layer (no longer served for free by Stamen) now served by Smithsonian Institution
+- Map: Stamen Watercolor layer (no longer hosted for free by Stamen) now hosted by Smithsonian Institution
- upgraded Flutter to stable v3.13.7
### Removed
-- Map: Stamen Toner layer (no longer served for free by Stamen)
+- Map: Stamen Toner layer (no longer hosted for free by Stamen)
### Fixed
diff --git a/android/app/build.gradle b/android/app/build.gradle
index d05b5cb13..797d29e5a 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -76,14 +76,14 @@ android {
defaultConfig {
applicationId packageName
- // minSdkVersion constraints:
+ // minSdk constraints:
// - Flutter & other plugins: 16
// - google_maps_flutter v2.1.1: 20
// - to build XML documents from XMP data, `metadata-extractor` and `PixyMeta` rely on `DocumentBuilder`,
// which implementation `DocumentBuilderImpl` is provided by the OS and is not customizable on Android,
// but the implementation on API <19 is not robust enough and fails to build XMP documents
- minSdkVersion 19
- targetSdkVersion 33
+ minSdk 19
+ targetSdk 34
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
manifestPlaceholders = [googleApiKey: keystoreProperties["googleApiKey"] ?: "",
@@ -216,14 +216,14 @@ dependencies {
implementation 'androidx.core:core-ktx:1.12.0'
implementation 'androidx.exifinterface:exifinterface:1.3.6'
implementation 'androidx.lifecycle:lifecycle-process:2.6.2'
- implementation 'androidx.media:media:1.6.0'
+ implementation 'androidx.media:media:1.7.0'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.security:security-crypto:1.1.0-alpha06'
- implementation 'androidx.work:work-runtime-ktx:2.8.1'
+ implementation 'androidx.work:work-runtime-ktx:2.9.0'
implementation 'com.caverock:androidsvg-aar:1.4'
implementation 'com.commonsware.cwac:document:0.5.0'
- implementation 'com.drewnoakes:metadata-extractor:2.18.0'
+ implementation 'com.drewnoakes:metadata-extractor:2.19.0'
implementation "com.github.bumptech.glide:glide:$glide_version"
// SLF4J implementation for `mp4parser`
implementation 'org.slf4j:slf4j-simple:2.0.9'
@@ -240,7 +240,7 @@ dependencies {
// huawei flavor only
huaweiImplementation "com.huawei.agconnect:agconnect-core:$huawei_agconnect_version"
- testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.10.0'
+ testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.10.1'
kapt 'androidx.annotation:annotation:1.7.0'
ksp "com.github.bumptech.glide:ksp:$glide_version"
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index c906a02e3..140a47077 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -33,10 +33,9 @@
-
-
-
-
+
@@ -69,7 +68,7 @@
-->
+ tools:targetApi="tiramisu">
+
+
+
-
+
diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/AnalysisWorker.kt b/android/app/src/main/kotlin/deckers/thibault/aves/AnalysisWorker.kt
index 9c0e7cbfb..7de3a0c49 100644
--- a/android/app/src/main/kotlin/deckers/thibault/aves/AnalysisWorker.kt
+++ b/android/app/src/main/kotlin/deckers/thibault/aves/AnalysisWorker.kt
@@ -159,17 +159,15 @@ class AnalysisWorker(context: Context, parameters: WorkerParameters) : Coroutine
.setContentIntent(openAppIntent)
.addAction(stopAction)
.build()
- // TODO TLAD revisit with Android 14 >beta5
- return ForegroundInfo(NOTIFICATION_ID, notification);
-// return if (Build.VERSION.SDK_INT >= 34) {
-// // as of Android 14 beta 5, foreground service type is mandatory
-// // despite the sample code omitting it at:
-// // https://developer.android.com/guide/background/persistent/how-to/long-running
-// val type = ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC
-// ForegroundInfo(NOTIFICATION_ID, notification, type)
-// } else {
-// ForegroundInfo(NOTIFICATION_ID, notification)
-// }
+ return if (Build.VERSION.SDK_INT >= 34) {
+ // from Android 14 (API 34), foreground service type is mandatory
+ // despite the sample code omitting it at:
+ // https://developer.android.com/guide/background/persistent/how-to/long-running
+ val type = ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC
+ ForegroundInfo(NOTIFICATION_ID, notification, type)
+ } else {
+ ForegroundInfo(NOTIFICATION_ID, notification)
+ }
}
companion object {
diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/EmbeddedDataHandler.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/EmbeddedDataHandler.kt
index 028d4fec3..e956a25aa 100644
--- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/EmbeddedDataHandler.kt
+++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/EmbeddedDataHandler.kt
@@ -33,7 +33,6 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.launch
-import java.io.File
import java.io.InputStream
class EmbeddedDataHandler(private val context: Context) : MethodCallHandler {
@@ -279,8 +278,7 @@ class EmbeddedDataHandler(private val context: Context) : MethodCallHandler {
embeddedByteLength: Long,
) {
val extension = extensionFor(mimeType)
- val targetFile = File.createTempFile("aves", extension, context.cacheDir).apply {
- deleteOnExit()
+ val targetFile = StorageUtils.createTempFile(context, extension).apply {
transferFrom(embeddedByteStream, embeddedByteLength)
}
diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/StorageHandler.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/StorageHandler.kt
index ed5d4a2ad..22f54d6d9 100644
--- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/StorageHandler.kt
+++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/StorageHandler.kt
@@ -36,6 +36,7 @@ class StorageHandler(private val context: Context) : MethodCallHandler {
"getRestrictedDirectories" -> ioScope.launch { safe(call, result, ::getRestrictedDirectories) }
"revokeDirectoryAccess" -> safe(call, result, ::revokeDirectoryAccess)
"deleteEmptyDirectories" -> ioScope.launch { safe(call, result, ::deleteEmptyDirectories) }
+ "deleteTempDirectory" -> ioScope.launch { safe(call, result, ::deleteTempDirectory) }
"canRequestMediaFileBulkAccess" -> safe(call, result, ::canRequestMediaFileBulkAccess)
"canInsertMedia" -> safe(call, result, ::canInsertMedia)
else -> result.notImplemented()
@@ -200,6 +201,10 @@ class StorageHandler(private val context: Context) : MethodCallHandler {
result.success(deleted)
}
+ private fun deleteTempDirectory(@Suppress("unused_parameter") call: MethodCall, result: MethodChannel.Result) {
+ result.success(StorageUtils.deleteTempDirectory(context))
+ }
+
private fun canRequestMediaFileBulkAccess(@Suppress("unused_parameter") call: MethodCall, result: MethodChannel.Result) {
result.success(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
}
diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/fetchers/RegionFetcher.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/fetchers/RegionFetcher.kt
index 60276c136..65a3af050 100644
--- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/fetchers/RegionFetcher.kt
+++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/fetchers/RegionFetcher.kt
@@ -16,7 +16,6 @@ import deckers.thibault.aves.utils.BitmapUtils.getBytes
import deckers.thibault.aves.utils.MimeTypes
import deckers.thibault.aves.utils.StorageUtils
import io.flutter.plugin.common.MethodChannel
-import java.io.File
import kotlin.math.roundToInt
class RegionFetcher internal constructor(
@@ -113,8 +112,7 @@ class RegionFetcher internal constructor(
.submit()
try {
val bitmap = target.get()
- val tempFile = File.createTempFile("aves", null, context.cacheDir).apply {
- deleteOnExit()
+ val tempFile = StorageUtils.createTempFile(context).apply {
outputStream().use { output ->
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, output)
}
diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/ExifInterfaceHelper.kt b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/ExifInterfaceHelper.kt
index a9ae20d6d..ce361ea32 100644
--- a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/ExifInterfaceHelper.kt
+++ b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/ExifInterfaceHelper.kt
@@ -388,7 +388,7 @@ enum class DirType {
override fun createDirectory() = ExifIFD0Directory()
},
EXIF_THUMBNAIL {
- override fun createDirectory() = ExifThumbnailDirectory()
+ override fun createDirectory() = ExifThumbnailDirectory(0)
},
GPS {
override fun createDirectory() = GpsDirectory()
diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/ExifTags.kt b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/ExifTags.kt
index de7c9c375..723bac061 100644
--- a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/ExifTags.kt
+++ b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/ExifTags.kt
@@ -18,7 +18,6 @@ object ExifTags {
private const val SAMPLE_FORMAT = 0x0153
private const val SMIN_SAMPLE_VALUE = 0x0154
private const val SMAX_SAMPLE_VALUE = 0x0155
- private const val RATING_PERCENT = 0x4749
private const val SONY_RAW_FILE_TYPE = 0x7000
private const val SONY_TONE_CURVE = 0x7010
private const val MATTEING = 0x80e3
@@ -40,7 +39,6 @@ object ExifTags {
SAMPLE_FORMAT to "Sample Format",
SMIN_SAMPLE_VALUE to "S Min Sample Value",
SMAX_SAMPLE_VALUE to "S Max Sample Value",
- RATING_PERCENT to "Rating Percent",
SONY_RAW_FILE_TYPE to "Sony Raw File Type",
SONY_TONE_CURVE to "Sony Tone Curve",
MATTEING to "Matteing",
diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/Metadata.kt b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/Metadata.kt
index c8522a6cf..b82f1cf12 100644
--- a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/Metadata.kt
+++ b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/Metadata.kt
@@ -160,8 +160,7 @@ object Metadata {
}
fun createPreviewFile(context: Context, uri: Uri): File {
- return File.createTempFile("aves", null, context.cacheDir).apply {
- deleteOnExit()
+ return StorageUtils.createTempFile(context).apply {
transferFrom(StorageUtils.openInputStream(context, uri), PREVIEW_SIZE)
}
}
diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/MultiPage.kt b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/MultiPage.kt
index 25f1bab85..53c5b472d 100644
--- a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/MultiPage.kt
+++ b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/MultiPage.kt
@@ -174,9 +174,7 @@ object MultiPage {
} else if (xmpMeta.doesPropExist(XMP.GCONTAINER_DIRECTORY_PROP_NAME)) {
// `Container` motion photo
val count = xmpMeta.countPropArrayItems(XMP.GCONTAINER_DIRECTORY_PROP_NAME)
- if (count == 2) {
- // expect the video to be the second item
- val i = 2
+ for (i in 1 until count + 1) {
val mime = xmpMeta.getSafeStructField(listOf(XMP.GCONTAINER_DIRECTORY_PROP_NAME, i, XMP.GCONTAINER_ITEM_PROP_NAME, XMP.GCONTAINER_ITEM_MIME_PROP_NAME))?.value
val length = xmpMeta.getSafeStructField(listOf(XMP.GCONTAINER_DIRECTORY_PROP_NAME, i, XMP.GCONTAINER_ITEM_PROP_NAME, XMP.GCONTAINER_ITEM_LENGTH_PROP_NAME))?.value
if (MimeTypes.isVideo(mime) && length != null) {
diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/XMP.kt b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/XMP.kt
index 47d2b75f2..e593dd16c 100644
--- a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/XMP.kt
+++ b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/XMP.kt
@@ -188,17 +188,15 @@ object XMP {
// Container motion photo
if (doesPropExist(GCONTAINER_DIRECTORY_PROP_NAME)) {
val count = countPropArrayItems(GCONTAINER_DIRECTORY_PROP_NAME)
- if (count == 2) {
- var hasImage = false
- var hasVideo = false
- for (i in 1 until count + 1) {
- val mime = getSafeStructField(listOf(GCONTAINER_DIRECTORY_PROP_NAME, i, GCONTAINER_ITEM_PROP_NAME, GCONTAINER_ITEM_MIME_PROP_NAME))?.value
- val length = getSafeStructField(listOf(GCONTAINER_DIRECTORY_PROP_NAME, i, GCONTAINER_ITEM_PROP_NAME, GCONTAINER_ITEM_LENGTH_PROP_NAME))?.value
- hasImage = hasImage || MimeTypes.isImage(mime) && length != null
- hasVideo = hasVideo || MimeTypes.isVideo(mime) && length != null
- }
- if (hasImage && hasVideo) return true
+ var hasImage = false
+ var hasVideo = false
+ for (i in 1 until count + 1) {
+ val mime = getSafeStructField(listOf(GCONTAINER_DIRECTORY_PROP_NAME, i, GCONTAINER_ITEM_PROP_NAME, GCONTAINER_ITEM_MIME_PROP_NAME))?.value
+ val length = getSafeStructField(listOf(GCONTAINER_DIRECTORY_PROP_NAME, i, GCONTAINER_ITEM_PROP_NAME, GCONTAINER_ITEM_LENGTH_PROP_NAME))?.value
+ hasImage = hasImage || MimeTypes.isImage(mime) && length != null
+ hasVideo = hasVideo || MimeTypes.isVideo(mime) && length != null
}
+ if (hasImage && hasVideo) return true
}
return false
diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/Helper.kt b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/Helper.kt
index 2c71d16ed..6bbd418ff 100644
--- a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/Helper.kt
+++ b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/Helper.kt
@@ -31,8 +31,14 @@ import deckers.thibault.aves.utils.LogUtils
import java.io.BufferedInputStream
import java.io.IOException
import java.io.InputStream
+import java.text.ParseException
import java.text.SimpleDateFormat
-import java.util.*
+import java.util.Calendar
+import java.util.Date
+import java.util.GregorianCalendar
+import java.util.Locale
+import java.util.TimeZone
+import java.util.regex.Pattern
object Helper {
private val LOG_TAG = LogUtils.createTag()
@@ -110,7 +116,7 @@ object Helper {
fun safeReadTiff(input: InputStream): com.drew.metadata.Metadata {
val reader = RandomAccessStreamReader(input, RandomAccessStreamReader.DEFAULT_CHUNK_LENGTH, safeReadStreamLength)
val metadata = com.drew.metadata.Metadata()
- val handler = SafeExifTiffHandler(metadata, null)
+ val handler = SafeExifTiffHandler(metadata, null, 0)
TiffReader().processTiff(reader, handler, 0)
return metadata
}
@@ -150,12 +156,105 @@ object Helper {
fun Directory.getSafeDateMillis(tag: Int, subSecond: String?): Long? {
if (this.containsTag(tag)) {
- val date = this.getDate(tag, subSecond, TimeZone.getDefault())
+ val date = this.getDatePlus(tag, subSecond, TimeZone.getDefault())
if (date != null) return date.time
}
return null
}
+ // This seems to cover all known Exif and Xmp date strings
+ // Note that " : : : : " is a valid date string according to the Exif spec (which means 'unknown date'): http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/datetimeoriginal.html
+ private val datePatterns = arrayOf(
+ "yyyy:MM:dd HH:mm:ss",
+ "yyyy:MM:dd HH:mm",
+ "yyyy-MM-dd HH:mm:ss",
+ "yyyy-MM-dd HH:mm",
+ "yyyy.MM.dd HH:mm:ss",
+ "yyyy.MM.dd HH:mm",
+ "yyyy-MM-dd'T'HH:mm:ss",
+ "yyyy-MM-dd'T'HH:mm",
+ "yyyy-MM-dd",
+ "yyyy-MM",
+ "yyyyMMdd", // as used in IPTC data
+ "yyyy"
+ )
+ private val subsecondPattern = Pattern.compile("(\\d\\d:\\d\\d:\\d\\d)(\\.\\d+)")
+ private val timeZonePattern = Pattern.compile("(Z|[+-]\\d\\d:\\d\\d|[+-]\\d\\d\\d\\d)$")
+ private val calendar: Calendar = GregorianCalendar()
+ private const val PARSED_DATE_YEAR_MAX = 10000
+
+ // adapted from `metadata-extractor` v2.18.0 `Directory.getDate()`
+ // to also parse dates written as timestamps
+ private fun Directory.getDatePlus(tagType: Int, subSecond: String?, timeZone: TimeZone?): Date? {
+ var effectiveSubSecond = subSecond
+ var effectiveTimeZone = timeZone
+ val o = this.getObject(tagType)
+ if (o is Date) return o
+
+ var date: Date? = null
+ if (o is String || o is StringValue) {
+ var dateString = o.toString()
+
+ // if the date string has subsecond information, it supersedes the subsecond parameter
+ val subsecondMatcher = subsecondPattern.matcher(dateString)
+ if (subsecondMatcher.find()) {
+ effectiveSubSecond = subsecondMatcher.group(2)?.substring(1)
+ dateString = subsecondMatcher.replaceAll("$1")
+ }
+
+ // if the date string has time zone information, it supersedes the timeZone parameter
+ val timeZoneMatcher = timeZonePattern.matcher(dateString)
+ if (timeZoneMatcher.find()) {
+ effectiveTimeZone = TimeZone.getTimeZone("GMT" + timeZoneMatcher.group().replace("Z".toRegex(), ""))
+ dateString = timeZoneMatcher.replaceAll("")
+ }
+ for (datePattern in datePatterns) {
+ try {
+ val parsed = SimpleDateFormat(datePattern, Locale.ROOT).apply {
+ this.timeZone = effectiveTimeZone ?: TimeZone.getTimeZone("GMT") // don't interpret zone time
+ }.parse(dateString)
+ if (parsed != null) {
+ calendar.time = parsed
+ if (calendar.get(Calendar.YEAR) < PARSED_DATE_YEAR_MAX) {
+ date = parsed
+ break
+ }
+ }
+ } catch (ex: ParseException) {
+ // simply try the next pattern
+ }
+ }
+ if (date == null) {
+ val dateLong = dateString.toLongOrNull()
+ if (dateLong != null) {
+ val epochTimeMillis = when (dateLong) {
+ in 0..99999999999 -> dateLong * 1000 // seconds
+ in 100000000000..99999999999999 -> dateLong // millis
+ in 100000000000000..9999999999999999 -> dateLong / 1000 // micros
+ else -> dateLong / 1000000 // nanos
+ }
+ date = Date(epochTimeMillis)
+ }
+ }
+ }
+ if (date == null) return null
+
+ if (effectiveSubSecond != null) {
+ try {
+ val millisecond = (".$effectiveSubSecond".toDouble() * 1000).toInt()
+ if (millisecond in 0..999) {
+ val calendar = Calendar.getInstance()
+ calendar.time = date
+ calendar[Calendar.MILLISECOND] = millisecond
+ return calendar.time
+ }
+ } catch (e: NumberFormatException) {
+ // ignore
+ }
+ }
+ return date
+ }
+
// time tag and sub-second tag are *not* in the same directory
fun ExifSubIFDDirectory.getDateModifiedMillis(save: (value: Long) -> Unit) {
val parent = parent
diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/SafeExifTiffHandler.kt b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/SafeExifTiffHandler.kt
index afad1de4c..39a4c4918 100644
--- a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/SafeExifTiffHandler.kt
+++ b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/SafeExifTiffHandler.kt
@@ -8,7 +8,7 @@ import com.drew.metadata.exif.ExifSubIFDDirectory
import com.drew.metadata.exif.ExifTiffHandler
import java.io.IOException
-class SafeExifTiffHandler(metadata: Metadata, parentDirectory: Directory?) : ExifTiffHandler(metadata, parentDirectory) {
+class SafeExifTiffHandler(metadata: Metadata, parentDirectory: Directory?, exifStartOffset: Int) : ExifTiffHandler(metadata, parentDirectory, exifStartOffset) {
@Throws(IOException::class)
override fun customProcessTag(
tagOffset: Int,
diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/SafePngMetadataReader.kt b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/SafePngMetadataReader.kt
index c438068b5..05822f03a 100644
--- a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/SafePngMetadataReader.kt
+++ b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/metadataextractor/SafePngMetadataReader.kt
@@ -45,6 +45,7 @@ object SafePngMetadataReader {
private const val chunkSizeDangerThreshold = SafeXmpReader.SEGMENT_TYPE_SIZE_DANGER_THRESHOLD
private val latin1Encoding = Charsets.ISO_8859_1
+ private val utf8Encoding = Charsets.UTF_8
private val desiredChunkTypes: Set = hashSetOf(
PngChunkType.IHDR,
PngChunkType.PLTE,
@@ -234,7 +235,7 @@ object SafePngMetadataReader {
val reader: SequentialReader = SequentialByteArrayReader(bytes)
// Keyword is 1-79 bytes, followed by the 1 byte null character
- val keywordsv = reader.getNullTerminatedStringValue(79 + 1, latin1Encoding)
+ val keywordsv = reader.getNullTerminatedStringValue(79 + 1, utf8Encoding)
val keyword = keywordsv.toString()
val compressionFlag = reader.int8
val compressionMethod = reader.int8
@@ -273,7 +274,7 @@ object SafePngMetadataReader {
XmpReader().extract(textBytes, metadata)
} else {
val textPairs: MutableList = ArrayList()
- textPairs.add(KeyValuePair(keyword, StringValue(textBytes, latin1Encoding)))
+ textPairs.add(KeyValuePair(keyword, StringValue(textBytes, utf8Encoding)))
val directory = PngDirectory(PngChunkType.iTXt)
directory.setObject(PngDirectory.TAG_TEXTUAL_DATA, textPairs)
metadata.addDirectory(directory)
@@ -316,7 +317,7 @@ object SafePngMetadataReader {
metadata.addDirectory(directory)
} else if (chunkType == PngChunkType.eXIf) {
try {
- val handler = ExifTiffHandler(metadata, null)
+ val handler = ExifTiffHandler(metadata, null, 0)
TiffReader().processTiff(ByteArrayReader(bytes), handler, 0)
} catch (ex: TiffProcessingException) {
val directory = PngDirectory(PngChunkType.eXIf)
diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/model/provider/ImageProvider.kt b/android/app/src/main/kotlin/deckers/thibault/aves/model/provider/ImageProvider.kt
index 20fa622af..8abdc5648 100644
--- a/android/app/src/main/kotlin/deckers/thibault/aves/model/provider/ImageProvider.kt
+++ b/android/app/src/main/kotlin/deckers/thibault/aves/model/provider/ImageProvider.kt
@@ -381,8 +381,7 @@ abstract class ImageProvider {
targetUri: Uri,
targetPath: String,
) {
- val editableFile = File.createTempFile("aves", null).apply {
- deleteOnExit()
+ val editableFile = StorageUtils.createTempFile(context).apply {
// copy original file to a temporary file for editing
val inputStream = StorageUtils.openInputStream(context, targetUri)
transferFrom(inputStream, File(targetPath).length())
@@ -514,8 +513,7 @@ abstract class ImageProvider {
output.write(bytes)
}
} else {
- val editableFile = withContext(Dispatchers.IO) { File.createTempFile("aves", null) }.apply {
- deleteOnExit()
+ val editableFile = withContext(Dispatchers.IO) { StorageUtils.createTempFile(contextWrapper) }.apply {
transferFrom(ByteArrayInputStream(bytes), bytes.size.toLong())
}
@@ -649,8 +647,7 @@ abstract class ImageProvider {
val originalFileSize = File(path).length()
val videoSize = MultiPage.getMotionPhotoOffset(context, uri, mimeType, originalFileSize)?.let { it.toInt() + trailerDiff }
var videoBytes: ByteArray? = null
- val editableFile = File.createTempFile("aves", null).apply {
- deleteOnExit()
+ val editableFile = StorageUtils.createTempFile(context).apply {
try {
if (videoSize != null) {
// handle motion photo and embedded video separately
@@ -733,8 +730,7 @@ abstract class ImageProvider {
val originalFileSize = File(path).length()
val videoSize = MultiPage.getMotionPhotoOffset(context, uri, mimeType, originalFileSize)?.let { it.toInt() + trailerDiff }
var videoBytes: ByteArray? = null
- val editableFile = File.createTempFile("aves", null).apply {
- deleteOnExit()
+ val editableFile = StorageUtils.createTempFile(context).apply {
try {
if (videoSize != null) {
// handle motion photo and embedded video separately
@@ -898,8 +894,7 @@ abstract class ImageProvider {
val originalFileSize = File(path).length()
val videoSize = MultiPage.getMotionPhotoOffset(context, uri, mimeType, originalFileSize)?.let { it.toInt() + trailerDiff }
- val editableFile = File.createTempFile("aves", null).apply {
- deleteOnExit()
+ val editableFile = StorageUtils.createTempFile(context).apply {
try {
editXmpWithPixy(
context = context,
@@ -1275,8 +1270,7 @@ abstract class ImageProvider {
return
}
- val editableFile = File.createTempFile("aves", null).apply {
- deleteOnExit()
+ val editableFile = StorageUtils.createTempFile(context).apply {
try {
val inputStream = StorageUtils.openInputStream(context, uri)
// partial copy
@@ -1316,8 +1310,7 @@ abstract class ImageProvider {
val originalFileSize = File(path).length()
val videoSize = MultiPage.getMotionPhotoOffset(context, uri, mimeType, originalFileSize)?.toInt()
- val editableFile = File.createTempFile("aves", null).apply {
- deleteOnExit()
+ val editableFile = StorageUtils.createTempFile(context).apply {
try {
outputStream().use { output ->
// reopen input to read from start
diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/model/provider/MediaStoreImageProvider.kt b/android/app/src/main/kotlin/deckers/thibault/aves/model/provider/MediaStoreImageProvider.kt
index 1dd700ebf..d921615bd 100644
--- a/android/app/src/main/kotlin/deckers/thibault/aves/model/provider/MediaStoreImageProvider.kt
+++ b/android/app/src/main/kotlin/deckers/thibault/aves/model/provider/MediaStoreImageProvider.kt
@@ -725,12 +725,19 @@ class MediaStoreImageProvider : ImageProvider() {
val df = StorageUtils.getDocumentFile(activity, oldPath, oldMediaUri)
df ?: throw Exception("failed to get document at path=$oldPath")
+ val requestedName = newFile.name
val renamed = df.renameTo(newFile.name)
if (!renamed) {
throw Exception("failed to rename document at path=$oldPath")
}
+ val effectiveName = df.name
+ if (requestedName != effectiveName) {
+ Log.w(LOG_TAG, "requested renaming document at uri=$oldMediaUri path=$oldPath with name=${requestedName} but got name=$effectiveName")
+ }
+ val newPath = File(newFile.parentFile, df.name).path
+
scanObsoletePath(activity, oldMediaUri, oldPath, mimeType)
- return scanNewPathByMediaStore(activity, newFile.path, mimeType)
+ return scanNewPathByMediaStore(activity, newPath, mimeType)
}
private suspend fun renameSingleByFile(
diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/utils/StorageUtils.kt b/android/app/src/main/kotlin/deckers/thibault/aves/utils/StorageUtils.kt
index 306796ab3..a24cceda8 100644
--- a/android/app/src/main/kotlin/deckers/thibault/aves/utils/StorageUtils.kt
+++ b/android/app/src/main/kotlin/deckers/thibault/aves/utils/StorageUtils.kt
@@ -26,6 +26,7 @@ import deckers.thibault.aves.utils.PermissionManager.getGrantedDirForPath
import deckers.thibault.aves.utils.UriUtils.tryParseId
import java.io.File
import java.io.FileInputStream
+import java.io.IOException
import java.io.InputStream
import java.io.OutputStream
import java.util.*
@@ -593,8 +594,7 @@ object StorageUtils {
uriPath?.contains("/file/") == true -> {
// e.g. `content://media/external/file/...`
// create an ad-hoc temporary file for decoding only
- File.createTempFile("aves", null).apply {
- deleteOnExit()
+ createTempFile(context).apply {
try {
transferFrom(openInputStream(context, uri), sizeBytes)
return Uri.fromFile(this)
@@ -714,6 +714,25 @@ object StorageUtils {
}
}
+ private fun getTempDirectory(context: Context): File = File(context.cacheDir, "temp")
+
+ fun createTempFile(context: Context, extension: String? = null): File {
+ val directory = getTempDirectory(context)
+ if (!directory.exists() && !directory.mkdirs()) {
+ throw IOException("failed to create directories at path=$directory")
+ }
+ val tempFile = File.createTempFile("aves", extension, directory)
+ // `deleteOnExit` is unreliable, but it does not hurt
+ tempFile.deleteOnExit()
+ return tempFile
+ }
+
+ fun deleteTempDirectory(context: Context): Boolean {
+ val directory = getTempDirectory(context)
+ if (!directory.exists()) return false
+ return directory.deleteRecursively()
+ }
+
// convenience methods
fun getFolderSize(f: File): Long {
diff --git a/android/app/src/main/res/values-is/strings.xml b/android/app/src/main/res/values-is/strings.xml
new file mode 100644
index 000000000..5087337fe
--- /dev/null
+++ b/android/app/src/main/res/values-is/strings.xml
@@ -0,0 +1,12 @@
+
+
+ Stöðva
+ Myndarammi
+ Skanna myndefni
+ Myndskeið
+ Öruggur hamur
+ Bakgrunnur
+ Aves
+ Skönnun myndefnis
+ Leita
+
\ No newline at end of file
diff --git a/android/build.gradle b/android/build.gradle
index 10ae183fd..14ae3f66e 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -1,8 +1,8 @@
buildscript {
ext {
- kotlin_version = '1.8.21'
- ksp_version = "$kotlin_version-1.0.11"
- agp_version = '7.4.2'
+ kotlin_version = '1.9.21'
+ ksp_version = "$kotlin_version-1.0.15"
+ agp_version = '8.1.4'
glide_version = '4.16.0'
// AppGallery Connect plugin versions: https://developer.huawei.com/consumer/en/doc/development/AppGallery-connect-Guides/agc-sdk-changenotes-0000001058732550
huawei_agconnect_version = '1.9.1.300'
@@ -27,8 +27,8 @@ buildscript {
if (useCrashlytics) {
// GMS & Firebase Crashlytics (used by some flavors only)
- classpath 'com.google.gms:google-services:4.3.15'
- classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.8'
+ classpath 'com.google.gms:google-services:4.4.0'
+ classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9'
}
if (useHms) {
diff --git a/android/gradle.properties b/android/gradle.properties
index 390313428..318036f25 100644
--- a/android/gradle.properties
+++ b/android/gradle.properties
@@ -11,8 +11,6 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# Android operating system, and which are packaged with your app"s APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
-# Automatically convert third-party libraries to use AndroidX
-android.enableJetifier=true
# Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official
android.defaults.buildfeatures.buildconfig=true
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
index 8bc9958ab..7666e22b5 100644
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
diff --git a/fastlane/metadata/android/cs/images/phoneScreenshots/1.png b/fastlane/metadata/android/cs/images/phoneScreenshots/1.png
index ea8be8f13..472bcd0b3 100644
Binary files a/fastlane/metadata/android/cs/images/phoneScreenshots/1.png and b/fastlane/metadata/android/cs/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/cs/images/phoneScreenshots/2.png b/fastlane/metadata/android/cs/images/phoneScreenshots/2.png
index f684259cf..b1e1fbb7e 100644
Binary files a/fastlane/metadata/android/cs/images/phoneScreenshots/2.png and b/fastlane/metadata/android/cs/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/cs/images/phoneScreenshots/3.png b/fastlane/metadata/android/cs/images/phoneScreenshots/3.png
index 7940af98c..51d5c294b 100644
Binary files a/fastlane/metadata/android/cs/images/phoneScreenshots/3.png and b/fastlane/metadata/android/cs/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/cs/images/phoneScreenshots/4.png b/fastlane/metadata/android/cs/images/phoneScreenshots/4.png
index 3ea278277..a7ceeb655 100644
Binary files a/fastlane/metadata/android/cs/images/phoneScreenshots/4.png and b/fastlane/metadata/android/cs/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/cs/images/phoneScreenshots/5.png b/fastlane/metadata/android/cs/images/phoneScreenshots/5.png
index 6fbd3a037..f65ab3a1a 100644
Binary files a/fastlane/metadata/android/cs/images/phoneScreenshots/5.png and b/fastlane/metadata/android/cs/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/cs/images/phoneScreenshots/6.png b/fastlane/metadata/android/cs/images/phoneScreenshots/6.png
index e63823d65..92f708e30 100644
Binary files a/fastlane/metadata/android/cs/images/phoneScreenshots/6.png and b/fastlane/metadata/android/cs/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/cs/images/phoneScreenshots/7.png b/fastlane/metadata/android/cs/images/phoneScreenshots/7.png
index 0c8d9c0e7..9844a00a5 100644
Binary files a/fastlane/metadata/android/cs/images/phoneScreenshots/7.png and b/fastlane/metadata/android/cs/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/de/images/phoneScreenshots/1.png b/fastlane/metadata/android/de/images/phoneScreenshots/1.png
index ff49b0a6e..dee328b8b 100644
Binary files a/fastlane/metadata/android/de/images/phoneScreenshots/1.png and b/fastlane/metadata/android/de/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/de/images/phoneScreenshots/2.png b/fastlane/metadata/android/de/images/phoneScreenshots/2.png
index f43179c6e..f40409037 100644
Binary files a/fastlane/metadata/android/de/images/phoneScreenshots/2.png and b/fastlane/metadata/android/de/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/de/images/phoneScreenshots/3.png b/fastlane/metadata/android/de/images/phoneScreenshots/3.png
index c190bb5bd..0ea3e4fd4 100644
Binary files a/fastlane/metadata/android/de/images/phoneScreenshots/3.png and b/fastlane/metadata/android/de/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/de/images/phoneScreenshots/4.png b/fastlane/metadata/android/de/images/phoneScreenshots/4.png
index 8c1cb648c..d0351b9fe 100644
Binary files a/fastlane/metadata/android/de/images/phoneScreenshots/4.png and b/fastlane/metadata/android/de/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/de/images/phoneScreenshots/5.png b/fastlane/metadata/android/de/images/phoneScreenshots/5.png
index 64e691838..06b031df0 100644
Binary files a/fastlane/metadata/android/de/images/phoneScreenshots/5.png and b/fastlane/metadata/android/de/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/de/images/phoneScreenshots/6.png b/fastlane/metadata/android/de/images/phoneScreenshots/6.png
index 9de79e28b..ca7c88fde 100644
Binary files a/fastlane/metadata/android/de/images/phoneScreenshots/6.png and b/fastlane/metadata/android/de/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/de/images/phoneScreenshots/7.png b/fastlane/metadata/android/de/images/phoneScreenshots/7.png
index 6d0ff3f96..ff3a19e7a 100644
Binary files a/fastlane/metadata/android/de/images/phoneScreenshots/7.png and b/fastlane/metadata/android/de/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/el/images/phoneScreenshots/1.png b/fastlane/metadata/android/el/images/phoneScreenshots/1.png
index eefd8f1bb..f0722cbab 100644
Binary files a/fastlane/metadata/android/el/images/phoneScreenshots/1.png and b/fastlane/metadata/android/el/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/el/images/phoneScreenshots/2.png b/fastlane/metadata/android/el/images/phoneScreenshots/2.png
index 96dae9f00..215036deb 100644
Binary files a/fastlane/metadata/android/el/images/phoneScreenshots/2.png and b/fastlane/metadata/android/el/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/el/images/phoneScreenshots/3.png b/fastlane/metadata/android/el/images/phoneScreenshots/3.png
index bc74450d4..74d97a7d9 100644
Binary files a/fastlane/metadata/android/el/images/phoneScreenshots/3.png and b/fastlane/metadata/android/el/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/el/images/phoneScreenshots/4.png b/fastlane/metadata/android/el/images/phoneScreenshots/4.png
index 77e81d3f9..21c1e62d2 100644
Binary files a/fastlane/metadata/android/el/images/phoneScreenshots/4.png and b/fastlane/metadata/android/el/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/el/images/phoneScreenshots/5.png b/fastlane/metadata/android/el/images/phoneScreenshots/5.png
index 24d25bb3f..f767b3be2 100644
Binary files a/fastlane/metadata/android/el/images/phoneScreenshots/5.png and b/fastlane/metadata/android/el/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/el/images/phoneScreenshots/6.png b/fastlane/metadata/android/el/images/phoneScreenshots/6.png
index b8873682f..9bcee393e 100644
Binary files a/fastlane/metadata/android/el/images/phoneScreenshots/6.png and b/fastlane/metadata/android/el/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/el/images/phoneScreenshots/7.png b/fastlane/metadata/android/el/images/phoneScreenshots/7.png
index be70a0288..931e6370d 100644
Binary files a/fastlane/metadata/android/el/images/phoneScreenshots/7.png and b/fastlane/metadata/android/el/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/en-US/changelogs/100.txt b/fastlane/metadata/android/en-US/changelogs/100.txt
deleted file mode 100644
index e126e5ad6..000000000
--- a/fastlane/metadata/android/en-US/changelogs/100.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-In v1.8.9:
-- play your animated PNGs
-- set your home to the Tags page
-- enjoy the app in Norwegian (Nynorsk)
-Full changelog available on GitHub
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/10001.txt b/fastlane/metadata/android/en-US/changelogs/10001.txt
deleted file mode 100644
index e126e5ad6..000000000
--- a/fastlane/metadata/android/en-US/changelogs/10001.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-In v1.8.9:
-- play your animated PNGs
-- set your home to the Tags page
-- enjoy the app in Norwegian (Nynorsk)
-Full changelog available on GitHub
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/101.txt b/fastlane/metadata/android/en-US/changelogs/101.txt
deleted file mode 100644
index ac542c6e0..000000000
--- a/fastlane/metadata/android/en-US/changelogs/101.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-In v1.9.0:
-- play your animated AVIF, AV1, and HDR videos
-- filter by rating ranges
-- judge tonal distributions with the viewer histogram
-Full changelog available on GitHub
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/10101.txt b/fastlane/metadata/android/en-US/changelogs/10101.txt
deleted file mode 100644
index ac542c6e0..000000000
--- a/fastlane/metadata/android/en-US/changelogs/10101.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-In v1.9.0:
-- play your animated AVIF, AV1, and HDR videos
-- filter by rating ranges
-- judge tonal distributions with the viewer histogram
-Full changelog available on GitHub
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/102.txt b/fastlane/metadata/android/en-US/changelogs/102.txt
deleted file mode 100644
index c5ba8521a..000000000
--- a/fastlane/metadata/android/en-US/changelogs/102.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-In v1.9.1:
-- play your animated AVIF, AV1, and HDR videos
-- filter by rating ranges
-- judge tonal distributions with the viewer histogram
-Full changelog available on GitHub
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/10201.txt b/fastlane/metadata/android/en-US/changelogs/10201.txt
deleted file mode 100644
index c5ba8521a..000000000
--- a/fastlane/metadata/android/en-US/changelogs/10201.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-In v1.9.1:
-- play your animated AVIF, AV1, and HDR videos
-- filter by rating ranges
-- judge tonal distributions with the viewer histogram
-Full changelog available on GitHub
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/103.txt b/fastlane/metadata/android/en-US/changelogs/103.txt
deleted file mode 100644
index f2c89cff5..000000000
--- a/fastlane/metadata/android/en-US/changelogs/103.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-In v1.9.2:
-- play your animated AVIF, AV1, and HDR videos
-- filter by rating ranges
-- judge tonal distributions with the viewer histogram
-Full changelog available on GitHub
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/10301.txt b/fastlane/metadata/android/en-US/changelogs/10301.txt
deleted file mode 100644
index f2c89cff5..000000000
--- a/fastlane/metadata/android/en-US/changelogs/10301.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-In v1.9.2:
-- play your animated AVIF, AV1, and HDR videos
-- filter by rating ranges
-- judge tonal distributions with the viewer histogram
-Full changelog available on GitHub
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/104.txt b/fastlane/metadata/android/en-US/changelogs/104.txt
deleted file mode 100644
index 5c5ca1669..000000000
--- a/fastlane/metadata/android/en-US/changelogs/104.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-In v1.9.3:
-- play your animated AVIF, AV1, and HDR videos
-- filter by rating ranges
-- judge tonal distributions with the viewer histogram
-Full changelog available on GitHub
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/10401.txt b/fastlane/metadata/android/en-US/changelogs/10401.txt
deleted file mode 100644
index 5c5ca1669..000000000
--- a/fastlane/metadata/android/en-US/changelogs/10401.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-In v1.9.3:
-- play your animated AVIF, AV1, and HDR videos
-- filter by rating ranges
-- judge tonal distributions with the viewer histogram
-Full changelog available on GitHub
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/109.txt b/fastlane/metadata/android/en-US/changelogs/109.txt
new file mode 100644
index 000000000..3c18fca39
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/109.txt
@@ -0,0 +1,4 @@
+In v1.10.0:
+- cast images via DLNA/UPnP
+- enjoy the app in Icelandic
+Full changelog available on GitHub
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/10901.txt b/fastlane/metadata/android/en-US/changelogs/10901.txt
new file mode 100644
index 000000000..3c18fca39
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/10901.txt
@@ -0,0 +1,4 @@
+In v1.10.0:
+- cast images via DLNA/UPnP
+- enjoy the app in Icelandic
+Full changelog available on GitHub
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png
index da2db556d..ca7edfc76 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png
index 3fdfd7a50..37f468cc8 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png
index 5c427c13c..f867bbba5 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png
index 2074b5ce4..094a087d7 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png
index 82206f5be..5709828e3 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png
index 1ab68a950..0e2e20374 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/7.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/7.png
index fd97f6418..0eb452dc8 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/7.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/es-MX/images/phoneScreenshots/1.png b/fastlane/metadata/android/es-MX/images/phoneScreenshots/1.png
index 7c0e52710..72009ab1b 100644
Binary files a/fastlane/metadata/android/es-MX/images/phoneScreenshots/1.png and b/fastlane/metadata/android/es-MX/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/es-MX/images/phoneScreenshots/2.png b/fastlane/metadata/android/es-MX/images/phoneScreenshots/2.png
index e46458e7f..61afd897b 100644
Binary files a/fastlane/metadata/android/es-MX/images/phoneScreenshots/2.png and b/fastlane/metadata/android/es-MX/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/es-MX/images/phoneScreenshots/3.png b/fastlane/metadata/android/es-MX/images/phoneScreenshots/3.png
index 7235df192..69ff37cda 100644
Binary files a/fastlane/metadata/android/es-MX/images/phoneScreenshots/3.png and b/fastlane/metadata/android/es-MX/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/es-MX/images/phoneScreenshots/4.png b/fastlane/metadata/android/es-MX/images/phoneScreenshots/4.png
index 7576c4812..6491428e5 100644
Binary files a/fastlane/metadata/android/es-MX/images/phoneScreenshots/4.png and b/fastlane/metadata/android/es-MX/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/es-MX/images/phoneScreenshots/5.png b/fastlane/metadata/android/es-MX/images/phoneScreenshots/5.png
index 0014da392..3d00d4077 100644
Binary files a/fastlane/metadata/android/es-MX/images/phoneScreenshots/5.png and b/fastlane/metadata/android/es-MX/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/es-MX/images/phoneScreenshots/6.png b/fastlane/metadata/android/es-MX/images/phoneScreenshots/6.png
index b50b970eb..f45ac6185 100644
Binary files a/fastlane/metadata/android/es-MX/images/phoneScreenshots/6.png and b/fastlane/metadata/android/es-MX/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/es-MX/images/phoneScreenshots/7.png b/fastlane/metadata/android/es-MX/images/phoneScreenshots/7.png
index 59dff9ed5..e8a280a16 100644
Binary files a/fastlane/metadata/android/es-MX/images/phoneScreenshots/7.png and b/fastlane/metadata/android/es-MX/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/eu/images/phoneScreenshots/1.png b/fastlane/metadata/android/eu/images/phoneScreenshots/1.png
index 7f2dca48e..c9b016361 100644
Binary files a/fastlane/metadata/android/eu/images/phoneScreenshots/1.png and b/fastlane/metadata/android/eu/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/eu/images/phoneScreenshots/2.png b/fastlane/metadata/android/eu/images/phoneScreenshots/2.png
index be2d319a7..4c701a4c6 100644
Binary files a/fastlane/metadata/android/eu/images/phoneScreenshots/2.png and b/fastlane/metadata/android/eu/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/eu/images/phoneScreenshots/3.png b/fastlane/metadata/android/eu/images/phoneScreenshots/3.png
index 98fa51b08..c7cb9c666 100644
Binary files a/fastlane/metadata/android/eu/images/phoneScreenshots/3.png and b/fastlane/metadata/android/eu/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/eu/images/phoneScreenshots/4.png b/fastlane/metadata/android/eu/images/phoneScreenshots/4.png
index f2a53a498..847627c87 100644
Binary files a/fastlane/metadata/android/eu/images/phoneScreenshots/4.png and b/fastlane/metadata/android/eu/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/eu/images/phoneScreenshots/5.png b/fastlane/metadata/android/eu/images/phoneScreenshots/5.png
index 244028de4..2b8914ed8 100644
Binary files a/fastlane/metadata/android/eu/images/phoneScreenshots/5.png and b/fastlane/metadata/android/eu/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/eu/images/phoneScreenshots/6.png b/fastlane/metadata/android/eu/images/phoneScreenshots/6.png
index 41a3c9e5b..1a9ff9000 100644
Binary files a/fastlane/metadata/android/eu/images/phoneScreenshots/6.png and b/fastlane/metadata/android/eu/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/eu/images/phoneScreenshots/7.png b/fastlane/metadata/android/eu/images/phoneScreenshots/7.png
index 3d99af3ed..b9b6686cc 100644
Binary files a/fastlane/metadata/android/eu/images/phoneScreenshots/7.png and b/fastlane/metadata/android/eu/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/fr/images/phoneScreenshots/1.png b/fastlane/metadata/android/fr/images/phoneScreenshots/1.png
index 40ad40622..1a10f9221 100644
Binary files a/fastlane/metadata/android/fr/images/phoneScreenshots/1.png and b/fastlane/metadata/android/fr/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/fr/images/phoneScreenshots/2.png b/fastlane/metadata/android/fr/images/phoneScreenshots/2.png
index 111066ff1..21b65b162 100644
Binary files a/fastlane/metadata/android/fr/images/phoneScreenshots/2.png and b/fastlane/metadata/android/fr/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/fr/images/phoneScreenshots/3.png b/fastlane/metadata/android/fr/images/phoneScreenshots/3.png
index 2a3e59ee1..cc4f7a584 100644
Binary files a/fastlane/metadata/android/fr/images/phoneScreenshots/3.png and b/fastlane/metadata/android/fr/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/fr/images/phoneScreenshots/4.png b/fastlane/metadata/android/fr/images/phoneScreenshots/4.png
index e4433269e..0bb6490e1 100644
Binary files a/fastlane/metadata/android/fr/images/phoneScreenshots/4.png and b/fastlane/metadata/android/fr/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/fr/images/phoneScreenshots/5.png b/fastlane/metadata/android/fr/images/phoneScreenshots/5.png
index 3378ac3e7..1388a5333 100644
Binary files a/fastlane/metadata/android/fr/images/phoneScreenshots/5.png and b/fastlane/metadata/android/fr/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/fr/images/phoneScreenshots/6.png b/fastlane/metadata/android/fr/images/phoneScreenshots/6.png
index 7c792b21b..e3ba684a5 100644
Binary files a/fastlane/metadata/android/fr/images/phoneScreenshots/6.png and b/fastlane/metadata/android/fr/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/fr/images/phoneScreenshots/7.png b/fastlane/metadata/android/fr/images/phoneScreenshots/7.png
index 5c1e6cd36..2699c480b 100644
Binary files a/fastlane/metadata/android/fr/images/phoneScreenshots/7.png and b/fastlane/metadata/android/fr/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/hu/images/phoneScreenshots/1.png b/fastlane/metadata/android/hu/images/phoneScreenshots/1.png
index 7e43417d9..f50f91a94 100644
Binary files a/fastlane/metadata/android/hu/images/phoneScreenshots/1.png and b/fastlane/metadata/android/hu/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/hu/images/phoneScreenshots/2.png b/fastlane/metadata/android/hu/images/phoneScreenshots/2.png
index f26b68fcc..96a5ccdc8 100644
Binary files a/fastlane/metadata/android/hu/images/phoneScreenshots/2.png and b/fastlane/metadata/android/hu/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/hu/images/phoneScreenshots/3.png b/fastlane/metadata/android/hu/images/phoneScreenshots/3.png
index 506cafe4c..18a1922bc 100644
Binary files a/fastlane/metadata/android/hu/images/phoneScreenshots/3.png and b/fastlane/metadata/android/hu/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/hu/images/phoneScreenshots/4.png b/fastlane/metadata/android/hu/images/phoneScreenshots/4.png
index 8e5ebb434..8fa0e498c 100644
Binary files a/fastlane/metadata/android/hu/images/phoneScreenshots/4.png and b/fastlane/metadata/android/hu/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/hu/images/phoneScreenshots/5.png b/fastlane/metadata/android/hu/images/phoneScreenshots/5.png
index 2a11a7b48..8d8522b2f 100644
Binary files a/fastlane/metadata/android/hu/images/phoneScreenshots/5.png and b/fastlane/metadata/android/hu/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/hu/images/phoneScreenshots/6.png b/fastlane/metadata/android/hu/images/phoneScreenshots/6.png
index 379e13ee5..54e31b8c7 100644
Binary files a/fastlane/metadata/android/hu/images/phoneScreenshots/6.png and b/fastlane/metadata/android/hu/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/hu/images/phoneScreenshots/7.png b/fastlane/metadata/android/hu/images/phoneScreenshots/7.png
index fe1a650f4..ad7ee0ff0 100644
Binary files a/fastlane/metadata/android/hu/images/phoneScreenshots/7.png and b/fastlane/metadata/android/hu/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/id/images/phoneScreenshots/1.png b/fastlane/metadata/android/id/images/phoneScreenshots/1.png
index fc94cf155..6eaf2273b 100644
Binary files a/fastlane/metadata/android/id/images/phoneScreenshots/1.png and b/fastlane/metadata/android/id/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/id/images/phoneScreenshots/2.png b/fastlane/metadata/android/id/images/phoneScreenshots/2.png
index 276edee53..dfdd8b26d 100644
Binary files a/fastlane/metadata/android/id/images/phoneScreenshots/2.png and b/fastlane/metadata/android/id/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/id/images/phoneScreenshots/3.png b/fastlane/metadata/android/id/images/phoneScreenshots/3.png
index 0e6eb3db7..fd1bb92dd 100644
Binary files a/fastlane/metadata/android/id/images/phoneScreenshots/3.png and b/fastlane/metadata/android/id/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/id/images/phoneScreenshots/4.png b/fastlane/metadata/android/id/images/phoneScreenshots/4.png
index dbedad8eb..5e575b60d 100644
Binary files a/fastlane/metadata/android/id/images/phoneScreenshots/4.png and b/fastlane/metadata/android/id/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/id/images/phoneScreenshots/5.png b/fastlane/metadata/android/id/images/phoneScreenshots/5.png
index a0efbf155..e8b17d935 100644
Binary files a/fastlane/metadata/android/id/images/phoneScreenshots/5.png and b/fastlane/metadata/android/id/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/id/images/phoneScreenshots/6.png b/fastlane/metadata/android/id/images/phoneScreenshots/6.png
index f1f00ca5e..763d3f053 100644
Binary files a/fastlane/metadata/android/id/images/phoneScreenshots/6.png and b/fastlane/metadata/android/id/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/id/images/phoneScreenshots/7.png b/fastlane/metadata/android/id/images/phoneScreenshots/7.png
index e3af538e6..e64da42a5 100644
Binary files a/fastlane/metadata/android/id/images/phoneScreenshots/7.png and b/fastlane/metadata/android/id/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/is/full_description.txt b/fastlane/metadata/android/is/full_description.txt
new file mode 100644
index 000000000..6c92748f8
--- /dev/null
+++ b/fastlane/metadata/android/is/full_description.txt
@@ -0,0 +1,5 @@
+Aves can handle all sorts of images and videos, including your typical JPEGs and MP4s, but also more exotic things like multi-page TIFFs, SVGs, old AVIs and more! It scans your media collection to identify motion photos, panoramas (aka photo spheres), 360° videos, as well as GeoTIFF files.
+
+Navigation and search is an important part of Aves. The goal is for users to easily flow from albums to photos to tags to maps, etc.
+
+Aves integrates with Android (from KitKat to Android 13, including Android TV) with features such as widgets, app shortcuts, screen saver and global search handling. It also works as a media viewer and picker.
\ No newline at end of file
diff --git a/fastlane/metadata/android/is/images/featureGraphic.png b/fastlane/metadata/android/is/images/featureGraphic.png
new file mode 100644
index 000000000..b15f02fb5
Binary files /dev/null and b/fastlane/metadata/android/is/images/featureGraphic.png differ
diff --git a/fastlane/metadata/android/is/images/phoneScreenshots/1.png b/fastlane/metadata/android/is/images/phoneScreenshots/1.png
new file mode 100644
index 000000000..37d8598a2
Binary files /dev/null and b/fastlane/metadata/android/is/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/is/images/phoneScreenshots/2.png b/fastlane/metadata/android/is/images/phoneScreenshots/2.png
new file mode 100644
index 000000000..77cbf0153
Binary files /dev/null and b/fastlane/metadata/android/is/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/is/images/phoneScreenshots/3.png b/fastlane/metadata/android/is/images/phoneScreenshots/3.png
new file mode 100644
index 000000000..2330679f7
Binary files /dev/null and b/fastlane/metadata/android/is/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/is/images/phoneScreenshots/4.png b/fastlane/metadata/android/is/images/phoneScreenshots/4.png
new file mode 100644
index 000000000..80df4a727
Binary files /dev/null and b/fastlane/metadata/android/is/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/is/images/phoneScreenshots/5.png b/fastlane/metadata/android/is/images/phoneScreenshots/5.png
new file mode 100644
index 000000000..691840c7d
Binary files /dev/null and b/fastlane/metadata/android/is/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/is/images/phoneScreenshots/6.png b/fastlane/metadata/android/is/images/phoneScreenshots/6.png
new file mode 100644
index 000000000..56f4213c5
Binary files /dev/null and b/fastlane/metadata/android/is/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/is/images/phoneScreenshots/7.png b/fastlane/metadata/android/is/images/phoneScreenshots/7.png
new file mode 100644
index 000000000..a18ca83b0
Binary files /dev/null and b/fastlane/metadata/android/is/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/is/short_description.txt b/fastlane/metadata/android/is/short_description.txt
new file mode 100644
index 000000000..8c9445bd5
--- /dev/null
+++ b/fastlane/metadata/android/is/short_description.txt
@@ -0,0 +1 @@
+Gallery and metadata explorer
\ No newline at end of file
diff --git a/fastlane/metadata/android/it/images/phoneScreenshots/1.png b/fastlane/metadata/android/it/images/phoneScreenshots/1.png
index d6b796478..2639a317b 100644
Binary files a/fastlane/metadata/android/it/images/phoneScreenshots/1.png and b/fastlane/metadata/android/it/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/it/images/phoneScreenshots/2.png b/fastlane/metadata/android/it/images/phoneScreenshots/2.png
index 6ba6e70dc..ce01662ee 100644
Binary files a/fastlane/metadata/android/it/images/phoneScreenshots/2.png and b/fastlane/metadata/android/it/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/it/images/phoneScreenshots/3.png b/fastlane/metadata/android/it/images/phoneScreenshots/3.png
index 5ce25cd4d..e83f88660 100644
Binary files a/fastlane/metadata/android/it/images/phoneScreenshots/3.png and b/fastlane/metadata/android/it/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/it/images/phoneScreenshots/4.png b/fastlane/metadata/android/it/images/phoneScreenshots/4.png
index 5da901ece..dd89e1ef6 100644
Binary files a/fastlane/metadata/android/it/images/phoneScreenshots/4.png and b/fastlane/metadata/android/it/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/it/images/phoneScreenshots/5.png b/fastlane/metadata/android/it/images/phoneScreenshots/5.png
index 7fc3c9d00..ee7841838 100644
Binary files a/fastlane/metadata/android/it/images/phoneScreenshots/5.png and b/fastlane/metadata/android/it/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/it/images/phoneScreenshots/6.png b/fastlane/metadata/android/it/images/phoneScreenshots/6.png
index 854b14068..4f405d609 100644
Binary files a/fastlane/metadata/android/it/images/phoneScreenshots/6.png and b/fastlane/metadata/android/it/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/it/images/phoneScreenshots/7.png b/fastlane/metadata/android/it/images/phoneScreenshots/7.png
index fe36b22d3..e5ac97ce6 100644
Binary files a/fastlane/metadata/android/it/images/phoneScreenshots/7.png and b/fastlane/metadata/android/it/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/ja/images/phoneScreenshots/1.png b/fastlane/metadata/android/ja/images/phoneScreenshots/1.png
index 197d4d7c9..f0295da57 100644
Binary files a/fastlane/metadata/android/ja/images/phoneScreenshots/1.png and b/fastlane/metadata/android/ja/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/ja/images/phoneScreenshots/2.png b/fastlane/metadata/android/ja/images/phoneScreenshots/2.png
index 80352a8e4..1a09722c2 100644
Binary files a/fastlane/metadata/android/ja/images/phoneScreenshots/2.png and b/fastlane/metadata/android/ja/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/ja/images/phoneScreenshots/3.png b/fastlane/metadata/android/ja/images/phoneScreenshots/3.png
index 1220cee5a..be1c197fa 100644
Binary files a/fastlane/metadata/android/ja/images/phoneScreenshots/3.png and b/fastlane/metadata/android/ja/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/ja/images/phoneScreenshots/4.png b/fastlane/metadata/android/ja/images/phoneScreenshots/4.png
index f8c167d72..3c794709f 100644
Binary files a/fastlane/metadata/android/ja/images/phoneScreenshots/4.png and b/fastlane/metadata/android/ja/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/ja/images/phoneScreenshots/5.png b/fastlane/metadata/android/ja/images/phoneScreenshots/5.png
index 6750f2a99..85da14dba 100644
Binary files a/fastlane/metadata/android/ja/images/phoneScreenshots/5.png and b/fastlane/metadata/android/ja/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/ja/images/phoneScreenshots/6.png b/fastlane/metadata/android/ja/images/phoneScreenshots/6.png
index 94a630301..1fa22534d 100644
Binary files a/fastlane/metadata/android/ja/images/phoneScreenshots/6.png and b/fastlane/metadata/android/ja/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/ja/images/phoneScreenshots/7.png b/fastlane/metadata/android/ja/images/phoneScreenshots/7.png
index 565e6ebef..859589ec8 100644
Binary files a/fastlane/metadata/android/ja/images/phoneScreenshots/7.png and b/fastlane/metadata/android/ja/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/ko/images/phoneScreenshots/1.png b/fastlane/metadata/android/ko/images/phoneScreenshots/1.png
index dfafa5766..7082f118a 100644
Binary files a/fastlane/metadata/android/ko/images/phoneScreenshots/1.png and b/fastlane/metadata/android/ko/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/ko/images/phoneScreenshots/2.png b/fastlane/metadata/android/ko/images/phoneScreenshots/2.png
index a90b98b25..656e9d065 100644
Binary files a/fastlane/metadata/android/ko/images/phoneScreenshots/2.png and b/fastlane/metadata/android/ko/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/ko/images/phoneScreenshots/3.png b/fastlane/metadata/android/ko/images/phoneScreenshots/3.png
index 1f32a2593..653aafa90 100644
Binary files a/fastlane/metadata/android/ko/images/phoneScreenshots/3.png and b/fastlane/metadata/android/ko/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/ko/images/phoneScreenshots/4.png b/fastlane/metadata/android/ko/images/phoneScreenshots/4.png
index 8530da0b9..49b756274 100644
Binary files a/fastlane/metadata/android/ko/images/phoneScreenshots/4.png and b/fastlane/metadata/android/ko/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/ko/images/phoneScreenshots/5.png b/fastlane/metadata/android/ko/images/phoneScreenshots/5.png
index 09ff885d5..9deb97f29 100644
Binary files a/fastlane/metadata/android/ko/images/phoneScreenshots/5.png and b/fastlane/metadata/android/ko/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/ko/images/phoneScreenshots/6.png b/fastlane/metadata/android/ko/images/phoneScreenshots/6.png
index 206370d9b..d95c27b54 100644
Binary files a/fastlane/metadata/android/ko/images/phoneScreenshots/6.png and b/fastlane/metadata/android/ko/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/ko/images/phoneScreenshots/7.png b/fastlane/metadata/android/ko/images/phoneScreenshots/7.png
index 514fa72c2..dd7d136e4 100644
Binary files a/fastlane/metadata/android/ko/images/phoneScreenshots/7.png and b/fastlane/metadata/android/ko/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/lt/images/phoneScreenshots/1.png b/fastlane/metadata/android/lt/images/phoneScreenshots/1.png
index 28589979e..9833ac27c 100644
Binary files a/fastlane/metadata/android/lt/images/phoneScreenshots/1.png and b/fastlane/metadata/android/lt/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/lt/images/phoneScreenshots/2.png b/fastlane/metadata/android/lt/images/phoneScreenshots/2.png
index 88a3c59ae..3cc6610f8 100644
Binary files a/fastlane/metadata/android/lt/images/phoneScreenshots/2.png and b/fastlane/metadata/android/lt/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/lt/images/phoneScreenshots/3.png b/fastlane/metadata/android/lt/images/phoneScreenshots/3.png
index 345fb90e6..cc118f076 100644
Binary files a/fastlane/metadata/android/lt/images/phoneScreenshots/3.png and b/fastlane/metadata/android/lt/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/lt/images/phoneScreenshots/4.png b/fastlane/metadata/android/lt/images/phoneScreenshots/4.png
index b7a0bb546..66aa2f726 100644
Binary files a/fastlane/metadata/android/lt/images/phoneScreenshots/4.png and b/fastlane/metadata/android/lt/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/lt/images/phoneScreenshots/5.png b/fastlane/metadata/android/lt/images/phoneScreenshots/5.png
index 0408fd3c5..3561b8d1a 100644
Binary files a/fastlane/metadata/android/lt/images/phoneScreenshots/5.png and b/fastlane/metadata/android/lt/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/lt/images/phoneScreenshots/6.png b/fastlane/metadata/android/lt/images/phoneScreenshots/6.png
index 233411d03..e2495abf0 100644
Binary files a/fastlane/metadata/android/lt/images/phoneScreenshots/6.png and b/fastlane/metadata/android/lt/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/lt/images/phoneScreenshots/7.png b/fastlane/metadata/android/lt/images/phoneScreenshots/7.png
index ba5df9955..849f2e560 100644
Binary files a/fastlane/metadata/android/lt/images/phoneScreenshots/7.png and b/fastlane/metadata/android/lt/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/1.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/1.png
index a0301b619..887823e42 100644
Binary files a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/1.png and b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/2.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/2.png
index c71169bb1..296bd4895 100644
Binary files a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/2.png and b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/3.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/3.png
index b793e51ab..31347e3b2 100644
Binary files a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/3.png and b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/4.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/4.png
index 517d27107..3e9afad93 100644
Binary files a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/4.png and b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/5.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/5.png
index 35c2d588d..f900a93fa 100644
Binary files a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/5.png and b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/6.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/6.png
index fff3807fd..05412e6d6 100644
Binary files a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/6.png and b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/7.png b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/7.png
index 9e548bde8..07d6de655 100644
Binary files a/fastlane/metadata/android/nb-NO/images/phoneScreenshots/7.png and b/fastlane/metadata/android/nb-NO/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/nl/images/phoneScreenshots/1.png b/fastlane/metadata/android/nl/images/phoneScreenshots/1.png
index 5a9beeef1..5605a8319 100644
Binary files a/fastlane/metadata/android/nl/images/phoneScreenshots/1.png and b/fastlane/metadata/android/nl/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/nl/images/phoneScreenshots/2.png b/fastlane/metadata/android/nl/images/phoneScreenshots/2.png
index 0d12b0043..d503bd675 100644
Binary files a/fastlane/metadata/android/nl/images/phoneScreenshots/2.png and b/fastlane/metadata/android/nl/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/nl/images/phoneScreenshots/3.png b/fastlane/metadata/android/nl/images/phoneScreenshots/3.png
index 71352d755..0a43eef47 100644
Binary files a/fastlane/metadata/android/nl/images/phoneScreenshots/3.png and b/fastlane/metadata/android/nl/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/nl/images/phoneScreenshots/4.png b/fastlane/metadata/android/nl/images/phoneScreenshots/4.png
index 1022676f1..dead88501 100644
Binary files a/fastlane/metadata/android/nl/images/phoneScreenshots/4.png and b/fastlane/metadata/android/nl/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/nl/images/phoneScreenshots/5.png b/fastlane/metadata/android/nl/images/phoneScreenshots/5.png
index d37238c12..857d999a8 100644
Binary files a/fastlane/metadata/android/nl/images/phoneScreenshots/5.png and b/fastlane/metadata/android/nl/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/nl/images/phoneScreenshots/6.png b/fastlane/metadata/android/nl/images/phoneScreenshots/6.png
index 2bc15db64..833b7e922 100644
Binary files a/fastlane/metadata/android/nl/images/phoneScreenshots/6.png and b/fastlane/metadata/android/nl/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/nl/images/phoneScreenshots/7.png b/fastlane/metadata/android/nl/images/phoneScreenshots/7.png
index f9c3c461a..b837ed5b3 100644
Binary files a/fastlane/metadata/android/nl/images/phoneScreenshots/7.png and b/fastlane/metadata/android/nl/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/nn/images/phoneScreenshots/1.png b/fastlane/metadata/android/nn/images/phoneScreenshots/1.png
index 8d90d9b37..093c6c39a 100644
Binary files a/fastlane/metadata/android/nn/images/phoneScreenshots/1.png and b/fastlane/metadata/android/nn/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/nn/images/phoneScreenshots/2.png b/fastlane/metadata/android/nn/images/phoneScreenshots/2.png
index 9fd360a64..2ed257108 100644
Binary files a/fastlane/metadata/android/nn/images/phoneScreenshots/2.png and b/fastlane/metadata/android/nn/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/nn/images/phoneScreenshots/3.png b/fastlane/metadata/android/nn/images/phoneScreenshots/3.png
index 927ddecd0..57c909e7d 100644
Binary files a/fastlane/metadata/android/nn/images/phoneScreenshots/3.png and b/fastlane/metadata/android/nn/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/nn/images/phoneScreenshots/4.png b/fastlane/metadata/android/nn/images/phoneScreenshots/4.png
index 825374766..b16da8406 100644
Binary files a/fastlane/metadata/android/nn/images/phoneScreenshots/4.png and b/fastlane/metadata/android/nn/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/nn/images/phoneScreenshots/5.png b/fastlane/metadata/android/nn/images/phoneScreenshots/5.png
index c9ba7c3e0..77dd8e4f5 100644
Binary files a/fastlane/metadata/android/nn/images/phoneScreenshots/5.png and b/fastlane/metadata/android/nn/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/nn/images/phoneScreenshots/6.png b/fastlane/metadata/android/nn/images/phoneScreenshots/6.png
index be4769665..486a92c63 100644
Binary files a/fastlane/metadata/android/nn/images/phoneScreenshots/6.png and b/fastlane/metadata/android/nn/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/nn/images/phoneScreenshots/7.png b/fastlane/metadata/android/nn/images/phoneScreenshots/7.png
index 633599ce2..a424a0bcb 100644
Binary files a/fastlane/metadata/android/nn/images/phoneScreenshots/7.png and b/fastlane/metadata/android/nn/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/pl/images/phoneScreenshots/1.png b/fastlane/metadata/android/pl/images/phoneScreenshots/1.png
index 01e38dc7f..8bb698c81 100644
Binary files a/fastlane/metadata/android/pl/images/phoneScreenshots/1.png and b/fastlane/metadata/android/pl/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/pl/images/phoneScreenshots/2.png b/fastlane/metadata/android/pl/images/phoneScreenshots/2.png
index a1665b69e..e5104fdf0 100644
Binary files a/fastlane/metadata/android/pl/images/phoneScreenshots/2.png and b/fastlane/metadata/android/pl/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/pl/images/phoneScreenshots/3.png b/fastlane/metadata/android/pl/images/phoneScreenshots/3.png
index b3e2d334c..79e1c8cdc 100644
Binary files a/fastlane/metadata/android/pl/images/phoneScreenshots/3.png and b/fastlane/metadata/android/pl/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/pl/images/phoneScreenshots/4.png b/fastlane/metadata/android/pl/images/phoneScreenshots/4.png
index d66d85bbf..816a2d78e 100644
Binary files a/fastlane/metadata/android/pl/images/phoneScreenshots/4.png and b/fastlane/metadata/android/pl/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/pl/images/phoneScreenshots/5.png b/fastlane/metadata/android/pl/images/phoneScreenshots/5.png
index d3f82ec46..754858c02 100644
Binary files a/fastlane/metadata/android/pl/images/phoneScreenshots/5.png and b/fastlane/metadata/android/pl/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/pl/images/phoneScreenshots/6.png b/fastlane/metadata/android/pl/images/phoneScreenshots/6.png
index cf3ff0987..d8338d257 100644
Binary files a/fastlane/metadata/android/pl/images/phoneScreenshots/6.png and b/fastlane/metadata/android/pl/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/pl/images/phoneScreenshots/7.png b/fastlane/metadata/android/pl/images/phoneScreenshots/7.png
index ed1aa3e5c..9cf6f6cae 100644
Binary files a/fastlane/metadata/android/pl/images/phoneScreenshots/7.png and b/fastlane/metadata/android/pl/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/1.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/1.png
index e09364a89..b0c3240de 100644
Binary files a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/1.png and b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/2.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/2.png
index 9ca056b3b..fcd83f21b 100644
Binary files a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/2.png and b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/3.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/3.png
index e2d92740f..72e7a5bd4 100644
Binary files a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/3.png and b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/4.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/4.png
index 7b5f3b674..9e0f5aa79 100644
Binary files a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/4.png and b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/5.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/5.png
index 8fdd9acfa..db56dd16f 100644
Binary files a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/5.png and b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/6.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/6.png
index 90ba8aaf1..3dae76240 100644
Binary files a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/6.png and b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/7.png b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/7.png
index ef878766c..9d7a1bb57 100644
Binary files a/fastlane/metadata/android/pt-BR/images/phoneScreenshots/7.png and b/fastlane/metadata/android/pt-BR/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/ro/images/phoneScreenshots/1.png b/fastlane/metadata/android/ro/images/phoneScreenshots/1.png
index 1bed2e639..b3bb669f5 100644
Binary files a/fastlane/metadata/android/ro/images/phoneScreenshots/1.png and b/fastlane/metadata/android/ro/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/ro/images/phoneScreenshots/2.png b/fastlane/metadata/android/ro/images/phoneScreenshots/2.png
index c1b1f968c..71931d19b 100644
Binary files a/fastlane/metadata/android/ro/images/phoneScreenshots/2.png and b/fastlane/metadata/android/ro/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/ro/images/phoneScreenshots/3.png b/fastlane/metadata/android/ro/images/phoneScreenshots/3.png
index bcfa87993..79db3e221 100644
Binary files a/fastlane/metadata/android/ro/images/phoneScreenshots/3.png and b/fastlane/metadata/android/ro/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/ro/images/phoneScreenshots/4.png b/fastlane/metadata/android/ro/images/phoneScreenshots/4.png
index 7e56c6ef5..a9384fbe6 100644
Binary files a/fastlane/metadata/android/ro/images/phoneScreenshots/4.png and b/fastlane/metadata/android/ro/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/ro/images/phoneScreenshots/5.png b/fastlane/metadata/android/ro/images/phoneScreenshots/5.png
index fd45fc167..04927bb34 100644
Binary files a/fastlane/metadata/android/ro/images/phoneScreenshots/5.png and b/fastlane/metadata/android/ro/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/ro/images/phoneScreenshots/6.png b/fastlane/metadata/android/ro/images/phoneScreenshots/6.png
index d4f310193..444c8d903 100644
Binary files a/fastlane/metadata/android/ro/images/phoneScreenshots/6.png and b/fastlane/metadata/android/ro/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/ro/images/phoneScreenshots/7.png b/fastlane/metadata/android/ro/images/phoneScreenshots/7.png
index 2f30e2968..ba3d16585 100644
Binary files a/fastlane/metadata/android/ro/images/phoneScreenshots/7.png and b/fastlane/metadata/android/ro/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/ru/images/phoneScreenshots/1.png b/fastlane/metadata/android/ru/images/phoneScreenshots/1.png
index 59abfcced..f8c5321ef 100644
Binary files a/fastlane/metadata/android/ru/images/phoneScreenshots/1.png and b/fastlane/metadata/android/ru/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/ru/images/phoneScreenshots/2.png b/fastlane/metadata/android/ru/images/phoneScreenshots/2.png
index 9f0d34127..6bf85ed4f 100644
Binary files a/fastlane/metadata/android/ru/images/phoneScreenshots/2.png and b/fastlane/metadata/android/ru/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/ru/images/phoneScreenshots/3.png b/fastlane/metadata/android/ru/images/phoneScreenshots/3.png
index 962bb91c8..de4aa071c 100644
Binary files a/fastlane/metadata/android/ru/images/phoneScreenshots/3.png and b/fastlane/metadata/android/ru/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/ru/images/phoneScreenshots/4.png b/fastlane/metadata/android/ru/images/phoneScreenshots/4.png
index 3add72aab..e5750ff6d 100644
Binary files a/fastlane/metadata/android/ru/images/phoneScreenshots/4.png and b/fastlane/metadata/android/ru/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/ru/images/phoneScreenshots/5.png b/fastlane/metadata/android/ru/images/phoneScreenshots/5.png
index 4eb0476ff..d257fb384 100644
Binary files a/fastlane/metadata/android/ru/images/phoneScreenshots/5.png and b/fastlane/metadata/android/ru/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/ru/images/phoneScreenshots/6.png b/fastlane/metadata/android/ru/images/phoneScreenshots/6.png
index 9e44c218f..f698f89ce 100644
Binary files a/fastlane/metadata/android/ru/images/phoneScreenshots/6.png and b/fastlane/metadata/android/ru/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/ru/images/phoneScreenshots/7.png b/fastlane/metadata/android/ru/images/phoneScreenshots/7.png
index 4951e7996..fda462a26 100644
Binary files a/fastlane/metadata/android/ru/images/phoneScreenshots/7.png and b/fastlane/metadata/android/ru/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/sk/images/phoneScreenshots/1.png b/fastlane/metadata/android/sk/images/phoneScreenshots/1.png
index ef90afd5a..97eb00138 100644
Binary files a/fastlane/metadata/android/sk/images/phoneScreenshots/1.png and b/fastlane/metadata/android/sk/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/sk/images/phoneScreenshots/2.png b/fastlane/metadata/android/sk/images/phoneScreenshots/2.png
index 6ea4b89b9..3c4414785 100644
Binary files a/fastlane/metadata/android/sk/images/phoneScreenshots/2.png and b/fastlane/metadata/android/sk/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/sk/images/phoneScreenshots/3.png b/fastlane/metadata/android/sk/images/phoneScreenshots/3.png
index c4f5aa63d..f5b6511b1 100644
Binary files a/fastlane/metadata/android/sk/images/phoneScreenshots/3.png and b/fastlane/metadata/android/sk/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/sk/images/phoneScreenshots/4.png b/fastlane/metadata/android/sk/images/phoneScreenshots/4.png
index 6cc964f12..92e5a9df1 100644
Binary files a/fastlane/metadata/android/sk/images/phoneScreenshots/4.png and b/fastlane/metadata/android/sk/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/sk/images/phoneScreenshots/5.png b/fastlane/metadata/android/sk/images/phoneScreenshots/5.png
index 43a137851..b99ed6e33 100644
Binary files a/fastlane/metadata/android/sk/images/phoneScreenshots/5.png and b/fastlane/metadata/android/sk/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/sk/images/phoneScreenshots/6.png b/fastlane/metadata/android/sk/images/phoneScreenshots/6.png
index 615985626..ccf701513 100644
Binary files a/fastlane/metadata/android/sk/images/phoneScreenshots/6.png and b/fastlane/metadata/android/sk/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/sk/images/phoneScreenshots/7.png b/fastlane/metadata/android/sk/images/phoneScreenshots/7.png
index 7855e4838..5534724ad 100644
Binary files a/fastlane/metadata/android/sk/images/phoneScreenshots/7.png and b/fastlane/metadata/android/sk/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/tr/images/phoneScreenshots/1.png b/fastlane/metadata/android/tr/images/phoneScreenshots/1.png
index dd9987e27..a8d768ef9 100644
Binary files a/fastlane/metadata/android/tr/images/phoneScreenshots/1.png and b/fastlane/metadata/android/tr/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/tr/images/phoneScreenshots/2.png b/fastlane/metadata/android/tr/images/phoneScreenshots/2.png
index 9f7ff6e8e..8ec0ecbb3 100644
Binary files a/fastlane/metadata/android/tr/images/phoneScreenshots/2.png and b/fastlane/metadata/android/tr/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/tr/images/phoneScreenshots/3.png b/fastlane/metadata/android/tr/images/phoneScreenshots/3.png
index 20de8e056..a667c121c 100644
Binary files a/fastlane/metadata/android/tr/images/phoneScreenshots/3.png and b/fastlane/metadata/android/tr/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/tr/images/phoneScreenshots/4.png b/fastlane/metadata/android/tr/images/phoneScreenshots/4.png
index da8f76c79..699f1e29f 100644
Binary files a/fastlane/metadata/android/tr/images/phoneScreenshots/4.png and b/fastlane/metadata/android/tr/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/tr/images/phoneScreenshots/5.png b/fastlane/metadata/android/tr/images/phoneScreenshots/5.png
index 6601ee21a..78acdd853 100644
Binary files a/fastlane/metadata/android/tr/images/phoneScreenshots/5.png and b/fastlane/metadata/android/tr/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/tr/images/phoneScreenshots/6.png b/fastlane/metadata/android/tr/images/phoneScreenshots/6.png
index 541c304a2..427eebf23 100644
Binary files a/fastlane/metadata/android/tr/images/phoneScreenshots/6.png and b/fastlane/metadata/android/tr/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/tr/images/phoneScreenshots/7.png b/fastlane/metadata/android/tr/images/phoneScreenshots/7.png
index 001da561b..9f297340e 100644
Binary files a/fastlane/metadata/android/tr/images/phoneScreenshots/7.png and b/fastlane/metadata/android/tr/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/1.png b/fastlane/metadata/android/uk/images/phoneScreenshots/1.png
index 6bd33fe07..3f73a6652 100644
Binary files a/fastlane/metadata/android/uk/images/phoneScreenshots/1.png and b/fastlane/metadata/android/uk/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/2.png b/fastlane/metadata/android/uk/images/phoneScreenshots/2.png
index 87936023f..dae6783b0 100644
Binary files a/fastlane/metadata/android/uk/images/phoneScreenshots/2.png and b/fastlane/metadata/android/uk/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/3.png b/fastlane/metadata/android/uk/images/phoneScreenshots/3.png
index 4290e81a9..aa8945fa3 100644
Binary files a/fastlane/metadata/android/uk/images/phoneScreenshots/3.png and b/fastlane/metadata/android/uk/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/4.png b/fastlane/metadata/android/uk/images/phoneScreenshots/4.png
index 4a4cb3257..e28441b86 100644
Binary files a/fastlane/metadata/android/uk/images/phoneScreenshots/4.png and b/fastlane/metadata/android/uk/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/5.png b/fastlane/metadata/android/uk/images/phoneScreenshots/5.png
index 7568e56aa..4418e6501 100644
Binary files a/fastlane/metadata/android/uk/images/phoneScreenshots/5.png and b/fastlane/metadata/android/uk/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/6.png b/fastlane/metadata/android/uk/images/phoneScreenshots/6.png
index 66cad9b68..28cf95b24 100644
Binary files a/fastlane/metadata/android/uk/images/phoneScreenshots/6.png and b/fastlane/metadata/android/uk/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/7.png b/fastlane/metadata/android/uk/images/phoneScreenshots/7.png
index 5e5198ff0..7d03e2d4d 100644
Binary files a/fastlane/metadata/android/uk/images/phoneScreenshots/7.png and b/fastlane/metadata/android/uk/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/vi/images/phoneScreenshots/1.png b/fastlane/metadata/android/vi/images/phoneScreenshots/1.png
index f6deca26a..b263d13c1 100644
Binary files a/fastlane/metadata/android/vi/images/phoneScreenshots/1.png and b/fastlane/metadata/android/vi/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/vi/images/phoneScreenshots/2.png b/fastlane/metadata/android/vi/images/phoneScreenshots/2.png
index 12d35f664..078f09ca0 100644
Binary files a/fastlane/metadata/android/vi/images/phoneScreenshots/2.png and b/fastlane/metadata/android/vi/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/vi/images/phoneScreenshots/3.png b/fastlane/metadata/android/vi/images/phoneScreenshots/3.png
index 4b3faf29e..39fb4faae 100644
Binary files a/fastlane/metadata/android/vi/images/phoneScreenshots/3.png and b/fastlane/metadata/android/vi/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/vi/images/phoneScreenshots/4.png b/fastlane/metadata/android/vi/images/phoneScreenshots/4.png
index 2f4b7efc4..a905ec4ba 100644
Binary files a/fastlane/metadata/android/vi/images/phoneScreenshots/4.png and b/fastlane/metadata/android/vi/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/vi/images/phoneScreenshots/5.png b/fastlane/metadata/android/vi/images/phoneScreenshots/5.png
index 41571d022..5fc9215ec 100644
Binary files a/fastlane/metadata/android/vi/images/phoneScreenshots/5.png and b/fastlane/metadata/android/vi/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/vi/images/phoneScreenshots/6.png b/fastlane/metadata/android/vi/images/phoneScreenshots/6.png
index 06ad94ba0..940c8696b 100644
Binary files a/fastlane/metadata/android/vi/images/phoneScreenshots/6.png and b/fastlane/metadata/android/vi/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/vi/images/phoneScreenshots/7.png b/fastlane/metadata/android/vi/images/phoneScreenshots/7.png
index 7970586a0..8b377e490 100644
Binary files a/fastlane/metadata/android/vi/images/phoneScreenshots/7.png and b/fastlane/metadata/android/vi/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/1.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/1.png
index d9e7b1573..2903b3606 100644
Binary files a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/1.png and b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/2.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/2.png
index d8b0242d3..25a6fb2a1 100644
Binary files a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/2.png and b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/3.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/3.png
index 3f0627ce5..c703cf985 100644
Binary files a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/3.png and b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/4.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/4.png
index 124e5943c..a56e416f3 100644
Binary files a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/4.png and b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/5.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/5.png
index ef45bfcfb..3525b251d 100644
Binary files a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/5.png and b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/6.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/6.png
index 462d85e04..c755cf723 100644
Binary files a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/6.png and b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/7.png b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/7.png
index 44b97b4c7..1f7d88739 100644
Binary files a/fastlane/metadata/android/zh-CN/images/phoneScreenshots/7.png and b/fastlane/metadata/android/zh-CN/images/phoneScreenshots/7.png differ
diff --git a/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/1.png b/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/1.png
index 633ed0bed..ccc1c93de 100644
Binary files a/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/1.png and b/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/1.png differ
diff --git a/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/2.png b/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/2.png
index 90e4c3b5f..0cc2fad55 100644
Binary files a/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/2.png and b/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/2.png differ
diff --git a/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/3.png b/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/3.png
index 3550a8cfd..67eb4b503 100644
Binary files a/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/3.png and b/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/3.png differ
diff --git a/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/4.png b/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/4.png
index 312db7cda..5d48b69c5 100644
Binary files a/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/4.png and b/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/4.png differ
diff --git a/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/5.png b/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/5.png
index 58d37c151..14916233f 100644
Binary files a/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/5.png and b/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/5.png differ
diff --git a/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/6.png b/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/6.png
index ca7ab4559..80467b75e 100644
Binary files a/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/6.png and b/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/6.png differ
diff --git a/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/7.png b/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/7.png
index 47a958104..6911abd49 100644
Binary files a/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/7.png and b/fastlane/metadata/android/zh-Hant/images/phoneScreenshots/7.png differ
diff --git a/lib/geo/topojson.dart b/lib/geo/topojson.dart
index de9961cd4..c03f7d553 100644
--- a/lib/geo/topojson.dart
+++ b/lib/geo/topojson.dart
@@ -55,7 +55,7 @@ class Topology extends TopologyJsonObject {
final List>> arcs;
final Transform? transform;
- Topology.parse(Map data)
+ Topology.parse(super.data)
: objects = Map.fromEntries((data['objects'] as Map).cast().entries.map((kv) {
final name = kv.key;
final geometry = Geometry.build(kv.value);
@@ -63,7 +63,7 @@ class Topology extends TopologyJsonObject {
}).whereNotNull()),
arcs = (data['arcs'] as List).cast().map((arc) => arc.cast().map((position) => position.cast()).toList()).toList(),
transform = data.containsKey('transform') ? Transform.parse((data['transform'] as Map).cast()) : null,
- super.parse(data);
+ super.parse();
List> _arcAt(int index) {
var arc = arcs[index < 0 ? ~index : index];
@@ -131,10 +131,10 @@ abstract class Geometry extends TopologyJsonObject {
final dynamic id;
final Map? properties;
- Geometry.parse(Map data)
+ Geometry.parse(super.data)
: id = data.containsKey('id') ? data['id'] : null,
properties = data.containsKey('properties') ? data['properties'] as Map? : null,
- super.parse(data);
+ super.parse();
static Geometry? build(Map data) {
final type = _parseTopoJsonObjectType(data['type'] as String?);
@@ -165,41 +165,41 @@ abstract class Geometry extends TopologyJsonObject {
class Point extends Geometry {
final List coordinates;
- Point.parse(Map data)
+ Point.parse(super.data)
: coordinates = (data['coordinates'] as List).cast(),
- super.parse(data);
+ super.parse();
}
class MultiPoint extends Geometry {
final List> coordinates;
- MultiPoint.parse(Map data)
+ MultiPoint.parse(super.data)
: coordinates = (data['coordinates'] as List).cast().map((position) => position.cast()).toList(),
- super.parse(data);
+ super.parse();
}
class LineString extends Geometry {
final List arcs;
- LineString.parse(Map data)
+ LineString.parse(super.data)
: arcs = (data['arcs'] as List).cast(),
- super.parse(data);
+ super.parse();
}
class MultiLineString extends Geometry {
final List> arcs;
- MultiLineString.parse(Map data)
+ MultiLineString.parse(super.data)
: arcs = (data['arcs'] as List).cast().map((arc) => arc.cast()).toList(),
- super.parse(data);
+ super.parse();
}
class Polygon extends Geometry {
final List> arcs;
- Polygon.parse(Map data)
+ Polygon.parse(super.data)
: arcs = (data['arcs'] as List).cast().map((arc) => arc.cast()).toList(),
- super.parse(data);
+ super.parse();
List>>? _rings;
@@ -217,9 +217,9 @@ class Polygon extends Geometry {
class MultiPolygon extends Geometry {
final List>> arcs;
- MultiPolygon.parse(Map data)
+ MultiPolygon.parse(super.data)
: arcs = (data['arcs'] as List).cast().map((polygon) => polygon.cast().map((arc) => arc.cast()).toList()).toList(),
- super.parse(data);
+ super.parse();
List>>>? _polygons;
@@ -237,9 +237,9 @@ class MultiPolygon extends Geometry {
class GeometryCollection extends Geometry {
final List geometries;
- GeometryCollection.parse(Map data)
+ GeometryCollection.parse(super.data)
: geometries = (data['geometries'] as List).cast