diff --git a/Dialer/App.xaml.cs b/Dialer/App.xaml.cs index 58ef1ee..bfaeeb4 100644 --- a/Dialer/App.xaml.cs +++ b/Dialer/App.xaml.cs @@ -71,6 +71,7 @@ private async Task InitializateSystems() ResourceLoader = ResourceLoader.GetForViewIndependentUse(); NotificationSystem.Initializate(); await CallSystem.Initializate(); + ContactSystem.LoadContacts(); } protected override void OnActivated(IActivatedEventArgs args) diff --git a/Dialer/Assets/BadgeLogo.scale-100.png b/Dialer/Assets/BadgeLogo.scale-100.png index b8e1767..9120cfa 100644 Binary files a/Dialer/Assets/BadgeLogo.scale-100.png and b/Dialer/Assets/BadgeLogo.scale-100.png differ diff --git a/Dialer/Assets/BadgeLogo.scale-125.png b/Dialer/Assets/BadgeLogo.scale-125.png index 1a3e03c..5f27708 100644 Binary files a/Dialer/Assets/BadgeLogo.scale-125.png and b/Dialer/Assets/BadgeLogo.scale-125.png differ diff --git a/Dialer/Assets/BadgeLogo.scale-150.png b/Dialer/Assets/BadgeLogo.scale-150.png index 21ba724..864fdd7 100644 Binary files a/Dialer/Assets/BadgeLogo.scale-150.png and b/Dialer/Assets/BadgeLogo.scale-150.png differ diff --git a/Dialer/Assets/BadgeLogo.scale-200.png b/Dialer/Assets/BadgeLogo.scale-200.png index f5aa890..7aae110 100644 Binary files a/Dialer/Assets/BadgeLogo.scale-200.png and b/Dialer/Assets/BadgeLogo.scale-200.png differ diff --git a/Dialer/Assets/BadgeLogo.scale-400.png b/Dialer/Assets/BadgeLogo.scale-400.png index 18535c2..50d46a3 100644 Binary files a/Dialer/Assets/BadgeLogo.scale-400.png and b/Dialer/Assets/BadgeLogo.scale-400.png differ diff --git a/Dialer/Assets/LargeTile.scale-100.png b/Dialer/Assets/LargeTile.scale-100.png index 148d0db..e02e71a 100644 Binary files a/Dialer/Assets/LargeTile.scale-100.png and b/Dialer/Assets/LargeTile.scale-100.png differ diff --git a/Dialer/Assets/LargeTile.scale-125.png b/Dialer/Assets/LargeTile.scale-125.png index 31af867..ab0334d 100644 Binary files a/Dialer/Assets/LargeTile.scale-125.png and b/Dialer/Assets/LargeTile.scale-125.png differ diff --git a/Dialer/Assets/LargeTile.scale-150.png b/Dialer/Assets/LargeTile.scale-150.png index 0c64887..354c5af 100644 Binary files a/Dialer/Assets/LargeTile.scale-150.png and b/Dialer/Assets/LargeTile.scale-150.png differ diff --git a/Dialer/Assets/LargeTile.scale-200.png b/Dialer/Assets/LargeTile.scale-200.png index b7cb6ba..a6304e7 100644 Binary files a/Dialer/Assets/LargeTile.scale-200.png and b/Dialer/Assets/LargeTile.scale-200.png differ diff --git a/Dialer/Assets/LargeTile.scale-400.png b/Dialer/Assets/LargeTile.scale-400.png index b640366..bd38b43 100644 Binary files a/Dialer/Assets/LargeTile.scale-400.png and b/Dialer/Assets/LargeTile.scale-400.png differ diff --git a/Dialer/Assets/NoContactIcon.png b/Dialer/Assets/NoContactIcon.png new file mode 100644 index 0000000..f821f90 Binary files /dev/null and b/Dialer/Assets/NoContactIcon.png differ diff --git a/Dialer/Assets/SmallTile.scale-100.png b/Dialer/Assets/SmallTile.scale-100.png index add3a1d..8a3844f 100644 Binary files a/Dialer/Assets/SmallTile.scale-100.png and b/Dialer/Assets/SmallTile.scale-100.png differ diff --git a/Dialer/Assets/SmallTile.scale-125.png b/Dialer/Assets/SmallTile.scale-125.png index 4ae5f70..5908eef 100644 Binary files a/Dialer/Assets/SmallTile.scale-125.png and b/Dialer/Assets/SmallTile.scale-125.png differ diff --git a/Dialer/Assets/SmallTile.scale-150.png b/Dialer/Assets/SmallTile.scale-150.png index 24e15f5..effbbea 100644 Binary files a/Dialer/Assets/SmallTile.scale-150.png and b/Dialer/Assets/SmallTile.scale-150.png differ diff --git a/Dialer/Assets/SmallTile.scale-200.png b/Dialer/Assets/SmallTile.scale-200.png index 03b00de..bf958b8 100644 Binary files a/Dialer/Assets/SmallTile.scale-200.png and b/Dialer/Assets/SmallTile.scale-200.png differ diff --git a/Dialer/Assets/SmallTile.scale-400.png b/Dialer/Assets/SmallTile.scale-400.png index 6ce2b18..75b9562 100644 Binary files a/Dialer/Assets/SmallTile.scale-400.png and b/Dialer/Assets/SmallTile.scale-400.png differ diff --git a/Dialer/Assets/SplashScreen.scale-100.png b/Dialer/Assets/SplashScreen.scale-100.png index 8b0b34c..78c5a04 100644 Binary files a/Dialer/Assets/SplashScreen.scale-100.png and b/Dialer/Assets/SplashScreen.scale-100.png differ diff --git a/Dialer/Assets/SplashScreen.scale-125.png b/Dialer/Assets/SplashScreen.scale-125.png index 37ecc1d..282b61e 100644 Binary files a/Dialer/Assets/SplashScreen.scale-125.png and b/Dialer/Assets/SplashScreen.scale-125.png differ diff --git a/Dialer/Assets/SplashScreen.scale-150.png b/Dialer/Assets/SplashScreen.scale-150.png index b7428ea..5abcec6 100644 Binary files a/Dialer/Assets/SplashScreen.scale-150.png and b/Dialer/Assets/SplashScreen.scale-150.png differ diff --git a/Dialer/Assets/SplashScreen.scale-200.png b/Dialer/Assets/SplashScreen.scale-200.png index 42b5ccb..832486d 100644 Binary files a/Dialer/Assets/SplashScreen.scale-200.png and b/Dialer/Assets/SplashScreen.scale-200.png differ diff --git a/Dialer/Assets/SplashScreen.scale-400.png b/Dialer/Assets/SplashScreen.scale-400.png index 4831c9f..13c3086 100644 Binary files a/Dialer/Assets/SplashScreen.scale-400.png and b/Dialer/Assets/SplashScreen.scale-400.png differ diff --git a/Dialer/Assets/Square150x150Logo.scale-100.png b/Dialer/Assets/Square150x150Logo.scale-100.png index eff8da3..c4e0302 100644 Binary files a/Dialer/Assets/Square150x150Logo.scale-100.png and b/Dialer/Assets/Square150x150Logo.scale-100.png differ diff --git a/Dialer/Assets/Square150x150Logo.scale-125.png b/Dialer/Assets/Square150x150Logo.scale-125.png index bb441b1..b36b58c 100644 Binary files a/Dialer/Assets/Square150x150Logo.scale-125.png and b/Dialer/Assets/Square150x150Logo.scale-125.png differ diff --git a/Dialer/Assets/Square150x150Logo.scale-150.png b/Dialer/Assets/Square150x150Logo.scale-150.png index 4edf3b7..b1eafd9 100644 Binary files a/Dialer/Assets/Square150x150Logo.scale-150.png and b/Dialer/Assets/Square150x150Logo.scale-150.png differ diff --git a/Dialer/Assets/Square150x150Logo.scale-200.png b/Dialer/Assets/Square150x150Logo.scale-200.png index 323b63a..ae8aee1 100644 Binary files a/Dialer/Assets/Square150x150Logo.scale-200.png and b/Dialer/Assets/Square150x150Logo.scale-200.png differ diff --git a/Dialer/Assets/Square150x150Logo.scale-400.png b/Dialer/Assets/Square150x150Logo.scale-400.png index 7cd1beb..9757f59 100644 Binary files a/Dialer/Assets/Square150x150Logo.scale-400.png and b/Dialer/Assets/Square150x150Logo.scale-400.png differ diff --git a/Dialer/Assets/Square44x44Logo.altform-lightunplated_targetsize-16.png b/Dialer/Assets/Square44x44Logo.altform-lightunplated_targetsize-16.png index e693a92..255b023 100644 Binary files a/Dialer/Assets/Square44x44Logo.altform-lightunplated_targetsize-16.png and b/Dialer/Assets/Square44x44Logo.altform-lightunplated_targetsize-16.png differ diff --git a/Dialer/Assets/Square44x44Logo.altform-lightunplated_targetsize-24.png b/Dialer/Assets/Square44x44Logo.altform-lightunplated_targetsize-24.png index 22c87f1..96741f1 100644 Binary files a/Dialer/Assets/Square44x44Logo.altform-lightunplated_targetsize-24.png and b/Dialer/Assets/Square44x44Logo.altform-lightunplated_targetsize-24.png differ diff --git a/Dialer/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png b/Dialer/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png index 62815ed..6264663 100644 Binary files a/Dialer/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png and b/Dialer/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png differ diff --git a/Dialer/Assets/Square44x44Logo.altform-lightunplated_targetsize-32.png b/Dialer/Assets/Square44x44Logo.altform-lightunplated_targetsize-32.png index c2463d8..763315e 100644 Binary files a/Dialer/Assets/Square44x44Logo.altform-lightunplated_targetsize-32.png and b/Dialer/Assets/Square44x44Logo.altform-lightunplated_targetsize-32.png differ diff --git a/Dialer/Assets/Square44x44Logo.altform-lightunplated_targetsize-48.png b/Dialer/Assets/Square44x44Logo.altform-lightunplated_targetsize-48.png index d019560..3ce3364 100644 Binary files a/Dialer/Assets/Square44x44Logo.altform-lightunplated_targetsize-48.png and b/Dialer/Assets/Square44x44Logo.altform-lightunplated_targetsize-48.png differ diff --git a/Dialer/Assets/Square44x44Logo.altform-unplated_targetsize-16.png b/Dialer/Assets/Square44x44Logo.altform-unplated_targetsize-16.png index 7cbc507..2c7f0b9 100644 Binary files a/Dialer/Assets/Square44x44Logo.altform-unplated_targetsize-16.png and b/Dialer/Assets/Square44x44Logo.altform-unplated_targetsize-16.png differ diff --git a/Dialer/Assets/Square44x44Logo.altform-unplated_targetsize-256.png b/Dialer/Assets/Square44x44Logo.altform-unplated_targetsize-256.png index 62815ed..6264663 100644 Binary files a/Dialer/Assets/Square44x44Logo.altform-unplated_targetsize-256.png and b/Dialer/Assets/Square44x44Logo.altform-unplated_targetsize-256.png differ diff --git a/Dialer/Assets/Square44x44Logo.altform-unplated_targetsize-32.png b/Dialer/Assets/Square44x44Logo.altform-unplated_targetsize-32.png index c2463d8..763315e 100644 Binary files a/Dialer/Assets/Square44x44Logo.altform-unplated_targetsize-32.png and b/Dialer/Assets/Square44x44Logo.altform-unplated_targetsize-32.png differ diff --git a/Dialer/Assets/Square44x44Logo.altform-unplated_targetsize-48.png b/Dialer/Assets/Square44x44Logo.altform-unplated_targetsize-48.png index d019560..3ce3364 100644 Binary files a/Dialer/Assets/Square44x44Logo.altform-unplated_targetsize-48.png and b/Dialer/Assets/Square44x44Logo.altform-unplated_targetsize-48.png differ diff --git a/Dialer/Assets/Square44x44Logo.scale-100.png b/Dialer/Assets/Square44x44Logo.scale-100.png index 4fdf4df..11b303f 100644 Binary files a/Dialer/Assets/Square44x44Logo.scale-100.png and b/Dialer/Assets/Square44x44Logo.scale-100.png differ diff --git a/Dialer/Assets/Square44x44Logo.scale-125.png b/Dialer/Assets/Square44x44Logo.scale-125.png index 0bcabc3..f012229 100644 Binary files a/Dialer/Assets/Square44x44Logo.scale-125.png and b/Dialer/Assets/Square44x44Logo.scale-125.png differ diff --git a/Dialer/Assets/Square44x44Logo.scale-150.png b/Dialer/Assets/Square44x44Logo.scale-150.png index 4eef965..c008ea7 100644 Binary files a/Dialer/Assets/Square44x44Logo.scale-150.png and b/Dialer/Assets/Square44x44Logo.scale-150.png differ diff --git a/Dialer/Assets/Square44x44Logo.scale-200.png b/Dialer/Assets/Square44x44Logo.scale-200.png index 5ae0618..b7f3e0e 100644 Binary files a/Dialer/Assets/Square44x44Logo.scale-200.png and b/Dialer/Assets/Square44x44Logo.scale-200.png differ diff --git a/Dialer/Assets/Square44x44Logo.scale-400.png b/Dialer/Assets/Square44x44Logo.scale-400.png index 451d580..1e6bcda 100644 Binary files a/Dialer/Assets/Square44x44Logo.scale-400.png and b/Dialer/Assets/Square44x44Logo.scale-400.png differ diff --git a/Dialer/Assets/Square44x44Logo.targetsize-16.png b/Dialer/Assets/Square44x44Logo.targetsize-16.png index b17c611..c59cade 100644 Binary files a/Dialer/Assets/Square44x44Logo.targetsize-16.png and b/Dialer/Assets/Square44x44Logo.targetsize-16.png differ diff --git a/Dialer/Assets/Square44x44Logo.targetsize-24.png b/Dialer/Assets/Square44x44Logo.targetsize-24.png index f0200c1..9fb8cb9 100644 Binary files a/Dialer/Assets/Square44x44Logo.targetsize-24.png and b/Dialer/Assets/Square44x44Logo.targetsize-24.png differ diff --git a/Dialer/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/Dialer/Assets/Square44x44Logo.targetsize-24_altform-unplated.png index 8c9f829..bf66464 100644 Binary files a/Dialer/Assets/Square44x44Logo.targetsize-24_altform-unplated.png and b/Dialer/Assets/Square44x44Logo.targetsize-24_altform-unplated.png differ diff --git a/Dialer/Assets/Square44x44Logo.targetsize-256.png b/Dialer/Assets/Square44x44Logo.targetsize-256.png index 0e15776..c5e646e 100644 Binary files a/Dialer/Assets/Square44x44Logo.targetsize-256.png and b/Dialer/Assets/Square44x44Logo.targetsize-256.png differ diff --git a/Dialer/Assets/Square44x44Logo.targetsize-32.png b/Dialer/Assets/Square44x44Logo.targetsize-32.png index 52aef48..6b69e6d 100644 Binary files a/Dialer/Assets/Square44x44Logo.targetsize-32.png and b/Dialer/Assets/Square44x44Logo.targetsize-32.png differ diff --git a/Dialer/Assets/Square44x44Logo.targetsize-48.png b/Dialer/Assets/Square44x44Logo.targetsize-48.png index 6b3f085..2ef0fbd 100644 Binary files a/Dialer/Assets/Square44x44Logo.targetsize-48.png and b/Dialer/Assets/Square44x44Logo.targetsize-48.png differ diff --git a/Dialer/Assets/StoreLogo.scale-100.png b/Dialer/Assets/StoreLogo.scale-100.png index 7939fe9..3b3b4ba 100644 Binary files a/Dialer/Assets/StoreLogo.scale-100.png and b/Dialer/Assets/StoreLogo.scale-100.png differ diff --git a/Dialer/Assets/StoreLogo.scale-125.png b/Dialer/Assets/StoreLogo.scale-125.png index c1ee868..70f797a 100644 Binary files a/Dialer/Assets/StoreLogo.scale-125.png and b/Dialer/Assets/StoreLogo.scale-125.png differ diff --git a/Dialer/Assets/StoreLogo.scale-150.png b/Dialer/Assets/StoreLogo.scale-150.png index c598c41..fd02f8f 100644 Binary files a/Dialer/Assets/StoreLogo.scale-150.png and b/Dialer/Assets/StoreLogo.scale-150.png differ diff --git a/Dialer/Assets/StoreLogo.scale-200.png b/Dialer/Assets/StoreLogo.scale-200.png index e2c0351..3bb4697 100644 Binary files a/Dialer/Assets/StoreLogo.scale-200.png and b/Dialer/Assets/StoreLogo.scale-200.png differ diff --git a/Dialer/Assets/StoreLogo.scale-400.png b/Dialer/Assets/StoreLogo.scale-400.png index 5443660..6d5fb9a 100644 Binary files a/Dialer/Assets/StoreLogo.scale-400.png and b/Dialer/Assets/StoreLogo.scale-400.png differ diff --git a/Dialer/Assets/Wide310x150Logo.scale-100.png b/Dialer/Assets/Wide310x150Logo.scale-100.png index e624e9c..b9a803d 100644 Binary files a/Dialer/Assets/Wide310x150Logo.scale-100.png and b/Dialer/Assets/Wide310x150Logo.scale-100.png differ diff --git a/Dialer/Assets/Wide310x150Logo.scale-125.png b/Dialer/Assets/Wide310x150Logo.scale-125.png index 283e17d..93e1fde 100644 Binary files a/Dialer/Assets/Wide310x150Logo.scale-125.png and b/Dialer/Assets/Wide310x150Logo.scale-125.png differ diff --git a/Dialer/Assets/Wide310x150Logo.scale-150.png b/Dialer/Assets/Wide310x150Logo.scale-150.png index 1bcb0ac..ac01825 100644 Binary files a/Dialer/Assets/Wide310x150Logo.scale-150.png and b/Dialer/Assets/Wide310x150Logo.scale-150.png differ diff --git a/Dialer/Assets/Wide310x150Logo.scale-200.png b/Dialer/Assets/Wide310x150Logo.scale-200.png index 54b9ad3..a879249 100644 Binary files a/Dialer/Assets/Wide310x150Logo.scale-200.png and b/Dialer/Assets/Wide310x150Logo.scale-200.png differ diff --git a/Dialer/Assets/Wide310x150Logo.scale-400.png b/Dialer/Assets/Wide310x150Logo.scale-400.png index 980435f..e689568 100644 Binary files a/Dialer/Assets/Wide310x150Logo.scale-400.png and b/Dialer/Assets/Wide310x150Logo.scale-400.png differ diff --git a/Dialer/Dialer.csproj b/Dialer/Dialer.csproj index 10b7919..ae2b2fb 100644 --- a/Dialer/Dialer.csproj +++ b/Dialer/Dialer.csproj @@ -31,7 +31,7 @@ 0 True SHA256 - 22CE1297025BAE413F6BEF99F1A63E5B7BB2536B + 040885C2D07C83DDF905F42787FC244EFB3EFD00 true @@ -136,28 +136,38 @@ + + + AdditionalPhoneContactPresenter.xaml + CallHistoryEntryPresenter.xaml + + ContactControl.xaml + LinePresenter.xaml - - - - - - - - - - - - + + VerticalIndexScrollbar.xaml + + + + + + + + + + + + + @@ -235,6 +245,7 @@ + @@ -288,10 +299,18 @@ MSBuild:Compile Designer + + Designer + MSBuild:Compile + Designer MSBuild:Compile + + MSBuild:Compile + Designer + MSBuild:Compile Designer @@ -308,7 +327,11 @@ MSBuild:Compile Designer - + + MSBuild:Compile + Designer + + Designer MSBuild:Compile diff --git a/Dialer/Systems/ContactSystem.cs b/Dialer/Systems/ContactSystem.cs new file mode 100644 index 0000000..4d50517 --- /dev/null +++ b/Dialer/Systems/ContactSystem.cs @@ -0,0 +1,104 @@ +using Dialer.UI.Controls; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.ApplicationModel.Contacts; + +namespace Dialer.Systems +{ + class ContactSystem + { + private static ContactStore _contactStore; + private static ObservableCollection _contacts; + private static ObservableCollection _contactControls; + + public static event EventHandler ContactsLoaded; + + public static bool ContactsLoading = false; + + public static ObservableCollection Contacts + { + get + { + if (_contacts != null) return _contacts; + else return null; + } + } + + public static ObservableCollection ContactControls + { + get + { + if (_contactControls != null) return _contactControls; + else return null; + } + } + + public static async void LoadContacts() + { + if(_contacts == null && ContactsLoading == false) + { + ContactsLoading = true; + _contactStore = await ContactManager.RequestStoreAsync(); + ObservableCollection t_contacts = new ObservableCollection(await _contactStore.FindContactsAsync()); + + Debug.WriteLine("Found " + t_contacts.Count + " contacts"); + + ObservableCollection t_contactControls = new ObservableCollection(); + + foreach (Contact contact in t_contacts) + { + ContactControl cc = new ContactControl(); + cc.AssociatedContact = contact; + cc.ContactName = contact.DisplayName; + if (contact.Phones.Count == 0) continue; + cc.ContactMainPhone = contact.Phones[0].Number; + List> additionalPhones = new List>(); + foreach (ContactPhone contactPhone in contact.Phones) + { + additionalPhones.Add(new Tuple(contactPhone.Kind.ToString(), contactPhone.Number)); + } + cc.AdditionalContactPhones = additionalPhones; + if (contact.SmallDisplayPicture != null) + //TODO: Fix wrong cast + cc.ContactPicture = contact.SmallDisplayPicture; + t_contactControls.Add(cc); + } + _contacts = t_contacts; + _contactControls = t_contactControls; + + ContactsLoading = false; + + ContactsLoaded?.Invoke(null, EventArgs.Empty); + } + } + + public static async Task DeleteContact(Contact contact) + { + ContactStore cs = await ContactManager.RequestStoreAsync(); + ContactList cl = null; + try + { + cl = await cs.GetContactListAsync(contact.ContactListId); + } + catch + { + IReadOnlyList contactlists = await cs.FindContactListsAsync(); + foreach (ContactList _cl in contactlists) + { + try + { + if (_cl.GetContactAsync(contact.Id) != null) cl = _cl; + } + catch { } + } + } + if (cl == null) return; //For some reason the correct contact list can't be retrieved. It should be in Contact.ContactListId, but... + await cl.DeleteContactAsync(contact); + } + } +} diff --git a/Dialer/Systems/NotificationSystem.cs b/Dialer/Systems/NotificationSystem.cs index 4532e3e..a8af512 100644 --- a/Dialer/Systems/NotificationSystem.cs +++ b/Dialer/Systems/NotificationSystem.cs @@ -1,5 +1,5 @@ using Dialer.Helpers; -using Dialer.UI.Conventers; +using Dialer.UI.Converters; using Internal.Windows.Calls; using Microsoft.Toolkit.Uwp.Notifications; using System; diff --git a/Dialer/UI/Controls/AdditionalPhoneContactPresenter.xaml b/Dialer/UI/Controls/AdditionalPhoneContactPresenter.xaml new file mode 100644 index 0000000..7dcbcf7 --- /dev/null +++ b/Dialer/UI/Controls/AdditionalPhoneContactPresenter.xaml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + diff --git a/Dialer/UI/Controls/AdditionalPhoneContactPresenter.xaml.cs b/Dialer/UI/Controls/AdditionalPhoneContactPresenter.xaml.cs new file mode 100644 index 0000000..f376930 --- /dev/null +++ b/Dialer/UI/Controls/AdditionalPhoneContactPresenter.xaml.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + + +namespace Dialer.UI.Controls +{ + public sealed partial class AdditionalPhoneContactPresenter : UserControl + { + public string PhoneType + { + get => PhoneTypeTB.Text; + set => PhoneTypeTB.Text = value; + } + + public string PhoneNumber + { + get => PhoneNumberTB.Text; + set => PhoneNumberTB.Text = value; + } + + public AdditionalPhoneContactPresenter() + { + InitializeComponent(); + } + } +} diff --git a/Dialer/UI/Controls/CallHistoryEntryPresenter.xaml b/Dialer/UI/Controls/CallHistoryEntryPresenter.xaml index 0c22efa..92b097f 100644 --- a/Dialer/UI/Controls/CallHistoryEntryPresenter.xaml +++ b/Dialer/UI/Controls/CallHistoryEntryPresenter.xaml @@ -10,7 +10,7 @@ d:DesignWidth="400" d:DesignHeight="75" HorizontalContentAlignment="Stretch"> - + diff --git a/Dialer/UI/Controls/CallStatePresenter.xaml b/Dialer/UI/Controls/CallStatePresenter.xaml index a629051..2b0c7d7 100644 --- a/Dialer/UI/Controls/CallStatePresenter.xaml +++ b/Dialer/UI/Controls/CallStatePresenter.xaml @@ -11,7 +11,7 @@ d:DesignWidth="128"> - + diff --git a/Dialer/UI/Controls/ContactControl.xaml b/Dialer/UI/Controls/ContactControl.xaml new file mode 100644 index 0000000..7cffae2 --- /dev/null +++ b/Dialer/UI/Controls/ContactControl.xaml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Dialer/UI/Controls/ContactControl.xaml.cs b/Dialer/UI/Controls/ContactControl.xaml.cs new file mode 100644 index 0000000..e44d52f --- /dev/null +++ b/Dialer/UI/Controls/ContactControl.xaml.cs @@ -0,0 +1,97 @@ +using Dialer.Systems; +using Dialer.UI.Pages; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using Windows.ApplicationModel.Calls; +using Windows.ApplicationModel.Contacts; +using Windows.Storage; +using Windows.Storage.Streams; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media.Imaging; + +namespace Dialer.UI.Controls +{ + public sealed partial class ContactControl : UserControl + { + private List> additionalPhoneContacts; + private ObservableCollection additionalPhoneContactPresenters; + + public Contact AssociatedContact; + + public string ContactName + { + get => ContactNameTB.Text; + set => ContactNameTB.Text = value; + } + + public string ContactMainPhone + { + get => ContactMainPhoneTB.Text; + set => ContactMainPhoneTB.Text = value; + } + + public List> AdditionalContactPhones + { + get => additionalPhoneContacts; + set + { + additionalPhoneContacts = value; + foreach (Tuple additionalPhone in value) + { + AdditionalPhoneContactPresenter apcp = new AdditionalPhoneContactPresenter(); + apcp.PhoneType = additionalPhone.Item1; + apcp.PhoneNumber = additionalPhone.Item2; + additionalPhoneContactPresenters.Add(apcp); + } + } + } + + public IRandomAccessStreamReference ContactPicture + { + set + { + try + { + ContactImage.ImageSource = new BitmapImage(new Uri(((StorageFile)value).Path)); + } catch + { + ContactImage.ImageSource = new BitmapImage(new Uri("ms-appx:///Assets//NoContactIcon.png")); + } + } + } + + public ContactControl() + { + InitializeComponent(); + additionalPhoneContactPresenters = new ObservableCollection(); + } + + private void MainCallButton_Tapped(object sender, TappedRoutedEventArgs e) + { + //TODO: Check for missing phone lines. If no phone lines, show an alert + try + { + App.Current.CallSystem.DefaultLine?.DialWithOptions(new PhoneDialOptions() { Number = ContactMainPhone.ToString() }); + } + catch { } + } + + private async void FlyoutDeleteContact_Click(object sender, RoutedEventArgs e) + { + await ContactSystem.DeleteContact(AssociatedContact); + ContactsPage.CurrentInstance.RemoveContactControl(this); + } + + private void FlyoutCallContact_Click(object sender, RoutedEventArgs e) + { + try + { + App.Current.CallSystem.DefaultLine?.DialWithOptions(new PhoneDialOptions() { Number = ContactMainPhone.ToString() }); + } + catch { } + } + } +} diff --git a/Dialer/UI/Controls/LinePresenter.xaml b/Dialer/UI/Controls/LinePresenter.xaml index 80020e1..cd3e09b 100644 --- a/Dialer/UI/Controls/LinePresenter.xaml +++ b/Dialer/UI/Controls/LinePresenter.xaml @@ -10,7 +10,7 @@ d:DesignWidth="128"> - + diff --git a/Dialer/UI/Controls/SmallCallPresenter.xaml b/Dialer/UI/Controls/SmallCallPresenter.xaml index 0e9fa67..99d1f12 100644 --- a/Dialer/UI/Controls/SmallCallPresenter.xaml +++ b/Dialer/UI/Controls/SmallCallPresenter.xaml @@ -10,7 +10,7 @@ d:DesignWidth="400" Height="64"> - + diff --git a/Dialer/UI/Controls/VerticalIndexScrollbar.xaml b/Dialer/UI/Controls/VerticalIndexScrollbar.xaml new file mode 100644 index 0000000..dfd7631 --- /dev/null +++ b/Dialer/UI/Controls/VerticalIndexScrollbar.xaml @@ -0,0 +1,44 @@ + + + + + # + A + B + C + D + E + F + G + H + I + J + K + L + M + N + O + P + Q + R + S + T + U + V + W + X + Y + Z + ? + + + diff --git a/Dialer/UI/Controls/VerticalIndexScrollbar.xaml.cs b/Dialer/UI/Controls/VerticalIndexScrollbar.xaml.cs new file mode 100644 index 0000000..b435d22 --- /dev/null +++ b/Dialer/UI/Controls/VerticalIndexScrollbar.xaml.cs @@ -0,0 +1,74 @@ +using Dialer.UI.Pages; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +namespace Dialer.UI.Controls +{ + public sealed partial class VerticalIndexScrollbar : UserControl + { + private bool TrackingPointer = false; + + public VerticalIndexScrollbar() + { + InitializeComponent(); + } + + public void FixSpacing() + { + LettersStackPanel.Spacing = (LettersStackPanel.ActualHeight / 26d) - 21d; + } + + private void Letter_Tapped(object sender, TappedRoutedEventArgs e) + { + //ContactsPage.CurrentInstance?.NavigateToLetter((sender as TextBlock).Text); + } + + private void LettersStackPanel_PointerPressed(object sender, PointerRoutedEventArgs e) + { + //Debug.WriteLine("Pointer entered at " + e.GetCurrentPoint(sender as UIElement).Position); + TrackingPointer = true; + double h = e.GetCurrentPoint(sender as UIElement).Position.Y; + //Calculate letter based on point position + int index = (int)Math.Floor(h / (referenceTB.ActualHeight + LettersStackPanel.Spacing)); + //Debug.WriteLine("Pointer should be in letter " + Convert.ToChar(64 + index)); + ContactsPage.CurrentInstance?.NavigateToLetter(Convert.ToChar(64 + index).ToString()); + } + + private void LettersStackPanel_PointerMoved(object sender, PointerRoutedEventArgs e) + { + if(TrackingPointer) + { + //Debug.WriteLine("Pointer moved at " + e.GetCurrentPoint(sender as UIElement).Position); + double h = e.GetCurrentPoint(sender as UIElement).Position.Y; + //Calculate letter based on point position + int index = (int)Math.Floor(h / (referenceTB.ActualHeight + LettersStackPanel.Spacing)); + //Debug.WriteLine("Pointer should be in letter " + Convert.ToChar(64 + index)); + ContactsPage.CurrentInstance?.NavigateToLetter(Convert.ToChar(64 + index).ToString()); + } + } + + private void LettersStackPanel_PointerReleased(object sender, PointerRoutedEventArgs e) + { + //Debug.WriteLine("Pointer exited at " + e.GetCurrentPoint(sender as UIElement).Position); + TrackingPointer = false; + double h = e.GetCurrentPoint(sender as UIElement).Position.Y; + //Calculate letter based on point position + int index = (int)Math.Floor(h / (referenceTB.ActualHeight + LettersStackPanel.Spacing)); + //Debug.WriteLine("Pointer should be in letter " + Convert.ToChar(64 + index)); + ContactsPage.CurrentInstance?.NavigateToLetter(Convert.ToChar(64 + index).ToString()); + } + } +} diff --git a/Dialer/UI/Conventers/CallHistoryEntryToCallStateGlyphString.cs b/Dialer/UI/Converters/CallHistoryEntryToCallStateGlyphString.cs similarity index 97% rename from Dialer/UI/Conventers/CallHistoryEntryToCallStateGlyphString.cs rename to Dialer/UI/Converters/CallHistoryEntryToCallStateGlyphString.cs index 4686b16..4769afd 100644 --- a/Dialer/UI/Conventers/CallHistoryEntryToCallStateGlyphString.cs +++ b/Dialer/UI/Converters/CallHistoryEntryToCallStateGlyphString.cs @@ -2,7 +2,7 @@ using Windows.ApplicationModel.Calls; using Windows.UI.Xaml.Data; -namespace Dialer.UI.Conventers +namespace Dialer.UI.Converters { public sealed class CallHistoryEntryToCallStateGlyphString : IValueConverter { diff --git a/Dialer/UI/Conventers/CallHistoryEntryToCallStateTextString.cs b/Dialer/UI/Converters/CallHistoryEntryToCallStateTextString.cs similarity index 97% rename from Dialer/UI/Conventers/CallHistoryEntryToCallStateTextString.cs rename to Dialer/UI/Converters/CallHistoryEntryToCallStateTextString.cs index d50dd6f..d13f901 100644 --- a/Dialer/UI/Conventers/CallHistoryEntryToCallStateTextString.cs +++ b/Dialer/UI/Converters/CallHistoryEntryToCallStateTextString.cs @@ -3,7 +3,7 @@ using Windows.ApplicationModel.Calls; using Windows.UI.Xaml.Data; -namespace Dialer.UI.Conventers +namespace Dialer.UI.Converters { public sealed class CallHistoryEntryToCallStateTextString : IValueConverter { diff --git a/Dialer/UI/Conventers/CallHistoryEntryToContact.cs b/Dialer/UI/Converters/CallHistoryEntryToContact.cs similarity index 96% rename from Dialer/UI/Conventers/CallHistoryEntryToContact.cs rename to Dialer/UI/Converters/CallHistoryEntryToContact.cs index 39331ba..090e613 100644 --- a/Dialer/UI/Conventers/CallHistoryEntryToContact.cs +++ b/Dialer/UI/Converters/CallHistoryEntryToContact.cs @@ -2,7 +2,7 @@ using Windows.ApplicationModel.Calls; using Windows.UI.Xaml.Data; -namespace Dialer.UI.Conventers +namespace Dialer.UI.Converters { public sealed class CallHistoryEntryToContact : IValueConverter { diff --git a/Dialer/UI/Conventers/CallHistoryEntryToLineDisplayNameText.cs b/Dialer/UI/Converters/CallHistoryEntryToLineDisplayNameText.cs similarity index 98% rename from Dialer/UI/Conventers/CallHistoryEntryToLineDisplayNameText.cs rename to Dialer/UI/Converters/CallHistoryEntryToLineDisplayNameText.cs index 2726da0..063f0dc 100644 --- a/Dialer/UI/Conventers/CallHistoryEntryToLineDisplayNameText.cs +++ b/Dialer/UI/Converters/CallHistoryEntryToLineDisplayNameText.cs @@ -6,7 +6,7 @@ using Windows.System; using Windows.UI.Xaml.Data; -namespace Dialer.UI.Conventers +namespace Dialer.UI.Converters { public sealed class CallHistoryEntryToLineDisplayNameText : IValueConverter { diff --git a/Dialer/UI/Conventers/CallHistoryEntryToLineIconBitmap.cs b/Dialer/UI/Converters/CallHistoryEntryToLineIconBitmap.cs similarity index 99% rename from Dialer/UI/Conventers/CallHistoryEntryToLineIconBitmap.cs rename to Dialer/UI/Converters/CallHistoryEntryToLineIconBitmap.cs index 4b6bba7..09cd79b 100644 --- a/Dialer/UI/Conventers/CallHistoryEntryToLineIconBitmap.cs +++ b/Dialer/UI/Converters/CallHistoryEntryToLineIconBitmap.cs @@ -10,7 +10,7 @@ using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Media.Imaging; -namespace Dialer.UI.Conventers +namespace Dialer.UI.Converters { public sealed class CallHistoryEntryToLineIconBitmap : IValueConverter { diff --git a/Dialer/UI/Conventers/CallToCallLengthTextString.cs b/Dialer/UI/Converters/CallToCallLengthTextString.cs similarity index 97% rename from Dialer/UI/Conventers/CallToCallLengthTextString.cs rename to Dialer/UI/Converters/CallToCallLengthTextString.cs index e7267a2..9fe47c4 100644 --- a/Dialer/UI/Conventers/CallToCallLengthTextString.cs +++ b/Dialer/UI/Converters/CallToCallLengthTextString.cs @@ -2,7 +2,7 @@ using System; using Windows.UI.Xaml.Data; -namespace Dialer.UI.Conventers +namespace Dialer.UI.Converters { public sealed class CallToCallLengthTextString : IValueConverter { diff --git a/Dialer/UI/Conventers/CallToCallStateGlyphString.cs b/Dialer/UI/Converters/CallToCallStateGlyphString.cs similarity index 98% rename from Dialer/UI/Conventers/CallToCallStateGlyphString.cs rename to Dialer/UI/Converters/CallToCallStateGlyphString.cs index 72fc1ad..6be1158 100644 --- a/Dialer/UI/Conventers/CallToCallStateGlyphString.cs +++ b/Dialer/UI/Converters/CallToCallStateGlyphString.cs @@ -2,7 +2,7 @@ using System; using Windows.UI.Xaml.Data; -namespace Dialer.UI.Conventers +namespace Dialer.UI.Converters { public sealed class CallToCallStateGlyphString : IValueConverter { diff --git a/Dialer/UI/Conventers/CallToCallStateTextString.cs b/Dialer/UI/Converters/CallToCallStateTextString.cs similarity index 99% rename from Dialer/UI/Conventers/CallToCallStateTextString.cs rename to Dialer/UI/Converters/CallToCallStateTextString.cs index b34cdd2..0cf7c03 100644 --- a/Dialer/UI/Conventers/CallToCallStateTextString.cs +++ b/Dialer/UI/Converters/CallToCallStateTextString.cs @@ -2,7 +2,7 @@ using System; using Windows.UI.Xaml.Data; -namespace Dialer.UI.Conventers +namespace Dialer.UI.Converters { public sealed class CallToCallStateTextString : IValueConverter { diff --git a/Dialer/UI/Conventers/Conventers.xaml b/Dialer/UI/Converters/Converters.xaml similarity index 96% rename from Dialer/UI/Conventers/Conventers.xaml rename to Dialer/UI/Converters/Converters.xaml index e3837f9..e2be3f0 100644 --- a/Dialer/UI/Conventers/Conventers.xaml +++ b/Dialer/UI/Converters/Converters.xaml @@ -1,7 +1,7 @@  + xmlns:local="using:Dialer.UI.Converters"> diff --git a/Dialer/UI/Conventers/DateTimeToString.cs b/Dialer/UI/Converters/DateTimeToString.cs similarity index 97% rename from Dialer/UI/Conventers/DateTimeToString.cs rename to Dialer/UI/Converters/DateTimeToString.cs index c4de39d..28fee35 100644 --- a/Dialer/UI/Conventers/DateTimeToString.cs +++ b/Dialer/UI/Converters/DateTimeToString.cs @@ -2,7 +2,7 @@ using System.Globalization; using Windows.UI.Xaml.Data; -namespace Dialer.UI.Conventers +namespace Dialer.UI.Converters { public sealed class DateTimeToString : IValueConverter { diff --git a/Dialer/UI/Conventers/PageNameToGlyphString.cs b/Dialer/UI/Converters/PageNameToGlyphString.cs similarity index 98% rename from Dialer/UI/Conventers/PageNameToGlyphString.cs rename to Dialer/UI/Converters/PageNameToGlyphString.cs index 1edb158..88fec18 100644 --- a/Dialer/UI/Conventers/PageNameToGlyphString.cs +++ b/Dialer/UI/Converters/PageNameToGlyphString.cs @@ -2,7 +2,7 @@ using System; using Windows.UI.Xaml.Data; -namespace Dialer.UI.Conventers +namespace Dialer.UI.Converters { public sealed class PageNameToGlyphString : IValueConverter { diff --git a/Dialer/UI/Conventers/PageNameToTextString.cs b/Dialer/UI/Converters/PageNameToTextString.cs similarity index 95% rename from Dialer/UI/Conventers/PageNameToTextString.cs rename to Dialer/UI/Converters/PageNameToTextString.cs index 4c87f44..61a2b6a 100644 --- a/Dialer/UI/Conventers/PageNameToTextString.cs +++ b/Dialer/UI/Converters/PageNameToTextString.cs @@ -1,7 +1,7 @@ using System; using Windows.UI.Xaml.Data; -namespace Dialer.UI.Conventers +namespace Dialer.UI.Converters { public sealed class PageNameToTextString : IValueConverter { diff --git a/Dialer/UI/Conventers/PhoneLineToDisplayNameText.cs b/Dialer/UI/Converters/PhoneLineToDisplayNameText.cs similarity index 96% rename from Dialer/UI/Conventers/PhoneLineToDisplayNameText.cs rename to Dialer/UI/Converters/PhoneLineToDisplayNameText.cs index d26c325..5265265 100644 --- a/Dialer/UI/Conventers/PhoneLineToDisplayNameText.cs +++ b/Dialer/UI/Converters/PhoneLineToDisplayNameText.cs @@ -2,7 +2,7 @@ using Windows.ApplicationModel.Calls; using Windows.UI.Xaml.Data; -namespace Dialer.UI.Conventers +namespace Dialer.UI.Converters { public sealed class PhoneLineToDisplayNameText : IValueConverter { diff --git a/Dialer/UI/Glyphs.cs b/Dialer/UI/Glyphs.cs index 758233f..8bd9eef 100644 --- a/Dialer/UI/Glyphs.cs +++ b/Dialer/UI/Glyphs.cs @@ -20,11 +20,11 @@ public static class Glyphs public const string CALL_PAGE_CONTACTS = "\uE1D4"; public const string CALL_PAGE_INCALL = "\uE80B"; - public const string CALL_SETTINGS_APPS = "\uF1A3"; + public const string CALL_SETTINGS_APPS = "\uE74C"; public const string CALL_SETTINGS_NOTIFICATIONS = "\uEA8F"; public const string CALL_SETTINGS_PERSONALIZATION = "\uE771"; public const string CALL_SETTINGS_LINES = "\uEC05"; - public const string CALL_SETTINGS_SOUND = "\uE940"; + public const string CALL_SETTINGS_SOUND = "\uE15D"; public const string CALL_SETTINGS_ABOUT = "\uE946"; public const string CALL_INCALL_TALKING = "\uE13A"; diff --git a/Dialer/UI/Pages/CallUIPage.xaml b/Dialer/UI/Pages/CallUIPage.xaml index b875134..9258af7 100644 --- a/Dialer/UI/Pages/CallUIPage.xaml +++ b/Dialer/UI/Pages/CallUIPage.xaml @@ -11,7 +11,7 @@ mc:Ignorable="d"> - + diff --git a/Dialer/UI/Pages/ContactsPage.xaml b/Dialer/UI/Pages/ContactsPage.xaml index 31761b9..034ef47 100644 --- a/Dialer/UI/Pages/ContactsPage.xaml +++ b/Dialer/UI/Pages/ContactsPage.xaml @@ -4,11 +4,41 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:Dialer.UI.Pages" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" - xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:controls="using:Dialer.UI.Controls" mc:Ignorable="d" NavigationCacheMode="Required"> - + + + + + + + + + + + + + + + + + + + + + A + + + + + + Loading contact list... + + + diff --git a/Dialer/UI/Pages/ContactsPage.xaml.cs b/Dialer/UI/Pages/ContactsPage.xaml.cs index 73da3c2..cae28e9 100644 --- a/Dialer/UI/Pages/ContactsPage.xaml.cs +++ b/Dialer/UI/Pages/ContactsPage.xaml.cs @@ -1,17 +1,113 @@ -using Windows.UI.Xaml.Controls; - -// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238 +using Dialer.Systems; +using Dialer.UI.Controls; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Diagnostics; +using System.Linq; +using System.Threading.Tasks; +using System.Timers; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Navigation; namespace Dialer.UI.Pages { - /// - /// An empty page that can be used on its own or navigated to within a Frame. - /// public sealed partial class ContactsPage : Page { + private Timer _hideHintTimer; + private ObservableCollection _contactControls; + + public static ContactsPage CurrentInstance; + public ContactsPage() { - this.InitializeComponent(); + InitializeComponent(); + + _contactControls = new ObservableCollection(); + CurrentInstance = this; + } + + protected override void OnNavigatedTo(NavigationEventArgs e) + { + base.OnNavigatedTo(e); + SizeChanged += ContactsPage_SizeChanged; + + LoadingGrid.Visibility = Windows.UI.Xaml.Visibility.Visible; + + Task.Run(() => + { + Aaa(); + }); //TODO: This still hangs the UI in some cases 🥲 + } + + private void Aaa() + { + if (ContactSystem.ContactControls == null) + { + ContactSystem.ContactsLoaded += (object sender, EventArgs e) => LoadDataCompleted(); + } + else LoadDataCompleted(); + } + + private async void LoadDataCompleted() + { + await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, () => + { + ContactsItemsControl.ItemsSource = null; + _contactControls = ContactSystem.ContactControls; + ContactsItemsControl.ItemsSource = _contactControls; + LoadingGrid.Visibility = Windows.UI.Xaml.Visibility.Collapsed; + }); + } + + private void ContactsPage_SizeChanged(object sender, Windows.UI.Xaml.SizeChangedEventArgs e) + { + viScrollbar.FixSpacing(); + } + + public void NavigateToLetter(string letter) + { + ScrollLetterHint.Text = letter; + if(ScrollLetterGrid.Visibility == Windows.UI.Xaml.Visibility.Collapsed) ScrollLetterHintShow.Begin(); + ScrollLetterGrid.Visibility = Windows.UI.Xaml.Visibility.Visible; + if (_hideHintTimer != null) + { + _hideHintTimer.Stop(); + _hideHintTimer.Dispose(); + } + _hideHintTimer = new Timer(1000); + _hideHintTimer.Elapsed += async (object sender, ElapsedEventArgs e) => + { + await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, () => + { + ScrollLetterHintHide.Begin(); + ScrollLetterHintHide.Completed += async (object sender, object e) => + { + await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, () => + { + ScrollLetterGrid.Visibility = Windows.UI.Xaml.Visibility.Collapsed; + }); + }; + }); + }; + + IEnumerable ContactsWithLetter = from contact in _contactControls where contact.ContactName.ToUpper().StartsWith(letter) select contact; + + try + { + ContactsWithLetter.First().StartBringIntoView(); + } catch { + //TODO: Fix for missing letter -> move to previous/next letter + } + + _hideHintTimer.Start(); + + Debug.WriteLine("Got request to navigate to letter " + letter); + } + + public void RemoveContactControl(ContactControl cc) + { + _contactControls.Remove(cc); } } } diff --git a/Dialer/UI/Pages/DialPage.xaml b/Dialer/UI/Pages/DialPage.xaml index 69a9f78..fe35b44 100644 --- a/Dialer/UI/Pages/DialPage.xaml +++ b/Dialer/UI/Pages/DialPage.xaml @@ -14,7 +14,7 @@ KeyUp="Page_KeyUp"> - + diff --git a/Dialer/UI/Pages/MainPage.xaml b/Dialer/UI/Pages/MainPage.xaml index ad86cf1..0474e68 100644 --- a/Dialer/UI/Pages/MainPage.xaml +++ b/Dialer/UI/Pages/MainPage.xaml @@ -13,7 +13,7 @@ Unloaded="Page_Unloaded"> - + diff --git a/Dialer/UI/Pages/SettingsPage.xaml b/Dialer/UI/Pages/SettingsPage.xaml index f65fe68..2d6356c 100644 --- a/Dialer/UI/Pages/SettingsPage.xaml +++ b/Dialer/UI/Pages/SettingsPage.xaml @@ -9,7 +9,7 @@ mc:Ignorable="d"> - +