diff --git a/src/net/java/sip/communicator/impl/globaldisplaydetails/GlobalDisplayDetailsActivator.java b/src/net/java/sip/communicator/impl/globaldisplaydetails/GlobalDisplayDetailsActivator.java
index 0c5c78d2d..55dc3df84 100644
--- a/src/net/java/sip/communicator/impl/globaldisplaydetails/GlobalDisplayDetailsActivator.java
+++ b/src/net/java/sip/communicator/impl/globaldisplaydetails/GlobalDisplayDetailsActivator.java
@@ -7,7 +7,9 @@
package net.java.sip.communicator.impl.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.globalstatus.*;
import net.java.sip.communicator.util.*;
import org.jitsi.service.configuration.*;
@@ -37,6 +39,16 @@ public class GlobalDisplayDetailsActivator
*/
private static ConfigurationService configService;
+ /**
+ * The alert UI service.
+ */
+ private static AlertUIService alertUIService;
+
+ /**
+ * The UI service.
+ */
+ private static UIService uiService;
+
/**
* The display details implementation.
*/
@@ -61,6 +73,11 @@ public void start(BundleContext bc)
GlobalDisplayDetailsService.class.getName(),
displayDetailsImpl,
null);
+
+ bundleContext.registerService(
+ GlobalStatusService.class.getName(),
+ new GlobalStatusServiceImpl(),
+ null);
}
/**
@@ -111,6 +128,42 @@ public static ConfigurationService getConfigurationService()
return configService;
}
+ /**
+ * Returns the AlertUIService obtained from the bundle
+ * context.
+ * @return the AlertUIService obtained from the bundle
+ * context
+ */
+ public static AlertUIService getAlertUIService()
+ {
+ if(alertUIService == null)
+ {
+ alertUIService
+ = ServiceUtils.getService(
+ bundleContext,
+ AlertUIService.class);
+ }
+ return alertUIService;
+ }
+
+ /**
+ * Returns the UIService obtained from the bundle
+ * context.
+ * @return the UIService obtained from the bundle
+ * context
+ */
+ public static UIService getUIService()
+ {
+ if(uiService == null)
+ {
+ uiService
+ = ServiceUtils.getService(
+ bundleContext,
+ UIService.class);
+ }
+ return uiService;
+ }
+
/**
* Implements the ServiceListener method. Verifies whether the
* passed event concerns a ProtocolProviderService and adds or
diff --git a/src/net/java/sip/communicator/impl/gui/main/presence/GlobalStatusServiceImpl.java b/src/net/java/sip/communicator/impl/globaldisplaydetails/GlobalStatusServiceImpl.java
similarity index 71%
rename from src/net/java/sip/communicator/impl/gui/main/presence/GlobalStatusServiceImpl.java
rename to src/net/java/sip/communicator/impl/globaldisplaydetails/GlobalStatusServiceImpl.java
index eb09a41b7..616c200de 100644
--- a/src/net/java/sip/communicator/impl/gui/main/presence/GlobalStatusServiceImpl.java
+++ b/src/net/java/sip/communicator/impl/globaldisplaydetails/GlobalStatusServiceImpl.java
@@ -3,10 +3,8 @@
*
* 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.globalstatus.*;
import net.java.sip.communicator.util.*;
@@ -45,6 +43,8 @@ public PresenceStatus getLastPresenceStatus(
{
String lastStatus = getLastStatusString(protocolProvider);
+ PresenceStatus status = null;
+
if (lastStatus != null)
{
OperationSetPresence presence
@@ -54,16 +54,62 @@ public PresenceStatus getLastPresenceStatus(
return null;
Iterator i = presence.getSupportedStatusSet();
- PresenceStatus status;
+ // Check if there's such status in the supported presence status
+ // set.
while (i.hasNext())
{
- status = i.next();
- if (status.getStatusName().equals(lastStatus))
- return status;
+ PresenceStatus nextStatus = i.next();
+
+ 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;
ConfigurationService configService
- = GuiActivator.getConfigurationService();
+ = GlobalDisplayDetailsActivator.getConfigurationService();
String prefix = "net.java.sip.communicator.impl.gui.accounts";
List accounts
= configService.getPropertyNamesByPrefix(prefix, true);
@@ -121,7 +167,7 @@ public void publishStatus(
= protocolProvider.getOperationSet(OperationSetPresence.class);
LoginManager loginManager
- = GuiActivator.getUIService().getLoginManager();
+ = GlobalDisplayDetailsActivator.getUIService().getLoginManager();
RegistrationState registrationState
= protocolProvider.getRegistrationState();
@@ -147,7 +193,7 @@ else if (registrationState != RegistrationState.REGISTERED
&& registrationState != RegistrationState.AUTHENTICATING
&& status.isOnline())
{
- GuiActivator.getUIService().getLoginManager()
+ GlobalDisplayDetailsActivator.getUIService().getLoginManager()
.login(protocolProvider);
}
else if (!status.isOnline()
@@ -176,12 +222,11 @@ public void publishStatus(GlobalStatusEnum globalStatus)
String itemName = globalStatus.getStatusName();
Iterator pProviders
- = GuiActivator.getUIService().getMainFrame().getProtocolProviders();
+ = AccountUtils.getRegisteredProviders().iterator();
while (pProviders.hasNext())
{
- ProtocolProviderService protocolProvider
- = pProviders.next();
+ ProtocolProviderService protocolProvider = pProviders.next();
if(itemName.equals(GlobalStatusEnum.ONLINE_STATUS))
{
@@ -189,8 +234,8 @@ public void publishStatus(GlobalStatusEnum globalStatus)
{
saveStatusInformation(protocolProvider, itemName);
- GuiActivator.getUIService().getLoginManager()
- .login(protocolProvider);
+ GlobalDisplayDetailsActivator.getUIService()
+ .getLoginManager().login(protocolProvider);
}
else
{
@@ -282,27 +327,51 @@ else if (itemName.equals(GlobalStatusEnum.OFFLINE_STATUS))
}
else if (itemName.equals(GlobalStatusEnum.FREE_FOR_CHAT_STATUS))
{
- // we search for highest available status here
- publishStatus(
- protocolProvider,
- PresenceStatus.AVAILABLE_THRESHOLD,
- PresenceStatus.MAX_STATUS_VALUE);
+ if(!protocolProvider.isRegistered())
+ {
+ saveStatusInformation(protocolProvider, itemName);
+
+ 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))
{
- // status between online and away is DND
- publishStatus(
- protocolProvider,
- PresenceStatus.ONLINE_THRESHOLD,
- PresenceStatus.AWAY_THRESHOLD);
+ if(!protocolProvider.isRegistered())
+ {
+ saveStatusInformation(protocolProvider, itemName);
+
+ 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))
{
- // a status in the away interval
- publishStatus(
- protocolProvider,
- PresenceStatus.AWAY_THRESHOLD,
- PresenceStatus.AVAILABLE_THRESHOLD);
+ if(!protocolProvider.isRegistered())
+ {
+ saveStatusInformation(protocolProvider, itemName);
+
+ 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())
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
= protocolProvider
.getOperationSet(OperationSetPresence.class);
if (presence == null)
- return;
+ return null;
Iterator statusSet
= presence.getSupportedStatusSet();
@@ -357,14 +449,7 @@ private void publishStatus(
}
}
- if (status != null)
- {
- new PublishPresenceStatusThread(protocolProvider, presence, status)
- .start();
-
- this.saveStatusInformation( protocolProvider,
- status.getStatusName());
- }
+ return status;
}
/**
@@ -380,7 +465,7 @@ private void saveStatusInformation(
String statusName)
{
ConfigurationService configService
- = GuiActivator.getConfigurationService();
+ = GlobalDisplayDetailsActivator.getConfigurationService();
String prefix = "net.java.sip.communicator.impl.gui.accounts";
@@ -473,46 +558,55 @@ public void run()
== OperationFailedException.GENERAL_ERROR)
{
String msgText =
- GuiActivator.getResources().getI18NString(
+ GlobalDisplayDetailsActivator.getResources()
+ .getI18NString(
"service.gui.STATUS_CHANGE_GENERAL_ERROR",
new String[]{
protocolProvider.getAccountID().getUserID(),
protocolProvider.getAccountID().getService()});
- new ErrorDialog(null,
- GuiActivator.getResources().getI18NString(
- "service.gui.GENERAL_ERROR"), msgText, e1)
- .showDialog();
+ GlobalDisplayDetailsActivator.getAlertUIService()
+ .showAlertDialog(
+ GlobalDisplayDetailsActivator.getResources()
+ .getI18NString("service.gui.GENERAL_ERROR"),
+ msgText,
+ e1);
}
else if (e1.getErrorCode()
== OperationFailedException.NETWORK_FAILURE)
{
String msgText =
- GuiActivator.getResources().getI18NString(
+ GlobalDisplayDetailsActivator.getResources()
+ .getI18NString(
"service.gui.STATUS_CHANGE_NETWORK_FAILURE",
new String[]{
protocolProvider.getAccountID().getUserID(),
protocolProvider.getAccountID().getService()});
- new ErrorDialog(null, msgText,
- GuiActivator.getResources().getI18NString(
- "service.gui.NETWORK_FAILURE"), e1)
- .showDialog();
+ GlobalDisplayDetailsActivator.getAlertUIService()
+ .showAlertDialog(
+ msgText,
+ GlobalDisplayDetailsActivator.getResources()
+ .getI18NString("service.gui.NETWORK_FAILURE"),
+ e1);
}
else if (e1.getErrorCode()
== OperationFailedException.PROVIDER_NOT_REGISTERED)
{
String msgText =
- GuiActivator.getResources().getI18NString(
+ GlobalDisplayDetailsActivator.getResources()
+ .getI18NString(
"service.gui.STATUS_CHANGE_NETWORK_FAILURE",
new String[]{
protocolProvider.getAccountID().getUserID(),
protocolProvider.getAccountID().getService()});
- new ErrorDialog(null,
- GuiActivator.getResources().getI18NString(
- "service.gui.NETWORK_FAILURE"), msgText, e1)
- .showDialog();
+ GlobalDisplayDetailsActivator.getAlertUIService()
+ .showAlertDialog(
+ GlobalDisplayDetailsActivator.getResources()
+ .getI18NString("service.gui.NETWORK_FAILURE"),
+ msgText,
+ e1);
}
logger.error("Error - changing status", e1);
}
diff --git a/src/net/java/sip/communicator/impl/globaldisplaydetails/globaldisplaydetails.manifest.mf b/src/net/java/sip/communicator/impl/globaldisplaydetails/globaldisplaydetails.manifest.mf
index 102ea9d26..91c101ec1 100644
--- a/src/net/java/sip/communicator/impl/globaldisplaydetails/globaldisplaydetails.manifest.mf
+++ b/src/net/java/sip/communicator/impl/globaldisplaydetails/globaldisplaydetails.manifest.mf
@@ -10,7 +10,9 @@ Import-Package: org.jitsi.service.resources,
org.osgi.framework,
org.jitsi.util,
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.gui,
net.java.sip.communicator.util.account
Export-Package: net.java.sip.communicator.service.globaldisplaydetails,
net.java.sip.communicator.service.globaldisplaydetails.event
diff --git a/src/net/java/sip/communicator/impl/gui/GuiActivator.java b/src/net/java/sip/communicator/impl/gui/GuiActivator.java
index 446d65a78..c8b7fb41d 100644
--- a/src/net/java/sip/communicator/impl/gui/GuiActivator.java
+++ b/src/net/java/sip/communicator/impl/gui/GuiActivator.java
@@ -10,7 +10,6 @@
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.presence.*;
import net.java.sip.communicator.impl.gui.utils.*;
import net.java.sip.communicator.service.browserlauncher.*;
import net.java.sip.communicator.service.callhistory.*;
@@ -136,13 +135,6 @@ public void start(BundleContext bContext)
try
{
- if (logger.isInfoEnabled())
- logger.info("GlobalStatus Service ...[REGISTERED]");
-
- bundleContext.registerService(GlobalStatusService.class.getName(),
- new GlobalStatusServiceImpl(),
- null);
-
alertUIService = new AlertUIServiceImpl();
// Registers an implementation of the AlertUIService.
bundleContext.registerService( AlertUIService.class.getName(),
diff --git a/src/net/java/sip/communicator/service/gui/UIService.java b/src/net/java/sip/communicator/service/gui/UIService.java
index 9ad472c51..68ab90734 100644
--- a/src/net/java/sip/communicator/service/gui/UIService.java
+++ b/src/net/java/sip/communicator/service/gui/UIService.java
@@ -14,6 +14,7 @@
import net.java.sip.communicator.service.contactlist.*;
import net.java.sip.communicator.service.gui.event.*;
import net.java.sip.communicator.service.protocol.*;
+import net.java.sip.communicator.util.account.*;
/**
* The UIService offers generic access to the graphical user interface
@@ -465,4 +466,11 @@ public ContactList createContactListComponent(
* @return a collection of all currently in progress calls.
*/
public Collection getInProgressCalls();
+
+ /**
+ * Returns the login manager used by the current UI implementation.
+ *
+ * @return the login manager used by the current UI implementation
+ */
+ public LoginManager getLoginManager();
}
diff --git a/src/net/java/sip/communicator/service/gui/gui.manifest.mf b/src/net/java/sip/communicator/service/gui/gui.manifest.mf
index 7778af2a2..5bbfcbcce 100644
--- a/src/net/java/sip/communicator/service/gui/gui.manifest.mf
+++ b/src/net/java/sip/communicator/service/gui/gui.manifest.mf
@@ -8,6 +8,7 @@ Import-Package: org.osgi.framework,
org.jitsi.service.resources,
net.java.sip.communicator.service.resources,
net.java.sip.communicator.util,
+ net.java.sip.communicator.util.account,
net.java.sip.communicator.service.contactsource,
net.java.sip.communicator.service.contactlist,
net.java.sip.communicator.service.protocol
diff --git a/src/net/java/sip/communicator/service/protocol/globalstatus/GlobalStatusEnum.java b/src/net/java/sip/communicator/service/protocol/globalstatus/GlobalStatusEnum.java
index 95650df10..ac039aeab 100644
--- a/src/net/java/sip/communicator/service/protocol/globalstatus/GlobalStatusEnum.java
+++ b/src/net/java/sip/communicator/service/protocol/globalstatus/GlobalStatusEnum.java
@@ -34,12 +34,12 @@ public class GlobalStatusEnum
/**
* 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.
*/
- 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