driver: fixed language selection; l10n: added TR images for izzy

This commit is contained in:
Thibault Deckers 2022-06-06 12:38:35 +09:00
parent aae8486499
commit b6c64d678f
15 changed files with 73 additions and 26 deletions

View file

@ -4,6 +4,19 @@ All notable changes to this project will be documented in this file.
## <a id="unreleased"></a>[Unreleased]
### Added
- optional dynamic accent color on Android 12+
- Turkish translation (thanks metezd)
### Changed
- do not force quit on storage permission denial
### Fixed
- merge ambiguously cased directories
## <a id="v1.6.8"></a>[v1.6.8] - 2022-05-27
### Fixed

View file

@ -93,7 +93,7 @@ At this stage this project does *not* accept PRs, except for translations.
### Translations
If you want to translate this app in your language and share the result, [there is a guide](https://github.com/deckerst/aves/wiki/Contributing-to-Translations). English, Korean and French are already handled by me. Russian, German, Spanish, Portuguese, Indonesian, Japanese, Italian & Chinese are handled by generous volunteers.
If you want to translate this app in your language and share the result, [there is a guide](https://github.com/deckerst/aves/wiki/Contributing-to-Translations). English, Korean and French are already handled by me. Russian, German, Spanish, Portuguese, Indonesian, Japanese, Italian, Chinese & Turkish are handled by generous volunteers.
### Donations

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 494 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 KiB

View file

@ -7,6 +7,7 @@ import 'package:flutter/material.dart';
class QueryBar extends StatefulWidget {
final ValueNotifier<String> queryNotifier;
final FocusNode? focusNode;
final EdgeInsetsGeometry? leadingPadding;
final IconData? icon;
final String? hintText;
final bool editable;
@ -15,6 +16,7 @@ class QueryBar extends StatefulWidget {
super.key,
required this.queryNotifier,
this.focusNode,
this.leadingPadding,
this.icon,
this.hintText,
this.editable = true,
@ -60,7 +62,7 @@ class _QueryBarState extends State<QueryBar> {
focusNode: widget.focusNode ?? FocusNode(),
decoration: InputDecoration(
icon: Padding(
padding: const EdgeInsetsDirectional.only(start: 16),
padding: widget.leadingPadding ?? const EdgeInsetsDirectional.only(start: 16),
child: Icon(widget.icon ?? AIcons.filter),
),
hintText: widget.hintText ?? MaterialLocalizations.of(context).searchFieldLabel,

View file

@ -63,15 +63,16 @@ class _AppPickDialogState extends State<AppPickDialog> {
ValueListenableBuilder<String>(
valueListenable: _queryNotifier,
builder: (context, query, child) {
final upQuery = query.toUpperCase().trim();
final visiblePackages = packages.where((package) {
return {
package.packageName,
package.currentLabel,
package.englishLabel,
...package.potentialDirs,
}.any((v) => v != null && v.toLowerCase().contains(query.toLowerCase()));
}.any((v) => v != null && v.toUpperCase().contains(upQuery));
}).toList();
final showNoneOption = query.isEmpty;
final showNoneOption = upQuery.isEmpty;
final itemCount = visiblePackages.length + (showNoneOption ? 1 : 0);
return Expanded(
child: ListView.builder(

View file

@ -3,6 +3,7 @@ import 'dart:collection';
import 'package:aves/l10n/l10n.dart';
import 'package:aves/model/settings/settings.dart';
import 'package:aves/theme/durations.dart';
import 'package:aves/widgets/common/basic/query_bar.dart';
import 'package:aves/widgets/common/basic/reselectable_radio_list_tile.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/providers/media_query_data_provider.dart';
@ -64,6 +65,7 @@ class LocaleSelectionPage extends StatefulWidget {
class _LocaleSelectionPageState extends State<LocaleSelectionPage> {
late Locale _selectedValue;
final ValueNotifier<String> _queryNotifier = ValueNotifier('');
@override
void initState() {
@ -79,25 +81,41 @@ class _LocaleSelectionPageState extends State<LocaleSelectionPage> {
title: Text(context.l10n.settingsLanguage),
),
body: SafeArea(
child: ListView(
children: _getLocaleOptions(context).entries.map((kv) {
final value = kv.key;
final title = kv.value;
return ReselectableRadioListTile<Locale>(
// key is expected by test driver
key: Key(value.toString()),
value: value,
groupValue: _selectedValue,
onChanged: (v) => Navigator.pop(context, v),
reselectable: true,
title: Text(
title,
softWrap: false,
overflow: TextOverflow.fade,
maxLines: 1,
),
child: ValueListenableBuilder<String>(
valueListenable: _queryNotifier,
builder: (context, query, child) {
final upQuery = query.toUpperCase().trim();
return ListView(
children: [
QueryBar(
queryNotifier: _queryNotifier,
leadingPadding: const EdgeInsetsDirectional.only(start: 24, end: 8),
),
..._getLocaleOptions(context).entries.where((kv) {
if (upQuery.isEmpty) return true;
final title = kv.value;
return title.toUpperCase().contains(upQuery);
}).map((kv) {
final value = kv.key;
final title = kv.value;
return ReselectableRadioListTile<Locale>(
// key is expected by test driver
key: Key(value.toString()),
value: value,
groupValue: _selectedValue,
onChanged: (v) => Navigator.pop(context, v),
reselectable: true,
title: Text(
title,
softWrap: false,
overflow: TextOverflow.fade,
maxLines: 1,
),
);
}),
],
);
}).toList(),
},
),
),
),

View file

@ -18,10 +18,13 @@ Future<void> configureAndLaunch() async {
..hasAcceptedTerms = true
..isInstalledAppAccessAllowed = true
..isErrorReportingAllowed = false
..themeBrightness = AvesThemeBrightness.dark
..themeColorMode = AvesThemeColorMode.polychrome
..setTileExtent(CountryListPage.routeName, 112)
..setTileLayout(CountryListPage.routeName, TileLayout.grid)
// display
..themeBrightness = AvesThemeBrightness.dark
..themeColorMode = AvesThemeColorMode.polychrome
..enableDynamicColor = false
..enableBlurEffect = true
// navigation
..keepScreenOn = KeepScreenOn.always
..homePage = HomePageSetting.collection
@ -41,7 +44,6 @@ Future<void> configureAndLaunch() async {
..showOverlayInfo = true
..showOverlayShootingDetails = false
..showOverlayThumbnailPreview = false
..enableBlurEffect = true
..viewerUseCutout = true
// info
..infoMapStyle = EntryMapStyle.stamenWatercolor

View file

@ -83,6 +83,11 @@ void setLanguage(String languageCode) {
await driver.tapKeyAndWait('drawer-settings-button');
await driver.tapKeyAndWait('section-language');
await driver.tapKeyAndWait('tile-language');
final name = SupportedLocales.languagesByLanguageCode[languageCode] ?? languageCode;
await driver.tap(find.byType('TextField'));
await driver.enterText(name);
await driver.tapKeyAndWait(languageCode);
_languageCode = languageCode;

View file

@ -19,8 +19,15 @@ Future<void> configureAndLaunch() async {
..isInstalledAppAccessAllowed = true
..isErrorReportingAllowed = false
..locale = const Locale('en')
// display
..themeBrightness = AvesThemeBrightness.dark
..themeColorMode = AvesThemeColorMode.polychrome
..enableDynamicColor = false
..enableBlurEffect = true
// navigation
..keepScreenOn = KeepScreenOn.always
..homePage = HomePageSetting.collection
..showBottomNavigationBar = true
// collection
..collectionBrowsingQuickActions = SettingsDefaults.collectionBrowsingQuickActions
// viewer
@ -29,7 +36,6 @@ Future<void> configureAndLaunch() async {
..showOverlayInfo = true
..showOverlayShootingDetails = true
..showOverlayThumbnailPreview = true
..enableBlurEffect = true
..imageBackground = EntryBackground.checkered
// info
..infoMapStyle = EntryMapStyle.googleNormal;