am f89ea7a5: Merge "Change getLteOnCdmaModeStatic to dynamically determine its result." into honeycomb-LTE

* commit 'f89ea7a5ec3af366a825c2e2cfc4f4c1f05de4c4':
  Change getLteOnCdmaModeStatic to dynamically determine its result.
This commit is contained in:
Wink Saville
2011-05-20 16:14:33 -07:00
committed by Android Git Automerger
2 changed files with 67 additions and 6 deletions

View File

@@ -26,6 +26,11 @@ import android.os.SystemProperties;
import android.util.Config;
import android.util.Log;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* {@hide}
*/
@@ -794,6 +799,34 @@ public abstract class BaseCommands implements CommandsInterface {
protected void onRadioAvailable() {
}
/**
* The contents of the /proc/cmdline file
*/
private static String getProcCmdLine()
{
String cmdline = "";
FileInputStream is = null;
try {
is = new FileInputStream("/proc/cmdline");
byte [] buffer = new byte[2048];
int count = is.read(buffer);
if (count > 0) {
cmdline = new String(buffer, 0, count);
}
} catch (IOException e) {
Log.d(LOG_TAG, "No /proc/cmdline exception=" + e);
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
}
}
}
Log.d(LOG_TAG, "/proc/cmdline=" + cmdline);
return cmdline;
}
/**
* {@inheritDoc}
*/
@@ -802,6 +835,17 @@ public abstract class BaseCommands implements CommandsInterface {
return getLteOnCdmaModeStatic();
}
/** Kernel command line */
private static final String sKernelCmdLine = getProcCmdLine();
/** Pattern for selecting the product type from the kernel command line */
private static final Pattern sProductTypePattern =
Pattern.compile("\\sproduct_type\\s*=\\s*(\\w+)");
/** The ProductType used for LTE on CDMA devices */
private static final String sLteOnCdmaProductType =
SystemProperties.get(TelephonyProperties.PROPERTY_LTE_ON_CDMA_PRODUCT_TYPE, "");
/**
* Return if the current radio is LTE on CDMA. This
* is a tri-state return value as for a period of time
@@ -811,9 +855,24 @@ public abstract class BaseCommands implements CommandsInterface {
* or {@link Phone#LTE_ON_CDMA_TRUE}
*/
public static int getLteOnCdmaModeStatic() {
int retVal = SystemProperties.getInt(TelephonyProperties.PROPERTY_NETWORK_LTE_ON_CDMA,
Phone.LTE_ON_CDMA_FALSE);
Log.d(LOG_TAG, "getLteOnCdmaMode=" + retVal);
int retVal;
String productType;
Matcher matcher = sProductTypePattern.matcher(sKernelCmdLine);
if (matcher.find()) {
productType = matcher.group(1);
if (sLteOnCdmaProductType.equals(productType)) {
retVal = Phone.LTE_ON_CDMA_TRUE;
} else {
retVal = Phone.LTE_ON_CDMA_FALSE;
}
} else {
retVal = Phone.LTE_ON_CDMA_FALSE;
productType = "";
}
Log.d(LOG_TAG, "getLteOnCdmaMode=" + retVal + " product_type='" + productType +
"' lteOnCdmaProductType='" + sLteOnCdmaProductType + "'");
return retVal;
}
}

View File

@@ -72,10 +72,12 @@ public interface TelephonyProperties
*/
static final String PROPERTY_OPERATOR_ISO_COUNTRY = "gsm.operator.iso-country";
/** 'true' if device supports both LTE and CDMA mode of operation.
* Availability: Set only on devices supporting LTE and CDMA.
/**
* The contents of this property is the value of the kernel command line
* product_type variable that corresponds to a product that supports LTE on CDMA.
* {@see BaseCommands#getLteOnCdmaMode()}
*/
static final String PROPERTY_NETWORK_LTE_ON_CDMA = "telephony.lte_on_cdma";
static final String PROPERTY_LTE_ON_CDMA_PRODUCT_TYPE = "telephony.lteOnCdmaProductType";
static final String CURRENT_ACTIVE_PHONE = "gsm.current.phone-type";