aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaveen Kalla <mrnaveen@google.com>2017-02-15 17:59:15 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-02-15 17:59:15 +0000
commita48a6ef42f54a7afb6d33118fa8ed1bed2a68f0d (patch)
tree634aa1032126d774af65c27f427bb5bcbb757784
parenta110bbe638b31660f5b64a5465f1b71c32f060f8 (diff)
parent48bc974ef6e593aa15e235050fe29b727349622c (diff)
downloadims-a48a6ef42f54a7afb6d33118fa8ed1bed2a68f0d.tar.gz
Add an API to get recent IMS disconnect reasons am: 525c3a2fdc am: ac99f22a28 am: 8a0ec2d8db
am: 48bc974ef6 Change-Id: I0197f6c82121bdba78b023791e98b08a68dd1711
-rw-r--r--src/java/com/android/ims/ImsManager.java48
1 files changed, 46 insertions, 2 deletions
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java
index f37e1e7f..df91a796 100644
--- a/src/java/com/android/ims/ImsManager.java
+++ b/src/java/com/android/ims/ImsManager.java
@@ -23,6 +23,7 @@ import android.net.Uri;
import android.os.AsyncTask;
import android.os.IBinder;
import android.os.Message;
+import android.os.Parcel;
import android.os.PersistableBundle;
import android.os.RemoteException;
import android.os.ServiceManager;
@@ -36,17 +37,19 @@ import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import com.android.ims.internal.IImsCallSession;
+import com.android.ims.internal.IImsConfig;
import com.android.ims.internal.IImsEcbm;
import com.android.ims.internal.IImsMultiEndpoint;
import com.android.ims.internal.IImsRegistrationListener;
import com.android.ims.internal.IImsService;
import com.android.ims.internal.IImsUt;
import com.android.ims.internal.ImsCallSession;
-import com.android.ims.internal.IImsConfig;
import java.io.FileDescriptor;
import java.io.PrintWriter;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.concurrent.ConcurrentLinkedDeque;
/**
* Provides APIs for IMS services, such as initiating IMS calls, and provides access to
@@ -192,6 +195,11 @@ public class ImsManager {
public static final String TRUE = "true";
public static final String FALSE = "false";
+ // mRecentDisconnectReasons stores the last 16 disconnect reasons
+ private static final int MAX_RECENT_DISCONNECT_REASONS = 16;
+ private ConcurrentLinkedDeque<ImsReasonInfo> mRecentDisconnectReasons =
+ new ConcurrentLinkedDeque<>();
+
/**
* Gets a manager instance.
*
@@ -201,8 +209,9 @@ public class ImsManager {
*/
public static ImsManager getInstance(Context context, int phoneId) {
synchronized (sImsManagerInstances) {
- if (sImsManagerInstances.containsKey(phoneId))
+ if (sImsManagerInstances.containsKey(phoneId)) {
return sImsManagerInstances.get(phoneId);
+ }
ImsManager mgr = new ImsManager(context, phoneId);
sImsManagerInstances.put(phoneId, mgr);
@@ -1233,6 +1242,31 @@ public class ImsManager {
}
}
+ private ImsReasonInfo makeACopy(ImsReasonInfo imsReasonInfo) {
+ Parcel p = Parcel.obtain();
+ imsReasonInfo.writeToParcel(p, 0);
+ p.setDataPosition(0);
+ ImsReasonInfo clonedReasonInfo = ImsReasonInfo.CREATOR.createFromParcel(p);
+ p.recycle();
+ return clonedReasonInfo;
+ }
+
+ /**
+ * Get Recent IMS Disconnect Reasons.
+ *
+ * @return ArrayList of ImsReasonInfo objects. MAX size of the arraylist
+ * is MAX_RECENT_DISCONNECT_REASONS. The objects are in the
+ * chronological order.
+ */
+ public ArrayList<ImsReasonInfo> getRecentImsDisconnectReasons() {
+ ArrayList<ImsReasonInfo> disconnectReasons = new ArrayList<>();
+
+ for (ImsReasonInfo reason : mRecentDisconnectReasons) {
+ disconnectReasons.add(makeACopy(reason));
+ }
+ return disconnectReasons;
+ }
+
/**
* Get the boolean config from carrier config manager.
*
@@ -1461,6 +1495,14 @@ public class ImsManager {
}
}
+ private void addToRecentDisconnectReasons(ImsReasonInfo reason) {
+ if (reason == null) return;
+ while (mRecentDisconnectReasons.size() >= MAX_RECENT_DISCONNECT_REASONS) {
+ mRecentDisconnectReasons.removeFirst();
+ }
+ mRecentDisconnectReasons.addLast(reason);
+ }
+
/**
* Death recipient class for monitoring IMS service.
*/
@@ -1552,6 +1594,8 @@ public class ImsManager {
log("registrationDisconnected :: imsReasonInfo" + imsReasonInfo);
}
+ addToRecentDisconnectReasons(imsReasonInfo);
+
if (mListener != null) {
mListener.onImsDisconnected(imsReasonInfo);
}