diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index 65b74d7..e83c3bf 100644 --- a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1 +1,128 @@ -{"images":[{"size":"60x60","expected-size":"180","filename":"180.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"40x40","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"60x60","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"57x57","expected-size":"57","filename":"57.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"57x57","expected-size":"114","filename":"114.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"60","filename":"60.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"1024x1024","filename":"1024.png","expected-size":"1024","idiom":"ios-marketing","folder":"Assets.xcassets/AppIcon.appiconset/","scale":"1x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"72x72","expected-size":"72","filename":"72.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"76x76","expected-size":"152","filename":"152.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"50x50","expected-size":"100","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"76x76","expected-size":"76","filename":"76.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"50x50","expected-size":"50","filename":"50.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"72x72","expected-size":"144","filename":"144.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"40x40","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"83.5x83.5","expected-size":"167","filename":"167.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"20x20","expected-size":"20","filename":"20.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"}]} \ No newline at end of file +{ + "images":[ + { + "idiom":"iphone", + "size":"20x20", + "scale":"2x", + "filename":"Icon-App-20x20@2x.png" + }, + { + "idiom":"iphone", + "size":"20x20", + "scale":"3x", + "filename":"Icon-App-20x20@3x.png" + }, + { + "idiom":"iphone", + "size":"29x29", + "scale":"1x", + "filename":"Icon-App-29x29@1x.png" + }, + { + "idiom":"iphone", + "size":"29x29", + "scale":"2x", + "filename":"Icon-App-29x29@2x.png" + }, + { + "idiom":"iphone", + "size":"29x29", + "scale":"3x", + "filename":"Icon-App-29x29@3x.png" + }, + { + "idiom":"iphone", + "size":"40x40", + "scale":"2x", + "filename":"Icon-App-40x40@2x.png" + }, + { + "idiom":"iphone", + "size":"40x40", + "scale":"3x", + "filename":"Icon-App-40x40@3x.png" + }, + { + "idiom":"iphone", + "size":"60x60", + "scale":"2x", + "filename":"Icon-App-60x60@2x.png" + }, + { + "idiom":"iphone", + "size":"60x60", + "scale":"3x", + "filename":"Icon-App-60x60@3x.png" + }, + { + "idiom":"iphone", + "size":"76x76", + "scale":"2x", + "filename":"Icon-App-76x76@2x.png" + }, + { + "idiom":"ipad", + "size":"20x20", + "scale":"1x", + "filename":"Icon-App-20x20@1x.png" + }, + { + "idiom":"ipad", + "size":"20x20", + "scale":"2x", + "filename":"Icon-App-20x20@2x.png" + }, + { + "idiom":"ipad", + "size":"29x29", + "scale":"1x", + "filename":"Icon-App-29x29@1x.png" + }, + { + "idiom":"ipad", + "size":"29x29", + "scale":"2x", + "filename":"Icon-App-29x29@2x.png" + }, + { + "idiom":"ipad", + "size":"40x40", + "scale":"1x", + "filename":"Icon-App-40x40@1x.png" + }, + { + "idiom":"ipad", + "size":"40x40", + "scale":"2x", + "filename":"Icon-App-40x40@2x.png" + }, + { + "idiom":"ipad", + "size":"76x76", + "scale":"1x", + "filename":"Icon-App-76x76@1x.png" + }, + { + "idiom":"ipad", + "size":"76x76", + "scale":"2x", + "filename":"Icon-App-76x76@2x.png" + }, + { + "idiom":"ipad", + "size":"83.5x83.5", + "scale":"2x", + "filename":"Icon-App-83.5x83.5@2x.png" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "scale" : "1x", + "filename" : "ItunesArtwork@2x.png" + } + ], + "info":{ + "version":1, + "author":"easyappicon" + } +} diff --git a/lib/api/chat/chat_api_client.dart b/lib/api/chat/chat_api_client.dart index b4c0a2c..f727c7d 100644 --- a/lib/api/chat/chat_api_client.dart +++ b/lib/api/chat/chat_api_client.dart @@ -31,7 +31,8 @@ class ChatApiClient { "employeeNumber": AppState().memberInformationList!.eMPLOYEENUMBER.toString(), "password": "FxIu26rWIKoF8n6mpbOmAjDLphzFGmpG", "isMobile": true, - "deviceToken": AppState().getDeviceToken, + "deviceToken":AppState().getIsHuawei ? AppState().getHuaweiPushToken : AppState().getDeviceToken, + "isHuaweiDevice": AppState().getIsHuawei, }, ); diff --git a/lib/api/login_api_client.dart b/lib/api/login_api_client.dart index e7e160f..7da7754 100644 --- a/lib/api/login_api_client.dart +++ b/lib/api/login_api_client.dart @@ -60,7 +60,7 @@ class LoginApiClient { Future memberLogin(String username, String password) async { String url = "${ApiConsts.erpRest}MemberLogin"; - Map postParams = {"P_APP_VERSION": "HMG", "P_LANGUAGE": "US", "P_PASSWORD": password, "P_USER_NAME": username}; + Map postParams = {"P_APP_VERSION": "CS", "P_LANGUAGE": "US", "P_PASSWORD": password, "P_USER_NAME": username}; postParams.addAll(AppState().postParamsJson); return await ApiClient().postJsonForObject((json) { GenericResponseModel responseData = GenericResponseModel.fromJson(json); diff --git a/lib/api/marathon/marathon_api_client.dart b/lib/api/marathon/marathon_api_client.dart index ee3810f..9497b48 100644 --- a/lib/api/marathon/marathon_api_client.dart +++ b/lib/api/marathon/marathon_api_client.dart @@ -34,6 +34,20 @@ class MarathonApiClient { ); } + Future getMarathonersCount({required String marathonId}) async { + Response response = await ApiClient().getJsonForResponse( + ApiConsts.marathonGetMarathonersCount + '?marathonId=$marathonId', + token: AppState().getMarathonToken == null || AppState().getMarathonToken == "" ? await getMarathonToken() : AppState().getMarathonToken, + ); + + var json = jsonDecode(response.body); + logger.i("json in getMarathonersCount: $json"); + + MarathonGenericModel marathonGenericModel = MarathonGenericModel.fromJson(json); + + return marathonGenericModel.data as int; + } + Future getProjectId() async { return await ApiClient().postJsonForObject( (json) { @@ -89,6 +103,7 @@ class MarathonApiClient { ); } + Future getNextQuestion({required String? questionId, required String marathonId}) async { Map jsonObject = { "previousQuestionId": questionId, diff --git a/lib/api/profile_api_client.dart b/lib/api/profile_api_client.dart index 1f6108b..6a8cfb0 100644 --- a/lib/api/profile_api_client.dart +++ b/lib/api/profile_api_client.dart @@ -166,7 +166,7 @@ class ProfileApiClient { ], "P_CONTACT_RELATIONSHIP_ID": contactRelationId, "P_ACTION": actionType, - "PayrollCodeStr": AppState().postParamsObject?.payrollCodeStr, + "PayrollCodeStr": "CS", "LegislationCodeStr": "SA", }; postParams.addAll(AppState().postParamsJson); diff --git a/lib/app_state/app_state.dart b/lib/app_state/app_state.dart index 598960d..2395bc1 100644 --- a/lib/app_state/app_state.dart +++ b/lib/app_state/app_state.dart @@ -88,7 +88,7 @@ class AppState { String get getHuaweiPushToken => _huaweiPushToken; - final PostParamsModel _postParamsInitConfig = PostParamsModel(channel: 33, versionID: 4.2, mobileType: Platform.isAndroid ? "android" : "ios"); + final PostParamsModel _postParamsInitConfig = PostParamsModel(channel: 31, versionID: 4.3, mobileType: Platform.isAndroid ? "android" : "ios"); void setPostParamsInitConfig() { isAuthenticated = false; diff --git a/lib/classes/consts.dart b/lib/classes/consts.dart index 96fd4b0..688fd70 100644 --- a/lib/classes/consts.dart +++ b/lib/classes/consts.dart @@ -37,6 +37,7 @@ class ApiConsts { static String marathonSubmitAnswerUrl = marathonBaseUrl + "question/submit"; static String marathonQualifiersUrl = marathonBaseUrl + "winner/getWinner/"; static String marathonSelectedWinner = marathonBaseUrl + "winner/getSelectedWinner/"; + static String marathonGetMarathonersCount = marathonBaseUrl + "Participant/GetRemainingParticipants"; //DummyCards for the UI static CardContent dummyQuestion = const CardContent(); diff --git a/lib/classes/notifications.dart b/lib/classes/notifications.dart index 0b9041b..f714662 100644 --- a/lib/classes/notifications.dart +++ b/lib/classes/notifications.dart @@ -100,9 +100,7 @@ class AppNotifications { debugPrint("HUAWEI PUSH TOKEN: $_huaweiToken"); } - void _onTokenError(Object error) { - print("TOKEN ERROOORRRRR!!!!:"); - } + void _onTokenError(Object error) {} Future initTokenStream(Function loginCallback) async { huawei_push.Push.getTokenStream.listen(_onTokenEvent, onError: _onTokenError).onData((data) { diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart index 54ffe20..b9e1acd 100644 --- a/lib/extensions/string_extensions.dart +++ b/lib/extensions/string_extensions.dart @@ -22,6 +22,17 @@ extension TrimString on String { } } +String displayLocalizedContent({required bool isPhoneLangArabic,required int selectedLanguage,required String englishContent,required String arabicContent}) { + if (selectedLanguage == 1) { + return englishContent; + } else if (selectedLanguage == 2) { + return arabicContent; + } else if (selectedLanguage == 3) { + return isPhoneLangArabic ? arabicContent : englishContent; + } + return englishContent; +} + extension EmailValidator on String { Widget get toWidget => Text(this); diff --git a/lib/ui/app_update_screen.dart b/lib/ui/app_update_screen.dart index b35b233..4a769c3 100644 --- a/lib/ui/app_update_screen.dart +++ b/lib/ui/app_update_screen.dart @@ -38,7 +38,7 @@ class _UnsafeDeviceScreenState extends State { 21.height, DefaultButton(LocaleKeys.ok.tr(), () async { if (Platform.isAndroid || Platform.isIOS) { - var appId = Platform.isAndroid ? 'com.cloudsolutions.alhabibmohemm' : '1480157255'; + var appId = Platform.isAndroid ? 'hmg.cloudSolutions.mohem' : '1468856602'; var url = Uri.parse( Platform.isAndroid ? "market://details?id=$appId" : "https://apps.apple.com/app/id$appId", ); diff --git a/lib/ui/dialogs/id/business_card_dialog.dart b/lib/ui/dialogs/id/business_card_dialog.dart index 1d76471..141abbd 100644 --- a/lib/ui/dialogs/id/business_card_dialog.dart +++ b/lib/ui/dialogs/id/business_card_dialog.dart @@ -14,7 +14,7 @@ class BusinessCardDialog extends StatelessWidget { child: Container( // width: MediaQuery.of(context).size.height / 2, color: Colors.white, - margin: EdgeInsets.all(12), + margin: EdgeInsets.all(21), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, @@ -30,11 +30,11 @@ class BusinessCardDialog extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.start, children: [ Image.asset( - "assets/images/logos/bn_hmg_logo.png", - width: 120, - height: 120, + "assets/images/logos/bn_cloud_soloution.jpg", + width: 80, + height: 80, ), - // 12.height, + 12.height, (AppState().memberInformationList!.eMPLOYEENAME ?? "").toText20(isBold: true), ], ), diff --git a/lib/ui/landing/dashboard_screen.dart b/lib/ui/landing/dashboard_screen.dart index dda6227..ed064ac 100644 --- a/lib/ui/landing/dashboard_screen.dart +++ b/lib/ui/landing/dashboard_screen.dart @@ -18,7 +18,6 @@ import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/main.dart'; import 'package:mohem_flutter_app/models/offers_and_discounts/get_offers_list.dart'; -import 'package:mohem_flutter_app/models/privilege_list_model.dart'; import 'package:mohem_flutter_app/provider/chat_provider_model.dart'; import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; import 'package:mohem_flutter_app/ui/landing/widget/app_drawer.dart'; @@ -63,9 +62,7 @@ class _DashboardScreenState extends State with WidgetsBindingOb data = Provider.of(context, listen: false); marathonProvider = Provider.of(context, listen: false); cProvider = Provider.of(context, listen: false); - if (checkIfPrivilegedForChat()) { - _bHubCon(); - } + _bHubCon(); _onRefresh(true); }); } @@ -133,6 +130,11 @@ class _DashboardScreenState extends State with WidgetsBindingOb void _onRefresh(bool isFromInit) async { data.initProvider(); + // data.getITGNotification().then((value) { + // print("--------------------detail_1-----------------"); + // print(value!.result!.data!.notificationMasterId); + // print(value.result!.data!.notificationTitle); + // }); data.fetchListMenu(); data.fetchAttendanceTracking(context); data.fetchWorkListCounter(context); @@ -141,7 +143,7 @@ class _DashboardScreenState extends State with WidgetsBindingOb data.fetchMenuEntries(); data.getCategoryOffersListAPI(context); marathonProvider.getMarathonDetailsFromApi(); - if (!cProvider.disbaleChatForThisUser && !isFromInit && checkIfPrivilegedForChat()) checkHubCon(); + if (!cProvider.disbaleChatForThisUser && !isFromInit) checkHubCon(); _refreshController.refreshCompleted(); } @@ -557,7 +559,7 @@ class _DashboardScreenState extends State with WidgetsBindingOb children: [ SvgPicture.asset( "assets/icons/chat/chat.svg", - color: !checkIfPrivilegedForChat() ? MyColors.lightGreyE3Color : currentIndex == 4 + color: currentIndex == 4 ? MyColors.grey3AColor : cProvider.disbaleChatForThisUser ? MyColors.lightGreyE3Color @@ -565,7 +567,7 @@ class _DashboardScreenState extends State with WidgetsBindingOb ).paddingAll(4), Consumer( builder: (BuildContext cxt, ChatProviderModel data, Widget? child) { - return !checkIfPrivilegedForChat() ? const SizedBox() : Positioned( + return Positioned( right: 0, top: 0, child: Container( @@ -598,7 +600,7 @@ class _DashboardScreenState extends State with WidgetsBindingOb } else if (index == 3) { Navigator.pushNamed(context, AppRoutes.itemsForSale); } else if (index == 4) { - if (!cProvider.disbaleChatForThisUser && checkIfPrivilegedForChat()) { + if (!cProvider.disbaleChatForThisUser) { Navigator.pushNamed(context, AppRoutes.chat); } } @@ -608,17 +610,6 @@ class _DashboardScreenState extends State with WidgetsBindingOb ); } - bool checkIfPrivilegedForChat() { - for (PrivilegeListModel element in AppState().privilegeListModel!) { - if (element.serviceName?.toLowerCase() == "chat") { - if (element.previlege != null) { - return element.previlege!; - } - } - } - return false; - } - void navigateToDetails(OffersListModel offersListModelObj) { List getOffersDetailList = []; getOffersDetailList.clear(); diff --git a/lib/ui/login/forgot_password_screen.dart b/lib/ui/login/forgot_password_screen.dart index 97c1d88..b2d5c92 100644 --- a/lib/ui/login/forgot_password_screen.dart +++ b/lib/ui/login/forgot_password_screen.dart @@ -43,7 +43,7 @@ class _ForgotPasswordScreenState extends State { } Utils.showLoading(context); try { - _basicMemberInformation = await LoginApiClient().getBasicUserInformation("HMG", employeeId.text); + _basicMemberInformation = await LoginApiClient().getBasicUserInformation("CS", employeeId.text); genericResponseModel = await LoginApiClient().sendPublicActivationCode(_basicMemberInformation?.pMOBILENUMBER, employeeId.text); Utils.hideLoading(context); OtpDialog( diff --git a/lib/ui/login/login_screen.dart b/lib/ui/login/login_screen.dart index 99b9edd..d1f9592 100644 --- a/lib/ui/login/login_screen.dart +++ b/lib/ui/login/login_screen.dart @@ -28,6 +28,7 @@ import 'package:mohem_flutter_app/models/member_login_list_model.dart'; import 'package:mohem_flutter_app/models/privilege_list_model.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/input_widget.dart'; + // import 'package:safe_device/safe_device.dart'; import 'package:wifi_iot/wifi_iot.dart'; @@ -113,12 +114,7 @@ class _LoginScreenState extends State { await FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true); } }); - } catch (ex) { - Utils.hideLoading(context); - checkLoginInfo(); - FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError; - await FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true); - } + } catch (ex) {} } else { await Firebase.initializeApp(); _firebaseMessaging = FirebaseMessaging.instance; diff --git a/lib/ui/marathon/marathon_intro_screen.dart b/lib/ui/marathon/marathon_intro_screen.dart index 9d4f81d..de1c356 100644 --- a/lib/ui/marathon/marathon_intro_screen.dart +++ b/lib/ui/marathon/marathon_intro_screen.dart @@ -17,7 +17,18 @@ class MarathonIntroScreen extends StatelessWidget { Widget build(BuildContext context) { MarathonProvider provider = context.watch(); return Scaffold( - appBar: AppBarWidget(context, title: LocaleKeys.brainMarathon.tr()), + appBar: AppBarWidget( + context, + title: LocaleKeys.brainMarathon.tr(), + onHomeTapped: () { + Navigator.pop(context); + context.setLocale(provider.savedLocale); + }, + onBackTapped: () { + Navigator.pop(context); + context.setLocale(provider.savedLocale); + }, + ), body: Column( children: [ ListView( diff --git a/lib/ui/marathon/marathon_provider.dart b/lib/ui/marathon/marathon_provider.dart index 34d8cc9..65b9353 100644 --- a/lib/ui/marathon/marathon_provider.dart +++ b/lib/ui/marathon/marathon_provider.dart @@ -1,7 +1,7 @@ import 'dart:async'; -import 'dart:developer'; import 'package:appinio_swiper/appinio_swiper.dart'; +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/marathon/demo_marathon_repo.dart'; @@ -32,7 +32,7 @@ class MarathonProvider extends ChangeNotifier { int? selectedOptionIndex; String? selectedOptionId; int? totalQualifiers; - + Locale savedLocale = const Locale("en", "US"); String? gapTimeImage; String? gapTimeText; int? gapTimeType; @@ -135,7 +135,6 @@ class MarathonProvider extends ChangeNotifier { late VideoPlayerController videoController; Future initializeVideoPlayer() async { - log("VIDEO PLAYER INITIALIZED!!!"); videoController = VideoPlayerController.network(ApiConsts.marathonBaseUrlServices + marathonDetailModel.sponsors!.first.video!); await videoController.initialize(); await videoController.play(); @@ -297,6 +296,18 @@ class MarathonProvider extends ChangeNotifier { //************************************************ FUNCTIONS ********************************************************** + void updateLanguageAsPerMarathon(BuildContext context, MarathonDetailModel detailModel) { + savedLocale = context.locale; + if (detailModel.selectedLanguage == 1) { + context.setLocale(const Locale("en", "US")); + } else if (detailModel.selectedLanguage == 2) { + context.setLocale(const Locale("ar", "SA")); + } else if (detailModel.selectedLanguage == 3) { + } else { + context.setLocale(const Locale("en", "US")); + } + } + Future callSubmitOptionApi() async { return await MarathonApiClient().submitSelectedOption(marathonId: marathonDetailModel.id!, questionId: currentQuestion.id, selectedAnswerId: selectedOptionId); } @@ -347,6 +358,7 @@ class MarathonProvider extends ChangeNotifier { } startTimerForQuestion(); updateCardData(); + totalMarathoners = await MarathonApiClient().getMarathonersCount(marathonId: marathonDetailModel.id!); Navigator.pushReplacementNamed(AppRoutes.navigatorKey.currentContext!, AppRoutes.marathonScreen); } else { currentQuestion = AppState().getIsDemoMarathon @@ -512,6 +524,7 @@ class MarathonProvider extends ChangeNotifier { answerStatusesList[i] = QuestionCardStatus.question; } } + AppRoutes.navigatorKey.currentContext!.setLocale(savedLocale); notifyListeners(); } diff --git a/lib/ui/marathon/marathon_screen.dart b/lib/ui/marathon/marathon_screen.dart index 22a15de..6dbbd18 100644 --- a/lib/ui/marathon/marathon_screen.dart +++ b/lib/ui/marathon/marathon_screen.dart @@ -78,7 +78,12 @@ class MarathonScreen extends StatelessWidget { 16.height, Column( children: [ - (AppState().isArabic(context) ? AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEAr : AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEEn)!.toText22( + displayLocalizedContent( + isPhoneLangArabic: AppState().isArabic(context), + selectedLanguage: provider.demoMarathonDetailModel.selectedLanguage!, + arabicContent: AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEAr!, + englishContent: AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEEn!, + ).toText22( color: MyColors.grey3AColor, isCentered: true, ), @@ -92,7 +97,12 @@ class MarathonScreen extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ "${LocaleKeys.sponsoredBy.tr()} ".toText14(color: MyColors.grey77Color), - (AppState().isArabic(context) ? provider.demoMarathonDetailModel.sponsors!.first.nameAr ?? "" : provider.demoMarathonDetailModel.sponsors!.first.nameEn ?? "").toText14( + displayLocalizedContent( + isPhoneLangArabic: AppState().isArabic(context), + selectedLanguage: provider.demoMarathonDetailModel.selectedLanguage!, + englishContent: provider.demoMarathonDetailModel.sponsors!.first.nameEn!, + arabicContent: provider.demoMarathonDetailModel.sponsors!.first.nameAr!, + ).toText14( color: MyColors.darkTextColor, isBold: true, ), @@ -160,7 +170,12 @@ class MarathonScreen extends StatelessWidget { provider.iAmWinner ? Column( children: [ - (AppState().isArabic(context) ? AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEAr : AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEEn)!.toText22( + displayLocalizedContent( + isPhoneLangArabic: AppState().isArabic(context), + selectedLanguage: provider.marathonDetailModel.selectedLanguage ?? 0, + arabicContent: AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEAr ?? "", + englishContent: AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEEn ?? "", + ).toText24( color: MyColors.grey3AColor, isCentered: true, ), @@ -170,10 +185,15 @@ class MarathonScreen extends StatelessWidget { ) : const SizedBox(), if (provider.selectedWinners != null) ...[ - provider.selectedWinners!.length == 1 + provider.selectedWinners!.length == 1 && !provider.iAmWinner ? Column( children: [ - (AppState().isArabic(context) ? provider.selectedWinners![0].nameEn : provider.selectedWinners![0].nameEn)!.toText24( + displayLocalizedContent( + isPhoneLangArabic: AppState().isArabic(context), + selectedLanguage: provider.marathonDetailModel.selectedLanguage ?? 0, + arabicContent: provider.selectedWinners![0].nameAr ?? "", + englishContent: provider.selectedWinners![0].nameEn ?? "", + ).toText24( color: MyColors.grey3AColor, isCentered: true, ), @@ -191,10 +211,15 @@ class MarathonScreen extends StatelessWidget { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - (AppState().isArabic(context) ? provider.selectedWinners![index].nameEn : provider.selectedWinners![index].nameEn)!.toText16( + displayLocalizedContent( + isPhoneLangArabic: AppState().isArabic(context), + selectedLanguage: provider.marathonDetailModel.selectedLanguage ?? 0, + arabicContent: provider.selectedWinners![index].nameAr ?? "", + englishContent: provider.selectedWinners![index].nameEn ?? "", + ).toText16( color: MyColors.grey3AColor, ), - provider.selectedWinners!.first.employeeId!.toText16(color: MyColors.grey57Color), + provider.selectedWinners![index].employeeId!.toText16(color: MyColors.grey57Color), ], ); }, @@ -206,7 +231,12 @@ class MarathonScreen extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ "${LocaleKeys.sponsoredBy.tr()} ".toText14(color: MyColors.grey77Color), - (AppState().isArabic(context) ? provider.marathonDetailModel.sponsors!.first.nameAr ?? "" : provider.marathonDetailModel.sponsors!.first.nameEn ?? "").toText14( + displayLocalizedContent( + isPhoneLangArabic: AppState().isArabic(context), + selectedLanguage: provider.marathonDetailModel.selectedLanguage!, + arabicContent: provider.marathonDetailModel.sponsors!.first.nameAr ?? "", + englishContent: provider.marathonDetailModel.sponsors!.first.nameEn ?? "", + ).toText14( color: MyColors.darkTextColor, isBold: true, ), @@ -231,7 +261,7 @@ class MarathonScreen extends StatelessWidget { ); } - Widget getNameContainer(BuildContext context) { + Widget getNameContainer(BuildContext context, MarathonProvider provider) { return Container( height: 50, padding: const EdgeInsets.symmetric(horizontal: 20), @@ -243,8 +273,12 @@ class MarathonScreen extends StatelessWidget { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - (AppState().isArabic(context) ? AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEAr! : AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEEn!) - .toText17(isBold: true, color: MyColors.white), + displayLocalizedContent( + isPhoneLangArabic: AppState().isArabic(context), + selectedLanguage: (!AppState().getIsDemoMarathon ? provider.marathonDetailModel.selectedLanguage : provider.demoMarathonDetailModel.selectedLanguage) ?? 0, + arabicContent: AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEAr ?? "", + englishContent: AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEEn ?? "", + ).toText17(isBold: true, color: MyColors.white), AppState().memberInformationList!.eMPLOYEENUMBER!.toText17(isBold: true, color: MyColors.white), ], ), @@ -310,7 +344,7 @@ class MarathonScreen extends StatelessWidget { MarathonProgressContainer(provider: provider).paddingOnly(left: 21, right: 21), ], if (provider.questionCardStatus == QuestionCardStatus.findingWinner && !provider.isUserOutOfGame) ...[ - getNameContainer(context), + getNameContainer(context, provider), ], QuestionCardBuilder( onQuestion: (BuildContext context) => const QuestionCard(), diff --git a/lib/ui/marathon/widgets/marathon_banner.dart b/lib/ui/marathon/widgets/marathon_banner.dart index ecce777..536af9b 100644 --- a/lib/ui/marathon/widgets/marathon_banner.dart +++ b/lib/ui/marathon/widgets/marathon_banner.dart @@ -434,7 +434,12 @@ class MarathonBanner extends StatelessWidget { ), Flexible( child: Text( - (AppState().isArabic(context) ? provider.marathonDetailModel.titleAr ?? "" : provider.marathonDetailModel.titleEn ?? "").trimString(isTablet ? 25 : 15), + displayLocalizedContent( + isPhoneLangArabic: AppState().isArabic(context), + selectedLanguage: provider.marathonDetailModel.selectedLanguage ?? 0, + englishContent: provider.marathonDetailModel.titleEn ?? "", + arabicContent: provider.marathonDetailModel.titleAr ?? "", + ), overflow: TextOverflow.ellipsis, style: TextStyle( fontStyle: FontStyle.italic, @@ -525,10 +530,7 @@ class MarathonBanner extends StatelessWidget { ], ).onPress(() async { int remainingTimeInMinutes = DateTime.parse(provider.marathonDetailModel.startTime!).difference(DateTime.now()).inMinutes; - if (remainingTimeInMinutes > 5 && provider.marathonDetailModel.sponsors != null && provider.marathonDetailModel.sponsors!.isNotEmpty) { - log("IF CALLED!!!"); - log("Remaining Time: $remainingTimeInMinutes"); Utils.showLoading(context); try { await provider.initializeVideoPlayer().then((_) { @@ -537,20 +539,16 @@ class MarathonBanner extends StatelessWidget { Navigator.pushNamed(context, AppRoutes.marathonSponsorVideoScreen); }); } catch (e) { - // if (kDebugMode) { + if (kDebugMode) { log("Error in VideoPlayer: ${e.toString()}"); - // } + } Utils.hideLoading(context); - Navigator.pushNamed(context, AppRoutes.marathonIntroScreen).then((value) { - print("Back to home!!!"); - }); + Navigator.pushNamed(context, AppRoutes.marathonIntroScreen); } } else { - log("ELSE CALLED!!!"); - Navigator.pushNamed(context, AppRoutes.marathonIntroScreen).then((value) { - print("Back to home!!!"); - }); + Navigator.pushNamed(context, AppRoutes.marathonIntroScreen); } + provider.updateLanguageAsPerMarathon(context, provider.isUpComingMarathon ? provider.marathonDetailModel : provider.demoMarathonDetailModel); }), ) : getNoUpcomingMarathonWidget(context); diff --git a/lib/ui/marathon/widgets/marathon_details_card.dart b/lib/ui/marathon/widgets/marathon_details_card.dart index 11a3d84..65d6716 100644 --- a/lib/ui/marathon/widgets/marathon_details_card.dart +++ b/lib/ui/marathon/widgets/marathon_details_card.dart @@ -39,11 +39,23 @@ class MarathonDetailsCard extends StatelessWidget { ), 7.height, LocaleKeys.contestTopicAbout.tr().toText16(color: MyColors.grey77Color), - "${AppState().isArabic(context) ? marathonDetailModel.titleAr : marathonDetailModel.titleEn}".toText20(color: MyColors.textMixColor, isBold: true), + displayLocalizedContent( + isPhoneLangArabic: AppState().isArabic(context), + selectedLanguage: marathonDetailModel.selectedLanguage ?? 0, + englishContent: marathonDetailModel.titleEn ?? "", + arabicContent: marathonDetailModel.titleAr ?? "", + ).toText20(color: MyColors.textMixColor, isBold: true), Row( children: [ Flexible( - child: "${AppState().isArabic(context) ? marathonDetailModel.descAr : marathonDetailModel.descEn}".toText14(color: MyColors.grey77Color), + child: displayLocalizedContent( + isPhoneLangArabic: AppState().isArabic(context), + selectedLanguage: marathonDetailModel.selectedLanguage ?? 0, + englishContent: marathonDetailModel.descEn ?? "", + arabicContent: marathonDetailModel.descAr ?? "", + ).toText14( + color: MyColors.grey77Color, + ), ) ], ), @@ -57,18 +69,22 @@ class MarathonDetailsCard extends StatelessWidget { child: SizedBox( height: 30, child: ListView.builder( - scrollDirection: Axis.horizontal, - shrinkWrap: true, - itemCount: marathonDetailModel.sponsors!.first.sponsorPrizes!.length, - itemBuilder: (BuildContext context, int index) { - SponsorPrizes prizes = marathonDetailModel.sponsors!.first.sponsorPrizes![index]; - return Container( - decoration: BoxDecoration(color: MyColors.backgroundColor, borderRadius: BorderRadius.circular(100), border: Border.all(color: MyColors.grey57Color.withOpacity(0.1))), - child: "${AppState().isArabic(context) ? prizes.marathonPrizeAr : prizes.marathonPrizeEn}" - .toText16(color: MyColors.greenColor, isBold: true) - .paddingOnly(left: 5, right: 5), - ).paddingOnly(left: 5); - }), + scrollDirection: Axis.horizontal, + shrinkWrap: true, + itemCount: marathonDetailModel.sponsors!.first.sponsorPrizes!.length, + itemBuilder: (BuildContext context, int index) { + SponsorPrizes prizes = marathonDetailModel.sponsors!.first.sponsorPrizes![index]; + return Container( + decoration: BoxDecoration(color: MyColors.backgroundColor, borderRadius: BorderRadius.circular(100), border: Border.all(color: MyColors.grey57Color.withOpacity(0.1))), + child: displayLocalizedContent( + isPhoneLangArabic: AppState().isArabic(context), + selectedLanguage: marathonDetailModel.selectedLanguage ?? 0, + englishContent: prizes.marathonPrizeEn ?? "", + arabicContent: prizes.marathonPrizeAr ?? "", + ).toText16(color: MyColors.greenColor, isBold: true).paddingOnly(left: 5, right: 5), + ).paddingOnly(left: 5); + }, + ), ), ) ], @@ -77,7 +93,12 @@ class MarathonDetailsCard extends StatelessWidget { Row( children: [ "${LocaleKeys.sponsoredBy.tr()} ".toText16(color: MyColors.grey77Color), - "${AppState().isArabic(context) ? marathonDetailModel.sponsors?.first.nameAr : marathonDetailModel.sponsors?.first.nameEn}".toText16(color: MyColors.darkTextColor, isBold: true), + displayLocalizedContent( + isPhoneLangArabic: AppState().isArabic(context), + selectedLanguage: marathonDetailModel.selectedLanguage ?? 0, + englishContent: marathonDetailModel.sponsors?.first.nameEn ?? "", + arabicContent: marathonDetailModel.sponsors?.first.nameAr ?? "", + ).toText16(color: MyColors.darkTextColor, isBold: true), ], ), 10.height, diff --git a/lib/ui/marathon/widgets/marathon_header.dart b/lib/ui/marathon/widgets/marathon_header.dart index fed6caa..58820c1 100644 --- a/lib/ui/marathon/widgets/marathon_header.dart +++ b/lib/ui/marathon/widgets/marathon_header.dart @@ -3,8 +3,6 @@ import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; -import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart'; -import 'package:provider/provider.dart'; class MarathonHeader extends StatelessWidget { const MarathonHeader({Key? key}) : super(key: key); diff --git a/lib/ui/marathon/widgets/question_card.dart b/lib/ui/marathon/widgets/question_card.dart index 5246426..27d8cbf 100644 --- a/lib/ui/marathon/widgets/question_card.dart +++ b/lib/ui/marathon/widgets/question_card.dart @@ -85,7 +85,12 @@ class CardContent extends StatelessWidget { child: Padding( padding: const EdgeInsets.symmetric(horizontal: 13, vertical: 15), child: Text( - AppState().isArabic(context) ? "${provider.currentQuestion.titleAr}" ?? "" : provider.currentQuestion.titleEn ?? "", + displayLocalizedContent( + isPhoneLangArabic: AppState().isArabic(context), + selectedLanguage: (AppState().getIsDemoMarathon ? provider.demoMarathonDetailModel.selectedLanguage : provider.marathonDetailModel.selectedLanguage) ?? 0, + englishContent: provider.currentQuestion.titleEn ?? "", + arabicContent: provider.currentQuestion.titleAr ?? "", + ), style: const TextStyle( color: MyColors.white, fontSize: 16, @@ -170,9 +175,12 @@ class AnswerTileForText extends StatelessWidget { alignment: Alignment.centerLeft, decoration: MyDecorations.getAnswersContainerColor(provider.currentQuestion.questionOptions![index].optionStatus!), child: Center( - child: (AppState().isArabic(context) ? provider.currentQuestion.questionOptions![index].titleAr! : provider.currentQuestion.questionOptions![index].titleEn!) - .toText16(color: provider.isUserOutOfGame ? MyColors.darkTextColor : getAnswerTextColor(provider.currentQuestion.questionOptions![index].optionStatus!)) - .paddingOnly(top: 13, bottom: 13), + child: displayLocalizedContent( + isPhoneLangArabic: AppState().isArabic(context), + selectedLanguage: (AppState().getIsDemoMarathon ? provider.demoMarathonDetailModel.selectedLanguage : provider.marathonDetailModel.selectedLanguage) ?? 0, + englishContent: provider.currentQuestion.questionOptions![index].titleEn ?? "", + arabicContent: provider.currentQuestion.questionOptions![index].titleAr ?? "", + ).toText16(color: provider.isUserOutOfGame ? MyColors.darkTextColor : getAnswerTextColor(provider.currentQuestion.questionOptions![index].optionStatus!)).paddingOnly(top: 13, bottom: 13), ), ), ); diff --git a/lib/widgets/mark_attendance_widget.dart b/lib/widgets/mark_attendance_widget.dart index a4558b9..16dd3bc 100644 --- a/lib/widgets/mark_attendance_widget.dart +++ b/lib/widgets/mark_attendance_widget.dart @@ -4,6 +4,9 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:geolocator/geolocator.dart'; +import 'package:huawei_location/location/fused_location_provider_client.dart'; +import 'package:huawei_location/location/location_request.dart'; +import 'package:huawei_location/location/location_settings_request.dart'; import 'package:mohem_flutter_app/api/dashboard_api_client.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; @@ -39,6 +42,8 @@ class MarkAttendanceWidget extends StatefulWidget { class _MarkAttendanceWidgetState extends State { bool isNfcEnabled = false, isNfcLocationEnabled = false, isQrEnabled = false, isQrLocationEnabled = false, isWifiEnabled = false, isWifiLocationEnabled = false; + int _locationUpdateCbId = 0; + @override void initState() { super.initState(); @@ -95,13 +100,17 @@ class _MarkAttendanceWidgetState extends State { // if (isNfcEnabled) attendanceMethod("NFC", "assets/images/nfc.svg", isNfcEnabled, () { if (isNfcLocationEnabled) { - Location.getCurrentLocation((Position position, bool isMocked) { - if (isMocked) { - markFakeAttendance("NFC", position.latitude.toString() ?? "", position.longitude.toString() ?? ""); - } else { - performNfcAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? ""); - } - }, context); + if (AppState().getIsHuawei) { + getHuaweiCurrentLocation("NFC"); + } else { + Location.getCurrentLocation((Position position, bool isMocked) { + if (isMocked) { + markFakeAttendance("NFC", position.latitude.toString() ?? "", position.longitude.toString() ?? ""); + } else { + performNfcAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? ""); + } + }, context); + } } else { performNfcAttendance(widget.model); } @@ -109,13 +118,17 @@ class _MarkAttendanceWidgetState extends State { if (isWifiEnabled) attendanceMethod("Wifi", "assets/images/wufu.svg", isWifiEnabled, () { if (isWifiLocationEnabled) { - Location.getCurrentLocation((Position position, bool isMocked) { - if (isMocked) { - markFakeAttendance("WIFI", position.latitude.toString() ?? "", position.longitude.toString() ?? ""); - } else { - performWifiAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? ""); - } - }, context); + if (AppState().getIsHuawei) { + getHuaweiCurrentLocation("WIFI"); + } else { + Location.getCurrentLocation((Position position, bool isMocked) { + if (isMocked) { + markFakeAttendance("WIFI", position.latitude.toString() ?? "", position.longitude.toString() ?? ""); + } else { + performWifiAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? ""); + } + }, context); + } } else { performWifiAttendance(widget.model); } @@ -124,13 +137,17 @@ class _MarkAttendanceWidgetState extends State { if (isQrEnabled) attendanceMethod("QR", "assets/images/ic_qr.svg", isQrEnabled, () async { if (isQrLocationEnabled) { - Location.getCurrentLocation((Position position, bool isMocked) { - if (isMocked) { - markFakeAttendance("QR", position.latitude.toString() ?? "", position.longitude.toString() ?? ""); - } else { - performQrCodeAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? ""); - } - }, context); + if (AppState().getIsHuawei) { + getHuaweiCurrentLocation("QR"); + } else { + Location.getCurrentLocation((Position position, bool isMocked) { + if (isMocked) { + markFakeAttendance("QR", position.latitude.toString() ?? "", position.longitude.toString() ?? ""); + } else { + performQrCodeAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? ""); + } + }, context); + } } else { performQrCodeAttendance(widget.model); } @@ -143,6 +160,33 @@ class _MarkAttendanceWidgetState extends State { ); } + void getHuaweiCurrentLocation(String attendanceType) { + FusedLocationProviderClient locationService = FusedLocationProviderClient(); + LocationRequest locationRequest = LocationRequest(); + locationRequest.priority = LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY; + locationRequest.interval = 1000; + List locationRequestList = [locationRequest]; + LocationSettingsRequest locationSettingsRequest = LocationSettingsRequest(requests: locationRequestList); + + locationService.checkLocationSettings(locationSettingsRequest).then((settings) async { + await locationService.getLastLocation().then((value) { + if (attendanceType == "QR") { + performQrCodeAttendance(widget.model, lat: value.latitude.toString() ?? "", lng: value.longitude.toString() ?? ""); + } + if (attendanceType == "WIFI") { + performWifiAttendance(widget.model, lat: value.latitude.toString() ?? "", lng: value.longitude.toString() ?? ""); + } + if (attendanceType == "NFC") { + performNfcAttendance(widget.model, lat: value.latitude.toString() ?? "", lng: value.longitude.toString() ?? ""); + } + }); + }).catchError((error) { + if (error.code == "LOCATION_SETTINGS_NOT_AVAILABLE") { + // Location service not enabled. + } + }); + } + Future performNfcAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0"}) async { if (Platform.isIOS) { Utils.readNFc(onRead: (String nfcId) async { @@ -252,12 +296,26 @@ class _MarkAttendanceWidgetState extends State { bool status = await model.fetchAttendanceTracking(context); Utils.hideLoading(context); await closeWifiRequest(); - showMDialog( - context, - backgroundColor: Colors.transparent, - isDismissable: false, - child: SuccessDialog(widget.isFromDashboard), - ); + if (g?.messageStatus == 2) { + showDialog( + barrierDismissible: true, + context: context, + builder: (cxt) => ConfirmDialog( + message: g?.errorEndUserMessage ?? "", + onTap: () { + Navigator.pop(context); + }, + onCloseTap: () {}, + ), + ); + } else { + showMDialog( + context, + backgroundColor: Colors.transparent, + isDismissable: false, + child: SuccessDialog(widget.isFromDashboard), + ); + } } catch (ex) { await closeWifiRequest(); Utils.hideLoading(context); @@ -292,12 +350,26 @@ class _MarkAttendanceWidgetState extends State { GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 1, isGpsRequired: isQrLocationEnabled, lat: lat, long: lng, QRValue: qrCodeValue); bool status = await model.fetchAttendanceTracking(context); Utils.hideLoading(context); - showMDialog( - context, - backgroundColor: Colors.transparent, - isDismissable: true, - child: SuccessDialog(widget.isFromDashboard), - ); + if (g?.messageStatus == 2) { + showDialog( + barrierDismissible: true, + context: context, + builder: (cxt) => ConfirmDialog( + message: g?.errorEndUserMessage ?? "", + onTap: () { + Navigator.pop(context); + }, + onCloseTap: () {}, + ), + ); + } else { + showMDialog( + context, + backgroundColor: Colors.transparent, + isDismissable: true, + child: SuccessDialog(widget.isFromDashboard), + ); + } } catch (ex) { print(ex); Utils.hideLoading(context); diff --git a/lib/widgets/qr_scanner_dialog.dart b/lib/widgets/qr_scanner_dialog.dart index 6082d4c..1889616 100644 --- a/lib/widgets/qr_scanner_dialog.dart +++ b/lib/widgets/qr_scanner_dialog.dart @@ -68,6 +68,8 @@ class _QrScannerDialogState extends State { } }); }); + controller.pauseCamera(); + controller.resumeCamera(); } @override