public void SetCall(TLTuple <TLPhoneCallState, TLPhoneCallBase, TLUserBase, string> tuple)
        {
            if (_disposed)
            {
                return;
            }

            if (_state != tuple.Item1)
            {
                Debug.WriteLine("[{0:HH:mm:ss.fff}] State changed in app: " + tuple.Item1, DateTime.Now);

                _state             = tuple.Item1;
                StateLabel.Content = StateToLabel(tuple.Item1);

                if (tuple.Item1 == TLPhoneCallState.Established)
                {
                    SignalBarsLabel.Visibility = Visibility.Visible;
                    StartUpdatingCallDuration();

                    if (_emojis != null)
                    {
                        for (int i = 0; i < _emojis.Length; i++)
                        {
                            var imageLarge = FindName($"LargeEmoji{i}") as Image;
                            var source     = Emoji.BuildUri(_emojis[i]);

                            imageLarge.Source = new BitmapImage(new Uri(source));
                        }
                    }
                }
            }

            if (tuple.Item2 is TLPhoneCallRequested call)
            {
            }

            if (tuple.Item3 is TLUser user)
            {
                if (user.HasPhoto && user.Photo is TLUserProfilePhoto)
                {
                    Image.Source         = DefaultPhotoConverter.Convert(user.Photo, true) as ImageSource;
                    GrabPanel.Background = new SolidColorBrush(Colors.Transparent);
                }
                else
                {
                    Image.Source         = null;
                    GrabPanel.Background = BindConvert.Current.Bubble(user.Id);
                }

                FromLabel.Text        = user.FullName;
                DescriptionLabel.Text = string.Format(Strings.Android.CallEmojiKeyTooltip, user.FirstName);
            }

            if (tuple.Item4.Length > 0)
            {
                _emojis = tuple.Item4.Split(' ');
            }
        }
Exemple #2
0
        public void Update(Call call, DateTime started)
        {
            if (_disposed)
            {
                return;
            }

            var user = _cacheService.GetUser(call.UserId);

            if (user != null)
            {
                Image.Source = PlaceholderHelper.GetUser(_protoService, user, 144);

                //if (user.ProfilePhoto != null)
                //{
                //    var file = user.ProfilePhoto.Big;
                //    if (file.Local.IsDownloadingCompleted)
                //    {
                //        Image.Source = new BitmapImage(new Uri("file:///" + file.Local.Path));
                //        BackgroundPanel.Background = new SolidColorBrush(Colors.Transparent);
                //    }
                //    else if (file.Local.CanBeDownloaded && !file.Local.IsDownloadingActive)
                //    {
                //        Image.Source = null;
                //        BackgroundPanel.Background = PlaceholderHelper.GetBrush(user.Id);

                //        _protoService?.DownloadFile(file.Id, 1, 0);
                //    }
                //}
                //else
                //{
                //    Image.Source = null;
                //    BackgroundPanel.Background = PlaceholderHelper.GetBrush(user.Id);
                //}

                FromLabel.Text        = user.GetFullName();
                DescriptionLabel.Text = string.Format(Strings.Resources.CallEmojiKeyTooltip, user.FirstName);

                AudioOffText.Text = string.Format(Strings.Resources.VoipUserMicrophoneIsOff, user.FirstName);
                VideoOffText.Text = string.Format(Strings.Resources.VoipUserCameraIsOff, user.FirstName);
            }

            if (call.State is CallStateReady ready)
            {
                _emojis = ready.Emojis;

                for (int i = 0; i < ready.Emojis.Count; i++)
                {
                    var imageLarge = FindName($"LargeEmoji{i}") as Image;
                    var source     = Emoji.BuildUri(_emojis[i]);

                    imageLarge.Source = new BitmapImage(new Uri(source));
                }
            }

            switch (call.State)
            {
            case CallStatePending pending:
                if (call.IsOutgoing)
                {
                    ResetUI();
                }
                else
                {
                    Audio.Visibility = Visibility.Collapsed;
                    Video.Visibility = Visibility.Collapsed;

                    Close.Visibility = Visibility.Collapsed;
                    Close.Margin     = new Thickness();

                    Accept.Margin     = new Thickness(0, 0, 6, 0);
                    Accept.Visibility = Visibility.Visible;

                    Discard.Margin     = new Thickness(6, 0, 0, 0);
                    Discard.Visibility = Visibility.Visible;
                }
                break;

            case CallStateDiscarded discarded:
                if (call.IsOutgoing && discarded.Reason is CallDiscardReasonDeclined)
                {
                    Audio.Visibility = Visibility.Collapsed;
                    Video.Visibility = Visibility.Collapsed;

                    Close.Margin     = new Thickness(0, 0, 6, 0);
                    Close.Visibility = Visibility.Visible;

                    Accept.Margin     = new Thickness(6, 0, 0, 0);
                    Accept.Visibility = Visibility.Visible;

                    Discard.Visibility = Visibility.Collapsed;
                    Discard.Margin     = new Thickness();
                }
                break;

            default:
                ResetUI();
                break;
            }

            switch (call.State)
            {
            case CallStatePending pending:
                StateLabel.Content = call.IsOutgoing
                        ? pending.IsReceived
                        ? Strings.Resources.VoipRinging
                        : pending.IsCreated
                        ? Strings.Resources.VoipWaiting
                        : Strings.Resources.VoipRequesting
                        : Strings.Resources.VoipIncoming;
                break;

            case CallStateExchangingKeys exchangingKeys:
                StateLabel.Content = Strings.Resources.VoipConnecting;
                break;

            case CallStateHangingUp hangingUp:
                StateLabel.Content = Strings.Resources.VoipHangingUp;
                break;

            case CallStateDiscarded discarded:
                StateLabel.Content = discarded.Reason is CallDiscardReasonDeclined
                        ? Strings.Resources.VoipBusy
                        : Strings.Resources.VoipCallEnded;
                break;
            }
        }
