TF-2877 Create notification data source & repo

This commit is contained in:
DatDang
2024-06-04 10:02:19 +07:00
committed by Dat H. Pham
parent 2652a99e0e
commit b89820618c
16 changed files with 550 additions and 2 deletions
@@ -0,0 +1,7 @@
import 'package:jmap_dart_client/jmap/core/user_name.dart';
abstract class NotificationDataSource {
Future<bool> getNotificationSetting(UserName userName);
Future<void> toggleNotificationSetting();
}
@@ -0,0 +1,42 @@
import 'package:app_settings/app_settings.dart';
import 'package:core/utils/platform_info.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:tmail_ui_user/features/manage_account/data/datasource/notification_datasource.dart';
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
import 'package:tmail_ui_user/main/permissions/notification_permission_service.dart';
class NotificationDataSourceImpl implements NotificationDataSource {
final NotificationPermissionService _permissionService;
final ExceptionThrower _exceptionThrower;
NotificationDataSourceImpl(
this._permissionService,
this._exceptionThrower);
@override
Future<bool> getNotificationSetting(UserName userName) {
return Future.sync(() async {
if (PlatformInfo.isIOS) {
return await _checkIosNotificationPermissionEnabled();
} else {
return await _checkAndroidNotificationPermissionEnabled(userName);
}
}).catchError(_exceptionThrower.throwException);
}
@override
Future<void> toggleNotificationSetting() async {
return Future.sync(() async {
return await AppSettings.openAppSettings(type: AppSettingsType.notification);
}).catchError(_exceptionThrower.throwException);
}
Future<bool> _checkIosNotificationPermissionEnabled() {
return _permissionService.isGranted(Permission.notification);
}
Future<bool> _checkAndroidNotificationPermissionEnabled(UserName userName) {
return _permissionService.checkNotificationPermissionEnabled(userName.value);
}
}
@@ -0,0 +1,19 @@
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:tmail_ui_user/features/manage_account/data/datasource/notification_datasource.dart';
import 'package:tmail_ui_user/features/manage_account/domain/repository/notification_repository.dart';
class NotificationRepositoryImpl implements NotificationRepository {
final NotificationDataSource _notificationDataSource;
NotificationRepositoryImpl(this._notificationDataSource);
@override
Future<bool> getNotificationSetting(UserName userName) {
return _notificationDataSource.getNotificationSetting(userName);
}
@override
Future<void> toggleNotificationSetting() {
return _notificationDataSource.toggleNotificationSetting();
}
}
@@ -0,0 +1,7 @@
import 'package:jmap_dart_client/jmap/core/user_name.dart';
abstract class NotificationRepository {
Future<bool> getNotificationSetting(UserName userName);
Future<void> toggleNotificationSetting();
}