Improved permissions request for calls
This commit is contained in:
parent
eca542ae28
commit
a2e1240641
3 changed files with 91 additions and 20 deletions
|
@ -48,6 +48,7 @@ import androidx.core.app.ActivityCompat;
|
|||
import androidx.core.content.ContextCompat;
|
||||
import androidx.drawerlayout.widget.DrawerLayout;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.ArrayList;
|
||||
import org.linphone.LinphoneManager;
|
||||
import org.linphone.R;
|
||||
import org.linphone.activities.LinphoneGenericActivity;
|
||||
|
@ -81,6 +82,7 @@ public class CallActivity extends LinphoneGenericActivity
|
|||
private static final int MIC_TO_DISABLE_MUTE = 1;
|
||||
private static final int WRITE_EXTERNAL_STORAGE_FOR_RECORDING = 2;
|
||||
private static final int CAMERA_TO_ACCEPT_UPDATE = 3;
|
||||
private static final int ALL_PERMISSIONS = 4;
|
||||
|
||||
private static class HideControlsRunnable implements Runnable {
|
||||
private WeakReference<CallActivity> mWeakCallActivity;
|
||||
|
@ -451,6 +453,11 @@ public class CallActivity extends LinphoneGenericActivity
|
|||
protected void onStart() {
|
||||
super.onStart();
|
||||
|
||||
// This also must be done here in case of an outgoing call accepted
|
||||
// before user granted or denied permissions
|
||||
// or if an incoming call was answer from the notification
|
||||
checkAndRequestCallPermissions();
|
||||
|
||||
mCore = LinphoneManager.getCore();
|
||||
if (mCore != null) {
|
||||
mCore.setNativeVideoWindowId(mRemoteVideo);
|
||||
|
@ -581,23 +588,37 @@ public class CallActivity extends LinphoneGenericActivity
|
|||
public void onRequestPermissionsResult(
|
||||
int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||
// Permission not granted, won't change anything
|
||||
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) return;
|
||||
|
||||
switch (requestCode) {
|
||||
case CAMERA_TO_TOGGLE_VIDEO:
|
||||
LinphoneUtils.reloadVideoDevices();
|
||||
toggleVideo();
|
||||
break;
|
||||
case MIC_TO_DISABLE_MUTE:
|
||||
toggleMic();
|
||||
break;
|
||||
case WRITE_EXTERNAL_STORAGE_FOR_RECORDING:
|
||||
toggleRecording();
|
||||
break;
|
||||
case CAMERA_TO_ACCEPT_UPDATE:
|
||||
LinphoneUtils.reloadVideoDevices();
|
||||
acceptCallUpdate(true);
|
||||
break;
|
||||
if (requestCode == ALL_PERMISSIONS) {
|
||||
for (int index = 0; index < permissions.length; index++) {
|
||||
int granted = grantResults[index];
|
||||
if (granted == PackageManager.PERMISSION_GRANTED) {
|
||||
String permission = permissions[index];
|
||||
if (Manifest.permission.RECORD_AUDIO.equals(permission)) {
|
||||
toggleMic();
|
||||
} else if (Manifest.permission.CAMERA.equals(permission)) {
|
||||
LinphoneUtils.reloadVideoDevices();
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) return;
|
||||
switch (requestCode) {
|
||||
case CAMERA_TO_TOGGLE_VIDEO:
|
||||
LinphoneUtils.reloadVideoDevices();
|
||||
toggleVideo();
|
||||
break;
|
||||
case MIC_TO_DISABLE_MUTE:
|
||||
toggleMic();
|
||||
break;
|
||||
case WRITE_EXTERNAL_STORAGE_FOR_RECORDING:
|
||||
toggleRecording();
|
||||
break;
|
||||
case CAMERA_TO_ACCEPT_UPDATE:
|
||||
LinphoneUtils.reloadVideoDevices();
|
||||
acceptCallUpdate(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -620,6 +641,57 @@ public class CallActivity extends LinphoneGenericActivity
|
|||
return true;
|
||||
}
|
||||
|
||||
private void checkAndRequestCallPermissions() {
|
||||
ArrayList<String> permissionsList = new ArrayList<>();
|
||||
|
||||
int recordAudio =
|
||||
getPackageManager()
|
||||
.checkPermission(Manifest.permission.RECORD_AUDIO, getPackageName());
|
||||
Log.i(
|
||||
"[Permission] Record audio permission is "
|
||||
+ (recordAudio == PackageManager.PERMISSION_GRANTED
|
||||
? "granted"
|
||||
: "denied"));
|
||||
int camera =
|
||||
getPackageManager().checkPermission(Manifest.permission.CAMERA, getPackageName());
|
||||
Log.i(
|
||||
"[Permission] Camera permission is "
|
||||
+ (camera == PackageManager.PERMISSION_GRANTED ? "granted" : "denied"));
|
||||
|
||||
int readPhoneState =
|
||||
getPackageManager()
|
||||
.checkPermission(Manifest.permission.READ_PHONE_STATE, getPackageName());
|
||||
Log.i(
|
||||
"[Permission] Read phone state permission is "
|
||||
+ (camera == PackageManager.PERMISSION_GRANTED ? "granted" : "denied"));
|
||||
|
||||
if (recordAudio != PackageManager.PERMISSION_GRANTED) {
|
||||
Log.i("[Permission] Asking for record audio");
|
||||
permissionsList.add(Manifest.permission.RECORD_AUDIO);
|
||||
}
|
||||
if (readPhoneState != PackageManager.PERMISSION_GRANTED) {
|
||||
Log.i("[Permission] Asking for read phone state");
|
||||
permissionsList.add(Manifest.permission.READ_PHONE_STATE);
|
||||
}
|
||||
|
||||
Call call = mCore.getCurrentCall();
|
||||
if (LinphonePreferences.instance().shouldInitiateVideoCall()
|
||||
|| (LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()
|
||||
&& call != null
|
||||
&& call.getRemoteParams().videoEnabled())) {
|
||||
if (camera != PackageManager.PERMISSION_GRANTED) {
|
||||
Log.i("[Permission] Asking for camera");
|
||||
permissionsList.add(Manifest.permission.CAMERA);
|
||||
}
|
||||
}
|
||||
|
||||
if (permissionsList.size() > 0) {
|
||||
String[] permissions = new String[permissionsList.size()];
|
||||
permissions = permissionsList.toArray(permissions);
|
||||
ActivityCompat.requestPermissions(this, permissions, ALL_PERMISSIONS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onContactsUpdated() {
|
||||
setCurrentCallContactInformation();
|
||||
|
|
|
@ -277,8 +277,8 @@ public class CallIncomingActivity extends LinphoneGenericActivity {
|
|||
Log.i("[Permission] Asking for read phone state");
|
||||
permissionsList.add(Manifest.permission.READ_PHONE_STATE);
|
||||
}
|
||||
if (LinphonePreferences.instance().shouldInitiateVideoCall()
|
||||
|| LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) {
|
||||
if (LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()
|
||||
&& mCall.getRemoteParams().videoEnabled()) {
|
||||
if (camera != PackageManager.PERMISSION_GRANTED) {
|
||||
Log.i("[Permission] Asking for camera");
|
||||
permissionsList.add(Manifest.permission.CAMERA);
|
||||
|
|
|
@ -283,8 +283,7 @@ public class CallOutgoingActivity extends LinphoneGenericActivity implements OnC
|
|||
Log.i("[Permission] Asking for read phone state");
|
||||
permissionsList.add(Manifest.permission.READ_PHONE_STATE);
|
||||
}
|
||||
if (LinphonePreferences.instance().shouldInitiateVideoCall()
|
||||
|| LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) {
|
||||
if (LinphonePreferences.instance().shouldInitiateVideoCall()) {
|
||||
if (camera != PackageManager.PERMISSION_GRANTED) {
|
||||
Log.i("[Permission] Asking for camera");
|
||||
permissionsList.add(Manifest.permission.CAMERA);
|
||||
|
|
Loading…
Reference in a new issue