Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
deckerst committed Sep 13, 2023
2 parents ffc6201 + d426499 commit 20f6d3f
Show file tree
Hide file tree
Showing 48 changed files with 2,767 additions and 734 deletions.
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file.

## <a id="unreleased"></a>[Unreleased]

## <a id="v1.9.4"></a>[v1.9.4] - 2023-09-13

### Changed

- upgraded Flutter to stable v3.13.4

### Fixed

- CVE-2023-4863 - Security vulnerability in WebP

## <a id="v1.9.3"></a>[v1.9.3] - 2023-08-28

### Changed
Expand Down
58 changes: 25 additions & 33 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@
<!-- to access media with original metadata with scoped storage (API >=29) -->
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
<!-- to provide a foreground service type, as required by Android 14 (API 34) -->
<!-- TODO TLAD revisit with Android 14 >beta5 -->
<!-- <uses-permission-->
<!-- android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"-->
<!-- tools:ignore="SystemPermissionTypo" />-->
<!-- TODO TLAD revisit with Android 14 >beta5 -->
<!-- <uses-permission-->
<!-- android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"-->
<!-- tools:ignore="SystemPermissionTypo" />-->
<!-- TODO TLAD still needed to fetch map tiles / reverse geocoding / else ? check in release mode -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- from Android 12 (API 31), users can optionally grant access to the media management special permission -->
Expand Down Expand Up @@ -129,32 +129,44 @@
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<intent-filter tools:ignore="AppLinkUrlError">
<action android:name="android.intent.action.GET_CONTENT" />
<action android:name="android.intent.action.PICK" />
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.VIEW" />
<action android:name="com.android.camera.action.REVIEW" />
<action android:name="com.android.camera.action.SPLIT_SCREEN_REVIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.OPENABLE" />

<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
<data android:mimeType="vnd.android.cursor.dir/image" />
<data android:mimeType="vnd.android.cursor.dir/video" />

<!-- no specified scheme -->
</intent-filter>
<intent-filter tools:ignore="AppLinkUrlError">
<action android:name="android.intent.action.GET_CONTENT" />
<action android:name="android.intent.action.PICK" />
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />

<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
<data android:mimeType="vnd.android.cursor.dir/image" />
<data android:mimeType="vnd.android.cursor.dir/video" />
</intent-filter>
<intent-filter>
<action android:name="com.android.camera.action.REVIEW" />
<action android:name="com.android.camera.action.SPLIT_SCREEN_REVIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.OPENABLE" />

<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
<data android:mimeType="vnd.android.cursor.dir/image" />
<data android:mimeType="vnd.android.cursor.dir/video" />

<data android:scheme="content" />
<data android:scheme="file" />
</intent-filter>
<!--
<intent-filter>
Expand All @@ -165,26 +177,6 @@
<data android:mimeType="vnd.android.cursor.dir/image" />
</intent-filter>
-->
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />

<category android:name="android.intent.category.OPENABLE" />
<category android:name="android.intent.category.DEFAULT" />

<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
<data android:mimeType="vnd.android.cursor.dir/image" />
<data android:mimeType="vnd.android.cursor.dir/video" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />

<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
<data android:mimeType="vnd.android.cursor.dir/image" />
<data android:mimeType="vnd.android.cursor.dir/video" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,9 @@ open class MainActivity : FlutterFragmentActivity() {

override fun onNewIntent(intent: Intent) {
Log.i(LOG_TAG, "onNewIntent intent=$intent")
intent.extras?.takeUnless { it.isEmpty }?.let {
Log.i(LOG_TAG, "onNewIntent intent extras=$it")
}
super.onNewIntent(intent)
intentStreamHandler.notifyNewIntent(extractIntentData(intent))
}
Expand Down Expand Up @@ -265,7 +268,10 @@ open class MainActivity : FlutterFragmentActivity() {
}
}

