am 5ccb8b8c: merge from open-source master
Merge commit '5ccb8b8c4d6eabcc984559ef9e71efdbb3de00d3' into kraken * commit '5ccb8b8c4d6eabcc984559ef9e71efdbb3de00d3': Fix updating and deleting FDN entries with an empty alpha identifier. Abort FDN delete when number is empty (instead of name)
This commit is contained in:
committed by
Android Git Automerger
commit
143c3d32f4
@@ -19,10 +19,9 @@ package com.android.internal.telephony;
|
|||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.telephony.PhoneNumberUtils;
|
import android.telephony.PhoneNumberUtils;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.android.internal.telephony.GsmAlphabet;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
|
||||||
@@ -38,8 +37,8 @@ public class AdnRecord implements Parcelable {
|
|||||||
|
|
||||||
//***** Instance Variables
|
//***** Instance Variables
|
||||||
|
|
||||||
String alphaTag = "";
|
String alphaTag = null;
|
||||||
String number = "";
|
String number = null;
|
||||||
String[] emails;
|
String[] emails;
|
||||||
int extRecord = 0xff;
|
int extRecord = 0xff;
|
||||||
int efid; // or 0 if none
|
int efid; // or 0 if none
|
||||||
@@ -63,8 +62,8 @@ public class AdnRecord implements Parcelable {
|
|||||||
// ADN offset
|
// ADN offset
|
||||||
static final int ADN_BCD_NUMBER_LENGTH = 0;
|
static final int ADN_BCD_NUMBER_LENGTH = 0;
|
||||||
static final int ADN_TON_AND_NPI = 1;
|
static final int ADN_TON_AND_NPI = 1;
|
||||||
static final int ADN_DAILING_NUMBER_START = 2;
|
static final int ADN_DIALING_NUMBER_START = 2;
|
||||||
static final int ADN_DAILING_NUMBER_END = 11;
|
static final int ADN_DIALING_NUMBER_END = 11;
|
||||||
static final int ADN_CAPABILITY_ID = 12;
|
static final int ADN_CAPABILITY_ID = 12;
|
||||||
static final int ADN_EXTENSION_ID = 13;
|
static final int ADN_EXTENSION_ID = 13;
|
||||||
|
|
||||||
@@ -152,17 +151,31 @@ public class AdnRecord implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isEmpty() {
|
public boolean isEmpty() {
|
||||||
return alphaTag.equals("") && number.equals("") && emails == null;
|
return TextUtils.isEmpty(alphaTag) && TextUtils.isEmpty(number) && emails == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasExtendedRecord() {
|
public boolean hasExtendedRecord() {
|
||||||
return extRecord != 0 && extRecord != 0xff;
|
return extRecord != 0 && extRecord != 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Helper function for {@link #isEqual}. */
|
||||||
|
private static boolean stringCompareNullEqualsEmpty(String s1, String s2) {
|
||||||
|
if (s1 == s2) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (s1 == null) {
|
||||||
|
s1 = "";
|
||||||
|
}
|
||||||
|
if (s2 == null) {
|
||||||
|
s2 = "";
|
||||||
|
}
|
||||||
|
return (s1.equals(s2));
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isEqual(AdnRecord adn) {
|
public boolean isEqual(AdnRecord adn) {
|
||||||
return ( alphaTag.equals(adn.getAlphaTag()) &&
|
return ( stringCompareNullEqualsEmpty(alphaTag, adn.alphaTag) &&
|
||||||
number.equals(adn.getNumber()) &&
|
stringCompareNullEqualsEmpty(number, adn.number) &&
|
||||||
Arrays.equals(emails, adn.getEmails()));
|
Arrays.equals(emails, adn.emails));
|
||||||
}
|
}
|
||||||
//***** Parcelable Implementation
|
//***** Parcelable Implementation
|
||||||
|
|
||||||
@@ -184,36 +197,33 @@ public class AdnRecord implements Parcelable {
|
|||||||
*
|
*
|
||||||
* @param recordSize is the size X of EF record
|
* @param recordSize is the size X of EF record
|
||||||
* @return hex byte[recordSize] to be written to EF record
|
* @return hex byte[recordSize] to be written to EF record
|
||||||
* return nulll for wrong format of dialing nubmer or tag
|
* return null for wrong format of dialing number or tag
|
||||||
*/
|
*/
|
||||||
public byte[] buildAdnString(int recordSize) {
|
public byte[] buildAdnString(int recordSize) {
|
||||||
byte[] bcdNumber;
|
byte[] bcdNumber;
|
||||||
byte[] byteTag;
|
byte[] byteTag;
|
||||||
byte[] adnString = null;
|
byte[] adnString;
|
||||||
int footerOffset = recordSize - FOOTER_SIZE_BYTES;
|
int footerOffset = recordSize - FOOTER_SIZE_BYTES;
|
||||||
|
|
||||||
if (number == null || number.equals("") ||
|
// create an empty record
|
||||||
alphaTag == null || alphaTag.equals("")) {
|
|
||||||
|
|
||||||
Log.w(LOG_TAG, "[buildAdnString] Empty alpha tag or number");
|
|
||||||
adnString = new byte[recordSize];
|
adnString = new byte[recordSize];
|
||||||
for (int i = 0; i < recordSize; i++) {
|
for (int i = 0; i < recordSize; i++) {
|
||||||
adnString[i] = (byte) 0xFF;
|
adnString[i] = (byte) 0xFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (TextUtils.isEmpty(number)) {
|
||||||
|
Log.w(LOG_TAG, "[buildAdnString] Empty dialing number");
|
||||||
|
return adnString; // return the empty record (for delete)
|
||||||
} else if (number.length()
|
} else if (number.length()
|
||||||
> (ADN_DAILING_NUMBER_END - ADN_DAILING_NUMBER_START + 1) * 2) {
|
> (ADN_DIALING_NUMBER_END - ADN_DIALING_NUMBER_START + 1) * 2) {
|
||||||
Log.w(LOG_TAG,
|
Log.w(LOG_TAG,
|
||||||
"[buildAdnString] Max length of dailing number is 20");
|
"[buildAdnString] Max length of dialing number is 20");
|
||||||
} else if (alphaTag.length() > footerOffset) {
|
return null;
|
||||||
|
} else if (alphaTag != null && alphaTag.length() > footerOffset) {
|
||||||
Log.w(LOG_TAG,
|
Log.w(LOG_TAG,
|
||||||
"[buildAdnString] Max length of tag is " + footerOffset);
|
"[buildAdnString] Max length of tag is " + footerOffset);
|
||||||
|
return null;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
adnString = new byte[recordSize];
|
|
||||||
for (int i = 0; i < recordSize; i++) {
|
|
||||||
adnString[i] = (byte) 0xFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
bcdNumber = PhoneNumberUtils.numberToCalledPartyBCD(number);
|
bcdNumber = PhoneNumberUtils.numberToCalledPartyBCD(number);
|
||||||
|
|
||||||
System.arraycopy(bcdNumber, 0, adnString,
|
System.arraycopy(bcdNumber, 0, adnString,
|
||||||
@@ -222,17 +232,18 @@ public class AdnRecord implements Parcelable {
|
|||||||
adnString[footerOffset + ADN_BCD_NUMBER_LENGTH]
|
adnString[footerOffset + ADN_BCD_NUMBER_LENGTH]
|
||||||
= (byte) (bcdNumber.length);
|
= (byte) (bcdNumber.length);
|
||||||
adnString[footerOffset + ADN_CAPABILITY_ID]
|
adnString[footerOffset + ADN_CAPABILITY_ID]
|
||||||
= (byte) 0xFF; // Capacility Id
|
= (byte) 0xFF; // Capability Id
|
||||||
adnString[footerOffset + ADN_EXTENSION_ID]
|
adnString[footerOffset + ADN_EXTENSION_ID]
|
||||||
= (byte) 0xFF; // Extension Record Id
|
= (byte) 0xFF; // Extension Record Id
|
||||||
|
|
||||||
|
if (!TextUtils.isEmpty(alphaTag)) {
|
||||||
byteTag = GsmAlphabet.stringToGsm8BitPacked(alphaTag);
|
byteTag = GsmAlphabet.stringToGsm8BitPacked(alphaTag);
|
||||||
System.arraycopy(byteTag, 0, adnString, 0, byteTag.length);
|
System.arraycopy(byteTag, 0, adnString, 0, byteTag.length);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return adnString;
|
return adnString;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See TS 51.011 10.5.10
|
* See TS 51.011 10.5.10
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ public class AdnRecordLoader extends Handler {
|
|||||||
* It will get the record size of EF record and compose hex adn array
|
* It will get the record size of EF record and compose hex adn array
|
||||||
* then write the hex array to EF record
|
* then write the hex array to EF record
|
||||||
*
|
*
|
||||||
* @param adn is set with alphaTag and phoneNubmer
|
* @param adn is set with alphaTag and phone number
|
||||||
* @param ef EF fileid
|
* @param ef EF fileid
|
||||||
* @param extensionEF extension EF fileid
|
* @param extensionEF extension EF fileid
|
||||||
* @param recordNumber 1-based record index
|
* @param recordNumber 1-based record index
|
||||||
@@ -159,7 +159,7 @@ public class AdnRecordLoader extends Handler {
|
|||||||
data = adn.buildAdnString(recordSize[0]);
|
data = adn.buildAdnString(recordSize[0]);
|
||||||
|
|
||||||
if(data == null) {
|
if(data == null) {
|
||||||
throw new RuntimeException("worong ADN format",
|
throw new RuntimeException("wrong ADN format",
|
||||||
ar.exception);
|
ar.exception);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -218,7 +218,7 @@ public class AdnRecordLoader extends Handler {
|
|||||||
throw new RuntimeException("load failed", ar.exception);
|
throw new RuntimeException("load failed", ar.exception);
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.d(LOG_TAG,"ADN extention EF: 0x"
|
Log.d(LOG_TAG,"ADN extension EF: 0x"
|
||||||
+ Integer.toHexString(extensionEF)
|
+ Integer.toHexString(extensionEF)
|
||||||
+ ":" + adn.extRecord
|
+ ":" + adn.extRecord
|
||||||
+ "\n" + IccUtils.bytesToHexString(data));
|
+ "\n" + IccUtils.bytesToHexString(data));
|
||||||
|
|||||||
@@ -417,11 +417,11 @@ public class IccProvider extends ContentProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TextUtils.isEmpty(tag)) {
|
if (TextUtils.isEmpty(number)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (efType == FDN && TextUtils.isEmpty(pin2)) {
|
if (efType == IccConstants.EF_FDN && TextUtils.isEmpty(pin2)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user