package org.wikipedia.navtab;
import android.support.annotation.DrawableRes;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
import android.support.v4.app.Fragment;
import org.wikipedia.R;
import org.wikipedia.feed.FeedFragment;
import org.wikipedia.history.HistoryFragment;
import org.wikipedia.model.EnumCode;
import org.wikipedia.model.EnumCodeMap;
import org.wikipedia.nearby.NearbyFragment;
import org.wikipedia.readinglist.ReadingListsFragment;
public enum NavTab implements EnumCode {
EXPLORE(R.string.nav_item_feed, R.drawable.ic_globe) {
@NonNull @Override public Fragment newInstance() {
return FeedFragment.newInstance();
}
},
READING_LISTS(R.string.nav_item_reading_lists, R.drawable.ic_bookmark_white_24dp) {
@NonNull @Override public Fragment newInstance() {
return ReadingListsFragment.newInstance();
}
},
HISTORY(R.string.nav_item_history, R.drawable.ic_restore_black_24dp) {
@NonNull @Override public Fragment newInstance() {
return HistoryFragment.newInstance();
}
},
NEARBY(R.string.nav_item_nearby, R.drawable.ic_explore_black_24dp) {
@NonNull @Override public Fragment newInstance() {
return NearbyFragment.newInstance();
}
};
private static final EnumCodeMap<NavTab> MAP = new EnumCodeMap<>(NavTab.class);
@StringRes private final int text;
@DrawableRes private final int icon;
@NonNull public static NavTab of(int code) {
return MAP.get(code);
}
public static int size() {
return MAP.size();
}
@StringRes public int text() {
return text;
}
@DrawableRes public int icon() {
return icon;
}
@NonNull public abstract Fragment newInstance();
@Override public int code() {
// This enumeration is not marshalled so tying declaration order to presentation order is
// convenient and consistent.
return ordinal();
}
NavTab(@StringRes int text, @DrawableRes int icon) {
this.text = text;
this.icon = icon;
}
}