add accountListItem

Change-Id: Ic59097eb8158e8bae606409500e295684b4e5e29
Tuleap: #1238
diff --git a/Account.cpp b/Account.cpp
index 7f1c97d..43cd68f 100644
--- a/Account.cpp
+++ b/Account.cpp
@@ -38,7 +38,6 @@
     accountType_ = accountType;

     accountID_ = accountID;

     _deviceId = deviceId;

-    _isSelected = false;

 }

 

 void

diff --git a/Account.h b/Account.h
index 224e1fa..6f11812 100644
--- a/Account.h
+++ b/Account.h
@@ -45,22 +45,12 @@
             devicesIdList_ = value;

         }

     }

-    property bool _isSelected {

-        void set(bool value) {

-            // isSelected_ = value; disabled on purpose for future use

-            PropertyChanged(this, ref new PropertyChangedEventArgs("_isSelected"));

-        }

-        bool get() {

-            return isSelected_;

-        }

-    }

 

 protected:

     void NotifyPropertyChanged(String^ propertyName);

 

 private:

     Windows::Foundation::Collections::IVector<String^>^ devicesIdList_;

-    bool isSelected_;

 

 };

 }

diff --git a/AccountListItem.cpp b/AccountListItem.cpp
new file mode 100644
index 0000000..aee9ffd
--- /dev/null
+++ b/AccountListItem.cpp
@@ -0,0 +1,47 @@
+/**************************************************************************

+* Copyright (C) 2016 by Savoir-faire Linux                                *

+* Author: Jäger Nicolas <nicolas.jager@savoirfairelinux.com>              *

+* Author: Traczyk Andreas <traczyk.andreas@savoirfairelinux.com>          *

+*                                                                         *

+* This program is free software; you can redistribute it and/or modify    *

+* it under the terms of the GNU General Public License as published by    *

+* the Free Software Foundation; either version 3 of the License, or       *

+* (at your option) any later version.                                     *

+*                                                                         *

+* This program is distributed in the hope that it will be useful,         *

+* but WITHOUT ANY WARRANTY; without even the implied warranty of          *

+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *

+* GNU General Public License for more details.                            *

+*                                                                         *

+* You should have received a copy of the GNU General Public License       *

+* along with this program.  If not, see <http://www.gnu.org/licenses/>.   *

+**************************************************************************/

+#include "pch.h"

+

+#include "AccountListItem.h"

+

+using namespace Windows::ApplicationModel::Core;

+using namespace Platform;

+using namespace Windows::Data::Json;

+using namespace Windows::UI::Core;

+

+using namespace RingClientUWP;

+using namespace RingClientUWP::Controls;

+using namespace ViewModel;

+

+AccountListItem::AccountListItem(Account^ a)

+{

+	    _account = a;

+}

+

+void

+AccountListItem::NotifyPropertyChanged(String^ propertyName)

+{

+    CoreApplicationView^ view = CoreApplication::MainView;

+    view->CoreWindow->Dispatcher->RunAsync(

+        CoreDispatcherPriority::High,

+        ref new DispatchedHandler([this, propertyName]()

+    {

+        PropertyChanged(this, ref new PropertyChangedEventArgs(propertyName));

+    }));

+}
\ No newline at end of file
diff --git a/AccountListItem.h b/AccountListItem.h
new file mode 100644
index 0000000..01608e1
--- /dev/null
+++ b/AccountListItem.h
@@ -0,0 +1,54 @@
+#pragma once

+/**************************************************************************

+* Copyright (C) 2016 by Savoir-faire Linux                                *

+* Author: Jäger Nicolas <nicolas.jager@savoirfairelinux.com>              *

+* Author: Traczyk Andreas <traczyk.andreas@savoirfairelinux.com>          *

+*                                                                         *

+* This program is free software; you can redistribute it and/or modify    *

+* it under the terms of the GNU General Public License as published by    *

+* the Free Software Foundation; either version 3 of the License, or       *

+* (at your option) any later version.                                     *

+*                                                                         *

+* This program is distributed in the hope that it will be useful,         *

+* but WITHOUT ANY WARRANTY; without even the implied warranty of          *

+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *

+* GNU General Public License for more details.                            *

+*                                                                         *

+* You should have received a copy of the GNU General Public License       *

+* along with this program.  If not, see <http://www.gnu.org/licenses/>.   *

+**************************************************************************/

