Simplify position provider class

Этот коммит содержится в:
Anton Tananaev
2015-08-15 21:55:53 +12:00
родитель 92137c83bd
Коммит b560577d96
14 изменённых файлов: 49 добавлений и 122 удалений
+7
Просмотреть файл
@@ -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));
+41 -107
Просмотреть файл
@@ -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)
+1 -4
Просмотреть файл
@@ -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();
-1
Просмотреть файл
@@ -21,7 +21,6 @@
<string-array name="settings_provider_names">
<item>GPS</item>
<item>Mobilní síť</item>
<item>Obojí</item>
</string-array>
<string name="menu_status">Stav</string>
-1
Просмотреть файл
@@ -21,7 +21,6 @@
<string-array name="settings_provider_names">
<item>GPS udbyder</item>
<item>Netværks udbyder</item>
<item>Mixet udbyder</item>
</string-array>
<string name="menu_status">Status</string>
-1
Просмотреть файл
@@ -21,7 +21,6 @@
<string-array name="settings_provider_names">
<item>GPS</item>
<item>Netzwerk</item>
<item>Gemischt</item>
</string-array>
<string name="menu_status">Status</string>
-1
Просмотреть файл
@@ -21,7 +21,6 @@
<string-array name="settings_provider_names">
<item>Proveedor GPS</item>
<item>Proveedor de red</item>
<item>Proveedor mixto</item>
</string-array>
<string name="menu_status">Estado</string>
-1
Просмотреть файл
@@ -21,7 +21,6 @@
<string-array name="settings_provider_names">
<item>Mode GPS uniquement</item>
<item>Mode cellulaire uniquement</item>
<item>Mode hybride</item>
</string-array>
<string name="menu_status">Etat</string>
-1
Просмотреть файл
@@ -21,7 +21,6 @@
<string-array name="settings_provider_names">
<item>GPS-lokalisering</item>
<item>Nettverkslokalisering</item>
<item>Blandet lokalisering</item>
</string-array>
<string name="menu_status">Status</string>
-1
Просмотреть файл
@@ -21,7 +21,6 @@
<string-array name="settings_provider_names">
<item>Provedor GPS</item>
<item>Provedor Rede</item>
<item>Provedor Misto</item>
</string-array>
<string name="menu_status">Status</string>
-1
Просмотреть файл
@@ -21,7 +21,6 @@
<string-array name="settings_provider_names">
<item>GPS провайдер</item>
<item>Сетевой провайдер</item>
<item>Смешанный провайдер</item>
</string-array>
<string name="menu_status">Состояние</string>
-1
Просмотреть файл
@@ -21,7 +21,6 @@
<string-array name="settings_provider_names">
<item>GPS provajder</item>
<item>Provajder Mreže</item>
<item>Oba zajedno provajdera</item>
</string-array>
<string name="menu_status">Status</string>
-1
Просмотреть файл
@@ -21,7 +21,6 @@
<string-array name="settings_provider_names">
<item>GPS provider</item>
<item>Network provider</item>
<item>Mixed provider</item>
</string-array>
<string name="menu_status">Status</string>
-1
Просмотреть файл
@@ -4,7 +4,6 @@
<string-array name="settings_provider_values" translatable="false">
<item>gps</item>
<item>network</item>
<item>mixed</item>
</string-array>
</resources>