Merge branch 'develop'

This commit is contained in:
Thibault Deckers 2024-05-03 00:43:58 +02:00
commit 07ac7b3fda
32 changed files with 956 additions and 84 deletions

View file

@ -4,15 +4,17 @@ All notable changes to this project will be documented in this file.
## <a id="unreleased"></a>[Unreleased] ## <a id="unreleased"></a>[Unreleased]
## <a id="v1.11.0"></a>[v1.11.0] - 2024-05-01 ## <a id="v1.11.1"></a>[v1.11.1] - 2024-05-03
### Added ### Added
- Cataloguing: identify Apple variant of HDR images - Cataloguing: identify Apple variant of HDR images
- Collection: `select all` available as quick action
- Collection: allow using hash (md5/sha1/sha256) when bulk renaming - Collection: allow using hash (md5/sha1/sha256) when bulk renaming
- Info: color palette - Info: color palette
- Video: external subtitle support (SRT) - Video: external subtitle support (SRT)
- option to force using western arabic numerals for dates - option to force using western arabic numerals for dates
- Persian translation (thanks امیر جهانگرد, slasb37, mimvahedi, Alireza Rashidi)
### Changed ### Changed
@ -25,6 +27,8 @@ All notable changes to this project will be documented in this file.
- stopping video playback when changing device orientation on Android >=13 - stopping video playback when changing device orientation on Android >=13
- printing content orientation according to page format - printing content orientation according to page format
## <a id="v1.11.0"></a>[v1.11.0] - 2024-05-01 [YANKED]
## <a id="v1.10.9"></a>[v1.10.9] - 2024-04-14 ## <a id="v1.10.9"></a>[v1.10.9] - 2024-04-14
### Fixed ### Fixed

View file

@ -60,15 +60,6 @@ android {
disable 'InvalidPackage' disable 'InvalidPackage'
} }
packagingOptions {
jniLibs {
// The Amazon Developer console mistakenly considers the app to not be 64-bit compatible
// if there are some libs in `lib/armeabi-v7a` unmatched by libs in `lib/arm64-v8a`,
// so we exclude the extra `neon` libs bundled by `FFmpegKit`.
excludes += ['lib/armeabi-v7a/*_neon.so']
}
}
sourceSets { sourceSets {
main.java.srcDirs += 'src/main/kotlin' main.java.srcDirs += 'src/main/kotlin'
} }

View file

@ -6,7 +6,7 @@
<path <path
android:fillColor="#ef435a" android:fillColor="#ef435a"
android:fillType="evenOdd" android:fillType="evenOdd"
android:pathData="m41.18,56.69 l8.74,8.74a1.54,1.54 0,0 1,0 2.18l-4.18,4.18a7.99,7.99 0,0 1,-11.3 0L30.26,67.61a1.54,1.54 0,0 1,0 -2.18l8.74,-8.74a1.54,1.54 0,0 1,2.18 0z" android:pathData="m40.44,57.44 l8.74,8.74a1.54,1.54 0,0 1,0 2.18l-4.18,4.18a7.99,7.99 0,0 1,-11.3 0l-4.18,-4.18a1.54,1.54 0,0 1,0 -2.18l8.74,-8.74a1.54,1.54 0,0 1,2.18 0z"
android:strokeWidth="1.61863" android:strokeWidth="1.61863"
android:strokeColor="#000000" android:strokeColor="#000000"
android:strokeLineCap="round" android:strokeLineCap="round"
@ -14,7 +14,7 @@
<path <path
android:fillColor="#e0e0e0" android:fillColor="#e0e0e0"
android:fillType="evenOdd" android:fillType="evenOdd"
android:pathData="M54.22,43.64L62.96,52.38A1.54,1.54 0,0 1,62.96 54.56L54.22,63.3A1.54,1.54 0,0 1,52.04 63.3L43.3,54.56A1.54,1.54 0,0 1,43.3 52.38L52.04,43.64A1.54,1.54 90,0 1,54.22 43.64z" android:pathData="m53.48,44.4 l8.74,8.74a1.54,1.54 0,0 1,-0 2.18l-8.74,8.74a1.54,1.54 0,0 1,-2.18 0l-8.74,-8.74a1.54,1.54 0,0 1,0 -2.18l8.74,-8.74a1.54,1.54 0,0 1,2.18 0z"
android:strokeWidth="1.61862" android:strokeWidth="1.61862"
android:strokeColor="#000000" android:strokeColor="#000000"
android:strokeLineCap="round" android:strokeLineCap="round"
@ -22,7 +22,7 @@
<path <path
android:fillColor="#ffc11f" android:fillColor="#ffc11f"
android:fillType="evenOdd" android:fillType="evenOdd"
android:pathData="m56.35,39.33a1.54,1.54 0,0 0,0 2.18l8.74,8.74a1.54,1.54 0,0 0,2.18 0l8.74,-8.74a1.54,1.54 0,0 0,0 -2.18l-4.34,-4.34a7.77,7.77 0,0 0,-10.98 0zM64.97,39.22a1.7,1.7 0,0 1,2.41 0,1.7 1.7,0 0,1 0,2.41 1.7,1.7 0,0 1,-2.41 0,1.7 1.7,0 0,1 0,-2.41z" android:pathData="m55.61,40.09a1.54,1.54 0,0 0,0 2.18l8.74,8.74a1.54,1.54 0,0 0,2.18 0l8.74,-8.74a1.54,1.54 0,0 0,0 -2.18l-4.34,-4.34a7.77,7.77 0,0 0,-10.98 0zM64.23,39.98a1.71,1.71 0,0 1,2.41 0,1.71 1.71,0 0,1 0,2.41 1.71,1.71 0,0 1,-2.41 0,1.71 1.71,0 0,1 0,-2.41z"
android:strokeWidth="1.61862" android:strokeWidth="1.61862"
android:strokeColor="#000000" android:strokeColor="#000000"
android:strokeLineCap="round" android:strokeLineCap="round"
@ -30,7 +30,7 @@
<path <path
android:fillColor="@color/ic_launcher_flavour" android:fillColor="@color/ic_launcher_flavour"
android:fillType="evenOdd" android:fillType="evenOdd"
android:pathData="m37.21,26.63 l12.76,12.76a1.54,1.54 0,0 1,0 2.18l-8.74,8.74a1.54,1.54 0,0 1,-2.18 0l-5.67,-5.67a12.06,12.06 0,0 1,0 -17.06l0.95,-0.95a2.04,2.04 0,0 1,2.88 0z" android:pathData="m36.47,27.39 l12.76,12.76a1.54,1.54 0,0 1,0 2.18l-8.74,8.74a1.54,1.54 0,0 1,-2.18 0l-5.67,-5.67a12.06,12.06 0,0 1,0 -17.06l0.95,-0.95a2.04,2.04 0,0 1,2.88 0z"
android:strokeWidth="1.61863" android:strokeWidth="1.61863"
android:strokeColor="#000000" android:strokeColor="#000000"
android:strokeLineCap="round" android:strokeLineCap="round"

View file

