Fixes initial status set for protocols and UI to reflect changes.

fix-message-formatting
Damian Minkov 12 years ago
parent ac886ebbed
commit 0bf621360b

@ -54,6 +54,8 @@ public class GlobalDisplayDetailsActivator
*/
static GlobalDisplayDetailsImpl displayDetailsImpl;
static GlobalStatusServiceImpl globalStatusService;
/**
* Initialize and start file service
*
@ -74,9 +76,10 @@ public void start(BundleContext bc)
displayDetailsImpl,
null);
globalStatusService = new GlobalStatusServiceImpl();
bundleContext.registerService(
GlobalStatusService.class.getName(),
new GlobalStatusServiceImpl(),
globalStatusService,
null);
}
@ -191,15 +194,17 @@ public void serviceChanged(ServiceEvent event)
return;
}
ProtocolProviderService pps = (ProtocolProviderService) service;
switch (event.getType())
{
case ServiceEvent.REGISTERED:
((ProtocolProviderService) service)
.addRegistrationStateChangeListener(displayDetailsImpl);
pps.addRegistrationStateChangeListener(displayDetailsImpl);
pps.addRegistrationStateChangeListener(globalStatusService);
break;
case ServiceEvent.UNREGISTERING:
((ProtocolProviderService) service)
.removeRegistrationStateChangeListener(displayDetailsImpl);
pps.removeRegistrationStateChangeListener(displayDetailsImpl);
pps.removeRegistrationStateChangeListener(globalStatusService);
break;
}
}

@ -6,6 +6,7 @@
package net.java.sip.communicator.impl.globaldisplaydetails;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.event.*;
import net.java.sip.communicator.service.protocol.globalstatus.*;
import net.java.sip.communicator.util.*;
import net.java.sip.communicator.util.account.*;
@ -22,7 +23,8 @@
* @author Damian Minkov
*/
public class GlobalStatusServiceImpl
implements GlobalStatusService
implements GlobalStatusService,
RegistrationStateChangeListener
{
/**
* The object used for logging.
@ -626,6 +628,34 @@ private void saveStatusInformation(
}
}
/**
* Waits for providers to register and then checks for its last status
* saved if any and used it to restore its status.
* @param evt a <tt>RegistrationStateChangeEvent</tt> which describes the
*/
@Override
public void registrationStateChanged(RegistrationStateChangeEvent evt)
{
if(!evt.getNewState().equals(RegistrationState.REGISTERED))
return;
ProtocolProviderService pps = evt.getProvider();
PresenceStatus status = getLastPresenceStatus(pps);
if(status == null)
{
// lets publish just online
status = AccountStatusUtils.getOnlineStatus(pps);
}
if (status != null
&& status.getStatus() >= PresenceStatus.ONLINE_THRESHOLD)
{
publishStatus(pps, status);
}
}
/**
* Publishes the given status to the given presence operation set.
*/

@ -369,17 +369,18 @@ public void updateStatus(ProtocolProviderService protocolProvider)
if (accountMenu == null)
return;
PresenceStatus presenceStatus;
PresenceStatus presenceStatus;
if (!protocolProvider.isRegistered())
presenceStatus = accountMenu.getOfflineStatus();
else
{
presenceStatus
= AccountStatusUtils.getLastPresenceStatus(protocolProvider);
if (presenceStatus == null)
presenceStatus = accountMenu.getOnlineStatus();
}
if (!protocolProvider.isRegistered())
presenceStatus = accountMenu.getOfflineStatus();
else
{
presenceStatus
= AccountStatusUtils.getPresenceStatus(protocolProvider);
if (presenceStatus == null)
presenceStatus = accountMenu.getOnlineStatus();
}
accountMenu.updateStatus(presenceStatus);

@ -74,29 +74,10 @@ public ReadonlyStatusItem(ProtocolProviderService protocolProvider)
this.setToolTipText(tooltip);
OperationSetPresence presence
= protocolProvider.getOperationSet(OperationSetPresence.class);
Iterator<PresenceStatus> statusIterator
= presence.getSupportedStatusSet();
while (statusIterator.hasNext())
{
PresenceStatus status = statusIterator.next();
int connectivity = status.getStatus();
if (connectivity < 1)
{
this.offlineStatus = status;
}
else if ((onlineStatus != null
&& (onlineStatus.getStatus() < connectivity))
|| (onlineStatus == null
&& (connectivity > 50 && connectivity < 80)))
{
this.onlineStatus = status;
}
}
this.offlineStatus
= AccountStatusUtils.getOfflineStatus(protocolProvider);
this.onlineStatus
= AccountStatusUtils.getOnlineStatus(protocolProvider);
this.setSelectedStatus(offlineStatus);
updateStatus(offlineStatus);

@ -15,6 +15,7 @@
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.util.account.*;
import net.java.sip.communicator.util.skin.*;
/**
@ -89,29 +90,10 @@ public StatusSelectorMenu( String text,
this.presence
= protocolProvider.getOperationSet(OperationSetPresence.class);
// presence can be not supported
if(this.presence != null)
{
Iterator<PresenceStatus> statusIterator
= this.presence.getSupportedStatusSet();
while (statusIterator.hasNext())
{
PresenceStatus status = statusIterator.next();
int connectivity = status.getStatus();
if (connectivity < 1)
{
this.offlineStatus = status;
}
else if ((onlineStatus != null
&& (onlineStatus.getStatus() < connectivity))
|| (onlineStatus == null
&& (connectivity > 50 && connectivity < 80)))
{
this.onlineStatus = status;
}
}
}
this.onlineStatus
= AccountStatusUtils.getOnlineStatus(protocolProvider);
this.offlineStatus
= AccountStatusUtils.getOfflineStatus(protocolProvider);
loadSkin();
}

@ -912,12 +912,6 @@ public void registrationStateChanged(RegistrationStateChangeEvent evt)
}
else if(evt.getNewState() == RegistrationState.REGISTERED)
{
fireProviderStatusChangeEvent(
currentStatus,
parentProvider
.getJabberStatusEnum()
.getStatus(JabberStatusEnum.AVAILABLE));
createContactPhotoPresenceListener();
createAccountPhotoPresenceInterceptor();
}

@ -1260,25 +1260,6 @@ else if (tlsRequired)
RegistrationState.REGISTERED,
RegistrationStateChangeEvent.REASON_NOT_SPECIFIED, null);
/* The initial presence message is sent by smack stack and does not
* include priority information. In case the original status is
* AVAILABLE, we will not update our presence information (such as
* our priority) when we registered.
*/
OperationSetPersistentPresenceJabberImpl opSet =
(OperationSetPersistentPresenceJabberImpl)
this.getOperationSet(OperationSetPersistentPresence.class);
try
{
opSet.publishPresenceStatus(getJabberStatusEnum().getStatus(
JabberStatusEnum.AVAILABLE), "");
}
catch(Exception e)
{
logger.error("Failed to publish presence status");
}
return ConnectState.STOP_TRYING;
}
else

