pref observer and fixator
This commit is contained in:
+13
@@ -22,6 +22,7 @@ import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
|
|||||||
import 'package:riverpod/riverpod.dart';
|
import 'package:riverpod/riverpod.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
import 'package:weblibre/core/logger.dart';
|
import 'package:weblibre/core/logger.dart';
|
||||||
|
import 'package:weblibre/features/geckoview/features/preferences/data/repositories/preference_observer.dart';
|
||||||
import 'package:weblibre/features/user/domain/repositories/engine_settings.dart';
|
import 'package:weblibre/features/user/domain/repositories/engine_settings.dart';
|
||||||
import 'package:weblibre/features/user/domain/repositories/general_settings.dart';
|
import 'package:weblibre/features/user/domain/repositories/general_settings.dart';
|
||||||
|
|
||||||
@@ -134,8 +135,20 @@ class EngineSettingsReplicationService
|
|||||||
settings.fingerprintingProtectionOverrides,
|
settings.fingerprintingProtectionOverrides,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
if (previous.value?.enablePdfJs != settings.enablePdfJs) {
|
||||||
|
// ignore: only_use_keep_alive_inside_keep_alive
|
||||||
|
await ref
|
||||||
|
.read(preferenceFixatorProvider.notifier)
|
||||||
|
.register('pdfjs.disabled', !settings.enablePdfJs);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
await _service.setDefaultSettings(settings);
|
await _service.setDefaultSettings(settings);
|
||||||
|
|
||||||
|
// ignore: only_use_keep_alive_inside_keep_alive
|
||||||
|
await ref
|
||||||
|
.read(preferenceFixatorProvider.notifier)
|
||||||
|
.register('pdfjs.disabled', !settings.enablePdfJs);
|
||||||
|
|
||||||
initialSettingsSent = true;
|
initialSettingsSent = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -44,7 +44,7 @@ final class EngineSettingsReplicationServiceProvider
|
|||||||
}
|
}
|
||||||
|
|
||||||
String _$engineSettingsReplicationServiceHash() =>
|
String _$engineSettingsReplicationServiceHash() =>
|
||||||
r'3c96e6e45537399582fdf6e8b1fafc44c613b89d';
|
r'd28cc58a94f45008a478bf52a9c40d61811b591d';
|
||||||
|
|
||||||
abstract class _$EngineSettingsReplicationService extends $Notifier<void> {
|
abstract class _$EngineSettingsReplicationService extends $Notifier<void> {
|
||||||
void build();
|
void build();
|
||||||
|
|||||||
+14
@@ -44,6 +44,7 @@ import 'package:weblibre/features/geckoview/features/browser/domain/providers/li
|
|||||||
import 'package:weblibre/features/geckoview/features/browser/domain/services/browser_data.dart';
|
import 'package:weblibre/features/geckoview/features/browser/domain/services/browser_data.dart';
|
||||||
import 'package:weblibre/features/geckoview/features/browser/domain/services/engine_settings_replication.dart';
|
import 'package:weblibre/features/geckoview/features/browser/domain/services/engine_settings_replication.dart';
|
||||||
import 'package:weblibre/features/geckoview/features/browser/domain/services/proxy_settings_replication.dart';
|
import 'package:weblibre/features/geckoview/features/browser/domain/services/proxy_settings_replication.dart';
|
||||||
|
import 'package:weblibre/features/geckoview/features/preferences/data/repositories/preference_observer.dart';
|
||||||
import 'package:weblibre/features/share_intent/domain/entities/shared_content.dart';
|
import 'package:weblibre/features/share_intent/domain/entities/shared_content.dart';
|
||||||
import 'package:weblibre/features/user/data/models/general_settings.dart';
|
import 'package:weblibre/features/user/data/models/general_settings.dart';
|
||||||
import 'package:weblibre/features/user/domain/repositories/cache.dart';
|
import 'package:weblibre/features/user/domain/repositories/cache.dart';
|
||||||
@@ -373,6 +374,19 @@ class _BrowserViewState extends ConsumerState<BrowserView>
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
ref.listenManual(
|
||||||
|
fireImmediately: true,
|
||||||
|
preferenceFixatorProvider,
|
||||||
|
(previous, next) {},
|
||||||
|
onError: (error, stackTrace) {
|
||||||
|
logger.e(
|
||||||
|
'Error listening to preferenceFixatorProvider',
|
||||||
|
error: error,
|
||||||
|
stackTrace: stackTrace,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
ref.listenManual(
|
ref.listenManual(
|
||||||
fireImmediately: true,
|
fireImmediately: true,
|
||||||
proxySettingsReplicationProvider,
|
proxySettingsReplicationProvider,
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ class PreferenceSetting with FastEquatable {
|
|||||||
final Object value;
|
final Object value;
|
||||||
|
|
||||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
final GeckoPrefValue? current;
|
final GeckoPref? current;
|
||||||
|
|
||||||
bool get isActive => value == current?.value;
|
bool get isActive => value == current?.value;
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -80,7 +80,7 @@ abstract class _$PreferenceSettingCWProxy {
|
|||||||
|
|
||||||
PreferenceSetting description(String? description);
|
PreferenceSetting description(String? description);
|
||||||
|
|
||||||
PreferenceSetting current(GeckoPrefValue? current);
|
PreferenceSetting current(GeckoPref? current);
|
||||||
|
|
||||||
PreferenceSetting requireUserOptIn(bool requireUserOptIn);
|
PreferenceSetting requireUserOptIn(bool requireUserOptIn);
|
||||||
|
|
||||||
@@ -97,7 +97,7 @@ abstract class _$PreferenceSettingCWProxy {
|
|||||||
Object value,
|
Object value,
|
||||||
String? title,
|
String? title,
|
||||||
String? description,
|
String? description,
|
||||||
GeckoPrefValue? current,
|
GeckoPref? current,
|
||||||
bool requireUserOptIn,
|
bool requireUserOptIn,
|
||||||
bool shouldBeDefault,
|
bool shouldBeDefault,
|
||||||
});
|
});
|
||||||
@@ -121,7 +121,7 @@ class _$PreferenceSettingCWProxyImpl implements _$PreferenceSettingCWProxy {
|
|||||||
call(description: description);
|
call(description: description);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
PreferenceSetting current(GeckoPrefValue? current) => call(current: current);
|
PreferenceSetting current(GeckoPref? current) => call(current: current);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
PreferenceSetting requireUserOptIn(bool requireUserOptIn) =>
|
PreferenceSetting requireUserOptIn(bool requireUserOptIn) =>
|
||||||
@@ -163,7 +163,7 @@ class _$PreferenceSettingCWProxyImpl implements _$PreferenceSettingCWProxy {
|
|||||||
current: current == const $CopyWithPlaceholder()
|
current: current == const $CopyWithPlaceholder()
|
||||||
? _value.current
|
? _value.current
|
||||||
// ignore: cast_nullable_to_non_nullable
|
// ignore: cast_nullable_to_non_nullable
|
||||||
: current as GeckoPrefValue?,
|
: current as GeckoPref?,
|
||||||
requireUserOptIn:
|
requireUserOptIn:
|
||||||
requireUserOptIn == const $CopyWithPlaceholder() ||
|
requireUserOptIn == const $CopyWithPlaceholder() ||
|
||||||
requireUserOptIn == null
|
requireUserOptIn == null
|
||||||
|
|||||||
+81
@@ -0,0 +1,81 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
|
||||||
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
|
import 'package:weblibre/features/geckoview/domain/providers.dart';
|
||||||
|
|
||||||
|
part 'preference_observer.g.dart';
|
||||||
|
|
||||||
|
@Riverpod()
|
||||||
|
class PreferenceChangeListener extends _$PreferenceChangeListener {
|
||||||
|
@override
|
||||||
|
Stream<GeckoPref> build() async* {
|
||||||
|
final events = ref.watch(eventServiceProvider);
|
||||||
|
|
||||||
|
await GeckoPrefService().startObserveChanges();
|
||||||
|
|
||||||
|
ref.onDispose(() async {
|
||||||
|
await GeckoPrefService().stopObserveChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
yield* events.prefUpdateEvent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Riverpod()
|
||||||
|
class PreferenceFixator extends _$PreferenceFixator {
|
||||||
|
Future<void> register(String name, Object value) async {
|
||||||
|
await GeckoPrefService().applyPrefs({name: value});
|
||||||
|
|
||||||
|
state = {...state}
|
||||||
|
..update(
|
||||||
|
name,
|
||||||
|
(_) => value,
|
||||||
|
ifAbsent: () {
|
||||||
|
unawaited(GeckoPrefService().registerPrefForObservation(name));
|
||||||
|
return value;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> unregister(String name) async {
|
||||||
|
await GeckoPrefService().unregisterPrefForObservation(name);
|
||||||
|
state = {...state}..remove(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Map<String, Object> build() {
|
||||||
|
ref.listen(preferenceChangeListenerProvider, (previous, next) async {
|
||||||
|
if (next.hasValue) {
|
||||||
|
final setting = stateOrNull?[next.value!.name];
|
||||||
|
if (setting != null && next.value?.value != setting) {
|
||||||
|
await GeckoPrefService().applyPrefs({next.value!.name: setting});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Riverpod()
|
||||||
|
// class PreferenceObserver extends _$PreferenceObserver {
|
||||||
|
// @override
|
||||||
|
// Stream<GeckoPref> build(String pref) {
|
||||||
|
// final updateStream = ref
|
||||||
|
// .watch(preferenceChangeListenerProvider)
|
||||||
|
// .where((x) => x.name == pref);
|
||||||
|
|
||||||
|
// unawaited(GeckoPrefService().registerPrefForObservation(pref));
|
||||||
|
|
||||||
|
// ref.onDispose(() async {
|
||||||
|
// await GeckoPrefService().unregisterPrefForObservation(pref);
|
||||||
|
// });
|
||||||
|
|
||||||
|
// return GeckoPrefService()
|
||||||
|
// .getPrefs([pref])
|
||||||
|
// .asStream()
|
||||||
|
// .map((value) => value.values.first)
|
||||||
|
// .concatWith([updateStream]);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
+109
@@ -0,0 +1,109 @@
|
|||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'preference_observer.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// RiverpodGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint, type=warning
|
||||||
|
|
||||||
|
@ProviderFor(PreferenceChangeListener)
|
||||||
|
const preferenceChangeListenerProvider = PreferenceChangeListenerProvider._();
|
||||||
|
|
||||||
|
final class PreferenceChangeListenerProvider
|
||||||
|
extends $StreamNotifierProvider<PreferenceChangeListener, GeckoPref> {
|
||||||
|
const PreferenceChangeListenerProvider._()
|
||||||
|
: super(
|
||||||
|
from: null,
|
||||||
|
argument: null,
|
||||||
|
retry: null,
|
||||||
|
name: r'preferenceChangeListenerProvider',
|
||||||
|
isAutoDispose: true,
|
||||||
|
dependencies: null,
|
||||||
|
$allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
|
@override
|
||||||
|
String debugGetCreateSourceHash() => _$preferenceChangeListenerHash();
|
||||||
|
|
||||||
|
@$internal
|
||||||
|
@override
|
||||||
|
PreferenceChangeListener create() => PreferenceChangeListener();
|
||||||
|
}
|
||||||
|
|
||||||
|
String _$preferenceChangeListenerHash() =>
|
||||||
|
r'668c1bcd0636ec515a5e92ee5ba4ea7a67fa7a6d';
|
||||||
|
|
||||||
|
abstract class _$PreferenceChangeListener extends $StreamNotifier<GeckoPref> {
|
||||||
|
Stream<GeckoPref> build();
|
||||||
|
@$mustCallSuper
|
||||||
|
@override
|
||||||
|
void runBuild() {
|
||||||
|
final created = build();
|
||||||
|
final ref = this.ref as $Ref<AsyncValue<GeckoPref>, GeckoPref>;
|
||||||
|
final element =
|
||||||
|
ref.element
|
||||||
|
as $ClassProviderElement<
|
||||||
|
AnyNotifier<AsyncValue<GeckoPref>, GeckoPref>,
|
||||||
|
AsyncValue<GeckoPref>,
|
||||||
|
Object?,
|
||||||
|
Object?
|
||||||
|
>;
|
||||||
|
element.handleValue(ref, created);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ProviderFor(PreferenceFixator)
|
||||||
|
const preferenceFixatorProvider = PreferenceFixatorProvider._();
|
||||||
|
|
||||||
|
final class PreferenceFixatorProvider
|
||||||
|
extends $NotifierProvider<PreferenceFixator, Map<String, Object>> {
|
||||||
|
const PreferenceFixatorProvider._()
|
||||||
|
: super(
|
||||||
|
from: null,
|
||||||
|
argument: null,
|
||||||
|
retry: null,
|
||||||
|
name: r'preferenceFixatorProvider',
|
||||||
|
isAutoDispose: true,
|
||||||
|
dependencies: null,
|
||||||
|
$allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
|
@override
|
||||||
|
String debugGetCreateSourceHash() => _$preferenceFixatorHash();
|
||||||
|
|
||||||
|
@$internal
|
||||||
|
@override
|
||||||
|
PreferenceFixator create() => PreferenceFixator();
|
||||||
|
|
||||||
|
/// {@macro riverpod.override_with_value}
|
||||||
|
Override overrideWithValue(Map<String, Object> value) {
|
||||||
|
return $ProviderOverride(
|
||||||
|
origin: this,
|
||||||
|
providerOverride: $SyncValueProvider<Map<String, Object>>(value),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String _$preferenceFixatorHash() => r'dfa323859c660d3db74dba7297e2a33b758ed78a';
|
||||||
|
|
||||||
|
abstract class _$PreferenceFixator extends $Notifier<Map<String, Object>> {
|
||||||
|
Map<String, Object> build();
|
||||||
|
@$mustCallSuper
|
||||||
|
@override
|
||||||
|
void runBuild() {
|
||||||
|
final created = build();
|
||||||
|
final ref = this.ref as $Ref<Map<String, Object>, Map<String, Object>>;
|
||||||
|
final element =
|
||||||
|
ref.element
|
||||||
|
as $ClassProviderElement<
|
||||||
|
AnyNotifier<Map<String, Object>, Map<String, Object>>,
|
||||||
|
Map<String, Object>,
|
||||||
|
Object?,
|
||||||
|
Object?
|
||||||
|
>;
|
||||||
|
element.handleValue(ref, created);
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
-3
@@ -65,7 +65,7 @@ Future<PreferenceSettingGroup> _preferenceSettingGroup(
|
|||||||
class _PreferenceRepository extends _$PreferenceRepository {
|
class _PreferenceRepository extends _$PreferenceRepository {
|
||||||
final _prefManager = GeckoPrefService();
|
final _prefManager = GeckoPrefService();
|
||||||
// Use BehaviorSubject instead of StreamController
|
// Use BehaviorSubject instead of StreamController
|
||||||
late BehaviorSubject<Map<String, GeckoPrefValue>> _prefSubject;
|
late BehaviorSubject<Map<String, GeckoPref>> _prefSubject;
|
||||||
|
|
||||||
Future<void> _updatePrefs() async {
|
Future<void> _updatePrefs() async {
|
||||||
final prefs = await _prefManager.getAllPrefs();
|
final prefs = await _prefManager.getAllPrefs();
|
||||||
@@ -83,8 +83,8 @@ class _PreferenceRepository extends _$PreferenceRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Raw<Stream<Map<String, GeckoPrefValue>>> build() {
|
Raw<Stream<Map<String, GeckoPref>>> build() {
|
||||||
_prefSubject = BehaviorSubject<Map<String, GeckoPrefValue>>();
|
_prefSubject = BehaviorSubject<Map<String, GeckoPref>>();
|
||||||
|
|
||||||
ref.onDispose(() async {
|
ref.onDispose(() async {
|
||||||
await _prefSubject.close();
|
await _prefSubject.close();
|
||||||
|
|||||||
+13
-12
@@ -229,7 +229,7 @@ final class _PreferenceRepositoryProvider
|
|||||||
extends
|
extends
|
||||||
$NotifierProvider<
|
$NotifierProvider<
|
||||||
_PreferenceRepository,
|
_PreferenceRepository,
|
||||||
Raw<Stream<Map<String, GeckoPrefValue>>>
|
Raw<Stream<Map<String, GeckoPref>>>
|
||||||
> {
|
> {
|
||||||
const _PreferenceRepositoryProvider._()
|
const _PreferenceRepositoryProvider._()
|
||||||
: super(
|
: super(
|
||||||
@@ -250,21 +250,22 @@ final class _PreferenceRepositoryProvider
|
|||||||
_PreferenceRepository create() => _PreferenceRepository();
|
_PreferenceRepository create() => _PreferenceRepository();
|
||||||
|
|
||||||
/// {@macro riverpod.override_with_value}
|
/// {@macro riverpod.override_with_value}
|
||||||
Override overrideWithValue(Raw<Stream<Map<String, GeckoPrefValue>>> value) {
|
Override overrideWithValue(Raw<Stream<Map<String, GeckoPref>>> value) {
|
||||||
return $ProviderOverride(
|
return $ProviderOverride(
|
||||||
origin: this,
|
origin: this,
|
||||||
providerOverride:
|
providerOverride: $SyncValueProvider<Raw<Stream<Map<String, GeckoPref>>>>(
|
||||||
$SyncValueProvider<Raw<Stream<Map<String, GeckoPrefValue>>>>(value),
|
value,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String _$_preferenceRepositoryHash() =>
|
String _$_preferenceRepositoryHash() =>
|
||||||
r'9a98b95677d4070def531ea1e5b900892045a1ef';
|
r'0f6812988a23407f6648e32fb1585984d2433bbc';
|
||||||
|
|
||||||
abstract class _$PreferenceRepository
|
abstract class _$PreferenceRepository
|
||||||
extends $Notifier<Raw<Stream<Map<String, GeckoPrefValue>>>> {
|
extends $Notifier<Raw<Stream<Map<String, GeckoPref>>>> {
|
||||||
Raw<Stream<Map<String, GeckoPrefValue>>> build();
|
Raw<Stream<Map<String, GeckoPref>>> build();
|
||||||
@$mustCallSuper
|
@$mustCallSuper
|
||||||
@override
|
@override
|
||||||
void runBuild() {
|
void runBuild() {
|
||||||
@@ -272,17 +273,17 @@ abstract class _$PreferenceRepository
|
|||||||
final ref =
|
final ref =
|
||||||
this.ref
|
this.ref
|
||||||
as $Ref<
|
as $Ref<
|
||||||
Raw<Stream<Map<String, GeckoPrefValue>>>,
|
Raw<Stream<Map<String, GeckoPref>>>,
|
||||||
Raw<Stream<Map<String, GeckoPrefValue>>>
|
Raw<Stream<Map<String, GeckoPref>>>
|
||||||
>;
|
>;
|
||||||
final element =
|
final element =
|
||||||
ref.element
|
ref.element
|
||||||
as $ClassProviderElement<
|
as $ClassProviderElement<
|
||||||
AnyNotifier<
|
AnyNotifier<
|
||||||
Raw<Stream<Map<String, GeckoPrefValue>>>,
|
Raw<Stream<Map<String, GeckoPref>>>,
|
||||||
Raw<Stream<Map<String, GeckoPrefValue>>>
|
Raw<Stream<Map<String, GeckoPref>>>
|
||||||
>,
|
>,
|
||||||
Raw<Stream<Map<String, GeckoPrefValue>>>,
|
Raw<Stream<Map<String, GeckoPref>>>,
|
||||||
Object?,
|
Object?,
|
||||||
Object?
|
Object?
|
||||||
>;
|
>;
|
||||||
|
|||||||
+64
-14
@@ -9,15 +9,17 @@ package eu.weblibre.flutter_mozilla_components.api
|
|||||||
import eu.weblibre.flutter_mozilla_components.GlobalComponents
|
import eu.weblibre.flutter_mozilla_components.GlobalComponents
|
||||||
import eu.weblibre.flutter_mozilla_components.feature.PrefManagerFeature
|
import eu.weblibre.flutter_mozilla_components.feature.PrefManagerFeature
|
||||||
import eu.weblibre.flutter_mozilla_components.feature.ResultConsumer
|
import eu.weblibre.flutter_mozilla_components.feature.ResultConsumer
|
||||||
|
import eu.weblibre.flutter_mozilla_components.pigeons.GeckoPref
|
||||||
import eu.weblibre.flutter_mozilla_components.pigeons.GeckoPrefApi
|
import eu.weblibre.flutter_mozilla_components.pigeons.GeckoPrefApi
|
||||||
import eu.weblibre.flutter_mozilla_components.pigeons.GeckoPrefValue
|
|
||||||
import mozilla.components.ExperimentalAndroidComponentsApi
|
import mozilla.components.ExperimentalAndroidComponentsApi
|
||||||
import mozilla.components.concept.engine.preferences.Branch
|
import mozilla.components.concept.engine.preferences.Branch
|
||||||
|
import mozilla.components.concept.engine.preferences.BrowserPrefObserverDelegate
|
||||||
|
import mozilla.components.concept.engine.preferences.BrowserPreference
|
||||||
import mozilla.components.support.ktx.android.org.json.toList
|
import mozilla.components.support.ktx.android.org.json.toList
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import org.json.JSONArray
|
import org.json.JSONArray
|
||||||
|
|
||||||
class GeckoPrefApiImpl : GeckoPrefApi {
|
class GeckoPrefApiImpl : GeckoPrefApi, BrowserPrefObserverDelegate {
|
||||||
private val components by lazy {
|
private val components by lazy {
|
||||||
requireNotNull(GlobalComponents.components) { "Components not initialized" }
|
requireNotNull(GlobalComponents.components) { "Components not initialized" }
|
||||||
}
|
}
|
||||||
@@ -46,28 +48,32 @@ class GeckoPrefApiImpl : GeckoPrefApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getPrefList(callback: (Result<List<String>>) -> Unit) {
|
override fun getPrefList(callback: (Result<List<String>>) -> Unit) {
|
||||||
PrefManagerFeature.scheduleRequest("getPrefList", Unit, object : ResultConsumer<JSONObject> {
|
PrefManagerFeature.scheduleRequest(
|
||||||
override fun success(result: JSONObject) {
|
"getPrefList",
|
||||||
callback(Result.success(result.getJSONArray("result").toList()))
|
Unit,
|
||||||
}
|
object : ResultConsumer<JSONObject> {
|
||||||
|
override fun success(result: JSONObject) {
|
||||||
|
callback(Result.success(result.getJSONArray("result").toList()))
|
||||||
|
}
|
||||||
|
|
||||||
override fun error(errorCode: String, errorMessage: String?, errorDetails: Any?) {
|
override fun error(errorCode: String, errorMessage: String?, errorDetails: Any?) {
|
||||||
callback(Result.failure(Exception("$errorCode $errorMessage $errorDetails")))
|
callback(Result.failure(Exception("$errorCode $errorMessage $errorDetails")))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ExperimentalAndroidComponentsApi::class)
|
@OptIn(ExperimentalAndroidComponentsApi::class)
|
||||||
override fun getPrefs(
|
override fun getPrefs(
|
||||||
preferenceFilter: List<String>,
|
preferenceFilter: List<String>,
|
||||||
callback: (Result<Map<String, GeckoPrefValue>>) -> Unit
|
callback: (Result<Map<String, GeckoPref>>) -> Unit
|
||||||
) {
|
) {
|
||||||
components.core.engine.getBrowserPrefs(
|
components.core.engine.getBrowserPrefs(
|
||||||
preferenceFilter, onSuccess = {
|
preferenceFilter, onSuccess = {
|
||||||
callback(
|
callback(
|
||||||
Result.success(
|
Result.success(
|
||||||
it.associate {
|
it.associate {
|
||||||
it.pref to GeckoPrefValue(
|
it.pref to GeckoPref(
|
||||||
|
name = it.pref,
|
||||||
value = it.value,
|
value = it.value,
|
||||||
defaultValue = it.defaultValue,
|
defaultValue = it.defaultValue,
|
||||||
userValue = it.userValue,
|
userValue = it.userValue,
|
||||||
@@ -85,7 +91,7 @@ class GeckoPrefApiImpl : GeckoPrefApi {
|
|||||||
@OptIn(ExperimentalAndroidComponentsApi::class)
|
@OptIn(ExperimentalAndroidComponentsApi::class)
|
||||||
override fun applyPrefs(
|
override fun applyPrefs(
|
||||||
prefs: Map<String, Any>,
|
prefs: Map<String, Any>,
|
||||||
callback: (Result<Map<String, GeckoPrefValue>>) -> Unit
|
callback: (Result<Map<String, GeckoPref>>) -> Unit
|
||||||
) {
|
) {
|
||||||
var fault: Boolean = false;
|
var fault: Boolean = false;
|
||||||
|
|
||||||
@@ -148,7 +154,7 @@ class GeckoPrefApiImpl : GeckoPrefApi {
|
|||||||
for (pref in preferenceNames) {
|
for (pref in preferenceNames) {
|
||||||
components.core.engine.clearBrowserUserPref(
|
components.core.engine.clearBrowserUserPref(
|
||||||
pref = pref,
|
pref = pref,
|
||||||
onSuccess = {},
|
onSuccess = { },
|
||||||
onError = {
|
onError = {
|
||||||
callback(Result.failure(Exception("${it.message} ${it.cause}")))
|
callback(Result.failure(Exception("${it.message} ${it.cause}")))
|
||||||
fault = true
|
fault = true
|
||||||
@@ -159,5 +165,49 @@ class GeckoPrefApiImpl : GeckoPrefApi {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
callback(Result.success(Unit))
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun startObserveChanges() {
|
||||||
|
components.core.engine.registerPrefObserverDelegate(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun stopObserveChanges() {
|
||||||
|
components.core.engine.unregisterPrefObserverDelegate();
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun registerPrefForObservation(name: String, callback: (Result<Unit>) -> Unit) {
|
||||||
|
components.core.engine.registerPrefForObservation(
|
||||||
|
name,
|
||||||
|
onSuccess = {
|
||||||
|
callback(Result.success(Unit))
|
||||||
|
},
|
||||||
|
onError = {
|
||||||
|
callback(Result.failure(Exception("${it.message} ${it.cause}")))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun unregisterPrefForObservation(name: String, callback: (Result<Unit>) -> Unit) {
|
||||||
|
components.core.engine.unregisterPrefForObservation(
|
||||||
|
name,
|
||||||
|
onSuccess = {
|
||||||
|
callback(Result.success(Unit))
|
||||||
|
},
|
||||||
|
onError = {
|
||||||
|
callback(Result.failure(Exception("${it.message} ${it.cause}")))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onPreferenceChange(observedPreference: BrowserPreference<*>) {
|
||||||
|
components.flutterEvents.onPreferenceChange(
|
||||||
|
System.currentTimeMillis(), GeckoPref(
|
||||||
|
name = observedPreference.pref,
|
||||||
|
value = observedPreference.value,
|
||||||
|
defaultValue = observedPreference.defaultValue,
|
||||||
|
userValue = observedPreference.userValue,
|
||||||
|
hasUserChangedValue = observedPreference.hasUserChangedValue,
|
||||||
|
)
|
||||||
|
) { _ -> }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+108
-14
@@ -2196,7 +2196,8 @@ data class AddonCollection (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Generated class from Pigeon that represents data sent in messages. */
|
/** Generated class from Pigeon that represents data sent in messages. */
|
||||||
data class GeckoPrefValue (
|
data class GeckoPref (
|
||||||
|
val name: String,
|
||||||
val value: Any? = null,
|
val value: Any? = null,
|
||||||
val defaultValue: Any? = null,
|
val defaultValue: Any? = null,
|
||||||
val userValue: Any? = null,
|
val userValue: Any? = null,
|
||||||
@@ -2204,16 +2205,18 @@ data class GeckoPrefValue (
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
companion object {
|
companion object {
|
||||||
fun fromList(pigeonVar_list: List<Any?>): GeckoPrefValue {
|
fun fromList(pigeonVar_list: List<Any?>): GeckoPref {
|
||||||
val value = pigeonVar_list[0]
|
val name = pigeonVar_list[0] as String
|
||||||
val defaultValue = pigeonVar_list[1]
|
val value = pigeonVar_list[1]
|
||||||
val userValue = pigeonVar_list[2]
|
val defaultValue = pigeonVar_list[2]
|
||||||
val hasUserChangedValue = pigeonVar_list[3] as Boolean
|
val userValue = pigeonVar_list[3]
|
||||||
return GeckoPrefValue(value, defaultValue, userValue, hasUserChangedValue)
|
val hasUserChangedValue = pigeonVar_list[4] as Boolean
|
||||||
|
return GeckoPref(name, value, defaultValue, userValue, hasUserChangedValue)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fun toList(): List<Any?> {
|
fun toList(): List<Any?> {
|
||||||
return listOf(
|
return listOf(
|
||||||
|
name,
|
||||||
value,
|
value,
|
||||||
defaultValue,
|
defaultValue,
|
||||||
userValue,
|
userValue,
|
||||||
@@ -2221,7 +2224,7 @@ data class GeckoPrefValue (
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
if (other !is GeckoPrefValue) {
|
if (other !is GeckoPref) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if (this === other) {
|
if (this === other) {
|
||||||
@@ -2546,7 +2549,7 @@ private open class GeckoPigeonCodec : StandardMessageCodec() {
|
|||||||
}
|
}
|
||||||
191.toByte() -> {
|
191.toByte() -> {
|
||||||
return (readValue(buffer) as? List<Any?>)?.let {
|
return (readValue(buffer) as? List<Any?>)?.let {
|
||||||
GeckoPrefValue.fromList(it)
|
GeckoPref.fromList(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> super.readValueOfType(type, buffer)
|
else -> super.readValueOfType(type, buffer)
|
||||||
@@ -2802,7 +2805,7 @@ private open class GeckoPigeonCodec : StandardMessageCodec() {
|
|||||||
stream.write(190)
|
stream.write(190)
|
||||||
writeValue(stream, value.toList())
|
writeValue(stream, value.toList())
|
||||||
}
|
}
|
||||||
is GeckoPrefValue -> {
|
is GeckoPref -> {
|
||||||
stream.write(191)
|
stream.write(191)
|
||||||
writeValue(stream, value.toList())
|
writeValue(stream, value.toList())
|
||||||
}
|
}
|
||||||
@@ -3761,9 +3764,13 @@ interface GeckoIconsApi {
|
|||||||
/** Generated interface from Pigeon that represents a handler of messages from Flutter. */
|
/** Generated interface from Pigeon that represents a handler of messages from Flutter. */
|
||||||
interface GeckoPrefApi {
|
interface GeckoPrefApi {
|
||||||
fun getPrefList(callback: (Result<List<String>>) -> Unit)
|
fun getPrefList(callback: (Result<List<String>>) -> Unit)
|
||||||
fun getPrefs(preferenceFilter: List<String>, callback: (Result<Map<String, GeckoPrefValue>>) -> Unit)
|
fun getPrefs(preferenceFilter: List<String>, callback: (Result<Map<String, GeckoPref>>) -> Unit)
|
||||||
fun applyPrefs(prefs: Map<String, Any>, callback: (Result<Map<String, GeckoPrefValue>>) -> Unit)
|
fun applyPrefs(prefs: Map<String, Any>, callback: (Result<Map<String, GeckoPref>>) -> Unit)
|
||||||
fun resetPrefs(preferenceNames: List<String>, callback: (Result<Unit>) -> Unit)
|
fun resetPrefs(preferenceNames: List<String>, callback: (Result<Unit>) -> Unit)
|
||||||
|
fun startObserveChanges()
|
||||||
|
fun stopObserveChanges()
|
||||||
|
fun registerPrefForObservation(name: String, callback: (Result<Unit>) -> Unit)
|
||||||
|
fun unregisterPrefForObservation(name: String, callback: (Result<Unit>) -> Unit)
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
/** The codec used by GeckoPrefApi. */
|
/** The codec used by GeckoPrefApi. */
|
||||||
@@ -3798,7 +3805,7 @@ interface GeckoPrefApi {
|
|||||||
channel.setMessageHandler { message, reply ->
|
channel.setMessageHandler { message, reply ->
|
||||||
val args = message as List<Any?>
|
val args = message as List<Any?>
|
||||||
val preferenceFilterArg = args[0] as List<String>
|
val preferenceFilterArg = args[0] as List<String>
|
||||||
api.getPrefs(preferenceFilterArg) { result: Result<Map<String, GeckoPrefValue>> ->
|
api.getPrefs(preferenceFilterArg) { result: Result<Map<String, GeckoPref>> ->
|
||||||
val error = result.exceptionOrNull()
|
val error = result.exceptionOrNull()
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
reply.reply(GeckoPigeonUtils.wrapError(error))
|
reply.reply(GeckoPigeonUtils.wrapError(error))
|
||||||
@@ -3818,7 +3825,7 @@ interface GeckoPrefApi {
|
|||||||
channel.setMessageHandler { message, reply ->
|
channel.setMessageHandler { message, reply ->
|
||||||
val args = message as List<Any?>
|
val args = message as List<Any?>
|
||||||
val prefsArg = args[0] as Map<String, Any>
|
val prefsArg = args[0] as Map<String, Any>
|
||||||
api.applyPrefs(prefsArg) { result: Result<Map<String, GeckoPrefValue>> ->
|
api.applyPrefs(prefsArg) { result: Result<Map<String, GeckoPref>> ->
|
||||||
val error = result.exceptionOrNull()
|
val error = result.exceptionOrNull()
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
reply.reply(GeckoPigeonUtils.wrapError(error))
|
reply.reply(GeckoPigeonUtils.wrapError(error))
|
||||||
@@ -3851,6 +3858,76 @@ interface GeckoPrefApi {
|
|||||||
channel.setMessageHandler(null)
|
channel.setMessageHandler(null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
run {
|
||||||
|
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.flutter_mozilla_components.GeckoPrefApi.startObserveChanges$separatedMessageChannelSuffix", codec)
|
||||||
|
if (api != null) {
|
||||||
|
channel.setMessageHandler { _, reply ->
|
||||||
|
val wrapped: List<Any?> = try {
|
||||||
|
api.startObserveChanges()
|
||||||
|
listOf(null)
|
||||||
|
} catch (exception: Throwable) {
|
||||||
|
GeckoPigeonUtils.wrapError(exception)
|
||||||
|
}
|
||||||
|
reply.reply(wrapped)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
channel.setMessageHandler(null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
run {
|
||||||
|
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.flutter_mozilla_components.GeckoPrefApi.stopObserveChanges$separatedMessageChannelSuffix", codec)
|
||||||
|
if (api != null) {
|
||||||
|
channel.setMessageHandler { _, reply ->
|
||||||
|
val wrapped: List<Any?> = try {
|
||||||
|
api.stopObserveChanges()
|
||||||
|
listOf(null)
|
||||||
|
} catch (exception: Throwable) {
|
||||||
|
GeckoPigeonUtils.wrapError(exception)
|
||||||
|
}
|
||||||
|
reply.reply(wrapped)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
channel.setMessageHandler(null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
run {
|
||||||
|
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.flutter_mozilla_components.GeckoPrefApi.registerPrefForObservation$separatedMessageChannelSuffix", codec)
|
||||||
|
if (api != null) {
|
||||||
|
channel.setMessageHandler { message, reply ->
|
||||||
|
val args = message as List<Any?>
|
||||||
|
val nameArg = args[0] as String
|
||||||
|
api.registerPrefForObservation(nameArg) { result: Result<Unit> ->
|
||||||
|
val error = result.exceptionOrNull()
|
||||||
|
if (error != null) {
|
||||||
|
reply.reply(GeckoPigeonUtils.wrapError(error))
|
||||||
|
} else {
|
||||||
|
reply.reply(GeckoPigeonUtils.wrapResult(null))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
channel.setMessageHandler(null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
run {
|
||||||
|
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.flutter_mozilla_components.GeckoPrefApi.unregisterPrefForObservation$separatedMessageChannelSuffix", codec)
|
||||||
|
if (api != null) {
|
||||||
|
channel.setMessageHandler { message, reply ->
|
||||||
|
val args = message as List<Any?>
|
||||||
|
val nameArg = args[0] as String
|
||||||
|
api.unregisterPrefForObservation(nameArg) { result: Result<Unit> ->
|
||||||
|
val error = result.exceptionOrNull()
|
||||||
|
if (error != null) {
|
||||||
|
reply.reply(GeckoPigeonUtils.wrapError(error))
|
||||||
|
} else {
|
||||||
|
reply.reply(GeckoPigeonUtils.wrapResult(null))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
channel.setMessageHandler(null)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4422,6 +4499,23 @@ class GeckoStateEvents(private val binaryMessenger: BinaryMessenger, private val
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
fun onPreferenceChange(timestampArg: Long, valueArg: GeckoPref, callback: (Result<Unit>) -> Unit)
|
||||||
|
{
|
||||||
|
val separatedMessageChannelSuffix = if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else ""
|
||||||
|
val channelName = "dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onPreferenceChange$separatedMessageChannelSuffix"
|
||||||
|
val channel = BasicMessageChannel<Any?>(binaryMessenger, channelName, codec)
|
||||||
|
channel.send(listOf(timestampArg, valueArg)) {
|
||||||
|
if (it is List<*>) {
|
||||||
|
if (it.size > 1) {
|
||||||
|
callback(Result.failure(FlutterError(it[0] as String, it[1] as String, it[2] as String?)))
|
||||||
|
} else {
|
||||||
|
callback(Result.success(Unit))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
callback(Result.failure(GeckoPigeonUtils.createConnectionError(channelName)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/** Generated class from Pigeon that represents Flutter messages that can be called from Kotlin. */
|
/** Generated class from Pigeon that represents Flutter messages that can be called from Kotlin. */
|
||||||
class GeckoLogging(private val binaryMessenger: BinaryMessenger, private val messageChannelSuffix: String = "") {
|
class GeckoLogging(private val binaryMessenger: BinaryMessenger, private val messageChannelSuffix: String = "") {
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ export 'src/pigeons/gecko.g.dart'
|
|||||||
DohSettingsMode,
|
DohSettingsMode,
|
||||||
EmailHitResult,
|
EmailHitResult,
|
||||||
GeckoEngineSettings,
|
GeckoEngineSettings,
|
||||||
GeckoPrefValue,
|
GeckoPref,
|
||||||
GeckoSuggestion,
|
GeckoSuggestion,
|
||||||
GeckoSuggestionType,
|
GeckoSuggestionType,
|
||||||
GeoHitResult,
|
GeoHitResult,
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ class GeckoEventService extends GeckoStateEvents {
|
|||||||
final _findResultsSubject = PublishSubject<FindResultsEvent>();
|
final _findResultsSubject = PublishSubject<FindResultsEvent>();
|
||||||
final _longPressSubject = PublishSubject<LongPressEvent>();
|
final _longPressSubject = PublishSubject<LongPressEvent>();
|
||||||
final _scrollEventSubject = PublishSubject<ScrollEvent>();
|
final _scrollEventSubject = PublishSubject<ScrollEvent>();
|
||||||
|
final _prefUpdateSubject = PublishSubject<GeckoPref>();
|
||||||
|
|
||||||
final _tabAddedSubject = PublishSubject<String>();
|
final _tabAddedSubject = PublishSubject<String>();
|
||||||
|
|
||||||
@@ -59,6 +60,7 @@ class GeckoEventService extends GeckoStateEvents {
|
|||||||
Stream<FindResultsEvent> get findResultsEvent => _findResultsSubject.stream;
|
Stream<FindResultsEvent> get findResultsEvent => _findResultsSubject.stream;
|
||||||
Stream<LongPressEvent> get longPressEvent => _longPressSubject.stream;
|
Stream<LongPressEvent> get longPressEvent => _longPressSubject.stream;
|
||||||
Stream<ScrollEvent> get scrollEvent => _scrollEventSubject.stream;
|
Stream<ScrollEvent> get scrollEvent => _scrollEventSubject.stream;
|
||||||
|
Stream<GeckoPref> get prefUpdateEvent => _prefUpdateSubject.stream;
|
||||||
|
|
||||||
Stream<String> get tabAddedStream => _tabAddedSubject.stream;
|
Stream<String> get tabAddedStream => _tabAddedSubject.stream;
|
||||||
|
|
||||||
@@ -177,6 +179,11 @@ class GeckoEventService extends GeckoStateEvents {
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onPreferenceChange(int timestamp, GeckoPref value) {
|
||||||
|
_prefUpdateSubject.addWhenMoreRecent(timestamp, value.name, value);
|
||||||
|
}
|
||||||
|
|
||||||
GeckoEventService.setUp({
|
GeckoEventService.setUp({
|
||||||
BinaryMessenger? binaryMessenger,
|
BinaryMessenger? binaryMessenger,
|
||||||
String messageChannelSuffix = '',
|
String messageChannelSuffix = '',
|
||||||
@@ -189,6 +196,8 @@ class GeckoEventService extends GeckoStateEvents {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void dispose() {
|
void dispose() {
|
||||||
|
unawaited(_viewStateSubject.close());
|
||||||
|
unawaited(_engineStateSubject.close());
|
||||||
unawaited(_tabListSubject.close());
|
unawaited(_tabListSubject.close());
|
||||||
unawaited(_selectedTabSubject.close());
|
unawaited(_selectedTabSubject.close());
|
||||||
unawaited(_tabContentSubject.close());
|
unawaited(_tabContentSubject.close());
|
||||||
@@ -196,10 +205,12 @@ class GeckoEventService extends GeckoStateEvents {
|
|||||||
unawaited(_readerableSubject.close());
|
unawaited(_readerableSubject.close());
|
||||||
unawaited(_securityInfoSubject.close());
|
unawaited(_securityInfoSubject.close());
|
||||||
unawaited(_iconChangeSubject.close());
|
unawaited(_iconChangeSubject.close());
|
||||||
|
unawaited(_iconUpdateSubject.close());
|
||||||
unawaited(_thumbnailSubject.close());
|
unawaited(_thumbnailSubject.close());
|
||||||
unawaited(_findResultsSubject.close());
|
unawaited(_findResultsSubject.close());
|
||||||
unawaited(_longPressSubject.close());
|
unawaited(_longPressSubject.close());
|
||||||
unawaited(_scrollEventSubject.close());
|
unawaited(_scrollEventSubject.close());
|
||||||
unawaited(_tabAddedSubject.close());
|
unawaited(_tabAddedSubject.close());
|
||||||
|
unawaited(_prefUpdateSubject.close());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,19 +13,35 @@ class GeckoPrefService {
|
|||||||
return _apiInstance.getPrefList();
|
return _apiInstance.getPrefList();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Map<String, GeckoPrefValue>> getAllPrefs() async {
|
Future<Map<String, GeckoPref>> getAllPrefs() async {
|
||||||
return _apiInstance.getPrefs(await getPrefList());
|
return _apiInstance.getPrefs(await getPrefList());
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Map<String, GeckoPrefValue>> getPrefs(List<String> prefs) {
|
Future<Map<String, GeckoPref>> getPrefs(List<String> prefs) {
|
||||||
return _apiInstance.getPrefs(prefs);
|
return _apiInstance.getPrefs(prefs);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Map<String, GeckoPrefValue>> applyPrefs(Map<String, Object> prefs) {
|
Future<Map<String, GeckoPref>> applyPrefs(Map<String, Object> prefs) {
|
||||||
return _apiInstance.applyPrefs(prefs);
|
return _apiInstance.applyPrefs(prefs);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> resetPrefs(List<String> prefs) {
|
Future<void> resetPrefs(List<String> prefs) {
|
||||||
return _apiInstance.resetPrefs(prefs);
|
return _apiInstance.resetPrefs(prefs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> startObserveChanges() {
|
||||||
|
return _apiInstance.startObserveChanges();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> stopObserveChanges() {
|
||||||
|
return _apiInstance.stopObserveChanges();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> registerPrefForObservation(String name) {
|
||||||
|
return _apiInstance.registerPrefForObservation(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> unregisterPrefForObservation(String name) {
|
||||||
|
return _apiInstance.unregisterPrefForObservation(name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2788,14 +2788,17 @@ class AddonCollection {
|
|||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
class GeckoPrefValue {
|
class GeckoPref {
|
||||||
GeckoPrefValue({
|
GeckoPref({
|
||||||
|
required this.name,
|
||||||
this.value,
|
this.value,
|
||||||
this.defaultValue,
|
this.defaultValue,
|
||||||
this.userValue,
|
this.userValue,
|
||||||
required this.hasUserChangedValue,
|
required this.hasUserChangedValue,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
String name;
|
||||||
|
|
||||||
Object? value;
|
Object? value;
|
||||||
|
|
||||||
Object? defaultValue;
|
Object? defaultValue;
|
||||||
@@ -2806,6 +2809,7 @@ class GeckoPrefValue {
|
|||||||
|
|
||||||
List<Object?> _toList() {
|
List<Object?> _toList() {
|
||||||
return <Object?>[
|
return <Object?>[
|
||||||
|
name,
|
||||||
value,
|
value,
|
||||||
defaultValue,
|
defaultValue,
|
||||||
userValue,
|
userValue,
|
||||||
@@ -2816,20 +2820,21 @@ class GeckoPrefValue {
|
|||||||
Object encode() {
|
Object encode() {
|
||||||
return _toList(); }
|
return _toList(); }
|
||||||
|
|
||||||
static GeckoPrefValue decode(Object result) {
|
static GeckoPref decode(Object result) {
|
||||||
result as List<Object?>;
|
result as List<Object?>;
|
||||||
return GeckoPrefValue(
|
return GeckoPref(
|
||||||
value: result[0],
|
name: result[0]! as String,
|
||||||
defaultValue: result[1],
|
value: result[1],
|
||||||
userValue: result[2],
|
defaultValue: result[2],
|
||||||
hasUserChangedValue: result[3]! as bool,
|
userValue: result[3],
|
||||||
|
hasUserChangedValue: result[4]! as bool,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
// ignore: avoid_equals_and_hash_code_on_mutable_classes
|
// ignore: avoid_equals_and_hash_code_on_mutable_classes
|
||||||
bool operator ==(Object other) {
|
bool operator ==(Object other) {
|
||||||
if (other is! GeckoPrefValue || other.runtimeType != runtimeType) {
|
if (other is! GeckoPref || other.runtimeType != runtimeType) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (identical(this, other)) {
|
if (identical(this, other)) {
|
||||||
@@ -3038,7 +3043,7 @@ class _PigeonCodec extends StandardMessageCodec {
|
|||||||
} else if (value is AddonCollection) {
|
} else if (value is AddonCollection) {
|
||||||
buffer.putUint8(190);
|
buffer.putUint8(190);
|
||||||
writeValue(buffer, value.encode());
|
writeValue(buffer, value.encode());
|
||||||
} else if (value is GeckoPrefValue) {
|
} else if (value is GeckoPref) {
|
||||||
buffer.putUint8(191);
|
buffer.putUint8(191);
|
||||||
writeValue(buffer, value.encode());
|
writeValue(buffer, value.encode());
|
||||||
} else {
|
} else {
|
||||||
@@ -3193,7 +3198,7 @@ class _PigeonCodec extends StandardMessageCodec {
|
|||||||
case 190:
|
case 190:
|
||||||
return AddonCollection.decode(readValue(buffer)!);
|
return AddonCollection.decode(readValue(buffer)!);
|
||||||
case 191:
|
case 191:
|
||||||
return GeckoPrefValue.decode(readValue(buffer)!);
|
return GeckoPref.decode(readValue(buffer)!);
|
||||||
default:
|
default:
|
||||||
return super.readValueOfType(type, buffer);
|
return super.readValueOfType(type, buffer);
|
||||||
}
|
}
|
||||||
@@ -4357,7 +4362,7 @@ class GeckoPrefApi {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Map<String, GeckoPrefValue>> getPrefs(List<String> preferenceFilter) async {
|
Future<Map<String, GeckoPref>> getPrefs(List<String> preferenceFilter) async {
|
||||||
final String pigeonVar_channelName = 'dev.flutter.pigeon.flutter_mozilla_components.GeckoPrefApi.getPrefs$pigeonVar_messageChannelSuffix';
|
final String pigeonVar_channelName = 'dev.flutter.pigeon.flutter_mozilla_components.GeckoPrefApi.getPrefs$pigeonVar_messageChannelSuffix';
|
||||||
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
|
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||||
pigeonVar_channelName,
|
pigeonVar_channelName,
|
||||||
@@ -4381,11 +4386,11 @@ class GeckoPrefApi {
|
|||||||
message: 'Host platform returned null value for non-null return value.',
|
message: 'Host platform returned null value for non-null return value.',
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return (pigeonVar_replyList[0] as Map<Object?, Object?>?)!.cast<String, GeckoPrefValue>();
|
return (pigeonVar_replyList[0] as Map<Object?, Object?>?)!.cast<String, GeckoPref>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Map<String, GeckoPrefValue>> applyPrefs(Map<String, Object> prefs) async {
|
Future<Map<String, GeckoPref>> applyPrefs(Map<String, Object> prefs) async {
|
||||||
final String pigeonVar_channelName = 'dev.flutter.pigeon.flutter_mozilla_components.GeckoPrefApi.applyPrefs$pigeonVar_messageChannelSuffix';
|
final String pigeonVar_channelName = 'dev.flutter.pigeon.flutter_mozilla_components.GeckoPrefApi.applyPrefs$pigeonVar_messageChannelSuffix';
|
||||||
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
|
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||||
pigeonVar_channelName,
|
pigeonVar_channelName,
|
||||||
@@ -4409,7 +4414,7 @@ class GeckoPrefApi {
|
|||||||
message: 'Host platform returned null value for non-null return value.',
|
message: 'Host platform returned null value for non-null return value.',
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return (pigeonVar_replyList[0] as Map<Object?, Object?>?)!.cast<String, GeckoPrefValue>();
|
return (pigeonVar_replyList[0] as Map<Object?, Object?>?)!.cast<String, GeckoPref>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4435,6 +4440,98 @@ class GeckoPrefApi {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> startObserveChanges() async {
|
||||||
|
final String pigeonVar_channelName = 'dev.flutter.pigeon.flutter_mozilla_components.GeckoPrefApi.startObserveChanges$pigeonVar_messageChannelSuffix';
|
||||||
|
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||||
|
pigeonVar_channelName,
|
||||||
|
pigeonChannelCodec,
|
||||||
|
binaryMessenger: pigeonVar_binaryMessenger,
|
||||||
|
);
|
||||||
|
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(null);
|
||||||
|
final List<Object?>? pigeonVar_replyList =
|
||||||
|
await pigeonVar_sendFuture as List<Object?>?;
|
||||||
|
if (pigeonVar_replyList == null) {
|
||||||
|
throw _createConnectionError(pigeonVar_channelName);
|
||||||
|
} else if (pigeonVar_replyList.length > 1) {
|
||||||
|
throw PlatformException(
|
||||||
|
code: pigeonVar_replyList[0]! as String,
|
||||||
|
message: pigeonVar_replyList[1] as String?,
|
||||||
|
details: pigeonVar_replyList[2],
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> stopObserveChanges() async {
|
||||||
|
final String pigeonVar_channelName = 'dev.flutter.pigeon.flutter_mozilla_components.GeckoPrefApi.stopObserveChanges$pigeonVar_messageChannelSuffix';
|
||||||
|
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||||
|
pigeonVar_channelName,
|
||||||
|
pigeonChannelCodec,
|
||||||
|
binaryMessenger: pigeonVar_binaryMessenger,
|
||||||
|
);
|
||||||
|
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(null);
|
||||||
|
final List<Object?>? pigeonVar_replyList =
|
||||||
|
await pigeonVar_sendFuture as List<Object?>?;
|
||||||
|
if (pigeonVar_replyList == null) {
|
||||||
|
throw _createConnectionError(pigeonVar_channelName);
|
||||||
|
} else if (pigeonVar_replyList.length > 1) {
|
||||||
|
throw PlatformException(
|
||||||
|
code: pigeonVar_replyList[0]! as String,
|
||||||
|
message: pigeonVar_replyList[1] as String?,
|
||||||
|
details: pigeonVar_replyList[2],
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> registerPrefForObservation(String name) async {
|
||||||
|
final String pigeonVar_channelName = 'dev.flutter.pigeon.flutter_mozilla_components.GeckoPrefApi.registerPrefForObservation$pigeonVar_messageChannelSuffix';
|
||||||
|
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||||
|
pigeonVar_channelName,
|
||||||
|
pigeonChannelCodec,
|
||||||
|
binaryMessenger: pigeonVar_binaryMessenger,
|
||||||
|
);
|
||||||
|
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[name]);
|
||||||
|
final List<Object?>? pigeonVar_replyList =
|
||||||
|
await pigeonVar_sendFuture as List<Object?>?;
|
||||||
|
if (pigeonVar_replyList == null) {
|
||||||
|
throw _createConnectionError(pigeonVar_channelName);
|
||||||
|
} else if (pigeonVar_replyList.length > 1) {
|
||||||
|
throw PlatformException(
|
||||||
|
code: pigeonVar_replyList[0]! as String,
|
||||||
|
message: pigeonVar_replyList[1] as String?,
|
||||||
|
details: pigeonVar_replyList[2],
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> unregisterPrefForObservation(String name) async {
|
||||||
|
final String pigeonVar_channelName = 'dev.flutter.pigeon.flutter_mozilla_components.GeckoPrefApi.unregisterPrefForObservation$pigeonVar_messageChannelSuffix';
|
||||||
|
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||||
|
pigeonVar_channelName,
|
||||||
|
pigeonChannelCodec,
|
||||||
|
binaryMessenger: pigeonVar_binaryMessenger,
|
||||||
|
);
|
||||||
|
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[name]);
|
||||||
|
final List<Object?>? pigeonVar_replyList =
|
||||||
|
await pigeonVar_sendFuture as List<Object?>?;
|
||||||
|
if (pigeonVar_replyList == null) {
|
||||||
|
throw _createConnectionError(pigeonVar_channelName);
|
||||||
|
} else if (pigeonVar_replyList.length > 1) {
|
||||||
|
throw PlatformException(
|
||||||
|
code: pigeonVar_replyList[0]! as String,
|
||||||
|
message: pigeonVar_replyList[1] as String?,
|
||||||
|
details: pigeonVar_replyList[2],
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class GeckoMlApi {
|
class GeckoMlApi {
|
||||||
@@ -4809,6 +4906,8 @@ abstract class GeckoStateEvents {
|
|||||||
|
|
||||||
void onScrollChange(int timestamp, String tabId, int scrollY);
|
void onScrollChange(int timestamp, String tabId, int scrollY);
|
||||||
|
|
||||||
|
void onPreferenceChange(int timestamp, GeckoPref value);
|
||||||
|
|
||||||
static void setUp(GeckoStateEvents? api, {BinaryMessenger? binaryMessenger, String messageChannelSuffix = '',}) {
|
static void setUp(GeckoStateEvents? api, {BinaryMessenger? binaryMessenger, String messageChannelSuffix = '',}) {
|
||||||
messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : '';
|
messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : '';
|
||||||
{
|
{
|
||||||
@@ -5252,6 +5351,34 @@ abstract class GeckoStateEvents {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
final BasicMessageChannel<Object?> pigeonVar_channel = BasicMessageChannel<Object?>(
|
||||||
|
'dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onPreferenceChange$messageChannelSuffix', pigeonChannelCodec,
|
||||||
|
binaryMessenger: binaryMessenger);
|
||||||
|
if (api == null) {
|
||||||
|
pigeonVar_channel.setMessageHandler(null);
|
||||||
|
} else {
|
||||||
|
pigeonVar_channel.setMessageHandler((Object? message) async {
|
||||||
|
assert(message != null,
|
||||||
|
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onPreferenceChange was null.');
|
||||||
|
final List<Object?> args = (message as List<Object?>?)!;
|
||||||
|
final int? arg_timestamp = (args[0] as int?);
|
||||||
|
assert(arg_timestamp != null,
|
||||||
|
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onPreferenceChange was null, expected non-null int.');
|
||||||
|
final GeckoPref? arg_value = (args[1] as GeckoPref?);
|
||||||
|
assert(arg_value != null,
|
||||||
|
'Argument for dev.flutter.pigeon.flutter_mozilla_components.GeckoStateEvents.onPreferenceChange was null, expected non-null GeckoPref.');
|
||||||
|
try {
|
||||||
|
api.onPreferenceChange(arg_timestamp!, arg_value!);
|
||||||
|
return wrapResponse(empty: true);
|
||||||
|
} on PlatformException catch (e) {
|
||||||
|
return wrapResponse(error: e);
|
||||||
|
} catch (e) {
|
||||||
|
return wrapResponse(error: PlatformException(code: 'error', message: e.toString()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1075,13 +1075,15 @@ abstract class GeckoIconsApi {
|
|||||||
IconResult loadIcon(IconRequest request);
|
IconResult loadIcon(IconRequest request);
|
||||||
}
|
}
|
||||||
|
|
||||||
class GeckoPrefValue {
|
class GeckoPref {
|
||||||
|
final String name;
|
||||||
final Object? value;
|
final Object? value;
|
||||||
final Object? defaultValue;
|
final Object? defaultValue;
|
||||||
final Object? userValue;
|
final Object? userValue;
|
||||||
final bool hasUserChangedValue;
|
final bool hasUserChangedValue;
|
||||||
|
|
||||||
GeckoPrefValue(
|
GeckoPref(
|
||||||
|
this.name,
|
||||||
this.value,
|
this.value,
|
||||||
this.defaultValue,
|
this.defaultValue,
|
||||||
this.userValue,
|
this.userValue,
|
||||||
@@ -1094,11 +1096,18 @@ abstract class GeckoPrefApi {
|
|||||||
@async
|
@async
|
||||||
List<String> getPrefList();
|
List<String> getPrefList();
|
||||||
@async
|
@async
|
||||||
Map<String, GeckoPrefValue> getPrefs(List<String> preferenceFilter);
|
Map<String, GeckoPref> getPrefs(List<String> preferenceFilter);
|
||||||
@async
|
@async
|
||||||
Map<String, GeckoPrefValue> applyPrefs(Map<String, Object> prefs);
|
Map<String, GeckoPref> applyPrefs(Map<String, Object> prefs);
|
||||||
@async
|
@async
|
||||||
void resetPrefs(List<String> preferenceNames);
|
void resetPrefs(List<String> preferenceNames);
|
||||||
|
|
||||||
|
void startObserveChanges();
|
||||||
|
void stopObserveChanges();
|
||||||
|
@async
|
||||||
|
void registerPrefForObservation(String name);
|
||||||
|
@async
|
||||||
|
void unregisterPrefForObservation(String name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@HostApi()
|
@HostApi()
|
||||||
@@ -1198,6 +1207,7 @@ abstract class GeckoStateEvents {
|
|||||||
void onLongPress(int timestamp, String id, HitResult hitResult);
|
void onLongPress(int timestamp, String id, HitResult hitResult);
|
||||||
|
|
||||||
void onScrollChange(int timestamp, String tabId, int scrollY);
|
void onScrollChange(int timestamp, String tabId, int scrollY);
|
||||||
|
void onPreferenceChange(int timestamp, GeckoPref value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@FlutterApi()
|
@FlutterApi()
|
||||||
|
|||||||
Reference in New Issue
Block a user