+using namespace Platform;

+using namespace Windows::Data::Json;

+using namespace Windows::UI::Xaml;

+using namespace Windows::UI::Xaml::Data;

+

+namespace RingClientUWP

+{

+namespace Controls {

+public ref class AccountListItem sealed : public INotifyPropertyChanged

+{

+public:

+    AccountListItem(Account^ a);

+

+    virtual event PropertyChangedEventHandler^ PropertyChanged;

+    property Account^ _account;

+    property bool _isSelected {

+        void set(bool value) {

+            isSelected_ = value;

+            PropertyChanged(this, ref new PropertyChangedEventArgs("_isSelected"));

+        }

+        bool get() {

+            return isSelected_;

+        }

+    }

+

+protected:

+    void NotifyPropertyChanged(String^ propertyName);

+

+private:

+    bool isSelected_;

+

+};

+}

+}

+

diff --git a/AccountListItemsViewModel.cpp b/AccountListItemsViewModel.cpp
new file mode 100644
index 0000000..4f39c18
--- /dev/null
+++ b/AccountListItemsViewModel.cpp
@@ -0,0 +1,52 @@
+/***************************************************************************

+ * Copyright (C) 2016 by Savoir-faire Linux                                *

+ * Author: Jäger Nicolas <nicolas.jager@savoirfairelinux.com>              *

+ * Author: Traczyk Andreas <andreas.traczyk@savoirfairelinux.com>          *

+ *                                                                         *

+ * This program is free software; you can redistribute it and/or modify    *

+ * it under the terms of the GNU General Public License as published by    *

+ * the Free Software Foundation; either version 3 of the License, or       *

+ * (at your option) any later version.                                     *

+ *                                                                         *

+ * This program is distributed in the hope that it will be useful,         *

+ * but WITHOUT ANY WARRANTY; without even the implied warranty of          *

+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *

+ * GNU General Public License for more details.                            *

+ *                                                                         *

+ * You should have received a copy of the GNU General Public License       *

+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.   *

+ **************************************************************************/

+#include "pch.h"

+

+#include "AccountListItemsViewModel.h"

+

+using namespace Windows::ApplicationModel::Core;

+using namespace Windows::Data::Json;

+using namespace Windows::Storage;

+using namespace Windows::Storage::Streams;

+using namespace Windows::UI::Core;

+

+

+using namespace RingClientUWP;

+using namespace ViewModel;

+

+AccountListItemsViewModel::AccountListItemsViewModel()

+{

+    itemsList_ = ref new Vector<AccountListItem^>();

+

+    /* connect to delegates */

+    AccountsViewModel::instance->accountAdded += ref new RingClientUWP::AccountAdded(this, &RingClientUWP::ViewModel::AccountListItemsViewModel::OnaccountAdded);

+    AccountsViewModel::instance->clearAccountsList += ref new RingClientUWP::ClearAccountsList(this, &RingClientUWP::ViewModel::AccountListItemsViewModel::OnclearAccountsList);

+}

+

+void RingClientUWP::ViewModel::AccountListItemsViewModel::OnaccountAdded(RingClientUWP::Account ^account)

+{

+    auto item = ref new AccountListItem(account);

+    itemsList_->Append(item);

+}

+

+

+void RingClientUWP::ViewModel::AccountListItemsViewModel::OnclearAccountsList()

+{

+    itemsList_->Clear();

+}

diff --git a/AccountListItemsViewModel.h b/AccountListItemsViewModel.h
new file mode 100644
index 0000000..33c07f8
--- /dev/null
+++ b/AccountListItemsViewModel.h
@@ -0,0 +1,77 @@
+/***************************************************************************

+ * Copyright (C) 2016 by Savoir-faire Linux                                *

+ * Author: Jäger Nicolas <nicolas.jager@savoirfairelinux.com>              *

+ * Author: Traczyk Andreas <andreas.traczyk@savoirfairelinux.com>          *

+ *                                                                         *

+ * This program is free software; you can redistribute it and/or modify    *

+ * it under the terms of the GNU General Public License as published by    *

+ * the Free Software Foundation; either version 3 of the License, or       *

+ * (at your option) any later version.                                     *

+ *                                                                         *

+ * This program is distributed in the hope that it will be useful,         *

+ * but WITHOUT ANY WARRANTY; without even the implied warranty of          *

+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *

+ * GNU General Public License for more details.                            *

+ *                                                                         *

+ * You should have received a copy of the GNU General Public License       *

+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.   *

+ **************************************************************************/

