TF-60 Add presentation get device contact suggestion
This commit is contained in:
@@ -5,17 +5,23 @@ import 'package:get/get.dart';
|
|||||||
import 'package:html_editor_enhanced/html_editor.dart';
|
import 'package:html_editor_enhanced/html_editor.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/data/datasource/autocomplete_datasource.dart';
|
import 'package:tmail_ui_user/features/composer/data/datasource/autocomplete_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/data/datasource/composer_datasource.dart';
|
import 'package:tmail_ui_user/features/composer/data/datasource/composer_datasource.dart';
|
||||||
|
import 'package:tmail_ui_user/features/composer/data/datasource/contact_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/data/datasource_impl/autocomplete_datasource_impl.dart';
|
import 'package:tmail_ui_user/features/composer/data/datasource_impl/autocomplete_datasource_impl.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/data/datasource_impl/composer_datasource_impl.dart';
|
import 'package:tmail_ui_user/features/composer/data/datasource_impl/composer_datasource_impl.dart';
|
||||||
|
import 'package:tmail_ui_user/features/composer/data/datasource_impl/contact_datasource_impl.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/data/datasource_impl/local_autocomplete_datasource_impl.dart';
|
import 'package:tmail_ui_user/features/composer/data/datasource_impl/local_autocomplete_datasource_impl.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/data/datasource_impl/local_composer_datasource_impl.dart';
|
import 'package:tmail_ui_user/features/composer/data/datasource_impl/local_composer_datasource_impl.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/data/local/email_address_database_manager.dart';
|
import 'package:tmail_ui_user/features/composer/data/local/email_address_database_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/data/repository/auto_complete_repository_impl.dart';
|
import 'package:tmail_ui_user/features/composer/data/repository/auto_complete_repository_impl.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/data/repository/composer_repository_impl.dart';
|
import 'package:tmail_ui_user/features/composer/data/repository/composer_repository_impl.dart';
|
||||||
|
import 'package:tmail_ui_user/features/composer/data/repository/contact_repository_impl.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/repository/auto_complete_repository.dart';
|
import 'package:tmail_ui_user/features/composer/domain/repository/auto_complete_repository.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/repository/composer_repository.dart';
|
import 'package:tmail_ui_user/features/composer/domain/repository/composer_repository.dart';
|
||||||
|
import 'package:tmail_ui_user/features/composer/domain/repository/contact_repository.dart';
|
||||||
|
import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_with_device_contact_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/composer/domain/usecases/get_device_contact_suggestions_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/usecases/save_email_addresses_interactor.dart';
|
import 'package:tmail_ui_user/features/composer/domain/usecases/save_email_addresses_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/usecases/search_email_address_interactor.dart';
|
import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart';
|
import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
|
||||||
@@ -43,14 +49,23 @@ class ComposerBindings extends Bindings {
|
|||||||
DataSourceType.local: Get.find<LocalAutoCompleteDataSourceImpl>(),
|
DataSourceType.local: Get.find<LocalAutoCompleteDataSourceImpl>(),
|
||||||
}));
|
}));
|
||||||
Get.lazyPut<AutoCompleteRepository>(() => Get.find<AutoCompleteRepositoryImpl>());
|
Get.lazyPut<AutoCompleteRepository>(() => Get.find<AutoCompleteRepositoryImpl>());
|
||||||
Get.lazyPut(() => SearchEmailAddressInteractor(Get.find<AutoCompleteRepository>()));
|
Get.lazyPut(() => GetAutoCompleteInteractor(Get.find<AutoCompleteRepository>()));
|
||||||
Get.lazyPut(() => Uuid());
|
Get.lazyPut(() => Uuid());
|
||||||
Get.lazyPut(() => HtmlEditorController());
|
Get.lazyPut(() => HtmlEditorController());
|
||||||
Get.lazyPut(() => TextEditingController());
|
Get.lazyPut(() => TextEditingController());
|
||||||
|
Get.lazyPut(() => ContactDataSourceImpl());
|
||||||
|
Get.lazyPut<ContactDataSource>(() => Get.find<ContactDataSourceImpl>());
|
||||||
|
Get.lazyPut(() => ContactRepositoryImpl(Get.find<ContactDataSource>()));
|
||||||
|
Get.lazyPut<ContactRepository>(() => Get.find<ContactRepositoryImpl>());
|
||||||
|
Get.lazyPut(() => GetDeviceContactSuggestionsInteractor(Get.find<ContactRepository>()));
|
||||||
|
Get.lazyPut(() => GetAutoCompleteWithDeviceContactInteractor(
|
||||||
|
Get.find<GetAutoCompleteInteractor>(),
|
||||||
|
Get.find<GetDeviceContactSuggestionsInteractor>()));
|
||||||
Get.lazyPut(() => ComposerController(
|
Get.lazyPut(() => ComposerController(
|
||||||
Get.find<SendEmailInteractor>(),
|
Get.find<SendEmailInteractor>(),
|
||||||
Get.find<SaveEmailAddressesInteractor>(),
|
Get.find<SaveEmailAddressesInteractor>(),
|
||||||
Get.find<SearchEmailAddressInteractor>(),
|
Get.find<GetAutoCompleteInteractor>(),
|
||||||
|
Get.find<GetAutoCompleteWithDeviceContactInteractor>(),
|
||||||
Get.find<AppToast>(),
|
Get.find<AppToast>(),
|
||||||
Get.find<Uuid>(),
|
Get.find<Uuid>(),
|
||||||
Get.find<HtmlEditorController>(),
|
Get.find<HtmlEditorController>(),
|
||||||
|
|||||||
@@ -15,12 +15,15 @@ import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/mail/email/email_body_part.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email_body_part.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email_body_value.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email_body_value.dart';
|
||||||
import 'package:model/model.dart';
|
import 'package:model/model.dart';
|
||||||
|
import 'package:permission_handler/permission_handler.dart';
|
||||||
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/auto_complete_pattern.dart';
|
import 'package:tmail_ui_user/features/composer/domain/model/auto_complete_pattern.dart';
|
||||||
|
import 'package:tmail_ui_user/features/composer/domain/model/contact_suggestion_source.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/state/search_email_address_state.dart';
|
import 'package:tmail_ui_user/features/composer/domain/state/get_autocomplete_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_with_device_contact_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/usecases/save_email_addresses_interactor.dart';
|
import 'package:tmail_ui_user/features/composer/domain/usecases/save_email_addresses_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/domain/usecases/search_email_address_interactor.dart';
|
|
||||||
import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart';
|
import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/constants/email_constants.dart';
|
import 'package:tmail_ui_user/features/email/presentation/constants/email_constants.dart';
|
||||||
@@ -39,7 +42,8 @@ class ComposerController extends BaseController {
|
|||||||
|
|
||||||
final SendEmailInteractor _sendEmailInteractor;
|
final SendEmailInteractor _sendEmailInteractor;
|
||||||
final SaveEmailAddressesInteractor _saveEmailAddressInteractor;
|
final SaveEmailAddressesInteractor _saveEmailAddressInteractor;
|
||||||
final SearchEmailAddressInteractor _searchEmailAddressInteractor;
|
final GetAutoCompleteInteractor _getAutoCompleteInteractor;
|
||||||
|
final GetAutoCompleteWithDeviceContactInteractor _getAutoCompleteWithDeviceContactInteractor;
|
||||||
final AppToast _appToast;
|
final AppToast _appToast;
|
||||||
final Uuid _uuid;
|
final Uuid _uuid;
|
||||||
final HtmlEditorController composerEditorController;
|
final HtmlEditorController composerEditorController;
|
||||||
@@ -50,13 +54,15 @@ class ComposerController extends BaseController {
|
|||||||
List<EmailAddress> listCcEmailAddress = [];
|
List<EmailAddress> listCcEmailAddress = [];
|
||||||
List<EmailAddress> listBccEmailAddress = [];
|
List<EmailAddress> listBccEmailAddress = [];
|
||||||
String? _subjectEmail;
|
String? _subjectEmail;
|
||||||
|
ContactSuggestionSource _contactSuggestionSource = ContactSuggestionSource.localContact;
|
||||||
|
|
||||||
void setSubjectEmail(String subject) => _subjectEmail = subject;
|
void setSubjectEmail(String subject) => _subjectEmail = subject;
|
||||||
|
|
||||||
ComposerController(
|
ComposerController(
|
||||||
this._sendEmailInteractor,
|
this._sendEmailInteractor,
|
||||||
this._saveEmailAddressInteractor,
|
this._saveEmailAddressInteractor,
|
||||||
this._searchEmailAddressInteractor,
|
this._getAutoCompleteInteractor,
|
||||||
|
this._getAutoCompleteWithDeviceContactInteractor,
|
||||||
this._appToast,
|
this._appToast,
|
||||||
this._uuid,
|
this._uuid,
|
||||||
this.composerEditorController,
|
this.composerEditorController,
|
||||||
@@ -68,7 +74,8 @@ class ComposerController extends BaseController {
|
|||||||
void onReady() async {
|
void onReady() async {
|
||||||
super.onReady();
|
super.onReady();
|
||||||
_getSelectedEmail();
|
_getSelectedEmail();
|
||||||
await searchEmailAddressSuggestion('');
|
|
||||||
|
Future.delayed(Duration(milliseconds: 500), () => _checkContactPermission());
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -274,11 +281,29 @@ class ComposerController extends BaseController {
|
|||||||
_saveEmailAddressInteractor.execute(listEmailAddressCanSave.toList());
|
_saveEmailAddressInteractor.execute(listEmailAddressCanSave.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<List<EmailAddress>> searchEmailAddressSuggestion(String word) async {
|
void _checkContactPermission() async {
|
||||||
return await _searchEmailAddressInteractor.execute(AutoCompletePattern(word: word))
|
final permissionStatus = await Permission.contacts.status;
|
||||||
|
if (permissionStatus.isGranted) {
|
||||||
|
_contactSuggestionSource = ContactSuggestionSource.all;
|
||||||
|
} else if (!permissionStatus.isPermanentlyDenied) {
|
||||||
|
final requestedPermission = await Permission.contacts.request();
|
||||||
|
_contactSuggestionSource = requestedPermission == PermissionStatus.granted
|
||||||
|
? ContactSuggestionSource.all
|
||||||
|
: _contactSuggestionSource;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<EmailAddress>> getAutoCompleteSuggestion(String word) async {
|
||||||
|
if (_contactSuggestionSource == ContactSuggestionSource.all) {
|
||||||
|
return await _getAutoCompleteWithDeviceContactInteractor.execute(AutoCompletePattern(word: word))
|
||||||
|
.then((value) => value.fold(
|
||||||
|
(failure) => <EmailAddress>[],
|
||||||
|
(success) => success is GetAutoCompleteSuccess ? success.listEmailAddress : <EmailAddress>[]));
|
||||||
|
}
|
||||||
|
return await _getAutoCompleteInteractor.execute(AutoCompletePattern(word: word))
|
||||||
.then((value) => value.fold(
|
.then((value) => value.fold(
|
||||||
(failure) => [],
|
(failure) => <EmailAddress>[],
|
||||||
(success) => success is SearchEmailAddressSuccess ? success.listEmailAddress : []));
|
(success) => success is GetAutoCompleteSuccess ? success.listEmailAddress : <EmailAddress>[]));
|
||||||
}
|
}
|
||||||
|
|
||||||
void backToEmailViewAction() {
|
void backToEmailViewAction() {
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ class ComposerView extends GetWidget<ComposerController> {
|
|||||||
controller.composerArguments.value?.userProfile)
|
controller.composerArguments.value?.userProfile)
|
||||||
..addExpandAddressActionClick(() => controller.expandEmailAddressAction())
|
..addExpandAddressActionClick(() => controller.expandEmailAddressAction())
|
||||||
..addOnUpdateListEmailAddressAction((prefixEmailAddress, listEmailAddress) => controller.updateListEmailAddress(prefixEmailAddress, listEmailAddress))
|
..addOnUpdateListEmailAddressAction((prefixEmailAddress, listEmailAddress) => controller.updateListEmailAddress(prefixEmailAddress, listEmailAddress))
|
||||||
..addOnSuggestionEmailAddress((word) => controller.searchEmailAddressSuggestion(word)))
|
..addOnSuggestionEmailAddress((word) => controller.getAutoCompleteSuggestion(word)))
|
||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user