@@ -26,7 +26,8 @@ namespace Signal_Windows.ViewModels
26
26
public class AddContactPageViewModel : ViewModelBase
27
27
{
28
28
public ObservableCollection < PhoneContact > Contacts ;
29
- private List < PhoneContact > contactList ;
29
+ private List < PhoneContact > signalContacts ;
30
+ private List < PhoneContact > otherContacts ;
30
31
private PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil . GetInstance ( ) ;
31
32
32
33
private string _ContactName = "" ;
@@ -46,13 +47,15 @@ public string ContactNumber
46
47
public AddContactPageViewModel ( )
47
48
{
48
49
Contacts = new ObservableCollection < PhoneContact > ( ) ;
49
- contactList = new List < PhoneContact > ( ) ;
50
+ signalContacts = new List < PhoneContact > ( ) ;
51
+ otherContacts = new List < PhoneContact > ( ) ;
50
52
}
51
53
52
54
public async Task OnNavigatedTo ( )
53
55
{
54
56
SignalServiceAccountManager accountManager = new SignalServiceAccountManager ( App . ServiceUrls , App . Store . Username , App . Store . Password , ( int ) App . Store . DeviceId , App . USER_AGENT ) ;
55
57
ContactStore contactStore = await ContactManager . RequestStoreAsync ( ContactStoreAccessType . AllContactsReadOnly ) ;
58
+ List < PhoneContact > intermediateContacts = new List < PhoneContact > ( ) ;
56
59
if ( contactStore != null )
57
60
{
58
61
HashSet < string > seenNumbers = new HashSet < string > ( ) ;
@@ -92,22 +95,28 @@ public async Task OnNavigatedTo()
92
95
phoneContact . Photo = bitmapImage ;
93
96
}
94
97
}
95
- contactList . Add ( phoneContact ) ;
98
+ intermediateContacts . Add ( phoneContact ) ;
96
99
}
97
100
}
98
101
}
99
102
}
100
103
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 )
103
106
{
104
107
var foundContact = signalContactDetails . FirstOrDefault ( c => c . getNumber ( ) == contact . PhoneNumber ) ;
105
108
if ( foundContact != null )
106
109
{
107
110
contact . OnSignal = true ;
111
+ signalContacts . Add ( contact ) ;
112
+ }
113
+ else
114
+ {
115
+ otherContacts . Add ( contact ) ;
108
116
}
109
- Contacts . Add ( contact ) ;
110
117
}
118
+ Contacts . AddRange ( signalContacts ) ;
119
+ Contacts . AddRange ( otherContacts ) ;
111
120
}
112
121
else
113
122
{
@@ -173,17 +182,20 @@ internal void searchBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextCha
173
182
if ( args . Reason == AutoSuggestionBoxTextChangeReason . UserInput )
174
183
{
175
184
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 ) ) ;
179
187
Contacts . Clear ( ) ;
180
- foreach ( var contact in validContacts )
181
- {
182
- Contacts . Add ( contact ) ;
183
- }
188
+ Contacts . AddRange ( validContacts ) ;
184
189
}
185
190
}
186
191
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
+
187
199
internal void ContactNameTextBox_TextChanged ( object sender , TextChangedEventArgs e )
188
200
{
189
201
TextBox textBox = sender as TextBox ;
0 commit comments