Fixed crash if contact permission isn't granted + auto fetch if granted while in contacts fragment
This commit is contained in:
parent
f110e817d5
commit
9e076971a0
7 changed files with 44 additions and 19 deletions
|
@ -408,7 +408,6 @@ public class LinphoneActivity extends LinphoneGenericActivity
|
|||
mFragment = new HistoryDetailFragment();
|
||||
break;
|
||||
case CONTACTS_LIST:
|
||||
checkAndRequestWriteContactsPermission();
|
||||
mFragment = new ContactsFragment();
|
||||
break;
|
||||
case CONTACT_DETAIL:
|
||||
|
@ -439,7 +438,6 @@ public class LinphoneActivity extends LinphoneGenericActivity
|
|||
mFragment = new ChatRoomsFragment();
|
||||
break;
|
||||
case CREATE_CHAT:
|
||||
checkAndRequestWriteContactsPermission();
|
||||
mFragment = new ChatRoomCreationFragment();
|
||||
break;
|
||||
case INFO_GROUP_CHAT:
|
||||
|
@ -1176,12 +1174,12 @@ public class LinphoneActivity extends LinphoneGenericActivity
|
|||
checkAndRequestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, 0);
|
||||
}
|
||||
|
||||
public void checkAndRequestCameraPermission() {
|
||||
checkAndRequestPermission(Manifest.permission.CAMERA, 0);
|
||||
public void checkAndRequestReadContactsPermission() {
|
||||
checkAndRequestPermission(Manifest.permission.READ_CONTACTS, PERMISSIONS_REQUEST_SYNC);
|
||||
}
|
||||
|
||||
private void checkAndRequestWriteContactsPermission() {
|
||||
checkAndRequestPermission(Manifest.permission.WRITE_CONTACTS, 0);
|
||||
public void checkAndRequestCameraPermission() {
|
||||
checkAndRequestPermission(Manifest.permission.CAMERA, 0);
|
||||
}
|
||||
|
||||
public void checkAndRequestRecordAudioPermissionForEchoCanceller() {
|
||||
|
|
|
@ -251,7 +251,7 @@ public final class LinphoneService extends Service {
|
|||
|
||||
if (!Version.sdkAboveOrEqual(Version.API26_O_80)
|
||||
|| (ContactsManager.getInstance() != null
|
||||
&& ContactsManager.getInstance().hasContactsAccess())) {
|
||||
&& ContactsManager.getInstance().hasReadContactsAccess())) {
|
||||
getContentResolver()
|
||||
.registerContentObserver(
|
||||
ContactsContract.Contacts.CONTENT_URI,
|
||||
|
|
|
@ -79,7 +79,7 @@ class AndroidContact implements Serializable {
|
|||
}
|
||||
|
||||
protected void saveChangesCommited() {
|
||||
if (ContactsManager.getInstance().hasContactsAccess() && mChangesToCommit.size() > 0) {
|
||||
if (ContactsManager.getInstance().hasReadContactsAccess() && mChangesToCommit.size() > 0) {
|
||||
try {
|
||||
ContentResolver contentResolver = LinphoneService.instance().getContentResolver();
|
||||
ContentProviderResult[] results =
|
||||
|
|
|
@ -112,7 +112,7 @@ public class ContactEditorFragment extends Fragment {
|
|||
|
||||
mPhoneNumbersSection = mView.findViewById(R.id.phone_numbers);
|
||||
if (getResources().getBoolean(R.bool.hide_phone_numbers_in_editor)
|
||||
|| !ContactsManager.getInstance().hasContactsAccess()) {
|
||||
|| !ContactsManager.getInstance().hasReadContactsAccess()) {
|
||||
// Currently linphone friends don't support phone mNumbers, so hide them
|
||||
mPhoneNumbersSection.setVisibility(View.GONE);
|
||||
}
|
||||
|
|
|
@ -162,7 +162,11 @@ public class ContactsFragment extends Fragment
|
|||
mNewContact.setEnabled(LinphoneManager.getLc().getCallsNb() == 0);
|
||||
|
||||
if (!ContactsManager.getInstance().contactsFetchedOnce()) {
|
||||
if (ContactsManager.getInstance().hasReadContactsAccess()) {
|
||||
mContactsFetchInProgress.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
LinphoneActivity.instance().checkAndRequestReadContactsPermission();
|
||||
}
|
||||
} else {
|
||||
if (!mOnlyDisplayLinphoneContacts
|
||||
&& ContactsManager.getInstance().getContacts().size() == 0) {
|
||||
|
|
|
@ -135,6 +135,10 @@ public class ContactsManager extends ContentObserver implements FriendListListen
|
|||
if (mLoadContactTask != null) {
|
||||
mLoadContactTask.cancel(true);
|
||||
}
|
||||
if (!hasReadContactsAccess()) {
|
||||
Log.w("[Contacts Manager] Can't fetch contact without READ permission");
|
||||
return;
|
||||
}
|
||||
mLoadContactTask = new AsyncContactsLoader(mContext);
|
||||
mContactsFetchedOnce = true;
|
||||
mLoadContactTask.executeOnExecutor(THREAD_POOL_EXECUTOR);
|
||||
|
@ -224,7 +228,7 @@ public class ContactsManager extends ContentObserver implements FriendListListen
|
|||
LinphonePreferences.instance().disableFriendsStorage();
|
||||
}
|
||||
|
||||
public boolean hasContactsAccess() {
|
||||
public boolean hasReadContactsAccess() {
|
||||
if (mContext == null) {
|
||||
return false;
|
||||
}
|
||||
|
@ -238,6 +242,27 @@ public class ContactsManager extends ContentObserver implements FriendListListen
|
|||
&& !mContext.getResources().getBoolean(R.bool.force_use_of_linphone_friends);
|
||||
}
|
||||
|
||||
public boolean hasWriteContactsAccess() {
|
||||
if (mContext == null) {
|
||||
return false;
|
||||
}
|
||||
return (PackageManager.PERMISSION_GRANTED
|
||||
== mContext.getPackageManager()
|
||||
.checkPermission(
|
||||
Manifest.permission.WRITE_CONTACTS, mContext.getPackageName()));
|
||||
}
|
||||
|
||||
public boolean hasWriteSyncPermission() {
|
||||
if (mContext == null) {
|
||||
return false;
|
||||
}
|
||||
return (PackageManager.PERMISSION_GRANTED
|
||||
== mContext.getPackageManager()
|
||||
.checkPermission(
|
||||
Manifest.permission.WRITE_SYNC_SETTINGS,
|
||||
mContext.getPackageName()));
|
||||
}
|
||||
|
||||
public boolean isLinphoneContactsPrefered() {
|
||||
ProxyConfig lpc = LinphoneManager.getLc().getDefaultProxyConfig();
|
||||
return lpc != null
|
||||
|
@ -251,11 +276,9 @@ public class ContactsManager extends ContentObserver implements FriendListListen
|
|||
|
||||
if (!mInitialized) {
|
||||
if (mContext.getResources().getBoolean(R.bool.use_linphone_tag)) {
|
||||
if (mContext.getPackageManager()
|
||||
.checkPermission(
|
||||
Manifest.permission.WRITE_SYNC_SETTINGS,
|
||||
mContext.getPackageName())
|
||||
== PackageManager.PERMISSION_GRANTED) {
|
||||
if (hasReadContactsAccess()
|
||||
&& hasWriteContactsAccess()
|
||||
&& hasWriteSyncPermission()) {
|
||||
if (LinphoneService.isReady()) {
|
||||
ContactsManager.getInstance().initializeSyncAccount();
|
||||
mInitialized = true;
|
||||
|
@ -264,7 +287,7 @@ public class ContactsManager extends ContentObserver implements FriendListListen
|
|||
}
|
||||
}
|
||||
|
||||
if (mContext != null && getContacts().size() == 0 && hasContactsAccess()) {
|
||||
if (mContext != null && getContacts().size() == 0 && hasReadContactsAccess()) {
|
||||
fetchContactsAsync();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,7 +61,7 @@ public class LinphoneContact extends AndroidContact
|
|||
|
||||
public static LinphoneContact createContact() {
|
||||
LinphoneContact contact = new LinphoneContact();
|
||||
if (ContactsManager.getInstance().hasContactsAccess()) {
|
||||
if (ContactsManager.getInstance().hasReadContactsAccess()) {
|
||||
contact.createAndroidContact();
|
||||
} else {
|
||||
contact.createFriend();
|
||||
|
@ -364,7 +364,7 @@ public class LinphoneContact extends AndroidContact
|
|||
lc.addFriend(mFriend);
|
||||
}
|
||||
|
||||
if (!ContactsManager.getInstance().hasContactsAccess()) {
|
||||
if (!ContactsManager.getInstance().hasReadContactsAccess()) {
|
||||
// This refresh is only needed if app has no contacts permission to refresh the list of
|
||||
// Friends.
|
||||
// Otherwise contacts will be refreshed due to changes in native contact and the handler
|
||||
|
|
Loading…
Reference in a new issue