aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhang Fang <zfang@codeaurora.org>2014-04-14 19:11:44 +0800
committerEthan Chen <intervigil@gmail.com>2014-09-09 15:00:23 -0700
commit6ce1ab0e9b997514b3872177696535a9ca419bdb (patch)
tree85b4f0390fa7fa94865f079550fd00fb80b8efa9
parent227db10450a53464ba30a3a4fa063fbeccd92c1d (diff)
downloadandroid_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
-rw-r--r--src/java/android/telephony/MSimSmsManager.java20
-rw-r--r--src/java/android/telephony/SmsManager.java19
-rw-r--r--src/java/com/android/internal/telephony/IccSmsInterfaceManager.java15
-rw-r--r--src/java/com/android/internal/telephony/IccSmsInterfaceManagerProxy.java5
-rw-r--r--src/java/com/android/internal/telephony/PhoneBase.java9
-rw-r--r--src/java/com/android/internal/telephony/msim/ISmsMSim.aidl6
-rw-r--r--src/java/com/android/internal/telephony/uicc/IccRecords.java35
-rw-r--r--src/java/com/android/internal/telephony/uicc/RuimRecords.java2
-rw-r--r--src/java/com/android/internal/telephony/uicc/SIMRecords.java2
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));