+#pragma once

+

+using namespace Platform::Collections;

+using namespace Concurrency;

+

+using namespace RingClientUWP;

+using namespace RingClientUWP::Controls;

+

+namespace RingClientUWP

+{

+namespace ViewModel {

+

+public ref class AccountListItemsViewModel sealed

+{

+internal:

+    /* singleton */

+    static property AccountListItemsViewModel^ instance

+    {

+        AccountListItemsViewModel^ get()

+        {

+            static AccountListItemsViewModel^ instance_ = ref new AccountListItemsViewModel();

+            return instance_;

+        }

+    }

+

+    /* functions */

+    // to do

+

+

+    property Vector<AccountListItem^>^ itemsList

+    {

+        Vector<AccountListItem^>^ get()

+        {

+            return itemsList_;

+        }

+    }

+

+    property AccountListItem^ _selectedItem

+    {

+        AccountListItem^ get()

+        {

+            return currentItem_;

+        }

+        void set(AccountListItem^ value)

+        {

+            currentItem_ = value;

+        }

+    }

+

+private:

+    AccountListItemsViewModel(); // singleton

+    Vector<AccountListItem^>^ itemsList_;

+    AccountListItem^ currentItem_;

+

+    void OnaccountAdded(RingClientUWP::Account ^account);

+    void OnclearAccountsList();

+};

+}

+}

diff --git a/AccountsViewModel.cpp b/AccountsViewModel.cpp
index 655c4e4..f96a2f0 100644
--- a/AccountsViewModel.cpp
+++ b/AccountsViewModel.cpp
@@ -31,19 +31,21 @@
 void

 AccountsViewModel::add(std::string& name, std::string& ringID, std::string& accountType, std::string& accountID, std::string& deviceId)

 {

+    auto account = ref new Account(

+                       Utils::toPlatformString(name),

+                       Utils::toPlatformString(ringID),

+                       Utils::toPlatformString(accountType),

+                       Utils::toPlatformString(accountID),

+                       Utils::toPlatformString(deviceId));

 

-    accountsList_->Append(ref new Account(

-                              Utils::toPlatformString(name),

-                              Utils::toPlatformString(ringID),

-                              Utils::toPlatformString(accountType),

-                              Utils::toPlatformString(accountID),

-                              Utils::toPlatformString(deviceId)

-                          ));

+    accountsList_->Append(account);

     updateScrollView();

+    accountAdded(account);

 }

 

 void

 AccountsViewModel::clearAccountList()

 {

     accountsList_->Clear();

+    clearAccountsList();

 }
\ No newline at end of file
diff --git a/AccountsViewModel.h b/AccountsViewModel.h
index 5612b10..6df26c1 100644
--- a/AccountsViewModel.h
+++ b/AccountsViewModel.h
@@ -27,6 +27,8 @@
 delegate void NewAccountSelected();

 delegate void NoAccountSelected();

 delegate void UpdateScrollView();

+delegate void AccountAdded(Account^ account);

+delegate void ClearAccountsList();

 

 namespace ViewModel {

 public ref class AccountsViewModel sealed

@@ -47,27 +49,6 @@
     void clearAccountList();

 

     /* properties */

-    property Account^ selectedAccount

-    {

-        Account^ get()

-        {

-            return currentItem_;

-        }

-        void set(Account^ value)

-        {

-            oldItem_ = currentItem_;

-            if (oldItem_)

-                oldItem_->_isSelected = false;

-            currentItem_ = value;

-            if (currentItem_)

-                currentItem_->_isSelected = true;

-            if (value)

-                newAccountSelected();

-            else

-                noAccountSelected();

-        }

-    }

-

     property Vector<Account^>^ accountsList

     {

         Vector<Account^>^ get()

@@ -80,12 +61,12 @@
     event NewAccountSelected^ newAccountSelected;

     event NoAccountSelected^ noAccountSelected;

     event UpdateScrollView^ updateScrollView;

+    event AccountAdded^ accountAdded;

+    event ClearAccountsList^ clearAccountsList;

 

 private:

     AccountsViewModel(); // singleton

     Vector<Account^>^ accountsList_;

-    Account^ currentItem_;

-    Account^ oldItem_;

 

 };

 }

