Fixes away and dnd status selection behavior when offline, in a way that

the accounts get connected. Fixes setting DND global status for SIP
accounts. Moves the GlobalStatusServiceImpl to the globaldetails bundle
in order to be easily used from jitsi-android.
cusax-fix
yanas 13 years ago
parent ae0e19fcb3
commit b91c31bc33

@ -7,7 +7,9 @@
package net.java.sip.communicator.impl.globaldisplaydetails; package net.java.sip.communicator.impl.globaldisplaydetails;
import net.java.sip.communicator.service.globaldisplaydetails.*; import net.java.sip.communicator.service.globaldisplaydetails.*;
import net.java.sip.communicator.service.gui.*;
import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.globalstatus.*;
import net.java.sip.communicator.util.*; import net.java.sip.communicator.util.*;
import org.jitsi.service.configuration.*; import org.jitsi.service.configuration.*;
@ -37,6 +39,16 @@ public class GlobalDisplayDetailsActivator
*/ */
private static ConfigurationService configService; private static ConfigurationService configService;
/**
* The alert UI service.
*/
private static AlertUIService alertUIService;
/**
* The UI service.
*/
private static UIService uiService;
/** /**
* The display details implementation. * The display details implementation.
*/ */
@ -61,6 +73,11 @@ public void start(BundleContext bc)
GlobalDisplayDetailsService.class.getName(), GlobalDisplayDetailsService.class.getName(),
displayDetailsImpl, displayDetailsImpl,
null); null);
bundleContext.registerService(
GlobalStatusService.class.getName(),
new GlobalStatusServiceImpl(),
null);
} }
/** /**
@ -111,6 +128,42 @@ public static ConfigurationService getConfigurationService()
return configService; return configService;
} }
/**
* Returns the <tt>AlertUIService</tt> obtained from the bundle
* context.
* @return the <tt>AlertUIService</tt> obtained from the bundle
* context
*/
public static AlertUIService getAlertUIService()
{
if(alertUIService == null)
{
alertUIService
= ServiceUtils.getService(
bundleContext,
AlertUIService.class);
}
return alertUIService;
}
/**
* Returns the <tt>UIService</tt> obtained from the bundle
* context.
* @return the <tt>UIService</tt> obtained from the bundle
* context
*/
public static UIService getUIService()
{
if(uiService == null)
{
uiService
= ServiceUtils.getService(
bundleContext,
UIService.class);
}
return uiService;
}
/** /**
* Implements the <tt>ServiceListener</tt> method. Verifies whether the * Implements the <tt>ServiceListener</tt> method. Verifies whether the
* passed event concerns a <tt>ProtocolProviderService</tt> and adds or * passed event concerns a <tt>ProtocolProviderService</tt> and adds or

@ -3,10 +3,8 @@
* *
* Distributable under LGPL license. See terms of license at gnu.org. * Distributable under LGPL license. See terms of license at gnu.org.
*/ */
package net.java.sip.communicator.impl.gui.main.presence; package net.java.sip.communicator.impl.globaldisplaydetails;
import net.java.sip.communicator.impl.gui.*;
import net.java.sip.communicator.plugin.desktoputil.*;
import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.globalstatus.*; import net.java.sip.communicator.service.protocol.globalstatus.*;
import net.java.sip.communicator.util.*; import net.java.sip.communicator.util.*;
@ -45,6 +43,8 @@ public PresenceStatus getLastPresenceStatus(
{ {
String lastStatus = getLastStatusString(protocolProvider); String lastStatus = getLastStatusString(protocolProvider);
PresenceStatus status = null;
if (lastStatus != null) if (lastStatus != null)
{ {
OperationSetPresence presence OperationSetPresence presence
@ -54,16 +54,62 @@ public PresenceStatus getLastPresenceStatus(
return null; return null;
Iterator<PresenceStatus> i = presence.getSupportedStatusSet(); Iterator<PresenceStatus> i = presence.getSupportedStatusSet();
PresenceStatus status;
// Check if there's such status in the supported presence status
// set.
while (i.hasNext()) while (i.hasNext())
{ {
status = i.next(); PresenceStatus nextStatus = i.next();
if (status.getStatusName().equals(lastStatus))
return status; if (nextStatus.getStatusName().equals(lastStatus))
status = nextStatus;
}
// If we haven't found the last status in the protocol provider
// supported status set, we'll have a look for a corresponding
// global status and its protocol representation.
if (status == null)
{
if (lastStatus.equals(GlobalStatusEnum.ONLINE_STATUS))
{
status = getPresenceStatus(
protocolProvider,
PresenceStatus.AVAILABLE_THRESHOLD,
PresenceStatus.EAGER_TO_COMMUNICATE_THRESHOLD);
}
else if (lastStatus.equals(GlobalStatusEnum.AWAY_STATUS))
{
status = getPresenceStatus(
protocolProvider,
PresenceStatus.AWAY_THRESHOLD,
PresenceStatus.AVAILABLE_THRESHOLD);
}
else if (lastStatus
.equals(GlobalStatusEnum.DO_NOT_DISTURB_STATUS))
{
status = getPresenceStatus(
protocolProvider,
PresenceStatus.ONLINE_THRESHOLD,
PresenceStatus.AWAY_THRESHOLD);
}
else if (lastStatus
.equals(GlobalStatusEnum.FREE_FOR_CHAT_STATUS))
{
status = getPresenceStatus(
protocolProvider,
PresenceStatus.AVAILABLE_THRESHOLD,
PresenceStatus.MAX_STATUS_VALUE);
}
else if (lastStatus.equals(GlobalStatusEnum.OFFLINE_STATUS))
{
status = getPresenceStatus(
protocolProvider,
0,
GlobalStatusEnum.ONLINE_THRESHOLD);
}
} }
} }
return null; return status;
} }
/** /**
@ -79,7 +125,7 @@ public String getLastStatusString(ProtocolProviderService protocolProvider)
String lastStatus = null; String lastStatus = null;
ConfigurationService configService ConfigurationService configService
= GuiActivator.getConfigurationService(); = GlobalDisplayDetailsActivator.getConfigurationService();
String prefix = "net.java.sip.communicator.impl.gui.accounts"; String prefix = "net.java.sip.communicator.impl.gui.accounts";
List<String> accounts List<String> accounts
= configService.getPropertyNamesByPrefix(prefix, true); = configService.getPropertyNamesByPrefix(prefix, true);
@ -121,7 +167,7 @@ public void publishStatus(
= protocolProvider.getOperationSet(OperationSetPresence.class); = protocolProvider.getOperationSet(OperationSetPresence.class);
LoginManager loginManager LoginManager loginManager
= GuiActivator.getUIService().getLoginManager(); = GlobalDisplayDetailsActivator.getUIService().getLoginManager();
RegistrationState registrationState RegistrationState registrationState
= protocolProvider.getRegistrationState(); = protocolProvider.getRegistrationState();
@ -147,7 +193,7 @@ else if (registrationState != RegistrationState.REGISTERED
&& registrationState != RegistrationState.AUTHENTICATING && registrationState != RegistrationState.AUTHENTICATING
&& status.isOnline()) && status.isOnline())
{ {
GuiActivator.getUIService().getLoginManager() GlobalDisplayDetailsActivator.getUIService().getLoginManager()
.login(protocolProvider); .login(protocolProvider);
} }
else if (!status.isOnline() else if (!status.isOnline()
@ -176,12 +222,11 @@ public void publishStatus(GlobalStatusEnum globalStatus)
String itemName = globalStatus.getStatusName(); String itemName = globalStatus.getStatusName();
Iterator<ProtocolProviderService> pProviders Iterator<ProtocolProviderService> pProviders
= GuiActivator.getUIService().getMainFrame().getProtocolProviders(); = AccountUtils.getRegisteredProviders().iterator();
while (pProviders.hasNext()) while (pProviders.hasNext())
{ {
ProtocolProviderService protocolProvider ProtocolProviderService protocolProvider = pProviders.next();
= pProviders.next();
if(itemName.equals(GlobalStatusEnum.ONLINE_STATUS)) if(itemName.equals(GlobalStatusEnum.ONLINE_STATUS))
{ {
@ -189,8 +234,8 @@ public void publishStatus(GlobalStatusEnum globalStatus)
{ {
saveStatusInformation(protocolProvider, itemName); saveStatusInformation(protocolProvider, itemName);
GuiActivator.getUIService().getLoginManager() GlobalDisplayDetailsActivator.getUIService()
.login(protocolProvider); .getLoginManager().login(protocolProvider);
} }
else else
{ {
@ -282,27 +327,51 @@ else if (itemName.equals(GlobalStatusEnum.OFFLINE_STATUS))
} }
else if (itemName.equals(GlobalStatusEnum.FREE_FOR_CHAT_STATUS)) else if (itemName.equals(GlobalStatusEnum.FREE_FOR_CHAT_STATUS))
{ {
// we search for highest available status here if(!protocolProvider.isRegistered())
publishStatus( {
protocolProvider, saveStatusInformation(protocolProvider, itemName);
PresenceStatus.AVAILABLE_THRESHOLD,
PresenceStatus.MAX_STATUS_VALUE); GlobalDisplayDetailsActivator.getUIService()
.getLoginManager().login(protocolProvider);
}
else
// we search for highest available status here
publishStatus(
protocolProvider,
PresenceStatus.AVAILABLE_THRESHOLD,
PresenceStatus.MAX_STATUS_VALUE);
} }
else if (itemName.equals(GlobalStatusEnum.DO_NOT_DISTURB_STATUS)) else if (itemName.equals(GlobalStatusEnum.DO_NOT_DISTURB_STATUS))
{ {
// status between online and away is DND if(!protocolProvider.isRegistered())
publishStatus( {
protocolProvider, saveStatusInformation(protocolProvider, itemName);
PresenceStatus.ONLINE_THRESHOLD,
PresenceStatus.AWAY_THRESHOLD); GlobalDisplayDetailsActivator.getUIService()
.getLoginManager().login(protocolProvider);
}
else
// status between online and away is DND
publishStatus(
protocolProvider,
PresenceStatus.ONLINE_THRESHOLD,
PresenceStatus.AWAY_THRESHOLD);
} }
else if (itemName.equals(GlobalStatusEnum.AWAY_STATUS)) else if (itemName.equals(GlobalStatusEnum.AWAY_STATUS))
{ {
// a status in the away interval if(!protocolProvider.isRegistered())
publishStatus( {
protocolProvider, saveStatusInformation(protocolProvider, itemName);
PresenceStatus.AWAY_THRESHOLD,
PresenceStatus.AVAILABLE_THRESHOLD); GlobalDisplayDetailsActivator.getUIService()
.getLoginManager().login(protocolProvider);
}
else
// a status in the away interval
publishStatus(
protocolProvider,
PresenceStatus.AWAY_THRESHOLD,
PresenceStatus.AVAILABLE_THRESHOLD);
} }
} }
} }
@ -323,12 +392,35 @@ private void publishStatus(
if (!protocolProvider.isRegistered()) if (!protocolProvider.isRegistered())
return; return;
PresenceStatus status = getPresenceStatus( protocolProvider,
floorStatusValue,
ceilStatusValue);
if (status != null)
{
OperationSetPresence presence
= protocolProvider
.getOperationSet(OperationSetPresence.class);
new PublishPresenceStatusThread(protocolProvider, presence, status)
.start();
this.saveStatusInformation( protocolProvider,
status.getStatusName());
}
}
private PresenceStatus getPresenceStatus(
ProtocolProviderService protocolProvider,
int floorStatusValue,
int ceilStatusValue)
{
OperationSetPresence presence OperationSetPresence presence
= protocolProvider = protocolProvider
.getOperationSet(OperationSetPresence.class); .getOperationSet(OperationSetPresence.class);
if (presence == null) if (presence == null)
return; return null;
Iterator<PresenceStatus> statusSet Iterator<PresenceStatus> statusSet
= presence.getSupportedStatusSet(); = presence.getSupportedStatusSet();
@ -357,14 +449,7 @@ private void publishStatus(
} }
} }
if (status != null) return status;
{
new PublishPresenceStatusThread(protocolProvider, presence, status)
.start();
this.saveStatusInformation( protocolProvider,
status.getStatusName());
}
} }
/** /**
@ -380,7 +465,7 @@ private void saveStatusInformation(
String statusName) String statusName)
{ {
ConfigurationService configService ConfigurationService configService
= GuiActivator.getConfigurationService(); = GlobalDisplayDetailsActivator.getConfigurationService();
String prefix = "net.java.sip.communicator.impl.gui.accounts"; String prefix = "net.java.sip.communicator.impl.gui.accounts";
@ -473,46 +558,55 @@ public void run()
== OperationFailedException.GENERAL_ERROR) == OperationFailedException.GENERAL_ERROR)
{ {
String msgText = String msgText =
GuiActivator.getResources().getI18NString( GlobalDisplayDetailsActivator.getResources()
.getI18NString(
"service.gui.STATUS_CHANGE_GENERAL_ERROR", "service.gui.STATUS_CHANGE_GENERAL_ERROR",
new String[]{ new String[]{
protocolProvider.getAccountID().getUserID(), protocolProvider.getAccountID().getUserID(),
protocolProvider.getAccountID().getService()}); protocolProvider.getAccountID().getService()});
new ErrorDialog(null, GlobalDisplayDetailsActivator.getAlertUIService()
GuiActivator.getResources().getI18NString( .showAlertDialog(
"service.gui.GENERAL_ERROR"), msgText, e1) GlobalDisplayDetailsActivator.getResources()
.showDialog(); .getI18NString("service.gui.GENERAL_ERROR"),
msgText,
e1);
} }
else if (e1.getErrorCode() else if (e1.getErrorCode()
== OperationFailedException.NETWORK_FAILURE) == OperationFailedException.NETWORK_FAILURE)
{ {
String msgText = String msgText =
GuiActivator.getResources().getI18NString( GlobalDisplayDetailsActivator.getResources()
.getI18NString(
"service.gui.STATUS_CHANGE_NETWORK_FAILURE", "service.gui.STATUS_CHANGE_NETWORK_FAILURE",
new String[]{ new String[]{
protocolProvider.getAccountID().getUserID(), protocolProvider.getAccountID().getUserID(),
protocolProvider.getAccountID().getService()}); protocolProvider.getAccountID().getService()});
new ErrorDialog(null, msgText, GlobalDisplayDetailsActivator.getAlertUIService()
GuiActivator.getResources().getI18NString( .showAlertDialog(
"service.gui.NETWORK_FAILURE"), e1) msgText,
.showDialog(); GlobalDisplayDetailsActivator.getResources()
.getI18NString("service.gui.NETWORK_FAILURE"),
e1);
} }
else if (e1.getErrorCode() else if (e1.getErrorCode()
== OperationFailedException.PROVIDER_NOT_REGISTERED) == OperationFailedException.PROVIDER_NOT_REGISTERED)
{ {
String msgText = String msgText =
GuiActivator.getResources().getI18NString( GlobalDisplayDetailsActivator.getResources()
.getI18NString(
"service.gui.STATUS_CHANGE_NETWORK_FAILURE", "service.gui.STATUS_CHANGE_NETWORK_FAILURE",
new String[]{ new String[]{
protocolProvider.getAccountID().getUserID(), protocolProvider.getAccountID().getUserID(),
protocolProvider.getAccountID().getService()}); protocolProvider.getAccountID().getService()});
new ErrorDialog(null, GlobalDisplayDetailsActivator.getAlertUIService()
GuiActivator.getResources().getI18NString( .showAlertDialog(
"service.gui.NETWORK_FAILURE"), msgText, e1) GlobalDisplayDetailsActivator.getResources()
.showDialog(); .getI18NString("service.gui.NETWORK_FAILURE"),
msgText,
e1);
} }
logger.error("Error - changing status", e1); logger.error("Error - changing status", e1);
} }

@ -10,7 +10,9 @@ Import-Package: org.jitsi.service.resources,
org.osgi.framework, org.osgi.framework,
org.jitsi.util, org.jitsi.util,
net.java.sip.communicator.service.protocol, net.java.sip.communicator.service.protocol,
net.java.sip.communicator.service.protocol.globalstatus,
net.java.sip.communicator.service.protocol.event, net.java.sip.communicator.service.protocol.event,
net.java.sip.communicator.service.gui,
net.java.sip.communicator.util.account net.java.sip.communicator.util.account
Export-Package: net.java.sip.communicator.service.globaldisplaydetails, Export-Package: net.java.sip.communicator.service.globaldisplaydetails,
net.java.sip.communicator.service.globaldisplaydetails.event net.java.sip.communicator.service.globaldisplaydetails.event

@ -10,7 +10,6 @@
import net.java.sip.communicator.impl.gui.main.account.*; import net.java.sip.communicator.impl.gui.main.account.*;
import net.java.sip.communicator.impl.gui.main.contactlist.*; import net.java.sip.communicator.impl.gui.main.contactlist.*;
import net.java.sip.communicator.impl.gui.main.presence.*;
import net.java.sip.communicator.impl.gui.utils.*; import net.java.sip.communicator.impl.gui.utils.*;
import net.java.sip.communicator.service.browserlauncher.*; import net.java.sip.communicator.service.browserlauncher.*;
import net.java.sip.communicator.service.callhistory.*; import net.java.sip.communicator.service.callhistory.*;
@ -136,13 +135,6 @@ public void start(BundleContext bContext)
try try
{ {
if (logger.isInfoEnabled())
logger.info("GlobalStatus Service ...[REGISTERED]");
bundleContext.registerService(GlobalStatusService.class.getName(),
new GlobalStatusServiceImpl(),
null);
alertUIService = new AlertUIServiceImpl(); alertUIService = new AlertUIServiceImpl();
// Registers an implementation of the AlertUIService. // Registers an implementation of the AlertUIService.
bundleContext.registerService( AlertUIService.class.getName(), bundleContext.registerService( AlertUIService.class.getName(),

@ -14,6 +14,7 @@
import net.java.sip.communicator.service.contactlist.*; import net.java.sip.communicator.service.contactlist.*;
import net.java.sip.communicator.service.gui.event.*; import net.java.sip.communicator.service.gui.event.*;
import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.util.account.*;
/** /**
* The <tt>UIService</tt> offers generic access to the graphical user interface * The <tt>UIService</tt> offers generic access to the graphical user interface
@ -465,4 +466,11 @@ public ContactList createContactListComponent(
* @return a collection of all currently in progress calls. * @return a collection of all currently in progress calls.
*/ */
public Collection<Call> getInProgressCalls(); public Collection<Call> getInProgressCalls();
/**
* Returns the login manager used by the current UI implementation.
*
* @return the login manager used by the current UI implementation
*/
public LoginManager getLoginManager();
} }

