Exemple #1
0
        protected async override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            try
            {
                //TextView name = FindViewById<TextView>(Resource.Id.nav_bar_name);
                //name.Text = AccountsController.mainAccP.loginP;
                //TextView ml = FindViewById<TextView>(Resource.Id.nav_bar_addr);
                //ml.Text = AccountsController.mainAccP.emailP;
                //CryptoProvider c = new CryptoProvider();
                //CryptoProvider.Encrupt("privet", AccountsController.mainAccP.openKeyRsaP,
                //AccountsController.mainAccP.privateKeyRsaP, c);

                connectivityManager = (ConnectivityManager)GetSystemService(ConnectivityService);
                networkInfo         = null;

                DialogsController.instance.CreateTable();
                oldDialogs = DialogsController.instance.GetItems().ToList();

                SetContentView(Resource.Layout.main_page);
                tb = FindViewById <Android.Support.V7.Widget.Toolbar>(Resource.Id.tooolbarCommon);

                drawer = FindViewById <DrawerLayout>(Resource.Id.drawerLayout1);

                ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, Resource.String.openDrawer, Resource.String.closeDrawer);
                toggle.SyncState();

                navigation = FindViewById <NavigationView>(Resource.Id.navigationMain);
                navigation.SetNavigationItemSelectedListener(this);
                var      header = navigation.GetHeaderView(0);
                TextView name   = header.FindViewById <TextView>(Resource.Id.nav_bar_name);
                name.Text = AccountsController.mainAccP.loginP;
                TextView ml = header.FindViewById <TextView>(Resource.Id.nav_bar_addr);
                ml.Text = AccountsController.mainAccP.emailP;

                checkProgress  = FindViewById <ProgressBar>(Resource.Id.checkProgress);
                dialogs        = FindViewById <ListView>(Resource.Id.dialogsList);
                oldDialogsList = FindViewById <ListView>(Resource.Id.oldDialogsList);

                SetSupportActionBar(tb);
                Android.Support.V7.App.ActionBar abar = SupportActionBar;

                abar.SetHomeButtonEnabled(true);
                abar.SetDisplayShowTitleEnabled(true);
                abar.SetHomeAsUpIndicator(Resource.Drawable.menu);
                abar.SetDisplayHomeAsUpEnabled(true);

                check        = FindViewById <Button>(Resource.Id.check);
                check.Text   = "Проверить запросы";
                check.Click += async delegate
                {
                    networkInfo = connectivityManager.ActiveNetworkInfo;
                    if (networkInfo != null && networkInfo.IsConnected == true)
                    {
                        try
                        {
                            Task <List <MyDialog> > sizeTask = FirebaseController.instance.FindDialogs("Dialog " + AccountsController.mainAccP.emailP + "+", this);
                            checkProgress.Visibility = ViewStates.Visible;
                            check.Enabled            = false;
                            dialogs.Enabled          = false;
                            oldDialogsList.Enabled   = false;
                            dialogg = await sizeTask;
                            if (dialogg == null)
                            {
                                Utils.MessageBox("Нет новых запросов!", this);
                            }
                            else
                            {
                                refresh_dialogs();
                            }
                            checkProgress.Visibility = ViewStates.Invisible;
                            check.Enabled            = true;
                            dialogs.Enabled          = true;
                            oldDialogsList.Enabled   = true;
                        }
                        catch (Exception ex)
                        {
                            Utils.MessageBox("Невозможно загрузить запросы. Проверьте подключение к интернету", this);
                            checkProgress.Visibility = ViewStates.Invisible;
                            check.Enabled            = true;
                            dialogs.Enabled          = true;
                            oldDialogsList.Enabled   = true;
                        }
                    }
                    else
                    {
                        Utils.MessageBox("Невозможно загрузить запросы. Проверьте подключение к интернету", this);
                    }
                };


                dialogs.ItemClick += (sender, e) =>
                {
                    AlertDialog.Builder builder = new AlertDialog.Builder(this);
                    builder.SetTitle("Предупреждение");
                    builder.SetMessage("Разрешить начать диалог с данным пользователем?");
                    builder.SetCancelable(true);
                    builder.SetNegativeButton("Нет", async(s, ev) =>
                    {
                        Message c                = adapter[Convert.ToInt32(e.Id)];
                        MyDialog temp            = dialogg.Find(x => x.lastMessage == c);
                        Task <bool> denialTask   = FirebaseController.instance.SendDialogDenial(temp.dialogName, c.senderP);
                        bool answer              = await denialTask;
                        checkProgress.Visibility = ViewStates.Visible;
                        if (answer)
                        {
                            dialogg.Remove(temp);
                            messages.Remove(c);
                            refresh_dialogs();
                            Utils.MessageBox("Успешно!", this);
                        }
                        else
                        {
                            Utils.MessageBox("Ошибка! Повторите позже.", this);
                        }
                        checkProgress.Visibility = ViewStates.Invisible;
                    });
                    builder.SetPositiveButton("Да", async(s, ev) =>
                    {
                        Message c                = adapter[Convert.ToInt32(e.Id)];
                        MyDialog temp            = dialogg.Find(x => x.lastMessage == c);
                        Task <bool> responseTask = FirebaseController.instance.SendDialogResponse(temp.dialogName, c.senderP);
                        checkProgress.Visibility = ViewStates.Visible;
                        bool _answer             = await responseTask;
                        if (_answer)
                        {
                            dialogg.Remove(temp);
                            messages.Remove(c);
                            refresh_dialogs();
                            ContactsController.instance.CreateTable();
                            ContactsController.instance.SaveItem(new Contact {
                                contactAddressP = c.senderP, dialogNameP = temp.dialogName,
                                contactNameP    = "user name", contactRsaOpenKeyP = "no key"
                            }, false);
                            Task <int> firstIdtask = FirebaseController.instance.ReturnLastId(AccountsController.mainAccP.emailP, this);
                            int firstId            = await firstIdtask;
                            FirebaseController.instance.AddContact(c.senderP, AccountsController.mainAccP.emailP, firstId + 1, temp.dialogName);
                            Task <int> secondIdtask = FirebaseController.instance.ReturnLastId(c.senderP, this);
                            int secondId            = await secondIdtask;
                            FirebaseController.instance.AddContact(AccountsController.mainAccP.emailP, c.senderP, secondId + 1, temp.dialogName);
                            Utils.MessageBox("Успешно!", this);
                        }
                        else
                        {
                            Utils.MessageBox("Ошибка! Повторите позже.", this);
                        }
                        checkProgress.Visibility = ViewStates.Invisible;
                    });
                    Dialog dialog = builder.Create();
                    dialog.Show();
                    return;
                };

                checkProgress.Visibility = ViewStates.Visible;
                await fillOld();

                if (oldDialogs != null)
                {
                    /**/
                    oldDialogs = oldDialogs.OrderByDescending(x => x.accessFlag).ToList().OrderByDescending(x => Convert.ToDateTime(x.timeP)).ToList();
                    adapterOld = new OldDialogItemAdapter(oldDialogs);
                }
                else
                {
                    /**/
                    oldDialogs = oldDialogs.OrderByDescending(x => x.accessFlag).ToList().OrderByDescending(x => Convert.ToDateTime(x.timeP)).ToList();
                    oldDialogs = new List <MyDialog>();
                    adapterOld = new OldDialogItemAdapter(oldDialogs);
                }
                oldDialogsList.Adapter   = adapterOld;
                checkProgress.Visibility = ViewStates.Invisible;

                oldDialogsList.ItemClick += (sender, e) =>
                {
                    Intent i = new Intent(this, typeof(DialogActivity));
                    i.SetFlags(ActivityFlags.NoAnimation);
                    MyDialog temp = adapterOld[Convert.ToInt32(e.Id)];
                    DialogsController.currDialP = temp;
                    i.PutExtra("dialogName", temp.dialogName);
                    i.PutExtra("receiver",
                               temp.receiverP == AccountsController.mainAccP.emailP ? temp.senderP : temp.receiverP); //изменил (убрал .lastMessage) возможно поэтому что-то сломалось
                    i.PutExtra("flag", 1);
                    StartActivity(i);
                };
            }
            catch (Exception ex)
            {
                //Utils.MessageBox(ex.Message, this);
            }
        }