@ -10,6 +10,8 @@
import net.java.sip.communicator.service.protocol.globalstatus.*;
import net.java.sip.communicator.util.*;
import java.util.*;
/**
* The <tt>AccountStatusUtils</tt> provides utility methods for account status
* management.
@ -75,6 +77,95 @@ public static PresenceStatus getLastPresenceStatus(
return null;
}
/**
* Returns the current status for protocol provider.
*
* @param protocolProvider the protocol provider
* @return the current status for protocol provider
*/
public static PresenceStatus getPresenceStatus(
ProtocolProviderService protocolProvider)
{
PresenceStatus status = null;
OperationSetPresence opSet
= protocolProvider.getOperationSet(OperationSetPresence.class);
if(opSet != null)
status = opSet.getPresenceStatus();
return status;
}
/**
* Returns the online status of provider.
* @param protocolProvider the protocol provider
* @return the online status of provider.
*/
public static PresenceStatus getOnlineStatus(
ProtocolProviderService protocolProvider)
{
PresenceStatus onlineStatus = null;
OperationSetPresence presence
= protocolProvider.getOperationSet(OperationSetPresence.class);
// presence can be not supported
if(presence != null)
{
Iterator<PresenceStatus> statusIterator
= presence.getSupportedStatusSet();
while (statusIterator.hasNext())
{
PresenceStatus status = statusIterator.next();
int connectivity = status.getStatus();
if ((onlineStatus != null
&& (onlineStatus.getStatus() < connectivity))
|| (onlineStatus == null
&& (connectivity > 50 && connectivity < 80)))
{
onlineStatus = status;
}
}
}
return onlineStatus;
}
/**
* Returns the offline status of provider.
* @param protocolProvider the protocol provider
* @return the offline status of provider.
*/
public static PresenceStatus getOfflineStatus(
ProtocolProviderService protocolProvider)
{
PresenceStatus offlineStatus = null;
OperationSetPresence presence
= protocolProvider.getOperationSet(OperationSetPresence.class);
// presence can be not supported
if(presence != null)
{
Iterator<PresenceStatus> statusIterator
= presence.getSupportedStatusSet();
while (statusIterator.hasNext())
{
PresenceStatus status = statusIterator.next();
int connectivity = status.getStatus();
if (connectivity < 1)
{
offlineStatus = status;
}
}
}
return offlineStatus;
}
/**
* Returns the last contact status saved in the configuration.
*

Loading…
Cancel
Save