diff options
-rw-r--r-- | InCallUI/src/com/android/incallui/CallButtonPresenter.java | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/InCallUI/src/com/android/incallui/CallButtonPresenter.java b/InCallUI/src/com/android/incallui/CallButtonPresenter.java index 7e473e8d0..78cc084fa 100644 --- a/InCallUI/src/com/android/incallui/CallButtonPresenter.java +++ b/InCallUI/src/com/android/incallui/CallButtonPresenter.java @@ -239,11 +239,39 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto ui.enableAddCall(canAdd); } - ui.showHold(call.can(Capabilities.SUPPORT_HOLD)); - ui.setHold(call.getState() == Call.State.ONHOLD); - ui.enableHold(call.can(Capabilities.HOLD)); - - ui.showSwap(call.can(Capabilities.SWAP_CALLS)); + final boolean canHold = call.can(Capabilities.HOLD); + final boolean canSwap = call.can(Capabilities.SWAP_CALLS); + final boolean supportHold = call.can(Capabilities.SUPPORT_HOLD); + + if (canHold) { + ui.showHold(true); + ui.setHold(call.getState() == Call.State.ONHOLD); + ui.enableHold(true); + ui.showSwap(false); + } else if (canSwap) { + ui.showHold(false); + ui.showSwap(true); + } else { + // Neither "Hold" nor "Swap" is available. This can happen for two + // reasons: + // (1) this is a transient state on a device that *can* + // normally hold or swap, or + // (2) this device just doesn't have the concept of hold/swap. + // + // In case (1), show the "Hold" button in a disabled state. In case + // (2), remove the button entirely. (This means that the button row + // will only have 4 buttons on some devices.) + + if (supportHold) { + ui.showHold(true); + ui.enableHold(false); + ui.setHold(call.getState() == Call.State.ONHOLD); + ui.showSwap(false); + } else { + ui.showHold(false); + ui.showSwap(false); + } + } ui.enableMute(call.can(Capabilities.MUTE)); |