diff --git a/RingD.cpp b/RingD.cpp
index 5922548..814d080 100644
--- a/RingD.cpp
+++ b/RingD.cpp
@@ -73,7 +73,7 @@
 void RingClientUWP::RingD::sendAccountTextMessage(String^ message)

 {

     /* account id */

-    auto accountId = AccountsViewModel::instance->selectedAccount->accountID_;

+    auto accountId = AccountListItemsViewModel::instance->_selectedItem->_account->accountID_;

     std::wstring accountId2(accountId->Begin());

     std::string accountId3(accountId2.begin(), accountId2.end());

 

@@ -109,7 +109,7 @@
 void RingClientUWP::RingD::sendSIPTextMessage(String^ message)

 {

     /* account id */

-    auto accountId = AccountsViewModel::instance->selectedAccount->accountID_;

+    auto accountId = AccountListItemsViewModel::instance->_selectedItem->_account->accountID_;

     std::wstring accountId2(accountId->Begin());

     std::string accountId3(accountId2.begin(), accountId2.end());

 

@@ -164,7 +164,7 @@
 {

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

     auto to = contact->ringID_;

-    auto accountId = AccountsViewModel::instance->selectedAccount->accountID_;

+    auto accountId = AccountListItemsViewModel::instance->_selectedItem->_account->accountID_;

 

     auto to2 = Utils::toString(to);

     auto accountId2 = Utils::toString(accountId);

diff --git a/SmartPanel.xaml b/SmartPanel.xaml
index 213c138..ec02c6f 100644
--- a/SmartPanel.xaml
+++ b/SmartPanel.xaml
@@ -170,9 +170,9 @@
                 </Grid>

             </Grid>

         </DataTemplate>

-        <!-- template for accounts. -->

-        <DataTemplate x:Key="AccountTemplate"

-                      x:DataType="local:Account">

+        <!-- template for AccountListItems. -->

+        <DataTemplate x:Key="AccountListItemsTemplate"

+                      x:DataType="controls:AccountListItem">

             <Grid Margin="0,10">

                 <Grid.ColumnDefinitions>

                     <ColumnDefinition Width="40"/>

@@ -184,7 +184,7 @@
                     <Image x:Name="_AccountTypeIcon_"

                            VerticalAlignment="Center"

                            HorizontalAlignment="Center"

-                           Source="{x:Bind accountType_, Converter={StaticResource _AccountTypeToSourceImage_}, Mode=OneWay}"/>

+                           Source="{x:Bind  _account.accountType_, Converter={StaticResource _AccountTypeToSourceImage_}, Mode=OneWay}"/>

                 </Border>

                 <Button x:Name="_editAccountMenuButton_"

                         HorizontalAlignment="Right"

@@ -203,11 +203,11 @@
                 <StackPanel Grid.Column="1">

                     <TextBlock x:Name="_accountName_"

                            Style="{StaticResource TextStyle5}"

-                           Text="{x:Bind name_}"/>

+                           Text="{x:Bind  _account.name_}"/>

                     <TextBlock x:Name="_ringID_"

                            Grid.ColumnSpan="2"

                            Style="{StaticResource TextStyle6}"

-                           Text="{x:Bind ringID_}"/>

+                           Text="{x:Bind  _account.ringID_}"/>

                 </StackPanel>

             </Grid>

         </DataTemplate>

@@ -440,7 +440,7 @@
                          Width="320"

                          ItemContainerStyle="{StaticResource contactsListBoxStyle}"

                          Background="#FFE4F1F9"

-                         ItemTemplate="{StaticResource AccountTemplate}"/>

+                         ItemTemplate="{StaticResource AccountListItemsTemplate}"/>

                 </ScrollViewer>

                 <Button x:Name="_addAccountBtn_"

                         Grid.Row="1"

diff --git a/SmartPanel.xaml.cpp b/SmartPanel.xaml.cpp
index 2af5527..57a6276 100644
--- a/SmartPanel.xaml.cpp
+++ b/SmartPanel.xaml.cpp
@@ -39,6 +39,8 @@
 using namespace Windows::Graphics::Imaging;

 using namespace Windows::Foundation;

 using namespace Concurrency;

+using namespace Platform::Collections;

+

 

 

 using namespace Windows::ApplicationModel::Core;

@@ -49,7 +51,8 @@
 {

     InitializeComponent();

 

-    _accountsList_->ItemsSource = AccountsViewModel::instance->accountsList;

+    /* populate accounts listBox*/

+    _accountsList_->ItemsSource = AccountListItemsViewModel::instance->itemsList;

 

     /* populate the smartlist */

     _smartList_->ItemsSource = SmartPanelItemsViewModel::instance->itemsList;

@@ -136,25 +139,25 @@
 void

 RingClientUWP::Views::SmartPanel::updatePageContent()

 {

-    auto account = AccountsViewModel::instance->selectedAccount;

-    if (!account)

+    auto accountListItem = AccountListItemsViewModel::instance->_selectedItem;

+    if (!accountListItem)

         return;

 

-    auto name = account->name_;

+    auto name = accountListItem->_account->name_;

 

     Configuration::UserPreferences::instance->PREF_ACCOUNT_INDEX = _accountsList_->SelectedIndex;

     Configuration::UserPreferences::instance->save();

 

-    _selectedAccountName_->Text = name;

+    _selectedAccountName_->Text = name; // refacto : bind this in xaml directly

 ///    _devicesIdList_->ItemsSource = account->_devicesIdList;

-    _deviceId_->Text = account->_deviceId; /* this is the current device ...

+    _deviceId_->Text = accountListItem->_account->_deviceId; /* this is the current device ...

     ... in the way to get all associated devices, we have to querry the daemon : */

 

-    _devicesMenuButton_->Visibility = (account->accountType_ == "RING")

+    _devicesMenuButton_->Visibility = (accountListItem->_account->accountType_ == "RING")

                                       ? Windows::UI::Xaml::Visibility::Visible

                                       : Windows::UI::Xaml::Visibility::Collapsed;

 

-    _shareMenuButton_->Visibility = (account->accountType_ == "RING")

+    _shareMenuButton_->Visibility = (accountListItem->_account->accountType_ == "RING")

                                     ? Windows::UI::Xaml::Visibility::Visible

                                     : Windows::UI::Xaml::Visibility::Collapsed;

 }

@@ -321,8 +324,8 @@
             }

         }

     }

-    auto account = safe_cast<Account^>(listbox->SelectedItem);

-    AccountsViewModel::instance->selectedAccount = account;

+    auto account = safe_cast<AccountListItem^>(listbox->SelectedItem);

+    AccountListItemsViewModel::instance->_selectedItem = account;

     updatePageContent();

 }

 

