Merge changes from topic "cp-networkscan-optimize" into rvc-dev

* changes:
  Remove NetworkClass from TelephonyManager
  Add Network Preference Bitmaps
This commit is contained in:
Sarah Chin
2020-02-28 16:48:41 +00:00
committed by Android (Google) Code Review
2 changed files with 79 additions and 76 deletions

View File

@@ -260,24 +260,6 @@ public class RadioAccessFamily implements Parcelable {
return raf;
}
/**
* Returns the highest capability of the RadioAccessFamily (4G > 3G > 2G).
* @param raf The RadioAccessFamily that we wish to filter
* @return The highest radio capability
*/
public static int getHighestRafCapability(int raf) {
if ((LTE & raf) > 0) {
return TelephonyManager.NETWORK_CLASS_4_G;
}
if ((EVDO|HS|WCDMA & raf) > 0) {
return TelephonyManager.NETWORK_CLASS_3_G;
}
if((GSM|CDMA & raf) > 0) {
return TelephonyManager.NETWORK_CLASS_2_G;
}
return TelephonyManager.NETWORK_CLASS_UNKNOWN;
}
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
@PrefNetworkMode
public static int getNetworkTypeFromRaf(int raf) {
@@ -395,4 +377,34 @@ public class RadioAccessFamily implements Parcelable {
}
return result;
}
/**
* Compare two sets of network types to see which is more capable.
*
* This algorithm first tries to see see if a set has a strict superset of RAT support for
* each generation, from newest to oldest; if that results in a tie, then it returns the set
* that supports the most RAT types.
*/
public static int compare(long networkTypeBitmaskL, long networkTypeBitmaskR) {
final long[] prioritizedNetworkClassBitmasks = new long[] {
TelephonyManager.NETWORK_CLASS_BITMASK_5G,
TelephonyManager.NETWORK_CLASS_BITMASK_4G,
TelephonyManager.NETWORK_CLASS_BITMASK_3G,
TelephonyManager.NETWORK_CLASS_BITMASK_2G,
};
long lhsUnique = networkTypeBitmaskL & ~networkTypeBitmaskR;
long rhsUnique = networkTypeBitmaskR & ~networkTypeBitmaskL;
// See if one has a strict super-set of capabilities, generation by generation.
for (long classBitmask : prioritizedNetworkClassBitmasks) {
int result = 0;
if ((lhsUnique & classBitmask) != 0) ++result;
if ((rhsUnique & classBitmask) != 0) --result;
if (result != 0) return result;
}
// Without a clear winner, return the one that supports the most types.
return Long.bitCount(networkTypeBitmaskL) - Long.bitCount(networkTypeBitmaskR);
}
}

View File

