Fixed freeze/crash when denying permanently contacts permission

This commit is contained in:
Sylvain Berfini 2016-06-07 16:57:11 +02:00
parent b940ef0ee5
commit 21fc891fef
2 changed files with 17 additions and 23 deletions

View file

@ -83,6 +83,8 @@ public class ContactsManager extends ContentObserver {
private ContactsManager(Handler handler) { private ContactsManager(Handler handler) {
super(handler); super(handler);
contactsUpdatedListeners = new ArrayList<ContactsUpdatedListener>(); contactsUpdatedListeners = new ArrayList<ContactsUpdatedListener>();
contacts = new ArrayList<LinphoneContact>();
sipContacts = new ArrayList<LinphoneContact>();
} }
@Override @Override

View file

@ -1149,43 +1149,35 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
if (LinphonePreferences.instance().writeExternalStoragePermAsked()) { if (LinphonePreferences.instance().writeExternalStoragePermAsked()) {
return; return;
} }
if (getPackageManager().checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, getPackageName()) != PackageManager.PERMISSION_GRANTED) {
checkAndRequestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, PERMISSIONS_REQUEST_EXTERNAL_FILE_STORAGE); checkAndRequestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, PERMISSIONS_REQUEST_EXTERNAL_FILE_STORAGE);
} }
}
public void checkAndRequestCameraPermission() { public void checkAndRequestCameraPermission() {
if (LinphonePreferences.instance().cameraPermAsked()) { if (LinphonePreferences.instance().cameraPermAsked()) {
return; return;
} }
if (getPackageManager().checkPermission(Manifest.permission.CAMERA, getPackageName()) != PackageManager.PERMISSION_GRANTED) {
checkAndRequestPermission(Manifest.permission.CAMERA, PERMISSIONS_REQUEST_CAMERA); checkAndRequestPermission(Manifest.permission.CAMERA, PERMISSIONS_REQUEST_CAMERA);
} }
}
public void checkAndRequestReadContactsPermission() { public void checkAndRequestReadContactsPermission() {
if (LinphonePreferences.instance().readContactsPermAsked()) { if (LinphonePreferences.instance().readContactsPermAsked()) {
return; return;
} }
if (getPackageManager().checkPermission(Manifest.permission.READ_CONTACTS, getPackageName()) != PackageManager.PERMISSION_GRANTED) {
checkAndRequestPermission(Manifest.permission.READ_CONTACTS, PERMISSIONS_REQUEST_CONTACTS); checkAndRequestPermission(Manifest.permission.READ_CONTACTS, PERMISSIONS_REQUEST_CONTACTS);
} }
}
public void checkAndRequestWriteContactsPermission() { public void checkAndRequestWriteContactsPermission() {
if (LinphonePreferences.instance().writeContactsPermAsked()) { if (LinphonePreferences.instance().writeContactsPermAsked()) {
return; return;
} }
if (getPackageManager().checkPermission(Manifest.permission.WRITE_CONTACTS, getPackageName()) != PackageManager.PERMISSION_GRANTED) {
checkAndRequestPermission(Manifest.permission.WRITE_CONTACTS, PERMISSIONS_REQUEST_CONTACTS); checkAndRequestPermission(Manifest.permission.WRITE_CONTACTS, PERMISSIONS_REQUEST_CONTACTS);
} }
}
public void checkAndRequestAudioPermission(boolean isIncomingCall) { public void checkAndRequestAudioPermission(boolean isIncomingCall) {
if (LinphonePreferences.instance().audioPermAsked()) { if (LinphonePreferences.instance().audioPermAsked()) {
return; return;
} }
ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.RECORD_AUDIO }, isIncomingCall ? PERMISSIONS_REQUEST_RECORD_AUDIO_INCOMING_CALL : PERMISSIONS_REQUEST_RECORD_AUDIO); checkAndRequestPermission(Manifest.permission.RECORD_AUDIO, isIncomingCall ? PERMISSIONS_REQUEST_RECORD_AUDIO_INCOMING_CALL : PERMISSIONS_REQUEST_RECORD_AUDIO);
if (LinphonePreferences.instance().shouldInitiateVideoCall() || if (LinphonePreferences.instance().shouldInitiateVideoCall() ||
LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) { LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) {
checkAndRequestCameraPermission(); checkAndRequestCameraPermission();
@ -1204,30 +1196,30 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
for (int i = 0; i < grantResults.length; i++) { for (int i = 0; i < grantResults.length; i++) {
if (grantResults[i] == PackageManager.PERMISSION_DENIED) { if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
if (!ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[i])) { if (!ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[i])) {
if (permissions[i] == Manifest.permission.RECORD_AUDIO) { if (permissions[i].equals(Manifest.permission.RECORD_AUDIO)) {
LinphonePreferences.instance().neverAskAudioPerm(); LinphonePreferences.instance().neverAskAudioPerm();
} else if (permissions[i] == Manifest.permission.CAMERA) { } else if (permissions[i].equals(Manifest.permission.CAMERA)) {
LinphonePreferences.instance().neverAskCameraPerm(); LinphonePreferences.instance().neverAskCameraPerm();
} else if (permissions[i] == Manifest.permission.READ_CONTACTS) { } else if (permissions[i].equals(Manifest.permission.READ_CONTACTS)) {
LinphonePreferences.instance().neverAskReadContactsPerm(); LinphonePreferences.instance().neverAskReadContactsPerm();
} else if (permissions[i] == Manifest.permission.WRITE_CONTACTS) { } else if (permissions[i].equals(Manifest.permission.WRITE_CONTACTS)) {
LinphonePreferences.instance().neverAskWriteContactsPerm(); LinphonePreferences.instance().neverAskWriteContactsPerm();
} else if (permissions[i] == Manifest.permission.WRITE_EXTERNAL_STORAGE) { } else if (permissions[i].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
LinphonePreferences.instance().neverAskWriteExternalStoragePerm(); LinphonePreferences.instance().neverAskWriteExternalStoragePerm();
} }
} else { } else {
//TODO: show dialog explaining what we need the permission for //TODO: show dialog explaining what we need the permission for
} }
} else { } else {
if (permissions[i] == Manifest.permission.RECORD_AUDIO) { if (permissions[i].equals(Manifest.permission.RECORD_AUDIO)) {
LinphonePreferences.instance().neverAskAudioPerm(); LinphonePreferences.instance().neverAskAudioPerm();
} else if (permissions[i] == Manifest.permission.CAMERA) { } else if (permissions[i].equals(Manifest.permission.CAMERA)) {
LinphonePreferences.instance().neverAskCameraPerm(); LinphonePreferences.instance().neverAskCameraPerm();
} else if (permissions[i] == Manifest.permission.READ_CONTACTS) { } else if (permissions[i].equals(Manifest.permission.READ_CONTACTS)) {
LinphonePreferences.instance().neverAskReadContactsPerm(); LinphonePreferences.instance().neverAskReadContactsPerm();
} else if (permissions[i] == Manifest.permission.WRITE_CONTACTS) { } else if (permissions[i].equals(Manifest.permission.WRITE_CONTACTS)) {
LinphonePreferences.instance().neverAskWriteContactsPerm(); LinphonePreferences.instance().neverAskWriteContactsPerm();
} else if (permissions[i] == Manifest.permission.WRITE_EXTERNAL_STORAGE) { } else if (permissions[i].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
LinphonePreferences.instance().neverAskWriteExternalStoragePerm(); LinphonePreferences.instance().neverAskWriteExternalStoragePerm();
} }
} }