@@ -432,7 +435,7 @@
 

 void RingClientUWP::Views::SmartPanel::generateQRcode()

 {

-    auto ringId = AccountsViewModel::instance->selectedAccount->ringID_;

+    auto ringId = AccountListItemsViewModel::instance->_selectedItem->_account->ringID_;

     auto ringId2 = Utils::toString(ringId);

 

     _ringId_->Text = ringId;

@@ -589,7 +592,7 @@
     _waitingDevicesList_->Visibility = Windows::UI::Xaml::Visibility::Visible;

     _devicesIdList_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;

 

-    auto accountId = AccountsViewModel::instance->selectedAccount->accountID_;

+    auto accountId = AccountListItemsViewModel::instance->_selectedItem->_account->accountID_;

     RingD::instance->askToRefreshKnownDevices(accountId);

 

     _shareMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;

@@ -613,7 +616,7 @@
 void RingClientUWP::Views::SmartPanel::OndevicesListRefreshed(Platform::Collections::Vector<Platform::String ^, std::equal_to<Platform::String ^>, true> ^devicesList)

 {

     _waitingDevicesList_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;

-    AccountsViewModel::instance->selectedAccount->_devicesIdList = devicesList;

+    AccountListItemsViewModel::instance->_selectedItem->_account->_devicesIdList = devicesList;

     _devicesIdList_->ItemsSource = devicesList;

     _devicesIdList_->Visibility = Windows::UI::Xaml::Visibility::Visible;

 }

@@ -624,7 +627,7 @@
     _addingDeviceGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed;

     _waitingForPin_->Visibility = Windows::UI::Xaml::Visibility::Visible;

 

-    auto accountId = AccountsViewModel::instance->selectedAccount->accountID_;

+    auto accountId = AccountListItemsViewModel::instance->_selectedItem->_account->accountID_;

     auto password = _passwordForPinGenerator_->Password;

     _passwordForPinGenerator_->Password = "";

 

@@ -690,7 +693,7 @@
 {

     //auto accountId = static_cast<bool(value);

 

-    if (/*AccountsViewModel::instance->selectedAccount->_isSelected ==*/ (bool)value == true)

+    if (/*AccountListItemsViewModel::instance->_selectedItem->_account->_isSelected ==*/ (bool)value == true)

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

 

     return Windows::UI::Xaml::Visibility::Collapsed;

diff --git a/pch.h b/pch.h
index 9bd464e..0be8155 100644
--- a/pch.h
+++ b/pch.h
@@ -32,6 +32,8 @@
 /* required by generated headers. */

 #include "App.xaml.h"

 #include "Account.h"

+#include "AccountListItem.h"

+#include "AccountListItemsViewModel.h"

 #include "AccountsViewModel.h"

 #include "Contact.h"

 #include "ContactsViewModel.h"

diff --git a/ring-client-uwp.vcxproj b/ring-client-uwp.vcxproj
index 2c4350a..7d523b4 100644
--- a/ring-client-uwp.vcxproj
+++ b/ring-client-uwp.vcxproj
@@ -166,6 +166,8 @@
   </ItemDefinitionGroup>

   <ItemGroup>

     <ClInclude Include="Account.h" />

+    <ClInclude Include="AccountListItem.h" />

+    <ClInclude Include="AccountListItemsViewModel.h" />

     <ClInclude Include="AccountsViewModel.h" />

     <ClInclude Include="Contact.h" />

     <ClInclude Include="ContactsViewModel.h" />

@@ -284,6 +286,8 @@
   </ItemGroup>

   <ItemGroup>

     <ClCompile Include="Account.cpp" />

+    <ClCompile Include="AccountListItem.cpp" />

+    <ClCompile Include="AccountListItemsViewModel.cpp" />

     <ClCompile Include="AccountsViewModel.cpp" />

     <ClCompile Include="App.xaml.cpp">

       <DependentUpon>App.xaml</DependentUpon>

diff --git a/ring-client-uwp.vcxproj.filters b/ring-client-uwp.vcxproj.filters
index e06ba95..61b35fd 100644
--- a/ring-client-uwp.vcxproj.filters
+++ b/ring-client-uwp.vcxproj.filters
@@ -104,6 +104,12 @@
     <ClCompile Include="VideoCaptureManager.cpp">

       <Filter>Media\Video</Filter>

     </ClCompile>

+    <ClCompile Include="AccountListItem.cpp">

+      <Filter>Controls</Filter>

+    </ClCompile>

+    <ClCompile Include="AccountListItemsViewModel.cpp">

+      <Filter>ModelViews</Filter>

+    </ClCompile>

   </ItemGroup>

   <ItemGroup>

     <ClInclude Include="pch.h" />

@@ -164,6 +170,12 @@
     <ClInclude Include="Globals.h">

       <Filter>Common</Filter>

     </ClInclude>

+    <ClInclude Include="AccountListItem.h">

+      <Filter>Controls</Filter>

+    </ClInclude>

+    <ClInclude Include="AccountListItemsViewModel.h">

+      <Filter>ModelViews</Filter>

+    </ClInclude>

   </ItemGroup>

   <ItemGroup>

     <Image Include="Assets\LockScreenLogo.scale-200.png">