@Override
  public void onTimeout(final TimeoutTimer timer) {
    endTimerForProvider(timer.getId(), (LocationListener) timer.getTag());
    updateFromLocationListener();

    Utils.d(TAG, "Location timeout for provider", timer.getId());
  }
  private void endTimer(TimeoutTimer timer) {
    if (timer == null) return;

    Utils.d(TAG, "Ending a timed update from", timer.getId());
    timer.stop(); // this will NOT stop the already running thread
    manager.removeUpdates((LocationListener) timer.getTag());
  }