Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2ca3ae10 authored by David Hu's avatar David Hu Committed by Android (Google) Code Review
Browse files

Merge "Update the location tracker test app"

parents cf32f966 722876a9
Loading
Loading
Loading
Loading
+17 −5
Original line number Diff line number Diff line
@@ -16,15 +16,14 @@
* 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_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_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_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>
@@ -45,4 +44,17 @@
    <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
+9 −8
Original line number Diff line number Diff line
@@ -21,15 +21,16 @@
    <PreferenceCategory android:title="@string/update_preference">
        <EditTextPreference android:key="mintime_preference"
            android:defaultValue="0"
            android:title="@string/title_mintime_preference"
            android:summary="@string/summary_mintime_preference"
            android:dialogTitle="@string/dialog_title_mintime_preference" />
            android:title="@string/title_update_preference"
            android:summary="@string/summary_update_preference"
            android:dialogTitle="@string/dialog_update_preference" />

        <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" />
   <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"/>

    </PreferenceCategory>

+6 −11
Original line number Diff line number Diff line
@@ -16,17 +16,12 @@

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;
@@ -35,6 +30,10 @@ 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;
@@ -160,12 +159,8 @@ public class TrackerActivity extends ListActivity {

    private void exportKML() {
        String exportFileName = getUniqueFileName(
                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,
                "fused" + ".kml");
        exportFile(null, exportFileName,
                new TrackerDataHelper(this, TrackerDataHelper.KML_FORMATTER));
    }

+40 −77
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package com.android.locationtracker;

import com.android.locationtracker.data.TrackerDataHelper;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -28,6 +26,7 @@ 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;
@@ -43,10 +42,9 @@ import android.telephony.gsm.GsmCellLocation;
import android.util.Log;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashSet;
import com.android.locationtracker.data.TrackerDataHelper;

import java.util.List;
import java.util.Set;

/**
 * Location Tracking service
@@ -56,13 +54,10 @@ import java.util.Set;
 */
public class TrackerService extends Service {

    private List<LocationTrackingListener> mListeners;
    private LocationTrackingListener mListener;

    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;
@@ -79,7 +74,7 @@ public class TrackerService extends Service {

    // preference constants
    private static final String MIN_TIME_PREF = "mintime_preference";
    private static final String MIN_DIS_PREF = "mindistance_preference";
    private static final String POWER_PREF = "power_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";
@@ -103,43 +98,34 @@ public class TrackerService extends Service {
     * @param startId
     */
    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
    public int onStartCommand(Intent intent, int flags, int startId) {
        mNetworkLocation = null;

        initLocationListeners();
        Toast.makeText(this, "Tracking service started", Toast.LENGTH_SHORT);
        return START_STICKY;
    }

    private synchronized void initLocationListeners() {
        mTrackerData = new TrackerDataHelper(this);
        LocationManager lm = getLocationManager();

        mTrackedProviders = getTrackedProviders();

        List<String> locationProviders = lm.getAllProviders();
        mListeners = new ArrayList<LocationTrackingListener>(
                locationProviders.size());
        mListener = new LocationTrackingListener();
        LocationManager lm = getLocationManager();

        long minUpdateTime = getLocationUpdateTime();
        float minDistance = getLocationMinDistance();

        for (String providerName : locationProviders) {
            if (mTrackedProviders.contains(providerName)) {
                Log.d(LOG_TAG, "Adding location listener for provider " +
                        providerName);
        int powerConsumption = getPowerConsumption();
        LocationRequest lr = LocationRequest.create();
        lr.setInterval(minUpdateTime);
        lr.setQuality(powerConsumption);
        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);
            }
                    "start listening to location update : %d ms; %d power consumption",
                     minUpdateTime, powerConsumption));
        }
        Log.d(LOG_TAG, "Adding location listener");
        lm.requestLocationUpdates(lr, mListener, null);


        mTelephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

        if (doDebugLogging()) {
@@ -168,30 +154,10 @@ 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);
    }
@@ -200,17 +166,6 @@ 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");
@@ -223,6 +178,15 @@ 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
     */
@@ -239,13 +203,11 @@ public class TrackerService extends Service {
     */
    protected synchronized void stopListeners() {
        LocationManager lm = getLocationManager();
        if (mListeners != null) {
            for (LocationTrackingListener listener : mListeners) {
                lm.removeUpdates(listener);
            }
            mListeners.clear();
        if (mListener != null) {
            lm.removeUpdates(mListener);
        }
        mListeners = null;

        mListener = null;

        // stop cell state listener
        if (mTelephonyManager != null) {
@@ -366,6 +328,7 @@ public class TrackerService extends Service {
            }
        }

        @Override
        public void onSignalStrengthsChanged(SignalStrength signalStrength) {
            if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {
                String updateMsg = "cdma dBM=" + signalStrength.getCdmaDbm();