diff --git a/src/org/linphone/CallOutgoingActivity.java b/src/org/linphone/CallOutgoingActivity.java index 2b9d1715f..4e890e39e 100644 --- a/src/org/linphone/CallOutgoingActivity.java +++ b/src/org/linphone/CallOutgoingActivity.java @@ -24,7 +24,6 @@ import java.util.List; import org.linphone.core.LinphoneAddress; import org.linphone.core.LinphoneCall; import org.linphone.core.LinphoneCall.State; -import org.linphone.core.LinphoneCallParams; import org.linphone.core.LinphoneCore; import org.linphone.core.LinphoneCoreListenerBase; import org.linphone.core.Reason; diff --git a/src/org/linphone/LinphoneActivity.java b/src/org/linphone/LinphoneActivity.java index 0da686b64..415c0708a 100644 --- a/src/org/linphone/LinphoneActivity.java +++ b/src/org/linphone/LinphoneActivity.java @@ -1140,6 +1140,10 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta return true; } + public void checkAndRequestReadPhoneStatePermission() { + checkAndRequestPermission(Manifest.permission.READ_PHONE_STATE, 0); + } + public void checkAndRequestReadExternalStoragePermission() { checkAndRequestPermission(Manifest.permission.READ_EXTERNAL_STORAGE, 0); } @@ -1237,6 +1241,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { ContactsManager.getInstance().enableContactsAccess(); } + checkAndRequestReadPhoneStatePermission(); ContactsManager.getInstance().fetchContactsAsync(); fetchedContactsOnce = true; break; @@ -1264,15 +1269,26 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta int contacts = getPackageManager().checkPermission(Manifest.permission.READ_CONTACTS, getPackageName()); Log.i("[Permission] Contacts permission is " + (contacts == PackageManager.PERMISSION_GRANTED ? "granted" : "denied")); - if (contacts == PackageManager.PERMISSION_GRANTED && !fetchedContactsOnce) { - ContactsManager.getInstance().enableContactsAccess(); - ContactsManager.getInstance().fetchContactsAsync(); - fetchedContactsOnce = true; - } else if (contacts != PackageManager.PERMISSION_GRANTED && !willContactsPermissionBeAsked()) { - ContactsManager.getInstance().fetchContactsAsync(); - fetchedContactsOnce = true; + int readPhone = getPackageManager().checkPermission(Manifest.permission.READ_PHONE_STATE, getPackageName()); + Log.i("[Permission] Read phone state permission is " + (readPhone == PackageManager.PERMISSION_GRANTED ? "granted" : "denied")); + + if (contacts == PackageManager.PERMISSION_GRANTED) { + if (readPhone == PackageManager.PERMISSION_DENIED) { + checkAndRequestReadPhoneStatePermission(); + } + if (!fetchedContactsOnce) { + ContactsManager.getInstance().enableContactsAccess(); + ContactsManager.getInstance().fetchContactsAsync(); + fetchedContactsOnce = true; + } } else { - checkAndRequestReadContactsPermission(); + if (!willContactsPermissionBeAsked()) { + ContactsManager.getInstance().fetchContactsAsync(); + fetchedContactsOnce = true; + checkAndRequestReadPhoneStatePermission(); + } else { + checkAndRequestReadContactsPermission(); // This will ask for Read_Phone_State permission on it's cb + } } } diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index 4b7d463be..4210c7a0e 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -66,7 +66,6 @@ import org.linphone.core.PublishState; import org.linphone.core.SubscriptionState; import org.linphone.core.TunnelConfig; import org.linphone.mediastream.Log; -import org.linphone.mediastream.MediastreamerAndroidContext; import org.linphone.mediastream.Version; import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration; import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration.AndroidCamera;