public static PermissionFragment newInstance(List<String> permissions) { final Bundle args = new Bundle(); args.putStringArrayList(LIST_PERMISSIONS, new ArrayList<String>(permissions)); final PermissionFragment fragment = new PermissionFragment(); fragment.setArguments(args); return fragment; }
public PermissionFragment() { setRetainInstance(true); }
@Override public void onResume() { super.onResume(); if (permissionsList.size() > 0) { final String[] perms = new String[permissionsList.size()]; permissionsList.toArray(perms); requestPermissions(perms, REQUEST_CODE); } else { // this shouldn't happen, but just to be sure getFragmentManager().beginTransaction() .remove(this) .commitAllowingStateLoss(); } }
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == REQUEST_CODE && permissions.length > 0 && this.listener != null) { final PermissionListener listener = this.listener; final List<String> acceptedPermissions = new ArrayList<>(); final List<String> askAgainPermissions = new ArrayList<>(); final List<String> refusedPermissions = new ArrayList<>(); for (int i = 0; i < permissions.length; i++) { final String permissionName = permissions[i]; if (grantResults[i] == PackageManager.PERMISSION_GRANTED) { acceptedPermissions.add(permissionName); } else { if (shouldShowRequestPermissionRationale(permissionName)) { //listener.onDenied(permissionResult); askAgainPermissions.add(permissionName); } else { refusedPermissions.add(permissionName); //listener.onForeverDenied(permissionResult); } } } listener.onRequestPermissionsResult(acceptedPermissions, refusedPermissions, askAgainPermissions); getFragmentManager().beginTransaction() .remove(this) .commitAllowingStateLoss(); } }
oldFragment.setListener(listener); } else { final PermissionFragment newFragment = PermissionFragment.newInstance(permissions); newFragment.setListener(listener);
@Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Bundle arguments = getArguments(); if (arguments != null) { final List<String> permissionsArgs = arguments.getStringArrayList(LIST_PERMISSIONS); if (permissionsArgs != null) { permissionsList.addAll(permissionsArgs); } } }