summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/LocationTracker/res/values/strings.xml22
-rwxr-xr-xtests/LocationTracker/res/xml/preferences.xml17
-rw-r--r--tests/LocationTracker/src/com/android/locationtracker/TrackerActivity.java17
-rw-r--r--tests/LocationTracker/src/com/android/locationtracker/TrackerService.java117
4 files changed, 101 insertions, 72 deletions
diff --git a/tests/LocationTracker/res/values/strings.xml b/tests/LocationTracker/res/values/strings.xml
index 60a29129574e..ea6bf2d6fa00 100644
--- a/tests/LocationTracker/res/values/strings.xml
+++ b/tests/LocationTracker/res/values/strings.xml
@@ -16,14 +16,15 @@
* limitations under the License.
*/
-->
+
<resources>
<string name="start_service_menu">Start Service</string>
<string name="stop_service_menu">Stop Service</string>
<string name="settings_menu">Settings</string>
<string name="update_preference">Update frequency</string>
- <string name="title_update_preference">Update Interval (seconds)</string>
- <string name="summary_update_preference">The suggested time interval for location updates, in seconds</string>
- <string name="dialog_update_preference">Update Interval (seconds)</string>
+ <string name="title_mintime_preference">Minimum update time</string>
+ <string name="summary_mintime_preference">The suggested minimum time interval for location updates, in seconds</string>
+ <string name="dialog_title_mintime_preference">Minimum update time</string>
<string name="title_mindistance_preference">Minimum distance</string>
<string name="summary_mindistance_preference">Minimum distance interval for location updates, in meters</string>
<string name="dialog_title_mindistance_preference">Minimum distance</string>
@@ -44,17 +45,4 @@
<string name="clear_data">Clear data</string>
<string name="delete_confirm">All current tracking data will be deleted.</string>
<string name="confirm_title">Clear data</string>
- <string name="title_power_preference">Power Consumption</string>
- <string name="summary_power_preference">Select "High" for high accuracy location updates. Select "Low" will avoid high power location work where possible. Select "None" will receive location updates triggered by other applications. </string>
- <string name="dialog_power_preference">Power Consumption</string>
- <string-array name="powerList">
- <item >High</item>
- <item >Low</item>
- <item >None</item>
- </string-array>
- <string-array name="powerValues">
- <item >203</item>
- <item >201</item>
- <item >200</item>
- </string-array>
-</resources> \ No newline at end of file
+</resources>
diff --git a/tests/LocationTracker/res/xml/preferences.xml b/tests/LocationTracker/res/xml/preferences.xml
index bd7f504b9e94..61d48171ecdd 100755
--- a/tests/LocationTracker/res/xml/preferences.xml
+++ b/tests/LocationTracker/res/xml/preferences.xml
@@ -21,16 +21,15 @@
<PreferenceCategory android:title="@string/update_preference">
<EditTextPreference android:key="mintime_preference"
android:defaultValue="0"
- android:title="@string/title_update_preference"
- android:summary="@string/summary_update_preference"
- android:dialogTitle="@string/dialog_update_preference" />
+ android:title="@string/title_mintime_preference"
+ android:summary="@string/summary_mintime_preference"
+ android:dialogTitle="@string/dialog_title_mintime_preference" />
- <ListPreference android:key="power_preference"
- android:title="@string/title_power_preference"
- android:summary="@string/summary_power_preference"
- android:defaultValue="203"
- android:entries="@array/powerList"
- android:entryValues="@array/powerValues"/>
+ <EditTextPreference android:key="mindistance_preference"
+ android:defaultValue="0"
+ android:title="@string/title_mindistance_preference"
+ android:summary="@string/summary_mindistance_preference"
+ android:dialogTitle="@string/dialog_title_mindistance_preference" />
</PreferenceCategory>
diff --git a/tests/LocationTracker/src/com/android/locationtracker/TrackerActivity.java b/tests/LocationTracker/src/com/android/locationtracker/TrackerActivity.java
index 835e5849d6c2..4cfdf6cc1876 100644
--- a/tests/LocationTracker/src/com/android/locationtracker/TrackerActivity.java
+++ b/tests/LocationTracker/src/com/android/locationtracker/TrackerActivity.java
@@ -16,12 +16,17 @@
package com.android.locationtracker;
+import com.android.locationtracker.data.DateUtils;
+import com.android.locationtracker.data.TrackerDataHelper;
+import com.android.locationtracker.data.TrackerListHelper;
+
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.database.Cursor;
+import android.location.LocationManager;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
@@ -30,10 +35,6 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;
-import com.android.locationtracker.data.DateUtils;
-import com.android.locationtracker.data.TrackerDataHelper;
-import com.android.locationtracker.data.TrackerListHelper;
-
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
@@ -159,8 +160,12 @@ public class TrackerActivity extends ListActivity {
private void exportKML() {
String exportFileName = getUniqueFileName(
- "fused" + ".kml");
- exportFile(null, exportFileName,
+ LocationManager.NETWORK_PROVIDER + ".kml");
+ exportFile(LocationManager.NETWORK_PROVIDER, exportFileName,
+ new TrackerDataHelper(this, TrackerDataHelper.KML_FORMATTER));
+ exportFileName = getUniqueFileName(
+ LocationManager.GPS_PROVIDER + ".kml");
+ exportFile(LocationManager.GPS_PROVIDER, exportFileName,
new TrackerDataHelper(this, TrackerDataHelper.KML_FORMATTER));
}
diff --git a/tests/LocationTracker/src/com/android/locationtracker/TrackerService.java b/tests/LocationTracker/src/com/android/locationtracker/TrackerService.java
index 844d13f3e2f5..e2332bfe4b8a 100644
--- a/tests/LocationTracker/src/com/android/locationtracker/TrackerService.java
+++ b/tests/LocationTracker/src/com/android/locationtracker/TrackerService.java
@@ -16,6 +16,8 @@
package com.android.locationtracker;
+import com.android.locationtracker.data.TrackerDataHelper;
+
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -26,7 +28,6 @@ import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
-import android.location.LocationRequest;
import android.net.ConnectivityManager;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
@@ -42,9 +43,10 @@ import android.telephony.gsm.GsmCellLocation;
import android.util.Log;
import android.widget.Toast;
-import com.android.locationtracker.data.TrackerDataHelper;
-
+import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
/**
* Location Tracking service
@@ -54,10 +56,13 @@ import java.util.List;
*/
public class TrackerService extends Service {
- private LocationTrackingListener mListener;
+ private List<LocationTrackingListener> mListeners;
private static final String LOG_TAG = TrackerActivity.LOG_TAG;
+ // controls which location providers to track
+ private Set<String> mTrackedProviders;
+
private TrackerDataHelper mTrackerData;
private TelephonyManager mTelephonyManager;
@@ -74,7 +79,7 @@ public class TrackerService extends Service {
// preference constants
private static final String MIN_TIME_PREF = "mintime_preference";
- private static final String POWER_PREF = "power_preference";
+ private static final String MIN_DIS_PREF = "mindistance_preference";
private static final String GPS_PREF = "gps_preference";
private static final String NETWORK_PREF = "network_preference";
private static final String SIGNAL_PREF = "signal_preference";
@@ -98,34 +103,43 @@ public class TrackerService extends Service {
* @param startId
*/
@Override
- public int onStartCommand(Intent intent, int flags, int startId) {
+ public void onStart(Intent intent, int startId) {
+ super.onStart(intent, startId);
mNetworkLocation = null;
initLocationListeners();
Toast.makeText(this, "Tracking service started", Toast.LENGTH_SHORT);
- return START_STICKY;
}
private synchronized void initLocationListeners() {
mTrackerData = new TrackerDataHelper(this);
-
- mListener = new LocationTrackingListener();
LocationManager lm = getLocationManager();
- long minUpdateTime = getLocationUpdateTime();
- int powerConsumption = getPowerConsumption();
- LocationRequest lr = LocationRequest.create();
- lr.setInterval(minUpdateTime);
- lr.setQuality(powerConsumption);
- if (doDebugLogging()) {
- mTrackerData.writeEntry("init", String.format(
- "start listening to location update : %d ms; %d power consumption",
- minUpdateTime, powerConsumption));
- }
- Log.d(LOG_TAG, "Adding location listener");
- lm.requestLocationUpdates(lr, mListener, null);
+ mTrackedProviders = getTrackedProviders();
+ List<String> locationProviders = lm.getAllProviders();
+ mListeners = new ArrayList<LocationTrackingListener>(
+ locationProviders.size());
+ long minUpdateTime = getLocationUpdateTime();
+ float minDistance = getLocationMinDistance();
+
+ for (String providerName : locationProviders) {
+ if (mTrackedProviders.contains(providerName)) {
+ Log.d(LOG_TAG, "Adding location listener for provider " +
+ providerName);
+ if (doDebugLogging()) {
+ mTrackerData.writeEntry("init", String.format(
+ "start listening to %s : %d ms; %f meters",
+ providerName, minUpdateTime, minDistance));
+ }
+ LocationTrackingListener listener =
+ new LocationTrackingListener();
+ lm.requestLocationUpdates(providerName, minUpdateTime,
+ minDistance, listener);
+ mListeners.add(listener);
+ }
+ }
mTelephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
if (doDebugLogging()) {
@@ -154,10 +168,30 @@ public class TrackerService extends Service {
getPreferences().registerOnSharedPreferenceChangeListener(mPrefListener);
}
+ private Set<String> getTrackedProviders() {
+ Set<String> providerSet = new HashSet<String>();
+
+ if (trackGPS()) {
+ providerSet.add(LocationManager.GPS_PROVIDER);
+ }
+ if (trackNetwork()) {
+ providerSet.add(LocationManager.NETWORK_PROVIDER);
+ }
+ return providerSet;
+ }
+
private SharedPreferences getPreferences() {
return PreferenceManager.getDefaultSharedPreferences(this);
}
+ private boolean trackNetwork() {
+ return getPreferences().getBoolean(NETWORK_PREF, true);
+ }
+
+ private boolean trackGPS() {
+ return getPreferences().getBoolean(GPS_PREF, true);
+ }
+
private boolean doDebugLogging() {
return getPreferences().getBoolean(DEBUG_PREF, false);
}
@@ -166,6 +200,17 @@ public class TrackerService extends Service {
return getPreferences().getBoolean(SIGNAL_PREF, false);
}
+ private float getLocationMinDistance() {
+ try {
+ String disString = getPreferences().getString(MIN_DIS_PREF, "0");
+ return Float.parseFloat(disString);
+ }
+ catch (NumberFormatException e) {
+ Log.e(LOG_TAG, "Invalid preference for location min distance", e);
+ }
+ return 0;
+ }
+
private long getLocationUpdateTime() {
try {
String timeString = getPreferences().getString(MIN_TIME_PREF, "0");
@@ -178,15 +223,6 @@ public class TrackerService extends Service {
return 0;
}
- private int getPowerConsumption(){
- try {
- String power = getPreferences().getString(POWER_PREF, "203");
- return Integer.valueOf(power);
- } catch (NumberFormatException e) {
- Log.e(LOG_TAG, "Invalid preference for power consumption", e);
- }
- return 203; //high
- }
/**
* Shuts down this service
*/
@@ -203,17 +239,19 @@ public class TrackerService extends Service {
*/
protected synchronized void stopListeners() {
LocationManager lm = getLocationManager();
- if (mListener != null) {
- lm.removeUpdates(mListener);
+ if (mListeners != null) {
+ for (LocationTrackingListener listener : mListeners) {
+ lm.removeUpdates(listener);
+ }
+ mListeners.clear();
}
-
- mListener = null;
+ mListeners = null;
// stop cell state listener
if (mTelephonyManager != null) {
mTelephonyManager.listen(mPhoneStateListener, 0);
- }
-
+ }
+
// stop network/wifi listener
if (mNetwork != null) {
unregisterReceiver(mNetwork);
@@ -280,7 +318,7 @@ public class TrackerService extends Service {
/**
* Writes update to tracking file
- *
+ *
* @param provider - name of enabled provider
*/
public void onProviderEnabled(String provider) {
@@ -290,8 +328,8 @@ public class TrackerService extends Service {
}
/**
- * Writes update to tracking file
- *
+ * Writes update to tracking file
+ *
* @param provider - name of provider whose status changed
* @param status - new status
* @param extras - optional set of extra status messages
@@ -328,7 +366,6 @@ public class TrackerService extends Service {
}
}
- @Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {
String updateMsg = "cdma dBM=" + signalStrength.getCdmaDbm();