/**
*
*/
package org.alldroid.forum.data;
import java.net.URISyntaxException;
import java.util.List;
import org.alldroid.forum.R;
import org.alldroid.forum.net.DownloadDrawableTask;
import org.alldroid.forum.net.OnDownloadTaskCompletedListener;
import org.alldroid.forum.objects.Forum;
import org.alldroid.forum.objects.OnlineUser;
import org.alldroid.forum.objects.OnlineUsersInfo;
import org.alldroid.forum.service.BaseForumService;
import org.apache.http.client.methods.HttpGet;
import org.xmlrpc.android.XmlRpcCallCompletedListener;
import org.xmlrpc.android.XmlRpcException;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
/**
* @author trr4rac
*/
public class WhosOnlineDataAdapter extends ForumServiceBaseAdapter<OnlineUser> {
private static final String TAG = WhosOnlineDataAdapter.class.getSimpleName ( );
/**
* @param context
* @param listview
* @param service
*/
public WhosOnlineDataAdapter ( final Activity context, ListView listview, BaseForumService service ) {
super ( context , listview , service );
}
/*
* (non-Javadoc)
* @see org.alldroid.forum.data.ForumServiceBaseAdapter#getView(int, android.view.View,
* android.view.ViewGroup)
*/
@Override
public View getView ( int position, View convertView, ViewGroup parent ) {
View v = convertView;
if ( v == null ) {
LayoutInflater vi = (LayoutInflater) this.getContext ( ).getSystemService ( Context.LAYOUT_INFLATER_SERVICE );
v = vi.inflate ( R.layout.whosonlinelistitem, null );
}
OnlineUser ouser = this.getItem ( position );
if ( ouser != null ) {
// set image
if ( ouser.getIcon ( ) != null ) {
Bundle state = new Bundle ( );
state.putString ( BaseForumService.STATE_AVATAR, ouser.getIcon ( ).toString ( ) );
state.putInt ( BaseForumService.STATE_POSITION, position );
DownloadDrawableTask ddt = new DownloadDrawableTask ( );
ddt.setCredentials ( this.getService ( ).getCredentials ( ) );
final Activity act = (Activity) WhosOnlineDataAdapter.this.getContext ( );
ddt.setOnDownloadTaskCompletedListener ( new OnDownloadTaskCompletedListener<Drawable> ( ddt, state ) {
private final int position = this.getState ( ).getInt ( BaseForumService.STATE_POSITION );
@Override
public void onCompletion ( final Drawable drawable ) {
act.runOnUiThread ( new Runnable ( ) {
@Override
public void run ( ) {
View baseView = WhosOnlineDataAdapter.this.getListview ( ).getChildAt ( position );
if ( baseView != null ) {
ImageView iv = (ImageView) baseView.findViewById ( R.id.avatar );
if ( iv != null ) {
iv.setImageDrawable ( (Drawable) drawable );
}
}
}
} );
}
} );
try {
ddt.execute ( new HttpGet ( ouser.getIcon ( ).toURI ( ) ) );
} catch ( URISyntaxException ex ) {
Log.e ( TAG, ex.getMessage ( ), ex );
}
}
TextView tv = (TextView) v.findViewById ( R.id.name );
if ( tv != null ) {
tv.setText ( ouser.getUsername ( ) );
}
}
return v;
}
/*
* (non-Javadoc)
* @see org.alldroid.forum.data.ForumServiceBaseAdapter#loadData()
*/
@Override
protected void loadData ( ) {
try {
// get the users info
this.getService ( ).getOnlineUsersInfoAsync ( new XmlRpcCallCompletedListener ( this.getService ( ).getXmlrpcClient ( ) ) {
@Override
public void onCompletion ( Object result ) {
OnlineUsersInfo titems = WhosOnlineDataAdapter.this.getService ( ).getOnlineUsersInfoAsyncEnd ( result );
if ( this.getClient ( ).getAsyncException ( ) == null ) {
// check that we have the data, and that it has users
if ( titems != null && titems.getUsers ( ) != null && titems.getUsers ( ).size() > 0 ) {
WhosOnlineDataAdapter.this.setItems ( titems.getUsers ( ) );
WhosOnlineDataAdapter.this.notifyDataSetChanged ( );
} else {
// no users, so lets set
setErrorMessage ( "No registered users online" );
}
} else {
if ( WhosOnlineDataAdapter.this.getPreferences ( ).getBoolean ( R.string.advanced_debug_friendlyerrors_key, true ) ) {
setErrorMessage ( "Unable to get forums at this time, please try again later" );
} else {
setErrorMessage ( this.getClient ( ).getAsyncException ( ).getMessage ( ) );
}
}
}
} );
} catch ( XmlRpcException ex ) {
if ( WhosOnlineDataAdapter.this.getPreferences ( ).getBoolean ( R.string.advanced_debug_friendlyerrors_key, true ) ) {
setErrorMessage ( "Unable to get forums at this time, please try again later" );
} else {
setErrorMessage ( ex.getMessage ( ) );
}
}
}
}
|