patch pour amelioration des etats

Change-Id: I5fd57088cc6a687edbaf80d556d275b7ea1040a7
Tuleap: #1205
diff --git a/SmartPanel.xaml.cpp b/SmartPanel.xaml.cpp
index d1d01f5..b91a2ac 100644
--- a/SmartPanel.xaml.cpp
+++ b/SmartPanel.xaml.cpp
@@ -62,9 +62,9 @@
         _accountsListScrollView_->UpdateLayout();

         _accountsListScrollView_->ScrollToVerticalOffset(_accountsListScrollView_->ScrollableHeight);

     });

-    CallsViewModel::instance->callRecieved += ref new RingClientUWP::CallRecieved([&](

-    Call^ call) {

-        auto from = call->from;

+    RingD::instance->incomingCall += ref new RingClientUWP::IncomingCall([&](

+    String^ accountId, String^ callId, String^ from) {

+        ///auto from = call->from;

         auto contact = ContactsViewModel::instance->findContactByName(from);

 

         if (contact == nullptr)

@@ -76,26 +76,36 @@
         }

 

         auto item = SmartPanelItemsViewModel::instance->findItem(contact);

-        item->_call = call;

+        item->_callId = callId;

 

     });

     RingD::instance->stateChange += ref new StateChange([this](String^ callId, CallStatus state, int code) {

-        auto call = CallsViewModel::instance->findCall(callId);

 

-        if (call == nullptr)

-            return;

-

-        auto item = SmartPanelItemsViewModel::instance->findItem(call);

+        auto item = SmartPanelItemsViewModel::instance->findItem(callId);

 

         if (!item) {

             WNG_("item not found");

             return;

         }

 

-        call->state = state;

+        item->_callStatus = state;

 

-        if (state == CallStatus::IN_PROGRESS)

-            _smartList_->SelectedIndex = SmartPanelItemsViewModel::instance->getIndex(call);

+        switch (state) {

+        case CallStatus::NONE:

+        case CallStatus::ENDED:

+        {

+            item->_callId = "";

+            break;

+        }

+        case CallStatus::IN_PROGRESS:

+        {

+            _smartList_->SelectedItem = item;

+            summonVideoPage();

+            break;

+        }

+        default:

+            break;

+        }

 

     });

 

@@ -106,29 +116,7 @@
         SmartPanelItemsViewModel::instance->itemsList->Append(smartPanelItem);

     });

 

-    RingD::instance->calling += ref new RingClientUWP::Calling([&](

-    Call^ call) {

-        MSG_("!--->> Calling lambda from smartpanel");

-        auto from = call->from;

-        auto contact = ContactsViewModel::instance->findContactByName(from);

 

-        if (contact == nullptr) {

-            WNG_("cannot call the peer, contact not found!");

-            return;

-        }

-

-        auto item = SmartPanelItemsViewModel::instance->findItem(contact);

-

-        if (item == nullptr) {

-            WNG_("cannot call the peer, smart panel item not found!");

-            return;

-        }

-

-        call->state = CallStatus::SEARCHING;

-        MSG_("!--->> should be Searching");

-

-        item->_call = call;

-    });

 

 }

 

@@ -256,21 +244,16 @@
         return;

     }

 

-    auto call = item->_call;

     auto contact = item->_contact;

 

