package me.devsaki.hentoid.ui;
import android.content.Context;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import me.devsaki.hentoid.R;
import me.devsaki.hentoid.util.Helper;
import me.devsaki.hentoid.util.LogHelper;
/**
* Created by avluis on 04/11/2016.
* Populates Drawer Menu Contents from a resource string array.
* This includes generation the required class names, menu item title
* and menu item icon.
* This class is expecting a list of activities named like so:
* '[activity_name]' - it then builds the actual Activity class:
* '[activity_name]Activity.class'.
* From this list, it will also build the activity title and corresponding
* activity drawable with the following resource id:
* 'R.drawable.ic_menu_[activity_name]' - make sure this drawable actually exists.
*/
public class DrawerMenuContents {
public static final String FIELD_TITLE = "title";
public static final String FIELD_ICON = "icon";
private static final String TAG = LogHelper.makeLogTag(DrawerMenuContents.class);
private String[] activityName;
private String[] activityCode;
private Class[] activities;
private ArrayList<Map<String, ?>> items;
public DrawerMenuContents(Context cxt) {
setActivityList(
cxt.getResources().getStringArray(R.array.nav_drawer_names),
cxt.getResources().getStringArray(R.array.nav_drawer_codes));
populateActivities();
}
private void setActivityList(String[] names, String[] codes) {
this.activityName = names;
this.activityCode = codes;
}
private void populateActivities() {
activities = new Class[activityCode.length];
items = new ArrayList<>(activityCode.length);
String activity,
title,
resourcePrefix = "ic_menu_";
int resource;
Class<?> cls = null;
for (int i = 0; i < activityCode.length; i++) {
activity = activityCode[i];
title = activityName[i].toUpperCase(Locale.US);
resource = Helper.getId(resourcePrefix + activityCode[i].toLowerCase(Locale.US),
R.drawable.class);
try {
cls = Class.forName("me.devsaki.hentoid.activities." + activity + "Activity");
} catch (ClassNotFoundException e) {
LogHelper.e(TAG, e, "Class not found");
}
activities[i] = cls;
items.add(populateDrawerItem(title, resource));
}
}
private Map<String, ?> populateDrawerItem(String title, int icon) {
HashMap<String, Object> item = new HashMap<>();
item.put(FIELD_TITLE, title);
item.put(FIELD_ICON, icon);
return item;
}
public Class getActivity(int position) {
return activities[position];
}
public List<Map<String, ?>> getItems() {
return items;
}
public int getPosition(Class activityClass) {
for (int i = 0; i < activities.length; i++) {
if (activities[i].equals(activityClass)) {
return i;
}
}
return -1;
}
}