private void init() { database.addObserver(this); for (final Mode currMode : Mode.values()) { getButton(currMode) .setOnClickListener( new View.OnClickListener() { public void onClick(View v) { filters.clear(); filterListAdapter.clear(); for (Filter<? super Tables.Tracks> permanentFilter : permanentFilters) { filterListAdapter.add(permanentFilter); } List<Filter<? super Tables.Tracks>> filtersToRemove = new ArrayList<Filter<? super Tables.Tracks>>(); for (Filter<? super Tables.Tracks> filterAddedWithMode : filtersAddWithMode.get(currMode)) { if (!permanentFilters.contains(filterAddedWithMode)) { filtersToRemove.add(filterAddedWithMode); } } filtersAddWithMode.get(currMode).removeAll(filtersToRemove); change(currMode, null, false); } }); } }
/** * @param toMode * @param filter - filter to add, can be null */ public void change(Mode toMode, final Filter<? super Tables.Tracks> filter, boolean permanant) { if (filter != null) { filtersAddWithMode.get(currMode).add(filter); addFilter(filter, permanant); } currMode = toMode; for (final Mode aMode : Mode.values()) { final ImageView button = getButton(aMode); button.post( new Runnable() { public void run() { button.setImageResource( aMode.equals(currMode) ? aMode.drawableActive : aMode.drawable); } }); } update(); }
public FileChooser(Mode currMode, final TurtlePlayer tp, Player listActivity) { for (Mode mode : Mode.values()) { filtersAddWithMode.put(mode, new ArrayList<Filter<? super Tables.Tracks>>()); } this.currMode = currMode; this.database = tp.db; this.preferences = tp.playlist.preferences; this.listActivity = listActivity; tp.playlist.preferences.addObserver( new PreferencesObserver() { public void changed(AbstractKey<?, ?> key) { if (key.equals(Keys.MEDIA_DIR)) { final String mediaDir = tp.playlist.preferences.get(Keys.MEDIA_DIR); getFilter() .accept( new TurtleFilterVisitor<Tables.Tracks, Void>() { public Void visit(DirFilter dirFilter) { if (!dirFilter.filtersInPath(mediaDir)) { removeFilter(dirFilter); update(); } return null; } public <T, Z> Void visit( FieldFilter<? super Tables.Tracks, Z, T> fieldFilter) { return null; } public Void visit(FilterSet<? super Tables.Tracks> filterSet) { return null; } public Void visit(NotFilter<? super Tables.Tracks> notFilter) { return null; } }); } } public String getId() { return "OutdatedFilterUpdater"; } }); filterList = (ListView) listActivity.findViewById(R.id.filterlist); filterListAdapter = new FilterListAdapter( listActivity.getApplicationContext(), new ArrayList<Filter<? super Tables.Tracks>>(getFilters())) { @Override protected void removeFilter(final Filter<? super Tables.Tracks> filter) { FileChooser.this.removeFilter(filter); update(); } @Override protected void chooseFilter(Filter<? super Tables.Tracks> filter) { filterChoosen(filter); } }; filterList.setAdapter(filterListAdapter); listAdapter = new DefaultAdapter<Instance>( listActivity.getApplicationContext(), new ArrayList<Instance>(), listActivity, false, InstanceFormatter.SHORT); listActivity.setListAdapter(listAdapter); change(currMode, null, false); init(); }