diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/MainActivity.kt b/android/app/src/main/kotlin/deckers/thibault/aves/MainActivity.kt index 824bce92c..2f726d6b6 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/MainActivity.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/MainActivity.kt @@ -36,6 +36,7 @@ class MainActivity : FlutterActivity() { MethodChannel(messenger, AppAdapterHandler.CHANNEL).setMethodCallHandler(AppAdapterHandler(this)) MethodChannel(messenger, AppShortcutHandler.CHANNEL).setMethodCallHandler(AppShortcutHandler(this)) MethodChannel(messenger, DebugHandler.CHANNEL).setMethodCallHandler(DebugHandler(this)) + MethodChannel(messenger, DeviceHandler.CHANNEL).setMethodCallHandler(DeviceHandler()) MethodChannel(messenger, EmbeddedDataHandler.CHANNEL).setMethodCallHandler(EmbeddedDataHandler(this)) MethodChannel(messenger, ImageFileHandler.CHANNEL).setMethodCallHandler(ImageFileHandler(this)) MethodChannel(messenger, GeocodingHandler.CHANNEL).setMethodCallHandler(GeocodingHandler(this)) diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/DeviceHandler.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/DeviceHandler.kt new file mode 100644 index 000000000..287a0b87b --- /dev/null +++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/DeviceHandler.kt @@ -0,0 +1,27 @@ +package deckers.thibault.aves.channel.calls + +import android.os.Build +import io.flutter.plugin.common.MethodCall +import io.flutter.plugin.common.MethodChannel +import io.flutter.plugin.common.MethodChannel.MethodCallHandler + +class DeviceHandler : MethodCallHandler { + override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) { + when (call.method) { + "getPerformanceClass" -> result.success(getPerformanceClass()) + else -> result.notImplemented() + } + } + + private fun getPerformanceClass(): Int { + // TODO TLAD uncomment when the future is here +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { +// return Build.VERSION.MEDIA_PERFORMANCE_CLASS +// } + return Build.VERSION.SDK_INT + } + + companion object { + const val CHANNEL = "deckers.thibault/aves/device" + } +} \ No newline at end of file diff --git a/lib/model/settings/settings.dart b/lib/model/settings/settings.dart index a1deb39d4..40504a6e0 100644 --- a/lib/model/settings/settings.dart +++ b/lib/model/settings/settings.dart @@ -1,11 +1,14 @@ import 'dart:convert'; +import 'dart:math'; import 'package:aves/model/actions/entry_actions.dart'; import 'package:aves/model/actions/video_actions.dart'; import 'package:aves/model/filters/filters.dart'; import 'package:aves/model/settings/enums.dart'; +import 'package:aves/model/settings/map_style.dart'; import 'package:aves/model/settings/screen_on.dart'; import 'package:aves/model/source/enums.dart'; +import 'package:aves/services/device_service.dart'; import 'package:aves/services/services.dart'; import 'package:aves/utils/pedantic.dart'; import 'package:collection/collection.dart'; @@ -128,6 +131,21 @@ class Settings extends ChangeNotifier { } } + Future setContextualDefaults() async { + // performance + final performanceClass = await DeviceService.getPerformanceClass(); + enableOverlayBlurEffect = performanceClass >= 30; + + // availability + final hasPlayServices = await availability.hasPlayServices; + if (hasPlayServices) { + infoMapStyle = EntryMapStyle.googleNormal; + } else { + final styles = EntryMapStyle.values.whereNot((v) => v.isGoogleMaps).toList(); + infoMapStyle = styles[Random().nextInt(styles.length)]; + } + } + // app bool get hasAcceptedTerms => getBoolOrDefault(hasAcceptedTermsKey, false); diff --git a/lib/services/device_service.dart b/lib/services/device_service.dart new file mode 100644 index 000000000..84a3fe8f1 --- /dev/null +++ b/lib/services/device_service.dart @@ -0,0 +1,18 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter/widgets.dart'; + +class DeviceService { + static const platform = MethodChannel('deckers.thibault/aves/device'); + + static Future getPerformanceClass() async { + try { + await platform.invokeMethod('getPerformanceClass'); + final result = await platform.invokeMethod('getPerformanceClass'); + if (result != null) return result as int; + } on PlatformException catch (e) { + debugPrint('getPerformanceClass failed with code=${e.code}, exception=${e.message}, details=${e.details}'); + } + return 0; + } +} diff --git a/lib/widgets/welcome_page.dart b/lib/widgets/welcome_page.dart index ac2eb1217..c88705076 100644 --- a/lib/widgets/welcome_page.dart +++ b/lib/widgets/welcome_page.dart @@ -27,6 +27,7 @@ class _WelcomePageState extends State { @override void initState() { super.initState(); + settings.setContextualDefaults(); _termsLoader = rootBundle.loadString('assets/terms.md'); }