Merge "Make add-call a global property of telecom. (4/4)" into lmp-mr1-dev
diff --git a/InCallUI/src/com/android/incallui/Call.java b/InCallUI/src/com/android/incallui/Call.java
index cdfd0eb..36f6f4e 100644
--- a/InCallUI/src/com/android/incallui/Call.java
+++ b/InCallUI/src/com/android/incallui/Call.java
@@ -401,12 +401,14 @@
@Override
public String toString() {
- return String.format(Locale.US, "[%s, %s, %s, children:%s, parent:%s, videoState:%d]",
+ return String.format(Locale.US, "[%s, %s, %s, children:%s, parent:%s, conferenceable:%s, " +
+ "videoState:%d]",
mId,
State.toString(getState()),
PhoneCapabilities.toString(mTelecommCall.getDetails().getCallCapabilities()),
mChildCallIds,
getParentId(),
+ this.mTelecommCall.getConferenceableCalls(),
mTelecommCall.getDetails().getVideoState());
}
}
diff --git a/InCallUI/src/com/android/incallui/CallButtonPresenter.java b/InCallUI/src/com/android/incallui/CallButtonPresenter.java
index 85f721a..2e83e32 100644
--- a/InCallUI/src/com/android/incallui/CallButtonPresenter.java
+++ b/InCallUI/src/com/android/incallui/CallButtonPresenter.java
@@ -23,8 +23,8 @@
import android.telecom.TelecomManager;
import android.telecom.VideoProfile;
-
import com.android.incallui.AudioModeProvider.AudioModeListener;
+import com.android.incallui.InCallPresenter.CanAddCallListener;
import com.android.incallui.InCallPresenter.InCallState;
import com.android.incallui.InCallPresenter.InCallStateListener;
import com.android.incallui.InCallPresenter.IncomingCallListener;
@@ -39,7 +39,7 @@
*/
public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButtonUi>
implements InCallStateListener, AudioModeListener, IncomingCallListener,
- InCallDetailsListener {
+ InCallDetailsListener, CanAddCallListener {
private Call mCall;
private boolean mAutomaticallyMuted = false;
@@ -58,6 +58,7 @@
InCallPresenter.getInstance().addListener(this);
InCallPresenter.getInstance().addIncomingCallListener(this);
InCallPresenter.getInstance().addDetailsListener(this);
+ InCallPresenter.getInstance().addCanAddCallListener(this);
}
@Override
@@ -126,6 +127,13 @@
}
@Override
+ public void onCanAddCallChanged(boolean canAddCall) {
+ if (mCall != null) {
+ updateCallButtons(mCall, getUi().getContext());
+ }
+ }
+
+ @Override
public void onAudioMode(int mode) {
if (getUi() != null) {
getUi().setAudio(mode);
@@ -384,10 +392,10 @@
Log.v(this, "Enable hold", call.can(PhoneCapabilities.HOLD));
Log.v(this, "Show merge ", call.can(PhoneCapabilities.MERGE_CONFERENCE));
Log.v(this, "Show swap ", call.can(PhoneCapabilities.SWAP_CONFERENCE));
- Log.v(this, "Show add call ", call.can(PhoneCapabilities.ADD_CALL));
+ Log.v(this, "Show add call ", TelecomAdapter.getInstance().canAddCall());
Log.v(this, "Show mute ", call.can(PhoneCapabilities.MUTE));
- final boolean canAdd = call.can(PhoneCapabilities.ADD_CALL);
+ final boolean canAdd = TelecomAdapter.getInstance().canAddCall();
final boolean enableHoldOption = call.can(PhoneCapabilities.HOLD);
final boolean supportHold = call.can(PhoneCapabilities.SUPPORT_HOLD);
final boolean isCallOnHold = call.getState() == Call.State.ONHOLD;
@@ -411,7 +419,7 @@
final boolean isVideoOverflowScenario = canVideoCall
&& (showAddCallOption || showMergeOption) && (showHoldOption || showSwapOption);
// If we show hold/swap, add, and merge simultaneously, the overflow menu is needed.
- final boolean isCdmaConferenceOverflowScenario =
+ final boolean isOverflowScenario =
(showHoldOption || showSwapOption) && showMergeOption && showAddCallOption;
if (isVideoOverflowScenario) {
@@ -420,14 +428,14 @@
ui.showAddCallButton(false);
ui.showMergeButton(false);
- ui.showOverflowButton(true);
ui.configureOverflowMenu(
showMergeOption,
showAddCallOption /* showAddMenuOption */,
showHoldOption && enableHoldOption /* showHoldMenuOption */,
showSwapOption);
+ ui.showOverflowButton(true);
} else {
- if (isCdmaConferenceOverflowScenario) {
+ if (isOverflowScenario) {
ui.showAddCallButton(false);
ui.showMergeButton(false);
@@ -441,6 +449,7 @@
ui.showAddCallButton(showAddCallOption);
}
+ ui.showOverflowButton(isOverflowScenario);
ui.showHoldButton(showHoldOption);
ui.enableHold(enableHoldOption);
ui.showSwapButton(showSwapOption);
diff --git a/InCallUI/src/com/android/incallui/CallList.java b/InCallUI/src/com/android/incallui/CallList.java
index 40fcf53..0bbebe5 100644
--- a/InCallUI/src/com/android/incallui/CallList.java
+++ b/InCallUI/src/com/android/incallui/CallList.java
@@ -17,7 +17,6 @@
package com.android.incallui;
import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
import com.google.common.base.Preconditions;
import android.os.Handler;
diff --git a/InCallUI/src/com/android/incallui/InCallPresenter.java b/InCallUI/src/com/android/incallui/InCallPresenter.java
index ec30ee1..2027304 100644
--- a/InCallUI/src/com/android/incallui/InCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/InCallPresenter.java
@@ -72,6 +72,8 @@
private final List<IncomingCallListener> mIncomingCallListeners = new CopyOnWriteArrayList<>();
private final Set<InCallDetailsListener> mDetailsListeners = Collections.newSetFromMap(
new ConcurrentHashMap<InCallDetailsListener, Boolean>(8, 0.9f, 1));
+ private final Set<CanAddCallListener> mCanAddCallListeners = Collections.newSetFromMap(
+ new ConcurrentHashMap<CanAddCallListener, Boolean>(8, 0.9f, 1));
private final Set<InCallUiListener> mInCallUiListeners = Collections.newSetFromMap(
new ConcurrentHashMap<InCallUiListener, Boolean>(8, 0.9f, 1));
private final Set<InCallOrientationListener> mOrientationListeners = Collections.newSetFromMap(
@@ -105,6 +107,12 @@
public void onCallRemoved(Phone phone, android.telecom.Call call) {
call.removeListener(mCallListener);
}
+ @Override
+ public void onCanAddCallChanged(Phone phone, boolean canAddCall) {
+ for (CanAddCallListener listener : mCanAddCallListeners) {
+ listener.onCanAddCallChanged(canAddCall);
+ }
+ }
};
private final android.telecom.Call.Listener mCallListener =
@@ -476,6 +484,17 @@
}
}
+ public void addCanAddCallListener(CanAddCallListener listener) {
+ Preconditions.checkNotNull(listener);
+ mCanAddCallListeners.add(listener);
+ }
+
+ public void removeCanAddCallListener(CanAddCallListener listener) {
+ if (listener != null) {
+ mCanAddCallListeners.remove(listener);
+ }
+ }
+
public void addOrientationListener(InCallOrientationListener listener) {
Preconditions.checkNotNull(listener);
mOrientationListeners.add(listener);
@@ -1238,6 +1257,10 @@
public void onIncomingCall(InCallState oldState, InCallState newState, Call call);
}
+ public interface CanAddCallListener {
+ public void onCanAddCallChanged(boolean canAddCall);
+ }
+
public interface InCallDetailsListener {
public void onDetailsChanged(Call call, android.telecom.Call.Details details);
}
diff --git a/InCallUI/src/com/android/incallui/TelecomAdapter.java b/InCallUI/src/com/android/incallui/TelecomAdapter.java
index b0c170a..291466d 100644
--- a/InCallUI/src/com/android/incallui/TelecomAdapter.java
+++ b/InCallUI/src/com/android/incallui/TelecomAdapter.java
@@ -243,4 +243,9 @@
Log.e(this, "error phoneAccountSelected, accountHandle is null");
}
}
+
+ boolean canAddCall() {
+ // Default to true if we are not connected to telecom.
+ return mPhone == null ? true : mPhone.canAddCall();
+ }
}