diff options
author | Yorke Lee <yorkelee@google.com> | 2015-06-19 14:19:07 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-06-19 14:19:07 +0000 |
commit | 12ca2a101ae01227a913acaca45cb4ada48ae590 (patch) | |
tree | f6ff3dbd552fe6e2b197ef69f4e29e5a285e103f /InCallUI | |
parent | e11396335c08f91e01e1adc983f1f2688debea7d (diff) | |
parent | 83c7a01cc0ecb3a8e71a45c1d04994694da240de (diff) |
am 7c603478: am 7d84fc97: am 3b39f56e: Merge "Fix for InCallUI finishing too quickly to display error dialog" into mnc-dev
* commit '7c603478dfcbd34528313a65523e80de448c23b9':
Fix for InCallUI finishing too quickly to display error dialog
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(); } } |