Merge change 2182 into donut

* changes:
  location: Replace ILocationCollector interface with new ILocationProvider method
This commit is contained in:
Android (Google) Code Review
2009-05-21 08:52:25 -07:00
14 changed files with 32 additions and 114 deletions

View File

@ -135,7 +135,6 @@ LOCAL_SRC_FILES += \
location/java/android/location/IGeocodeProvider.aidl \ location/java/android/location/IGeocodeProvider.aidl \
location/java/android/location/IGpsStatusListener.aidl \ location/java/android/location/IGpsStatusListener.aidl \
location/java/android/location/IGpsStatusProvider.aidl \ location/java/android/location/IGpsStatusProvider.aidl \
location/java/android/location/ILocationCollector.aidl \
location/java/android/location/ILocationListener.aidl \ location/java/android/location/ILocationListener.aidl \
location/java/android/location/ILocationManager.aidl \ location/java/android/location/ILocationManager.aidl \
location/java/android/location/ILocationProvider.aidl \ location/java/android/location/ILocationProvider.aidl \

View File

@ -529,17 +529,6 @@
visibility="public" visibility="public"
> >
</field> </field>
<field name="INSTALL_LOCATION_COLLECTOR"
type="java.lang.String"
transient="false"
volatile="false"
value="&quot;android.permission.INSTALL_LOCATION_COLLECTOR&quot;"
static="true"
final="true"
deprecated="not deprecated"
visibility="public"
>
</field>
<field name="INSTALL_LOCATION_PROVIDER" <field name="INSTALL_LOCATION_PROVIDER"
type="java.lang.String" type="java.lang.String"
transient="false" transient="false"

View File

@ -220,12 +220,6 @@
android:label="@string/permlab_installLocationProvider" android:label="@string/permlab_installLocationProvider"
android:description="@string/permdesc_installLocationProvider" /> android:description="@string/permdesc_installLocationProvider" />
<!-- Allows an application to install a location collector into the Location Manager -->
<permission android:name="android.permission.INSTALL_LOCATION_COLLECTOR"
android:protectionLevel="signatureOrSystem"
android:label="@string/permlab_installLocationCollector"
android:description="@string/permdesc_installLocationCollector" />
<!-- ======================================= --> <!-- ======================================= -->
<!-- Permissions for accessing networks --> <!-- Permissions for accessing networks -->
<!-- ======================================= --> <!-- ======================================= -->

View File

@ -769,13 +769,7 @@
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. --> <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permdesc_installLocationProvider">Create mock location sources for testing. <string name="permdesc_installLocationProvider">Create mock location sources for testing.
Malicious applications can use this to override the location and/or status returned by real Malicious applications can use this to override the location and/or status returned by real
location sources such as GPS or Network providers.</string> location sources such as GPS or Network providers or monitor and report your location to an external source.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permlab_installLocationCollector">permission to install a location collector</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permdesc_installLocationCollector">Create mock location sources for testing.
Malicious applications can use this to monitor and report your location to an external source.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. --> <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permlab_accessFineLocation">fine (GPS) location</string> <string name="permlab_accessFineLocation">fine (GPS) location</string>

View File

@ -133,7 +133,6 @@
<assign-permission name="android.permission.READ_FRAME_BUFFER" uid="shell" /> <assign-permission name="android.permission.READ_FRAME_BUFFER" uid="shell" />
<assign-permission name="android.permission.DEVICE_POWER" uid="shell" /> <assign-permission name="android.permission.DEVICE_POWER" uid="shell" />
<assign-permission name="android.permission.INSTALL_LOCATION_PROVIDER" uid="shell" /> <assign-permission name="android.permission.INSTALL_LOCATION_PROVIDER" uid="shell" />
<assign-permission name="android.permission.INSTALL_LOCATION_COLLECTOR" uid="shell" />
<assign-permission name="android.permission.MODIFY_AUDIO_SETTINGS" uid="media" /> <assign-permission name="android.permission.MODIFY_AUDIO_SETTINGS" uid="media" />
<assign-permission name="android.permission.ACCESS_DRM" uid="media" /> <assign-permission name="android.permission.ACCESS_DRM" uid="media" />

View File

