Show explicit geofence permission status
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
enum NotificationPermissionStatus {
|
||||
enabled,
|
||||
disabled,
|
||||
unsupported;
|
||||
|
||||
static NotificationPermissionStatus fromPlatformValue(String? value) {
|
||||
return switch (value) {
|
||||
'enabled' => NotificationPermissionStatus.enabled,
|
||||
'disabled' => NotificationPermissionStatus.disabled,
|
||||
_ => NotificationPermissionStatus.unsupported,
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:geolocator/geolocator.dart';
|
||||
|
||||
@@ -5,6 +6,7 @@ import '../../homes/providers/homes_providers.dart';
|
||||
import '../../shared/providers/core_providers.dart';
|
||||
import '../models/app_theme_preset.dart';
|
||||
import '../models/geofence_system_state.dart';
|
||||
import '../models/notification_permission_status.dart';
|
||||
|
||||
final initialAppThemePresetProvider = Provider<AppThemePreset>(
|
||||
(ref) => AppThemePreset.fallback,
|
||||
@@ -87,3 +89,45 @@ final geofenceSystemStatusProvider = FutureProvider<GeofenceSystemState>((
|
||||
hasCoordinates: currentHome?.hasCoordinates == true,
|
||||
);
|
||||
});
|
||||
|
||||
abstract class NotificationPermissionStatusService {
|
||||
Future<NotificationPermissionStatus> inspect();
|
||||
|
||||
Future<void> openSettings();
|
||||
}
|
||||
|
||||
class DeviceNotificationPermissionStatusService
|
||||
implements NotificationPermissionStatusService {
|
||||
static const _channel = MethodChannel('ignis/geofence_automation');
|
||||
|
||||
@override
|
||||
Future<NotificationPermissionStatus> inspect() async {
|
||||
try {
|
||||
final value = await _channel.invokeMethod<String>(
|
||||
'getNotificationPermissionStatus',
|
||||
);
|
||||
return NotificationPermissionStatus.fromPlatformValue(value);
|
||||
} on MissingPluginException {
|
||||
return NotificationPermissionStatus.unsupported;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> openSettings() async {
|
||||
try {
|
||||
await _channel.invokeMethod<void>('openNotificationSettings');
|
||||
} on MissingPluginException {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final notificationPermissionStatusServiceProvider =
|
||||
Provider<NotificationPermissionStatusService>(
|
||||
(ref) => DeviceNotificationPermissionStatusService(),
|
||||
);
|
||||
|
||||
final notificationPermissionStatusProvider =
|
||||
FutureProvider<NotificationPermissionStatus>((ref) async {
|
||||
return ref.watch(notificationPermissionStatusServiceProvider).inspect();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user