ask user to disable battery optimizations when turning on background backup (#554)

* ask user to disable battery optimizations when turning on background backup

* remove obsolete texts/translations

* add button link to dontkillmyapp
This commit is contained in:
Fynn Petersen-Frey 2022-08-31 15:08:40 +02:00 committed by GitHub
parent 5172242f88
commit 75d2d82d05
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 58 additions and 33 deletions

View file

@ -122,8 +122,8 @@ class BackgroundService {
}
}
/// Opens an activity to let the user disable battery optimizations for Immich
Future<bool> disableBatteryOptimizations() async {
/// Returns `true` if battery optimizations are disabled
Future<bool> isIgnoringBatteryOptimizations() async {
if (!Platform.isAndroid) {
return true;
}
@ -131,12 +131,8 @@ class BackgroundService {
if (!_isForegroundInitialized) {
await _initialize();
}
final String message =
"backup_background_service_disable_battery_optimizations".tr();
return await _foregroundChannel.invokeMethod(
'disableBatteryOptimizations',
message,
);
return await _foregroundChannel
.invokeMethod('isIgnoringBatteryOptimizations');
} catch (error) {
return false;
}

View file

@ -117,6 +117,7 @@ class BackupNotifier extends StateNotifier<BackUpState> {
bool? requireWifi,
bool? requireCharging,
required void Function(String msg) onError,
required void Function() onBatteryInfo,
}) async {
assert(enabled != null || requireWifi != null || requireCharging != null);
if (Platform.isAndroid) {
@ -131,7 +132,9 @@ class BackupNotifier extends StateNotifier<BackUpState> {
if (state.backgroundBackup) {
if (!wasEnabled) {
await _backgroundService.disableBatteryOptimizations();
if (!await _backgroundService.isIgnoringBatteryOptimizations()) {
onBatteryInfo();
}
}
final bool success = await _backgroundService.stopService() &&
await _backgroundService.startService(

View file

@ -14,6 +14,7 @@ import 'package:immich_mobile/routing/router.dart';
import 'package:immich_mobile/shared/providers/websocket.provider.dart';
import 'package:immich_mobile/modules/backup/ui/backup_info_card.dart';
import 'package:percent_indicator/linear_percent_indicator.dart';
import 'package:url_launcher/url_launcher.dart';
class BackupControllerPage extends HookConsumerWidget {
const BackupControllerPage({Key? key}) : super(key: key);
@ -156,6 +157,46 @@ class BackupControllerPage extends HookConsumerWidget {
ScaffoldMessenger.of(context).showSnackBar(snackBar);
}
void _showBatteryOptimizationInfoToUser() {
final buttonTextColor = Theme.of(context).primaryColor;
showDialog<void>(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return AlertDialog(
title: const Text(
'backup_controller_page_background_battery_info_title',
).tr(),
content: SingleChildScrollView(
child: const Text(
'backup_controller_page_background_battery_info_message',
).tr(),
),
actions: [
TextButton(
onPressed: () => launchUrl(
Uri.parse('https://dontkillmyapp.com'),
mode: LaunchMode.externalApplication),
child: Text(
"backup_controller_page_background_battery_info_link",
style: TextStyle(color: buttonTextColor),
).tr(),
),
TextButton(
child: Text(
'backup_controller_page_background_battery_info_ok',
style: TextStyle(color: buttonTextColor),
).tr(),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
ListTile _buildBackgroundBackupController() {
final bool isBackgroundEnabled = backupState.backgroundBackup;
final bool isWifiRequired = backupState.backupRequireWifi;
@ -197,6 +238,7 @@ class BackupControllerPage extends HookConsumerWidget {
.configureBackgroundBackup(
requireWifi: isChecked,
onError: _showErrorToUser,
onBatteryInfo: _showBatteryOptimizationInfoToUser,
)
: null,
),
@ -217,6 +259,7 @@ class BackupControllerPage extends HookConsumerWidget {
.configureBackgroundBackup(
requireCharging: isChecked,
onError: _showErrorToUser,
onBatteryInfo: _showBatteryOptimizationInfoToUser,
)
: null,
),
@ -225,6 +268,7 @@ class BackupControllerPage extends HookConsumerWidget {
ref.read(backupProvider.notifier).configureBackgroundBackup(
enabled: !isBackgroundEnabled,
onError: _showErrorToUser,
onBatteryInfo: _showBatteryOptimizationInfoToUser,
),
child: Text(
isBackgroundEnabled