@ -6,7 +6,7 @@
<path <path
android:fillColor="#000000" android:fillColor="#000000"
android:fillType="evenOdd" android:fillType="evenOdd"
android:pathData="m41.18,56.69 l8.74,8.74a1.54,1.54 0,0 1,0 2.18l-4.18,4.18a7.99,7.99 0,0 1,-11.3 0L30.26,67.61a1.54,1.54 0,0 1,0 -2.18l8.74,-8.74a1.54,1.54 0,0 1,2.18 0z" android:pathData="m40.44,57.44 l8.74,8.74a1.54,1.54 0,0 1,0 2.18l-4.18,4.18a7.99,7.99 0,0 1,-11.3 0l-4.18,-4.18a1.54,1.54 0,0 1,0 -2.18l8.74,-8.74a1.54,1.54 0,0 1,2.18 0z"
android:strokeWidth="1.61863" android:strokeWidth="1.61863"
android:strokeColor="#00000000" android:strokeColor="#00000000"
android:strokeLineCap="round" android:strokeLineCap="round"
@ -14,7 +14,7 @@
<path <path
android:fillColor="#000000" android:fillColor="#000000"
android:fillType="evenOdd" android:fillType="evenOdd"
android:pathData="M54.22,43.64L62.96,52.38A1.54,1.54 0,0 1,62.96 54.56L54.22,63.3A1.54,1.54 0,0 1,52.04 63.3L43.3,54.56A1.54,1.54 0,0 1,43.3 52.38L52.04,43.64A1.54,1.54 90,0 1,54.22 43.64z" android:pathData="m53.48,44.4 l8.74,8.74a1.54,1.54 0,0 1,-0 2.18l-8.74,8.74a1.54,1.54 0,0 1,-2.18 0l-8.74,-8.74a1.54,1.54 0,0 1,0 -2.18l8.74,-8.74a1.54,1.54 0,0 1,2.18 0z"
android:strokeWidth="1.61862" android:strokeWidth="1.61862"
android:strokeColor="#00000000" android:strokeColor="#00000000"
android:strokeLineCap="round" android:strokeLineCap="round"
@ -22,7 +22,7 @@
<path <path
android:fillColor="#000000" android:fillColor="#000000"
android:fillType="evenOdd" android:fillType="evenOdd"
android:pathData="m56.35,39.33a1.54,1.54 0,0 0,0 2.18l8.74,8.74a1.54,1.54 0,0 0,2.18 0l8.74,-8.74a1.54,1.54 0,0 0,0 -2.18l-4.34,-4.34a7.77,7.77 0,0 0,-10.98 0zM64.97,39.22a1.7,1.7 0,0 1,2.41 0,1.7 1.7,0 0,1 0,2.41 1.7,1.7 0,0 1,-2.41 0,1.7 1.7,0 0,1 0,-2.41z" android:pathData="m55.61,40.09a1.54,1.54 0,0 0,0 2.18l8.74,8.74a1.54,1.54 0,0 0,2.18 0l8.74,-8.74a1.54,1.54 0,0 0,0 -2.18l-4.34,-4.34a7.77,7.77 0,0 0,-10.98 0zM64.23,39.98a1.71,1.71 0,0 1,2.41 0,1.71 1.71,0 0,1 0,2.41 1.71,1.71 0,0 1,-2.41 0,1.71 1.71,0 0,1 0,-2.41z"
android:strokeWidth="1.61862" android:strokeWidth="1.61862"
android:strokeColor="#00000000" android:strokeColor="#00000000"
android:strokeLineCap="round" android:strokeLineCap="round"
@ -30,7 +30,7 @@
<path <path
android:fillColor="#000000" android:fillColor="#000000"
android:fillType="evenOdd" android:fillType="evenOdd"
android:pathData="m37.21,26.63 l12.76,12.76a1.54,1.54 0,0 1,0 2.18l-8.74,8.74a1.54,1.54 0,0 1,-2.18 0l-5.67,-5.67a12.06,12.06 0,0 1,0 -17.06l0.95,-0.95a2.04,2.04 0,0 1,2.88 0z" android:pathData="m36.47,27.39 l12.76,12.76a1.54,1.54 0,0 1,0 2.18l-8.74,8.74a1.54,1.54 0,0 1,-2.18 0l-5.67,-5.67a12.06,12.06 0,0 1,0 -17.06l0.95,-0.95a2.04,2.04 0,0 1,2.88 0z"
android:strokeWidth="1.61863" android:strokeWidth="1.61863"
android:strokeColor="#00000000" android:strokeColor="#00000000"
android:strokeLineCap="round" android:strokeLineCap="round"

View file

@ -0,0 +1,4 @@
In v1.11.1:
- watch videos with SRT subtitle files
- enjoy the app in Persian
Full changelog available on GitHub

View file

@ -0,0 +1,4 @@
In v1.11.1:
- watch videos with SRT subtitle files
- enjoy the app in Persian
Full changelog available on GitHub

View file

