project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/ObservableTreeMapAdapter.java
changeset 7476 2fb781bbdd51
equal deleted inserted replaced
7473:45b9f25ff611 7476:2fb781bbdd51
       
     1 package org.hedgewars.hedgeroid.netplay;
       
     2 
       
     3 import java.util.ArrayList;
       
     4 import java.util.Collections;
       
     5 import java.util.Comparator;
       
     6 import java.util.List;
       
     7 
       
     8 import android.database.DataSetObserver;
       
     9 import android.widget.BaseAdapter;
       
    10 
       
    11 public abstract class ObservableTreeMapAdapter<K,V> extends BaseAdapter {
       
    12 	private boolean sourceChanged = true;
       
    13 	private List<V> entries = new ArrayList<V>();
       
    14 	private ObservableTreeMap<K, V> source;
       
    15 	
       
    16 	private DataSetObserver observer = new DataSetObserver() {
       
    17 		@Override
       
    18 		public void onChanged() {
       
    19 			sourceChanged = true;
       
    20 			notifyDataSetChanged();
       
    21 		}
       
    22 		
       
    23 		@Override
       
    24 		public void onInvalidated() {
       
    25 			invalidate();
       
    26 		}
       
    27 	};
       
    28 	
       
    29 	abstract protected Comparator<V> getEntryOrder();
       
    30 	
       
    31 	protected List<V> getEntries() {
       
    32 		if(sourceChanged) {
       
    33 			entries.clear();
       
    34 			entries.addAll(source.getMap().values());
       
    35 			Collections.sort(entries, getEntryOrder());
       
    36 			sourceChanged = false;
       
    37 		}
       
    38 		return entries;
       
    39 	}
       
    40 	
       
    41 	public int getCount() {
       
    42 		return getEntries().size();
       
    43 	}
       
    44 
       
    45 	public void setSource(ObservableTreeMap<K,V> source) {
       
    46 		if(this.source != null) {
       
    47 			this.source.unregisterObserver(observer);
       
    48 		}
       
    49 		this.source = source;
       
    50 		this.source.registerObserver(observer);
       
    51 		sourceChanged = true;
       
    52 		notifyDataSetChanged();
       
    53 	}
       
    54 	
       
    55 	public void invalidate() {
       
    56 		if(source != null) {
       
    57 			source.unregisterObserver(observer);
       
    58 		}
       
    59 		source = null;
       
    60 		notifyDataSetInvalidated();
       
    61 	}
       
    62 }