-    if (call) {

-        auto state = call->state;

-

-        if (state == CallStatus::IN_PROGRESS) {

-            if (contact) {

-                contact->_unreadMessages = 0;

-                ContactsViewModel::instance->saveContactsToFile();

-            }

-

-            summonVideoPage();

-            return;

+    if (item->_callStatus == CallStatus::IN_PROGRESS) {

+        if (contact) {

+            contact->_unreadMessages = 0;

+            ContactsViewModel::instance->saveContactsToFile();

         }

+

+        summonVideoPage();

+        return;

     }

 

     if (contact) {

@@ -307,7 +290,7 @@
 void RingClientUWP::Views::SmartPanel::_ringTxtBx__KeyDown(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)

 {

     /* add contact, test purpose but will be reused later in some way */

-    if (e->Key == Windows::System::VirtualKey::Enter && _ringTxtBx_->Text != "") {

+    if (e->Key == Windows::System::VirtualKey::Enter && !_ringTxtBx_->Text->IsEmpty()) {

         ContactsViewModel::instance->addNewContact(_ringTxtBx_->Text, _ringTxtBx_->Text);

         _ringTxtBx_->Text = "";

     }

@@ -319,32 +302,28 @@
     _ringTxtBx_->Text = "";

 }

 

-// REFACTO : change the name IncomingCall if used with OutGoingCall too.

-void RingClientUWP::Views::SmartPanel::_rejectIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)

+void

+RingClientUWP::Views::SmartPanel::_rejectIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)

 {

     auto button = dynamic_cast<Button^>(e->OriginalSource);

     if (button) {

         auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);

         if (item) {

-            auto call = item->_call;

-            if (call)

-                RingD::instance->refuseIncommingCall(call);

-            //call->refuse();

+            auto callId = item->_callId;

+            RingD::instance->refuseIncommingCall(callId);

         }

     }

 }

 

-

-void RingClientUWP::Views::SmartPanel::_acceptIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)

+void

+RingClientUWP::Views::SmartPanel::_acceptIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)

 {

     auto button = dynamic_cast<Button^>(e->OriginalSource);

     if (button) {

         auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);

         if (item) {

-            auto call = item->_call;

-            if (call)

-                RingD::instance->acceptIncommingCall(call);

-            //call->accept();

+            auto callId = item->_callId;

+            RingD::instance->acceptIncommingCall(callId);

         }

     }

 }

@@ -352,9 +331,11 @@
 void

 SmartPanel::_callContact__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)

 {

-    MSG_("!--->> _callContact__Click");

     auto button = dynamic_cast<Button^>(e->OriginalSource);

     if (button) {

+        /* force to hide the button, avoid attempting to call several times... */

+        button->Visibility = Windows::UI::Xaml::Visibility::Collapsed;

+

         auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);

         if (item) {

             auto contact = item->_contact;

@@ -364,32 +345,27 @@
     }

 }

 

-

 void RingClientUWP::Views::SmartPanel::_cancelCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)

 {

     auto button = dynamic_cast<Button^>(e->OriginalSource);

     if (button) {

         auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);

         if (item) {

-            auto call = item->_call;

             RingD::instance->cancelOutGoingCall2(item->_callId);

-

+            item->_callStatus = CallStatus::TERMINATING;

             return;

-            if (call)

-                RingD::instance->cancelOutGoingCall(call);

-            //call->cancel();

         }

     }

 }

 

-

 void RingClientUWP::Views::SmartPanel::Grid_PointerEntered(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)

 {

     auto grid = dynamic_cast<Grid^>(sender);

     auto listBoxItem = dynamic_cast<ListBoxItem^>(sender);

     auto item = dynamic_cast<SmartPanelItem^>(grid->DataContext);

 

-    item->_hovered = Windows::UI::Xaml::Visibility::Visible;

+    if (item->_callId->IsEmpty())

+        item->_hovered = Windows::UI::Xaml::Visibility::Visible;

 }

 

 

@@ -418,6 +394,7 @@
 Object ^ RingClientUWP::Views::IncomingVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)

 {

     auto state = static_cast<CallStatus>(value);

+

     if (state == CallStatus::INCOMING_RINGING)

         return  Windows::UI::Xaml::Visibility::Visible;

     else

@@ -464,7 +441,6 @@
 Object ^ RingClientUWP::Views::HasAnActiveCall::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)

 {

     throw ref new Platform::NotImplementedException();

-

 }

 

 RingClientUWP::Views::HasAnActiveCall::HasAnActiveCall()