diff --git a/Account.cpp b/Account.cpp index 902f6d6e990ffcaf96937b1d97d7b1bfec6d83c5..8a3caf4f51948511411b07a6f2a16d66b46415c0 100644 --- a/Account.cpp +++ b/Account.cpp @@ -42,7 +42,7 @@ Account::Account(String^ name, accountType_ = accountType; accountID_ = accountID; _deviceId = deviceId; - _upnpState = _upnpState; + _upnpState = upnpState; _sipHostname = sipHostname; _sipUsername = sipUsername; _sipPassword = sipPassword; diff --git a/MainPage.xaml.cpp b/MainPage.xaml.cpp index 13b692c68e52124eac5dd2d5b8f2b777107b6e95..99e016d9dd19d7df66b72a853e3447b42bb1b5cc 100644 --- a/MainPage.xaml.cpp +++ b/MainPage.xaml.cpp @@ -305,33 +305,10 @@ MainPage::Application_Suspending(Object^, Windows::ApplicationModel::SuspendingE { MSG_("Application_Suspending"); auto deferral = e->SuspendingOperation->GetDeferral(); + Video::VideoManager::instance->captureManager()->CleanupCameraAsync(); MSG_("Hang up calls..."); RingD::instance->deinit(); deferral->Complete(); - /*if (Frame->CurrentSourcePageType.Name == - Interop::TypeName(MainPage::typeid).Name) { - auto deferral = e->SuspendingOperation->GetDeferral(); - BeginExtendedExecution() - .then([=](task<void> previousTask) { - try { - previousTask.get(); - } - catch (Exception^ e) { - MSG_("Exception: Extended Execution Begin"); - } - }) - .then([this, deferral](task<void> previousTask) { - try { - previousTask.get(); - MSG_("deferral->Complete()"); - deferral->Complete(); - } - catch (Exception^ e) { - MSG_("Exception: Extended Execution"); - deferral->Complete(); - } - }); - }*/ } void @@ -404,60 +381,6 @@ void MainPage::Application_Resuming(Object^, Object^) MSG_("Application_Resuming"); } -void -MainPage::SessionRevoked(Object^ sender, ExtendedExecutionRevokedEventArgs^ args) -{ - Dispatcher->RunAsync(CoreDispatcherPriority::High, ref new DispatchedHandler([=]() { - ClearExtendedExecution(); - })); -} - -void -MainPage::ClearExtendedExecution() -{ - if (session != nullptr) { - MSG_("End Extended Execution"); - session->Revoked -= sessionRevokedToken; - } -} - -task<void> -MainPage::BeginExtendedExecution() -{ - ClearExtendedExecution(); - - auto newSession = ref new ExtendedExecutionSession(); - newSession->Reason = ExtendedExecutionReason::SavingData; - newSession->Description = "Extended Execution"; - sessionRevokedToken = (newSession->Revoked += ref new TypedEventHandler<Object^, - ExtendedExecutionRevokedEventArgs^>(this, &MainPage::SessionRevoked)); - return create_task(newSession->RequestExtensionAsync()) - .then([=](ExtendedExecutionResult result) { - try { - switch (result) - { - case ExtendedExecutionResult::Allowed: - session = newSession; - MSG_("Request Extended Execution Allowed"); - MSG_("Clean up camera..."); - Video::VideoManager::instance->captureManager()->CleanupCameraAsync(); - MSG_("Hang up calls..."); - RingD::instance->deinit(); - break; - - default: - case ExtendedExecutionResult::Denied: - MSG_("Request Extended Execution Denied"); - break; - } - } - catch (Exception^ e) { - EXC_(e); - } - }); -} - - void RingClientUWP::MainPage::OncloseMessageTextPage() { auto smartPanel = dynamic_cast<SmartPanel^>(_smartPanel_->Content); diff --git a/MainPage.xaml.h b/MainPage.xaml.h index 40ad09847edacc65eb8520c956493f832609f391..5abe2b28071a14750dffa658df1a9267e28b59dc 100644 --- a/MainPage.xaml.h +++ b/MainPage.xaml.h @@ -57,12 +57,6 @@ private: void Application_Resuming(Object^ sender, Object^ args); EventRegistrationToken applicationResumingEventToken; - ExtendedExecutionSession^ session; - void SessionRevoked(Object^ sender, ExtendedExecutionRevokedEventArgs^ args); - EventRegistrationToken sessionRevokedToken; - task<void> BeginExtendedExecution(); - void ClearExtendedExecution(); - // Multi-monitor, DPI, scale factor change, and window resize detection void DisplayProperties_DpiChanged(Windows::Graphics::Display::DisplayInformation^ sender, Platform::Object^ args); EventRegistrationToken dpiChangedtoken; diff --git a/MessageTextPage.xaml b/MessageTextPage.xaml index b1c97d0c2f6bef2199ef916e3c0e5764652857d6..a2cc4f619535517d144763275e1592f7367b56fd 100644 --- a/MessageTextPage.xaml +++ b/MessageTextPage.xaml @@ -136,89 +136,96 @@ <Grid Background="#FFF2F2F2"> <Grid.RowDefinitions> - <RowDefinition Height="90" /> + <RowDefinition Height="61" /> <RowDefinition Height="*"/> <RowDefinition Height="auto" /> </Grid.RowDefinitions> <Grid Grid.Row="0" Background="White" - Height="90"> - <Grid.RowDefinitions> - <RowDefinition Height="60" /> - <RowDefinition Height="30" /> - </Grid.RowDefinitions> - <Grid Grid.Row="0"> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="60"/> - <ColumnDefinition Width="280"/> - <ColumnDefinition Width="140"/> - </Grid.ColumnDefinitions> - <Ellipse Grid.Column="0" - Width="50" - Height="50"> - <Ellipse.Fill> - <ImageBrush x:Name="_contactBarAvatar_" - ImageSource="ms-appx:///Assets/TESTS/contactAvatar.png"/> - </Ellipse.Fill> - </Ellipse> - <TextBlock x:Name="_title_" - Grid.Column="1" - Text="[TEXT MISSING]" - TextWrapping="NoWrap" - TextTrimming="CharacterEllipsis" - VerticalAlignment="Center" - FontSize="18" - Margin="6" /> - <ComboBox x:Name="_associableAccountsList_" - Grid.Column="2" - Margin="6,14,6,6" - Visibility="Collapsed"> - <ComboBox.ItemTemplate> - <DataTemplate x:DataType="local:Account"> - <TextBlock Text="{x:Bind name_, Mode=OneWay}" /> - </DataTemplate> - </ComboBox.ItemTemplate> - </ComboBox> - </Grid> - <Grid Grid.Row="1"> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="auto"/> - <ColumnDefinition Width="auto"/> - <ColumnDefinition Width="auto"/> - <ColumnDefinition Width="auto"/> - </Grid.ColumnDefinitions> - <Button x:Name="_videoCall_" - Click="_videoCall__Click" - Grid.Column="0" - Content="" - FontFamily="Segoe MDL2 Assets" - FontSize="14" - Style="{StaticResource ButtonStyle4}" - Margin="6,2,6,6"/> - <Button x:Name="_audioCall_" - Grid.Column="1" - Click="_audioCall__Click" - Content="" - FontSize="14" - FontFamily="Segoe MDL2 Assets" - Style="{StaticResource ButtonStyle4}" - Margin="6,2,6,6"/> - <Button x:Name="_clearConversation_" - Grid.Column="2" - Click="_clearConversation__Click" - Content="" - FontFamily="Segoe MDL2 Assets" - FontSize="14" - Style="{StaticResource ButtonStyle4}" - Margin="6,2,6,6"/> - <Button x:Name="_deleteContact_" - Grid.Column="3" - Click="_deleteContact__Click" - Content="" - FontFamily="Segoe MDL2 Assets" - FontSize="14" - Style="{StaticResource ButtonStyle4}" - Margin="6,2,6,6"/> + Height="61"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="60"/> + <ColumnDefinition Width="auto"/> + </Grid.ColumnDefinitions> + <Ellipse Grid.Column="0" + Width="50" + Height="50"> + <Ellipse.Fill> + <ImageBrush x:Name="_contactBarAvatar_" + ImageSource="ms-appx:///Assets/TESTS/contactAvatar.png"/> + </Ellipse.Fill> + </Ellipse> + <Grid Grid.Column="1"> + <Grid.RowDefinitions> + <RowDefinition Height="31" /> + <RowDefinition Height="30" /> + </Grid.RowDefinitions> + <Grid Grid.Row="0"> + <Grid> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="280"/> + <ColumnDefinition Width="auto"/> + </Grid.ColumnDefinitions> + </Grid> + <TextBlock x:Name="_title_" + Grid.Column="0" + Text="[TEXT MISSING]" + TextWrapping="NoWrap" + TextTrimming="CharacterEllipsis" + VerticalAlignment="Center" + FontSize="16" + Margin="4,0,4,0" /> + <ComboBox x:Name="_associableAccountsList_" + Grid.Column="1" + Margin="6,14,6,6" + Visibility="Collapsed"> + <ComboBox.ItemTemplate> + <DataTemplate x:DataType="local:Account"> + <TextBlock Text="{x:Bind name_, Mode=OneWay}" /> + </DataTemplate> + </ComboBox.ItemTemplate> + </ComboBox> + </Grid> + <Grid Grid.Row="1"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="auto"/> + <ColumnDefinition Width="auto"/> + <ColumnDefinition Width="auto"/> + <ColumnDefinition Width="auto"/> + </Grid.ColumnDefinitions> + <Button x:Name="_videoCall_" + Click="_videoCall__Click" + Grid.Column="0" + Content="" + FontFamily="Segoe MDL2 Assets" + FontSize="14" + Style="{StaticResource ButtonStyle4}" + Margin="6,2,6,6"/> + <Button x:Name="_audioCall_" + Grid.Column="1" + Click="_audioCall__Click" + Content="" + FontSize="14" + FontFamily="Segoe MDL2 Assets" + Style="{StaticResource ButtonStyle4}" + Margin="6,2,6,6"/> + <Button x:Name="_clearConversation_" + Grid.Column="2" + Click="_clearConversation__Click" + Content="" + FontFamily="Segoe MDL2 Assets" + FontSize="14" + Style="{StaticResource ButtonStyle4}" + Margin="6,2,6,6"/> + <Button x:Name="_deleteContact_" + Grid.Column="3" + Click="_deleteContact__Click" + Content="" + FontFamily="Segoe MDL2 Assets" + FontSize="14" + Style="{StaticResource ButtonStyle4}" + Margin="6,2,6,6"/> + </Grid> </Grid> </Grid> <ScrollViewer x:Name="_scrollView_" diff --git a/MessageTextPage.xaml.cpp b/MessageTextPage.xaml.cpp index acd914c9e928efcc09478697a318daa8ec565cf0..bef1e38a141a194e99229fffcb3583ee9688577d 100644 --- a/MessageTextPage.xaml.cpp +++ b/MessageTextPage.xaml.cpp @@ -65,18 +65,17 @@ RingClientUWP::Views::MessageTextPage::updatePageContent() auto item = SmartPanelItemsViewModel::instance->_selectedItem; auto contact = item->_contact; - - if (!contact) /* should never happen */ return; - /* show the name of contact on the page */ _title_->Text = contact->name_; String^ image_path = Utils::toPlatformString(RingD::instance->getLocalFolder()) + ".vcards\\" + contact->_vcardUID + ".png"; - auto uri = ref new Windows::Foundation::Uri(image_path); - _contactBarAvatar_->ImageSource = ref new Windows::UI::Xaml::Media::Imaging::BitmapImage(uri); + if (Utils::fileExists(Utils::toString(image_path))) { + auto uri = ref new Windows::Foundation::Uri(image_path); + _contactBarAvatar_->ImageSource = ref new Windows::UI::Xaml::Media::Imaging::BitmapImage(uri); + } /* show messages */ _messagesList_->ItemsSource = contact->_conversation->_messages; @@ -93,7 +92,6 @@ RingClientUWP::Views::MessageTextPage::updatePageContent() break; } - if (found) _associableAccountsList_->SelectedIndex = index; else diff --git a/Package.appxmanifest b/Package.appxmanifest index 6d756c2c50f2f486792635d94e444454997a241b..4472030692b55e1d2041f188424a6446926db796 100644 --- a/Package.appxmanifest +++ b/Package.appxmanifest @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp"> - <Identity Name="Savoir-faireLinux.GNURing" Publisher="CN=8121A5F7-3CA1-4CAA-92B2-4F595B011941" Version="1.1.11.0" /> + <Identity Name="Savoir-faireLinux.GNURing" Publisher="CN=8121A5F7-3CA1-4CAA-92B2-4F595B011941" Version="1.1.12.0" /> <mp:PhoneIdentity PhoneProductId="2385953f-9019-423d-aa82-d1bbacfa258b" PhonePublisherId="00000000-0000-0000-0000-000000000000" /> <Properties> <DisplayName>GNU Ring</DisplayName> diff --git a/RingD.cpp b/RingD.cpp index 9edcdaa1bb9e240d89cdc99e539f5023d66cf389..45c27806d27286892fd4a6ef63f402702f698c38 100644 --- a/RingD.cpp +++ b/RingD.cpp @@ -880,7 +880,7 @@ RingD::dequeueTasks() auto newAccountId = DRing::addAccount(ringAccountDetails); if (!task->_registeredName->IsEmpty()) - registerName_new(newAccountId, Utils::toString(task->_password), Utils::toString(task->_alias)); + registerName_new(newAccountId, Utils::toString(task->_password), Utils::toString(task->_registeredName)); } break; case Request::AddSIPAccount: diff --git a/RingDebug.cpp b/RingDebug.cpp index fca4ee181602c8d4290d39b7f015b4c4392541b5..d90ffd1e0c2b09ea472095200eab634c77a9fe4f 100644 --- a/RingDebug.cpp +++ b/RingDebug.cpp @@ -72,6 +72,8 @@ RingDebug::print(const std::string& message, const Type& type, wString = (type>Type::WNG)?(L"(EE) "):((type>Type::MSG)?(L"(WW) "):(L"")) + wString; String^ msg; + msg = ref new String(wString.c_str(), wString.length()); + #if UWP_DBG_VS /* screen it into VS debug console */ OutputDebugString((wString + L"\n").c_str()); @@ -79,7 +81,6 @@ RingDebug::print(const std::string& message, const Type& type, #if UWP_DBG_CLIENT /* fire the event. */ - msg = ref new String(wString.c_str(), wString.length()); messageToScreen(msg); #endif diff --git a/SmartPanel.xaml b/SmartPanel.xaml index 4fe56003acd3664c04a4cff84fe585d1676839c2..622829eb885b62f43da5e2f6b9810024b3834b5e 100644 --- a/SmartPanel.xaml +++ b/SmartPanel.xaml @@ -295,7 +295,6 @@ <ColumnDefinition x:Name="_selectedAccountAvatarColumn_" Width="90"/> <ColumnDefinition Width="*"/> - <ColumnDefinition Width="50"/> </Grid.ColumnDefinitions> <Ellipse x:Name="_selectedAccountAvatarContainer_" @@ -341,6 +340,11 @@ Style="{StaticResource TextStyle2}"/> <StackPanel Orientation="Horizontal"> <!--Content="--> + <Button x:Name="_smartGridButton_" + VerticalAlignment="Bottom" + Content="" + Click="_smartGridButton__Clicked" + Style="{StaticResource smartGridButtonStyle}"/> <ToggleButton x:Name="_accountsMenuButton_" VerticalAlignment="Bottom" Content="" @@ -363,15 +367,15 @@ Checked="_devicesMenuButton__Checked" Unchecked="_devicesMenuButton__Unchecked" Style="{StaticResource ToggleButtonStyle1}"/> + <!-- _settingsMenuButton_ --> + <ToggleButton x:Name="_settingsMenuButton_" + VerticalAlignment="Bottom" + Content="" + Checked="_settingsMenu__Checked" + Unchecked="_settingsMenu__Unchecked" + Style="{StaticResource ToggleButtonStyle1}"/> </StackPanel> </StackPanel> - <ToggleButton x:Name="_settingsMenuButton_" - Grid.Column="2" - VerticalAlignment="Bottom" - Content="" - Checked="_settingsMenu__Checked" - Unchecked="_settingsMenu__Unchecked" - Style="{StaticResource ToggleButtonStyle1}"/> </Grid> <!--sub menus like the accounts list or the share menu are just below, technicaly they are nested inside the diff --git a/SmartPanel.xaml.cpp b/SmartPanel.xaml.cpp index 4233325a0d535c0b05136223908c32c00340604a..87f5486e360d374c9fc1099df38aec0c14e07039 100644 --- a/SmartPanel.xaml.cpp +++ b/SmartPanel.xaml.cpp @@ -120,6 +120,17 @@ SmartPanel::SmartPanel() case CallStatus::NONE: case CallStatus::ENDED: { + bool isInCall = false; + for (auto item : SmartPanelItemsViewModel::instance->itemsList) { + if (item->_callId && item->_callStatus == CallStatus::IN_PROGRESS) { + isInCall = true; + RingD::instance->currentCallId = item->_callId; + break; + } + } + if (!isInCall) + _settingsMenuButton_->Visibility = VIS::Visible; + item->_callId = ""; break; } @@ -143,7 +154,6 @@ SmartPanel::SmartPanel() }); RingD::instance->devicesListRefreshed += ref new RingClientUWP::DevicesListRefreshed(this, &RingClientUWP::Views::SmartPanel::OndevicesListRefreshed); - ContactsViewModel::instance->contactAdded += ref new ContactAdded([this](Contact^ contact) { auto smartPanelItem = ref new SmartPanelItem(); smartPanelItem->_contact = contact; @@ -207,9 +217,23 @@ void RingClientUWP::Views::SmartPanel::unselectContact() _smartList_->SelectedItem = nullptr; } +void RingClientUWP::Views::SmartPanel::_smartGridButton__Clicked(Object^ sender, RoutedEventArgs^ e) +{ + _accountsMenuButton__Unchecked(nullptr,nullptr); + _accountsMenuButton_->IsChecked = false; + _shareMenuButton__Unchecked(nullptr,nullptr); + _shareMenuButton_->IsChecked = false; + _devicesMenuButton__Unchecked(nullptr,nullptr); + _devicesMenuButton_->IsChecked = false; + _settingsMenu_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; + _settingsMenuButton_->IsChecked = false; + + _smartGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible; +} + void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Checked(Object^ sender, RoutedEventArgs^ e) { - _settingsMenu__Unchecked(nullptr,nullptr); + _settingsMenu_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; _settingsMenuButton_->IsChecked = false; _shareMenuButton_->IsChecked = false; _devicesMenuButton_->IsChecked = false; @@ -303,7 +327,7 @@ void RingClientUWP::Views::SmartPanel::setMode(RingClientUWP::Views::SmartPanel: void RingClientUWP::Views::SmartPanel::_shareMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) { - _settingsMenu__Unchecked(nullptr,nullptr); + _settingsMenu_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; _settingsMenuButton_->IsChecked = false; _shareMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible; _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; @@ -508,6 +532,8 @@ SmartPanel::_callContact__Click(Platform::Object^ sender, Windows::UI::Xaml::Rou /* force to hide the button, avoid attempting to call several times... */ button->Visibility = Windows::UI::Xaml::Visibility::Collapsed; + _settingsMenuButton_->Visibility = VIS::Collapsed; + auto item = dynamic_cast<SmartPanelItem^>(button->DataContext); if (item) { auto contact = item->_contact; @@ -884,7 +910,7 @@ void RingClientUWP::Views::SmartPanel::_devicesMenuButton__Unchecked(Platform::O void RingClientUWP::Views::SmartPanel::_devicesMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) { - _settingsMenu__Unchecked(nullptr,nullptr); + _settingsMenu_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; _settingsMenuButton_->IsChecked = false; _waitingDevicesList_->Visibility = Windows::UI::Xaml::Visibility::Visible; @@ -1103,8 +1129,7 @@ void RingClientUWP::Views::SmartPanel::_acceptAccountModification__Click(Platfor _accountsMenuButton_->IsChecked = false; if (_usernameValidEdition_->Visibility == Windows::UI::Xaml::Visibility::Visible && _usernameTextBoxEdition_->Text->Length() > 2) - RingD::instance->registerName(account->accountID_, "", _usernameTextBoxEdition_->Text); - + RingD::instance->registerName_new(Utils::toString(account->accountID_), "", Utils::toString(_usernameTextBoxEdition_->Text)); } diff --git a/SmartPanel.xaml.h b/SmartPanel.xaml.h index be2ef33ab4fa7ca377038a3a4282f91eb210950f..42168a0cf7d4289e834e26ac8e74945e3b72e009 100644 --- a/SmartPanel.xaml.h +++ b/SmartPanel.xaml.h @@ -99,6 +99,7 @@ internal: private: /* functions */ + void _smartGridButton__Clicked(Object^ sender, RoutedEventArgs^ e); void _accountsMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); void _accountsMenuButton__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); void _settingsMenu__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); diff --git a/Styles.xaml b/Styles.xaml index 91bb4dc197633c9f000c15a70f0a7e1b97c8eb59..70f9b1a984327de21c764afee86b533b00cf9f2b 100644 --- a/Styles.xaml +++ b/Styles.xaml @@ -288,7 +288,22 @@ <Style x:Key="ToggleButtonStyle1" TargetType="ToggleButton"> <Setter Property="Width" - Value="50"/> + Value="46"/> + <Setter Property="Height" + Value="30"/> + <Setter Property="FontFamily" + Value="Segoe MDL2 Assets"/> + <Setter Property="Foreground" + Value="White"/> + <Setter Property="Background" + Value="Transparent"/> + <Setter Property="BorderThickness" + Value="0"/> + </Style> + <Style x:Key="smartGridButtonStyle" + TargetType="Button"> + <Setter Property="Width" + Value="46"/> <Setter Property="Height" Value="30"/> <Setter Property="FontFamily" diff --git a/_language-fr.appx b/_language-fr.appx index a190ec94ca99ceafa0a4492816f0b382593f5e2b..b22ae49ffe46e0d82e291d60d3cf991e64ddf283 100644 Binary files a/_language-fr.appx and b/_language-fr.appx differ diff --git a/_scale-100.appx b/_scale-100.appx index ae55ac1f272f6a3dbef38756a9ac80aedef68b96..ad0467ac4f56800b0c9e3b336cdb26f7b059cba6 100644 Binary files a/_scale-100.appx and b/_scale-100.appx differ diff --git a/_scale-125.appx b/_scale-125.appx index 3c46cf32d51b49301a3669f19001218e11fe191e..2ba90d6da72f0a113c2b1f56638461d9dbd25383 100644 Binary files a/_scale-125.appx and b/_scale-125.appx differ diff --git a/_scale-150.appx b/_scale-150.appx index e24b3738460057a0f6ae06f9b9a7a1fa06885d38..e807d8e4d18afddb87a876581adf0a2fad519b66 100644 Binary files a/_scale-150.appx and b/_scale-150.appx differ diff --git a/_scale-400.appx b/_scale-400.appx index 6c9e63ed37631133a374e965b87fd516f019b5fd..4f1bc39b1b145798352bb9800d54373ad3daebd5 100644 Binary files a/_scale-400.appx and b/_scale-400.appx differ