aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorYana Stamcheva <yana@jitsi.org>2010-06-09 14:22:58 +0000
committerYana Stamcheva <yana@jitsi.org>2010-06-09 14:22:58 +0000
commit7d641ba1c5380a0447d9cc9e5ac0525a5f5c151b (patch)
treeec1575127359f501b092b00a05a8bbbf79d9d234 /src
parent7c5793bc7f9340faea4fbb680fd237475a8a185b (diff)
downloadjitsi-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')
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/call/CallManager.java50
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/call/TransferActiveCallsMenu.java24
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/call/TransferCallButton.java45
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/call/conference/ConferencePeerPanel.java47
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();
}