@ -8,6 +8,7 @@ Import-Package: org.osgi.framework,
org.jitsi.service.resources, org.jitsi.service.resources,
net.java.sip.communicator.service.resources, net.java.sip.communicator.service.resources,
net.java.sip.communicator.util, net.java.sip.communicator.util,
net.java.sip.communicator.util.account,
net.java.sip.communicator.service.contactsource, net.java.sip.communicator.service.contactsource,
net.java.sip.communicator.service.contactlist, net.java.sip.communicator.service.contactlist,
net.java.sip.communicator.service.protocol net.java.sip.communicator.service.protocol

@ -34,12 +34,12 @@ public class GlobalStatusEnum
/** /**
* Indicates that the user is connected and eager to communicate. * Indicates that the user is connected and eager to communicate.
*/ */
public static final String FREE_FOR_CHAT_STATUS = "FreeForChat"; public static final String FREE_FOR_CHAT_STATUS = "Free For Chat";
/** /**
* Indicates that the user is connected and eager to communicate. * Indicates that the user is connected and eager to communicate.
*/ */
public static final String DO_NOT_DISTURB_STATUS = "DoNotDisturb"; public static final String DO_NOT_DISTURB_STATUS = "Do Not Disturb";
/** /**
* The Online status. Indicate that the user is able and willing to * The Online status. Indicate that the user is able and willing to

Loading…
Cancel
Save