diff options
author | Zhang Fang <zfang@codeaurora.org> | 2014-04-14 19:11:44 +0800 |
---|---|---|
committer | Ethan Chen <intervigil@gmail.com> | 2014-09-09 15:00:23 -0700 |
commit | 6ce1ab0e9b997514b3872177696535a9ca419bdb (patch) | |
tree | 85b4f0390fa7fa94865f079550fd00fb80b8efa9 /src/java | |
parent | 227db10450a53464ba30a3a4fa063fbeccd92c1d (diff) | |
download | android_frameworks_opt_telephony-6ce1ab0e9b997514b3872177696535a9ca419bdb.tar.gz android_frameworks_opt_telephony-6ce1ab0e9b997514b3872177696535a9ca419bdb.tar.bz2 android_frameworks_opt_telephony-6ce1ab0e9b997514b3872177696535a9ca419bdb.zip |
Telephony: Get SIM card capacity count of SMS.
Add one API:
- getSmsCapacityOnIcc: get the capacity of stored SMS on ICC card.
Change-Id: I63c1431cf02db2dbdee3553afc2448b4ec2cdfa3
CRs-Fixed: 645022
Diffstat (limited to 'src/java')
9 files changed, 112 insertions, 1 deletions
diff --git a/src/java/android/telephony/MSimSmsManager.java b/src/java/android/telephony/MSimSmsManager.java index 69fe32316..684f50c1a 100644 --- a/src/java/android/telephony/MSimSmsManager.java +++ b/src/java/android/telephony/MSimSmsManager.java @@ -802,6 +802,26 @@ public class MSimSmsManager { return false; } } + + /** + * Get the capacity count of sms on Icc card + * + * @return the capacity count of sms on Icc card + * @hide + */ + public static int getSmsCapacityOnIcc(int subscription) { + int ret = -1; + try { + ISmsMSim iccISms = ISmsMSim.Stub.asInterface(ServiceManager.getService("isms_msim")); + if (iccISms != null) { + ret = iccISms.getSmsCapacityOnIcc(subscription); + } + } catch (RemoteException ex) { + //ignore it + } + return ret; + } + // see SmsMessage.getStatusOnIcc /** Free space (TS 51.011 10.5.3 / 3GPP2 C.S0023 3.4.27). */ diff --git a/src/java/android/telephony/SmsManager.java b/src/java/android/telephony/SmsManager.java index 6798fdd81..91f6cd26d 100644 --- a/src/java/android/telephony/SmsManager.java +++ b/src/java/android/telephony/SmsManager.java @@ -787,6 +787,25 @@ public final class SmsManager { return format; } + /** + * Get the capacity count of sms on Icc card + * + * @return the capacity count of sms on Icc card + * @hide + */ + public static int getSmsCapacityOnIcc() { + int ret = -1; + try { + ISms iccISms = ISms.Stub.asInterface(ServiceManager.getService("isms")); + if (iccISms != null) { + ret = iccISms.getSmsCapacityOnIcc(); + } + } catch (RemoteException ex) { + //ignore it + } + return ret; + } + // see SmsMessage.getStatusOnIcc /** Free space (TS 51.011 10.5.3 / 3GPP2 C.S0023 3.4.27). */ diff --git a/src/java/com/android/internal/telephony/IccSmsInterfaceManager.java b/src/java/com/android/internal/telephony/IccSmsInterfaceManager.java index 15af3ce69..1e0e62281 100644 --- a/src/java/com/android/internal/telephony/IccSmsInterfaceManager.java +++ b/src/java/com/android/internal/telephony/IccSmsInterfaceManager.java @@ -41,6 +41,7 @@ import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo; import com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo; import com.android.internal.telephony.uicc.IccConstants; import com.android.internal.telephony.uicc.IccFileHandler; +import com.android.internal.telephony.uicc.IccRecords; import com.android.internal.util.HexDump; import java.util.ArrayList; @@ -1005,4 +1006,18 @@ public class IccSmsInterfaceManager extends ISms.Stub { return true; } + + public int getSmsCapacityOnIcc() { + int numberOnIcc = -1; + IccRecords ir = mPhone.getIccRecords(); + + if (ir != null) { + numberOnIcc = ir.getSmsCapacityOnIcc(); + } else { + log("getSmsCapacityOnIcc - aborting, no icc card present."); + } + + log("getSmsCapacityOnIcc().numberOnIcc = " + numberOnIcc); + return numberOnIcc; + } } diff --git a/src/java/com/android/internal/telephony/IccSmsInterfaceManagerProxy.java b/src/java/com/android/internal/telephony/IccSmsInterfaceManagerProxy.java index ccb959b3e..7130e49dc 100644 --- a/src/java/com/android/internal/telephony/IccSmsInterfaceManagerProxy.java +++ b/src/java/com/android/internal/telephony/IccSmsInterfaceManagerProxy.java @@ -298,6 +298,11 @@ public class IccSmsInterfaceManagerProxy extends ISms.Stub { return mIccSmsInterfaceManager.getImsSmsFormat(); } + @Override + public int getSmsCapacityOnIcc() { + return mIccSmsInterfaceManager.getSmsCapacityOnIcc(); + } + private void broadcastOutgoingSms(String callingPackage, String destAddr, String scAddr, boolean multipart, ArrayList<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents, diff --git a/src/java/com/android/internal/telephony/PhoneBase.java b/src/java/com/android/internal/telephony/PhoneBase.java index d9aadd43c..b580725dc 100644 --- a/src/java/com/android/internal/telephony/PhoneBase.java +++ b/src/java/com/android/internal/telephony/PhoneBase.java @@ -792,6 +792,15 @@ public abstract class PhoneBase extends Handler implements Phone { return uiccApplication.getIccFileHandler(); } + /** + * Retrieves the IccRecords of the Phone instance + */ + public IccRecords getIccRecords(){ + UiccCardApplication uiccApplication = mUiccApplication.get(); + if (uiccApplication == null) return null; + return uiccApplication.getIccRecords(); + } + /* * Retrieves the Handler of the Phone instance */ diff --git a/src/java/com/android/internal/telephony/msim/ISmsMSim.aidl b/src/java/com/android/internal/telephony/msim/ISmsMSim.aidl index 1e9458899..02123c00b 100644 --- a/src/java/com/android/internal/telephony/msim/ISmsMSim.aidl +++ b/src/java/com/android/internal/telephony/msim/ISmsMSim.aidl @@ -362,4 +362,10 @@ interface ISmsMSim { */ boolean isSMSPromptEnabled(); + /** + * Get the capacity count of sms on Icc card. + * + * @return capacity of ICC + */ + int getSmsCapacityOnIcc(int subscription); } diff --git a/src/java/com/android/internal/telephony/uicc/IccRecords.java b/src/java/com/android/internal/telephony/uicc/IccRecords.java index c7937e95a..a972657f0 100644 --- a/src/java/com/android/internal/telephony/uicc/IccRecords.java +++ b/src/java/com/android/internal/telephony/uicc/IccRecords.java @@ -70,6 +70,8 @@ public abstract class IccRecords extends Handler implements IccConstants { protected int mMncLength = UNINITIALIZED; protected int mMailboxIndex = 0; // 0 is no mailbox dailing number associated + protected int mSmsCountOnIcc = -1; + protected String mSpn; protected String mGid1; @@ -94,7 +96,8 @@ public abstract class IccRecords extends Handler implements IccConstants { public static final int EVENT_REFRESH = 31; // ICC refresh occurred protected static final int EVENT_APP_READY = 1; - @Override + protected static final int EVENT_GET_SMS_RECORD_SIZE_DONE = 35; + public String toString() { return "mDestroyed=" + mDestroyed + " mContext=" + mContext @@ -419,6 +422,28 @@ public abstract class IccRecords extends Handler implements IccConstants { loge("Icc refresh Exception: " + ar.exception); } break; + case EVENT_GET_SMS_RECORD_SIZE_DONE: + ar = (AsyncResult) msg.obj; + + if (ar.exception != null) { + loge("Exception in EVENT_GET_SMS_RECORD_SIZE_DONE " + ar.exception); + break; + } + + int[] recordSize = (int[])ar.result; + try { + // recordSize[0] is the record length + // recordSize[1] is the total length of the EF file + // recordSize[2] is the number of records in the EF file + mSmsCountOnIcc = recordSize[2]; + log("EVENT_GET_SMS_RECORD_SIZE_DONE Size " + recordSize[0] + + " total " + recordSize[1] + + " record " + recordSize[2]); + } catch (ArrayIndexOutOfBoundsException exc) { + loge("ArrayIndexOutOfBoundsException in EVENT_GET_SMS_RECORD_SIZE_DONE: " + + exc.toString()); + } + break; default: super.handleMessage(msg); @@ -571,6 +596,14 @@ public abstract class IccRecords extends Handler implements IccConstants { return null; } + /** + * To get SMS capacity count on ICC card. + */ + public int getSmsCapacityOnIcc() { + if (DBG) log("getSmsCapacityOnIcc: " + mSmsCountOnIcc); + return mSmsCountOnIcc; + } + public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println("IccRecords: " + this); pw.println(" mDestroyed=" + mDestroyed); diff --git a/src/java/com/android/internal/telephony/uicc/RuimRecords.java b/src/java/com/android/internal/telephony/uicc/RuimRecords.java index 0303d94ff..7da53d4e5 100644 --- a/src/java/com/android/internal/telephony/uicc/RuimRecords.java +++ b/src/java/com/android/internal/telephony/uicc/RuimRecords.java @@ -765,6 +765,8 @@ public final class RuimRecords extends IccRecords { obtainMessage(EVENT_GET_ICC_RECORD_DONE, new EfCsimEprlLoaded())); mRecordsToLoad++; + mFh.getEFLinearRecordSize(EF_SMS, obtainMessage(EVENT_GET_SMS_RECORD_SIZE_DONE)); + if (DBG) log("fetchRuimRecords " + mRecordsToLoad + " requested: " + mRecordsRequested); // Further records that can be inserted are Operator/OEM dependent } diff --git a/src/java/com/android/internal/telephony/uicc/SIMRecords.java b/src/java/com/android/internal/telephony/uicc/SIMRecords.java index d3e247cde..58c6ff193 100644 --- a/src/java/com/android/internal/telephony/uicc/SIMRecords.java +++ b/src/java/com/android/internal/telephony/uicc/SIMRecords.java @@ -1462,6 +1462,8 @@ public class SIMRecords extends IccRecords { mFh.loadEFTransparent(EF_GID1, obtainMessage(EVENT_GET_GID1_DONE)); mRecordsToLoad++; + mFh.getEFLinearRecordSize(EF_SMS, obtainMessage(EVENT_GET_SMS_RECORD_SIZE_DONE)); + // XXX should seek instead of examining them all if (false) { // XXX mFh.loadEFLinearFixedAll(EF_SMS, obtainMessage(EVENT_GET_ALL_SMS_DONE)); |