Add permissions check for getNetworkType
-Add a function in TelephonyPermissions to check READ_PHONE_STATE or return NETWORK_TYPE_UNKNOWN (soft denial). -Honor the subId in TM or use the default DATA sub when returning the network type. Bug: 132466954 Test: cts - atest TelephonyManagerPermissionTest Change-Id: I4e1767c9dc10acbadec286512752d4bb52059b74
This commit is contained in:
@@ -2246,7 +2246,7 @@ public class TelephonyManager {
|
||||
@UnsupportedAppUsage
|
||||
public String getNetworkOperatorForPhone(int phoneId) {
|
||||
return getTelephonyProperty(phoneId, TelephonyProperties.PROPERTY_OPERATOR_NUMERIC, "");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
@@ -2446,21 +2446,7 @@ public class TelephonyManager {
|
||||
* @return the NETWORK_TYPE_xxxx for current data connection.
|
||||
*/
|
||||
public @NetworkType int getNetworkType() {
|
||||
try {
|
||||
ITelephony telephony = getITelephony();
|
||||
if (telephony != null) {
|
||||
return telephony.getNetworkType();
|
||||
} else {
|
||||
// This can happen when the ITelephony interface is not up yet.
|
||||
return NETWORK_TYPE_UNKNOWN;
|
||||
}
|
||||
} catch(RemoteException ex) {
|
||||
// This shouldn't happen in the normal case
|
||||
return NETWORK_TYPE_UNKNOWN;
|
||||
} catch (NullPointerException ex) {
|
||||
// This could happen before phone restarts due to crashing
|
||||
return NETWORK_TYPE_UNKNOWN;
|
||||
}
|
||||
return getNetworkType(getSubId(SubscriptionManager.getDefaultDataSubscriptionId()));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2491,7 +2477,7 @@ public class TelephonyManager {
|
||||
* @hide
|
||||
*/
|
||||
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
|
||||
@UnsupportedAppUsage
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
|
||||
public int getNetworkType(int subId) {
|
||||
try {
|
||||
ITelephony telephony = getITelephony();
|
||||
|
||||
@@ -459,13 +459,6 @@ interface ITelephony {
|
||||
// Send the special dialer code. The IPC caller must be the current default dialer.
|
||||
void sendDialerSpecialCode(String callingPackageName, String inputCode);
|
||||
|
||||
/**
|
||||
* Returns the network type for data transmission
|
||||
* Legacy call, permission-free
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
int getNetworkType();
|
||||
|
||||
/**
|
||||
* Returns the network type of a subId.
|
||||
* @param subId user preferred subId.
|
||||
|
||||
@@ -102,6 +102,16 @@ public final class TelephonyPermissions {
|
||||
callingPackage, message);
|
||||
}
|
||||
|
||||
/** Identical to checkCallingOrSelfReadPhoneState but never throws SecurityException */
|
||||
public static boolean checkCallingOrSelfReadPhoneStateNoThrow(
|
||||
Context context, int subId, String callingPackage, String message) {
|
||||
try {
|
||||
return checkCallingOrSelfReadPhoneState(context, subId, callingPackage, message);
|
||||
} catch (SecurityException se) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the app with the given pid/uid can read phone state.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user