Android Open Source - MConsole Player List Adapter






From Project

Back to project page MConsole.

License

The source code is released under:

MIT License

If you think the Android project MConsole listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package pl.skifo.mconsole;
/* w  ww.  j ava2 s .  c  o  m*/
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class PlayerListAdapter extends BaseAdapter {

    private Activity ctx;
    private LayoutInflater inflater;
    private ArrayList<String> playerList;
    private HashMap<String, Bitmap> avatars;
    PlayersFragment parentFragment;
    private AvatarUpdater avatarUpdater;
    
    public PlayerListAdapter(Activity ctx, PlayersFragment playersFragment) {
        this.ctx = ctx;
        parentFragment = playersFragment;
        inflater = ctx.getLayoutInflater();
        playerList = new ArrayList<String>();
        avatars = new HashMap<String, Bitmap>();
    }
    
    public synchronized void updateSet(ArrayList<String> playerList) {
        this.playerList = playerList;
        ArrayList<String> avatarsToUpdate = null;

        if (avatarUpdater != null) {
            avatarUpdater.stopRetrieval();
            avatarUpdater.interrupt();
            try {
                avatarUpdater.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            avatarUpdater = null;
        }
        
        HashMap<String, Bitmap> avatarsTmp = new HashMap<String, Bitmap>();
        
        for (String s : playerList) {
            Bitmap b = avatars.get(s);
            if (b == null) {
                if (avatarsToUpdate == null) {
                    avatarsToUpdate = new ArrayList<String>();
                }
                avatarsToUpdate.add(s);
            }
            else {
                avatarsTmp.put(s, b);
            }
        }

        avatars = avatarsTmp;
        if (avatarsToUpdate != null && avatarsToUpdate.size() > 0) {
            avatarUpdater = new AvatarUpdater(this, avatarsToUpdate);
            avatarUpdater.start();
        }    
    }
    
    @Override
    public int getCount() {
        int cnt = 0;
        synchronized (this) {
            cnt = playerList.size(); 
        }
        return cnt;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        
        if (MConsoleActivity.LOG_DEBUG) MConsoleActivity.d("PlListAdapter", "getView: ["+position+"], total in list: "+playerList.size());
        LinearLayout entry = null;
        String text = null;
        Bitmap avatar = null;
        synchronized (this) {
            if (playerList.size() > 0) {
                text = playerList.get(position);
                avatar = avatars.get(text);
            }
        }
        
        if (text != null) {
            entry = (LinearLayout) inflater.inflate(R.layout.player_list_row, null);
            if (entry != null) {
                TextView tv = (TextView) entry.findViewById(R.id.player_name_in_list);
                PlayerAdminListener l = new PlayerAdminListener(parentFragment, text);
                tv.setText(text);
                tv.setOnClickListener(l);
                ImageButton ib = (ImageButton) entry.findViewById(R.id.player_admin);
                ib.setOnClickListener(l);
                if (avatar != null) {
                    ImageView iv = (ImageView) entry.findViewById(R.id.player_face);
                    BitmapDrawable bd = new BitmapDrawable(ctx.getResources(), avatar);
                    bd.setAntiAlias(false);
                    bd.setDither(false);
                    bd.setFilterBitmap(false);
                    iv.setImageDrawable(bd);
                }
            }
        }
        return entry;
    }
    
    private static class PlayerAdminListener implements OnClickListener {
        
        private String name;
        private PlayersFragment parentFragment;
        
        public PlayerAdminListener(PlayersFragment parentFragment, String playerName) {
            name = playerName;
            this.parentFragment = parentFragment;
        }

        @Override
        public void onClick(View v) {
            if (v instanceof TextView) {
                parentFragment.showUserActionDialog(name);
            }
            else if (v instanceof ImageButton) {
                parentFragment.showUserAdminDialog(name);
            }
        }
    }

    private static class AvatarUpdater extends Thread {

        private ArrayList<String> updateList;
        private PlayerListAdapter parent;
        private boolean retrievalAborted = false;
        
        public AvatarUpdater(PlayerListAdapter playerListAdapter, ArrayList<String> avatarsToUpdate) {
            parent = playerListAdapter;
            updateList = avatarsToUpdate;
        }

        @Override
        public void run() {
            for (String s : updateList) {
                try {
                    InputStream in = (InputStream) new URL("http://s3.amazonaws.com/MinecraftSkins/"+s+".png").getContent();
                    if (in != null) {
                        Bitmap b = BitmapFactory.decodeStream(in);
                        synchronized(parent) {
                            parent.avatars.put(s, Bitmap.createBitmap(b, 8, 8, 8, 8));
                        }
                    }
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            
            synchronized(parent) {
                if (!retrievalAborted) {
                    parent.ctx.runOnUiThread(new Runnable(){
                        @Override
                        public void run() {
                            parent.notifyDataSetChanged();
                        }});
                }
            }
        }

        public void stopRetrieval() {
            retrievalAborted = true;
        }
    }

    public String[] getPlayers() {
        String[] ret = new String[0];
        synchronized(this) {
            ret = playerList.toArray(ret);
        }
        return ret;
    }
    
}




Java Source Code List

pl.skifo.mconsole.AttributedBlock.java
pl.skifo.mconsole.AttributedLine.java
pl.skifo.mconsole.AttributedString.java
pl.skifo.mconsole.BanlistDialog.java
pl.skifo.mconsole.CommandPrompt.java
pl.skifo.mconsole.CommandResponseEvaluator.java
pl.skifo.mconsole.CommandSet.java
pl.skifo.mconsole.ConfirmDialog.java
pl.skifo.mconsole.ConsoleOutputImpl.java
pl.skifo.mconsole.ConsoleOutput.java
pl.skifo.mconsole.MConsoleActivity.java
pl.skifo.mconsole.MinecraftColorScheme.java
pl.skifo.mconsole.PlayerActionTp.java
pl.skifo.mconsole.PlayerAdminBan.java
pl.skifo.mconsole.PlayerAdminMode.java
pl.skifo.mconsole.PlayerListAdapter.java
pl.skifo.mconsole.PlayersFragment.java
pl.skifo.mconsole.ResponseEvaluator.java
pl.skifo.mconsole.ResponseReceiver.java
pl.skifo.mconsole.ResponseToastGenerator.java
pl.skifo.mconsole.SayDialog.java
pl.skifo.mconsole.ServerConnector.java
pl.skifo.mconsole.ServerConsoleFragment.java
pl.skifo.mconsole.ServerConsole.java
pl.skifo.mconsole.ServerFragment.java
pl.skifo.mconsole.ServerInfo.java
pl.skifo.mconsole.ServerResponse.java
pl.skifo.mconsole.SimpleToastResponseReceiver.java
pl.skifo.mconsole.TabsPagerAdapter.java
pl.skifo.mconsole.TellDialog.java
pl.skifo.mconsole.TimeSetDialog.java
pl.skifo.mconsole.UserActionDialog.java
pl.skifo.mconsole.UserAdminDialog.java