WhosOnlineDataAdapter.java :  » App » alldroid » org » alldroid » forum » data » Android Open Source

Android Open Source » App » alldroid 
alldroid » org » alldroid » forum » data » WhosOnlineDataAdapter.java
/**
 *
 */
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 ( ) );
      }
    }
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.