project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/RoomListAdapter.java
changeset 7358 57a508884052
parent 7352 641f11cdd319
child 7461 38acbfdb484f
equal deleted inserted replaced
7355:5673e95ef647 7358:57a508884052
     1 package org.hedgewars.hedgeroid.netplay;
     1 package org.hedgewars.hedgeroid.netplay;
     2 
     2 
     3 import java.util.ArrayList;
     3 import java.util.ArrayList;
     4 import java.util.Collections;
     4 import java.util.Collections;
       
     5 import java.util.Comparator;
     5 import java.util.List;
     6 import java.util.List;
     6 
     7 
     7 import org.hedgewars.hedgeroid.R;
     8 import org.hedgewars.hedgeroid.R;
     8 
     9 
     9 import android.content.Context;
    10 import android.content.Context;
    10 import android.content.res.Resources;
    11 import android.content.res.Resources;
    11 import android.database.DataSetObserver;
    12 import android.database.DataSetObserver;
       
    13 import android.util.Pair;
    12 import android.view.LayoutInflater;
    14 import android.view.LayoutInflater;
    13 import android.view.View;
    15 import android.view.View;
    14 import android.view.ViewGroup;
    16 import android.view.ViewGroup;
    15 import android.widget.BaseAdapter;
    17 import android.widget.BaseAdapter;
    16 import android.widget.TextView;
    18 import android.widget.TextView;
    17 
    19 
    18 public class RoomListAdapter extends BaseAdapter {
    20 public class RoomListAdapter extends BaseAdapter {
    19 	private List<Room> rooms = new ArrayList<Room>();
    21 	private List<Pair<Room, Long>> rooms = new ArrayList<Pair<Room, Long>>();
    20 	private Context context;
    22 	private Context context;
    21 	private RoomList roomList;
    23 	private RoomList roomList;
    22 	
    24 	
    23 	private DataSetObserver observer = new DataSetObserver() {
    25 	private DataSetObserver observer = new DataSetObserver() {
    24 		@Override
    26 		@Override
    39 	public int getCount() {
    41 	public int getCount() {
    40 		return rooms.size();
    42 		return rooms.size();
    41 	}
    43 	}
    42 
    44 
    43 	public Room getItem(int position) {
    45 	public Room getItem(int position) {
    44 		return rooms.get(position);
    46 		return rooms.get(position).first;
    45 	}
    47 	}
    46 
    48 
    47 	public long getItemId(int position) {
    49 	public long getItemId(int position) {
    48 		return rooms.get(position).id;
    50 		return rooms.get(position).second;
    49 	}
    51 	}
    50 
    52 
    51 	public boolean hasStableIds() {
    53 	public boolean hasStableIds() {
    52 		return true;
    54 		return true;
    53 	}
    55 	}
    60 		this.roomList.registerObserver(observer);
    62 		this.roomList.registerObserver(observer);
    61 		reloadFromList(roomList);
    63 		reloadFromList(roomList);
    62 	}
    64 	}
    63 	
    65 	
    64 	public void invalidate() {
    66 	public void invalidate() {
    65 		rooms = new ArrayList<Room>();
       
    66 		if(roomList != null) {
    67 		if(roomList != null) {
    67 			roomList.unregisterObserver(observer);
    68 			roomList.unregisterObserver(observer);
    68 		}
    69 		}
    69 		roomList = null;
    70 		roomList = null;
    70 		notifyDataSetInvalidated();
    71 		notifyDataSetInvalidated();
    71 	}
    72 	}
    72 	
    73 	
    73 	private void reloadFromList(RoomList list) {
    74 	private void reloadFromList(RoomList list) {
    74 		rooms = new ArrayList<Room>(roomList.getMap().values());
    75 		rooms = new ArrayList<Pair<Room, Long>>(roomList.getMap().values());
    75 		Collections.sort(rooms, Collections.reverseOrder(Room.ID_COMPARATOR));
    76 		Collections.sort(rooms, RoomAgeComparator.INSTANCE);
    76 		notifyDataSetChanged();
    77 		notifyDataSetChanged();
    77 	}
    78 	}
    78 	
    79 	
    79 	private static CharSequence formatExtra(Resources res, Room room) {
    80 	private static CharSequence formatExtra(Resources res, Room room) {
    80 		String ownermsg = res.getString(R.string.roomlist_owner, room.owner);
    81 		String ownermsg = res.getString(R.string.roomlist_owner, room.owner);
    89 		if (v == null) {
    90 		if (v == null) {
    90 			LayoutInflater vi = LayoutInflater.from(context);
    91 			LayoutInflater vi = LayoutInflater.from(context);
    91 			v = vi.inflate(R.layout.listview_room, null);
    92 			v = vi.inflate(R.layout.listview_room, null);
    92 		}
    93 		}
    93 		
    94 		
    94 		Room room = rooms.get(position);
    95 		Room room = rooms.get(position).first;
    95 		int iconRes = room.inProgress ? R.drawable.roomlist_ingame : R.drawable.roomlist_preparing;
    96 		int iconRes = room.inProgress ? R.drawable.roomlist_ingame : R.drawable.roomlist_preparing;
    96 		
    97 		
    97 		if(v.findViewById(android.R.id.text1) == null) {
    98 		if(v.findViewById(android.R.id.text1) == null) {
    98 			// Tabular room list
    99 			// Tabular room list
    99 			TextView roomnameView = (TextView)v.findViewById(R.id.roomname);
   100 			TextView roomnameView = (TextView)v.findViewById(R.id.roomname);
   126 			v2.setText(formatExtra(context.getResources(), room));
   127 			v2.setText(formatExtra(context.getResources(), room));
   127 		}
   128 		}
   128 		
   129 		
   129 		return v;
   130 		return v;
   130 	}
   131 	}
       
   132 	
       
   133 	private static final class RoomAgeComparator implements Comparator<Pair<Room, Long>> {
       
   134 		public static final RoomAgeComparator INSTANCE = new RoomAgeComparator();
       
   135 		public int compare(Pair<Room, Long> lhs, Pair<Room, Long> rhs) {
       
   136 			return rhs.second.compareTo(lhs.second);
       
   137 		}
       
   138 	}
   131 }
   139 }