/**
*
*/
package org.alldroid.forum.providers;
import java.security.InvalidParameterException;
import org.alldroid.forum.providers.MessengerPresence.Status;
import org.alldroid.forum.service.BaseForumService;
import org.xmlrpc.android.XmlRpcCallCompletedListener;
import org.xmlrpc.android.XmlRpcException;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
/**
* @author trr4rac
*/
public class ForumPresenceProvider implements ChatPresenceProvider {
private static final String TAG = ForumPresenceProvider.class.getSimpleName ( );
private BaseForumService service;
/**
*
*/
private ForumPresenceProvider ( BaseForumService service ) {
this.setService ( service );
}
private static ForumPresenceProvider instance;
public static ForumPresenceProvider getInstance ( BaseForumService service ) {
if ( instance == null ) {
instance = new ForumPresenceProvider ( service );
}
return instance;
}
/*
* (non-Javadoc)
* @see org.alldroid.forum.providers.ChatPresenceProvider#getStatus(java.lang.String)
*/
@Override
public Status getStatus ( String user ) {
if ( this.getService ( ) != null ) {
if ( this.getService ( ).isUserOnline ( user ) ) {
return Status.Online;
} else {
return Status.Offline;
}
} else {
return Status.Unknown;
}
}
/**
* @param service
* the service to set
*/
protected void setService ( BaseForumService service ) {
this.service = service;
}
/**
* @return the service
*/
public BaseForumService getService ( ) {
return service;
}
/* (non-Javadoc)
* @see org.alldroid.forum.providers.ChatPresenceProvider#getSendToIntent(java.lang.String)
*/
@Override
public Intent getSendToIntent ( String user ) {
// TODO launch PM to user
return null;
}
/* (non-Javadoc)
* @see org.alldroid.forum.providers.ChatPresenceProvider#getStatusAsync(java.lang.String, org.alldroid.forum.providers.ChatPresenceStatusCallback)
*/
@Override
public void getStatusAsync ( String user, final ChatPresenceStatusCallback callback ) {
if ( callback == null ) {
throw new InvalidParameterException ( "callback cannot be null" );
}
Bundle state = new Bundle();
try {
this.getService ( ).isUserOnlineAsync ( user, new XmlRpcCallCompletedListener(this.getService ( ).getXmlrpcClient ( ), state ) {
@Override
public void onCompletion ( Object result ) {
Boolean resultValue = ForumPresenceProvider.this.getService ( ).isUserOnlineAsyncEnd ( result );
callback.onStatusReceived ( resultValue ? Status.Online : Status.Offline );
}
});
} catch ( XmlRpcException ex ) {
Log.e(TAG,ex.getMessage ( ),ex);
}
}
}
|