diff --git a/app/src/main/java/org/traccar/client/MainActivity.java b/app/src/main/java/org/traccar/client/MainActivity.java index 7dc51bd..b2bd54c 100644 --- a/app/src/main/java/org/traccar/client/MainActivity.java +++ b/app/src/main/java/org/traccar/client/MainActivity.java @@ -22,6 +22,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; +import android.location.LocationManager; import android.os.Bundle; import android.preference.PreferenceActivity; import android.preference.PreferenceManager; @@ -48,6 +49,12 @@ public class MainActivity extends PreferenceActivity implements OnSharedPreferen firstLaunch = !PreferenceManager.getDefaultSharedPreferences(this).contains(KEY_PORT); addPreferencesFromResource(R.xml.preferences); initPreferences(); + + // DELME + if (PreferenceManager.getDefaultSharedPreferences(this).getString(KEY_PROVIDER, null).equals("mixed")) { + PreferenceManager.getDefaultSharedPreferences(this).edit().putString(KEY_PROVIDER, LocationManager.GPS_PROVIDER).commit(); + } + if (getPreferenceScreen().getSharedPreferences().getBoolean(KEY_STATUS, false)) { setPreferencesEnabled(false); startService(new Intent(this, TrackingService.class)); diff --git a/app/src/main/java/org/traccar/client/PositionProvider.java b/app/src/main/java/org/traccar/client/PositionProvider.java index f5103cb..bb0704b 100644 --- a/app/src/main/java/org/traccar/client/PositionProvider.java +++ b/app/src/main/java/org/traccar/client/PositionProvider.java @@ -19,146 +19,80 @@ import android.annotation.TargetApi; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.SharedPreferences; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; -import android.location.LocationProvider; import android.os.BatteryManager; import android.os.Build; import android.os.Bundle; -import android.os.Handler; +import android.preference.PreferenceManager; import android.util.Log; -public class PositionProvider { +public class PositionProvider implements LocationListener { private static final String TAG = PositionProvider.class.getSimpleName(); - public static final String PROVIDER_MIXED = "mixed"; - public static final long PROVIDER_RETRY_PERIOD = 60 * 1000; - public interface PositionListener { void onPositionUpdate(Position position); } - - private final Handler handler; - private final LocationManager locationManager; - private final long period; + private final PositionListener listener; + private final Context context; + private final SharedPreferences preferences; + private final LocationManager locationManager; + private String deviceId; + private String type; + private final long period; - private boolean useFine; - private boolean useCoarse; - - public PositionProvider(Context context, PositionListener listener, String deviceId, String type, long period) { - handler = new Handler(context.getMainLooper()); - locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); - this.period = period; - this.listener = listener; + public PositionProvider(Context context, PositionListener listener) { this.context = context; - this.deviceId = deviceId; + this.listener = listener; - // Determine providers - if (type.equals(PROVIDER_MIXED)) { - useFine = true; - useCoarse = true; - } else if (type.equals(LocationManager.GPS_PROVIDER)) { - useFine = true; - } else if (type.equals(LocationManager.NETWORK_PROVIDER)) { - useCoarse = true; - } + preferences = PreferenceManager.getDefaultSharedPreferences(context); + locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); + + deviceId = preferences.getString(MainActivity.KEY_DEVICE, null); + type = preferences.getString(MainActivity.KEY_PROVIDER, null); + period = Integer.parseInt(preferences.getString(MainActivity.KEY_INTERVAL, null)) * 1000; } public void startUpdates() { - if (useFine) { - try { - locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, period, 0, fineLocationListener); - } catch (Exception e) { - StatusActivity.addMessage(context.getString(R.string.status_provider_missing)); - } - } - if (useCoarse) { - try { - locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, period, 0, coarseLocationListener); - } catch (Exception e) { - StatusActivity.addMessage(context.getString(R.string.status_provider_missing)); - } - } - handler.postDelayed(updateTask, period); + locationManager.requestLocationUpdates(type, period, 0, this); } public void stopUpdates() { - handler.removeCallbacks(updateTask); - locationManager.removeUpdates(fineLocationListener); - locationManager.removeUpdates(coarseLocationListener); + locationManager.removeUpdates(this); } - private final Runnable updateTask = new Runnable() { + private long lastTime; - private long lastTime; - - private boolean tryProvider(String provider) { - Location location = locationManager.getLastKnownLocation(provider); - - /*if (location != null) { - Toast.makeText(context, "phone: " + new Date() + "\ngps: " + new Date(location.getTime()), Toast.LENGTH_LONG).show(); - } else { - Toast.makeText(context, "no location", Toast.LENGTH_LONG).show(); - }*/ - - if (location != null && location.getTime() != lastTime) { - Log.i(TAG, "location new"); - lastTime = location.getTime(); - listener.onPositionUpdate(new Position(deviceId, location, getBatteryLevel())); - return true; - } else { - Log.i(TAG, location != null ? "location old" : "location nil"); - return false; - } + @Override + public void onLocationChanged(Location location) { + if (location != null && location.getTime() != lastTime) { + Log.i(TAG, "location new"); + lastTime = location.getTime(); + listener.onPositionUpdate(new Position(deviceId, location, getBatteryLevel())); + } else { + Log.i(TAG, location != null ? "location old" : "location nil"); } + } - @Override - public void run() { - if (useFine && tryProvider(LocationManager.GPS_PROVIDER)) { - } else if (useCoarse && tryProvider(LocationManager.NETWORK_PROVIDER)) { - } else { - listener.onPositionUpdate(null); - } - handler.postDelayed(this, period); - } + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { + Log.i(TAG, "provider status"); + } - }; - - private final InternalLocationListener fineLocationListener = new InternalLocationListener(); - private final InternalLocationListener coarseLocationListener = new InternalLocationListener(); - - private class InternalLocationListener implements LocationListener { - - @Override - public void onLocationChanged(Location location) { - } - - @Override - public void onProviderDisabled(String provider) { - } - - @Override - public void onProviderEnabled(String provider) { - } - - @Override - public void onStatusChanged(final String provider, int status, Bundle extras) { - if (status == LocationProvider.TEMPORARILY_UNAVAILABLE || status == LocationProvider.OUT_OF_SERVICE) { - handler.postDelayed(new Runnable() { - @Override - public void run() { - locationManager.removeUpdates(InternalLocationListener.this); - locationManager.requestLocationUpdates(provider, period, 0, InternalLocationListener.this); - } - }, PROVIDER_RETRY_PERIOD); - } - } + @Override + public void onProviderEnabled(String provider) { + Log.i(TAG, "provider enabled"); + } + @Override + public void onProviderDisabled(String provider) { + Log.i(TAG, "provider disabled"); } @TargetApi(Build.VERSION_CODES.ECLAIR) diff --git a/app/src/main/java/org/traccar/client/TrackingController.java b/app/src/main/java/org/traccar/client/TrackingController.java index d921391..f38d719 100644 --- a/app/src/main/java/org/traccar/client/TrackingController.java +++ b/app/src/main/java/org/traccar/client/TrackingController.java @@ -45,10 +45,7 @@ public class TrackingController implements PositionProvider.PositionListener, Ne this.context = context; handler = new Handler(); preferences = PreferenceManager.getDefaultSharedPreferences(context); - positionProvider = new PositionProvider(context, this, - preferences.getString(MainActivity.KEY_DEVICE, null), - preferences.getString(MainActivity.KEY_PROVIDER, null), - Integer.parseInt(preferences.getString(MainActivity.KEY_INTERVAL, null)) * 1000); + positionProvider = new PositionProvider(context, this); databaseHelper = new DatabaseHelper(context); networkManager = new NetworkManager(context, this); isOnline = networkManager.isOnline(); diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 618c909..b28de39 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -21,7 +21,6 @@ GPS Mobilní síť - Obojí Stav diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 11736d1..8989d01 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -21,7 +21,6 @@ GPS udbyder Netværks udbyder - Mixet udbyder Status diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 743fa7c..eb5c546 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -21,7 +21,6 @@ GPS Netzwerk - Gemischt Status diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 86883ca..9f10869 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -21,7 +21,6 @@ Proveedor GPS Proveedor de red - Proveedor mixto Estado diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 1ac5fc0..ff06769 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -21,7 +21,6 @@ Mode GPS uniquement Mode cellulaire uniquement - Mode hybride Etat diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index ce45f43..75900f6 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -21,7 +21,6 @@ GPS-lokalisering Nettverkslokalisering - Blandet lokalisering Status diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 4f6c307..8167c50 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -21,7 +21,6 @@ Provedor GPS Provedor Rede - Provedor Misto Status diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 6a73007..a06548f 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -21,7 +21,6 @@ GPS провайдер Сетевой провайдер - Смешанный провайдер Состояние diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 172d406..0e59c67 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -21,7 +21,6 @@ GPS provajder Provajder Mreže - Oba zajedno provajdera Status diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 93cf48b..c6b6caf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -21,7 +21,6 @@ GPS provider Network provider - Mixed provider Status diff --git a/app/src/main/res/values/values.xml b/app/src/main/res/values/values.xml index 6a7ddb1..892f401 100644 --- a/app/src/main/res/values/values.xml +++ b/app/src/main/res/values/values.xml @@ -4,7 +4,6 @@ gps network - mixed