internal: manage reinitialisation of video on visibility change

- adds stopping video capture stream when application goes "invisible"

- adds reinitialisation of video capture stream when application
  becomes "visible"

- adds functions for pausing the call (Not yet implemented)

Change-Id: I58a24718b47d9edcc9b39ff707e0fbb695dc48f6
Tuleap: #1212
diff --git a/MainPage.xaml.cpp b/MainPage.xaml.cpp
index 666c07c..96ab011 100644
--- a/MainPage.xaml.cpp
+++ b/MainPage.xaml.cpp
@@ -295,11 +295,44 @@
 {

     if (e->Visible) {

         WriteLine("->Visible");

-        //Video::VideoManager::instance->

+        auto isPreviewing = Video::VideoManager::instance->captureManager()->isPreviewing;

+        bool isInCall = false;

+        for (auto item : SmartPanelItemsViewModel::instance->itemsList) {

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

+                isInCall = true;

+                break;

+            }

+        }

+        if (isInCall) {

+            /*if (RingD::instance->currentCallId)

+                RingD::instance->unPauseCall(RingD::instance->currentCallId);*/

+            Video::VideoManager::instance->captureManager()->InitializeCameraAsync();

+            Video::VideoManager::instance->captureManager()->videoFrameCopyInvoker->Start();

+        }

     }

     else {

         WriteLine("->Invisible");

-        //Video::VideoManager::instance->captureManager()->CleanupCameraAsync();

+        auto isPreviewing = Video::VideoManager::instance->captureManager()->isPreviewing;

+        bool isInCall = false;

+        for (auto item : SmartPanelItemsViewModel::instance->itemsList) {

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

+                isInCall = true;

+                RingD::instance->currentCallId = item->_callId;

+                break;

+            }

+        }

+        if (isInCall) {

+            /*if (RingD::instance->currentCallId) {

+                WriteLine("Pausing call: " + RingD::instance->currentCallId);

+                RingD::instance->pauseCall(RingD::instance->currentCallId);

+            }*/

+            if (isPreviewing) {

+                Video::VideoManager::instance->captureManager()->StopPreviewAsync();

+                if (Video::VideoManager::instance->captureManager()->captureTaskTokenSource)

+                    Video::VideoManager::instance->captureManager()->captureTaskTokenSource->cancel();

+                Video::VideoManager::instance->captureManager()->videoFrameCopyInvoker->Stop();

+            }

+        }

     }

 }

 

@@ -347,11 +380,7 @@
                 Video::VideoManager::instance->captureManager()->CleanupCameraAsync()

                     .then([](){

                     WriteLine("Hang up calls...");

-                    for (auto item : SmartPanelItemsViewModel::instance->itemsList) {

-                        if (item->_callId && item->_callStatus != CallStatus::NONE) {

-                            DRing::hangUp(Utils::toString(item->_callId));

-                        }

-                    }

+                    DRing::fini();

                 });

                 break;