package org.pyneo.tabulae.fawlty; import android.Manifest; import android.annotation.TargetApi; import android.content.Context; import android.content.pm.PackageManager; import android.location.Location; import android.location.LocationManager; import android.os.Build; import android.os.SystemClock; import android.util.Log; import java.util.Iterator; import static org.pyneo.tabulae.fawlty.Constants.*; public class Satellite implements Iterator<TheDictionary>, Iterable<TheDictionary> { private Location location; public Satellite(Location location) { this.location = location; } ///////////////////// public static void fill(TheDictionary map, Location value) throws Exception { if (value != null) { map.put("type", "g"); map.put("latitude", value.getLatitude()); map.put("longitude", value.getLongitude()); if (value.hasAccuracy()) { map.put("accuracy", (double) value.getAccuracy()); } if (value.hasAltitude()) { map.put("altitude", value.getAltitude()); } map.put("time", value.getTime()); if (value.hasBearing()) { map.put("bearing", value.getBearing()); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { map.put("age_nanos", SystemClock.elapsedRealtimeNanos() - value.getElapsedRealtimeNanos()); } else { map.put("age_nanos", (SystemClock.elapsedRealtime() - value.getTime()) * 1000000); } map.put("provider", value.getProvider()); if (value.hasSpeed()) { map.put("speed", (double) value.getSpeed() * 3.6); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { map.put("fromMockProvider", value.isFromMockProvider()); } else { map.put("fromMockProvider", false); } } } ///////////////////// test @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) public static String test(Context context) { int a = 0; int b = 0; int c = 0; //if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M || context.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && context.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { for (TheDictionary o : new Satellite(((LocationManager) context.getSystemService(Context.LOCATION_SERVICE)).getLastKnownLocation(LocationManager.GPS_PROVIDER))) { a++; if (DEBUG) Log.d(TAG, "got: " + o); } } return "counts: " + a + '/' + b + '/' + c; } ///////////////////////// enumerator stuff @Override public Iterator<TheDictionary> iterator() { return this; } @Override public boolean hasNext() { return location != null; } @Override public TheDictionary next() { TheDictionary map = new TheDictionary(); try { fill(map, location); } catch (Exception e) { throw new RuntimeException(e); } location = null; return map; } @Override public void remove() { throw new UnsupportedOperationException(); } }