diff options
author | Naveen Kalla <mrnaveen@google.com> | 2017-02-15 17:59:15 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-02-15 17:59:15 +0000 |
commit | a48a6ef42f54a7afb6d33118fa8ed1bed2a68f0d (patch) | |
tree | 634aa1032126d774af65c27f427bb5bcbb757784 | |
parent | a110bbe638b31660f5b64a5465f1b71c32f060f8 (diff) | |
parent | 48bc974ef6e593aa15e235050fe29b727349622c (diff) | |
download | ims-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.java | 48 |
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); } |