Skip to content

Commit ac0b8ae

Browse files
committed
Make sure Signal contacts are at top of list
1 parent abcf07c commit ac0b8ae

File tree

2 files changed

+33
-13
lines changed

2 files changed

+33
-13
lines changed

Signal-Windows/Utils.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,14 @@ public static SolidColorBrush GetBrushFromColor(string signalcolor)
8686
}
8787
}
8888

89+
public static void AddRange<T>(this ObservableCollection<T> observableCollection, IEnumerable<T> collection)
90+
{
91+
foreach (var item in collection)
92+
{
93+
observableCollection.Add(item);
94+
}
95+
}
96+
8997
public static T FindParent<T>(FrameworkElement reference)
9098
where T : FrameworkElement
9199
{

Signal-Windows/ViewModels/AddContactPageViewModel.cs

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ namespace Signal_Windows.ViewModels
2626
public class AddContactPageViewModel : ViewModelBase
2727
{
2828
public ObservableCollection<PhoneContact> Contacts;
29-
private List<PhoneContact> contactList;
29+
private List<PhoneContact> signalContacts;
30+
private List<PhoneContact> otherContacts;
3031
private PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.GetInstance();
3132

3233
private string _ContactName = "";
@@ -46,13 +47,15 @@ public string ContactNumber
4647
public AddContactPageViewModel()
4748
{
4849
Contacts = new ObservableCollection<PhoneContact>();
49-
contactList = new List<PhoneContact>();
50+
signalContacts = new List<PhoneContact>();
51+
otherContacts = new List<PhoneContact>();
5052
}
5153

5254
public async Task OnNavigatedTo()
5355
{
5456
SignalServiceAccountManager accountManager = new SignalServiceAccountManager(App.ServiceUrls, App.Store.Username, App.Store.Password, (int)App.Store.DeviceId, App.USER_AGENT);
5557
ContactStore contactStore = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AllContactsReadOnly);
58+
List<PhoneContact> intermediateContacts = new List<PhoneContact>();
5659
if (contactStore != null)
5760
{
5861
HashSet<string> seenNumbers = new HashSet<string>();
@@ -92,22 +95,28 @@ public async Task OnNavigatedTo()
9295
phoneContact.Photo = bitmapImage;
9396
}
9497
}
95-
contactList.Add(phoneContact);
98+
intermediateContacts.Add(phoneContact);
9699
}
97100
}
98101
}
99102
}
100103

101-
var signalContactDetails = accountManager.getContacts(contactList.Select(c => c.PhoneNumber).ToList());
102-
foreach (var contact in contactList)
104+
var signalContactDetails = accountManager.getContacts(intermediateContacts.Select(c => c.PhoneNumber).ToList());
105+
foreach (var contact in intermediateContacts)
103106
{
104107
var foundContact = signalContactDetails.FirstOrDefault(c => c.getNumber() == contact.PhoneNumber);
105108
if (foundContact != null)
106109
{
107110
contact.OnSignal = true;
111+
signalContacts.Add(contact);
112+
}
113+
else
114+
{
115+
otherContacts.Add(contact);
108116
}
109-
Contacts.Add(contact);
110117
}
118+
Contacts.AddRange(signalContacts);
119+
Contacts.AddRange(otherContacts);
111120
}
112121
else
113122
{
@@ -173,17 +182,20 @@ internal void searchBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextCha
173182
if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput)
174183
{
175184
string text = sender.Text;
176-
var validContacts = contactList.Where(
177-
c => c.Name.ContainsCaseInsensitive(text) ||
178-
c.PhoneNumber.ContainsCaseInsensitive(text));
185+
var validContacts = GetContactsMatchingText(text, signalContacts).ToList();
186+
validContacts.AddRange(GetContactsMatchingText(text, otherContacts));
179187
Contacts.Clear();
180-
foreach (var contact in validContacts)
181-
{
182-
Contacts.Add(contact);
183-
}
188+
Contacts.AddRange(validContacts);
184189
}
185190
}
186191

192+
private IEnumerable<PhoneContact> GetContactsMatchingText(string text, List<PhoneContact> contacts)
193+
{
194+
return contacts.Where(
195+
c => c.Name.ContainsCaseInsensitive(text) ||
196+
c.PhoneNumber.ContainsCaseInsensitive(text));
197+
}
198+
187199
internal void ContactNameTextBox_TextChanged(object sender, TextChangedEventArgs e)
188200
{
189201
TextBox textBox = sender as TextBox;

0 commit comments

Comments
 (0)