settings: device-dependent defaults

This commit is contained in:
Thibault Deckers 2021-07-19 16:57:06 +09:00
parent c47e6ee6da
commit 4d7b9e9065
5 changed files with 65 additions and 0 deletions

View file

@ -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))

View file

@ -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"
}
}

View file

@ -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<void> 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);

View file

@ -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<int> 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;
}
}

View file

@ -27,6 +27,7 @@ class _WelcomePageState extends State<WelcomePage> {
@override
void initState() {
super.initState();
settings.setContextualDefaults();
_termsLoader = rootBundle.loadString('assets/terms.md');
}