project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/RoomListAdapter.java
changeset 7352 641f11cdd319
parent 7349 12fdfd2038d4
child 7358 57a508884052
equal deleted inserted replaced
7349:12fdfd2038d4 7352:641f11cdd319
     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.Collection;
       
     5 import java.util.Collections;
     4 import java.util.Collections;
     6 import java.util.List;
     5 import java.util.List;
     7 import java.util.Map;
       
     8 
     6 
     9 import org.hedgewars.hedgeroid.R;
     7 import org.hedgewars.hedgeroid.R;
    10 import org.hedgewars.hedgeroid.netplay.RoomList.Observer;
       
    11 
     8 
    12 import android.content.Context;
     9 import android.content.Context;
    13 import android.content.res.Resources;
    10 import android.content.res.Resources;
       
    11 import android.database.DataSetObserver;
    14 import android.view.LayoutInflater;
    12 import android.view.LayoutInflater;
    15 import android.view.View;
    13 import android.view.View;
    16 import android.view.ViewGroup;
    14 import android.view.ViewGroup;
    17 import android.widget.BaseAdapter;
    15 import android.widget.BaseAdapter;
    18 import android.widget.TextView;
    16 import android.widget.TextView;
    19 
    17 
    20 public class RoomListAdapter extends BaseAdapter implements Observer {
    18 public class RoomListAdapter extends BaseAdapter {
    21 	private List<Room> rooms = new ArrayList<Room>();
    19 	private List<Room> rooms = new ArrayList<Room>();
    22 	private Context context;
    20 	private Context context;
       
    21 	private RoomList roomList;
       
    22 	
       
    23 	private DataSetObserver observer = new DataSetObserver() {
       
    24 		@Override
       
    25 		public void onChanged() {
       
    26 			reloadFromList(roomList);
       
    27 		}
       
    28 		
       
    29 		@Override
       
    30 		public void onInvalidated() {
       
    31 			invalidate();
       
    32 		}
       
    33 	};
    23 	
    34 	
    24 	public RoomListAdapter(Context context) {
    35 	public RoomListAdapter(Context context) {
    25 		this.context = context;
    36 		this.context = context;
    26 	}
    37 	}
    27 	
    38 	
    28 	public int getCount() {
    39 	public int getCount() {
    29 		return rooms.size();
    40 		return rooms.size();
    30 	}
    41 	}
    31 
    42 
    32 	public Object getItem(int position) {
    43 	public Room getItem(int position) {
    33 		return rooms.get(position);
    44 		return rooms.get(position);
    34 	}
    45 	}
    35 
    46 
    36 	public long getItemId(int position) {
    47 	public long getItemId(int position) {
    37 		return rooms.get(position).id;
    48 		return rooms.get(position).id;
    39 
    50 
    40 	public boolean hasStableIds() {
    51 	public boolean hasStableIds() {
    41 		return true;
    52 		return true;
    42 	}
    53 	}
    43 
    54 
    44 	public void setList(Collection<Room> rooms) {
    55 	public void setList(RoomList roomList) {
    45 		this.rooms = new ArrayList<Room>(rooms);
    56 		if(this.roomList != null) {
    46 		Collections.reverse(this.rooms); // We want to show the newest rooms first
    57 			this.roomList.unregisterObserver(observer);
       
    58 		}
       
    59 		this.roomList = roomList;
       
    60 		this.roomList.registerObserver(observer);
       
    61 		reloadFromList(roomList);
       
    62 	}
       
    63 	
       
    64 	public void invalidate() {
       
    65 		rooms = new ArrayList<Room>();
       
    66 		if(roomList != null) {
       
    67 			roomList.unregisterObserver(observer);
       
    68 		}
       
    69 		roomList = null;
       
    70 		notifyDataSetInvalidated();
       
    71 	}
       
    72 	
       
    73 	private void reloadFromList(RoomList list) {
       
    74 		rooms = new ArrayList<Room>(roomList.getMap().values());
       
    75 		Collections.sort(rooms, Collections.reverseOrder(Room.ID_COMPARATOR));
    47 		notifyDataSetChanged();
    76 		notifyDataSetChanged();
    48 	}
    77 	}
    49 	
    78 	
    50 	private static CharSequence formatExtra(Resources res, Room room) {
    79 	private static CharSequence formatExtra(Resources res, Room room) {
    51 		String ownermsg = res.getString(R.string.roomlist_owner, room.owner);
    80 		String ownermsg = res.getString(R.string.roomlist_owner, room.owner);
    97 			v2.setText(formatExtra(context.getResources(), room));
   126 			v2.setText(formatExtra(context.getResources(), room));
    98 		}
   127 		}
    99 		
   128 		
   100 		return v;
   129 		return v;
   101 	}
   130 	}
   102 
       
   103 	public void itemAdded(Map<String, Room> map, String key, Room value) {
       
   104 		setList(map.values());
       
   105 	}
       
   106 
       
   107 	public void itemRemoved(Map<String, Room> map, String key, Room oldValue) {
       
   108 		setList(map.values());
       
   109 	}
       
   110 
       
   111 	public void itemReplaced(Map<String, Room> map, String key, Room oldValue,
       
   112 			Room newValue) {
       
   113 		setList(map.values());
       
   114 	}
       
   115 }
   131 }