Add Location Checks on CellLocation#requestLocationUpdate am: 32deda2df3 am: 3b7647b8d6 am: b169887af7

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1355807

Change-Id: I6f4cb805511cc1ea4601d516fdc69578a05df38a
This commit is contained in:
Nathan Harold
2020-07-09 17:54:47 +00:00
committed by Automerger Merge Worker
2 changed files with 25 additions and 4 deletions

View File

@@ -16,7 +16,9 @@
package android.telephony; package android.telephony;
import android.app.ActivityThread;
import android.compat.annotation.UnsupportedAppUsage; import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.os.RemoteException; import android.os.RemoteException;
import android.telephony.cdma.CdmaCellLocation; import android.telephony.cdma.CdmaCellLocation;
@@ -31,11 +33,25 @@ import com.android.internal.telephony.PhoneConstants;
public abstract class CellLocation { public abstract class CellLocation {
/** /**
* Request an update of the current location. If the location has changed, * This method will not do anything.
* a broadcast will be sent to everyone registered with {@link *
* PhoneStateListener#LISTEN_CELL_LOCATION}. * Whenever location changes, a callback will automatically be be sent to
* all registrants of {@link PhoneStateListener#LISTEN_CELL_LOCATION}.
*
* <p>This method is a no-op for callers targeting SDK level 31 or greater.
* <p>This method is a no-op for callers that target SDK level 29 or 30 and lack
* {@link android.Manifest.permission#ACCESS_FINE_LOCATION}.
* <p>This method is a no-op for callers that target SDK level 28 or below and lack
* {@link android.Manifest.permission#ACCESS_COARSE_LOCATION}.
*
* Callers wishing to request a single location update should use
* {@link TelephonyManager#requestCellInfoUpdate}.
*/ */
public static void requestLocationUpdate() { public static void requestLocationUpdate() {
// Since this object doesn't have a context, this is the best we can do.
final Context appContext = ActivityThread.currentApplication();
if (appContext == null) return; // should never happen
try { try {
ITelephony phone = ITelephony.Stub.asInterface( ITelephony phone = ITelephony.Stub.asInterface(
TelephonyFrameworkInitializer TelephonyFrameworkInitializer
@@ -43,7 +59,7 @@ public abstract class CellLocation {
.getTelephonyServiceRegisterer() .getTelephonyServiceRegisterer()
.get()); .get());
if (phone != null) { if (phone != null) {
phone.updateServiceLocation(); phone.updateServiceLocationWithPackageName(appContext.getOpPackageName());
} }
} catch (RemoteException ex) { } catch (RemoteException ex) {
// ignore it // ignore it

View File

@@ -227,6 +227,11 @@ interface ITelephony {
@UnsupportedAppUsage @UnsupportedAppUsage
void updateServiceLocation(); void updateServiceLocation();
/**
* Version of updateServiceLocation that records the caller and validates permissions.
*/
void updateServiceLocationWithPackageName(String callingPkg);
/** /**
* Request to update location information for a subscrition in service state * Request to update location information for a subscrition in service state
* @param subId user preferred subId. * @param subId user preferred subId.