I changed the following method
public static boolean requestForLocationPermission(Fragment fragment) {
String LOCATION_PERMISSION = Manifest.permission.ACCESS_FINE_LOCATION;
     if (ContextCompat.checkSelfPermission(fragment.requireContext(), LOCATION_PERMISSION)
                    == PackageManager.PERMISSION_GRANTED)
                return true;
    
            if (ActivityCompat.shouldShowRequestPermissionRationale(fragment.requireActivity(), LOCATION_PERMISSION)) {
                PermissionDialog.showForResult(fragment, LOCATION_PERMISSION_REQUEST_CODE, LOCATION_PERMISSION);
            } else {
                fragment.requestPermissions(new String[]{LOCATION_PERMISSION}, LOCATION_PERMISSION_REQUEST_CODE);
            }
            return false;
}
to the following code after I found out that auto location detection doesn't work on API 21 and mainly because fragment.requestPermissions is deprecated:
public static boolean requestForLocationPermission(Fragment fragment) {
String LOCATION_PERMISSION = Manifest.permission.ACCESS_FINE_LOCATION;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (ContextCompat.checkSelfPermission(fragment.requireContext(), LOCATION_PERMISSION)
                == PackageManager.PERMISSION_GRANTED) {
            Log.d("request_Permission 23:", "has been granted!");
            return true;
        }
    } else {
        if (PermissionChecker.checkSelfPermission(fragment.requireContext(), LOCATION_PERMISSION)
                == PermissionChecker.PERMISSION_GRANTED) {
            Log.d("request_Permission 21:", "has been granted!");
            return true;
        }
    }
    if (ActivityCompat.shouldShowRequestPermissionRationale(fragment.requireActivity(), LOCATION_PERMISSION)) {
        PermissionDialog.showForResult(fragment, LOCATION_PERMISSION_REQUEST_CODE, LOCATION_PERMISSION);
    } else {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            fragment.requireActivity().requestPermissions(new String[]{LOCATION_PERMISSION}, LOCATION_PERMISSION_REQUEST_CODE);
        } else {
            ActivityCompat.requestPermissions(fragment.requireActivity(),
                    new String[]{LOCATION_PERMISSION},
                    LOCATION_PERMISSION_REQUEST_CODE);
            Log.d("request_Permission:", "has been requested ... ");
        }
    }
    return false;
}
After adding these Log lines, it was very odd that for API 21 in the logcat it is showing request_Permission 21: has been granted! when the permission dialog appear on screen without any option-selection.
So why is PermissionChecker.checkSelfPermission(fragment.requireContext(), LOCATION_PERMISSION) == PermissionChecker.PERMISSION_GRANTED always true for API 21 (and probably for API 22)?
 
    