From 070fe584d7738349cd49c43bfd9866e710c0fc12 Mon Sep 17 00:00:00 2001 From: Ruslan Zakharov Date: Thu, 8 Jun 2017 10:10:18 +0300 Subject: [PATCH] TizenRefApp-8536 Provide basic class structure for S-Voice app Added base classes structure Change-Id: Ia6fa4079dc634254619f3a5e75fbf16aadf20237 --- VoiceApp.Tizen/Common/Controls/CustomImage.xaml | 6 ++ VoiceApp.Tizen/Common/Controls/CustomImage.xaml.cs | 53 ++++++++++ .../Controls/Renderers/CustomImageRenderer.cs | 69 +++++++++++++ VoiceApp.Tizen/Common/Helpers/BaseViewModel.cs | 41 ++++++++ VoiceApp.Tizen/Common/Helpers/PageNavigator.cs | 43 ++++++++ VoiceApp.Tizen/Common/Input/AttachedTapCommand.cs | 94 ++++++++++++++++++ VoiceApp.Tizen/Settings/SettingsPage.xaml.cs | 5 +- VoiceApp.Tizen/Settings/SettingsViewModel.cs | 4 +- VoiceApp.Tizen/Voice/Client/Client.cs | 51 ++++++++++ VoiceApp.Tizen/Voice/Client/CommandData.cs | 41 ++++++++ VoiceApp.Tizen/Voice/Client/CommandExecutors.cs | 29 ++++++ VoiceApp.Tizen/Voice/Controls/ListeningPanel.xaml | 46 +++++++++ .../Voice/Controls/ListeningPanel.xaml.cs | 28 ++++++ .../Voice/Controls/ViewModel/ListeningViewModel.cs | 110 +++++++++++++++++++++ VoiceApp.Tizen/Voice/Themes/VoiceTheme.xaml | 7 ++ VoiceApp.Tizen/Voice/Themes/VoiceTheme.xaml.cs | 28 ++++++ VoiceApp.Tizen/Voice/VoicePage.xaml | 4 +- VoiceApp.Tizen/VoiceApp.Tizen.csproj | 35 +++++++ VoiceApp.Tizen/VoiceApp.Tizen.project.json | 1 + VoiceApp.Tizen/loc/loc.Designer.cs | 4 +- VoiceApp.Tizen/loc/loc.resx | 2 +- VoiceApp.Tizen/res/icon_arrow.png | Bin 0 -> 3602 bytes VoiceApp.Tizen/res/icon_close.png | Bin 0 -> 691 bytes VoiceApp.Tizen/res/icon_settings.png | Bin 0 -> 1217 bytes VoiceApp.Tizen/res/icon_voice.png | Bin 1871 -> 1054 bytes 25 files changed, 695 insertions(+), 6 deletions(-) create mode 100644 VoiceApp.Tizen/Common/Controls/CustomImage.xaml create mode 100644 VoiceApp.Tizen/Common/Controls/CustomImage.xaml.cs create mode 100644 VoiceApp.Tizen/Common/Controls/Renderers/CustomImageRenderer.cs create mode 100644 VoiceApp.Tizen/Common/Helpers/BaseViewModel.cs create mode 100644 VoiceApp.Tizen/Common/Helpers/PageNavigator.cs create mode 100644 VoiceApp.Tizen/Common/Input/AttachedTapCommand.cs create mode 100644 VoiceApp.Tizen/Voice/Client/Client.cs create mode 100644 VoiceApp.Tizen/Voice/Client/CommandData.cs create mode 100644 VoiceApp.Tizen/Voice/Client/CommandExecutors.cs create mode 100644 VoiceApp.Tizen/Voice/Controls/ListeningPanel.xaml create mode 100644 VoiceApp.Tizen/Voice/Controls/ListeningPanel.xaml.cs create mode 100644 VoiceApp.Tizen/Voice/Controls/ViewModel/ListeningViewModel.cs create mode 100644 VoiceApp.Tizen/Voice/Themes/VoiceTheme.xaml create mode 100644 VoiceApp.Tizen/Voice/Themes/VoiceTheme.xaml.cs create mode 100644 VoiceApp.Tizen/res/icon_arrow.png create mode 100644 VoiceApp.Tizen/res/icon_close.png create mode 100644 VoiceApp.Tizen/res/icon_settings.png diff --git a/VoiceApp.Tizen/Common/Controls/CustomImage.xaml b/VoiceApp.Tizen/Common/Controls/CustomImage.xaml new file mode 100644 index 0000000..6c03914 --- /dev/null +++ b/VoiceApp.Tizen/Common/Controls/CustomImage.xaml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/VoiceApp.Tizen/Common/Controls/CustomImage.xaml.cs b/VoiceApp.Tizen/Common/Controls/CustomImage.xaml.cs new file mode 100644 index 0000000..4c45b31 --- /dev/null +++ b/VoiceApp.Tizen/Common/Controls/CustomImage.xaml.cs @@ -0,0 +1,53 @@ +/* + * Copyright 2017 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using Xamarin.Forms; + +namespace VoiceApp.Tizen.Common.Controls +{ + /// + /// Extension of Xamarin Image, with supports: + /// Color blending + /// + public partial class CustomImage : Image + { + public CustomImage() + { + InitializeComponent(); + } + + /// + /// Color for blending + /// + public static readonly BindableProperty BlendingColorProperty = BindableProperty.Create( + "BlendingColor", + typeof(Color), + typeof(CustomImage), + Color.White); + + public Color BlendingColor + { + get + { + return (Color)GetValue(BlendingColorProperty); + } + set + { + SetValue(BlendingColorProperty, value); + } + } + } +} diff --git a/VoiceApp.Tizen/Common/Controls/Renderers/CustomImageRenderer.cs b/VoiceApp.Tizen/Common/Controls/Renderers/CustomImageRenderer.cs new file mode 100644 index 0000000..857316e --- /dev/null +++ b/VoiceApp.Tizen/Common/Controls/Renderers/CustomImageRenderer.cs @@ -0,0 +1,69 @@ +/* + * Copyright 2017 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System.ComponentModel; +using VoiceApp.Tizen.Common.Controls; +using VoiceApp.Tizen.Common.Controls.Renderers; +using Xamarin.Forms; +using Xamarin.Forms.Platform.Tizen; + +[assembly: ExportRenderer(typeof(CustomImage), typeof(CustomImageRenderer))] +namespace VoiceApp.Tizen.Common.Controls.Renderers +{ + /// + /// Custom renderer for blending color, needed for CustomImage control + /// + class CustomImageRenderer : ImageRenderer + { + /// + /// + /// + protected override void OnElementChanged(ElementChangedEventArgs e) + { + base.OnElementChanged(e); + + if (Control == null || Element == null) + { + return; + } + + applyBlendingColor(); + } + + /// + /// + /// + protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) + { + base.OnElementPropertyChanged(sender, e); + + // TODO this is not working, seems a bug + /* + if (e.PropertyName == CustomImage.BlendingColorProperty.PropertyName) + { + applyBlendingColor(); + } + */ + + applyBlendingColor(); + } + + private void applyBlendingColor() + { + Control.Color = ((CustomImage)Element).BlendingColor.ToNative(); + } + } +} diff --git a/VoiceApp.Tizen/Common/Helpers/BaseViewModel.cs b/VoiceApp.Tizen/Common/Helpers/BaseViewModel.cs new file mode 100644 index 0000000..9b51ebc --- /dev/null +++ b/VoiceApp.Tizen/Common/Helpers/BaseViewModel.cs @@ -0,0 +1,41 @@ +/* + * Copyright 2017 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System.ComponentModel; +using System.Runtime.CompilerServices; + +namespace VoiceApp.Tizen.Common.Helpers +{ + /// + /// Base class for ViewModels, implements INotifyPropertyChanged interface + /// + public class BaseViewModel : INotifyPropertyChanged + { + /// + /// Property changed event + /// + public event PropertyChangedEventHandler PropertyChanged; + + /// + /// Raise PropertyChanged event + /// + /// Changed property name + protected void OnPropertyChanged([CallerMemberName] string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/VoiceApp.Tizen/Common/Helpers/PageNavigator.cs b/VoiceApp.Tizen/Common/Helpers/PageNavigator.cs new file mode 100644 index 0000000..d615813 --- /dev/null +++ b/VoiceApp.Tizen/Common/Helpers/PageNavigator.cs @@ -0,0 +1,43 @@ +/* + * Copyright 2017 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; +using Xamarin.Forms; + +namespace VoiceApp.Tizen.Common.Helpers +{ + /// + /// Helper with navigation logics through pages + /// + class PageNavigator + { + /// + /// Navigate to new page in modal state + /// + /// Page to navigate + public static void NavigateModal(Page page) + { + if (Application.Current.MainPage != null) + { + Application.Current.MainPage.Navigation.PushModalAsync(page); + } + else + { + Console.WriteLine("PageNavigator, NavigateModal(Page), Application.Current.MainPage is null"); + } + } + } +} diff --git a/VoiceApp.Tizen/Common/Input/AttachedTapCommand.cs b/VoiceApp.Tizen/Common/Input/AttachedTapCommand.cs new file mode 100644 index 0000000..66346d4 --- /dev/null +++ b/VoiceApp.Tizen/Common/Input/AttachedTapCommand.cs @@ -0,0 +1,94 @@ +/* + * Copyright 2017 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System.Windows.Input; +using Xamarin.Forms; + +namespace VoiceApp.Tizen.Common.Input +{ + /// + /// Implementation of tap event through command. Can be attached to UI control + /// + class AttachedTapCommand + { + /// + /// Property for attaching ICommand + /// + public static readonly BindableProperty CommandProperty = BindableProperty.CreateAttached( + "Command", + typeof(ICommand), + typeof(View), + null, + BindingMode.OneWay, + defaultValueCreator: InitializeCommand); + + /// + /// Property for attaching CommandParameter + /// + public static readonly BindableProperty CommandParameterProperty = BindableProperty.CreateAttached( + "CommandParameter", + typeof(string), + typeof(View), + string.Empty); + + public static ICommand GetCommand(BindableObject obj) + { + return (ICommand)obj.GetValue(CommandProperty); + } + + public static void SetCommand(BindableObject obj, ICommand value) + { + obj.SetValue(CommandProperty, value); + } + + public static string GetCommandParameter(BindableObject obj) + { + return (string)obj.GetValue(CommandParameterProperty); + } + + public static void SetCommandParameter(BindableObject obj, ICommand value) + { + obj.SetValue(CommandParameterProperty, value); + } + + private static object InitializeCommand(BindableObject obj) + { + if (obj is View view) + { + var tapGestureRecognizer = new TapGestureRecognizer(); + tapGestureRecognizer.Tapped += OnTapped; + + view.GestureRecognizers.Add(tapGestureRecognizer); + } + + return null; + } + + private static void OnTapped(object sender, System.EventArgs e) + { + if (sender is BindableObject obj) + { + var command = GetCommand(obj); + var commandParameter = GetCommandParameter(obj); + + if (command != null && command.CanExecute(commandParameter)) + { + command.Execute(commandParameter); + } + } + } + } +} diff --git a/VoiceApp.Tizen/Settings/SettingsPage.xaml.cs b/VoiceApp.Tizen/Settings/SettingsPage.xaml.cs index 44386c7..98a2e51 100644 --- a/VoiceApp.Tizen/Settings/SettingsPage.xaml.cs +++ b/VoiceApp.Tizen/Settings/SettingsPage.xaml.cs @@ -14,15 +14,18 @@ * limitations under the License. */ +using VoiceApp.Tizen.Common.Helpers; using Xamarin.Forms; namespace VoiceApp.Tizen.Settings { public partial class SettingsPage : ContentPage { - public SettingsPage() + public SettingsPage(BaseViewModel vm) { InitializeComponent(); + + BindingContext = vm; } } } diff --git a/VoiceApp.Tizen/Settings/SettingsViewModel.cs b/VoiceApp.Tizen/Settings/SettingsViewModel.cs index 12000db..321cb8c 100644 --- a/VoiceApp.Tizen/Settings/SettingsViewModel.cs +++ b/VoiceApp.Tizen/Settings/SettingsViewModel.cs @@ -14,9 +14,11 @@ * limitations under the License. */ +using VoiceApp.Tizen.Common.Helpers; + namespace VoiceApp.Tizen.Settings { - class SettingsViewModel + class SettingsViewModel : BaseViewModel { } } diff --git a/VoiceApp.Tizen/Voice/Client/Client.cs b/VoiceApp.Tizen/Voice/Client/Client.cs new file mode 100644 index 0000000..0dc0a0d --- /dev/null +++ b/VoiceApp.Tizen/Voice/Client/Client.cs @@ -0,0 +1,51 @@ +/* + * Copyright 2017 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System.Collections.Generic; + +namespace VoiceApp.Tizen.Voice.Client +{ + // TODO: + // Implement API https://developer.tizen.org/dev-guide/csapi/namespaceTizen_1_1Uix_1_1VoiceControl.html + class Client + { + private List _commandsContainer = new List(); + + public Client() + { + Initialize(); + } + + /// + /// Start the record + /// + public void StartRecord() + { + } + + /// + /// Stop the record + /// + public void StopRecord() + { + } + + private void Initialize() + { + _commandsContainer.Add(new CommandData { Name = "Mute", Execute = CommandExecutors.Mute }); + } + } +} diff --git a/VoiceApp.Tizen/Voice/Client/CommandData.cs b/VoiceApp.Tizen/Voice/Client/CommandData.cs new file mode 100644 index 0000000..47064de --- /dev/null +++ b/VoiceApp.Tizen/Voice/Client/CommandData.cs @@ -0,0 +1,41 @@ +/* + * Copyright 2017 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; + +namespace VoiceApp.Tizen.Voice.Client +{ + class CommandData + { + /// + /// Name of command + /// + public string Name + { + get; + set; + } + + /// + /// Delegate to execute command + /// + public Action Execute + { + get; + set; + } + } +} diff --git a/VoiceApp.Tizen/Voice/Client/CommandExecutors.cs b/VoiceApp.Tizen/Voice/Client/CommandExecutors.cs new file mode 100644 index 0000000..824504c --- /dev/null +++ b/VoiceApp.Tizen/Voice/Client/CommandExecutors.cs @@ -0,0 +1,29 @@ +/* + * Copyright 2017 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +namespace VoiceApp.Tizen.Voice.Client +{ + class CommandExecutors + { + /// + /// Mute the sound + /// + /// Some additional parameter + public static void Mute(object parameter) + { + } + } +} diff --git a/VoiceApp.Tizen/Voice/Controls/ListeningPanel.xaml b/VoiceApp.Tizen/Voice/Controls/ListeningPanel.xaml new file mode 100644 index 0000000..de04979 --- /dev/null +++ b/VoiceApp.Tizen/Voice/Controls/ListeningPanel.xaml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VoiceApp.Tizen/Voice/Controls/ListeningPanel.xaml.cs b/VoiceApp.Tizen/Voice/Controls/ListeningPanel.xaml.cs new file mode 100644 index 0000000..8476d3d --- /dev/null +++ b/VoiceApp.Tizen/Voice/Controls/ListeningPanel.xaml.cs @@ -0,0 +1,28 @@ +/* + * Copyright 2017 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using Xamarin.Forms; + +namespace VoiceApp.Tizen.Voice.Controls +{ + public partial class ListeningPanel : ContentView + { + public ListeningPanel() + { + InitializeComponent(); + } + } +} diff --git a/VoiceApp.Tizen/Voice/Controls/ViewModel/ListeningViewModel.cs b/VoiceApp.Tizen/Voice/Controls/ViewModel/ListeningViewModel.cs new file mode 100644 index 0000000..356a397 --- /dev/null +++ b/VoiceApp.Tizen/Voice/Controls/ViewModel/ListeningViewModel.cs @@ -0,0 +1,110 @@ +/* + * Copyright 2017 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; +using System.Windows.Input; +using VoiceApp.Tizen.Common.Helpers; +using VoiceApp.Tizen.Settings; +using Xamarin.Forms; + +namespace VoiceApp.Tizen.Voice.Controls.ViewModel +{ + class ListeningViewModel : BaseViewModel + { + /// + /// States of voice + /// + public enum VoiceState + { + Listening, + Waiting + } + + private Client.Client _voiceClient = new Client.Client(); + private VoiceState _currentVoiceState = VoiceState.Waiting; + + public ListeningViewModel() + { + StartListeningCommand = new Command(OnStartListening, OnStartListeningCanExecute); + OpenSettingsCommand = new Command(OnOpenSettings); + } + + /// + /// Command for start listening + /// + public ICommand StartListeningCommand + { + get; + private set; + } + + /// + /// Command for open settings + /// + public ICommand OpenSettingsCommand + { + get; + private set; + } + + /// + /// Current voice state + /// + public VoiceState CurrentVoiceState + { + get + { + return _currentVoiceState; + } + private set + { + _currentVoiceState = value; + OnPropertyChanged(); + } + } + + private void OnStartListening(object obj) + { + CurrentVoiceState = VoiceState.Listening; + _voiceClient.StartRecord(); + + Device.StartTimer(new TimeSpan(0, 0, 5), OnListeningElapsed); + + if (StartListeningCommand is Command command) + { + command.ChangeCanExecute(); + } + } + + private bool OnStartListeningCanExecute(object obj) + { + return CurrentVoiceState == VoiceState.Waiting; + } + + private void OnOpenSettings(object obj) + { + PageNavigator.NavigateModal(new SettingsPage(new SettingsViewModel())); + } + + private bool OnListeningElapsed() + { + _voiceClient.StopRecord(); + CurrentVoiceState = VoiceState.Waiting; + + return false; + } + } +} diff --git a/VoiceApp.Tizen/Voice/Themes/VoiceTheme.xaml b/VoiceApp.Tizen/Voice/Themes/VoiceTheme.xaml new file mode 100644 index 0000000..d4cb148 --- /dev/null +++ b/VoiceApp.Tizen/Voice/Themes/VoiceTheme.xaml @@ -0,0 +1,7 @@ + + + + #FF0088AA + \ No newline at end of file diff --git a/VoiceApp.Tizen/Voice/Themes/VoiceTheme.xaml.cs b/VoiceApp.Tizen/Voice/Themes/VoiceTheme.xaml.cs new file mode 100644 index 0000000..674e657 --- /dev/null +++ b/VoiceApp.Tizen/Voice/Themes/VoiceTheme.xaml.cs @@ -0,0 +1,28 @@ +/* + * Copyright 2017 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using Xamarin.Forms; + +namespace VoiceApp.Tizen.Voice.Themes +{ + public partial class VoiceTheme : ResourceDictionary + { + public VoiceTheme() + { + InitializeComponent(); + } + } +} diff --git a/VoiceApp.Tizen/Voice/VoicePage.xaml b/VoiceApp.Tizen/Voice/VoicePage.xaml index d1dfb93..2e2657a 100644 --- a/VoiceApp.Tizen/Voice/VoicePage.xaml +++ b/VoiceApp.Tizen/Voice/VoicePage.xaml @@ -1,6 +1,8 @@  + x:Class="VoiceApp.Tizen.Voice.VoicePage" + xmlns:voiceControls="clr-namespace:VoiceApp.Tizen.Voice.Controls"> + \ No newline at end of file diff --git a/VoiceApp.Tizen/VoiceApp.Tizen.csproj b/VoiceApp.Tizen/VoiceApp.Tizen.csproj index e948568..7601e61 100644 --- a/VoiceApp.Tizen/VoiceApp.Tizen.csproj +++ b/VoiceApp.Tizen/VoiceApp.Tizen.csproj @@ -50,6 +50,13 @@ + + + + CustomImage.xaml + + + True True @@ -61,7 +68,17 @@ + + VoiceTheme.xaml + + + + + + ListeningPanel.xaml + + VoicePage.xaml @@ -82,8 +99,26 @@ + + + + + + MSBuild:UpdateDesignTimeXaml + + + + + MSBuild:UpdateDesignTimeXaml + + + + + MSBuild:UpdateDesignTimeXaml + +