class AndroidGpsLocationClient extends BaseLocationClient {

    @Override
    public void requestLocationUpdates(@NonNull LocationListener locationListener) {
        addLocationListener(locationListener);
        if (isProviderEnabled()) {
            try {
                Location location = locationManager.getLastKnownLocation(getProvider());
                if (location != null && (lastLocation == null || (location != null && isBetterLocation(location, lastLocation)))) {
                    lastLocation = location;
                    locationListener.onLocationChanged(lastLocation);
                } else {
                    // Enable snackbar in the activity
                    Toast.makeText(context, R.string.retrieving_gps_location_couple_of_minutes, Toast.LENGTH_SHORT).show();
                }

                locationManager.requestLocationUpdates(
                        LocationManager.GPS_PROVIDER
                        , fastestUpdateInterval
                        , 0f
                        , androidGpsLocationListener);

                // This method protects itself from multiple calls
                registerForGpsStoppedEvent();
            } catch (SecurityException e) {
                Timber.e(e);
                Toast.makeText(context, R.string.location_disabled_location_permissions_not_granted, Toast.LENGTH_LONG)
                        .show();
            }
        } else {
            removeLocationListener(locationListener);
            Timber.e(new Exception(), "The provider (" + getProvider() + ") is not enabled");
        }

    }

    public  AndroidGpsLocationClient(@NonNull Context context);

}