screenshot update
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 64 KiB |
BIN
fastlane/metadata/android/de/images/phoneScreenshots/7.png
Normal file
After Width: | Height: | Size: 346 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 62 KiB |
BIN
fastlane/metadata/android/en-US/images/phoneScreenshots/7.png
Normal file
After Width: | Height: | Size: 345 KiB |
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 63 KiB |
BIN
fastlane/metadata/android/es-MX/images/phoneScreenshots/7.png
Normal file
After Width: | Height: | Size: 345 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 64 KiB |
BIN
fastlane/metadata/android/fr/images/phoneScreenshots/7.png
Normal file
After Width: | Height: | Size: 345 KiB |
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 63 KiB |
BIN
fastlane/metadata/android/id/images/phoneScreenshots/7.png
Normal file
After Width: | Height: | Size: 345 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 64 KiB |
BIN
fastlane/metadata/android/it/images/phoneScreenshots/7.png
Normal file
After Width: | Height: | Size: 345 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 66 KiB |
BIN
fastlane/metadata/android/ja/images/phoneScreenshots/7.png
Normal file
After Width: | Height: | Size: 346 KiB |
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 63 KiB |
BIN
fastlane/metadata/android/ko/images/phoneScreenshots/7.png
Normal file
After Width: | Height: | Size: 346 KiB |
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 65 KiB |
BIN
fastlane/metadata/android/pt-BR/images/phoneScreenshots/7.png
Normal file
After Width: | Height: | Size: 346 KiB |
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 65 KiB |
BIN
fastlane/metadata/android/ru/images/phoneScreenshots/7.png
Normal file
After Width: | Height: | Size: 345 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 64 KiB |
BIN
fastlane/metadata/android/tr/images/phoneScreenshots/7.png
Normal file
After Width: | Height: | Size: 345 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 64 KiB |
BIN
fastlane/metadata/android/zh-CN/images/phoneScreenshots/7.png
Normal file
After Width: | Height: | Size: 345 KiB |
|
@ -59,7 +59,7 @@ class ExpandableFilterRow extends StatelessWidget {
|
||||||
|
|
||||||
final filterList = filters.toList();
|
final filterList = filters.toList();
|
||||||
final wrap = Container(
|
final wrap = Container(
|
||||||
key: ValueKey('wrap$title'),
|
key: Key('wrap$title'),
|
||||||
padding: const EdgeInsets.symmetric(horizontal: horizontalPadding),
|
padding: const EdgeInsets.symmetric(horizontal: horizontalPadding),
|
||||||
// specify transparent as a workaround to prevent
|
// specify transparent as a workaround to prevent
|
||||||
// chip border clipping when the floating app bar is fading
|
// chip border clipping when the floating app bar is fading
|
||||||
|
@ -71,7 +71,7 @@ class ExpandableFilterRow extends StatelessWidget {
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
final list = Container(
|
final list = Container(
|
||||||
key: ValueKey('list$title'),
|
key: Key('list$title'),
|
||||||
// specify transparent as a workaround to prevent
|
// specify transparent as a workaround to prevent
|
||||||
// chip border clipping when the floating app bar is fading
|
// chip border clipping when the floating app bar is fading
|
||||||
color: Colors.transparent,
|
color: Colors.transparent,
|
||||||
|
|
|
@ -7,12 +7,14 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
class MapOverlayButton extends StatelessWidget {
|
class MapOverlayButton extends StatelessWidget {
|
||||||
|
final Key? buttonKey;
|
||||||
final Widget icon;
|
final Widget icon;
|
||||||
final String tooltip;
|
final String tooltip;
|
||||||
final VoidCallback? onPressed;
|
final VoidCallback? onPressed;
|
||||||
|
|
||||||
const MapOverlayButton({
|
const MapOverlayButton({
|
||||||
super.key,
|
super.key,
|
||||||
|
this.buttonKey,
|
||||||
required this.icon,
|
required this.icon,
|
||||||
required this.tooltip,
|
required this.tooltip,
|
||||||
required this.onPressed,
|
required this.onPressed,
|
||||||
|
@ -40,6 +42,7 @@ class MapOverlayButton extends StatelessWidget {
|
||||||
child: Selector<MapThemeData, VisualDensity?>(
|
child: Selector<MapThemeData, VisualDensity?>(
|
||||||
selector: (context, v) => v.visualDensity,
|
selector: (context, v) => v.visualDensity,
|
||||||
builder: (context, visualDensity, child) => IconButton(
|
builder: (context, visualDensity, child) => IconButton(
|
||||||
|
key: buttonKey,
|
||||||
iconSize: 20,
|
iconSize: 20,
|
||||||
visualDensity: visualDensity,
|
visualDensity: visualDensity,
|
||||||
icon: icon,
|
icon: icon,
|
||||||
|
|
|
@ -123,6 +123,8 @@ class MapButtonPanel extends StatelessWidget {
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(top: padding),
|
padding: EdgeInsets.only(top: padding),
|
||||||
child: MapOverlayButton(
|
child: MapOverlayButton(
|
||||||
|
// key is expected by test driver
|
||||||
|
buttonKey: const Key('map-menu-layers'),
|
||||||
icon: const Icon(AIcons.layers),
|
icon: const Icon(AIcons.layers),
|
||||||
onPressed: () => showSelectionDialog<EntryMapStyle>(
|
onPressed: () => showSelectionDialog<EntryMapStyle>(
|
||||||
context: context,
|
context: context,
|
||||||
|
|
|
@ -376,7 +376,7 @@ class _EntryPageViewState extends State<EntryPageView> {
|
||||||
|
|
||||||
return Magnifier(
|
return Magnifier(
|
||||||
// key includes modified date to refresh when the image is modified by metadata (e.g. rotated)
|
// key includes modified date to refresh when the image is modified by metadata (e.g. rotated)
|
||||||
key: ValueKey('${entry.uri}_${entry.pageId}_${entry.dateModifiedSecs}'),
|
key: Key('${entry.uri}_${entry.pageId}_${entry.dateModifiedSecs}'),
|
||||||
controller: controller ?? _magnifierController,
|
controller: controller ?? _magnifierController,
|
||||||
childSize: displaySize ?? entry.displaySize,
|
childSize: displaySize ?? entry.displaySize,
|
||||||
allowOriginalScaleBeyondRange: !isWallpaperMode,
|
allowOriginalScaleBeyondRange: !isWallpaperMode,
|
||||||
|
|
|
@ -3,7 +3,6 @@ import 'package:aves/model/settings/defaults.dart';
|
||||||
import 'package:aves/model/settings/enums/enums.dart';
|
import 'package:aves/model/settings/enums/enums.dart';
|
||||||
import 'package:aves/model/settings/settings.dart';
|
import 'package:aves/model/settings/settings.dart';
|
||||||
import 'package:aves/model/source/enums.dart';
|
import 'package:aves/model/source/enums.dart';
|
||||||
import 'package:aves_map/src/style.dart';
|
|
||||||
import 'package:aves/widgets/filter_grids/countries_page.dart';
|
import 'package:aves/widgets/filter_grids/countries_page.dart';
|
||||||
import 'package:flutter_driver/driver_extension.dart';
|
import 'package:flutter_driver/driver_extension.dart';
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
@ -46,7 +45,6 @@ Future<void> configureAndLaunch() async {
|
||||||
..showOverlayThumbnailPreview = false
|
..showOverlayThumbnailPreview = false
|
||||||
..viewerUseCutout = true
|
..viewerUseCutout = true
|
||||||
// info
|
// info
|
||||||
..infoMapStyle = EntryMapStyle.stamenWatercolor
|
|
||||||
..infoMapZoom = 13
|
..infoMapZoom = 13
|
||||||
..coordinateFormat = CoordinateFormat.dms
|
..coordinateFormat = CoordinateFormat.dms
|
||||||
..unitSystem = UnitSystem.metric;
|
..unitSystem = UnitSystem.metric;
|
||||||
|
|
|
@ -56,6 +56,7 @@ void main() {
|
||||||
info();
|
info();
|
||||||
stats();
|
stats();
|
||||||
countries();
|
countries();
|
||||||
|
map();
|
||||||
});
|
});
|
||||||
}, timeout: const Timeout(Duration(seconds: 30)));
|
}, timeout: const Timeout(Duration(seconds: 30)));
|
||||||
}
|
}
|
||||||
|
@ -64,10 +65,15 @@ Future<void> _search(String query, String chipKey) async {
|
||||||
await driver.tapKeyAndWait('menu-searchCollection');
|
await driver.tapKeyAndWait('menu-searchCollection');
|
||||||
await driver.tap(find.byType('TextField'));
|
await driver.tap(find.byType('TextField'));
|
||||||
await driver.enterText(query);
|
await driver.enterText(query);
|
||||||
final chip = find.byValueKey(chipKey);
|
await driver.tapKeyAndWait(chipKey);
|
||||||
await driver.waitFor(chip);
|
}
|
||||||
await driver.tap(chip);
|
|
||||||
await driver.waitUntilNoTransientCallbacks();
|
Future<void> _selectMapStyle(String style) async {
|
||||||
|
await driver.tapKeyAndWait('map-menu-layers');
|
||||||
|
await driver.tapKeyAndWait('EntryMapStyle.$style');
|
||||||
|
|
||||||
|
// tiles may take time to load
|
||||||
|
await Future.delayed(const Duration(seconds: 5));
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _takeScreenshot(FlutterDriver driver, String name) async {
|
Future<void> _takeScreenshot(FlutterDriver driver, String name) async {
|
||||||
|
@ -152,8 +158,7 @@ void info() {
|
||||||
final verticalPageView = find.byValueKey('vertical-pageview');
|
final verticalPageView = find.byValueKey('vertical-pageview');
|
||||||
|
|
||||||
await driver.scrollY(verticalPageView, -600);
|
await driver.scrollY(verticalPageView, -600);
|
||||||
// tiles may take time to load
|
await _selectMapStyle('stamenWatercolor');
|
||||||
await Future.delayed(const Duration(seconds: 5));
|
|
||||||
|
|
||||||
await _takeScreenshot(driver, '3');
|
await _takeScreenshot(driver, '3');
|
||||||
|
|
||||||
|
@ -184,7 +189,7 @@ void stats() {
|
||||||
|
|
||||||
final maxYear = DateTime.now().year + 1;
|
final maxYear = DateTime.now().year + 1;
|
||||||
final maxQuery = 'year<$maxYear';
|
final maxQuery = 'year<$maxYear';
|
||||||
const minQuery = 'year>2012';
|
const minQuery = 'year>2005';
|
||||||
await _search(maxQuery, 'query-$maxQuery');
|
await _search(maxQuery, 'query-$maxQuery');
|
||||||
await _search(minQuery, 'query-$minQuery');
|
await _search(minQuery, 'query-$minQuery');
|
||||||
|
|
||||||
|
@ -206,3 +211,23 @@ void countries() {
|
||||||
await _takeScreenshot(driver, '6');
|
await _takeScreenshot(driver, '6');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void map() {
|
||||||
|
test('7. Map', () async {
|
||||||
|
await driver.tapKeyAndWait('appbar-leading-button');
|
||||||
|
await driver.tapKeyAndWait('drawer-type-null');
|
||||||
|
|
||||||
|
await _search('animals', 'tag-animals');
|
||||||
|
await _search('Singapore', 'location-LocationLevel.country-Singapore');
|
||||||
|
|
||||||
|
await driver.tapKeyAndWait('appbar-menu-button');
|
||||||
|
await driver.tapKeyAndWait('menu-map');
|
||||||
|
|
||||||
|
await _selectMapStyle('googleTerrain');
|
||||||
|
|
||||||
|
await _takeScreenshot(driver, '7');
|
||||||
|
|
||||||
|
await pressDeviceBackButton();
|
||||||
|
await driver.waitUntilNoTransientCallbacks();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
|
@ -165,10 +165,7 @@ void searchAlbum() {
|
||||||
await driver.tap(find.byType('TextField'));
|
await driver.tap(find.byType('TextField'));
|
||||||
await driver.enterText(albumDisplayName);
|
await driver.enterText(albumDisplayName);
|
||||||
|
|
||||||
final albumChip = find.byValueKey('album-$albumPath');
|
await driver.tapKeyAndWait('album-$albumPath');
|
||||||
await driver.waitFor(albumChip);
|
|
||||||
await driver.tap(albumChip);
|
|
||||||
await driver.waitUntilNoTransientCallbacks();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// ignore_for_file: avoid_print
|
||||||
import 'package:aves/widgets/debug/app_debug_action.dart';
|
import 'package:aves/widgets/debug/app_debug_action.dart';
|
||||||
import 'package:flutter_driver/flutter_driver.dart';
|
import 'package:flutter_driver/flutter_driver.dart';
|
||||||
|
|
||||||
|
@ -19,7 +20,10 @@ extension ExtraFlutterDriver on FlutterDriver {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> tapKeyAndWait(String key) async {
|
Future<void> tapKeyAndWait(String key) async {
|
||||||
await tap(find.byValueKey(key));
|
print(' find key=$key');
|
||||||
|
final finder = find.byValueKey(key);
|
||||||
|
await waitFor(finder);
|
||||||
|
await tap(finder);
|
||||||
await waitUntilNoTransientCallbacks();
|
await waitUntilNoTransientCallbacks();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|