@ -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>اِیوْز</i> می تواند انواع تصاویر و ویدیوها، از جمله JPEG ها و MP4 های عادی شما را مدیریت کند، اما همچنین چیزهای عجیب و غریب تری مانند <b> TIFF های چند صفحه ای، SVG ها، AVI های قدیمی و بیشتر</b>! این مجموعه رسانه های شما را بررسی می کند تا پرونده های <b>تصویر متحرک</b>، <b>پانوراما</b> (معروف به تصاویر کروی)، <b>360° ویدیو ها</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>اِیوْز</i> است. هدف این است که کاربران به راحتی از آلبوم ها به عکس ها به برچسب ها به نقشه ها و غیره دست پیدا کنند.
<i>Aves</i> integrates with Android (from KitKat to Android 14, 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>اِیوْز</i> با اندروید سازگار است (از نسخه KitKat تا اندروید 14, شامل تلوزیون اندرویدی) با قابلیت هایی مانند <b>ابزارک ها</b>, <b>میانبر ها</b>, <b>ذخیره نیرو</b> و <b>جستجو عمومی</b> و همچنین میتوان از آن به عنوان <b>نمایشگر و انتخابگز رسانه</b> استفاده کرد.

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 495 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 333 KiB

View file

@ -1532,5 +1532,9 @@
"videoActionABRepeat": "Паўтарыць ад А да Б", "videoActionABRepeat": "Паўтарыць ад А да Б",
"@videoActionABRepeat": {}, "@videoActionABRepeat": {},
"videoRepeatActionSetStart": "Ўсталяваць пачатак", "videoRepeatActionSetStart": "Ўсталяваць пачатак",
"@videoRepeatActionSetStart": {} "@videoRepeatActionSetStart": {},
"renameProcessorHash": "Хэш",
"@renameProcessorHash": {},
"settingsForceWesternArabicNumeralsTile": "Прымусовыя арабскія лічбы",
"@settingsForceWesternArabicNumeralsTile": {}
} }

File diff suppressed because it is too large Load diff

View file

@ -841,7 +841,7 @@
"@settingsVideoButtonsTile": {}, "@settingsVideoButtonsTile": {},
"settingsVideoGestureDoubleTapTogglePlay": "Oynatmak/duraklatmak için çift dokunun", "settingsVideoGestureDoubleTapTogglePlay": "Oynatmak/duraklatmak için çift dokunun",
"@settingsVideoGestureDoubleTapTogglePlay": {}, "@settingsVideoGestureDoubleTapTogglePlay": {},
"settingsVideoGestureSideDoubleTapSeek": "Geri/ileri aramak için ekran kenarlarına çift dokunun", "settingsVideoGestureSideDoubleTapSeek": "İleri/geri gitmek için ekran kenarlarına çift dokunun",
"@settingsVideoGestureSideDoubleTapSeek": {}, "@settingsVideoGestureSideDoubleTapSeek": {},
"settingsPrivacySectionTitle": "Gizlilik", "settingsPrivacySectionTitle": "Gizlilik",
"@settingsPrivacySectionTitle": {}, "@settingsPrivacySectionTitle": {},
@ -1376,5 +1376,7 @@
"videoRepeatActionSetEnd": "Bitiş noktası seç", "videoRepeatActionSetEnd": "Bitiş noktası seç",
"@videoRepeatActionSetEnd": {}, "@videoRepeatActionSetEnd": {},
"settingsForceWesternArabicNumeralsTile": "Arap rakamlarını zorla", "settingsForceWesternArabicNumeralsTile": "Arap rakamlarını zorla",
"@settingsForceWesternArabicNumeralsTile": {} "@settingsForceWesternArabicNumeralsTile": {},
"renameProcessorHash": "Sağlama",
"@renameProcessorHash": {}
} }

View file

@ -1374,5 +1374,9 @@
"videoActionABRepeat": "A-B 循环播放", "videoActionABRepeat": "A-B 循环播放",
"@videoActionABRepeat": {}, "@videoActionABRepeat": {},
"videoRepeatActionSetEnd": "设置终点", "videoRepeatActionSetEnd": "设置终点",
"@videoRepeatActionSetEnd": {} "@videoRepeatActionSetEnd": {},
"renameProcessorHash": "哈希",
"@renameProcessorHash": {},
"settingsForceWesternArabicNumeralsTile": "强制阿拉伯数数字",
"@settingsForceWesternArabicNumeralsTile": {}
} }

View file

