diff options
author | Yorke Lee <yorkelee@google.com> | 2015-06-18 22:50:53 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-06-18 22:50:54 +0000 |
commit | 84ba139ee9c6078b071e5cb505d7a4d9377712bb (patch) | |
tree | 2c3aeffe3b9577032bc375f945829598333fd593 /InCallUI | |
parent | c72e59c932dd154e7019235784f07ad96412e92e (diff) | |
parent | f3a65b2e9bcbf162aa8a715709028b2deeb2ca09 (diff) |
Merge "Fix for InCallUI finishing too quickly to display error dialog" into mnc-dev
Diffstat (limited to 'InCallUI')
-rw-r--r-- | InCallUI/src/com/android/incallui/CallList.java | 22 | ||||
-rw-r--r-- | InCallUI/src/com/android/incallui/InCallActivity.java | 1 |
2 files changed, 22 insertions, 1 deletions
diff --git a/InCallUI/src/com/android/incallui/CallList.java b/InCallUI/src/com/android/incallui/CallList.java index 5d38e2477..c0014bdfe 100644 --- a/InCallUI/src/com/android/incallui/CallList.java +++ b/InCallUI/src/com/android/incallui/CallList.java @@ -28,6 +28,7 @@ import com.google.common.collect.Maps; import java.util.Collections; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -60,6 +61,8 @@ public class CallList { new ConcurrentHashMap<Listener, Boolean>(8, 0.9f, 1)); private final HashMap<String, List<CallUpdateListener>> mCallUpdateListenerMap = Maps .newHashMap(); + private final Set<Call> mPendingDisconnectCalls = Collections.newSetFromMap( + new ConcurrentHashMap<Call, Boolean>(8, 0.9f, 1)); /** * Static singleton accessor method. @@ -391,6 +394,19 @@ public class CallList { } /** + * Called when the user has dismissed an error dialog. This indicates acknowledgement of + * the disconnect cause, and that any pending disconnects should immediately occur. + */ + public void onErrorDialogDismissed() { + final Iterator<Call> iterator = mPendingDisconnectCalls.iterator(); + while (iterator.hasNext()) { + Call call = iterator.next(); + iterator.remove(); + finishDisconnectedCall(call); + } + } + + /** * Processes an update for a single call. * * @param call The call to update. @@ -438,6 +454,7 @@ public class CallList { // Set up a timer to destroy the call after X seconds. final Message msg = mHandler.obtainMessage(EVENT_DISCONNECTED_TIMEOUT, call); mHandler.sendMessageDelayed(msg, getDelayForDisconnect(call)); + mPendingDisconnectCalls.add(call); mCallById.put(call.getId(), call); mCallByTelecommCall.put(call.getTelecommCall(), call); @@ -467,9 +484,9 @@ public class CallList { delay = DISCONNECTED_CALL_SHORT_TIMEOUT_MS; break; case DisconnectCause.REMOTE: + case DisconnectCause.ERROR: delay = DISCONNECTED_CALL_MEDIUM_TIMEOUT_MS; break; - case DisconnectCause.ERROR: case DisconnectCause.REJECTED: case DisconnectCause.MISSED: case DisconnectCause.CANCELED: @@ -505,6 +522,9 @@ public class CallList { * Sets up a call for deletion and notifies listeners of change. */ private void finishDisconnectedCall(Call call) { + if (mPendingDisconnectCalls.contains(call)) { + mPendingDisconnectCalls.remove(call); + } call.setState(Call.State.IDLE); updateCallInMap(call); notifyGenericListeners(); diff --git a/InCallUI/src/com/android/incallui/InCallActivity.java b/InCallUI/src/com/android/incallui/InCallActivity.java index 01ddac4ec..ab7dd1b8b 100644 --- a/InCallUI/src/com/android/incallui/InCallActivity.java +++ b/InCallUI/src/com/android/incallui/InCallActivity.java @@ -861,6 +861,7 @@ public class InCallActivity extends Activity implements FragmentDisplayManager { private void onDialogDismissed() { mDialog = null; + CallList.getInstance().onErrorDialogDismissed(); InCallPresenter.getInstance().onDismissDialog(); } } |