Intent.ACTION_VIEW, Intent.ACTION_SEND, "com.android.camera.action.REVIEW" -> {
Intent.ACTION_VIEW,
Intent.ACTION_SEND,
"com.android.camera.action.REVIEW",
"com.android.camera.action.SPLIT_SCREEN_REVIEW" -> {
(intent.data ?: intent.getParcelableExtraCompat<Uri>(Intent.EXTRA_STREAM))?.let { uri ->
// MIME type is optional
val type = intent.type ?: intent.resolveType(this)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,6 @@ internal class ContentImageProvider : ImageProvider() {
}

val mimeType = extractorMimeType ?: sourceMimeType
if (mimeType == null) {
callback.onFailure(Exception("MIME type is null for uri=$uri"))
return
}

val fields: FieldMap = hashMapOf(
"origin" to SourceEntry.ORIGIN_UNKNOWN_CONTENT,
"uri" to uri.toString(),
Expand All @@ -57,13 +52,20 @@ internal class ContentImageProvider : ImageProvider() {
cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME).let { if (it != -1) fields["title"] = cursor.getString(it) }
cursor.getColumnIndex(OpenableColumns.SIZE).let { if (it != -1) fields["sizeBytes"] = cursor.getLong(it) }
cursor.getColumnIndex(MediaStore.MediaColumns.DATA).let { if (it != -1) fields["path"] = cursor.getString(it) }
// mime type fallback if it was not provided and not found via `metadata-extractor`
cursor.getColumnIndex(MediaStore.MediaColumns.MIME_TYPE).let { if (it != -1 && mimeType == null) fields["sourceMimeType"] = cursor.getString(it) }
cursor.close()
}
} catch (e: Exception) {
callback.onFailure(e)
return
}

if (fields["sourceMimeType"] == null) {
callback.onFailure(Exception("Failed to find MIME type for uri=$uri"))
return
}

val entry = SourceEntry(fields).fillPreCatalogMetadata(context)
if (entry.isSized || entry.isSvg || entry.isVideo) {
callback.onSuccess(entry.toMap())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,18 @@ import java.io.File

internal class FileImageProvider : ImageProvider() {
override fun fetchSingle(context: Context, uri: Uri, sourceMimeType: String?, callback: ImageOpCallback) {
val mimeType = if (sourceMimeType != null) {
sourceMimeType
} else {
val fromExtension = MimeTypeMap.getFileExtensionFromUrl(uri.toString())
if (fromExtension != null) {
fromExtension
} else {
callback.onFailure(Exception("MIME type was not provided and cannot be guessed from extension of uri=$uri"))
return
var mimeType = sourceMimeType

if (mimeType == null) {
val extension = MimeTypeMap.getFileExtensionFromUrl(uri.toString())
if (extension != null) {
mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension)
}
}
if (mimeType == null) {
callback.onFailure(Exception("MIME type was not provided and cannot be guessed from extension of uri=$uri"))
return
}

val entry = SourceEntry(SourceEntry.ORIGIN_FILE, uri, mimeType)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -587,7 +587,7 @@ object StorageUtils {
when {
uriPath?.contains("/downloads/") == true -> {
// e.g. `content://media/external_primary/downloads/...`
getMediaUriImageVideoUri(uri, mimeType)?.let { imageVideUri -> return imageVideUri }
getMediaUriImageVideoUri(uri, mimeType)?.let { imageVideoUri -> return imageVideoUri }
}

uriPath?.contains("/file/") == true -> {
Expand Down Expand Up @@ -618,7 +618,7 @@ object StorageUtils {
when {
uriPath?.contains("/downloads/") == true -> {
// e.g. `content://media/external_primary/downloads/...`
getMediaUriImageVideoUri(uri, mimeType)?.let { imageVideUri -> return imageVideUri }
getMediaUriImageVideoUri(uri, mimeType)?.let { imageVideoUri -> return imageVideoUri }
}

uri.userInfo != null -> return stripMediaUriUserInfo(uri)
Expand Down
12 changes: 12 additions & 0 deletions android/app/src/main/res/values-bn/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="wallpaper">ওয়ালপেপার</string>
<string name="search_shortcut_short_label">সার্চ</string>
<string name="videos_shortcut_short_label">ভিডিও</string>
<string name="analysis_notification_default_title">মিডিয়া সন্ধান চলছে</string>
<string name="analysis_channel_name">মিডিয়া সন্ধান</string>
<string name="analysis_notification_action_stop">থামান</string>
<string name="app_name">আভেস</string>
<string name="app_widget_label">ছবির ফ্রেম</string>
<string name="safe_mode_shortcut_short_label">নিরাপদ মোড</string>
</resources>
12 changes: 12 additions & 0 deletions android/app/src/main/res/values-vi/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="analysis_notification_action_stop">Dừng</string>
<string name="app_widget_label">Khung Ảnh</string>
<string name="analysis_notification_default_title">Đang quét phương tiện</string>
<string name="videos_shortcut_short_label">Video</string>
<string name="safe_mode_shortcut_short_label">Chế độ an toàn</string>
<string name="wallpaper">Hình nền</string>
<string name="app_name">Aves</string>
<string name="analysis_channel_name">Quét phương tiện</string>
<string name="search_shortcut_short_label">Tìm kiếm</string>
</resources>
5 changes: 5 additions & 0 deletions fastlane/metadata/android/bn/full_description.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<i>আভেস</i> সব ধরণের ছবি এবং ভিডিও পরিচালনা করতে পারে, সাধারণ JPEG এবং MP4 সহ আরও বিরল জিনিস যেমন <b>মাল্টি-পেজ TIFF, SVG, পুরানো AVI এবং আরও অনেক কিছু</b>! এটি আপনার মিডিয়া সংগ্রহ স্ক্যান করে <b>মোশন ফটো</b>, <b>প্যানোরামা</b> (ফটো স্ফিয়ার), <b>360° ভিডিও</b>, এবং <b>GeoTIFF</b> খুঁজে বের করে।

<b>নেভিগেশন এবং সার্চ</b> <i>আভেস</i> এর একটি গুরুত্বপূর্ণ অংশ। লক্ষ্য হল ইউসার যাতে সহজেই অ্যালবাম, ফটো, ট্যাগ, ম্যাপ ইত্যাদিতে স্থানান্তর করতে পারে।

<b>উইজেট</b>, <b>অ্যাপ শর্টকাট</b>, <b>স্ক্রিন সেভারের</b> এবং <b>গ্লোবাল সার্চ</b> এর মতো বৈশিষ্ট্য সহ, <i>আভেস</i> অ্যান্ড্রয়েড এর সাথে সংহত হতে পারে (কিট ক্যাট থেকে অ্যান্ড্রয়েড ১৩, অ্যান্ড্রয়েড টিভি সহ)। এটি একটি <b>মিডিয়া উপস্থাপক এবং বাছাইকারী</b> হিসেবেও কাজ করে।
1 change: 1 addition & 0 deletions fastlane/metadata/android/bn/short_description.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
গ্যালারি এবং মেটাডেটা অনুসন্ধানকারী
5 changes: 5 additions & 0 deletions fastlane/metadata/android/en-US/changelogs/105.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
In v1.9.4:
- play your animated AVIF, AV1, and HDR videos
- filter by rating ranges
- judge tonal distributions with the viewer histogram
Full changelog available on GitHub
5 changes: 5 additions & 0 deletions fastlane/metadata/android/en-US/changelogs/10501.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
In v1.9.4:
- play your animated AVIF, AV1, and HDR videos
- filter by rating ranges
- judge tonal distributions with the viewer histogram
Full changelog available on GitHub
6 changes: 3 additions & 3 deletions fastlane/metadata/android/my/full_description.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<i>Aves</i> can handle all sorts of images and videos, including your typical JPEGs and MP4s, but also more exotic things like <b>multi-page TIFFs, SVGs, old AVIs and more</b>! It scans your media collection to identify <b>motion photos</b>, <b>panoramas</b> (aka photo spheres), <b>360° videos</b>, as well as <b>GeoTIFF</b> files.
<i>Aves</i> ဟာ သာမန် JPEG နှင့် MP4 ဖိုင်တွေအပါအဝင် ဓာတ်ပုံနဲ့ ဗီဒီယိုမျိုးစုံကို ကိုင်တွယ်နိုင်တဲ့အပြင် တွေ့ရခဲတဲ့အရာတွေဖြစ်တဲ့ <b>စာမျက်နှာများစွာပါဝင်တဲ့ TIFF ဖိုင်တွေ၊ အရင်က AVI ဗီဒီယိုဖိုင်တွေ၊ အစရှိတာတွေကိုလည်း ကိုင်တွယ်နိုင်ပါတယ်။</b> <b> လှုပ်ရှားမှုပါတဲ့ပုံတွေ</b> <b>မြင်ကွင်းကျယ်ဓာတ်ပုံတွေ</b><b>၃၆၀° ဗီဒီယိုတွေ</b>နဲ့ <b>GeoTIFF</b> ဖိုင်တွေကို ဖော်ထုတ်ဖို့အတွက် သင့်မီဒီယာစုစည်းမှုကို စကင်ဖတ်မှာပါ။

<b>Navigation and search</b> is an important part of <i>Aves</i>. The goal is for users to easily flow from albums to photos to tags to maps, etc.
<b>အလွယ်တကူ ရှာဖွေကြည့်ရှုနိုင်တာက</b> <i>Aves</i> ရဲ့ အဓိကကျတဲ့အစိတ်အပိုင်းတစ်ခုဖြစ်ပါတယ်။ အသုံးပြုသူတွေကို အယ်လ်ဘမ်တွေကနေ ပုံတွေ၊ ပုံတွေကနေ tag တွေ၊ tag တွေကနေ မြေပုံတွေ၊ အစရှိသဖြင့် အလွယ်လေးကူးပြောင်းနိုင်စေဖို့က <i>Aves</i> ရဲ့ ပန်းတိုင်ဖြစ်ပါတယ်။

<i>Aves</i> integrates with Android (from KitKat to Android 13, including Android TV) with features such as <b>widgets</b>, <b>app shortcuts</b>, <b>screen saver</b> and <b>global search</b> handling. It also works as a <b>media viewer and picker</b>.
<i>Aves</i> ဟာ Android (KitKat ကနေ Android 13 အထိ၊ Android တီဗီအပါအဝင်) ဖြင့်ပေါင်းစပ်ပြီး <b>ဝစ်ဂျက်တွေ</b> <b>အက်ပ်ဖြတ်လမ်းတိုတွေ</b> <b>screen saver တွေ</b>နဲ့ <b>နေရာအနှံ့ရှာဖွေမှုတွေကိုပါ</b> ကိုင်တွယ်နိုင်ပါတယ်။ ဒါ့အပြင် <b>မီဒီယာကြည့်ဖို့၊ မီဒီယာရွေးချယ်ဖို့</b>အတွက်လည်း သုံးလို့ရပါသေးတယ်။
2 changes: 1 addition & 1 deletion fastlane/metadata/android/my/short_description.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
ဂယ်လာရီနဲ့metadataအက်ပ်
ပုံကြည့်ခြင်းနှင့် မက်တာဒေတာကြည့်ရှုခြင်းအတွက်
5 changes: 5 additions & 0 deletions fastlane/metadata/android/vi/full_description.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<i>Aves</i> can handle all sorts of images and videos, including your typical JPEGs and MP4s, but also more exotic things like <b>multi-page TIFFs, SVGs, old AVIs and more</b>! It scans your media collection to identify <b>motion photos</b>, <b>panoramas</b> (aka photo spheres), <b>360° videos</b>, as well as <b>GeoTIFF</b> files.

<b>Navigation and search</b> is an important part of <i>Aves</i>. The goal is for users to easily flow from albums to photos to tags to maps, etc.

<i>Aves</i> integrates with Android (from KitKat to Android 13, including Android TV) with features such as <b>widgets</b>, <b>app shortcuts</b>, <b>screen saver</b> and <b>global search</b> handling. It also works as a <b>media viewer and picker</b>.
1 change: 1 addition & 0 deletions fastlane/metadata/android/vi/short_description.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Trình khám phá thư viện và siêu dữ liệu
10 changes: 9 additions & 1 deletion lib/l10n/app_be.arb
Original file line number Diff line number Diff line change
Expand Up @@ -670,5 +670,13 @@
"mapAttributionOsmHot": "Даныя карты © [OpenStreetMap](https://www.openstreetmap.org/copyright) удзельнікі • Пліткі ад [HOT](https://www.hotosm.org/) • Арганізаваны [OSM France](https://openstreetmap.fr/)",
"@mapAttributionOsmHot": {},
"viewerInfoLabelSize": "Памер",
"@viewerInfoLabelSize": {}
"@viewerInfoLabelSize": {},
"viewerTransitionSlide": "Слізгаценне",
"@viewerTransitionSlide": {},
"overlayHistogramRGB": "RGB",
"@overlayHistogramRGB": {},
"overlayHistogramNone": "Няма",
"@overlayHistogramNone": {},
"overlayHistogramLuminance": "Яркасць",
"@overlayHistogramLuminance": {}
}
Loading

0 comments on commit 20f6d3f

Please sign in to comment.