@ -1,36 +0,0 @@
/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.location;
import android.location.Location;
/**
* Listens for GPS and cell/wifi changes and anonymously uploads to server
* for improving quality of service of NetworkLocationProvider.
* This service is only enabled when the user has enabled the
* network location provider.
*
* {@hide}
*/
oneway interface ILocationCollector {
/**
* Updates GPS location if collection is enabled
*
* @param location location object
*/
void updateLocation(in Location location);
}

View File

@ -20,7 +20,6 @@ import android.app.PendingIntent;
import android.location.Address; import android.location.Address;
import android.location.IGeocodeProvider; import android.location.IGeocodeProvider;
import android.location.IGpsStatusListener; import android.location.IGpsStatusListener;
import android.location.ILocationCollector;
import android.location.ILocationListener; import android.location.ILocationListener;
import android.location.ILocationProvider; import android.location.ILocationProvider;
import android.location.Location; import android.location.Location;
@ -83,6 +82,5 @@ interface ILocationManager
/* for installing external Location Providers */ /* for installing external Location Providers */
void installLocationProvider(String name, ILocationProvider provider); void installLocationProvider(String name, ILocationProvider provider);
void installLocationCollector(ILocationCollector collector);
void installGeocodeProvider(IGeocodeProvider provider); void installGeocodeProvider(IGeocodeProvider provider);
} }

View File

