Skip to content

Commit

Permalink
Use activity result contract for permissions
Browse files Browse the repository at this point in the history
  • Loading branch information
pranavpandey committed Dec 9, 2022
1 parent 9015612 commit 3037008
Showing 1 changed file with 30 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
import android.view.View;
import android.view.ViewGroup;

import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
Expand All @@ -46,6 +49,7 @@
import com.pranavpandey.android.dynamic.support.util.DynamicPermissionUtils;

import java.util.List;
import java.util.Map;

/**
* Base fragment class to show a list of required permissions in a recycler view. It will be used
Expand Down Expand Up @@ -104,6 +108,23 @@ public class DynamicPermissionsFragment extends DynamicFragment {
*/
private boolean mRequestingDangerousPermissions;

/**
* Activity result launcher to request permissions.
*/
private ActivityResultLauncher<String[]> mPermissionsResultLauncher;

/**
* Activity result callback to request permissions.
*/
private final ActivityResultCallback<Map<String, Boolean>> mPermissionsResultCallback =
new ActivityResultCallback<Map<String, Boolean>>() {
@Override
public void onActivityResult(Map<String, Boolean> result) {
mRequestingDangerousPermissions = false;
resumePermissionsRequest();
}
};

/**
* Initialize the new instance of this fragment.
*
Expand Down Expand Up @@ -144,6 +165,10 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
return;
}

mPermissionsResultLauncher = registerForActivityResult(
new ActivityResultContracts.RequestMultiplePermissions(),
mPermissionsResultCallback);

getDynamicActivity().setExtendedFAB(R.drawable.ads_ic_done_all,
R.string.ads_perm_request, View.VISIBLE, new View.OnClickListener() {
@Override
Expand Down Expand Up @@ -365,8 +390,12 @@ private void requestPermission(@NonNull DynamicPermission dynamicPermission) {
* @see ActivityCompat#requestPermissions(Activity, String[], int)
*/
private void requestDangerousPermissions(@NonNull String... permissions) {
if (getActivity() == null || mPermissionsResultLauncher == null) {
return;
}

if (permissions.length != 0) {
requestPermissions(permissions, ADS_PERMISSIONS_REQUEST_CODE);
mPermissionsResultLauncher.launch(permissions);
mRequestingDangerousPermissions = true;
}
}
Expand Down Expand Up @@ -398,17 +427,6 @@ private void checkForAction() {
}
}

@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String[] permissions, @NonNull int[] grantResults) {
if (getActivity() != null) {
requireActivity().onRequestPermissionsResult(requestCode, permissions, grantResults);
}

mRequestingDangerousPermissions = false;
resumePermissionsRequest();
}

/**
* Runnable to request the permissions.
*/
Expand Down

0 comments on commit 3037008

Please sign in to comment.