@@ -3074,64 +3074,6 @@ public class TelephonyManager {
}
}
/**
* Network Class Definitions.
* Do not change this order, it is used for sorting during emergency calling in
* {@link TelephonyConnectionService#getFirstPhoneForEmergencyCall()}. Any newer technologies
* should be added after the current definitions.
*/
/** Unknown network class. {@hide} */
public static final int NETWORK_CLASS_UNKNOWN = 0;
/** Class of broadly defined "2G" networks. {@hide} */
@UnsupportedAppUsage
public static final int NETWORK_CLASS_2_G = 1;
/** Class of broadly defined "3G" networks. {@hide} */
@UnsupportedAppUsage
public static final int NETWORK_CLASS_3_G = 2;
/** Class of broadly defined "4G" networks. {@hide} */
@UnsupportedAppUsage
public static final int NETWORK_CLASS_4_G = 3;
/** Class of broadly defined "5G" networks. {@hide} */
public static final int NETWORK_CLASS_5_G = 4;
/**
* Return general class of network type, such as "3G" or "4G". In cases
* where classification is contentious, this method is conservative.
*
* @hide
*/
@UnsupportedAppUsage
public static int getNetworkClass(int networkType) {
switch (networkType) {
case NETWORK_TYPE_GPRS:
case NETWORK_TYPE_GSM:
case NETWORK_TYPE_EDGE:
case NETWORK_TYPE_CDMA:
case NETWORK_TYPE_1xRTT:
case NETWORK_TYPE_IDEN:
return NETWORK_CLASS_2_G;
case NETWORK_TYPE_UMTS:
case NETWORK_TYPE_EVDO_0:
case NETWORK_TYPE_EVDO_A:
case NETWORK_TYPE_HSDPA:
case NETWORK_TYPE_HSUPA:
case NETWORK_TYPE_HSPA:
case NETWORK_TYPE_EVDO_B:
case NETWORK_TYPE_EHRPD:
case NETWORK_TYPE_HSPAP:
case NETWORK_TYPE_TD_SCDMA:
return NETWORK_CLASS_3_G;
case NETWORK_TYPE_LTE:
case NETWORK_TYPE_IWLAN:
case NETWORK_TYPE_LTE_CA:
return NETWORK_CLASS_4_G;
case NETWORK_TYPE_NR:
return NETWORK_CLASS_5_G;
default:
return NETWORK_CLASS_UNKNOWN;
}
}
/**
* Returns a string representation of the radio technology (network type)
* currently in use on the device.
@@ -11600,6 +11542,55 @@ public class TelephonyManager {
@SystemApi
public static final long NETWORK_TYPE_BITMASK_IWLAN = (1 << (NETWORK_TYPE_IWLAN -1));
/** @hide */
public static final long NETWORK_CLASS_BITMASK_2G = NETWORK_TYPE_BITMASK_GSM
| NETWORK_TYPE_BITMASK_GPRS
| NETWORK_TYPE_BITMASK_EDGE
| NETWORK_TYPE_BITMASK_CDMA
| NETWORK_TYPE_BITMASK_1xRTT;
/** @hide */
public static final long NETWORK_CLASS_BITMASK_3G = NETWORK_TYPE_BITMASK_EVDO_0
| NETWORK_TYPE_BITMASK_EVDO_A
| NETWORK_TYPE_BITMASK_EVDO_B
| NETWORK_TYPE_BITMASK_EHRPD
| NETWORK_TYPE_BITMASK_HSUPA
| NETWORK_TYPE_BITMASK_HSDPA
| NETWORK_TYPE_BITMASK_HSPA
| NETWORK_TYPE_BITMASK_HSPAP
| NETWORK_TYPE_BITMASK_UMTS
| NETWORK_TYPE_BITMASK_TD_SCDMA;
/** @hide */
public static final long NETWORK_CLASS_BITMASK_4G = NETWORK_TYPE_BITMASK_LTE
| NETWORK_TYPE_BITMASK_LTE_CA
| NETWORK_TYPE_BITMASK_IWLAN;
/** @hide */
public static final long NETWORK_CLASS_BITMASK_5G = NETWORK_TYPE_BITMASK_NR;
/** @hide */
public static final long NETWORK_STANDARDS_FAMILY_BITMASK_3GPP = NETWORK_TYPE_BITMASK_GSM
| NETWORK_TYPE_BITMASK_GPRS
| NETWORK_TYPE_BITMASK_EDGE
| NETWORK_TYPE_BITMASK_HSUPA
| NETWORK_TYPE_BITMASK_HSDPA
| NETWORK_TYPE_BITMASK_HSPA
| NETWORK_TYPE_BITMASK_HSPAP
| NETWORK_TYPE_BITMASK_UMTS
| NETWORK_TYPE_BITMASK_TD_SCDMA
| NETWORK_TYPE_BITMASK_LTE
| NETWORK_TYPE_BITMASK_LTE_CA
| NETWORK_TYPE_BITMASK_NR;
/** @hide */
public static final long NETWORK_STANDARDS_FAMILY_BITMASK_3GPP2 = NETWORK_TYPE_BITMASK_CDMA
| NETWORK_TYPE_BITMASK_1xRTT
| NETWORK_TYPE_BITMASK_EVDO_0
| NETWORK_TYPE_BITMASK_EVDO_A
| NETWORK_TYPE_BITMASK_EVDO_B
| NETWORK_TYPE_BITMASK_EHRPD;
/**
* @return Modem supported radio access family bitmask
*