diff options
author | Yana Stamcheva <yana@jitsi.org> | 2010-06-09 14:22:58 +0000 |
---|---|---|
committer | Yana Stamcheva <yana@jitsi.org> | 2010-06-09 14:22:58 +0000 |
commit | 7d641ba1c5380a0447d9cc9e5ac0525a5f5c151b (patch) | |
tree | ec1575127359f501b092b00a05a8bbbf79d9d234 /src | |
parent | 7c5793bc7f9340faea4fbb680fd237475a8a185b (diff) | |
download | jitsi-7d641ba1c5380a0447d9cc9e5ac0525a5f5c151b.zip jitsi-7d641ba1c5380a0447d9cc9e5ac0525a5f5c151b.tar.gz jitsi-7d641ba1c5380a0447d9cc9e5ac0525a5f5c151b.tar.bz2 |
In the call transfer menu opened when there are more than one active calls, add a "transfer to" item, which allows to make an unattended transfer.
In conference calls, fix local peer appearing in the members.
Diffstat (limited to 'src')
4 files changed, 96 insertions, 70 deletions
diff --git a/src/net/java/sip/communicator/impl/gui/main/call/CallManager.java b/src/net/java/sip/communicator/impl/gui/main/call/CallManager.java index 3c99a21..71d99e3 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/CallManager.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/CallManager.java @@ -512,6 +512,56 @@ public class CallManager } /** + * Opens a call transfer dialog to transfer the given <tt>peer</tt>. + * @param peer the <tt>CallPeer</tt> to transfer + */ + public static void openCallTransferDialog(CallPeer peer) + { + final TransferCallDialog dialog + = new TransferCallDialog(peer); + + final Call call = peer.getCall(); + + /* + * Transferring a call works only when the call is in progress + * so close the dialog (if it's not already closed, of course) + * once the dialog ends. + */ + CallChangeListener callChangeListener = new CallChangeAdapter() + { + /* + * Implements + * CallChangeAdapter#callStateChanged(CallChangeEvent). + */ + public void callStateChanged(CallChangeEvent evt) + { + // we are interested only in CALL_STATE_CHANGEs + if(!evt.getEventType().equals( + CallChangeEvent.CALL_STATE_CHANGE)) + return; + + if (!CallState.CALL_IN_PROGRESS.equals(call + .getCallState())) + { + dialog.setVisible(false); + dialog.dispose(); + } + } + }; + call.addCallChangeListener(callChangeListener); + try + { + dialog.setModal(true); + dialog.pack(); + dialog.setVisible(true); + } + finally + { + call.removeCallChangeListener(callChangeListener); + } + } + + /** * Creates a call from a given Contact or a given String. */ private static class CreateCallThread diff --git a/src/net/java/sip/communicator/impl/gui/main/call/TransferActiveCallsMenu.java b/src/net/java/sip/communicator/impl/gui/main/call/TransferActiveCallsMenu.java index a640e86..31e89b3 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/TransferActiveCallsMenu.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/TransferActiveCallsMenu.java @@ -38,16 +38,16 @@ public class TransferActiveCallsMenu /** * Creates an instance of the <tt>TransferActiveCallsMenu</tt>. * @param invoker the invoker component - * @param initialPeer the initial peer we're aiming to transfer + * @param peer the initial peer we're aiming to transfer * @param callPeers a list of all possible call peers to transfer to */ public TransferActiveCallsMenu( JComponent invoker, - CallPeer initialPeer, + CallPeer peer, Collection<CallPeer> callPeers) { this.invoker = invoker; - this.initialPeer = initialPeer; + this.initialPeer = peer; this.init(); @@ -55,6 +55,24 @@ public class TransferActiveCallsMenu { this.addCallPeerItem(callPeer); } + + this.addSeparator(); + + // At the end add the possibility to transfer to anyone + // (Unattended transfer). + JMenuItem transferToMenuItem = new JMenuItem( + GuiActivator.getResources() + .getI18NString("service.gui.TRANSFER_TO")); + + transferToMenuItem.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent event) + { + CallManager.openCallTransferDialog(initialPeer); + } + }); + + this.add(transferToMenuItem); } /** diff --git a/src/net/java/sip/communicator/impl/gui/main/call/TransferCallButton.java b/src/net/java/sip/communicator/impl/gui/main/call/TransferCallButton.java index 0def6c4..7d223b4 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/TransferCallButton.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/TransferCallButton.java @@ -12,7 +12,6 @@ import java.util.*; import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.utils.*; import net.java.sip.communicator.service.protocol.*; -import net.java.sip.communicator.service.protocol.event.*; import net.java.sip.communicator.util.swing.*; /** @@ -87,51 +86,11 @@ public class TransferCallButton Collection<CallPeer> transferCalls = getTransferCallPeers(); + // We support transfer for one-to-one calls only. CallPeer initialPeer = call.getCallPeers().next(); if (transferCalls == null) - { - final TransferCallDialog dialog - = new TransferCallDialog(initialPeer); - - /* - * Transferring a call works only when the call is in progress - * so close the dialog (if it's not already closed, of course) - * once the dialog ends. - */ - CallChangeListener callChangeListener = new CallChangeAdapter() - { - /* - * Implements - * CallChangeAdapter#callStateChanged(CallChangeEvent). - */ - public void callStateChanged(CallChangeEvent evt) - { - // we are interested only in CALL_STATE_CHANGEs - if(!evt.getEventType().equals( - CallChangeEvent.CALL_STATE_CHANGE)) - return; - - if (!CallState.CALL_IN_PROGRESS.equals(call - .getCallState())) - { - dialog.setVisible(false); - dialog.dispose(); - } - } - }; - call.addCallChangeListener(callChangeListener); - try - { - dialog.setModal(true); - dialog.pack(); - dialog.setVisible(true); - } - finally - { - call.removeCallChangeListener(callChangeListener); - } - } + CallManager.openCallTransferDialog(initialPeer); else { TransferActiveCallsMenu activeCallsMenu diff --git a/src/net/java/sip/communicator/impl/gui/main/call/conference/ConferencePeerPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/conference/ConferencePeerPanel.java index 2b9904f..6b097af 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/conference/ConferencePeerPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/conference/ConferencePeerPanel.java @@ -142,10 +142,6 @@ public class ConferencePeerPanel this.setPeerName(callPeer.getDisplayName()); - // If we have any members we switch to the focus UI. - if (callPeer.getConferenceMemberCount() > 0) - setFocusUI(true); - // We initialize the status bar for call peers only. this.initStatusBar(callPeer); @@ -357,6 +353,28 @@ public class ConferencePeerPanel */ private void addConferenceMemberPanel(ConferenceMember member) { + String localUserAddress + = callPeer.getProtocolProvider().getAccountID().getAccountAddress(); + + boolean isLocalMember + = addressesAreEqual(member.getAddress(), localUserAddress); + + // We don't want to add the local member to the list of members. + if (isLocalMember) + return; + + // If we're not in a focus UI, when a new member is added we + // switch to it. + if (!isFocusUI()) + setFocusUI(true); + + // If this is the only call peer we switch to the single focus user + // interface. + if (callPeer.getCall().getCallPeerCount() > 1) + setSingleFocusUI(false); + else + setSingleFocusUI(true); + // It's already there. if (conferenceMembersPanels.containsKey(member)) return; @@ -418,26 +436,7 @@ public class ConferencePeerPanel */ public void conferenceMemberAdded(CallPeerConferenceEvent conferenceEvent) { - ConferenceMember member = conferenceEvent.getConferenceMember(); - String memberAddress = member.getAddress(); - String localUserAddress - = callPeer.getProtocolProvider().getAccountID().getAccountAddress(); - - // If we're not in a focus UI, when a new member is added we switch to it. - if (!isFocusUI() && !addressesAreEqual(memberAddress, localUserAddress)) - setFocusUI(true); - - if (conferenceEvent.getSourceCallPeer().getCall().getCallPeerCount() > 1) - setSingleFocusUI(false); - else - setSingleFocusUI(true); - - /* - * The local user isn't depicted by this ConferencePeerPanel and its - * ConferenceMemberPanels. - */ - if (!addressesAreEqual(memberAddress, localUserAddress)) - addConferenceMemberPanel(member); + addConferenceMemberPanel(conferenceEvent.getConferenceMember()); callDialog.refreshWindow(); } |