public boolean back() { Mode backMode; switch (currMode) { case Album: backMode = Mode.Artist; break; case Artist: backMode = Mode.Genre; break; case Genre: backMode = null; break; case Track: backMode = Mode.Album; break; case Dir: backMode = Mode.Dir; break; default: throw new RuntimeException(currMode.name() + " not expexted here"); } final List<Filter<? super Tables.Tracks>> filtersAddedByBack = filtersAddWithMode.get(backMode); if (backMode == null || filtersAddedByBack.isEmpty()) { return true; } else { final Filter<? super Tables.Tracks> filterAddedByBack = filtersAddedByBack.remove(filtersAddedByBack.size() - 1); filterList.post( new Runnable() { public void run() { removeFilter(filterAddedByBack); } }); change(backMode, null, false); return false; } }