Commit c551c365 authored by Nicolas Jager's avatar Nicolas Jager

smartpanel : refactoring

Change-Id: Iea01dd8242270e1c080cd95030da4d211638d993
Tuleap: #1202
parent f2fdec8a
......@@ -35,17 +35,10 @@ Call::Call(String^ accountIdz, String^ callIdz, String^ fromz)
isOutGoing = false; // by default, we consider the call incomming, REFACTO : add this to the constructor params...
this->state = "incoming call";
this->state = CallStatus::NONE;
this->code = -1;
}
void RingClientUWP::Call::stateChange(String ^ state, int code)
{
this->state = state;
PropertyChanged(this, ref new PropertyChangedEventArgs("state"));
this->code = code;
}
void
Call::NotifyPropertyChanged(String^ propertyName)
{
......
......@@ -21,12 +21,15 @@ using namespace Windows::UI::Xaml::Data;
namespace RingClientUWP
{
/* enumerations. */
public enum class CallStatus { NONE, INCOMING_RINGING, OUTGOING_RINGING, SEARCHING, IN_PROGRESS, ENDED };
public ref class Call sealed : public INotifyPropertyChanged
{
public:
/* functions */
Call(String^ accountId, String^ callId, String^ from);
void stateChange(String^ state, int code);
/* properties */
virtual event PropertyChangedEventHandler^ PropertyChanged;
......@@ -34,7 +37,15 @@ public:
property String^ accountId;
property String^ callId;
property String^ from;
property String^ state;
property CallStatus state {
CallStatus get() {
return state_;
}
void set(CallStatus value) {
state_ = value;
PropertyChanged(this, ref new PropertyChangedEventArgs("state"));
}
}
property bool isOutGoing;
property int code;
......@@ -49,6 +60,9 @@ internal:
void accept();
void cancel();
private:
CallStatus state_;
};
}
......@@ -34,32 +34,10 @@ CallsViewModel::CallsViewModel()
RingD::instance->incomingCall += ref new RingClientUWP::IncomingCall([&](
String^ accountId, String^ callId, String^ from) {
auto call = addNewCall(accountId, callId, from);
// REFACTO : add if call == nullptr
callRecieved(call);
});
RingD::instance->stateChange += ref new RingClientUWP::StateChange([&](
String^ callId, String^ state, int code) {
for each (auto call in CallsList_) {
if (call->callId == callId) {
if (state == "OVER") {
delete call;
call->stateChange("", code);
callEnded();
callStatusUpdated(call); // used ?
RingD::instance->hangUpCall(call);
return;
}
else if (state == "CURRENT") {
callStarted();
}
call->stateChange(state, code);
callStatusUpdated(call); // same...
return;
}
}
WNG_("Call not found");
if (call)
callRecieved(call);
});
RingD::instance->stateChange += ref new RingClientUWP::StateChange(this, &RingClientUWP::ViewModel::CallsViewModel::OnstateChange);
}
Call^
......@@ -87,3 +65,20 @@ CallsViewModel::findCall(String^ callId)
return nullptr;
}
void RingClientUWP::ViewModel::CallsViewModel::OnstateChange(Platform::String ^callId, RingClientUWP::CallStatus state, int code)
{
auto call = findCall(callId);
if (!call)
return;
switch (state)
{
case CallStatus::ENDED:
RingD::instance->hangUpCall(call);
default:
break;
}
}
......@@ -66,6 +66,7 @@ private:
CallsViewModel(); // singleton
Vector<Call^>^ CallsList_; // refacto : change C to c
void OnstateChange(Platform::String ^callId, RingClientUWP::CallStatus state, int code);
};
}
}
......@@ -65,28 +65,6 @@ Contact::Contact(String^ name,
notificationNewMessage = Windows::UI::Xaml::Visibility::Visible;
PropertyChanged(this, ref new PropertyChangedEventArgs("unreadMessages"));
}
/* connect to delegate */
ContactsViewModel::instance->notifyNewConversationMessage += ref new NotifyNewConversationMessage([&] (
bool isContactNotSelected) {
if (isContactNotSelected)
PropertyChanged(this, ref new PropertyChangedEventArgs("unreadMessages"));
});
ContactsViewModel::instance->newContactSelected += ref new RingClientUWP::NewContactSelected([&]() {
if (ContactsViewModel::instance->selectedContact == this) {
PropertyChanged(this, ref new PropertyChangedEventArgs("unreadMessages"));
notificationNewMessage = Windows::UI::Xaml::Visibility::Collapsed;
unreadMessages_ = 0;
ContactsViewModel::instance->saveContactsToFile();
}
});
}
void
Contact::addNotifyNewConversationMessage()
{
notificationNewMessage = Windows::UI::Xaml::Visibility::Visible;
unreadMessages_++;
}
void
......@@ -169,4 +147,8 @@ Contact::saveConversationToFile()
file.close();
}
}
}
\ No newline at end of file
}
......@@ -64,23 +64,16 @@ public:
PropertyChanged(this, ref new PropertyChangedEventArgs("notificationNewMessage"));
}
}
property String^ unreadMessages
property uint32 _unreadMessages
{
String^ get()
uint32 get()
{
return unreadMessages_.ToString();
return unreadMessages_;
}
}
property Call^ _call
{
Call^ get()
{
return call_;
}
void set(Call^ call)
void set(uint32 value)
{
call_ = call;
PropertyChanged(this, ref new PropertyChangedEventArgs("_call"));
unreadMessages_ = value;
PropertyChanged(this, ref new PropertyChangedEventArgs("_unreadMessages"));
}
}
property Windows::UI::Xaml::GridLength _contactBarHeight
......@@ -100,7 +93,6 @@ internal:
void saveConversationToFile();
String^ StringifyConversation();
void DestringifyConversation(String^ data);
void addNotifyNewConversationMessage();
protected:
void NotifyPropertyChanged(String^ propertyName);
......@@ -110,7 +102,6 @@ private:
Visibility notificationNewMessage_;
unsigned int unreadMessages_;
Windows::UI::Xaml::GridLength contactBarHeight_ = 0;
Call^ call_;
};
}
......@@ -39,13 +39,13 @@ ContactsViewModel::ContactsViewModel()
/* connect delegates. */
RingD::instance->incomingAccountMessage += ref new IncomingAccountMessage([&](String^ accountId,
String^ from, String^ payload) {
auto contact = findContactByName(from);
String^ fromRingId, String^ payload) {
auto contact = findContactByName(fromRingId);
if (contact == nullptr)
contact = addNewContact(from, from); // contact checked inside addNewContact.
contact = addNewContact(fromRingId, fromRingId); // contact checked inside addNewContact.
bool isNotSelected = (contact != ContactsViewModel::instance->selectedContact) ? true : false;
auto item = SmartPanelItemsViewModel::instance->_selectedItem;
if (contact == nullptr) {
ERR_("contact not handled!");
......@@ -57,15 +57,13 @@ ContactsViewModel::ContactsViewModel()
/* save contacts conversation to disk */
contact->saveConversationToFile();
if (contact->ringID_ == from) {
// increment contact's unread message count
if (isNotSelected) {
contact->addNotifyNewConversationMessage();
// save to disk
saveContactsToFile();
}
// update the xaml for all contacts
notifyNewConversationMessage(isNotSelected);
auto selectedContact = (item) ? item->_contact : nullptr;
if (contact->ringID_ == fromRingId && contact != selectedContact) {
contact->_unreadMessages++;
/* saveContactsToFile used to save the notification */
saveContactsToFile();
}
});
}
......
......@@ -26,11 +26,6 @@ namespace RingClientUWP
{
/* delegates */
delegate void NewContactSelected();
delegate void NoContactSelected();
delegate void ScreenConversationMessage(String^ accountId, String^ from, String^ payload);
delegate void NotifyNewConversationMessage(bool isContactNotSelected);
delegate void ShowContactBar();
delegate void ContactAdded(Contact^);
namespace ViewModel {
......@@ -56,23 +51,6 @@ internal:
void Destringify(String^ data);
/* properties */
property Contact^ selectedContact
{
Contact^ get()
{
return currentItem_;
}
void set(Contact^ value)
{
oldItem_ = currentItem_;
currentItem_ = value;
if (value)
newContactSelected();
else
noContactSelected();
}
}
property Vector<Contact^>^ contactsList
{
Vector<Contact^>^ get()
......@@ -82,11 +60,6 @@ internal:
}
/* events */
event NewContactSelected^ newContactSelected;
event NoContactSelected^ noContactSelected;
event ScreenConversationMessage^ screenConversationMessage;
event NotifyNewConversationMessage^ notifyNewConversationMessage;
event ShowContactBar^ showContactBar;
event ContactAdded^ contactAdded;
private:
......
......@@ -60,36 +60,13 @@ MainPage::MainPage()
_messageTextFrame_->Navigate(TypeName(RingClientUWP::Views::MessageTextPage::typeid));
/* connect to delegates */
ContactsViewModel::instance->newContactSelected += ref new NewContactSelected([&]() {
Contact^ selectedContact = ContactsViewModel::instance->selectedContact;
auto call = selectedContact?
SmartPanelItemsViewModel::instance->findItem(selectedContact)->_call:
nullptr;
if (call != nullptr) {
if (call->state == "CURRENT")
showFrame(_videoFrame_);
else
showFrame(_messageTextFrame_);
}
else {
showFrame(_messageTextFrame_);
}
});
ContactsViewModel::instance->noContactSelected += ref new NoContactSelected([&]() {
showFrame(_welcomeFrame_);
});
CallsViewModel::instance->callStarted += ref new CallStarted([&]() {
showFrame(_videoFrame_);
});
CallsViewModel::instance->callEnded += ref new CallEnded([&]() {
auto contact = ContactsViewModel::instance->selectedContact;
if(contact)
showFrame(_messageTextFrame_);
else
showFrame(_welcomeFrame_);
});
RingD::instance->stateChange += ref new RingClientUWP::StateChange(this, &RingClientUWP::MainPage::OnstateChange);
auto smartPanel = dynamic_cast<SmartPanel^>(_smartPanel_->Content);
smartPanel->summonMessageTextPage += ref new RingClientUWP::SummonMessageTextPage(this, &RingClientUWP::MainPage::OnsummonMessageTextPage);
smartPanel->summonWelcomePage += ref new RingClientUWP::SummonWelcomePage(this, &RingClientUWP::MainPage::OnsummonWelcomePage);
smartPanel->summonVideoPage += ref new RingClientUWP::SummonVideoPage(this, &RingClientUWP::MainPage::OnsummonVideoPage);
auto videoPage = dynamic_cast<VideoPage^>(_videoFrame_->Content);
videoPage->pressHangUpCall += ref new RingClientUWP::PressHangUpCall(this, &RingClientUWP::MainPage::OnpressHangUpCall);
DisplayInformation^ displayInformation = DisplayInformation::GetForCurrentView();
dpiChangedtoken = (displayInformation->DpiChanged += ref new TypedEventHandler<DisplayInformation^,
......@@ -132,7 +109,6 @@ RingClientUWP::MainPage::showFrame(Windows::UI::Xaml::Controls::Frame^ frame)
dynamic_cast<VideoPage^>(_videoFrame_->Content)->updatePageContent();
} else if (frame == _messageTextFrame_) {
_navGrid_->SetRow(_messageTextFrame_, 1);
dynamic_cast<MessageTextPage^>(_messageTextFrame_->Content)->updatePageContent();
}
}
......@@ -227,4 +203,60 @@ void
RingClientUWP::MainPage::hideLoadingOverlay()
{
_loadingOverlay_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
}
\ No newline at end of file
}
void RingClientUWP::MainPage::OnsummonMessageTextPage()
{
auto messageTextPage = dynamic_cast<MessageTextPage^>(_messageTextFrame_->Content);
messageTextPage->updatePageContent();
showFrame(_messageTextFrame_);
}
void RingClientUWP::MainPage::OnsummonWelcomePage()
{
showFrame(_welcomeFrame_);
}
void RingClientUWP::MainPage::OnsummonVideoPage()
{
auto videoPage = dynamic_cast<VideoPage^>(_videoFrame_->Content);
videoPage->updatePageContent();
showFrame(_videoFrame_);
}
void RingClientUWP::MainPage::OnpressHangUpCall()
{
OnsummonMessageTextPage();
}
void RingClientUWP::MainPage::OnstateChange(Platform::String ^callId, RingClientUWP::CallStatus state, int code)
{
auto item = SmartPanelItemsViewModel::instance->_selectedItem;
switch (state) {
/* send the user to the peer's message text page */
case CallStatus::ENDED:
{
if (item)
OnsummonMessageTextPage();
break;
}
/* if the state changes to IN_PROGRESS for any peer, show the video page.
nb : the peer is currently selected from the SmartPannel. */
case CallStatus::IN_PROGRESS:
{
if (item)
OnsummonVideoPage();
break;
}
default:
break;
}
}
......@@ -24,6 +24,7 @@ using namespace Windows::Foundation;
namespace RingClientUWP
{
namespace Views {
}
public ref class MainPage sealed
......@@ -51,5 +52,10 @@ private:
void _toggleSmartBoxButton__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
void showFrame(Windows::UI::Xaml::Controls::Frame^ frame);
void OnsummonMessageTextPage();
void OnsummonWelcomePage();
void OnsummonVideoPage();
void OnpressHangUpCall();
void OnstateChange(Platform::String ^callId, RingClientUWP::CallStatus state, int code);
};
}
\ No newline at end of file
......@@ -16,8 +16,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
**************************************************************************/
#include "pch.h"
#include "ContactsViewModel.h"
#include "MainPage.xaml.h"
#include "MessageTextPage.xaml.h"
......@@ -44,25 +44,19 @@ MessageTextPage::MessageTextPage()
{
InitializeComponent();
/* connect delegates. */
// REFACTO : useless ?
/* connect to delegates */
RingD::instance->incomingAccountMessage += ref new IncomingAccountMessage([&](String^ accountId,
String^ from, String^ payload) {
});
ContactsViewModel::instance->notifyNewConversationMessage += ref new NotifyNewConversationMessage([&](
bool isContactNotSelected) {
if (!isContactNotSelected) {
/* if the contact is selected that means we should scroll down */
scrollDown();
}
String^ fromRingId, String^ payload) {
scrollDown();
});
}
void
RingClientUWP::Views::MessageTextPage::updatePageContent()
{
auto contact = ContactsViewModel::instance->selectedContact;
auto item = SmartPanelItemsViewModel::instance->_selectedItem;
auto contact = item->_contact;
if (!contact)
return;
......@@ -96,7 +90,9 @@ RingClientUWP::Views::MessageTextPage::_messageTextBox__KeyDown(Platform::Object
void
RingClientUWP::Views::MessageTextPage::sendMessage()
{
auto contact = ContactsViewModel::instance->selectedContact;
auto item = SmartPanelItemsViewModel::instance->_selectedItem;
auto contact = item->_contact;
auto txt = _messageTextBox_->Text;
/* empty the textbox */
......
......@@ -67,7 +67,8 @@ void RingClientUWP::RingD::sendAccountTextMessage(String^ message)
std::string accountId3(accountId2.begin(), accountId2.end());
/* recipient */
auto contact = ContactsViewModel::instance->selectedContact;
auto item = SmartPanelItemsViewModel::instance->_selectedItem;
auto contact = item->_contact;
auto toRingId = contact->ringID_;
std::wstring toRingId2(toRingId->Begin());
std::string toRingId3(toRingId2.begin(), toRingId2.end());
......@@ -197,7 +198,7 @@ RingClientUWP::RingD::startDaemon()
CoreDispatcherPriority::Normal, ref new DispatchedHandler([=]()
{
incomingCall(accountId2, callId2, from2);
stateChange(callId2, "incoming call", 0);
stateChange(callId2, CallStatus::INCOMING_RINGING, 0);
}));
}),
DRing::exportable_callback<DRing::CallSignal::StateChange>([this](
......@@ -213,11 +214,13 @@ RingClientUWP::RingD::startDaemon()
auto callId2 = toPlatformString(callId);
auto state2 = toPlatformString(state);
auto state3 = getCallStatus(state2);
CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(
CoreDispatcherPriority::Low, ref new DispatchedHandler([=]()
{
stateChange(callId2, state2, code);
stateChange(callId2, state3, code);
}));
}),
DRing::exportable_callback<DRing::ConfigurationSignal::IncomingAccountMessage>([&](
......@@ -414,3 +417,23 @@ RingD::dequeueTasks()
tasksList_.pop();
}
}
CallStatus RingClientUWP::RingD::getCallStatus(String^ state)
{
if (state == "INCOMING")
return CallStatus::INCOMING_RINGING;
if (state == "CURRENT")
return CallStatus::IN_PROGRESS;
if (state == "OVER")
return CallStatus::ENDED;
if (state == "RINGING")
return CallStatus::OUTGOING_RINGING;
if (state == "CONNECTING")
return CallStatus::SEARCHING;
return CallStatus::NONE;
}
......@@ -24,7 +24,7 @@ namespace RingClientUWP
/* delegate */
delegate void IncomingCall(String^ accountId, String^ callId, String^ from);
delegate void StateChange(String^ callId, String^ state, int code);
delegate void StateChange(String^ callId, CallStatus state, int code);
delegate void IncomingAccountMessage(String^ accountId, String^ from, String^ payload);
delegate void Calling(Call^ call);
......@@ -104,6 +104,7 @@ private:
/* functions */
RingD(); // singleton
void dequeueTasks();
CallStatus getCallStatus(String^ state);
/* members */
std::string localFolder_;
......
This diff is collapsed.
......@@ -77,8 +77,9 @@ SmartPanel::SmartPanel()
auto item = SmartPanelItemsViewModel::instance->findItem(contact);
item->_call = call;
});
RingD::instance->stateChange += ref new StateChange([this](String^ callId, String^ state, int code) {
RingD::instance->stateChange += ref new StateChange([this](String^ callId, CallStatus state, int code) {
auto call = CallsViewModel::instance->findCall(callId);
if (call == nullptr)
......@@ -91,18 +92,11 @@ SmartPanel::SmartPanel()
return;
}
if (call->state == "incoming call")
item->_IncomingCallBar = Windows::UI::Xaml::Visibility::Visible;
call->state = state;
if (call->state == "CURRENT") {
item->_IncomingCallBar = Windows::UI::Xaml::Visibility::Collapsed;
item->_OutGoingCallBar = Windows::UI::Xaml::Visibility::Collapsed;
}
if (state == CallStatus::IN_PROGRESS)
_smartList_->SelectedIndex = SmartPanelItemsViewModel::instance->getIndex(call);
if (call->state == "") {
item->_IncomingCallBar = Windows::UI::Xaml::Visibility::Collapsed;
item->_OutGoingCallBar = Windows::UI::Xaml::Visibility::Collapsed;
}
});
......@@ -129,10 +123,8 @@ SmartPanel::SmartPanel()
return;
}
/* use underscore to differentiate states from UI, we need to think more about states management */
call->state = "_calling_";
call->state = CallStatus::SEARCHING;
item->_OutGoingCallBar = Windows::UI::Xaml::Visibility::Visible;
item->_call = call;
});
......@@ -253,12 +245,31 @@ void RingClientUWP::Views::SmartPanel::_createAccountNo__Click(Platform::Object^
void
SmartPanel::_smartList__SelectionChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e)
{
auto listbox = safe_cast<ListBox^>(sender);
auto item = safe_cast<SmartPanelItem^>(listbox->SelectedItem);
auto listbox = dynamic_cast<ListBox^>(sender);
auto item = dynamic_cast<SmartPanelItem^>(listbox->SelectedItem);
SmartPanelItemsViewModel::instance->_selectedItem = item;
if (!item) {
summonWelcomePage();
return;
}
Contact^ contact = (item) ? safe_cast<Contact^>(item->_contact) : nullptr;
auto call = item->_call;
if (call) {
auto state = call->state;
if (state == CallStatus::IN_PROGRESS) {
summonVideoPage();
return;
}
}
ContactsViewModel::instance->selectedContact = contact;
auto contact = item->_contact;
if (contact) {
summonMessageTextPage();
contact->_unreadMessages = 0;
ContactsViewModel::instance->saveContactsToFile();
return;
}
}
void
......@@ -303,7 +314,8 @@ void RingClientUWP::Views::SmartPanel::_ringTxtBx__Click(Platform::Object^ sende
void RingClientUWP::Views::SmartPanel::_rejectIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
auto button = dynamic_cast<Button^>(e->OriginalSource);
auto call = dynamic_cast<Call^>(button->DataContext);
auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);
auto call = item->_call;
call->refuse();
}
......@@ -312,9 +324,8 @@ void RingClientUWP::Views::SmartPanel::_rejectIncomingCallBtn__Click(Platform::O
void RingClientUWP::Views::SmartPanel::_acceptIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
auto button = dynamic_cast<Button^>(e->OriginalSource);
auto call = dynamic_cast<Call^>(button->DataContext);
_smartList_->SelectedIndex = SmartPanelItemsViewModel::instance->getIndex(call);
auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);
auto call = item->_call;
call->accept();
}
......@@ -326,8 +337,6 @@ SmartPanel::_callContact__Click(Platform::Object^ sender, Windows::UI::Xaml::Rou
auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);
auto contact = item->_contact;
_smartList_->SelectedIndex = SmartPanelItemsViewModel::instance->getIndex(contact);
RingD::instance->placeCall(contact);
}
......@@ -335,7 +344,8 @@ SmartPanel::_callContact__Click(Platform::Object^ sender, Windows::UI::Xaml::Rou
void RingClientUWP::Views::SmartPanel::_cancelCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
auto button = dynamic_cast<Button^>(e->OriginalSource);
auto call = dynamic_cast<Call^>(button->DataContext);
auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);
auto call = item->_call;
call->cancel();
}
......@@ -347,7 +357,7 @@ void RingClientUWP::Views::SmartPanel::Grid_PointerEntered(Platform::Object^ sen
auto listBoxItem = dynamic_cast<ListBoxItem^>(sender);
auto item = dynamic_cast<SmartPanelItem^>(grid->DataContext);
item->_callBar = Windows::UI::Xaml::Visibility::Visible;
item->_hovered = Windows::UI::Xaml::Visibility::Visible;
}
......@@ -357,7 +367,7 @@ void RingClientUWP::Views::SmartPanel::Grid_PointerExited(Platform::Object^ send
auto grid = dynamic_cast<Grid^>(sender);
auto item = dynamic_cast<SmartPanelItem^>(grid->DataContext);
item->_callBar = Windows::UI::Xaml::Visibility::Collapsed;
item->_hovered = Windows::UI::Xaml::Visibility::Collapsed;
}
......@@ -371,4 +381,77 @@ void RingClientUWP::Views::SmartPanel::_contactItem__PointerReleased(Platform::O
else
_smartList_->SelectedItem = nullptr;
}
\ No newline at end of file
}
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
return Windows::UI::Xaml::Visibility::Collapsed;
}
Object ^ RingClientUWP::Views::IncomingVisibility::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
{
throw ref new Platform::NotImplementedException();
}
RingClientUWP::Views::IncomingVisibility::IncomingVisibility()
{}
Object ^ RingClientUWP::Views::OutGoingVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
{
auto state = static_cast<CallStatus>(value);
if (state == CallStatus::SEARCHING || state == CallStatus::OUTGOING_RINGING)
return Windows::UI::Xaml::Visibility::Visible;
else
return Windows::UI::Xaml::Visibility::Collapsed;
}
Object ^ RingClientUWP::Views::OutGoingVisibility::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
{
throw ref new Platform::NotImplementedException();
}
RingClientUWP::Views::OutGoingVisibility::OutGoingVisibility()
{}