@ -16,6 +16,7 @@
package android.location; package android.location;
import android.location.Location;
import android.os.Bundle; import android.os.Bundle;
/** /**
@ -41,6 +42,7 @@ interface ILocationProvider {
void enableLocationTracking(boolean enable); void enableLocationTracking(boolean enable);
void setMinTime(long minTime); void setMinTime(long minTime);
void updateNetworkState(int state); void updateNetworkState(int state);
void updateLocation(in Location location);
boolean sendExtraCommand(String command, inout Bundle extras); boolean sendExtraCommand(String command, inout Bundle extras);
void addListener(int uid); void addListener(int uid);
void removeListener(int uid); void removeListener(int uid);

View File

@ -1278,27 +1278,6 @@ public class LocationManager {
} }
} }
/**
* Installs a location collector.
*
* @param provider Binder interface for the location collector
*
* @return true if the command succeeds.
*
* Requires the android.permission.INSTALL_LOCATION_COLLECTOR permission.
*
* {@hide}
*/
public boolean installLocationCollector(ILocationCollector collector) {
try {
mService.installLocationCollector(collector);
return true;
} catch (RemoteException e) {
Log.e(TAG, "RemoteException in setLocationCollector: ", e);
return false;
}
}
/** /**
* Installs a geocoder server. * Installs a geocoder server.
* *

View File

@ -405,6 +405,13 @@ public class GpsLocationProvider extends ILocationProvider.Stub {
} }
} }
/**
* This is called to inform us when another location provider returns a location.
* Someday we might use this for network location injection to aid the GPS
*/
public void updateLocation(Location location) {
}
/** /**
* Returns true if the provider requires access to a * Returns true if the provider requires access to a
* satellite-based positioning system (e.g., GPS), false * satellite-based positioning system (e.g., GPS), false

View File

@ -219,6 +219,14 @@ public class LocationProviderProxy implements IBinder.DeathRecipient {
} }
} }
public void updateLocation(Location location) {
try {
mProvider.updateLocation(location);
} catch (RemoteException e) {
Log.e(TAG, "updateLocation failed", e);
}
}
public boolean sendExtraCommand(String command, Bundle extras) { public boolean sendExtraCommand(String command, Bundle extras) {
try { try {
return mProvider.sendExtraCommand(command, extras); return mProvider.sendExtraCommand(command, extras);

View File

@ -172,6 +172,9 @@ public class MockProvider extends ILocationProvider.Stub {
public void updateNetworkState(int state) { public void updateNetworkState(int state) {
} }
public void updateLocation(Location location) {
}
public boolean sendExtraCommand(String command, Bundle extras) { public boolean sendExtraCommand(String command, Bundle extras) {
return false; return false;
} }

View File

@ -46,7 +46,6 @@ import android.location.Address;
import android.location.IGeocodeProvider; import android.location.IGeocodeProvider;
import android.location.IGpsStatusListener; import android.location.IGpsStatusListener;
import android.location.IGpsStatusProvider; import android.location.IGpsStatusProvider;
import android.location.ILocationCollector;
import android.location.ILocationListener; import android.location.ILocationListener;
import android.location.ILocationManager; import android.location.ILocationManager;
import android.location.ILocationProvider; import android.location.ILocationProvider;
@ -107,8 +106,6 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
android.Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS; android.Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS;
private static final String INSTALL_LOCATION_PROVIDER = private static final String INSTALL_LOCATION_PROVIDER =
android.Manifest.permission.INSTALL_LOCATION_PROVIDER; android.Manifest.permission.INSTALL_LOCATION_PROVIDER;
private static final String INSTALL_LOCATION_COLLECTOR =
android.Manifest.permission.INSTALL_LOCATION_COLLECTOR;
// Set of providers that are explicitly enabled // Set of providers that are explicitly enabled
private final Set<String> mEnabledProviders = new HashSet<String>(); private final Set<String> mEnabledProviders = new HashSet<String>();
@ -171,9 +168,6 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
private HashMap<String,Location> mLastKnownLocation = private HashMap<String,Location> mLastKnownLocation =
new HashMap<String,Location>(); new HashMap<String,Location>();
// Location collector
private ILocationCollector mCollector;
private int mNetworkState = LocationProvider.TEMPORARILY_UNAVAILABLE; private int mNetworkState = LocationProvider.TEMPORARILY_UNAVAILABLE;
// for Settings change notification // for Settings change notification
@ -630,16 +624,6 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
} }
} }
public void installLocationCollector(ILocationCollector collector) {
if (mContext.checkCallingOrSelfPermission(INSTALL_LOCATION_COLLECTOR)
!= PackageManager.PERMISSION_GRANTED) {
throw new SecurityException("Requires INSTALL_LOCATION_COLLECTOR permission");
}
// FIXME - only support one collector
mCollector = collector;
}
public void installGeocodeProvider(IGeocodeProvider provider) { public void installGeocodeProvider(IGeocodeProvider provider) {
if (mContext.checkCallingOrSelfPermission(INSTALL_LOCATION_PROVIDER) if (mContext.checkCallingOrSelfPermission(INSTALL_LOCATION_PROVIDER)
!= PackageManager.PERMISSION_GRANTED) { != PackageManager.PERMISSION_GRANTED) {
@ -1619,23 +1603,19 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
synchronized (mLock) { synchronized (mLock) {
Location location = (Location) msg.obj; Location location = (Location) msg.obj;
String provider = location.getProvider();
if (mCollector != null && // notify other providers of the new location
LocationManager.GPS_PROVIDER.equals(location.getProvider())) { for (int i = mProviders.size() - 1; i >= 0; i--) {
try { LocationProviderProxy proxy = mProviders.get(i);
mCollector.updateLocation(location); if (!provider.equals(proxy.getName())) {
} catch (RemoteException e) { proxy.updateLocation(location);
Log.w(TAG, "mCollector.updateLocation failed");
mCollector = null;
} }
} }
String provider = location.getProvider(); if (isAllowedBySettingsLocked(provider)) {
if (!isAllowedBySettingsLocked(provider)) { handleLocationChangedLocked(location);
return;
} }
handleLocationChangedLocked(location);
} }
} }
} catch (Exception e) { } catch (Exception e) {
@ -1935,7 +1915,6 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
synchronized (mLock) { synchronized (mLock) {
pw.println("Current Location Manager state:"); pw.println("Current Location Manager state:");
pw.println(" sProvidersLoaded=" + sProvidersLoaded); pw.println(" sProvidersLoaded=" + sProvidersLoaded);
pw.println(" mCollector=" + mCollector);
pw.println(" Listeners:"); pw.println(" Listeners:");
int N = mReceivers.size(); int N = mReceivers.size();
for (int i=0; i<N; i++) { for (int i=0; i<N; i++) {

View File

@ -159,6 +159,9 @@ public class TestLocationProvider extends ILocationProvider.Stub {
public void updateNetworkState(int state) { public void updateNetworkState(int state) {
} }
public void updateLocation(Location location) {
}
public boolean sendExtraCommand(String command, Bundle extras) { public boolean sendExtraCommand(String command, Bundle extras) {
return false; return false;
} }