Adds Re-request authorization menu item in the right button menu.

Adds "Waiting authorization" and "Not authorized" status to the contact list when needed.
cusax-fix
Yana Stamcheva 14 years ago
parent 5fe56ff6b0
commit 873c42602a

@ -110,6 +110,8 @@ service.gui.icons.WINDOW_RESIZE_ICON=resources/images/impl/gui/common/windowResi
service.gui.icons.LO_VIDEO_ICON=resources/images/impl/gui/common/loVideoIcon.png
service.gui.icons.SD_VIDEO_ICON=resources/images/impl/gui/common/sdVideoIcon.png
service.gui.icons.HD_VIDEO_ICON=resources/images/impl/gui/common/hdVideoIcon.png
service.gui.icons.UNAUTHORIZED_CONTACT_PHOTO=resources/images/impl/gui/common/unauthorizedContact.png
service.gui.icons.UNAUTHORIZED_CONTACT_16x16=resources/images/impl/gui/common/unauthorizedContact16x16.png
# Status icons
service.gui.statusicons.USER_ONLINE_ICON=resources/images/impl/gui/common/statusicons/online.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

@ -324,6 +324,7 @@ service.gui.NO_CONTACTS_FOUND_SHORT=No matching contacts found.
service.gui.NO_MESSAGE=No message
service.gui.NO_GROUP_CHAT_ACCOUNT_AVAILABLE=No accounts, supporting multi user chat found. Check jitsi.org for more information on which protocols support multi user chat.
service.gui.NO_ONLINE_TELEPHONY_ACCOUNT=At least one online telephony account is needed in order to make a call. Please login to one of your telephony accounts and try again.
service.gui.NOT_AUTHORIZED=Not authorized
service.gui.NON_EMPTY_CHAT_WINDOW_CLOSE=You're trying to close a chat with a non-sent message. Are you sure you want to close this chat?
service.gui.NON_EXISTING_USER_ID=The {0} server does not recognize specified user id.
service.gui.NOT_IN_CONTACT_LIST_GROUP_NAME=NotInContactList
@ -358,6 +359,7 @@ service.gui.READY=Ready
service.gui.REASON=Reason
service.gui.RECEIVED=received
service.gui.RECONNECTION_LIMIT_EXCEEDED=You have have been disconnecting and reconnecting to the server too fast. The following account: User name: {0}, Server name: {1} is temporarily banned and would have to wait a bit before trying to login again.
service.gui.RE_REQUEST_AUTHORIZATION=Re-request authorization
service.gui.REFERRED_STATUS=Referred
service.gui.REJECT=&Reject
service.gui.REMIND_ME_LATER=Remind me later
@ -471,6 +473,7 @@ service.gui.VOICEMAIL_TITLE=Voice messages
service.gui.VOICEMAIL_TOOLTIP=Voice messages for:
service.gui.VOICEMAIL_TIP=Click the call button to hear your messages.
service.gui.VOLUME_CONTROL_TOOL_TIP=Adjust volume
service.gui.WAITING_AUTHORIZATION=Waiting for authorization
service.gui.WARNING=Warning
service.gui.YES=Yes
service.gui.YESTERDAY=Yesterday