Exemple #2
0
        public void OnDataChange(DataSnapshot snapshot)
        {
            try
            {
                IEnumerable <DataSnapshot> items = snapshot.Children?.ToEnumerable <DataSnapshot>();
                List <DataSnapshot>        t     = items.ToList();
                var a = t.Last().Children.ToEnumerable <DataSnapshot>().ToList();

                var access             = a[0].Child("0").Value;
                List <AccessFlags> acs = new List <AccessFlags>();
                acs.Add((AccessFlags)Convert.ToInt32(access.ToString()));

                var flag = a[2].Child("0").Value;
                List <MessageFlags> fls = new List <MessageFlags>();
                fls.Add((MessageFlags)Convert.ToInt32(flag.ToString()));

                Message m = new Message
                {
                    contentP  = a[1].Value.ToString(),
                    flags     = fls,
                    access    = acs,
                    receiverP = a[3].Value.ToString(),
                    senderP   = a[4].Value.ToString(),
                    timeP     = a[5].Value.ToString(),
                };

                MyDialog md = oldDialogs.Find(x => x.contentP == m.contentP && x.timeP == m.timeP);
                if (md == null)
                {
                    string sender   = m.senderP.Replace(".", ",");
                    string receiver = m.receiverP.Replace(".", ",");
                    string s1       = "Dialog " + sender + "+" + receiver;
                    string s2       = "Dialog " + receiver + "+" + sender;
                    int    temp     = oldDialogs.FindIndex(x => x.dialogName == s1);
                    if (temp < 0)
                    {
                        temp = oldDialogs.FindIndex(x => x.dialogName == s2);
                        if (temp < 0)
                        {
                        }
                        else
                        {
                            m.dialogName = oldDialogs[temp].dialogName;
                            oldDialogs[temp].lastMessage = m;
                            oldDialogs[temp].accessFlag  = Convert.ToInt32(m.access[0]);
                            oldDialogs[temp].contentP    = m.contentP;
                            oldDialogs[temp].messageFlag = Convert.ToInt32(m.flags[0]);
                            oldDialogs[temp].receiverP   = m.receiverP;
                            oldDialogs[temp].senderP     = m.senderP;
                            oldDialogs[temp].timeP       = m.timeP;

                            DialogsController.instance.CreateTable();
                            DialogsController.instance.UpdateItem(oldDialogs[temp].dialogName, oldDialogs[temp].lastMessage);

                            /**/
                            oldDialogs             = oldDialogs.OrderByDescending(x => x.accessFlag).ToList().OrderByDescending(x => Convert.ToDateTime(x.timeP)).ToList();
                            adapterOld             = new OldDialogItemAdapter(oldDialogs, true);
                            oldDialogsList.Adapter = adapterOld;
                        }
                    }
                    else
                    {
                        m.dialogName = oldDialogs[temp].dialogName;
                        oldDialogs[temp].lastMessage = m;
                        oldDialogs[temp].accessFlag  = Convert.ToInt32(m.access[0]);
                        oldDialogs[temp].contentP    = m.contentP;
                        oldDialogs[temp].messageFlag = Convert.ToInt32(m.flags[0]);
                        oldDialogs[temp].receiverP   = m.receiverP;
                        oldDialogs[temp].senderP     = m.senderP;
                        oldDialogs[temp].timeP       = m.timeP;

                        DialogsController.instance.CreateTable();
                        DialogsController.instance.UpdateItem(oldDialogs[temp].dialogName, oldDialogs[temp].lastMessage);

                        /**/
                        oldDialogs             = oldDialogs.OrderByDescending(x => x.accessFlag).ToList().OrderByDescending(x => Convert.ToDateTime(x.timeP)).ToList();
                        adapterOld             = new OldDialogItemAdapter(oldDialogs, true);
                        oldDialogsList.Adapter = adapterOld;
                    }
                }
            }
            catch (Exception ex)
            {
                Utils.MessageBox("Сетевая ошибка!", this);
            }
        }