mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-06-28 12:29:51 +00:00
CW-1000 Background sync improvements (#2142)
* feat: background sync improvements - dev options on ci build cherrypick - add permissions for background sync to AndroidManifestBase - enable desugaring + update java compatibility to 17 - update walletconnect_flutter_v2 - update ens_dart - update nostr_tools - add notification for new transactions found in background - expose more settings from flutter_daemon in UI - remove battery optimization setting when it's already disabled - fix notification permission handling - fix background sync last trigger saving - prevent notifications from being duplicated * potential fix for multiple notifications firing for the same tx * improve logging in background sync * ui improvements to ignore battery optimization popup * feat: logs for bg sync disable decred bgsync * fix: call store() directly to be sure that it is writing the data * chore: rename logs to background sync logs * Update lib/view_model/dashboard/dashboard_view_model.dart Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com> * chore: remove unused key --------- Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
This commit is contained in:
parent
e6c9cf54fb
commit
02e74b5997
48 changed files with 1373 additions and 68 deletions
|
@ -51,6 +51,7 @@ import 'package:flutter/services.dart';
|
|||
import 'package:flutter_daemon/flutter_daemon.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:mobx/mobx.dart';
|
||||
import 'package:permission_handler/permission_handler.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import '../../themes/theme_base.dart';
|
||||
|
@ -180,7 +181,7 @@ abstract class DashboardViewModelBase with Store {
|
|||
isShowThirdYatIntroduction = false;
|
||||
unawaited(isBackgroundSyncEnabled());
|
||||
unawaited(isBatteryOptimizationEnabled());
|
||||
|
||||
unawaited(_loadConstraints());
|
||||
final _wallet = wallet;
|
||||
|
||||
if (_wallet.type == WalletType.monero) {
|
||||
|
@ -536,6 +537,88 @@ abstract class DashboardViewModelBase with Store {
|
|||
return resp;
|
||||
}
|
||||
|
||||
@observable
|
||||
late bool backgroundSyncNotificationsEnabled = sharedPreferences.getBool(PreferencesKey.backgroundSyncNotificationsEnabled) ?? false;
|
||||
|
||||
@action
|
||||
Future<void> setBackgroundSyncNotificationsEnabled(bool value) async {
|
||||
if (!value) {
|
||||
backgroundSyncNotificationsEnabled = false;
|
||||
sharedPreferences.setBool(PreferencesKey.backgroundSyncNotificationsEnabled, false);
|
||||
return;
|
||||
}
|
||||
PermissionStatus permissionStatus = await Permission.notification.status;
|
||||
if (permissionStatus != PermissionStatus.granted) {
|
||||
final resp = await Permission.notification.request();
|
||||
if (resp == PermissionStatus.denied) {
|
||||
throw Exception("Notification permission denied");
|
||||
}
|
||||
}
|
||||
backgroundSyncNotificationsEnabled = value;
|
||||
await sharedPreferences.setBool(PreferencesKey.backgroundSyncNotificationsEnabled, value);
|
||||
}
|
||||
|
||||
|
||||
bool get hasBgsyncNetworkConstraints => Platform.isAndroid;
|
||||
bool get hasBgsyncBatteryNotLowConstraints => Platform.isAndroid;
|
||||
bool get hasBgsyncChargingConstraints => Platform.isAndroid;
|
||||
bool get hasBgsyncDeviceIdleConstraints => Platform.isAndroid;
|
||||
|
||||
@observable
|
||||
bool backgroundSyncNetworkUnmetered = false;
|
||||
|
||||
@observable
|
||||
bool backgroundSyncBatteryNotLow = false;
|
||||
|
||||
@observable
|
||||
bool backgroundSyncCharging = false;
|
||||
|
||||
@observable
|
||||
bool backgroundSyncDeviceIdle = false;
|
||||
|
||||
Future<void> _loadConstraints() async {
|
||||
backgroundSyncNetworkUnmetered = await FlutterDaemon().getNetworkType();
|
||||
backgroundSyncBatteryNotLow = await FlutterDaemon().getBatteryNotLow();
|
||||
backgroundSyncCharging = await FlutterDaemon().getRequiresCharging();
|
||||
backgroundSyncDeviceIdle = await FlutterDaemon().getDeviceIdle();
|
||||
}
|
||||
|
||||
@action
|
||||
Future<void> setBackgroundSyncNetworkUnmetered(bool value) async {
|
||||
backgroundSyncNetworkUnmetered = value;
|
||||
await FlutterDaemon().setNetworkType(value);
|
||||
if (await isBackgroundSyncEnabled()) {
|
||||
await enableBackgroundSync();
|
||||
}
|
||||
}
|
||||
|
||||
@action
|
||||
Future<void> setBackgroundSyncBatteryNotLow(bool value) async {
|
||||
backgroundSyncBatteryNotLow = value;
|
||||
await FlutterDaemon().setBatteryNotLow(value);
|
||||
if (await isBackgroundSyncEnabled()) {
|
||||
await enableBackgroundSync();
|
||||
}
|
||||
}
|
||||
|
||||
@action
|
||||
Future<void> setBackgroundSyncCharging(bool value) async {
|
||||
backgroundSyncCharging = value;
|
||||
await FlutterDaemon().setRequiresCharging(value);
|
||||
if (await isBackgroundSyncEnabled()) {
|
||||
await enableBackgroundSync();
|
||||
}
|
||||
}
|
||||
|
||||
@action
|
||||
Future<void> setBackgroundSyncDeviceIdle(bool value) async {
|
||||
backgroundSyncDeviceIdle = value;
|
||||
await FlutterDaemon().setDeviceIdle(value);
|
||||
if (await isBackgroundSyncEnabled()) {
|
||||
await enableBackgroundSync();
|
||||
}
|
||||
}
|
||||
|
||||
bool get hasBatteryOptimization => Platform.isAndroid;
|
||||
|
||||
@observable
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue