private bool OnTimerTick()
 {
     Device.BeginInvokeOnMainThread(async() =>
     {
         string login = Preferences.Get("loginConst", "");
         string pass  = Preferences.Get("passConst", "");
         if (!pass.Equals("") && !login.Equals(""))
         {
             if (!App.MessageNoInternet)
             {
                 if (Xamarin.Essentials.Connectivity.NetworkAccess != Xamarin.Essentials.NetworkAccess.Internet)
                 {
                     Device.BeginInvokeOnMainThread(async() =>
                     {
                         App.MessageNoInternet = true;
                         await DisplayAlert(AppResources.ErrorTitle, AppResources.ErrorNoInternet, "OK");
                         App.MessageNoInternet = false;
                     });
                     return;
                 }
             }
             LoginResult loginResult = await server.LoginDispatcher(login, pass);
             if (loginResult.Error == null)
             {
                 Settings.Person = loginResult;
             }
         }
     });
     return(true);
 }
Ejemplo n.º 2
0
        public App()
        {
            InitializeComponent();
            Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("MzU2OTY1QDMxMzgyZTMzMmUzMEtpcFNHRnBKOUppMFJ1RUxjWTlsbUt6QzFOY3JyMUlGVi9McDJSSmQxVW89");
            PdfViewerResourceManager.Manager = new ResourceManager("xamarinJKH.Resources.Syncfusion.SfPdfViewer.XForms", GetType().GetTypeInfo().Assembly);
            CrossBadge.Current.ClearBadge();
            Crashes.SendingErrorReport      += SendingErrorReportHandler;
            Crashes.SentErrorReport         += SentErrorReportHandler;
            Crashes.FailedToSendErrorReport += FailedToSendErrorReportHandler;
            Crashes.GetErrorAttachments     += GetErrorAttachmentHandler;
            //только темная тема в ios
            //if (Device.RuntimePlatform == Device.iOS && Application.Current.UserAppTheme == OSAppTheme.Unspecified)
            //    Application.Current.UserAppTheme = OSAppTheme.Light;

            var task = Task.Run(async() => await getSettingsAsync());

            task.Wait();

            // var f = getSettingsAsync();

            if (/*Device.RuntimePlatform == Device.iOS &&*/ Application.Current.UserAppTheme == OSAppTheme.Unspecified)
            {
                switch (Settings.MobileSettings.appTheme)
                {
                case "": Application.Current.UserAppTheme = OSAppTheme.Light; break;

                case "light": Application.Current.UserAppTheme = OSAppTheme.Light; break;

                case "dark": Application.Current.UserAppTheme = OSAppTheme.Dark; break;
                }
            }


            DependencyService.Register <RestClientMP>();
            switch (Device.RuntimePlatform)
            {
            case Device.iOS:

                Color color = Color.White;

                int theme = Preferences.Get("Theme", 0);

                switch (theme)
                {
                case 1: color = Color.White; break;

                case 2: color = Color.Black; break;

                case 0:
                    switch (Settings.MobileSettings.appTheme)
                    {
                    case "": color = Color.Black; break;

                    case "light": color = Color.Black; break;

                    case "dark": color = Color.White; break;
                    }
                    break;
                }

                //if (theme!=1)
                //    color = Color.Black;
                //else
                //    color = Color.White;

                //var color = Application.Current.UserAppTheme == OSAppTheme.Light /*|| Application.Current.UserAppTheme == OSAppTheme.Unspecified*/ ? Color.Black : Color.White;

                var c2 = Settings.MobileSettings.appTheme == "light" ? Color.Black : Color.White;

                var nav = new Xamarin.Forms.NavigationPage(new MainPage())
                {
                    BarBackgroundColor = c2,
                    BarTextColor       = color
                };

                nav.On <iOS>().SetIsNavigationBarTranslucent(true);
                nav.On <iOS>().SetStatusBarTextColorMode(StatusBarTextColorMode.MatchNavigationBarTextLuminosity);

                MainPage = nav;
                break;

            case Device.Android:
                MainPage = new MainPage();
                break;

            default:
                break;
            }

            CrossFirebasePushNotification.Current.Subscribe("general");
            CrossFirebasePushNotification.Current.OnTokenRefresh += async(s, p) =>
            {
                System.Diagnostics.Debug.WriteLine($"TOKEN : {p.Token}");
                token = p.Token;
                await server.RegisterDevice(isCons);
            };


            CrossFirebasePushNotification.Current.OnNotificationReceived += (s, p) =>
            {
                System.Diagnostics.Debug.WriteLine("Received");
                //CrossBadge.Current.ClearBadge();
                if (Device.RuntimePlatform == Device.iOS)
                {
                    if (DependencyService.Get <IAppState>().IsAppBackbround())
                    {
                        badgeCount++;
                        CrossBadge.Current.SetBadge(badgeCount);
                    }
                }
                else
                {
                    CrossBadge.Current.ClearBadge();
                }

                Device.BeginInvokeOnMainThread(async() =>
                {
                    if (isCons)
                    {
                        MessagingCenter.Send <Object>(this, "UpdateAppCons");
                    }
                    else
                    {
                        MessagingCenter.Send <Object>(this, "AutoUpdate");
                    }

                    try
                    {
                        bool displayAlert = false;
                        string o          = string.Empty;

                        // if (p.Data.ContainsKey("title") && p.Data.ContainsKey("body"))
                        // {
                        //     var current_page =
                        //         (App.Current.MainPage.Navigation.ModalStack.ToList()[0] as Xamarin.Forms.TabbedPage)
                        //         .CurrentPage;
                        //     if (!(current_page is AppPage))
                        //     {
                        //         displayAlert = await MainPage.DisplayAlert(p.Data["title"].ToString(),
                        //             p.Data["body"].ToString(), "OK", "Отмена");
                        //         if (p.Data.ContainsKey("type_push"))
                        //             o = p.Data["type_push"].ToString();
                        //     }
                        // }

                        //ios
                        // if (p.Data.ContainsKey("aps.alert.title") && p.Data.ContainsKey("aps.alert.body"))
                        // {
                        //     var current_page =
                        //         (App.Current.MainPage.Navigation.ModalStack.ToList()[0] as Xamarin.Forms.TabbedPage)
                        //         .CurrentPage;
                        //     if (!(current_page is AppPage))
                        //     {
                        //         displayAlert = await MainPage.DisplayAlert(p.Data["aps.alert.title"].ToString(),
                        //             p.Data["aps.alert.body"].ToString(), "OK", "Отмена");
                        //         if (p.Data.ContainsKey("gcm.notification.type_push"))
                        //             o = p.Data["gcm.notification.type_push"].ToString();
                        //     }
                        // }

                        if (o.ToLower().Equals("осс"))
                        {
                            await MainPage.Navigation.PushModalAsync(new OSSMain());
                        }

                        if (o.ToLower().Equals("comment"))
                        {
                            if (isCons)
                            {
                                await Task.Delay(500);
                                MessagingCenter.Send <Object>(this, "RefreshApp");
                            }
                            else
                            {
                                MessagingCenter.Send <Object>(this, "AutoUpdateComments");
                            }
                        }

                        if (o.ToLower().Equals("comment"))
                        {
                            var tabbedpage = App.Current.MainPage.Navigation.ModalStack.ToList()[0];
                            if (tabbedpage is xamarinJKH.Main.BottomNavigationPage)
                            {
                                var stack = (tabbedpage as Xamarin.Forms.TabbedPage).Children[3].Navigation
                                            .NavigationStack;
                                if (stack.Count == 2)
                                {
                                    var app_page = stack.ToList()[0];
                                }
                                else
                                {
                                    if (!isCons)
                                    {
                                        MessagingCenter.Send <Object, int>(this, "SwitchToApps",
                                                                           int.Parse(p.Data["id_request"].ToString()));
                                    }
                                    else
                                    {
                                        MessagingCenter.Send <Object, int>(this, "SwitchToAppsConst",
                                                                           int.Parse(p.Data["id_request"].ToString()));
                                    }
                                }
                            }

                            if (tabbedpage is xamarinJKH.MainConst.BottomNavigationConstPage)
                            {
                                var stack = (tabbedpage as Xamarin.Forms.TabbedPage).Children[0].Navigation
                                            .NavigationStack;
                                if (stack.Count == 2)
                                {
                                    var app_page = stack.ToList()[0];
                                }
                                else
                                {
                                    if (!isCons)
                                    {
                                        MessagingCenter.Send <Object, int>(this, "SwitchToApps",
                                                                           int.Parse(p.Data["id_request"].ToString()));
                                    }
                                    else
                                    {
                                        MessagingCenter.Send <Object, int>(this, "SwitchToAppsConst",
                                                                           int.Parse(p.Data["id_request"].ToString()));
                                    }
                                }
                            }
                        }

                        if (o.ToLower() == "announcement")
                        {
                            var tabbedpage = App.Current.MainPage.Navigation.ModalStack.ToList()[0];
                            if (tabbedpage is xamarinJKH.Main.BottomNavigationPage)
                            {
                                var stack = (tabbedpage as Xamarin.Forms.TabbedPage).Children[0].Navigation
                                            .NavigationStack;
                                if (stack.Count == 2 && !isCons)
                                {
                                    await(tabbedpage as Xamarin.Forms.TabbedPage).Children[0].Navigation.PopToRootAsync();
                                }
                                if (!isCons)
                                {
                                    MessagingCenter.Send <Object, (string, string)>(this, "OpenNotification", (p.Data["body"].ToString(), p.Data["title"].ToString()));
                                }
                            }

                            //if (tabbedpage is xamarinJKH.MainConst.BottomNavigationConstPage)
                            //{
                            //    var stack = (tabbedpage as Xamarin.Forms.TabbedPage).Children[0].Navigation
                            //        .NavigationStack;
                            //    if (stack.Count == 2)
                            //    {
                            //        var app_page = stack.ToList()[0];
                            //    }
                            //    else
                            //    {
                            //        if (!isCons)
                            //            MessagingCenter.Send<Object, int>(this, "SwitchToApps",
                            //                int.Parse(p.Data["id_request"].ToString()));
                            //        else
                            //            MessagingCenter.Send<Object, int>(this, "SwitchToAppsConst",
                            //                int.Parse(p.Data["id_request"].ToString()));
                            //    }
                            //}
                        }
                    }
                    catch
                    {
                    }
                });
            };
            CrossFirebasePushNotification.Current.OnNotificationOpened += async(s, rea) =>
            {
                Analytics.TrackEvent("открыт пуш");
                System.Diagnostics.Debug.WriteLine("Opened");
                if (rea.Data.ContainsKey("type_push") || rea.Data.ContainsKey("gcm.notification.type_push"))
                {
                    string o = "";
                    if (Device.RuntimePlatform == Device.Android)
                    {
                        o = rea.Data["type_push"].ToString();
                    }
                    else
                    {
                        o = rea.Data["gcm.notification.type_push"].ToString();
                    }

                    Analytics.TrackEvent($"тип пуша {o}");

                    if (o.ToLower().Equals("announcement"))
                    {
                        Device.BeginInvokeOnMainThread(async() =>
                        {
                            string login = Preferences.Get("login", "");
                            string pass  = Preferences.Get("pass", "");
                            if (!pass.Equals("") && !login.Equals(""))
                            {
                                LoginResult loginResult = await server.Login(login, pass);
                                if (loginResult.Error == null)
                                {
                                    Settings.EventBlockData = await server.GetEventBlockData();
                                    foreach (var each in Settings.EventBlockData.Announcements)
                                    {
                                        if (rea.Data.ContainsKey("aps.alert.title") && rea.Data.ContainsKey("aps.alert.body"))
                                        {
                                            if (rea.Data["aps.alert.title"].Equals(each.Header) & rea.Data["aps.alert.body"].Equals(each.Text))
                                            {
                                                await MainPage.Navigation.PushModalAsync(new NotificationOnePage(each));
                                            }
                                        }
                                        if (rea.Data.ContainsKey("title") && rea.Data.ContainsKey("body"))
                                        {
                                            if (rea.Data["title"].Equals(each.Header) & rea.Data["body"].Equals(each.Text))
                                            {
                                                await MainPage.Navigation.PushModalAsync(new NotificationOnePage(each));
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    Analytics.TrackEvent($"сервер вернул ошибку: {loginResult.Error}");
                                }
                            }
                        });
                    }

                    if (o.ToLower().Equals("осс"))
                    {
                        Device.BeginInvokeOnMainThread(async() =>
                        {
                            string login = Preferences.Get("login", "");
                            string pass  = Preferences.Get("pass", "");
                            if (!pass.Equals("") && !login.Equals(""))
                            {
                                LoginResult loginResult = await server.Login(login, pass);
                                if (loginResult.Error == null)
                                {
                                    Settings.Person = loginResult;
                                    await MainPage.Navigation.PushModalAsync(new OSSMain());
                                }
                            }
                        });
                    }

                    if (o.ToLower().Equals("comment"))
                    {
                        if (rea.Data.ContainsKey("id_request"))
                        {
                            var id = int.Parse(rea.Data["id_request"].ToString());
                            Analytics.TrackEvent("ключ id_request=" + id);
                            Analytics.TrackEvent("isCons=" + isCons);

                            // if (!isStart)
                            // {
                            //
                            //     if (!isCons)
                            //         MessagingCenter.Send<Object, int>(this, "SwitchToApps", id);
                            //     else
                            //         MessagingCenter.Send<Object, int>(this, "SwitchToAppsConst", id);
                            // }
                            // else
                            // {
                            string login      = Preferences.Get("login", "");
                            string pass       = Preferences.Get("pass", "");
                            string loginConst = Preferences.Get("loginConst", "");
                            string passConst  = Preferences.Get("passConst", "");

                            LoginResult loginResult = isCons ? await server.LoginDispatcher(loginConst, passConst) : await server.Login(login, pass);

                            if (loginResult.Error == null)
                            {
                                if (isCons)
                                {
                                    RequestList requestList = await server.GetRequestsListConst();

                                    var request = requestList.Requests.Find(x => x.ID == id);
                                    await MainPage.Navigation.PushModalAsync(new AppConstPage(request));
                                }
                                else
                                {
                                    RequestList requestsList = await server.GetRequestsList();

                                    var request = requestsList.Requests.Find(x => x.ID == id);
                                    await MainPage.Navigation.PushModalAsync(new AppPage(request, false,
                                                                                         request.IsPaid));
                                }
                            }
                        }
                        else
                        {
                            Analytics.TrackEvent("ключ id_request не найден");
                        }
                        // Analytics.TrackEvent($"App.Current.MainPage.Navigation.ModalStack.Count={App.Current.MainPage.Navigation.ModalStack.Count}");
                        // if (App.Current.MainPage.Navigation.ModalStack.Count>0)
                        // {
                        //     var tabbedpage = App.Current.MainPage.Navigation.ModalStack.ToList()[0];
                        //     if (tabbedpage is xamarinJKH.Main.BottomNavigationPage)
                        //     {
                        //         var tp = (tabbedpage as Xamarin.Forms.TabbedPage);
                        //         Analytics.TrackEvent($"BottomNavigationPage Children count = {tp.Children.Count}");
                        //
                        //         if (tp.Children.Count >= 4)
                        //         {
                        //             var stack = tp.Children[3].Navigation.NavigationStack;
                        //             if (stack.Count == 2)
                        //             {
                        //                 var app_page = stack.ToList()[0];
                        //             }
                        //             else
                        //             {
                        //                 pExec(rea);
                        //             }
                        //         }
                        //         else
                        //         {
                        //             pExec(rea);
                        //         }
                        //     }
                        //
                        //     if (tabbedpage is xamarinJKH.MainConst.BottomNavigationConstPage)
                        //     {
                        //         var tp = (tabbedpage as Xamarin.Forms.TabbedPage);
                        //         Analytics.TrackEvent($"BottomNavigationConstPage Children count = {tp.Children.Count}");
                        //         if (tp.Children.Count >= 1)
                        //         {
                        //             var stack = tp.Children[0].Navigation.NavigationStack;
                        //             if (stack.Count == 2)
                        //             {
                        //                     var app_page = stack.ToList()[0];
                        //             }
                        //             else
                        //             {
                        //                 pExec(rea);
                        //             }
                        //         }
                        //         else
                        //         {
                        //             pExec(rea);
                        //         }
                        //
                        //     }
                        // }
                    }
                }
            };
            CrossFirebasePushNotification.Current.OnNotificationAction += (s, p) =>
            {
                System.Diagnostics.Debug.WriteLine("Action");

                if (!string.IsNullOrEmpty(p.Identifier))
                {
                    System.Diagnostics.Debug.WriteLine($"ActionId: {p.Identifier}");
                    foreach (var data in p.Data)
                    {
                        System.Diagnostics.Debug.WriteLine($"{data.Key} : {data.Value}");
                    }
                }
            };
        }