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

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

Change-Id: I44159f46bb114dcc181e4974fabcc22c881b5395
This commit is contained in:
Nathan Harold
2020-07-09 17:34:25 +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;
import android.app.ActivityThread;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.os.Bundle;
import android.os.RemoteException;
import android.telephony.cdma.CdmaCellLocation;
@@ -31,11 +33,25 @@ import com.android.internal.telephony.PhoneConstants;
public abstract class CellLocation {
/**
* Request an update of the current location. If the location has changed,
* a broadcast will be sent to everyone registered with {@link
* PhoneStateListener#LISTEN_CELL_LOCATION}.
* This method will not do anything.
*
* 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() {
// 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 {
ITelephony phone = ITelephony.Stub.asInterface(
TelephonyFrameworkInitializer
@@ -43,7 +59,7 @@ public abstract class CellLocation {
.getTelephonyServiceRegisterer()
.get());
if (phone != null) {
phone.updateServiceLocation();
phone.updateServiceLocationWithPackageName(appContext.getOpPackageName());
}
} catch (RemoteException ex) {
// ignore it

View File

@@ -227,6 +227,11 @@ interface ITelephony {
@UnsupportedAppUsage
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
* @param subId user preferred subId.