Ask for READ_PHONE_STATE permission when starting LinphoneActivity (used to detect GSM calls and pause SIP calls)

This commit is contained in:
Sylvain Berfini 2016-09-05 11:22:11 +02:00
parent 0425c1bc33
commit ca4f078b9e
3 changed files with 24 additions and 10 deletions

View file

@ -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;

View file

@ -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
}
}
}

View file

@ -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;