parent
52ff6f446c
commit
5aeed63844
File diff suppressed because it is too large
Load diff
|
@ -272,14 +272,16 @@ public class RtpSessionActivity extends XmppActivity
|
|||
}
|
||||
|
||||
private void requestPermissionsAndAcceptCall() {
|
||||
final List<String> permissions;
|
||||
final ImmutableList.Builder<String> permissions = ImmutableList.builder();
|
||||
if (getMedia().contains(Media.VIDEO)) {
|
||||
permissions =
|
||||
ImmutableList.of(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO);
|
||||
permissions.add(Manifest.permission.CAMERA).add(Manifest.permission.RECORD_AUDIO);
|
||||
} else {
|
||||
permissions = ImmutableList.of(Manifest.permission.RECORD_AUDIO);
|
||||
permissions.add(Manifest.permission.RECORD_AUDIO);
|
||||
}
|
||||
if (PermissionUtils.hasPermission(this, permissions, REQUEST_ACCEPT_CALL)) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||
permissions.add(Manifest.permission.BLUETOOTH_CONNECT);
|
||||
}
|
||||
if (PermissionUtils.hasPermission(this, permissions.build(), REQUEST_ACCEPT_CALL)) {
|
||||
putScreenInCallMode();
|
||||
checkRecorderAndAcceptCall();
|
||||
}
|
||||
|
@ -491,13 +493,16 @@ public class RtpSessionActivity extends XmppActivity
|
|||
public void onRequestPermissionsResult(
|
||||
int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
if (PermissionUtils.allGranted(grantResults)) {
|
||||
final PermissionUtils.PermissionResult permissionResult =
|
||||
PermissionUtils.removeBluetoothConnect(permissions, grantResults);
|
||||
if (PermissionUtils.allGranted(permissionResult.grantResults)) {
|
||||
if (requestCode == REQUEST_ACCEPT_CALL) {
|
||||
checkRecorderAndAcceptCall();
|
||||
}
|
||||
} else {
|
||||
@StringRes int res;
|
||||
final String firstDenied = getFirstDenied(grantResults, permissions);
|
||||
final String firstDenied =
|
||||
getFirstDenied(permissionResult.grantResults, permissionResult.permissions);
|
||||
if (Manifest.permission.RECORD_AUDIO.equals(firstDenied)) {
|
||||
res = R.string.no_microphone_permission;
|
||||
} else if (Manifest.permission.CAMERA.equals(firstDenied)) {
|
||||
|
|
|
@ -8,7 +8,9 @@ import android.os.Build;
|
|||
import androidx.core.app.ActivityCompat;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.primitives.Ints;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class PermissionUtils {
|
||||
|
@ -40,11 +42,41 @@ public class PermissionUtils {
|
|||
return null;
|
||||
}
|
||||
|
||||
public static boolean hasPermission(final Activity activity, final List<String> permissions, final int requestCode) {
|
||||
public static class PermissionResult {
|
||||
public final String[] permissions;
|
||||
public final int[] grantResults;
|
||||
|
||||
public PermissionResult(String[] permissions, int[] grantResults) {
|
||||
this.permissions = permissions;
|
||||
this.grantResults = grantResults;
|
||||
}
|
||||
}
|
||||
|
||||
public static PermissionResult removeBluetoothConnect(
|
||||
final String[] inPermissions, final int[] inGrantResults) {
|
||||
final List<String> outPermissions = new ArrayList<>();
|
||||
final List<Integer> outGrantResults = new ArrayList<>();
|
||||
for (int i = 0; i < Math.min(inPermissions.length, inGrantResults.length); ++i) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||
if (inPermissions[i].equals(Manifest.permission.BLUETOOTH_CONNECT)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
outPermissions.add(inPermissions[i]);
|
||||
outGrantResults.add(inGrantResults[i]);
|
||||
}
|
||||
|
||||
return new PermissionResult(
|
||||
outPermissions.toArray(new String[0]), Ints.toArray(outGrantResults));
|
||||
}
|
||||
|
||||
public static boolean hasPermission(
|
||||
final Activity activity, final List<String> permissions, final int requestCode) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
final ImmutableList.Builder<String> missingPermissions = new ImmutableList.Builder<>();
|
||||
for (final String permission : permissions) {
|
||||
if (ActivityCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {
|
||||
if (ActivityCompat.checkSelfPermission(activity, permission)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
missingPermissions.add(permission);
|
||||
}
|
||||
}
|
||||
|
@ -52,7 +84,8 @@ public class PermissionUtils {
|
|||
if (missing.size() == 0) {
|
||||
return true;
|
||||
}
|
||||
ActivityCompat.requestPermissions(activity, missing.toArray(new String[0]), requestCode);
|
||||
ActivityCompat.requestPermissions(
|
||||
activity, missing.toArray(new String[0]), requestCode);
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
|
|
Loading…
Reference in a new issue