summaryrefslogtreecommitdiff
path: root/InCallUI
diff options
context:
space:
mode:
authorYorke Lee <yorkelee@google.com>2015-06-19 13:56:55 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-06-19 13:56:55 +0000
commit83c7a01cc0ecb3a8e71a45c1d04994694da240de (patch)
treed7a68cffef8b43bf86238b966eef19abd065f94d /InCallUI
parentec5f5e74216b658a9ccab8421a83bb9fbb788a77 (diff)
parentf773301a402e1bd163eba1168a8d586bddeca2f9 (diff)
am 7d84fc97: am 3b39f56e: Merge "Fix for InCallUI finishing too quickly to display error dialog" into mnc-dev
* commit '7d84fc97b7258aecb9204b4eaeef5e815bbd0e0c': Fix for InCallUI finishing too quickly to display error dialog
Diffstat (limited to 'InCallUI')
-rw-r--r--InCallUI/src/com/android/incallui/CallList.java22
-rw-r--r--InCallUI/src/com/android/incallui/InCallActivity.java1
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();
}
}