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
Merged-In: I4e1767c9dc10acbadec286512752d4bb52059b74
Change-Id: I4e1767c9dc10acbadec286512752d4bb52059b74
(cherry picked from commit 39444b39ba)
This commit is contained in:
Nathan Harold
2019-05-21 15:33:04 -07:00
parent 41537638f0
commit 744b57e122
3 changed files with 13 additions and 24 deletions

View File

@@ -2209,7 +2209,7 @@ public class TelephonyManager {
@UnsupportedAppUsage
public String getNetworkOperatorForPhone(int phoneId) {
return getTelephonyProperty(phoneId, TelephonyProperties.PROPERTY_OPERATOR_NUMERIC, "");
}
}
/**
@@ -2412,21 +2412,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()));
}
/**
@@ -2457,7 +2443,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();

View File

@@ -457,13 +457,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.

View File

@@ -75,6 +75,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.
*