I guess, in the hasCustomLocationChanged function in the LocationProviderImpl class, it might be better to check whether or not the user is using device location and if not using, return customLocationName != lastWeatherLocation.name otherwise return false. The current implementation of hasCustomLocationChanged function returns always true and that's why fetchCurrentWeather function is triggered even if using device location.
I guess, in the hasCustomLocationChanged function in the LocationProviderImpl class, it might be better to check whether or not the user is using device location and if not using, return customLocationName != lastWeatherLocation.name otherwise return false. The current implementation of hasCustomLocationChanged function returns always true and that's why fetchCurrentWeather function is triggered even if using device location.