Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0c8ecec8 authored by The Android Open Source Project's avatar The Android Open Source Project Committed by Android Git Automerger
Browse files

am b4ab2204: am 143c3d32: am 5ccb8b8c: merge from open-source master

parents f90fa1a0 b4ab2204
Loading
Loading
Loading
Loading
+44 −33
Original line number Original line Diff line number Diff line
@@ -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
+3 −3
Original line number Original line Diff line number Diff line
@@ -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));
+2 −2
Original line number Original line Diff line number Diff line
@@ -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;
        }
        }