diff options
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(); |