blob: 780f2c2f5d3b960ac9375fe59a865da386dc98b3 [file] [log] [blame]
Nicolas Jager38f15642016-09-01 09:45:58 -04001/***************************************************************************
2 * Copyright (C) 2016 by Savoir-faire Linux *
3 * Author: Jäger Nicolas <nicolas.jager@savoirfairelinux.com> *
4 * Author: Traczyk Andreas <andreas.traczyk@savoirfairelinux.com> *
5 * *
6 * This program is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 3 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
18 **************************************************************************/
19#include "pch.h"
Nicolas Jager7c409f32016-09-08 09:35:16 -040020#include <string> // move it
Nicolas Jager38f15642016-09-01 09:45:58 -040021#include "SmartPanel.xaml.h"
22
23using namespace Platform;
24
25using namespace RingClientUWP;
Nicolas Jager7c409f32016-09-08 09:35:16 -040026using namespace RingClientUWP::Controls;
Nicolas Jager38f15642016-09-01 09:45:58 -040027using namespace RingClientUWP::Views;
28using namespace RingClientUWP::ViewModel;
29using namespace Windows::Media::Capture;
30using namespace Windows::UI::Xaml;
31using namespace Windows::Storage;
32using namespace Windows::UI::Xaml::Media::Imaging;
33using namespace Windows::UI::Xaml::Shapes;
34using namespace Windows::UI::Xaml::Media;
35using namespace Concurrency;
36using namespace Windows::Foundation;
37
Nicolas Jagerf6a10322016-09-06 08:17:49 -040038using namespace Windows::ApplicationModel::Core;
39using namespace Windows::Storage;
40using namespace Windows::UI::Core;
41
Nicolas Jager38f15642016-09-01 09:45:58 -040042SmartPanel::SmartPanel()
43{
44 InitializeComponent();
45
Nicolas Jager7c409f32016-09-08 09:35:16 -040046 _accountsList_->ItemsSource = AccountsViewModel::instance->accountsList;
47
48 /* populate the smartlist */
atraczyk25608ed2016-09-15 11:12:16 -040049 _smartList_->ItemsSource = SmartPanelItemsViewModel::instance->itemsList;
Nicolas Jager7c409f32016-09-08 09:35:16 -040050
Nicolas Jager813cf4d2016-10-06 10:54:46 -040051
52 /* populate the device list*/
53/// _devicesIdList_ // not used so far
54
atraczyk2425ddd2016-09-01 13:16:22 -040055 /* connect delegates */
Nicolas Jager38f15642016-09-01 09:45:58 -040056 Configuration::UserPreferences::instance->selectIndex += ref new SelectIndex([this](int index) {
57 _accountsList_->SelectedIndex = index;
58 });
atraczyk2425ddd2016-09-01 13:16:22 -040059 Configuration::UserPreferences::instance->loadProfileImage += ref new LoadProfileImage([this]() {
60 StorageFolder^ localfolder = ApplicationData::Current->LocalFolder;
61 String^ image_path = localfolder->Path + "\\.profile\\profile_image.png";
62 auto uri = ref new Windows::Foundation::Uri(image_path);
63 _selectedAccountAvatar_->ImageSource = ref new BitmapImage(uri);
64 });
atraczyk196936e2016-09-02 15:31:53 -040065 AccountsViewModel::instance->updateScrollView += ref new UpdateScrollView([this]() {
66 _accountsListScrollView_->UpdateLayout();
67 _accountsListScrollView_->ScrollToVerticalOffset(_accountsListScrollView_->ScrollableHeight);
68 });
Nicolas Jager083b3ae2016-10-04 08:46:19 -040069 RingD::instance->incomingCall += ref new RingClientUWP::IncomingCall([&](
70 String^ accountId, String^ callId, String^ from) {
71 ///auto from = call->from;
Nicolas Jager7c409f32016-09-08 09:35:16 -040072 auto contact = ContactsViewModel::instance->findContactByName(from);
Nicolas Jager38f15642016-09-01 09:45:58 -040073
Nicolas Jager7c409f32016-09-08 09:35:16 -040074 if (contact == nullptr)
75 contact = ContactsViewModel::instance->addNewContact(from, from); // contact checked inside addNewContact.
76
77 if (contact == nullptr) {
78 ERR_("contact not handled!");
79 return;
80 }
81
atraczyk25608ed2016-09-15 11:12:16 -040082 auto item = SmartPanelItemsViewModel::instance->findItem(contact);
Nicolas Jager083b3ae2016-10-04 08:46:19 -040083 item->_callId = callId;
Nicolas Jagerc551c362016-10-01 19:24:50 -040084
Nicolas Jager7c409f32016-09-08 09:35:16 -040085 });
Nicolas Jagerc551c362016-10-01 19:24:50 -040086 RingD::instance->stateChange += ref new StateChange([this](String^ callId, CallStatus state, int code) {
Nicolas Jager7c409f32016-09-08 09:35:16 -040087
Nicolas Jager083b3ae2016-10-04 08:46:19 -040088 auto item = SmartPanelItemsViewModel::instance->findItem(callId);
Nicolas Jager7c409f32016-09-08 09:35:16 -040089
90 if (!item) {
91 WNG_("item not found");
92 return;
93 }
94
Nicolas Jager083b3ae2016-10-04 08:46:19 -040095 item->_callStatus = state;
Nicolas Jager7c409f32016-09-08 09:35:16 -040096
Nicolas Jager083b3ae2016-10-04 08:46:19 -040097 switch (state) {
98 case CallStatus::NONE:
99 case CallStatus::ENDED:
100 {
101 item->_callId = "";
102 break;
103 }
104 case CallStatus::IN_PROGRESS:
105 {
106 _smartList_->SelectedItem = item;
107 summonVideoPage();
108 break;
109 }
110 default:
111 break;
112 }
Nicolas Jager7c409f32016-09-08 09:35:16 -0400113
Nicolas Jager7c409f32016-09-08 09:35:16 -0400114 });
Nicolas Jagerd0830772016-10-07 08:45:33 -0400115 RingD::instance->devicesListRefreshed += ref new RingClientUWP::DevicesListRefreshed(this, &RingClientUWP::Views::SmartPanel::OndevicesListRefreshed);
Nicolas Jager7c409f32016-09-08 09:35:16 -0400116
117
118 ContactsViewModel::instance->contactAdded += ref new ContactAdded([this](Contact^ contact) {
119 auto smartPanelItem = ref new SmartPanelItem();
120 smartPanelItem->_contact = contact;
atraczyk25608ed2016-09-15 11:12:16 -0400121 SmartPanelItemsViewModel::instance->itemsList->Append(smartPanelItem);
Nicolas Jager7c409f32016-09-08 09:35:16 -0400122 });
123
Nicolas Jagerd0830772016-10-07 08:45:33 -0400124 RingD::instance->exportOnRingEnded += ref new RingClientUWP::ExportOnRingEnded(this, &RingClientUWP::Views::SmartPanel::OnexportOnRingEnded);
125
Nicolas Jager5750df02016-09-13 11:20:33 -0400126
Nicolas Jager5750df02016-09-13 11:20:33 -0400127
Nicolas Jager38f15642016-09-01 09:45:58 -0400128}
129
130void
131RingClientUWP::Views::SmartPanel::updatePageContent()
132{
133 auto account = AccountsViewModel::instance->selectedAccount;
134 if (!account)
135 return;
136
Nicolas Jager3f7f5532016-10-07 10:24:43 -0400137 auto name = account->name_;
Nicolas Jager813cf4d2016-10-06 10:54:46 -0400138
Nicolas Jager38f15642016-09-01 09:45:58 -0400139 Configuration::UserPreferences::instance->PREF_ACCOUNT_INDEX = _accountsList_->SelectedIndex;
140 Configuration::UserPreferences::instance->save();
Nicolas Jager813cf4d2016-10-06 10:54:46 -0400141
Nicolas Jager3f7f5532016-10-07 10:24:43 -0400142 _selectedAccountName_->Text = name;
Nicolas Jagerd0830772016-10-07 08:45:33 -0400143/// _devicesIdList_->ItemsSource = account->_devicesIdList;
Nicolas Jager813cf4d2016-10-06 10:54:46 -0400144 _deviceId_->Text = account->_deviceId; /* this is the current device ...
145 ... in the way to get all associated devices, we have to querry the daemon : */
Nicolas Jagerd0830772016-10-07 08:45:33 -0400146
147 _devicesMenuButton_->Visibility = (account->accountType_ == "RING")
148 ? Windows::UI::Xaml::Visibility::Visible
149 : Windows::UI::Xaml::Visibility::Collapsed;
Nicolas Jager38f15642016-09-01 09:45:58 -0400150}
151
152void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Checked(Object^ sender, RoutedEventArgs^ e)
153{
154 _shareMenuButton_->IsChecked = false;
Nicolas Jagerd0830772016-10-07 08:45:33 -0400155 _devicesMenuButton_->IsChecked = false;
Nicolas Jager38f15642016-09-01 09:45:58 -0400156 _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
157 _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
Nicolas Jagerd0830772016-10-07 08:45:33 -0400158 _devicesMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
159 _addingDeviceGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
Nicolas Jager38f15642016-09-01 09:45:58 -0400160}
161
162void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Unchecked(Object^ sender, RoutedEventArgs^ e)
163{
164 _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
165 _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
166}
167
168void RingClientUWP::Views::SmartPanel::_settings__Checked(Object^ sender, RoutedEventArgs^ e)
169{
170 _smartGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
171 _settings_->Visibility = Windows::UI::Xaml::Visibility::Visible;
172}
173
174void RingClientUWP::Views::SmartPanel::_settings__Unchecked(Object^ sender, RoutedEventArgs^ e)
175{
176 _settings_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
177 _smartGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
178}
179
180void RingClientUWP::Views::SmartPanel::setMode(RingClientUWP::Views::SmartPanel::Mode mode)
181{
182 if (mode == RingClientUWP::Views::SmartPanel::Mode::Normal) {
183 _rowRingTxtBx_->Height = 40;
atraczyk2425ddd2016-09-01 13:16:22 -0400184 _selectedAccountAvatarContainer_->Height = 80;
Nicolas Jager38f15642016-09-01 09:45:58 -0400185 _selectedAccountAvatarColumn_->Width = 90;
186 _selectedAccountRow_->Height = 90;
187 }
188 else {
189 _rowRingTxtBx_->Height = 0;
atraczyk2425ddd2016-09-01 13:16:22 -0400190 _selectedAccountAvatarContainer_->Height = 50;
Nicolas Jager38f15642016-09-01 09:45:58 -0400191 _selectedAccountAvatarColumn_->Width = 60;
192 _selectedAccountRow_->Height = 60;
193 }
194
atraczyk2425ddd2016-09-01 13:16:22 -0400195 _selectedAccountAvatarContainer_->Width = _selectedAccountAvatarContainer_->Height;
Nicolas Jager38f15642016-09-01 09:45:58 -0400196 _settingsTBtn_->IsChecked = false;
197 _accountsMenuButton_->IsChecked = false;
198 _shareMenuButton_->IsChecked = false;
199}
200
201void RingClientUWP::Views::SmartPanel::_shareMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
202{
203 _shareMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
Nicolas Jagerd0830772016-10-07 08:45:33 -0400204 _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
205 _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
206 _devicesMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
207 _addingDeviceGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
Nicolas Jager38f15642016-09-01 09:45:58 -0400208 _accountsMenuButton_->IsChecked = false;
Nicolas Jagerd0830772016-10-07 08:45:33 -0400209 _devicesMenuButton_->IsChecked = false;
Nicolas Jager38f15642016-09-01 09:45:58 -0400210}
211
212void RingClientUWP::Views::SmartPanel::_shareMenuButton__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
213{
214 _shareMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
Nicolas Jagerd0830772016-10-07 08:45:33 -0400215 _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
216 _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
Nicolas Jager38f15642016-09-01 09:45:58 -0400217}
218
Nicolas Jager38f15642016-09-01 09:45:58 -0400219void RingClientUWP::Views::SmartPanel::_addAccountBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
220{
221 _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
222 _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
223}
224
Nicolas Jager38f15642016-09-01 09:45:58 -0400225void RingClientUWP::Views::SmartPanel::_createAccountYes__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
226{
atraczyk196936e2016-09-02 15:31:53 -0400227 switch (_accountTypeComboBox_->SelectedIndex)
228 {
229 case 0:
Nicolas Jagerf6a10322016-09-06 08:17:49 -0400230 {
atraczyk1ddcb5a2016-09-07 16:18:30 -0400231 CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,
232 ref new DispatchedHandler([=]() {
233 auto frame = dynamic_cast<Windows::UI::Xaml::Controls::Frame^>(Window::Current->Content);
234 dynamic_cast<RingClientUWP::MainPage^>(frame->Content)->showLoadingOverlay(true, true);
235 }));
Nicolas Jagerf6a10322016-09-06 08:17:49 -0400236 RingD::instance->createRINGAccount(_aliasTextBox_->Text);
237 _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
238 _accountsMenuButton__Checked(nullptr, nullptr);
atraczyk196936e2016-09-02 15:31:53 -0400239 break;
Nicolas Jagerf6a10322016-09-06 08:17:49 -0400240 }
241 break;
atraczyk196936e2016-09-02 15:31:53 -0400242 case 1:
Nicolas Jagerf6a10322016-09-06 08:17:49 -0400243 {
244 RingD::instance->createSIPAccount(_aliasTextBox_->Text);
245 _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
246 _accountsMenuButton__Checked(nullptr, nullptr);
247 break;
248 }
249 default:
250 break;
atraczyk196936e2016-09-02 15:31:53 -0400251 }
atraczyk1ddcb5a2016-09-07 16:18:30 -0400252 _aliasTextBox_->Text = "";
Nicolas Jager38f15642016-09-01 09:45:58 -0400253}
254
255
256void RingClientUWP::Views::SmartPanel::_createAccountNo__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
257{
atraczyk196936e2016-09-02 15:31:53 -0400258 _accountsMenuButton_->IsChecked = false;
259 _accountsMenuButton__Unchecked(nullptr,nullptr);
Nicolas Jager38f15642016-09-01 09:45:58 -0400260}
261
Nicolas Jager38f15642016-09-01 09:45:58 -0400262void
263SmartPanel::_smartList__SelectionChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e)
264{
Nicolas Jagerc551c362016-10-01 19:24:50 -0400265 auto listbox = dynamic_cast<ListBox^>(sender);
266 auto item = dynamic_cast<SmartPanelItem^>(listbox->SelectedItem);
267 SmartPanelItemsViewModel::instance->_selectedItem = item;
Nicolas Jager5750df02016-09-13 11:20:33 -0400268
Nicolas Jagerc551c362016-10-01 19:24:50 -0400269 if (!item) {
270 summonWelcomePage();
271 return;
272 }
Nicolas Jager5750df02016-09-13 11:20:33 -0400273
Nicolas Jager4cdd8922016-10-02 16:53:16 -0400274 auto contact = item->_contact;
275
Nicolas Jager083b3ae2016-10-04 08:46:19 -0400276 if (item->_callStatus == CallStatus::IN_PROGRESS) {
277 if (contact) {
278 contact->_unreadMessages = 0;
279 ContactsViewModel::instance->saveContactsToFile();
Nicolas Jagerc551c362016-10-01 19:24:50 -0400280 }
Nicolas Jager083b3ae2016-10-04 08:46:19 -0400281
282 summonVideoPage();
283 return;
Nicolas Jagerc551c362016-10-01 19:24:50 -0400284 }
285
Nicolas Jagerc551c362016-10-01 19:24:50 -0400286 if (contact) {
287 summonMessageTextPage();
288 contact->_unreadMessages = 0;
289 ContactsViewModel::instance->saveContactsToFile();
290 return;
291 }
Nicolas Jager38f15642016-09-01 09:45:58 -0400292}
293
294void
295SmartPanel::_accountList__SelectionChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs^ e)
296{
297 auto listbox = safe_cast<ListBox^>(sender);
atraczykb0154632016-09-06 12:58:08 -0400298 // disable deselction from listbox
299 if (listbox->SelectedItem == nullptr)
300 {
301 if (e->RemovedItems->Size > 0)
302 {
303 Object^ itemToReselect = e->RemovedItems->GetAt(0);
304 for each (auto item in listbox->Items) {
305 if (item == itemToReselect) {
306 listbox->SelectedItem = itemToReselect;
307 continue;
308 }
309 }
310 }
311 }
Nicolas Jager38f15642016-09-01 09:45:58 -0400312 auto account = safe_cast<Account^>(listbox->SelectedItem);
313 AccountsViewModel::instance->selectedAccount = account;
314 updatePageContent();
315}
316
317void RingClientUWP::Views::SmartPanel::_ringTxtBx__KeyDown(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
318{
319 /* add contact, test purpose but will be reused later in some way */
Nicolas Jager083b3ae2016-10-04 08:46:19 -0400320 if (e->Key == Windows::System::VirtualKey::Enter && !_ringTxtBx_->Text->IsEmpty()) {
Nicolas Jager38f15642016-09-01 09:45:58 -0400321 ContactsViewModel::instance->addNewContact(_ringTxtBx_->Text, _ringTxtBx_->Text);
322 _ringTxtBx_->Text = "";
323 }
324}
Nicolas Jagerf6a10322016-09-06 08:17:49 -0400325
atraczyke87716f2016-09-20 13:46:22 -0400326void RingClientUWP::Views::SmartPanel::_ringTxtBx__Click(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
327{
328 ContactsViewModel::instance->addNewContact(_ringTxtBx_->Text, _ringTxtBx_->Text);
329 _ringTxtBx_->Text = "";
330}
331
Nicolas Jager083b3ae2016-10-04 08:46:19 -0400332void
333RingClientUWP::Views::SmartPanel::_rejectIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
Nicolas Jagerf6a10322016-09-06 08:17:49 -0400334{
335 auto button = dynamic_cast<Button^>(e->OriginalSource);
Nicolas Jager9edbea32016-10-03 09:13:53 -0400336 if (button) {
337 auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);
338 if (item) {
Nicolas Jager083b3ae2016-10-04 08:46:19 -0400339 auto callId = item->_callId;
340 RingD::instance->refuseIncommingCall(callId);
Nicolas Jager9edbea32016-10-03 09:13:53 -0400341 }
342 }
Nicolas Jagerf6a10322016-09-06 08:17:49 -0400343}
344
Nicolas Jager083b3ae2016-10-04 08:46:19 -0400345void
346RingClientUWP::Views::SmartPanel::_acceptIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
Nicolas Jagerf6a10322016-09-06 08:17:49 -0400347{
348 auto button = dynamic_cast<Button^>(e->OriginalSource);
Nicolas Jager9edbea32016-10-03 09:13:53 -0400349 if (button) {
350 auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);
351 if (item) {
Nicolas Jager083b3ae2016-10-04 08:46:19 -0400352 auto callId = item->_callId;
353 RingD::instance->acceptIncommingCall(callId);
Nicolas Jager9edbea32016-10-03 09:13:53 -0400354 }
355 }
Nicolas Jagerf6a10322016-09-06 08:17:49 -0400356}
Nicolas Jager7c409f32016-09-08 09:35:16 -0400357
Nicolas Jager5750df02016-09-13 11:20:33 -0400358void
359SmartPanel::_callContact__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
360{
361 auto button = dynamic_cast<Button^>(e->OriginalSource);
Nicolas Jager9edbea32016-10-03 09:13:53 -0400362 if (button) {
Nicolas Jager083b3ae2016-10-04 08:46:19 -0400363 /* force to hide the button, avoid attempting to call several times... */
364 button->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
365
Nicolas Jager9edbea32016-10-03 09:13:53 -0400366 auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);
367 if (item) {
368 auto contact = item->_contact;
369 if (contact)
370 RingD::instance->placeCall(contact);
371 }
372 }
Nicolas Jager5750df02016-09-13 11:20:33 -0400373}
374
Nicolas Jager5750df02016-09-13 11:20:33 -0400375void RingClientUWP::Views::SmartPanel::_cancelCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
376{
377 auto button = dynamic_cast<Button^>(e->OriginalSource);
Nicolas Jager9edbea32016-10-03 09:13:53 -0400378 if (button) {
379 auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);
380 if (item) {
Nicolas Jager9edbea32016-10-03 09:13:53 -0400381 RingD::instance->cancelOutGoingCall2(item->_callId);
Nicolas Jager083b3ae2016-10-04 08:46:19 -0400382 item->_callStatus = CallStatus::TERMINATING;
Nicolas Jager9edbea32016-10-03 09:13:53 -0400383 return;
Nicolas Jager9edbea32016-10-03 09:13:53 -0400384 }
385 }
Nicolas Jager5750df02016-09-13 11:20:33 -0400386}
387
Nicolas Jager5750df02016-09-13 11:20:33 -0400388void RingClientUWP::Views::SmartPanel::Grid_PointerEntered(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
389{
390 auto grid = dynamic_cast<Grid^>(sender);
391 auto listBoxItem = dynamic_cast<ListBoxItem^>(sender);
392 auto item = dynamic_cast<SmartPanelItem^>(grid->DataContext);
393
Nicolas Jager083b3ae2016-10-04 08:46:19 -0400394 if (item->_callId->IsEmpty())
395 item->_hovered = Windows::UI::Xaml::Visibility::Visible;
Nicolas Jager5750df02016-09-13 11:20:33 -0400396}
397
398
399void RingClientUWP::Views::SmartPanel::Grid_PointerExited(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
400{
401 auto listBoxItem = dynamic_cast<ListBoxItem^>(sender);
402 auto grid = dynamic_cast<Grid^>(sender);
403 auto item = dynamic_cast<SmartPanelItem^>(grid->DataContext);
404
Nicolas Jagerc551c362016-10-01 19:24:50 -0400405 item->_hovered = Windows::UI::Xaml::Visibility::Collapsed;
Nicolas Jager5750df02016-09-13 11:20:33 -0400406}
407
408
409void RingClientUWP::Views::SmartPanel::_contactItem__PointerReleased(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e)
410{
411 auto listBoxItem = dynamic_cast<ListBoxItem^>(sender);
412 auto smartPanelItem = dynamic_cast<SmartPanelItem^>(listBoxItem->DataContext);
413
414 if (_smartList_->SelectedItem != smartPanelItem)
415 _smartList_->SelectedItem = smartPanelItem;
416 else
417 _smartList_->SelectedItem = nullptr;
418
Nicolas Jagerc551c362016-10-01 19:24:50 -0400419}
420
421Object ^ RingClientUWP::Views::IncomingVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
422{
423 auto state = static_cast<CallStatus>(value);
Nicolas Jager083b3ae2016-10-04 08:46:19 -0400424
Nicolas Jagerc551c362016-10-01 19:24:50 -0400425 if (state == CallStatus::INCOMING_RINGING)
426 return Windows::UI::Xaml::Visibility::Visible;
427 else
428 return Windows::UI::Xaml::Visibility::Collapsed;
429}
430
431Object ^ RingClientUWP::Views::IncomingVisibility::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
432{
433 throw ref new Platform::NotImplementedException();
434}
435
436RingClientUWP::Views::IncomingVisibility::IncomingVisibility()
437{}
438
439
440Object ^ RingClientUWP::Views::OutGoingVisibility::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
441{
442 auto state = static_cast<CallStatus>(value);
443
444 if (state == CallStatus::SEARCHING || state == CallStatus::OUTGOING_RINGING)
445 return Windows::UI::Xaml::Visibility::Visible;
446 else
447 return Windows::UI::Xaml::Visibility::Collapsed;
448}
449
450Object ^ RingClientUWP::Views::OutGoingVisibility::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
451{
452 throw ref new Platform::NotImplementedException();
453}
454
455RingClientUWP::Views::OutGoingVisibility::OutGoingVisibility()
456{}
457
458Object ^ RingClientUWP::Views::HasAnActiveCall::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
459{
460 auto state = static_cast<CallStatus>(value);
461
462 if (state == CallStatus::NONE || state == CallStatus::ENDED)
463 return Windows::UI::Xaml::Visibility::Collapsed;
464 else
465 return Windows::UI::Xaml::Visibility::Visible;
466}
467
468Object ^ RingClientUWP::Views::HasAnActiveCall::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
469{
470 throw ref new Platform::NotImplementedException();
Nicolas Jagerc551c362016-10-01 19:24:50 -0400471}
472
473RingClientUWP::Views::HasAnActiveCall::HasAnActiveCall()
474{}
475
476Object ^ RingClientUWP::Views::NewMessageBubleNotification::Convert(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
477{
478 auto unreadMessages = static_cast<uint32>(value);
479
480 if (unreadMessages > 0)
481 return Windows::UI::Xaml::Visibility::Visible;
482
483 return Windows::UI::Xaml::Visibility::Collapsed;
484}
485
486Object ^ RingClientUWP::Views::NewMessageBubleNotification::ConvertBack(Object ^ value, Windows::UI::Xaml::Interop::TypeName targetType, Object ^ parameter, String ^ language)
487{
488 throw ref new Platform::NotImplementedException();
489}
490
491RingClientUWP::Views::NewMessageBubleNotification::NewMessageBubleNotification()
492{}
Nicolas Jagere4eb5132016-10-04 14:25:15 -0400493
494void RingClientUWP::Views::SmartPanel::_devicesMenuButton__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
495{
496 _devicesMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
Nicolas Jagerd0830772016-10-07 08:45:33 -0400497 _addingDeviceGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
Nicolas Jager38dd4422016-10-07 10:49:32 -0400498 _waitingForPin_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
499 _passwordForPinGenerator_->Password = "";
500 // refacto : do something better...
501 _waitingAndResult_->Text = "Exporting account on the Ring...";
502
Nicolas Jagere4eb5132016-10-04 14:25:15 -0400503}
504
505
506void RingClientUWP::Views::SmartPanel::_devicesMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
507{
Nicolas Jager38dd4422016-10-07 10:49:32 -0400508 _waitingDevicesList_->Visibility = Windows::UI::Xaml::Visibility::Visible;
509 _devicesIdList_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
510
511 auto accountId = AccountsViewModel::instance->selectedAccount->accountID_;
512 RingD::instance->askToRefreshKnownDevices(accountId);
513
Nicolas Jagerd0830772016-10-07 08:45:33 -0400514 _shareMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
515 _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
516 _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
Nicolas Jagere4eb5132016-10-04 14:25:15 -0400517 _devicesMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
Nicolas Jagerd0830772016-10-07 08:45:33 -0400518 _addingDeviceGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
519 _accountsMenuButton_->IsChecked = false;
520 _shareMenuButton_->IsChecked = false;
Nicolas Jagere4eb5132016-10-04 14:25:15 -0400521}
522
523
524void RingClientUWP::Views::SmartPanel::_addDevice__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
525{
Nicolas Jagerd0830772016-10-07 08:45:33 -0400526 _devicesMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
527 _addingDeviceGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible;
Nicolas Jager38dd4422016-10-07 10:49:32 -0400528 _closePin_->Visibility = Windows::UI::Xaml::Visibility::Visible;
Nicolas Jagerd0830772016-10-07 08:45:33 -0400529}
Nicolas Jagere4eb5132016-10-04 14:25:15 -0400530
Nicolas Jagerd0830772016-10-07 08:45:33 -0400531
532void RingClientUWP::Views::SmartPanel::OndevicesListRefreshed(Platform::Collections::Vector<Platform::String ^, std::equal_to<Platform::String ^>, true> ^devicesList)
533{
Nicolas Jager38dd4422016-10-07 10:49:32 -0400534 _waitingDevicesList_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
Nicolas Jagerd0830772016-10-07 08:45:33 -0400535 AccountsViewModel::instance->selectedAccount->_devicesIdList = devicesList;
536 _devicesIdList_->ItemsSource = devicesList;
Nicolas Jager38dd4422016-10-07 10:49:32 -0400537 _devicesIdList_->Visibility = Windows::UI::Xaml::Visibility::Visible;
Nicolas Jagerd0830772016-10-07 08:45:33 -0400538}
539
540
541void RingClientUWP::Views::SmartPanel::_pinGeneratorYes__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
542{
543 _addingDeviceGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
544 _waitingForPin_->Visibility = Windows::UI::Xaml::Visibility::Visible;
545
546 auto accountId = AccountsViewModel::instance->selectedAccount->accountID_;
547 auto password = _passwordForPinGenerator_->Password;
Nicolas Jager38dd4422016-10-07 10:49:32 -0400548 _passwordForPinGenerator_->Password = "";
549
550 /* hide the button while we are waiting... */
551 _closePin_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
Nicolas Jagerd0830772016-10-07 08:45:33 -0400552
553 RingD::instance->askToExportOnRing(accountId, password);
554}
555
556
557void RingClientUWP::Views::SmartPanel::_pinGeneratorNo__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
558{
559 _addingDeviceGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
560 _devicesMenuButton_->IsChecked = false;
Nicolas Jager38dd4422016-10-07 10:49:32 -0400561 _passwordForPinGenerator_->Password = "";
Nicolas Jagerd0830772016-10-07 08:45:33 -0400562}
563
564
565void RingClientUWP::Views::SmartPanel::OnexportOnRingEnded(Platform::String ^accountId, Platform::String ^pin)
566{
Nicolas Jagerd0830772016-10-07 08:45:33 -0400567 _waitingAndResult_->Text = pin;
Nicolas Jager38dd4422016-10-07 10:49:32 -0400568 _closePin_->Visibility = Windows::UI::Xaml::Visibility::Visible;
569
570}
571
572
573void RingClientUWP::Views::SmartPanel::_closePin__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
574{
575 _waitingForPin_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
576 _devicesMenuButton_->IsChecked = false;
577
578 // refacto : do something better...
579 _waitingAndResult_->Text = "Exporting account on the Ring...";
Nicolas Jagere4eb5132016-10-04 14:25:15 -0400580}