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.core.content.ContextCompat;
|
||||||
import androidx.drawerlayout.widget.DrawerLayout;
|
import androidx.drawerlayout.widget.DrawerLayout;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
|
import java.util.ArrayList;
|
||||||
import org.linphone.LinphoneManager;
|
import org.linphone.LinphoneManager;
|
||||||
import org.linphone.R;
|
import org.linphone.R;
|
||||||
import org.linphone.activities.LinphoneGenericActivity;
|
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 MIC_TO_DISABLE_MUTE = 1;
|
||||||
private static final int WRITE_EXTERNAL_STORAGE_FOR_RECORDING = 2;
|
private static final int WRITE_EXTERNAL_STORAGE_FOR_RECORDING = 2;
|
||||||
private static final int CAMERA_TO_ACCEPT_UPDATE = 3;
|
private static final int CAMERA_TO_ACCEPT_UPDATE = 3;
|
||||||
|
private static final int ALL_PERMISSIONS = 4;
|
||||||
|
|
||||||
private static class HideControlsRunnable implements Runnable {
|
private static class HideControlsRunnable implements Runnable {
|
||||||
private WeakReference<CallActivity> mWeakCallActivity;
|
private WeakReference<CallActivity> mWeakCallActivity;
|
||||||
|
@ -451,6 +453,11 @@ public class CallActivity extends LinphoneGenericActivity
|
||||||
protected void onStart() {
|
protected void onStart() {
|
||||||
super.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();
|
mCore = LinphoneManager.getCore();
|
||||||
if (mCore != null) {
|
if (mCore != null) {
|
||||||
mCore.setNativeVideoWindowId(mRemoteVideo);
|
mCore.setNativeVideoWindowId(mRemoteVideo);
|
||||||
|
@ -581,23 +588,37 @@ public class CallActivity extends LinphoneGenericActivity
|
||||||
public void onRequestPermissionsResult(
|
public void onRequestPermissionsResult(
|
||||||
int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||||
// Permission not granted, won't change anything
|
// Permission not granted, won't change anything
|
||||||
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) return;
|
|
||||||
|
|
||||||
switch (requestCode) {
|
if (requestCode == ALL_PERMISSIONS) {
|
||||||
case CAMERA_TO_TOGGLE_VIDEO:
|
for (int index = 0; index < permissions.length; index++) {
|
||||||
LinphoneUtils.reloadVideoDevices();
|
int granted = grantResults[index];
|
||||||
toggleVideo();
|
if (granted == PackageManager.PERMISSION_GRANTED) {
|
||||||
break;
|
String permission = permissions[index];
|
||||||
case MIC_TO_DISABLE_MUTE:
|
if (Manifest.permission.RECORD_AUDIO.equals(permission)) {
|
||||||
toggleMic();
|
toggleMic();
|
||||||
break;
|
} else if (Manifest.permission.CAMERA.equals(permission)) {
|
||||||
case WRITE_EXTERNAL_STORAGE_FOR_RECORDING:
|
LinphoneUtils.reloadVideoDevices();
|
||||||
toggleRecording();
|
}
|
||||||
break;
|
}
|
||||||
case CAMERA_TO_ACCEPT_UPDATE:
|
}
|
||||||
LinphoneUtils.reloadVideoDevices();
|
} else {
|
||||||
acceptCallUpdate(true);
|
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) return;
|
||||||
break;
|
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;
|
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
|
@Override
|
||||||
public void onContactsUpdated() {
|
public void onContactsUpdated() {
|
||||||
setCurrentCallContactInformation();
|
setCurrentCallContactInformation();
|
||||||
|
|
|
@ -277,8 +277,8 @@ public class CallIncomingActivity extends LinphoneGenericActivity {
|
||||||
Log.i("[Permission] Asking for read phone state");
|
Log.i("[Permission] Asking for read phone state");
|
||||||
permissionsList.add(Manifest.permission.READ_PHONE_STATE);
|
permissionsList.add(Manifest.permission.READ_PHONE_STATE);
|
||||||
}
|
}
|
||||||
if (LinphonePreferences.instance().shouldInitiateVideoCall()
|
if (LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()
|
||||||
|| LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) {
|
&& mCall.getRemoteParams().videoEnabled()) {
|
||||||
if (camera != PackageManager.PERMISSION_GRANTED) {
|
if (camera != PackageManager.PERMISSION_GRANTED) {
|
||||||
Log.i("[Permission] Asking for camera");
|
Log.i("[Permission] Asking for camera");
|
||||||
permissionsList.add(Manifest.permission.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");
|
Log.i("[Permission] Asking for read phone state");
|
||||||
permissionsList.add(Manifest.permission.READ_PHONE_STATE);
|
permissionsList.add(Manifest.permission.READ_PHONE_STATE);
|
||||||
}
|
}
|
||||||
if (LinphonePreferences.instance().shouldInitiateVideoCall()
|
if (LinphonePreferences.instance().shouldInitiateVideoCall()) {
|
||||||
|| LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) {
|
|
||||||
if (camera != PackageManager.PERMISSION_GRANTED) {
|
if (camera != PackageManager.PERMISSION_GRANTED) {
|
||||||
Log.i("[Permission] Asking for camera");
|
Log.i("[Permission] Asking for camera");
|
||||||
permissionsList.add(Manifest.permission.CAMERA);
|
permissionsList.add(Manifest.permission.CAMERA);
|
||||||
|
|
Loading…
Reference in a new issue