@ -83,6 +83,10 @@ class Contributors {
Contributor('wanzh', 'wanzh66666@gmail.com'), Contributor('wanzh', 'wanzh66666@gmail.com'),
Contributor('ID J', 'tabby4442@gmail.com'), Contributor('ID J', 'tabby4442@gmail.com'),
Contributor('randint', 'lancameb@hotmail.com'), Contributor('randint', 'lancameb@hotmail.com'),
Contributor('امیر جهانگرد', 'ijahangard.a@gmail.com'),
Contributor('slasb37', 'p84haghi@gmail.com'),
Contributor('mimvahedi', 'vahedi0vahedi@gmail.com'),
Contributor('Alireza Rashidi', 'alirezarashidigoorabi@gmail.com'),
// Contributor('Alvi Khan', 'aveenalvi@gmail.com'), // Bengali // Contributor('Alvi Khan', 'aveenalvi@gmail.com'), // Bengali
// Contributor('Htet Oo Hlaing', 'htetoh2006@outlook.com'), // Burmese // Contributor('Htet Oo Hlaing', 'htetoh2006@outlook.com'), // Burmese
// Contributor('Khant', 'khant@users.noreply.hosted.weblate.org'), // Burmese // Contributor('Khant', 'khant@users.noreply.hosted.weblate.org'), // Burmese
@ -96,10 +100,6 @@ class Contributors {
// Contributor('Rasti K5', 'rasti.khdhr@gmail.com'), // Kurdish (Central) // Contributor('Rasti K5', 'rasti.khdhr@gmail.com'), // Kurdish (Central)
// Contributor('Raman', 'xysed@tutanota.com'), // Malayalam // Contributor('Raman', 'xysed@tutanota.com'), // Malayalam
// Contributor('Subham Jena', 'subhamjena8465@gmail.com'), // Odia // Contributor('Subham Jena', 'subhamjena8465@gmail.com'), // Odia
// Contributor('امیر جهانگرد', 'ijahangard.a@gmail.com'), // Persian
// Contributor('slasb37', 'p84haghi@gmail.com'), // Persian
// Contributor('mimvahedi', 'vahedi0vahedi@gmail.com'), // Persian
// Contributor('Alireza Rashidi', 'alirezarashidigoorabi@gmail.com'), // Persian
// Contributor('Prasanta-Hembram', 'Prasantahembram720@gmail.com'), // Santali // Contributor('Prasanta-Hembram', 'Prasantahembram720@gmail.com'), // Santali
// Contributor('mytja', 'mamnju21@gmail.com'), // Slovenian // Contributor('mytja', 'mamnju21@gmail.com'), // Slovenian
// Contributor('Shift18', 'bribable.lawyer@posteo.net'), // Swedish // Contributor('Shift18', 'bribable.lawyer@posteo.net'), // Swedish

View file

@ -28,12 +28,15 @@ class Selection<T> extends ChangeNotifier {
void addToSelection(Iterable<T> items) { void addToSelection(Iterable<T> items) {
if (items.isEmpty) return; if (items.isEmpty) return;
select();
_selectedItems.addAll(items); _selectedItems.addAll(items);
notifyListeners(); notifyListeners();
} }
void removeFromSelection(Iterable<T> items) { void removeFromSelection(Iterable<T> items) {
if (items.isEmpty) return; if (items.isEmpty) return;
_selectedItems.removeAll(items); _selectedItems.removeAll(items);
notifyListeners(); notifyListeners();
} }

View file

@ -6,6 +6,7 @@ import 'package:aves/widgets/about/title.dart';
import 'package:aves/widgets/common/basic/text/change_highlight.dart'; import 'package:aves/widgets/common/basic/text/change_highlight.dart';
import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class AboutTranslators extends StatelessWidget { class AboutTranslators extends StatelessWidget {
@ -108,7 +109,7 @@ class _RandomTextSpanHighlighterState extends State<_RandomTextSpanHighlighter>
children: [ children: [
...widget.spans.expandIndexed((i, v) => [ ...widget.spans.expandIndexed((i, v) => [
if (i != 0) const TextSpan(text: AText.separator), if (i != 0) const TextSpan(text: AText.separator),
TextSpan(text: v, style: i == _highlightedIndex ? _animatedStyle.value : _baseStyle), TextSpan(text: '${Unicode.FSI}$v${Unicode.PDI}', style: i == _highlightedIndex ? _animatedStyle.value : _baseStyle),
]) ])
], ],
), ),

View file

@ -61,7 +61,6 @@ class AvesApp extends StatefulWidget {
'bn', // Bengali 'bn', // Bengali
'ckb', // Kurdish (Central) 'ckb', // Kurdish (Central)
'da', // Danish 'da', // Danish
'fa', // Persian
'fi', // Finnish 'fi', // Finnish
'gl', // Galician 'gl', // Galician
'he', // Hebrew 'he', // Hebrew

View file

@ -379,7 +379,8 @@ class _CollectionAppBarState extends State<CollectionAppBar> with SingleTickerPr
final browsingQuickActions = settings.collectionBrowsingQuickActions; final browsingQuickActions = settings.collectionBrowsingQuickActions;
final selectionQuickActions = isTrash ? [EntrySetAction.delete, EntrySetAction.restore] : settings.collectionSelectionQuickActions; final selectionQuickActions = isTrash ? [EntrySetAction.delete, EntrySetAction.restore] : settings.collectionSelectionQuickActions;
final quickActionButtons = (isSelecting ? selectionQuickActions : browsingQuickActions).where(isVisible).map( final quickActions = isSelecting ? selectionQuickActions : browsingQuickActions;
final quickActionButtons = quickActions.where(isVisible).map(
(action) => _buildButtonIcon(context, action, enabled: canApply(action), selection: selection), (action) => _buildButtonIcon(context, action, enabled: canApply(action), selection: selection),
); );
@ -390,13 +391,13 @@ class _CollectionAppBarState extends State<CollectionAppBar> with SingleTickerPr
// key is expected by test driver // key is expected by test driver
key: const Key('appbar-menu-button'), key: const Key('appbar-menu-button'),
itemBuilder: (context) { itemBuilder: (context) {
final generalMenuItems = EntrySetActions.general.where(isVisible).map( bool _isValidForMenu(EntrySetAction? v) => v == null || (!quickActions.contains(v) && isVisible(v));
final generalMenuItems = EntrySetActions.general.where(_isValidForMenu).map(
(action) => _toMenuItem(action, enabled: canApply(action), selection: selection), (action) => _toMenuItem(action, enabled: canApply(action), selection: selection),
); );
final browsingMenuActions = EntrySetActions.pageBrowsing.where((v) => !browsingQuickActions.contains(v)); final allContextualActions = isSelecting ? EntrySetActions.pageSelection: EntrySetActions.pageBrowsing;
final selectionMenuActions = EntrySetActions.pageSelection.where((v) => !selectionQuickActions.contains(v)); final contextualMenuActions = allContextualActions.where(_isValidForMenu).fold(<EntrySetAction?>[], (prev, v) {
final contextualMenuActions = (isSelecting ? selectionMenuActions : browsingMenuActions).where((v) => v == null || isVisible(v)).fold(<EntrySetAction?>[], (prev, v) {
if (v == null && (prev.isEmpty || prev.last == null)) return prev; if (v == null && (prev.isEmpty || prev.last == null)) return prev;
return [...prev, v]; return [...prev, v];
}); });

View file

@ -66,7 +66,7 @@ class EntrySetActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAware
case EntrySetAction.select: case EntrySetAction.select:
return appMode.canSelectMedia && !isSelecting; return appMode.canSelectMedia && !isSelecting;
case EntrySetAction.selectAll: case EntrySetAction.selectAll:
return isSelecting && selectedItemCount < itemCount; return (isSelecting && selectedItemCount < itemCount) || (!isSelecting && settings.collectionBrowsingQuickActions.contains(action));
case EntrySetAction.selectNone: case EntrySetAction.selectNone:
return isSelecting && selectedItemCount == itemCount; return isSelecting && selectedItemCount == itemCount;
// browsing // browsing
@ -127,7 +127,7 @@ class EntrySetActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAware
case EntrySetAction.select: case EntrySetAction.select:
return hasItems; return hasItems;
case EntrySetAction.selectAll: case EntrySetAction.selectAll:
return selectedItemCount < itemCount; return selectedItemCount < itemCount || (!isSelecting && settings.collectionBrowsingQuickActions.contains(action));
case EntrySetAction.selectNone: case EntrySetAction.selectNone:
return hasSelection; return hasSelection;
case EntrySetAction.searchCollection: case EntrySetAction.searchCollection:

View file

@ -12,6 +12,7 @@ class SupportedLocales {
'en': 'English', 'en': 'English',
'es': 'Español (México)', 'es': 'Español (México)',
'eu': 'Euskara', 'eu': 'Euskara',
'fa': 'فارسی',
'fr': 'Français', 'fr': 'Français',
'hu': 'Magyar', 'hu': 'Magyar',
'id': 'Bahasa Indonesia', 'id': 'Bahasa Indonesia',

View file

@ -102,7 +102,6 @@ class _HiddenFilters extends StatelessWidget {
children: [ children: [
Expanded( Expanded(
child: LayoutBuilder(builder: (context, constraints) { child: LayoutBuilder(builder: (context, constraints) {
debugPrint('TLAD constraints=$constraints');
return Row( return Row(
children: [ children: [
AvesFilterChip( AvesFilterChip(

View file

@ -19,7 +19,9 @@ class CollectionActionEditorPage extends StatelessWidget {
Tab(text: l10n.settingsCollectionQuickActionTabBrowsing), Tab(text: l10n.settingsCollectionQuickActionTabBrowsing),
QuickActionEditorBody<EntrySetAction>( QuickActionEditorBody<EntrySetAction>(
bannerText: context.l10n.settingsCollectionBrowsingQuickActionEditorBanner, bannerText: context.l10n.settingsCollectionBrowsingQuickActionEditorBanner,
allAvailableActions: const [EntrySetActions.collectionEditorBrowsing], allAvailableActions: const [
EntrySetActions.collectionEditorBrowsing,
],
actionIcon: (action) => action.getIcon(), actionIcon: (action) => action.getIcon(),
actionText: (context, action) => action.getText(context), actionText: (context, action) => action.getText(context),
load: () => settings.collectionBrowsingQuickActions, load: () => settings.collectionBrowsingQuickActions,

View file

@ -65,6 +65,8 @@ class EntrySetActions {
EntrySetAction.map, EntrySetAction.map,
EntrySetAction.slideshow, EntrySetAction.slideshow,
EntrySetAction.stats, EntrySetAction.stats,
// only available as a quick action
EntrySetAction.selectAll,
]; ];
// `null` items are converted to dividers // `null` items are converted to dividers
@ -98,6 +100,7 @@ class EntrySetActions {
EntrySetAction.map, EntrySetAction.map,
EntrySetAction.slideshow, EntrySetAction.slideshow,
EntrySetAction.stats, EntrySetAction.stats,
EntrySetAction.selectAll,
// editing actions are in their subsection // editing actions are in their subsection
]; ];

View file

@ -7,7 +7,7 @@ repository: https://github.com/deckerst/aves
# - play changelog: /whatsnew/whatsnew-en-US # - play changelog: /whatsnew/whatsnew-en-US
# - izzy changelog: /fastlane/metadata/android/en-US/changelogs/XXX01.txt # - izzy changelog: /fastlane/metadata/android/en-US/changelogs/XXX01.txt
# - libre changelog: /fastlane/metadata/android/en-US/changelogs/XXX.txt # - libre changelog: /fastlane/metadata/android/en-US/changelogs/XXX.txt
version: 1.11.0+119 version: 1.11.1+120
publish_to: none publish_to: none
environment: environment:

View file

@ -7,7 +7,6 @@ fi
# - scaled down versions for IzzyOnDroid # - scaled down versions for IzzyOnDroid
# - framed versions for Google Play # - framed versions for Google Play
# - framed and scaled down versions for README (English only) # - framed and scaled down versions for README (English only)
# - framed and scaled down versions for Amazon (English only)
# expects: # expects:
# - ImageMagick 6 # - ImageMagick 6
@ -82,13 +81,3 @@ for source in framed/en/*; do
convert -resize 250x "$source" "$target" convert -resize 250x "$source" "$target"
fi fi
done done
# amazon: scale down
for source in framed/en/*; do
if [[ -f "$source" ]]; then
target=${source/framed/amazon}
echo "$source -> $target"
mkdir -p "$(dirname "$target")"
convert -resize x1920 "$source" -gravity center -background transparent -extent 1200x1920 "$target"
fi
done

View file

@ -1,3 +1,4 @@
In v1.11.0: In v1.11.1:
- watch videos with SRT subtitle files - watch videos with SRT subtitle files
- enjoy the app in Persian
Full changelog available on GitHub Full changelog available on GitHub