Privacy: Do not try to scan local contacts in background when the user has not decided yet to use or not an identity server.

But try to scan when the user opens a screen with a list of contacts
This commit is contained in:
manuroe 2019-10-10 15:05:39 +02:00
parent 2ccd86722a
commit b1df00fd3e
3 changed files with 33 additions and 8 deletions

View file

@ -701,9 +701,6 @@ NSString *const AppDelegateDidValidateEmailNotificationClientSecretKey = @"AppDe
[account resume];
}
// Refresh local contact from the contact book.
[self refreshLocalContacts];
_isAppForeground = YES;
if (@available(iOS 11.0, *))
@ -3015,6 +3012,14 @@ NSString *const AppDelegateDidValidateEmailNotificationClientSecretKey = @"AppDe
// during this blocking task.
dispatch_after(dispatch_walltime(DISPATCH_TIME_NOW, 0.3 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[[MXKContactManager sharedManager] addMatrixSession:mxSession];
// Load the local contacts on first account
if ([MXKAccountManager sharedManager].accounts.count == 1)
{
dispatch_async(dispatch_get_main_queue(), ^{
[self refreshLocalContacts];
});
}
});
// Update home data sources
@ -3912,8 +3917,21 @@ NSString *const AppDelegateDidValidateEmailNotificationClientSecretKey = @"AppDe
- (void)refreshLocalContacts
{
// Do not scan local contacts in background if the user has not decided yet about using
// an identity server
BOOL doRefreshLocalContacts = NO;
for (MXSession *session in mxSessionArray)
{
if (session.hasAccountDataIdentityServerValue)
{
doRefreshLocalContacts = YES;
break;
}
}
// Check whether the application is allowed to access the local contacts.
if ([CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts] == CNAuthorizationStatusAuthorized)
if (doRefreshLocalContacts
&& [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts] == CNAuthorizationStatusAuthorized)
{
// Check the user permission for syncing local contacts. This permission was handled independently on previous application version.
if (![MXKAppSettings standardAppSettings].syncLocalContacts)

View file

@ -149,8 +149,10 @@
// Screen tracking
[[Analytics sharedInstance] trackScreen:_screenName];
// Check whether the access to the local contacts has not been already asked.
if ([CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts] == CNAuthorizationStatusNotDetermined)
// Check whether the access to the local contacts has not been already asked
// and check that the user has decided to use or not to use an identity server
if ([CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts] == CNAuthorizationStatusNotDetermined
|| !contactsDataSource.mxSession.hasAccountDataIdentityServerValue)
{
// Allow by default the local contacts sync in order to discover matrix users.
// This setting change will trigger the loading of the local contacts, which will automatically

View file

@ -99,8 +99,10 @@
{
[super viewWillAppear:animated];
// Check whether the access to the local contacts has not been already asked.
if ([CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts] == CNAuthorizationStatusNotDetermined)
// Check whether the access to the local contacts has not been already asked
// and check that the user has decided to use or not to use an identity server
if ([CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts] == CNAuthorizationStatusNotDetermined
|| !contactsDataSource.mxSession.hasAccountDataIdentityServerValue)
{
// Allow by default the local contacts sync in order to discover matrix users.
// This setting change will trigger the loading of the local contacts, which will automatically
@ -108,6 +110,9 @@
[MXKAppSettings standardAppSettings].syncLocalContacts = YES;
}
// Refresh the local contacts list.
[[MXKContactManager sharedManager] refreshLocalContacts];
[AppDelegate theDelegate].masterTabBarController.navigationItem.title = NSLocalizedStringFromTable(@"title_people", @"Vector", nil);
[AppDelegate theDelegate].masterTabBarController.tabBar.tintColor = ThemeService.shared.riotColorOrange;