Exemple #3
0
        public void Update(Call call, DateTime started)
        {
            if (_disposed)
            {
                return;
            }

            _call    = call;
            _started = started;

            //if (_state != call.State)
            //{
            //    Debug.WriteLine("[{0:HH:mm:ss.fff}] State changed in app: " + tuple.Item1, DateTime.Now);

            //    _state = tuple.Item1;
            //    StateLabel.Content = StateToLabel(tuple.Item1);

            //    if (tuple.Item1 == TLPhoneCallState.Established)
            //    {
            //        SignalBarsLabel.Visibility = Visibility.Visible;
            //        StartUpdatingCallDuration();

            //        if (_emojis != null)
            //        {
            //            for (int i = 0; i < _emojis.Length; i++)
            //            {
            //                var imageLarge = FindName($"LargeEmoji{i}") as Image;
            //                var source = Emoji.BuildUri(_emojis[i]);

            //                imageLarge.Source = new BitmapImage(new Uri(source));
            //            }
            //        }
            //    }
            //}

            //if (tuple.Item2 is TLPhoneCallRequested call)
            //{
            //}

            var user = _cacheService.GetUser(call.UserId);

            if (user != null)
            {
                if (user.ProfilePhoto != null)
                {
                    var file = user.ProfilePhoto.Big;
                    if (file.Local.IsDownloadingCompleted)
                    {
                        Image.Source = new BitmapImage(new Uri("file:///" + file.Local.Path));
                        BackgroundPanel.Background = new SolidColorBrush(Colors.Transparent);
                    }
                    else if (file.Local.CanBeDownloaded && !file.Local.IsDownloadingActive)
                    {
                        Image.Source = null;
                        BackgroundPanel.Background = PlaceholderHelper.GetBrush(user.Id);

                        _protoService?.DownloadFile(file.Id, 1, 0);
                    }
                }
                else
                {
                    Image.Source = null;
                    BackgroundPanel.Background = PlaceholderHelper.GetBrush(user.Id);
                }

                FromLabel.Text        = user.GetFullName();
                DescriptionLabel.Text = string.Format(Strings.Resources.CallEmojiKeyTooltip, user.FirstName);
            }

            if (call.State is CallStateReady ready)
            {
                _emojis = ready.Emojis;

                for (int i = 0; i < ready.Emojis.Count; i++)
                {
                    var imageLarge = FindName($"LargeEmoji{i}") as Image;
                    var source     = Emoji.BuildUri(_emojis[i]);

                    imageLarge.Source = new BitmapImage(new Uri(source));
                }
            }

            switch (call.State)
            {
            case CallStatePending pending:
                if (call.IsOutgoing)
                {
                    ResetUI();
                }
                else
                {
                    Mute.Visibility = Visibility.Collapsed;

                    Close.Visibility = Visibility.Collapsed;
                    Close.Margin     = new Thickness();

                    Accept.Margin     = new Thickness(0, 0, 6, 0);
                    Accept.Visibility = Visibility.Visible;

                    Discard.Margin     = new Thickness(6, 0, 0, 0);
                    Discard.Visibility = Visibility.Visible;
                }
                break;

            case CallStateDiscarded discarded:
                if (call.IsOutgoing && discarded.Reason is CallDiscardReasonDeclined)
                {
                    Mute.Visibility = Visibility.Collapsed;

                    Close.Margin     = new Thickness(0, 0, 6, 0);
                    Close.Visibility = Visibility.Visible;

                    Accept.Margin     = new Thickness(6, 0, 0, 0);
                    Accept.Visibility = Visibility.Visible;

                    Discard.Visibility = Visibility.Collapsed;
                    Discard.Margin     = new Thickness();
                }
                break;

            default:
                ResetUI();
                break;
            }

            switch (call.State)
            {
            case CallStatePending pending:
                StateLabel.Content = call.IsOutgoing
                        ? pending.IsReceived
                        ? Strings.Resources.VoipRinging
                        : pending.IsCreated
                        ? Strings.Resources.VoipWaiting
                        : Strings.Resources.VoipRequesting
                        : Strings.Resources.VoipIncoming;
                break;

            case CallStateExchangingKeys exchangingKeys:
                StateLabel.Content = Strings.Resources.VoipExchangingKeys;
                break;

            case CallStateHangingUp hangingUp:
                StateLabel.Content = Strings.Resources.VoipHangingUp;
                break;

            case CallStateDiscarded discarded:
                StateLabel.Content = discarded.Reason is CallDiscardReasonDeclined
                        ? Strings.Resources.VoipBusy
                        : Strings.Resources.VoipCallEnded;
                break;
            }
        }