System font and newer dependencies

This commit is contained in:
Gregory
2023-12-31 19:33:33 +03:00
parent 1fc8ee6fee
commit 5ba33786ab
11 changed files with 127 additions and 38 deletions

View File

@@ -33,7 +33,7 @@ import 'package:http/http.dart';
import 'package:android_intent_plus/android_intent.dart';
import 'package:flutter_archive/flutter_archive.dart';
import 'package:shared_storage/shared_storage.dart' as saf;
import 'installers_provider.dart';
import 'native_provider.dart';
final pm = AndroidPackageManager();
@@ -523,12 +523,12 @@ class AppsProvider with ChangeNotifier {
code = await AndroidPackageInstaller.installApk(
apkFilePath: file.file.path);
case InstallMethodSettings.shizuku:
code = (await Installers.installWithShizuku(
code = (await NativeFeatures.installWithShizuku(
apkFileUri: file.file.uri.toString()))
? 0
: 1;
case InstallMethodSettings.root:
code = (await Installers.installWithRoot(apkFilePath: file.file.path))
code = (await NativeFeatures.installWithRoot(apkFilePath: file.file.path))
? 0
: 1;
}
@@ -694,14 +694,14 @@ class AppsProvider with ChangeNotifier {
throw ObtainiumError(tr('cancelled'));
}
case InstallMethodSettings.shizuku:
int code = await Installers.checkPermissionShizuku();
int code = await NativeFeatures.checkPermissionShizuku();
if (code == -1) {
throw ObtainiumError(tr('shizukuBinderNotFound'));
} else if (code == 0) {
throw ObtainiumError(tr('cancelled'));
}
case InstallMethodSettings.root:
if (!(await Installers.checkPermissionRoot())) {
if (!(await NativeFeatures.checkPermissionRoot())) {
throw ObtainiumError(tr('cancelled'));
}
}

View File

@@ -1,12 +1,25 @@
import 'dart:async';
import 'dart:io';
import 'package:flutter/services.dart';
class Installers {
static const MethodChannel _channel = MethodChannel('installers');
class NativeFeatures {
static const MethodChannel _channel = MethodChannel('native');
static bool _callbacksApplied = false;
static int _resPermShizuku = -2; // not set
static Future waitWhile(bool Function() test,
static Future<ByteData> _readFileBytes(String path) async {
var file = File(path);
var bytes = await file.readAsBytes();
return ByteData.view(bytes.buffer);
}
static Future _handleCalls(MethodCall call) async {
if (call.method == 'resPermShizuku') {
_resPermShizuku = call.arguments['res'];
}
}
static Future _waitWhile(bool Function() test,
[Duration pollInterval = const Duration(milliseconds: 250)]) {
var completer = Completer();
check() {
@@ -20,20 +33,23 @@ class Installers {
return completer.future;
}
static Future handleCalls(MethodCall call) async {
if (call.method == 'resPermShizuku') {
_resPermShizuku = call.arguments['res'];
}
static Future<bool> tryLoadSystemFont() async {
var font = await _channel.invokeMethod('getSystemFont');
if (font == null) { return false; }
var fontLoader = FontLoader('SystemFont');
fontLoader.addFont(_readFileBytes(font));
await fontLoader.load();
return true;
}
static Future<int> checkPermissionShizuku() async {
if (!_callbacksApplied) {
_channel.setMethodCallHandler(handleCalls);
_channel.setMethodCallHandler(_handleCalls);
_callbacksApplied = true;
}
int res = await _channel.invokeMethod('checkPermissionShizuku');
if(res == -2) {
await waitWhile(() => _resPermShizuku == -2);
if (res == -2) {
await _waitWhile(() => _resPermShizuku == -2);
res = _resPermShizuku;
_resPermShizuku = -2;
}

View File

@@ -51,6 +51,24 @@ class SettingsProvider with ChangeNotifier {
notifyListeners();
}
String get appFont {
return prefs?.getString('appFont') ?? 'Metropolis';
}
set appFont(String appFont) {
prefs?.setString('appFont', appFont);
notifyListeners();
}
bool get tryUseSystemFont {
return prefs?.getBool('tryUseSystemFont') ?? false;
}
set tryUseSystemFont(bool tryUseSystemFont) {
prefs?.setBool('tryUseSystemFont', tryUseSystemFont);
notifyListeners();
}
InstallMethodSettings get installMethod {
return InstallMethodSettings
.values[prefs?.getInt('installMethod') ?? InstallMethodSettings.normal.index];