package com.quickblox.q_municate.utils.helpers; import android.Manifest; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.provider.Settings; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import com.quickblox.videochat.webrtc.QBRTCTypes; import java.util.ArrayList; public class SystemPermissionHelper { public static final int PERMISSIONS_FOR_CALL_REQUEST = 15; public static final int PERMISSIONS_FOR_IMPORT_FRIENDS_REQUEST = 16; public static final int PERMISSIONS_FOR_SAVE_FILE_REQUEST = 17; private final Activity activity; public SystemPermissionHelper(Activity activity) { this.activity = activity; } public void requestPermission(int requestCode, String permission) { ActivityCompat.requestPermissions(activity, new String[]{permission}, requestCode); } public void requestPermissions(int requestCode, String... permissions) { ActivityCompat.requestPermissions(activity, permissions, requestCode); } public boolean isPermissionGranted(String permission) { return ContextCompat.checkSelfPermission(activity.getApplicationContext(), permission) == PackageManager.PERMISSION_GRANTED; } public boolean isAllPermissionGranted(String... permissions) { for (String permission : permissions) { if (!isPermissionGranted(permission)) { return false; } } return true; } public void checkAndRequestPermissions(int requestCode, String... permissions) { if (collectDeniedPermissions(permissions).length > 0) { requestPermissions(requestCode, collectDeniedPermissions(permissions)); } } private String[] collectDeniedPermissions(String... permissions) { ArrayList<String> deniedPermissionsList = new ArrayList<>(); for (String permission : permissions) { if (!isPermissionGranted(permission)) { deniedPermissionsList.add(permission); } } return deniedPermissionsList.toArray(new String[deniedPermissionsList.size()]); } public boolean isAllPermissionsGrantedForCallByType(QBRTCTypes.QBConferenceType qbConferenceType) { if (QBRTCTypes.QBConferenceType.QB_CONFERENCE_TYPE_AUDIO.equals(qbConferenceType)) { return isPermissionGranted(Manifest.permission.RECORD_AUDIO); } else { return isAllPermissionGranted(Manifest.permission.RECORD_AUDIO, Manifest.permission.CAMERA); } } public boolean isCameraPermissionGranted(){ return isPermissionGranted(Manifest.permission.CAMERA); } public boolean isMicriphonePermissionGranted(){ return isPermissionGranted(Manifest.permission.RECORD_AUDIO); } public void requestPermissionsForCallByType(QBRTCTypes.QBConferenceType qbConferenceType){ if (QBRTCTypes.QBConferenceType.QB_CONFERENCE_TYPE_AUDIO.equals(qbConferenceType)) { checkAndRequestPermissions(PERMISSIONS_FOR_CALL_REQUEST, Manifest.permission.RECORD_AUDIO); } else { checkAndRequestPermissions(PERMISSIONS_FOR_CALL_REQUEST, Manifest.permission.RECORD_AUDIO, Manifest.permission.CAMERA); } } public boolean isAllPermissionsGrantedForImportFriends(){ return isAllPermissionGranted(Manifest.permission.READ_CONTACTS); } public void requestPermissionsForImportFriends(){ checkAndRequestPermissions(PERMISSIONS_FOR_IMPORT_FRIENDS_REQUEST, Manifest.permission.READ_CONTACTS); } public boolean isAllPermissionsGrantedForSaveFile(){ return isPermissionGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE); } public void requestPermissionsForSaveFile(){ checkAndRequestPermissions(PERMISSIONS_FOR_SAVE_FILE_REQUEST, Manifest.permission.WRITE_EXTERNAL_STORAGE); } public ArrayList<String> collectDeniedPermissionsFomResult(String permissions[], int[] grantResults){ ArrayList<String> deniedPermissions = new ArrayList<>(); for (int i = 0; i < permissions.length; i++){ if(grantResults[i] == PackageManager.PERMISSION_DENIED){ deniedPermissions.add(permissions[i]); } } return deniedPermissions; } public static void openSystemSettings(Context context){ Intent intent = new Intent(); intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY); Uri uri = Uri.fromParts("package", context.getPackageName(), null); intent.setData(uri); context.startActivity(intent); } }