Add hidden API to support allowed networks reason

Add hidden API to support allowed networks type for
specific reason like power.

Bug: 156709797
Test: system test
Change-Id: If4424d7d94ac26ad31725a1658dad5751d0d2629
This commit is contained in:
Sooraj Sasindran
2020-06-03 00:40:24 -07:00
parent 7154ce117c
commit 7e4cd920e7
2 changed files with 163 additions and 0 deletions

View File

@@ -8197,6 +8197,140 @@ public class TelephonyManager {
return false;
}
/** @hide */
@IntDef({
ALLOWED_NETWORK_TYPES_REASON_POWER
})
@Retention(RetentionPolicy.SOURCE)
public @interface AllowedNetworkTypesReason{}
/**
* To indicate allowed network type change is requested by power manager.
* Power Manger configuration won't affect the settings configured through
* {@link setAllowedNetworkTypes} and will result in allowing network types that are in both
* configurations (i.e intersection of both sets).
* @hide
*/
public static final int ALLOWED_NETWORK_TYPES_REASON_POWER = 0;
/**
* Set the allowed network types of the device and
* provide the reason triggering the allowed network change.
* This can be called for following reasons
* <ol>
* <li>Allowed network types control by power manager
* {@link #ALLOWED_NETWORK_TYPES_REASON_POWER}
* </ol>
* This API will result in allowing an intersection of allowed network types for all reasons,
* including the configuration done through {@link setAllowedNetworkTypes}.
* While this API and {@link setAllowedNetworkTypes} is controlling allowed network types
* on device, user preference will still be set through {@link #setPreferredNetworkTypeBitmask}.
* Thus resultant network type configured on modem will be an intersection of the network types
* from setAllowedNetworkTypesForReason, {@link setAllowedNetworkTypes}
* and {@link #setPreferredNetworkTypeBitmask}.
*
* @param reason the reason the allowed network type change is taking place
* @param allowedNetworkTypes The bitmask of allowed network types.
* @throws IllegalStateException if the Telephony process is not currently available.
* @throws IllegalArgumentException if invalid AllowedNetworkTypesReason is passed.
* @hide
*/
@RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)
public void setAllowedNetworkTypesForReason(@AllowedNetworkTypesReason int reason,
@NetworkTypeBitMask long allowedNetworkTypes) {
if (reason != ALLOWED_NETWORK_TYPES_REASON_POWER) {
throw new IllegalArgumentException("invalid AllowedNetworkTypesReason.");
}
try {
ITelephony telephony = getITelephony();
if (telephony != null) {
telephony.setAllowedNetworkTypesForReason(getSubId(), reason,
allowedNetworkTypes);
} else {
throw new IllegalStateException("telephony service is null.");
}
} catch (RemoteException ex) {
Rlog.e(TAG, "setAllowedNetworkTypesForReason RemoteException", ex);
ex.rethrowFromSystemServer();
}
}
/**
* Get the allowed network types for certain reason.
*
* {@link #getAllowedNetworkTypesForReason} returns allowed network type for a
* specific reason. For effective allowed network types configured on device,
* query {@link getEffectiveAllowedNetworkTypes}
*
* <p>Requires Permission:
* {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE READ_PRIVILEGED_PHONE_STATE}
* or that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}).
*s
* @param reason the reason the allowed network type change is taking place
* @return the allowed network type bitmask
* @throws IllegalStateException if the Telephony process is not currently available.
* @throws IllegalArgumentException if invalid AllowedNetworkTypesReason is passed.
* @hide
*/
@RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public @NetworkTypeBitMask long getAllowedNetworkTypesForReason(
@AllowedNetworkTypesReason int reason) {
if (reason != ALLOWED_NETWORK_TYPES_REASON_POWER) {
throw new IllegalArgumentException("invalid AllowedNetworkTypesReason.");
}
try {
ITelephony telephony = getITelephony();
if (telephony != null) {
return telephony.getAllowedNetworkTypesForReason(getSubId(), reason);
} else {
throw new IllegalStateException("telephony service is null.");
}
} catch (RemoteException ex) {
Rlog.e(TAG, "getAllowedNetworkTypesForReason RemoteException", ex);
ex.rethrowFromSystemServer();
}
return -1;
}
/**
* Get bit mask of all network types.
*
* @return bit mask of all network types
* @hide
*/
public static @NetworkTypeBitMask long getAllNetworkTypesBitmask() {
return NETWORK_STANDARDS_FAMILY_BITMASK_3GPP | NETWORK_STANDARDS_FAMILY_BITMASK_3GPP2;
}
/**
* Get the allowed network types configured on the device.
* This API will return an intersection of allowed network types for all reasons,
* including the configuration done through setAllowedNetworkTypes
*
* <p>Requires Permission:
* {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE READ_PRIVILEGED_PHONE_STATE}
* or that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}).
*
* @return the allowed network type bitmask
* @throws IllegalStateException if the Telephony process is not currently available.
* @hide
*/
@RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public @NetworkTypeBitMask long getEffectiveAllowedNetworkTypes() {
try {
ITelephony telephony = getITelephony();
if (telephony != null) {
return telephony.getEffectiveAllowedNetworkTypes(getSubId());
} else {
throw new IllegalStateException("telephony service is null.");
}
} catch (RemoteException ex) {
Rlog.e(TAG, "getEffectiveAllowedNetworkTypes RemoteException", ex);
ex.rethrowFromSystemServer();
}
return -1;
}
/**
* Set the preferred network type to global mode which includes LTE, CDMA, EvDo and GSM/WCDMA.
*

View File

@@ -955,6 +955,35 @@ interface ITelephony {
*/
boolean setAllowedNetworkTypes(int subId, long allowedNetworkTypes);
/**
* Get the allowed network types for certain reason.
*
* @param subId the id of the subscription.
* @param reason the reason the allowed network type change is taking place
* @return allowedNetworkTypes the allowed network types.
*/
long getAllowedNetworkTypesForReason(int subId, int reason);
/**
* Get the effective allowed network types on the device. This API will
* return an intersection of allowed network types for all reasons,
* including the configuration done through setAllowedNetworkTypes
*
* @param subId the id of the subscription.
* @return allowedNetworkTypes the allowed network types.
*/
long getEffectiveAllowedNetworkTypes(int subId);
/**
* Set the allowed network types and provide the reason triggering the allowed network change.
*
* @param subId the id of the subscription.
* @param reason the reason the allowed network type change is taking place
* @param allowedNetworkTypes the allowed network types.
* @return true on success; false on any failure.
*/
boolean setAllowedNetworkTypesForReason(int subId, int reason, long allowedNetworkTypes);
/**
* Set the preferred network type.
* Used for device configuration by some CDMA operators.