package com.qozix.mapview.viewmanagers; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import android.view.View; import android.view.ViewParent; public class ViewSetManager { private HashMap<Integer, HashSet<View>> map = new HashMap<Integer, HashSet<View>>(); public HashSet<View> getSetAtLevel( int level ) { if(!map.containsKey( level )){ HashSet<View> viewSet = new HashSet<View>(); map.put( level, viewSet ); } return map.get( level ); } public void addViewAtLevel( View view, int level ){ HashSet<View> viewSet = getSetAtLevel( level ); viewSet.add( view ); } public void removeViewAtLevel( View view, int level ) { HashSet<View> viewSet = map.get( level ); viewSet.remove( view ); } public void removeAllViewsAtLevel( int level ) { map.remove( level ); } public boolean removeView( View view ){ for(Entry<Integer, HashSet<View>> e : map.entrySet()){ HashSet<View> viewSet = e.getValue(); Iterator<View> iterator = viewSet.iterator(); while(iterator.hasNext()) { View comparison = iterator.next(); if( comparison == view ) { iterator.remove(); return true; } } } return false; } // remove all views from all sets that aren't in the view tree public void purgeViewSets() { for(Entry<Integer, HashSet<View>> e : map.entrySet()){ HashSet<View> viewSet = e.getValue(); Iterator<View> iterator = viewSet.iterator(); while(iterator.hasNext()) { View view = iterator.next(); ViewParent parent = view.getParent(); if( parent == null ) { iterator.remove(); } } } } public void updateDisplay( int level ){ for(Map.Entry<Integer, HashSet<View>> e : map.entrySet()) { Integer intendedLevel = e.getKey(); HashSet<View> viewSet = e.getValue(); int visibility = intendedLevel.equals( level ) ? View.VISIBLE : View.GONE; for(View v : viewSet) { v.setVisibility( visibility ); } } } }