Merge branch 'develop'
|
@ -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
|
||||||
|
|
|
@ -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'
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
4
fastlane/metadata/android/en-US/changelogs/120.txt
Normal 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
|
4
fastlane/metadata/android/en-US/changelogs/12001.txt
Normal 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
|
|
@ -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> استفاده کرد.
|
||||||
|
|
BIN
fastlane/metadata/android/fa/images/featureGraphic.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
fastlane/metadata/android/fa/images/phoneScreenshots/1.png
Normal file
After Width: | Height: | Size: 278 KiB |
BIN
fastlane/metadata/android/fa/images/phoneScreenshots/2.png
Normal file
After Width: | Height: | Size: 495 KiB |
BIN
fastlane/metadata/android/fa/images/phoneScreenshots/3.png
Normal file
After Width: | Height: | Size: 189 KiB |
BIN
fastlane/metadata/android/fa/images/phoneScreenshots/4.png
Normal file
After Width: | Height: | Size: 120 KiB |
BIN
fastlane/metadata/android/fa/images/phoneScreenshots/5.png
Normal file
After Width: | Height: | Size: 72 KiB |
BIN
fastlane/metadata/android/fa/images/phoneScreenshots/6.png
Normal file
After Width: | Height: | Size: 322 KiB |
BIN
fastlane/metadata/android/fa/images/phoneScreenshots/7.png
Normal file
After Width: | Height: | Size: 333 KiB |
|
@ -1532,5 +1532,9 @@
|
||||||
"videoActionABRepeat": "Паўтарыць ад А да Б",
|
"videoActionABRepeat": "Паўтарыць ад А да Б",
|
||||||
"@videoActionABRepeat": {},
|
"@videoActionABRepeat": {},
|
||||||
"videoRepeatActionSetStart": "Ўсталяваць пачатак",
|
"videoRepeatActionSetStart": "Ўсталяваць пачатак",
|
||||||
"@videoRepeatActionSetStart": {}
|
"@videoRepeatActionSetStart": {},
|
||||||
|
"renameProcessorHash": "Хэш",
|
||||||
|
"@renameProcessorHash": {},
|
||||||
|
"settingsForceWesternArabicNumeralsTile": "Прымусовыя арабскія лічбы",
|
||||||
|
"@settingsForceWesternArabicNumeralsTile": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1374,5 +1374,9 @@
|
||||||
"videoActionABRepeat": "A-B 循环播放",
|
"videoActionABRepeat": "A-B 循环播放",
|
||||||
"@videoActionABRepeat": {},
|
"@videoActionABRepeat": {},
|
||||||
"videoRepeatActionSetEnd": "设置终点",
|
"videoRepeatActionSetEnd": "设置终点",
|
||||||
"@videoRepeatActionSetEnd": {}
|
"@videoRepeatActionSetEnd": {},
|
||||||
|
"renameProcessorHash": "哈希",
|
||||||
|
"@renameProcessorHash": {},
|
||||||
|
"settingsForceWesternArabicNumeralsTile": "强制阿拉伯数数字",
|
||||||
|
"@settingsForceWesternArabicNumeralsTile": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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),
|
||||||
])
|
])
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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];
|
||||||
});
|
});
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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',
|
||||||
|
|
|
@ -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(
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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
|