@ -17,6 +17,7 @@
import net.java.sip.communicator.impl.gui.customcontrols.*;
import net.java.sip.communicator.impl.gui.event.*;
import net.java.sip.communicator.impl.gui.main.*;
import net.java.sip.communicator.impl.gui.main.authorization.*;
import net.java.sip.communicator.impl.gui.main.call.*;
import net.java.sip.communicator.impl.gui.main.chat.*;
import net.java.sip.communicator.impl.gui.main.chat.history.*;
@ -26,6 +27,7 @@
import net.java.sip.communicator.service.gui.*;
import net.java.sip.communicator.service.gui.Container;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.OperationSetExtendedAuthorizations.SubscriptionStatus;
import net.java.sip.communicator.util.*;
import net.java.sip.communicator.util.skin.*;
import net.java.sip.communicator.util.swing.*;
@ -188,6 +190,20 @@ public class MetaContactRightButtonMenu
= new JMenuItem(GuiActivator.getResources()
.getI18NString("service.gui.VIEW_HISTORY"));
/**
* Multi protocol contact authorization request menu.
*/
private final SIPCommMenu multiContactRequestAuthMenu
= new SIPCommMenu(GuiActivator.getResources()
.getI18NString("service.gui.RE_REQUEST_AUTHORIZATION"));
/**
* Authorization request menu item.
*/
private final JMenuItem requestAuthMenuItem
= new JMenuItem(GuiActivator.getResources()
.getI18NString("service.gui.RE_REQUEST_AUTHORIZATION"));
/**
* The <tt>MetaContact</tt> over which the right button was pressed.
*/
@ -228,6 +244,11 @@ public class MetaContactRightButtonMenu
*/
private static final String regionDesktopSharingPrefix = "shareRegionScreen:";
/**
* The prefix for full screen desktop sharing menu.
*/
private static final String requestAuthPrefix = "requestAuth:";
/**
* The contact to move when the move menu has been chosen.
*/
@ -254,6 +275,11 @@ public class MetaContactRightButtonMenu
*/
private final TreeContactList contactList;
/**
* The first unsubscribed contact we found.
*/
private Contact firstUnsubscribedContact = null;
/**
* Creates an instance of ContactRightButtonMenu.
* @param contactItem The MetaContact for which the menu is opened
@ -404,6 +430,26 @@ private void init()
+ protocolProvider.getProtocolName(),
protocolIcon));
}
OperationSetExtendedAuthorizations authOpSet
= protocolProvider.getOperationSet(
OperationSetExtendedAuthorizations.class);
if (authOpSet != null
&& authOpSet.getSubscriptionStatus(contact) != null
&& !authOpSet.getSubscriptionStatus(contact)
.equals(SubscriptionStatus.Subscribed))
{
if (firstUnsubscribedContact == null)
firstUnsubscribedContact = contact;
multiContactRequestAuthMenu.add(
createMenuItem( contactAddress,
requestAuthPrefix
+ contact.getAddress()
+ protocolProvider.getProtocolName(),
protocolIcon));
}
}
}
@ -478,6 +524,32 @@ private void init()
add(viewHistoryItem);
addSeparator();
Contact defaultContact = metaContact.getDefaultContact();
int authRequestItemCount = multiContactRequestAuthMenu.getItemCount();
// If we have more than one request to make.
if (authRequestItemCount > 1)
{
this.add(multiContactRequestAuthMenu);
}
// If we have more than one protocol contacts and only one need
// authorization or we have only one contact that needs authorization.
else if (authRequestItemCount == 1
|| (metaContact.getContactCount() == 1
&& defaultContact.getProtocolProvider()
.getOperationSet(OperationSetExtendedAuthorizations.class)
!= null)
&& !defaultContact.getProtocolProvider()
.getOperationSet(OperationSetExtendedAuthorizations.class)
.getSubscriptionStatus(defaultContact).equals(
SubscriptionStatus.Subscribed))
{
this.add(requestAuthMenuItem);
this.requestAuthMenuItem.setName("requestAuth");
this.requestAuthMenuItem.addActionListener(this);
}
initPluginComponents();
sendMessageItem.setName("sendMessage");
@ -766,6 +838,18 @@ else if (itemName.equals("viewHistory"))
history.setVisible(true);
}
}
else if (itemName.equals("requestAuth"))
{
// If we have more than one protocol contacts, but just one of them
// needs authorization.
if (firstUnsubscribedContact != null)
contact = firstUnsubscribedContact;
// If we have only one protocol contact and it needs authorization.
else
contact = metaContact.getDefaultContact();
requestAuthorization(contact);
}
else if (itemName.startsWith(moveToPrefix))
{
MetaContactListManager.moveMetaContactToGroup(
@ -853,6 +937,13 @@ else if (itemName.startsWith(regionDesktopSharingPrefix))
contact.getProtocolProvider(),
contact.getAddress());
}
else if (itemName.startsWith(requestAuthPrefix))
{
contact = getContactFromMetaContact(
itemName.substring(requestAuthPrefix.length()));
requestAuthorization(contact);
}
}
/**
@ -1091,6 +1182,12 @@ public void loadSkin()
callContactMenu.setIcon(new ImageIcon(
ImageLoader.getImage(ImageLoader.CALL_16x16_ICON)));
requestAuthMenuItem.setIcon(new ImageIcon(
ImageLoader.getImage(ImageLoader.UNAUTHORIZED_CONTACT_16x16)));
multiContactRequestAuthMenu.setIcon(new ImageIcon(
ImageLoader.getImage(ImageLoader.UNAUTHORIZED_CONTACT_16x16)));
}
/**
@ -1124,4 +1221,52 @@ private boolean hasContactCapabilities(
return false;
}
/**
* Requests authorization for contact.
*
* @param contact the contact for which we request authorization
*/
private void requestAuthorization(final Contact contact)
{
final OperationSetExtendedAuthorizations authOpSet
= contact.getProtocolProvider().getOperationSet(
OperationSetExtendedAuthorizations.class);
if (authOpSet == null)
return;
final AuthorizationRequest request = new AuthorizationRequest();
final RequestAuthorizationDialog dialog
= new RequestAuthorizationDialog(mainFrame, contact, request);
new Thread()
{
public void run()
{
int returnCode = dialog.showDialog();
if(returnCode == RequestAuthorizationDialog.OK_RETURN_CODE)
{
request.setReason(dialog.getRequestReason());
try
{
authOpSet.reRequestAuthorization(request, contact);
}
catch (OperationFailedException e)
{
new ErrorDialog(mainFrame,
GuiActivator.getResources()
.getI18NString(
"service.gui.RE_REQUEST_AUTHORIZATION"),
e.getMessage(),
ErrorDialog.WARNING)
.showDialog();
}
}
}
}.start();
}
}

