mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-07-13 13:26:43 +02:00
Move to fonts plugin
This commit is contained in:
@ -1,44 +0,0 @@
|
||||
package dev.imranr.obtainium
|
||||
|
||||
import android.util.Xml
|
||||
import org.xmlpull.v1.XmlPullParser
|
||||
import java.io.File
|
||||
import java.io.FileInputStream
|
||||
|
||||
class DefaultSystemFont {
|
||||
fun get(): String {
|
||||
return try {
|
||||
val file = File("/system/etc/fonts.xml")
|
||||
val fileStream = FileInputStream(file)
|
||||
parseFontsFileStream(fileStream)
|
||||
} catch (e: Exception) {
|
||||
e.message ?: "Unknown fonts.xml parsing exception"
|
||||
}
|
||||
}
|
||||
|
||||
private fun parseFontsFileStream(fileStream: FileInputStream): String {
|
||||
fileStream.use { stream ->
|
||||
val parser = Xml.newPullParser()
|
||||
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false)
|
||||
parser.setInput(stream, null)
|
||||
parser.nextTag()
|
||||
return parseFonts(parser)
|
||||
}
|
||||
}
|
||||
|
||||
private fun parseFonts(parser: XmlPullParser): String {
|
||||
while (!((parser.next() == XmlPullParser.END_TAG) && (parser.name == "family"))) {
|
||||
if ((parser.eventType == XmlPullParser.START_TAG) && (parser.name == "font")
|
||||
&& (parser.getAttributeValue(null, "style") == "normal")
|
||||
&& (parser.getAttributeValue(null, "weight") == "400")) {
|
||||
break
|
||||
}
|
||||
}
|
||||
parser.next()
|
||||
val fontFile = parser.text.trim()
|
||||
if (fontFile == "") {
|
||||
throw NoSuchFieldException("The font filename couldn't be found in fonts.xml")
|
||||
}
|
||||
return "/system/fonts/$fontFile"
|
||||
}
|
||||
}
|
@ -140,10 +140,7 @@ class MainActivity: FlutterActivity() {
|
||||
flutterEngine.dartExecutor.binaryMessenger, "native")
|
||||
nativeChannel!!.setMethodCallHandler {
|
||||
call, result ->
|
||||
if (call.method == "getSystemFont") {
|
||||
val res = DefaultSystemFont().get()
|
||||
result.success(res)
|
||||
} else if (call.method == "checkPermissionShizuku") {
|
||||
if (call.method == "checkPermissionShizuku") {
|
||||
shizukuCheckPermission(result)
|
||||
} else if (call.method == "installWithShizuku") {
|
||||
val apkFileUri: String = call.argument("apkFileUri")!!
|
||||
|
@ -5,6 +5,7 @@ import 'package:flutter/services.dart';
|
||||
import 'package:obtainium/pages/home.dart';
|
||||
import 'package:obtainium/providers/apps_provider.dart';
|
||||
import 'package:obtainium/providers/logs_provider.dart';
|
||||
import 'package:obtainium/providers/native_provider.dart';
|
||||
import 'package:obtainium/providers/notifications_provider.dart';
|
||||
import 'package:obtainium/providers/settings_provider.dart';
|
||||
import 'package:obtainium/providers/source_provider.dart';
|
||||
@ -231,6 +232,8 @@ class _ObtainiumState extends State<Obtainium> {
|
||||
.harmonized();
|
||||
}
|
||||
|
||||
if (settingsProvider.useSystemFont) NativeFeatures.loadSystemFont();
|
||||
|
||||
return MaterialApp(
|
||||
title: 'Obtainium',
|
||||
localizationsDelegates: context.localizationDelegates,
|
||||
|
@ -469,17 +469,8 @@ class _SettingsPageState extends State<SettingsPage> {
|
||||
onChanged: (useSystemFont) {
|
||||
if (useSystemFont) {
|
||||
NativeFeatures.loadSystemFont()
|
||||
.then((fontLoadRes) {
|
||||
if (fontLoadRes == 'ok') {
|
||||
settingsProvider.useSystemFont =
|
||||
true;
|
||||
} else {
|
||||
showError(
|
||||
ObtainiumError(tr(
|
||||
'systemFontError',
|
||||
args: [fontLoadRes])),
|
||||
context);
|
||||
}
|
||||
.then((val) {
|
||||
settingsProvider.useSystemFont = true;
|
||||
});
|
||||
} else {
|
||||
settingsProvider.useSystemFont = false;
|
||||
|
@ -1,5 +1,6 @@
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
import 'package:android_system_font/android_system_font.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
class NativeFeatures {
|
||||
@ -9,8 +10,7 @@ class NativeFeatures {
|
||||
static int _resPermShizuku = -2; // not set
|
||||
|
||||
static Future<ByteData> _readFileBytes(String path) async {
|
||||
var file = File(path);
|
||||
var bytes = await file.readAsBytes();
|
||||
var bytes = await File(path).readAsBytes();
|
||||
return ByteData.view(bytes.buffer);
|
||||
}
|
||||
|
||||
@ -34,15 +34,13 @@ class NativeFeatures {
|
||||
return completer.future;
|
||||
}
|
||||
|
||||
static Future<String> loadSystemFont() async {
|
||||
if (_systemFontLoaded) { return "ok"; }
|
||||
var getFontRes = await _channel.invokeMethod('getSystemFont');
|
||||
if (getFontRes[0] != '/') { return getFontRes; } // Error
|
||||
static Future loadSystemFont() async {
|
||||
if (_systemFontLoaded) return;
|
||||
var fontLoader = FontLoader('SystemFont');
|
||||
fontLoader.addFont(_readFileBytes(getFontRes));
|
||||
await fontLoader.load();
|
||||
var fontFilePath = await AndroidSystemFont().getFilePath();
|
||||
fontLoader.addFont(_readFileBytes(fontFilePath!));
|
||||
fontLoader.load();
|
||||
_systemFontLoaded = true;
|
||||
return "ok";
|
||||
}
|
||||
|
||||
static Future<int> checkPermissionShizuku() async {
|
||||
|
@ -26,6 +26,15 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.1"
|
||||
android_system_font:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
path: "."
|
||||
ref: master
|
||||
resolved-ref: "355f897e92a58a803f91d9270d389d9ec40ba550"
|
||||
url: "https://github.com/re7gog/android_system_font"
|
||||
source: git
|
||||
version: "1.0.0"
|
||||
animations:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -68,6 +68,10 @@ dependencies:
|
||||
crypto: ^3.0.3
|
||||
app_links: ^4.0.0
|
||||
background_fetch: ^1.2.1
|
||||
android_system_font:
|
||||
git:
|
||||
url: https://github.com/re7gog/android_system_font
|
||||
ref: master
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
Reference in New Issue
Block a user