summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/incallui/CallCommandClient.java14
-rw-r--r--src/com/android/incallui/CallList.java7
-rw-r--r--src/com/android/incallui/InCallPresenter.java12
-rw-r--r--src/com/android/incallui/MSimInCallActivity.java8
4 files changed, 31 insertions, 10 deletions
diff --git a/src/com/android/incallui/CallCommandClient.java b/src/com/android/incallui/CallCommandClient.java
index f55c9d8d..ae5f2f93 100644
--- a/src/com/android/incallui/CallCommandClient.java
+++ b/src/com/android/incallui/CallCommandClient.java
@@ -345,19 +345,27 @@ public class CallCommandClient {
}
}
- public void setActiveSubscription(int subscriptionId) {
- Log.i(this, "set active sub = " + subscriptionId);
+ public void setActiveSubscription(int subscriptionId, boolean retainLch) {
+ Log.i(this, "set active sub = " + subscriptionId + " retainLch = " + retainLch);
if (mCommandService == null) {
Log.e(this, "Cannot set active Sub; CallCommandService == null");
return;
}
try {
- mCommandService.setActiveSubscription(subscriptionId);
+ if (retainLch) {
+ mCommandService.setActiveSubRetainLch(subscriptionId);
+ } else {
+ mCommandService.setActiveSubscription(subscriptionId);
+ }
} catch (RemoteException e) {
Log.e(this, "Error setActiveSub.", e);
}
}
+ public void setActiveSubscription(int subscriptionId) {
+ setActiveSubscription(subscriptionId, false);
+ }
+
public int getActiveSubscription() {
int subscriptionId = MSimConstants.INVALID_SUBSCRIPTION;
diff --git a/src/com/android/incallui/CallList.java b/src/com/android/incallui/CallList.java
index e9cab0da..4ddc3c78 100644
--- a/src/com/android/incallui/CallList.java
+++ b/src/com/android/incallui/CallList.java
@@ -564,15 +564,18 @@ public class CallList {
* This method checks whether any other subscription currently has active voice
* call other than current active subscription, if yes it makes that other
* subscription as active subscription i.e user visible subscription.
+ * @param retainLch whether to retain the LCH state of the other active sub
*/
- public boolean switchToOtherActiveSubscription() {
+ public boolean switchToOtherActiveSubscription(boolean retainLch) {
int activeSub = getActiveSubscription();
boolean subSwitched = false;
for (int i = 0; i < MSimTelephonyManager.getDefault().getPhoneCount(); i++) {
if ((i != activeSub) && existsLiveCall(i)) {
- Log.i(this, "switchToOtherActiveSubscription, sub = " + i);
+ Log.i(this, "switchToOtherActiveSubscription, sub = " + i +
+ " retainLch = " + retainLch);
subSwitched = true;
+ CallCommandClient.getInstance().setActiveSubscription(i, retainLch);
setActiveSubscription(i);
break;
}
diff --git a/src/com/android/incallui/InCallPresenter.java b/src/com/android/incallui/InCallPresenter.java
index 5204d22b..8169721a 100644
--- a/src/com/android/incallui/InCallPresenter.java
+++ b/src/com/android/incallui/InCallPresenter.java
@@ -100,6 +100,8 @@ public class InCallPresenter implements CallList.Listener {
private boolean isImsMediaInitialized = false;
+ private Call.DisconnectCause mLastDisconnectCause = Call.DisconnectCause.UNKNOWN;
+
public static synchronized InCallPresenter getInstance() {
if (sInCallPresenter == null) {
sInCallPresenter = new InCallPresenter();
@@ -173,9 +175,11 @@ public class InCallPresenter implements CallList.Listener {
final boolean doFinish = (mInCallActivity != null && isActivityStarted());
Log.i(this, "Hide in call UI: " + doFinish);
- if ((mCallList != null) && !(mCallList.existsLiveCall(mCallList.getActiveSubscription()))
- && mCallList.switchToOtherActiveSubscription()) {
- return;
+ if ((mCallList != null) && !(mCallList.existsLiveCall(mCallList.getActiveSubscription()))) {
+ Log.d(this, "Switch active sub. Last disc cause = " + mLastDisconnectCause);
+ boolean retainLch = (mLastDisconnectCause == Call.DisconnectCause.NORMAL)
+ ? true: false;
+ if (mCallList.switchToOtherActiveSubscription(retainLch)) return;
}
if (doFinish) {
@@ -406,6 +410,8 @@ public class InCallPresenter implements CallList.Listener {
*/
@Override
public void onDisconnect(Call call) {
+ mLastDisconnectCause = (call != null ) ? call.getDisconnectCause():
+ Call.DisconnectCause.UNKNOWN;
hideDialpadForDisconnect();
maybeShowErrorDialogOnDisconnect(call);
diff --git a/src/com/android/incallui/MSimInCallActivity.java b/src/com/android/incallui/MSimInCallActivity.java
index a216d8d0..2a4df735 100644
--- a/src/com/android/incallui/MSimInCallActivity.java
+++ b/src/com/android/incallui/MSimInCallActivity.java
@@ -217,8 +217,12 @@ public class MSimInCallActivity extends InCallActivity {
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ActionBar bar = getActionBar();
-
- if (CallList.getInstance().existsLiveCall(mSubscription)) {
+ int tabCount = bar.getTabCount();
+ //Don't setActiveSubscription if tab count is 1.This is to avoid
+ //setting active subscription automatically when call on one sub
+ //ends and it's corresponding tab is removed.For such cases active
+ //subscription will be set by InCallPresenter.attemptFinishActivity.
+ if (tabCount != TAB_COUNT_ONE && CallList.getInstance().existsLiveCall(mSubscription)) {
CallCommandClient.getInstance().setActiveSubscription(mSubscription);
}
}