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">
-
+