@ -15,6 +15,7 @@
import net.java.sip.communicator.impl.gui.utils.*;
import net.java.sip.communicator.service.contactlist.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.OperationSetExtendedAuthorizations.SubscriptionStatus;
import net.java.sip.communicator.util.*;
/**
@ -56,6 +57,12 @@ public class MetaUIContact
*/
private UIGroup parentUIGroup;
/**
* The subscription status of this meta contact. It will be turned to true
* when all the contact details are checked.
*/
boolean subscribed = false;
/**
* Creates an instance of <tt>MetaUIContact</tt> by specifying the
* underlying <tt>MetaContact</tt>, on which it's based.
@ -260,7 +267,16 @@ public ImageIcon getAvatar(
// If there's no avatar we have nothing more to do here.
if((avatarBytes == null) || (avatarBytes.length <= 0))
{
if (!subscribed)
{
return ImageUtils.getScaledRoundedIcon(
ImageLoader.getImage(ImageLoader.UNAUTHORIZED_CONTACT_PHOTO),
width, height);
}
return null;
}
// If the cell is selected we return a zoomed version of the avatar
// image.
@ -304,19 +320,56 @@ public ImageIcon getAvatar(
*/
public String getDisplayDetails()
{
String statusMessage = null;
String displayDetails = null;
Iterator<Contact> protoContacts = metaContact.getContacts();
String subscriptionDetails = null;
while (protoContacts.hasNext())
{
Contact protoContact = protoContacts.next();
statusMessage = protoContact.getStatusMessage();
if (statusMessage != null && statusMessage.length() > 0)
OperationSetExtendedAuthorizations authOpSet
= protoContact.getProtocolProvider()
.getOperationSet(OperationSetExtendedAuthorizations.class);
if (authOpSet != null
&& authOpSet.getSubscriptionStatus(protoContact) != null
&& !authOpSet.getSubscriptionStatus(protoContact)
.equals(SubscriptionStatus.Subscribed))
{
SubscriptionStatus status
= authOpSet.getSubscriptionStatus(protoContact);
if (status.equals(SubscriptionStatus.SubscriptionPending))
subscriptionDetails = GuiActivator.getResources()
.getI18NString("service.gui.WAITING_AUTHORIZATION");
else if (status.equals(SubscriptionStatus.NotSubscribed))
subscriptionDetails = GuiActivator.getResources()
.getI18NString("service.gui.NOT_AUTHORIZED");
}
else if (protoContact.getStatusMessage() != null
&& protoContact.getStatusMessage().length() > 0)
{
subscribed = true;
displayDetails = protoContact.getStatusMessage();
break;
}
else
{
subscribed = true;
}
}
return statusMessage;
if ((displayDetails == null
|| displayDetails.length() <= 0)
&& !subscribed
&& subscriptionDetails != null
&& subscriptionDetails.length() > 0)
displayDetails = subscriptionDetails;
return displayDetails;
}
/**

@ -829,6 +829,18 @@ public class ImageLoader
public static final ImageID DEFAULT_USER_PHOTO
= new ImageID("service.gui.DEFAULT_USER_PHOTO");
/**
* The image used, when a contact is unauthorized.
*/
public static final ImageID UNAUTHORIZED_CONTACT_PHOTO
= new ImageID("service.gui.icons.UNAUTHORIZED_CONTACT_PHOTO");
/**
* Re-request authorization menu item icon.
*/
public static final ImageID UNAUTHORIZED_CONTACT_16x16
= new ImageID("service.gui.icons.UNAUTHORIZED_CONTACT_16x16");
/**
* The image used to draw a frame around the contact photo image.
*/

Loading…
Cancel
Save