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.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.location.LocationManager;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceActivity; import android.preference.PreferenceActivity;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
@@ -48,6 +49,12 @@ public class MainActivity extends PreferenceActivity implements OnSharedPreferen
firstLaunch = !PreferenceManager.getDefaultSharedPreferences(this).contains(KEY_PORT); firstLaunch = !PreferenceManager.getDefaultSharedPreferences(this).contains(KEY_PORT);
addPreferencesFromResource(R.xml.preferences); addPreferencesFromResource(R.xml.preferences);
initPreferences(); 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)) { if (getPreferenceScreen().getSharedPreferences().getBoolean(KEY_STATUS, false)) {
setPreferencesEnabled(false); setPreferencesEnabled(false);
startService(new Intent(this, TrackingService.class)); startService(new Intent(this, TrackingService.class));
+41 -107
Просмотреть файл
@@ -19,146 +19,80 @@ import android.annotation.TargetApi;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.location.Location; import android.location.Location;
import android.location.LocationListener; import android.location.LocationListener;
import android.location.LocationManager; import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.BatteryManager; import android.os.BatteryManager;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.preference.PreferenceManager;
import android.util.Log; import android.util.Log;
public class PositionProvider { public class PositionProvider implements LocationListener {
private static final String TAG = PositionProvider.class.getSimpleName(); 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 { public interface PositionListener {
void onPositionUpdate(Position position); void onPositionUpdate(Position position);
} }
private final Handler handler;
private final LocationManager locationManager;
private final long period;
private final PositionListener listener; private final PositionListener listener;
private final Context context; private final Context context;
private final SharedPreferences preferences;
private final LocationManager locationManager;
private String deviceId; private String deviceId;
private String type;
private final long period;
private boolean useFine; public PositionProvider(Context context, PositionListener listener) {
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;
this.context = context; this.context = context;
this.deviceId = deviceId; this.listener = listener;
// Determine providers preferences = PreferenceManager.getDefaultSharedPreferences(context);
if (type.equals(PROVIDER_MIXED)) { locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
useFine = true;
useCoarse = true; deviceId = preferences.getString(MainActivity.KEY_DEVICE, null);
} else if (type.equals(LocationManager.GPS_PROVIDER)) { type = preferences.getString(MainActivity.KEY_PROVIDER, null);
useFine = true; period = Integer.parseInt(preferences.getString(MainActivity.KEY_INTERVAL, null)) * 1000;
} else if (type.equals(LocationManager.NETWORK_PROVIDER)) {
useCoarse = true;
}
} }
public void startUpdates() { public void startUpdates() {
if (useFine) { locationManager.requestLocationUpdates(type, period, 0, this);
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);
} }
public void stopUpdates() { public void stopUpdates() {
handler.removeCallbacks(updateTask); locationManager.removeUpdates(this);
locationManager.removeUpdates(fineLocationListener);
locationManager.removeUpdates(coarseLocationListener);
} }
private final Runnable updateTask = new Runnable() { private long lastTime;
private long lastTime; @Override
public void onLocationChanged(Location location) {
private boolean tryProvider(String provider) { if (location != null && location.getTime() != lastTime) {
Location location = locationManager.getLastKnownLocation(provider); Log.i(TAG, "location new");
lastTime = location.getTime();
/*if (location != null) { listener.onPositionUpdate(new Position(deviceId, location, getBatteryLevel()));
Toast.makeText(context, "phone: " + new Date() + "\ngps: " + new Date(location.getTime()), Toast.LENGTH_LONG).show(); } else {
} else { Log.i(TAG, location != null ? "location old" : "location nil");
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 @Override
public void run() { public void onStatusChanged(String provider, int status, Bundle extras) {
if (useFine && tryProvider(LocationManager.GPS_PROVIDER)) { Log.i(TAG, "provider status");
} else if (useCoarse && tryProvider(LocationManager.NETWORK_PROVIDER)) { }
} else {
listener.onPositionUpdate(null);
}
handler.postDelayed(this, period);
}
}; @Override
public void onProviderEnabled(String provider) {
private final InternalLocationListener fineLocationListener = new InternalLocationListener(); Log.i(TAG, "provider enabled");
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 onProviderDisabled(String provider) {
Log.i(TAG, "provider disabled");
} }
@TargetApi(Build.VERSION_CODES.ECLAIR) @TargetApi(Build.VERSION_CODES.ECLAIR)
+1 -4
Просмотреть файл
@@ -45,10 +45,7 @@ public class TrackingController implements PositionProvider.PositionListener, Ne
this.context = context; this.context = context;
handler = new Handler(); handler = new Handler();
preferences = PreferenceManager.getDefaultSharedPreferences(context); preferences = PreferenceManager.getDefaultSharedPreferences(context);
positionProvider = new PositionProvider(context, this, 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);
databaseHelper = new DatabaseHelper(context); databaseHelper = new DatabaseHelper(context);
networkManager = new NetworkManager(context, this); networkManager = new NetworkManager(context, this);
isOnline = networkManager.isOnline(); isOnline = networkManager.isOnline();
-1
Просмотреть файл
@@ -21,7 +21,6 @@
<string-array name="settings_provider_names"> <string-array name="settings_provider_names">
<item>GPS</item> <item>GPS</item>
<item>Mobilní síť</item> <item>Mobilní síť</item>
<item>Obojí</item>
</string-array> </string-array>
<string name="menu_status">Stav</string> <string name="menu_status">Stav</string>
-1
Просмотреть файл
@@ -21,7 +21,6 @@
<string-array name="settings_provider_names"> <string-array name="settings_provider_names">
<item>GPS udbyder</item> <item>GPS udbyder</item>
<item>Netværks udbyder</item> <item>Netværks udbyder</item>
<item>Mixet udbyder</item>
</string-array> </string-array>
<string name="menu_status">Status</string> <string name="menu_status">Status</string>
-1
Просмотреть файл
@@ -21,7 +21,6 @@
<string-array name="settings_provider_names"> <string-array name="settings_provider_names">
<item>GPS</item> <item>GPS</item>
<item>Netzwerk</item> <item>Netzwerk</item>
<item>Gemischt</item>
</string-array> </string-array>
<string name="menu_status">Status</string> <string name="menu_status">Status</string>
-1
Просмотреть файл
@@ -21,7 +21,6 @@
<string-array name="settings_provider_names"> <string-array name="settings_provider_names">
<item>Proveedor GPS</item> <item>Proveedor GPS</item>
<item>Proveedor de red</item> <item>Proveedor de red</item>
<item>Proveedor mixto</item>
</string-array> </string-array>
<string name="menu_status">Estado</string> <string name="menu_status">Estado</string>
-1
Просмотреть файл
@@ -21,7 +21,6 @@
<string-array name="settings_provider_names"> <string-array name="settings_provider_names">
<item>Mode GPS uniquement</item> <item>Mode GPS uniquement</item>
<item>Mode cellulaire uniquement</item> <item>Mode cellulaire uniquement</item>
<item>Mode hybride</item>
</string-array> </string-array>
<string name="menu_status">Etat</string> <string name="menu_status">Etat</string>
-1
Просмотреть файл
@@ -21,7 +21,6 @@
<string-array name="settings_provider_names"> <string-array name="settings_provider_names">
<item>GPS-lokalisering</item> <item>GPS-lokalisering</item>
<item>Nettverkslokalisering</item> <item>Nettverkslokalisering</item>
<item>Blandet lokalisering</item>
</string-array> </string-array>
<string name="menu_status">Status</string> <string name="menu_status">Status</string>
-1
Просмотреть файл
@@ -21,7 +21,6 @@
<string-array name="settings_provider_names"> <string-array name="settings_provider_names">
<item>Provedor GPS</item> <item>Provedor GPS</item>
<item>Provedor Rede</item> <item>Provedor Rede</item>
<item>Provedor Misto</item>
</string-array> </string-array>
<string name="menu_status">Status</string> <string name="menu_status">Status</string>
-1
Просмотреть файл
@@ -21,7 +21,6 @@
<string-array name="settings_provider_names"> <string-array name="settings_provider_names">
<item>GPS провайдер</item> <item>GPS провайдер</item>
<item>Сетевой провайдер</item> <item>Сетевой провайдер</item>
<item>Смешанный провайдер</item>
</string-array> </string-array>
<string name="menu_status">Состояние</string> <string name="menu_status">Состояние</string>
-1
Просмотреть файл
@@ -21,7 +21,6 @@
<string-array name="settings_provider_names"> <string-array name="settings_provider_names">
<item>GPS provajder</item> <item>GPS provajder</item>
<item>Provajder Mreže</item> <item>Provajder Mreže</item>
<item>Oba zajedno provajdera</item>
</string-array> </string-array>
<string name="menu_status">Status</string> <string name="menu_status">Status</string>
-1
Просмотреть файл
@@ -21,7 +21,6 @@
<string-array name="settings_provider_names"> <string-array name="settings_provider_names">
<item>GPS provider</item> <item>GPS provider</item>
<item>Network provider</item> <item>Network provider</item>
<item>Mixed provider</item>
</string-array> </string-array>
<string name="menu_status">Status</string> <string name="menu_status">Status</string>
-1
Просмотреть файл
@@ -4,7 +4,6 @@
<string-array name="settings_provider_values" translatable="false"> <string-array name="settings_provider_values" translatable="false">
<item>gps</item> <item>gps</item>
<item>network</item> <item>network</item>
<item>mixed</item>
</string-array> </string-array>
</resources> </resources>