Skip to content
Snippets Groups Projects
Commit 7f34b772 authored by Nicolas Jager's avatar Nicolas Jager
Browse files

UI : visual updates

- stretches menus vertically.
- manages too long time lookup.
- moves element on welcomePage.
- adds profil name on the message text page.
- does lookups during incoming messages.
- show contact's avatar.

Change-Id: I2d482978281ecb0fb088cc93112a032e04e7501b
Tuleap: #790
parent f11cbec8
Branches
No related tags found
No related merge requests found
...@@ -36,7 +36,8 @@ using namespace ViewModel; ...@@ -36,7 +36,8 @@ using namespace ViewModel;
Contact::Contact(String^ name, Contact::Contact(String^ name,
String^ ringID, String^ ringID,
String^ GUID, String^ GUID,
unsigned int unreadmessages) unsigned int unreadmessages,
ContactStatus contactStatus)
{ {
vCard_ = ref new VCardUtils::VCard(this); vCard_ = ref new VCardUtils::VCard(this);
...@@ -73,6 +74,8 @@ Contact::Contact(String^ name, ...@@ -73,6 +74,8 @@ Contact::Contact(String^ name,
_vcardUID = ""; _vcardUID = "";
_avatarImage = ref new String(L"ms-appx:///Assets/TESTS/contactAvatar.png"); _avatarImage = ref new String(L"ms-appx:///Assets/TESTS/contactAvatar.png");
_displayName = ""; _displayName = "";
contactStatus_ = contactStatus;
} }
void void
......
...@@ -43,12 +43,23 @@ ref class Conversation; ...@@ -43,12 +43,23 @@ ref class Conversation;
public ref class Contact sealed : public INotifyPropertyChanged public ref class Contact sealed : public INotifyPropertyChanged
{ {
public: public:
Contact(String^ name, String^ ringID, String^ GUID, unsigned int unreadmessages); Contact(String^ name, String^ ringID, String^ GUID, unsigned int unreadmessages, ContactStatus contactStatus);
JsonObject^ ToJsonObject(); JsonObject^ ToJsonObject();
virtual event PropertyChangedEventHandler^ PropertyChanged; virtual event PropertyChangedEventHandler^ PropertyChanged;
property String^ name_; property String^ _name
{
String^ get()
{
return name_;
}
void set(String^ value)
{
name_ = value;
NotifyPropertyChanged("_name");
}
}
property String^ ringID_; property String^ ringID_;
property String^ GUID_; property String^ GUID_;
...@@ -122,6 +133,19 @@ public: ...@@ -122,6 +133,19 @@ public:
} }
} }
property ContactStatus _contactStatus
{
ContactStatus get()
{
return contactStatus_;
}
void set(ContactStatus value)
{
contactStatus_ = value;
NotifyPropertyChanged("_contactStatus");
}
}
VCardUtils::VCard^ getVCard(); VCardUtils::VCard^ getVCard();
internal: internal:
...@@ -142,6 +166,8 @@ private: ...@@ -142,6 +166,8 @@ private:
String^ avatarImage_; String^ avatarImage_;
String^ displayName_; String^ displayName_;
Windows::UI::Xaml::GridLength contactBarHeight_ = 0; Windows::UI::Xaml::GridLength contactBarHeight_ = 0;
ContactStatus contactStatus_;
String^ name_;
}; };
} }
...@@ -51,6 +51,8 @@ ContactsViewModel::ContactsViewModel() ...@@ -51,6 +51,8 @@ ContactsViewModel::ContactsViewModel()
return; return;
} }
RingD::instance->lookUpAddress(fromRingId);
contact->_conversation->addMessage(""/* date not yet used*/, MSG_FROM_CONTACT, payload); contact->_conversation->addMessage(""/* date not yet used*/, MSG_FROM_CONTACT, payload);
/* save contacts conversation to disk */ /* save contacts conversation to disk */
...@@ -67,6 +69,9 @@ ContactsViewModel::ContactsViewModel() ...@@ -67,6 +69,9 @@ ContactsViewModel::ContactsViewModel()
}); });
RingD::instance->incomingMessage += RingD::instance->incomingMessage +=
ref new RingClientUWP::IncomingMessage(this, &RingClientUWP::ViewModel::ContactsViewModel::OnincomingMessage); ref new RingClientUWP::IncomingMessage(this, &RingClientUWP::ViewModel::ContactsViewModel::OnincomingMessage);
RingD::instance->registeredNameFound += ref new RingClientUWP::RegisteredNameFound(this, &RingClientUWP::ViewModel::ContactsViewModel::OnregisteredNameFound);
} }
Contact^ // refacto : remove "byName" Contact^ // refacto : remove "byName"
...@@ -74,7 +79,7 @@ ContactsViewModel::findContactByName(String^ name) ...@@ -74,7 +79,7 @@ ContactsViewModel::findContactByName(String^ name)
{ {
auto trimmedName = Utils::Trim(name); auto trimmedName = Utils::Trim(name);
for each (Contact^ contact in contactsList_) for each (Contact^ contact in contactsList_)
if (contact->name_ == trimmedName) if (contact->_name == trimmedName)
return contact; return contact;
return nullptr; return nullptr;
...@@ -90,12 +95,12 @@ Contact ^ RingClientUWP::ViewModel::ContactsViewModel::findContactByRingId(Strin ...@@ -90,12 +95,12 @@ Contact ^ RingClientUWP::ViewModel::ContactsViewModel::findContactByRingId(Strin
} }
Contact^ Contact^
ContactsViewModel::addNewContact(String^ name, String^ ringId) ContactsViewModel::addNewContact(String^ name, String^ ringId, ContactStatus contactStatus)
{ {
auto trimmedName = Utils::Trim(name); auto trimmedName = Utils::Trim(name);
if (contactsList_ && !findContactByName(trimmedName)) { if (contactsList_ && !findContactByName(trimmedName)) {
//if (contactsList_ && !findContactByName(trimmedName) && !findContactByRingId(ringId)) { //if (contactsList_ && !findContactByName(trimmedName) && !findContactByRingId(ringId)) {
Contact^ contact = ref new Contact(trimmedName, ringId, nullptr, 0); Contact^ contact = ref new Contact(trimmedName, ringId, nullptr, 0, contactStatus);
contactsList_->Append(contact); contactsList_->Append(contact);
saveContactsToFile(); saveContactsToFile();
contactAdded(contact); contactAdded(contact);
...@@ -178,7 +183,7 @@ ContactsViewModel::Destringify(String^ data) ...@@ -178,7 +183,7 @@ ContactsViewModel::Destringify(String^ data)
accountIdAssociated = contactObject->GetNamedString(accountIdAssociatedKey); accountIdAssociated = contactObject->GetNamedString(accountIdAssociatedKey);
vcardUID = contactObject->GetNamedString(vcardUIDKey); vcardUID = contactObject->GetNamedString(vcardUIDKey);
} }
auto contact = ref new Contact(name, ringid, guid, unreadmessages); auto contact = ref new Contact(name, ringid, guid, unreadmessages, ContactStatus::READY);
contact->_displayName = displayname; contact->_displayName = displayname;
contact->_accountIdAssociated = accountIdAssociated; contact->_accountIdAssociated = accountIdAssociated;
// contact image // contact image
...@@ -233,6 +238,7 @@ void RingClientUWP::ViewModel::ContactsViewModel::OnincomingMessage(Platform::St ...@@ -233,6 +238,7 @@ void RingClientUWP::ViewModel::ContactsViewModel::OnincomingMessage(Platform::St
saveContactsToFile(); saveContactsToFile();
} }
} }
} }
void void
...@@ -240,3 +246,15 @@ ContactsViewModel::modifyContact(Contact^ contact) ...@@ -240,3 +246,15 @@ ContactsViewModel::modifyContact(Contact^ contact)
{ {
contactDataModified(contact); contactDataModified(contact);
} }
void RingClientUWP::ViewModel::ContactsViewModel::OnregisteredNameFound(RingClientUWP::LookupStatus status, const std::string &address, const std::string &name)
{
if (status == LookupStatus::SUCCESS) {
for each (Contact^ contact in contactsList_)
if (contact->ringID_ == Utils::toPlatformString(address)) {
contact->_name = Utils::toPlatformString(name);
saveContactsToFile();
}
}
}
...@@ -47,7 +47,7 @@ internal: ...@@ -47,7 +47,7 @@ internal:
/* functions */ /* functions */
Contact^ findContactByName(String^ name); Contact^ findContactByName(String^ name);
Contact^ findContactByRingId(String^ ringId); Contact^ findContactByRingId(String^ ringId);
Contact^ addNewContact(String^ name, String^ ringId); Contact^ addNewContact(String^ name, String^ ringId, ContactStatus contactStatus = ContactStatus::READY);
void saveContactsToFile(); void saveContactsToFile();
void openContactsFromFile(); void openContactsFromFile();
String^ Stringify(); String^ Stringify();
...@@ -76,6 +76,7 @@ private: ...@@ -76,6 +76,7 @@ private:
Contact^ oldItem_; Contact^ oldItem_;
void OnincomingMessage(Platform::String ^callId, Platform::String ^payload); void OnincomingMessage(Platform::String ^callId, Platform::String ^payload);
void OnregisteredNameFound(RingClientUWP::LookupStatus status, const std::string &address, const std::string &name);
}; };
} }
} }
...@@ -20,4 +20,9 @@ public enum class LookupStatus { ...@@ -20,4 +20,9 @@ public enum class LookupStatus {
ERRORR // one cannot simply use ERROR ERRORR // one cannot simply use ERROR
}; };
public enum class ContactStatus {
WAITING_FOR_ACTIVATION, // waiting for lookup
READY
};
} }
\ No newline at end of file
...@@ -136,13 +136,13 @@ ...@@ -136,13 +136,13 @@
<Grid Background="#FFF2F2F2"> <Grid Background="#FFF2F2F2">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="61" /> <RowDefinition Height="auto" />
<RowDefinition Height="*"/> <RowDefinition Height="*"/>
<RowDefinition Height="auto" /> <RowDefinition Height="auto" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid Grid.Row="0" <Grid Grid.Row="0"
Background="White" Background="White"
Height="61"> Height="auto">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="60"/> <ColumnDefinition Width="60"/>
<ColumnDefinition Width="auto"/> <ColumnDefinition Width="auto"/>
...@@ -157,7 +157,8 @@ ...@@ -157,7 +157,8 @@
</Ellipse> </Ellipse>
<Grid Grid.Column="1"> <Grid Grid.Column="1">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="31" /> <RowDefinition Height="25" />
<RowDefinition Height="25" />
<RowDefinition Height="30" /> <RowDefinition Height="30" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid Grid.Row="0"> <Grid Grid.Row="0">
...@@ -169,7 +170,7 @@ ...@@ -169,7 +170,7 @@
</Grid> </Grid>
<TextBlock x:Name="_title_" <TextBlock x:Name="_title_"
Grid.Column="0" Grid.Column="0"
Text="[TEXT MISSING]" Text=""
TextWrapping="NoWrap" TextWrapping="NoWrap"
TextTrimming="CharacterEllipsis" TextTrimming="CharacterEllipsis"
VerticalAlignment="Center" VerticalAlignment="Center"
...@@ -186,7 +187,14 @@ ...@@ -186,7 +187,14 @@
</ComboBox.ItemTemplate> </ComboBox.ItemTemplate>
</ComboBox> </ComboBox>
</Grid> </Grid>
<Grid Grid.Row="1"> <TextBlock x:Name="_profilName_"
Grid.Row="1"
Text=""
FontStyle="Italic"
VerticalAlignment="Center"
FontSize="16"
Margin="4,0,4,0" />
<Grid Grid.Row="2">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/> <ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/> <ColumnDefinition Width="auto"/>
......
...@@ -42,6 +42,7 @@ using namespace Windows::UI::Core; ...@@ -42,6 +42,7 @@ using namespace Windows::UI::Core;
using namespace Windows::UI::Popups; using namespace Windows::UI::Popups;
// refacto : the message text page should be
MessageTextPage::MessageTextPage() MessageTextPage::MessageTextPage()
{ {
InitializeComponent(); InitializeComponent();
...@@ -69,13 +70,18 @@ RingClientUWP::Views::MessageTextPage::updatePageContent() ...@@ -69,13 +70,18 @@ RingClientUWP::Views::MessageTextPage::updatePageContent()
return; return;
/* show the name of contact on the page */ /* show the name of contact on the page */
_title_->Text = contact->name_; _title_->Text = contact->_name;
_profilName_->Text = contact->_displayName;
String^ image_path = Utils::toPlatformString(RingD::instance->getLocalFolder()) + ".vcards\\" + contact->_vcardUID + ".png"; String^ image_path = Utils::toPlatformString(RingD::instance->getLocalFolder()) + ".vcards\\" + contact->_vcardUID + ".png";
if (Utils::fileExists(Utils::toString(image_path))) { if (Utils::fileExists(Utils::toString(image_path))) {
auto uri = ref new Windows::Foundation::Uri(image_path); auto uri = ref new Windows::Foundation::Uri(image_path);
_contactBarAvatar_->ImageSource = ref new Windows::UI::Xaml::Media::Imaging::BitmapImage(uri); _contactBarAvatar_->ImageSource = ref new Windows::UI::Xaml::Media::Imaging::BitmapImage(uri);
} }
else {
auto uri = ref new Windows::Foundation::Uri("ms-appx:///Assets/TESTS/contactAvatar.png");
_contactBarAvatar_->ImageSource = ref new Windows::UI::Xaml::Media::Imaging::BitmapImage(uri);
}
/* show messages */ /* show messages */
_messagesList_->ItemsSource = contact->_conversation->_messages; _messagesList_->ItemsSource = contact->_conversation->_messages;
......
...@@ -151,7 +151,7 @@ void RingConsolePanel::sendCommand() ...@@ -151,7 +151,7 @@ void RingConsolePanel::sendCommand()
auto list = ContactsViewModel::instance->contactsList; auto list = ContactsViewModel::instance->contactsList;
MSG_("list of calls returned by the daemon :"); MSG_("list of calls returned by the daemon :");
for (auto contact : list) { for (auto contact : list) {
MSG_("name : " + Utils::toString(contact->name_)); MSG_("name : " + Utils::toString(contact->_name));
MSG_("ringId : " + Utils::toString(contact->ringID_)); MSG_("ringId : " + Utils::toString(contact->ringID_));
} }
return; return;
......
...@@ -906,6 +906,8 @@ RingD::dequeueTasks() ...@@ -906,6 +906,8 @@ RingD::dequeueTasks()
item->_callId = Utils::toPlatformString(callId); item->_callId = Utils::toPlatformString(callId);
//MSG_("$1 place call with id : " + Utils::toString(item->_callId)); //MSG_("$1 place call with id : " + Utils::toString(item->_callId));
/* if for any reason there is no callid, do not propagate the event*/
if (!callId.empty())
callPlaced(Utils::toPlatformString(callId)); callPlaced(Utils::toPlatformString(callId));
})); }));
...@@ -1118,7 +1120,7 @@ RingD::dequeueTasks() ...@@ -1118,7 +1120,7 @@ RingD::dequeueTasks()
} }
case Request::LookUpAddress: case Request::LookUpAddress:
{ {
//DRing::lookupAddress(accountID.toStdString(), nameServiceURL.toStdString(), address.toStdString()); DRing::lookupAddress("", "", Utils::toString(task->_address));
break; break;
} }
case Request::RegisterName: case Request::RegisterName:
...@@ -1129,12 +1131,14 @@ RingD::dequeueTasks() ...@@ -1129,12 +1131,14 @@ RingD::dequeueTasks()
if (accountDetails[DRing::Account::ConfProperties::USERNAME].empty()) if (accountDetails[DRing::Account::ConfProperties::USERNAME].empty())
registerName_new(task->_accountId_new, task->_password_new, task->_publicUsername_new); registerName_new(task->_accountId_new, task->_password_new, task->_publicUsername_new);
else else
{
result = DRing::registerName(task->_accountId_new, task->_password_new, task->_publicUsername_new); result = DRing::registerName(task->_accountId_new, task->_password_new, task->_publicUsername_new);
CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High, CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,
ref new DispatchedHandler([=]() { ref new DispatchedHandler([=]() {
nameRegistred(result); nameRegistred(result);
})); }));
}
//const wchar_t* toto = task->_accountId->Data(); //const wchar_t* toto = task->_accountId->Data();
......
This diff is collapsed.
...@@ -170,6 +170,8 @@ SmartPanel::SmartPanel() ...@@ -170,6 +170,8 @@ SmartPanel::SmartPanel()
RingD::instance->registrationStateErrorGeneric += ref new RingClientUWP::RegistrationStateErrorGeneric(this, &RingClientUWP::Views::SmartPanel::OnregistrationStateErrorGeneric); RingD::instance->registrationStateErrorGeneric += ref new RingClientUWP::RegistrationStateErrorGeneric(this, &RingClientUWP::Views::SmartPanel::OnregistrationStateErrorGeneric);
RingD::instance->registrationStateRegistered += ref new RingClientUWP::RegistrationStateRegistered(this, &RingClientUWP::Views::SmartPanel::OnregistrationStateRegistered); RingD::instance->registrationStateRegistered += ref new RingClientUWP::RegistrationStateRegistered(this, &RingClientUWP::Views::SmartPanel::OnregistrationStateRegistered);
RingD::instance->callPlaced += ref new RingClientUWP::CallPlaced(this, &RingClientUWP::Views::SmartPanel::OncallPlaced); RingD::instance->callPlaced += ref new RingClientUWP::CallPlaced(this, &RingClientUWP::Views::SmartPanel::OncallPlaced);
menuOpen = MenuOpen::CONTACTS_LIST;
} }
void void
...@@ -233,6 +235,7 @@ void RingClientUWP::Views::SmartPanel::_smartGridButton__Clicked(Object^ sender, ...@@ -233,6 +235,7 @@ void RingClientUWP::Views::SmartPanel::_smartGridButton__Clicked(Object^ sender,
void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Checked(Object^ sender, RoutedEventArgs^ e) void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Checked(Object^ sender, RoutedEventArgs^ e)
{ {
menuOpen = MenuOpen::ACCOUNTS_LIST;
_settingsMenu_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; _settingsMenu_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
_settingsMenuButton_->IsChecked = false; _settingsMenuButton_->IsChecked = false;
_shareMenuButton_->IsChecked = false; _shareMenuButton_->IsChecked = false;
...@@ -247,6 +250,7 @@ void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Checked(Object^ send ...@@ -247,6 +250,7 @@ void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Checked(Object^ send
void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Unchecked(Object^ sender, RoutedEventArgs^ e) void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Unchecked(Object^ sender, RoutedEventArgs^ e)
{ {
menuOpen = MenuOpen::CONTACTS_LIST;
_accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
_accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
_accountEditionGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; _accountEditionGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
...@@ -257,6 +261,7 @@ void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Unchecked(Object^ se ...@@ -257,6 +261,7 @@ void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Unchecked(Object^ se
void RingClientUWP::Views::SmartPanel::_settingsMenu__Checked(Object^ sender, RoutedEventArgs^ e) void RingClientUWP::Views::SmartPanel::_settingsMenu__Checked(Object^ sender, RoutedEventArgs^ e)
{ {
menuOpen - MenuOpen::SETTINGS;
_accountsMenuButton__Unchecked(nullptr,nullptr); _accountsMenuButton__Unchecked(nullptr,nullptr);
_accountsMenuButton_->IsChecked = false; _accountsMenuButton_->IsChecked = false;
_shareMenuButton__Unchecked(nullptr,nullptr); _shareMenuButton__Unchecked(nullptr,nullptr);
...@@ -279,6 +284,7 @@ void RingClientUWP::Views::SmartPanel::_settingsMenu__Checked(Object^ sender, Ro ...@@ -279,6 +284,7 @@ void RingClientUWP::Views::SmartPanel::_settingsMenu__Checked(Object^ sender, Ro
void RingClientUWP::Views::SmartPanel::_settingsMenu__Unchecked(Object^ sender, RoutedEventArgs^ e) void RingClientUWP::Views::SmartPanel::_settingsMenu__Unchecked(Object^ sender, RoutedEventArgs^ e)
{ {
menuOpen = MenuOpen::CONTACTS_LIST;
_settingsMenu_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; _settingsMenu_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
_smartGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible; _smartGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
...@@ -327,6 +333,7 @@ void RingClientUWP::Views::SmartPanel::setMode(RingClientUWP::Views::SmartPanel: ...@@ -327,6 +333,7 @@ void RingClientUWP::Views::SmartPanel::setMode(RingClientUWP::Views::SmartPanel:
void RingClientUWP::Views::SmartPanel::_shareMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) void RingClientUWP::Views::SmartPanel::_shareMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{ {
menuOpen = MenuOpen::SHARE;
_settingsMenu_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; _settingsMenu_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
_settingsMenuButton_->IsChecked = false; _settingsMenuButton_->IsChecked = false;
_shareMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible; _shareMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
...@@ -345,6 +352,7 @@ void RingClientUWP::Views::SmartPanel::_shareMenuButton__Checked(Platform::Objec ...@@ -345,6 +352,7 @@ void RingClientUWP::Views::SmartPanel::_shareMenuButton__Checked(Platform::Objec
void RingClientUWP::Views::SmartPanel::_shareMenuButton__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) void RingClientUWP::Views::SmartPanel::_shareMenuButton__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{ {
menuOpen = MenuOpen::CONTACTS_LIST;
_shareMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; _shareMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
_accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
_accountEditionGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; _accountEditionGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
...@@ -414,6 +422,13 @@ SmartPanel::_smartList__SelectionChanged(Platform::Object^ sender, Windows::UI:: ...@@ -414,6 +422,13 @@ SmartPanel::_smartList__SelectionChanged(Platform::Object^ sender, Windows::UI::
{ {
auto listbox = dynamic_cast<ListBox^>(sender); auto listbox = dynamic_cast<ListBox^>(sender);
auto item = dynamic_cast<SmartPanelItem^>(listbox->SelectedItem); auto item = dynamic_cast<SmartPanelItem^>(listbox->SelectedItem);
if (item)
if (item->_contact->_contactStatus == ContactStatus::WAITING_FOR_ACTIVATION) {
listbox->SelectedItem = nullptr;
return;
}
SmartPanelItemsViewModel::instance->_selectedItem = item; SmartPanelItemsViewModel::instance->_selectedItem = item;
if (!item) { if (!item) {
...@@ -467,27 +482,28 @@ SmartPanel::_accountList__SelectionChanged(Platform::Object^ sender, Windows::UI ...@@ -467,27 +482,28 @@ SmartPanel::_accountList__SelectionChanged(Platform::Object^ sender, Windows::UI
updatePageContent(); updatePageContent();
} }
// (XXX) use only KeyUp
void RingClientUWP::Views::SmartPanel::_ringTxtBx__KeyDown(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e) 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 */ /* add contact, test purpose but will be reused later in some way */
if (e->Key == Windows::System::VirtualKey::Enter && !_ringTxtBx_->Text->IsEmpty()) { //if (e->Key == Windows::System::VirtualKey::Enter && !_ringTxtBx_->Text->IsEmpty()) {
for (auto it : SmartPanelItemsViewModel::instance->itemsList) { // for (auto it : SmartPanelItemsViewModel::instance->itemsList) {
if (it->_contact->name_ == _ringTxtBx_->Text) { // if (it->_contact->name_ == _ringTxtBx_->Text) {
_smartList_->SelectedItem = it; // _smartList_->SelectedItem = it;
_ringTxtBx_->Text = ""; // _ringTxtBx_->Text = "";
return; // return;
} // }
} // }
/* if the string has 40 chars, we simply consider it as a ring id. It has to be improved */ // /* if the string has 40 chars, we simply consider it as a ring id. It has to be improved */
if (_ringTxtBx_->Text->Length() == 40) { // if (_ringTxtBx_->Text->Length() == 40) {
ContactsViewModel::instance->addNewContact(_ringTxtBx_->Text, _ringTxtBx_->Text); // ContactsViewModel::instance->addNewContact(_ringTxtBx_->Text, _ringTxtBx_->Text);
_ringTxtBx_->Text = ""; // _ringTxtBx_->Text = "";
} // }
RingD::instance->lookUpName(_ringTxtBx_->Text); // RingD::instance->lookUpName(_ringTxtBx_->Text);
} //}
} }
void RingClientUWP::Views::SmartPanel::_ringTxtBx__Click(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e) void RingClientUWP::Views::SmartPanel::_ringTxtBx__Click(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
...@@ -907,6 +923,7 @@ RingClientUWP::Views::NewMessageBubleNotification::NewMessageBubleNotification() ...@@ -907,6 +923,7 @@ RingClientUWP::Views::NewMessageBubleNotification::NewMessageBubleNotification()
void RingClientUWP::Views::SmartPanel::_devicesMenuButton__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) void RingClientUWP::Views::SmartPanel::_devicesMenuButton__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{ {
menuOpen = MenuOpen::CONTACTS_LIST;
_devicesMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; _devicesMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
_addingDeviceGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; _addingDeviceGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
_waitingForPin_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; _waitingForPin_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
...@@ -920,6 +937,7 @@ void RingClientUWP::Views::SmartPanel::_devicesMenuButton__Unchecked(Platform::O ...@@ -920,6 +937,7 @@ void RingClientUWP::Views::SmartPanel::_devicesMenuButton__Unchecked(Platform::O
void RingClientUWP::Views::SmartPanel::_devicesMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) void RingClientUWP::Views::SmartPanel::_devicesMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{ {
menuOpen = MenuOpen::DEVICE;
_settingsMenu_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; _settingsMenu_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
_settingsMenuButton_->IsChecked = false; _settingsMenuButton_->IsChecked = false;
...@@ -1333,10 +1351,10 @@ void RingClientUWP::Views::SmartPanel::_usernameTextBoxEdition__KeyUp(Platform:: ...@@ -1333,10 +1351,10 @@ void RingClientUWP::Views::SmartPanel::_usernameTextBoxEdition__KeyUp(Platform::
checkStateEditionMenu(); checkStateEditionMenu();
} }
// (XXX) il ne faudrait plus de ringtextbox dans cette fonction, elle devrait etre vider avant de receveoir le resultat
void RingClientUWP::Views::SmartPanel::OnregisteredNameFound(RingClientUWP::LookupStatus status, const std::string& address, const std::string& name) void RingClientUWP::Views::SmartPanel::OnregisteredNameFound(RingClientUWP::LookupStatus status, const std::string& address, const std::string& name)
{ {
if (_ringTxtBx_->Text->IsEmpty()) { // if true, we consider we did the lookup for a new account if (menuOpen == MenuOpen::ACCOUNTS_LIST) { // if true, we did the lookup for a new account
/* note : this code do both check for edit and creation menu. It doesn't affect the use and it's easier to /* note : this code do both check for edit and creation menu. It doesn't affect the use and it's easier to
implement. */ implement. */
auto currentNameEdition = Utils::toString(_usernameTextBoxEdition_->Text); auto currentNameEdition = Utils::toString(_usernameTextBoxEdition_->Text);
...@@ -1389,35 +1407,54 @@ void RingClientUWP::Views::SmartPanel::OnregisteredNameFound(RingClientUWP::Look ...@@ -1389,35 +1407,54 @@ void RingClientUWP::Views::SmartPanel::OnregisteredNameFound(RingClientUWP::Look
return; return;
} }
} else {// if false, we consider we are looking for a registered user }
else { // if false, we are looking for a registered user (contact)
auto contact = ContactsViewModel::instance->findContactByName(Utils::toPlatformString(name));
if (contact == nullptr)
return;
switch (status) { switch (status) {
case LookupStatus::SUCCESS: case LookupStatus::SUCCESS:
ContactsViewModel::instance->addNewContact(Utils::toPlatformString(name), Utils::toPlatformString(address)); if (contact->_contactStatus == ContactStatus::WAITING_FOR_ACTIVATION) {
ringTxtBxPlaceHolderDelay("username found and added.", 1500); contact->_contactStatus = ContactStatus::READY;
contact->ringID_ = Utils::toPlatformString(address);
ringTxtBxPlaceHolderDelay("username found and added.", 5000);
ContactsViewModel::instance->saveContactsToFile();
}
break; break;
case LookupStatus::INVALID_NAME: case LookupStatus::INVALID_NAME:
ringTxtBxPlaceHolderDelay("username invalid.", 1500); if (name.length() == 40) {
ringTxtBxPlaceHolderDelay("ring id added.", 5000); // (XXX) on devrait valider que ce soit bien une clee ring
contact->ringID_ = Utils::toPlatformString(name);
contact->_contactStatus = ContactStatus::READY;
ContactsViewModel::instance->saveContactsToFile();
}
else {
ringTxtBxPlaceHolderDelay("username invalid.", 5000);
auto item = SmartPanelItemsViewModel::instance->findItem(contact);
ContactsViewModel::instance->deleteContact(contact);
SmartPanelItemsViewModel::instance->removeItem(item);
ContactsViewModel::instance->saveContactsToFile();
}
break; break;
case LookupStatus::NOT_FOUND: case LookupStatus::NOT_FOUND:
{ {
ringTxtBxPlaceHolderDelay("username not found.", 1500); ringTxtBxPlaceHolderDelay("username not found.", 5000);
auto item = SmartPanelItemsViewModel::instance->findItem(contact);
ContactsViewModel::instance->deleteContact(contact);
SmartPanelItemsViewModel::instance->removeItem(item);
ContactsViewModel::instance->saveContactsToFile();
break; break;
} }
case LookupStatus::ERRORR: case LookupStatus::ERRORR:
ringTxtBxPlaceHolderDelay("network error!", 1500); ringTxtBxPlaceHolderDelay("network error!", 5000);
auto item = SmartPanelItemsViewModel::instance->findItem(contact);
ContactsViewModel::instance->deleteContact(contact);
SmartPanelItemsViewModel::instance->removeItem(item);
ContactsViewModel::instance->saveContactsToFile();
break; break;
} }
_ringTxtBx_->Text = "";
for (auto it : SmartPanelItemsViewModel::instance->itemsList) {
if (it->_contact->ringID_ == Utils::toPlatformString(address)) {
_smartList_->SelectedItem = it;
return;
}
}
_smartList_->SelectedItem = nullptr;
} }
} }
...@@ -1661,8 +1698,19 @@ SmartPanel::populateVideoRateSettingsComboBox() ...@@ -1661,8 +1698,19 @@ SmartPanel::populateVideoRateSettingsComboBox()
void RingClientUWP::Views::SmartPanel::_ringTxtBx__KeyUp(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e) void RingClientUWP::Views::SmartPanel::_ringTxtBx__KeyUp(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
{ {
if (e->Key == Windows::System::VirtualKey::Enter) { if (e->Key == Windows::System::VirtualKey::Enter) {
/// (XXX) RingD::instance->lookUpName(_ringTxtBx_->Text);
for (auto item : SmartPanelItemsViewModel::instance->itemsList) {
if (item->_contact->_name == _ringTxtBx_->Text) {
_smartList_->SelectedItem = item;
return;
}
}
auto contact = ContactsViewModel::instance->addNewContact(_ringTxtBx_->Text, "", ContactStatus::WAITING_FOR_ACTIVATION);
RingD::instance->lookUpName(_ringTxtBx_->Text); RingD::instance->lookUpName(_ringTxtBx_->Text);
_ringTxtBx_->Text = "";
for (auto item : SmartPanelItemsViewModel::instance->itemsList) { for (auto item : SmartPanelItemsViewModel::instance->itemsList) {
item->_showMe = Windows::UI::Xaml::Visibility::Visible; item->_showMe = Windows::UI::Xaml::Visibility::Visible;
} }
...@@ -1670,7 +1718,7 @@ void RingClientUWP::Views::SmartPanel::_ringTxtBx__KeyUp(Platform::Object^ sende ...@@ -1670,7 +1718,7 @@ void RingClientUWP::Views::SmartPanel::_ringTxtBx__KeyUp(Platform::Object^ sende
} }
for (auto item : SmartPanelItemsViewModel::instance->itemsList) { for (auto item : SmartPanelItemsViewModel::instance->itemsList) {
auto str1 = Utils::toString(item->_contact->name_); auto str1 = Utils::toString(item->_contact->_name);
auto str2 = Utils::toString(_ringTxtBx_->Text); auto str2 = Utils::toString(_ringTxtBx_->Text);
if (str1.find(str2) != std::string::npos) if (str1.find(str2) != std::string::npos)
...@@ -1750,3 +1798,21 @@ void RingClientUWP::Views::SmartPanel::OncallPlaced(Platform::String ^callId) ...@@ -1750,3 +1798,21 @@ void RingClientUWP::Views::SmartPanel::OncallPlaced(Platform::String ^callId)
{ {
_smartList_->SelectedItem = nullptr; _smartList_->SelectedItem = nullptr;
} }
Object ^ RingClientUWP::Views::ContactStatusNotification::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
{
auto contactStatus = static_cast<ContactStatus>(value);
if (contactStatus == ContactStatus::WAITING_FOR_ACTIVATION)
return Windows::UI::Xaml::Visibility::Visible;
else
return Windows::UI::Xaml::Visibility::Collapsed;
}
Object ^ RingClientUWP::Views::ContactStatusNotification::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
{
throw ref new Platform::NotImplementedException();
}
RingClientUWP::Views::ContactStatusNotification::ContactStatusNotification()
{}
...@@ -80,6 +80,13 @@ public: ...@@ -80,6 +80,13 @@ public:
CollapseEmptyString(); CollapseEmptyString();
}; };
public ref class ContactStatusNotification sealed : IValueConverter {
public:
virtual Object^ Convert(Object^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object^ parameter, String^ language);
virtual Object^ ConvertBack(Object^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object^ parameter, String^ language);
ContactStatusNotification();
};
public ref class SmartPanel sealed public ref class SmartPanel sealed
{ {
public: public:
...@@ -172,6 +179,16 @@ private: ...@@ -172,6 +179,16 @@ private:
void _PINTextBox__GotFocus(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); void _PINTextBox__GotFocus(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
void OnregistrationStateRegistered(); void OnregistrationStateRegistered();
void OncallPlaced(Platform::String ^callId); void OncallPlaced(Platform::String ^callId);
enum class MenuOpen {
CONTACTS_LIST,
ACCOUNTS_LIST,
SHARE,
DEVICE,
SETTINGS
};
MenuOpen menuOpen;
}; };
} }
} }
...@@ -169,7 +169,7 @@ void RingClientUWP::Views::VideoPage::updatePageContent() ...@@ -169,7 +169,7 @@ void RingClientUWP::Views::VideoPage::updatePageContent()
if (!contact) if (!contact)
return; return;
_callee_->Text = contact->name_; _callee_->Text = contact->_name;
_messagesList_->ItemsSource = contact->_conversation->_messages; _messagesList_->ItemsSource = contact->_conversation->_messages;
......
...@@ -28,17 +28,14 @@ ...@@ -28,17 +28,14 @@
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="1*"/> <RowDefinition Height="1*"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="2*"/>
<RowDefinition Height="2*"/> <RowDefinition Height="2*"/>
<RowDefinition Height="1*"/> <RowDefinition Height="1*"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<StackPanel x:Name="_welcomePage_" Grid.Row="1"> <StackPanel Grid.Row="1">
<!--<TextBlock x:Uid="_welcomeMsg"
x:Name="_welcomeMsg_"
Style="{StaticResource TextStyle1}"
HorizontalAlignment="Center"
VerticalAlignment="Center"
TextWrapping="Wrap" />-->
<Image x:Name="_welcomeImage_" <Image x:Name="_welcomeImage_"
Source="Assets\Wide310x150Logo.scale-200.png" Source="Assets\Wide310x150Logo.scale-200.png"
Width="310" Width="310"
HorizontalAlignment="Center" HorizontalAlignment="Center"
...@@ -46,10 +43,11 @@ ...@@ -46,10 +43,11 @@
Height="150"/> Height="150"/>
<TextBlock Text="Ring is free software for universal communication wich respects the freedoms and privacy of its users." <TextBlock Text="Ring is free software for universal communication wich respects the freedoms and privacy of its users."
Foreground="#707370" Foreground="#707370"
MaxWidth="410" MaxWidth="500"
TextWrapping="WrapWholeWords" Width="310"
TextWrapping="Wrap"
TextAlignment="Justify" TextAlignment="Justify"
FontSize="18" FontSize="12"
FontWeight="Bold" FontWeight="Bold"
HorizontalAlignment="Center"/> HorizontalAlignment="Center"/>
</StackPanel> </StackPanel>
......
...@@ -33,12 +33,12 @@ WelcomePage::WelcomePage() ...@@ -33,12 +33,12 @@ WelcomePage::WelcomePage()
void void
WelcomePage::PositionImage() WelcomePage::PositionImage()
{ {
Rect imageBounds; /*Rect imageBounds;
imageBounds.Width = static_cast<float>(_welcomePage_->ActualWidth); imageBounds.Width = static_cast<float>(_welcomePage_->ActualWidth);
imageBounds.Height = static_cast<float>(_welcomePage_->ActualHeight); imageBounds.Height = static_cast<float>(_welcomePage_->ActualHeight);
_welcomeImage_->SetValue(Canvas::LeftProperty, imageBounds.Width * 0.5 - _welcomeImage_->Width * 0.5); _welcomeImage_->SetValue(Canvas::LeftProperty, imageBounds.Width * 0.5 - _welcomeImage_->Width * 0.5);
_welcomeImage_->SetValue(Canvas::TopProperty, imageBounds.Height * 0.5 - _welcomeImage_->Height * 0.5); _welcomeImage_->SetValue(Canvas::TopProperty, imageBounds.Height * 0.5 - _welcomeImage_->Height * 0.5);*/
} }
void void
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment