Android Open Source - FlickrBrowser Simple Location Listener






From Project

Back to project page FlickrBrowser.

License

The source code is released under:

MIT License

If you think the Android project FlickrBrowser listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.flickrbrowser.location;
// w w  w  .  ja va 2  s.c  o  m
import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;
import com.flickrbrowser.parcelable.SimpleLocation;

/**
 Simple class to handle location updates. Copied from the android developer guide
 @see <a href="http://developer.android.com/guide/topics/location/strategies.html">Location Strategies</a>
 */
public class SimpleLocationListener implements LocationListener {
    private static final int TWO_MINUTES = 1000 * 60 * 2;
    private Location currentBestLocation;
    private boolean useLocation = true;
    public boolean isUseLocation() {
        return useLocation;
    }

    public void setUseLocation(boolean useLocation) {
        this.useLocation = useLocation;
    }

    public SimpleLocation getSimpleLocation() {
        if(currentBestLocation == null || !useLocation) {
            return null;
        }
        return new SimpleLocation(currentBestLocation);
    }

    public Location getLocation() {
        if(!useLocation) {
            return null;
        }
        return currentBestLocation;
    }

    public void setLocation(Location location) {
        currentBestLocation = location;
    }

    @Override
    public void onLocationChanged(Location location) {
        if(isBetterLocation(location)) {
            currentBestLocation = location;
        }
    }

    @Override
    public void onStatusChanged(String s, int i, Bundle bundle) {
        //To change body of implemented methods use File | Settings | File Templates.
    }

    @Override
    public void onProviderEnabled(String s) {
        //To change body of implemented methods use File | Settings | File Templates.
    }

    @Override
    public void onProviderDisabled(String s) {
        //To change body of implemented methods use File | Settings | File Templates.
    }

    /** Determines whether one Location reading is better than the current Location fix
     * @param location  The new Location that you want to evaluate
     */
    protected boolean isBetterLocation(Location location) {
        if (currentBestLocation == null) {
            // A new location is always better than no location
            return true;
        }

        // Check whether the new location fix is newer or older
        long timeDelta = location.getTime() - currentBestLocation.getTime();
        boolean isSignificantlyNewer = timeDelta > TWO_MINUTES;
        boolean isSignificantlyOlder = timeDelta < -TWO_MINUTES;
        boolean isNewer = timeDelta > 0;

        // If it's been more than two minutes since the current location, use the new location
        // because the user has likely moved
        if (isSignificantlyNewer) {
            return true;
            // If the new location is more than two minutes older, it must be worse
        } else if (isSignificantlyOlder) {
            return false;
        }

        // Check whether the new location fix is more or less accurate
        int accuracyDelta = (int) (location.getAccuracy() - currentBestLocation.getAccuracy());
        boolean isLessAccurate = accuracyDelta > 0;
        boolean isMoreAccurate = accuracyDelta < 0;
        boolean isSignificantlyLessAccurate = accuracyDelta > 200;

        // Check if the old and new location are from the same provider
        boolean isFromSameProvider = isSameProvider(location.getProvider(),
                currentBestLocation.getProvider());

        // Determine location quality using a combination of timeliness and accuracy
        if (isMoreAccurate) {
            return true;
        } else if (isNewer && !isLessAccurate) {
            return true;
        } else if (isNewer && !isSignificantlyLessAccurate && isFromSameProvider) {
            return true;
        }
        return false;
    }

    /** Checks whether two providers are the same */
    private boolean isSameProvider(String provider1, String provider2) {
        if (provider1 == null) {
            return provider2 == null;
        }
        return provider1.equals(provider2);
    }
}




Java Source Code List

com.flickrbrowser.FlickrBrowserApp.java
com.flickrbrowser.activity.Display.java
com.flickrbrowser.activity.Search.java
com.flickrbrowser.adapter.ImageAdapter.java
com.flickrbrowser.adapter.PhotoAdapter.java
com.flickrbrowser.location.SimpleLocationListener.java
com.flickrbrowser.parcelable.Description.java
com.flickrbrowser.parcelable.PhotoResult.java
com.flickrbrowser.parcelable.SearchResult.java
com.flickrbrowser.parcelable.SimpleLocation.java
com.flickrbrowser.rest.BackgroundRequestManager.java
com.flickrbrowser.rest.FlickrRequestBuilder.java
com.flickrbrowser.rest.GenericConnection.java
com.flickrbrowser.rest.GsonHelper.java
com.flickrbrowser.rest.IRequestListener.java
com.flickrbrowser.rest.PhotoSearchManager.java
com.flickrbrowser.util.FlickrBrowserConstants.java
com.flickrbrowser.util.FlickrPhotoArray.java
com.flickrbrowser.util.FlickrResponse.java
com.flickrbrowser.util.GzippedImageDownloader.java
com.flickrbrowser.util.PhotoSize.java
com.flickrbrowser.util.SearchHistory.java
com.flickrbrowser.util.Utils.java